moved profiler and improved calllistener apis slightly

This commit is contained in:
Joakim Eriksson 2013-03-05 13:14:34 +01:00
parent 1c77ffca72
commit 77abbc3834
7 changed files with 54 additions and 41 deletions

View File

@ -46,10 +46,10 @@ import se.sics.mspsim.core.EventListener;
import se.sics.mspsim.core.EventSource;
import se.sics.mspsim.core.MSP430;
import se.sics.mspsim.core.Profiler;
import se.sics.mspsim.profiler.SimpleProfiler;
import se.sics.mspsim.ui.CPUHeatMap;
import se.sics.mspsim.ui.WindowManager;
import se.sics.mspsim.util.ComponentRegistry;
import se.sics.mspsim.util.SimpleProfiler;
import se.sics.mspsim.util.StackMonitor;
/**

View File

@ -38,10 +38,10 @@
package se.sics.mspsim.core;
import java.io.PrintStream;
import se.sics.mspsim.profiler.SimpleProfiler;
import se.sics.mspsim.util.ArrayUtils;
import se.sics.mspsim.util.ComponentRegistry;
import se.sics.mspsim.util.MapTable;
import se.sics.mspsim.util.SimpleProfiler;
public class MSP430 extends MSP430Core {

View File

@ -48,6 +48,7 @@ import se.sics.mspsim.core.MSP430;
import se.sics.mspsim.core.Memory.AccessMode;
import se.sics.mspsim.core.MemoryMonitor;
import se.sics.mspsim.core.Profiler;
import se.sics.mspsim.profiler.CallEntry;
import se.sics.mspsim.profiler.CallListener;
import se.sics.mspsim.util.ActiveComponent;
import se.sics.mspsim.util.ComponentRegistry;
@ -124,7 +125,8 @@ public class ContikiChecker implements CallListener, ActiveComponent {
}
}
public void functionCall(Profiler source, MapEntry entry) {
public void functionCall(Profiler source, CallEntry callEntry) {
MapEntry entry = callEntry.getFunction();
// Check for function calls before <prefix>_init() has been called.
String name = entry.getName();
if (name != null && callTable.get(name) == null) {
@ -153,7 +155,7 @@ public class ContikiChecker implements CallListener, ActiveComponent {
}
}
public void functionReturn(Profiler source, MapEntry entry) {
public void functionReturn(Profiler source, CallEntry entry) {
// Ignore returns
}

View File

@ -0,0 +1,34 @@
package se.sics.mspsim.profiler;
import java.util.HashMap;
import se.sics.mspsim.util.MapEntry;
public class CallEntry {
static class CallCounter implements Comparable<CallCounter> {
public int count = 0;
public int compareTo(CallCounter o) {
return (count < o.count ? -1 : (count == o.count ? 0 : 1));
}
}
int fromPC;
MapEntry function;
long cycles;
long exclusiveCycles;
int calls;
int hide;
int stackStart;
int currentStackMax;
HashMap<MapEntry,CallCounter> callers;
public CallEntry() {
callers = new HashMap<MapEntry,CallCounter>();
}
public MapEntry getFunction() {
return function;
}
}

View File

@ -1,12 +1,10 @@
package se.sics.mspsim.profiler;
import se.sics.mspsim.core.Profiler;
import se.sics.mspsim.util.MapEntry;
public interface CallListener {
public void functionCall(Profiler source, MapEntry entry);
public void functionCall(Profiler source, CallEntry entry);
public void functionReturn(Profiler source, MapEntry entry);
public void functionReturn(Profiler source, CallEntry entry);
}
}

View File

@ -31,15 +31,13 @@
*
* -----------------------------------------------------------------
*
* MSP430
* SimpleProfiler
*
* Author : Joakim Eriksson
* Created : Sun Oct 21 22:00:00 2007
* Updated : $Date$
* $Revision$
* Created : March 5, 2013
*/
package se.sics.mspsim.util;
package se.sics.mspsim.profiler;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
@ -56,7 +54,11 @@ import se.sics.mspsim.core.EventListener;
import se.sics.mspsim.core.EventSource;
import se.sics.mspsim.core.MSP430Core;
import se.sics.mspsim.core.Profiler;
import se.sics.mspsim.profiler.CallListener;
import se.sics.mspsim.profiler.CallEntry.CallCounter;
import se.sics.mspsim.util.ArrayUtils;
import se.sics.mspsim.util.MapEntry;
import se.sics.mspsim.util.StackMonitor;
import se.sics.mspsim.util.Utils;
public class SimpleProfiler implements Profiler, EventListener {
@ -161,7 +163,7 @@ public class SimpleProfiler implements Profiler, EventListener {
CallListener[] listeners = callListeners;
if (listeners != null) {
for (int i = 0, n = listeners.length; i < n; i++) {
listeners[i].functionCall(this, entry);
listeners[i].functionCall(this, ce);
}
}
}
@ -235,7 +237,7 @@ public class SimpleProfiler implements Profiler, EventListener {
CallListener[] listeners = callListeners;
if (listeners != null) {
for (int i = 0, n = listeners.length; i < n; i++) {
listeners[i].functionReturn(this, fkn);
listeners[i].functionReturn(this, cspEntry);
}
}
}
@ -434,30 +436,6 @@ public class SimpleProfiler implements Profiler, EventListener {
}
}
public static class CallEntry {
int fromPC;
MapEntry function;
long cycles;
long exclusiveCycles;
int calls;
int hide;
int stackStart;
int currentStackMax;
HashMap<MapEntry,CallCounter> callers;
public CallEntry() {
callers = new HashMap<MapEntry,CallCounter>();
}
}
private static class CallCounter implements Comparable<CallCounter> {
public int count = 0;
public int compareTo(CallCounter o) {
return (count < o.count ? -1 : (count == o.count ? 0 : 1));
}
}
private static class TagEntry implements Comparable<TagEntry> {
public final String tag;

View File

@ -2,6 +2,7 @@ package se.sics.mspsim.util;
import se.sics.mspsim.core.MSP430;
import se.sics.mspsim.core.RegisterMonitor;
import se.sics.mspsim.core.Memory.AccessMode;
import se.sics.mspsim.profiler.SimpleProfiler;
public class StackMonitor {