mirror of https://github.com/contiki-ng/mspsim
moved profiler and improved calllistener apis slightly
This commit is contained in:
parent
1c77ffca72
commit
77abbc3834
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
@ -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 {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue