From 77abbc38348d537665dae02f52954674e5c8f22d Mon Sep 17 00:00:00 2001 From: Joakim Eriksson Date: Tue, 5 Mar 2013 13:14:34 +0100 Subject: [PATCH] moved profiler and improved calllistener apis slightly --- se/sics/mspsim/cli/ProfilerCommands.java | 2 +- se/sics/mspsim/core/MSP430.java | 2 +- se/sics/mspsim/plugin/ContikiChecker.java | 6 ++- se/sics/mspsim/profiler/CallEntry.java | 34 +++++++++++++++ se/sics/mspsim/profiler/CallListener.java | 8 ++-- .../{util => profiler}/SimpleProfiler.java | 42 +++++-------------- se/sics/mspsim/util/StackMonitor.java | 1 + 7 files changed, 54 insertions(+), 41 deletions(-) create mode 100644 se/sics/mspsim/profiler/CallEntry.java rename se/sics/mspsim/{util => profiler}/SimpleProfiler.java (95%) diff --git a/se/sics/mspsim/cli/ProfilerCommands.java b/se/sics/mspsim/cli/ProfilerCommands.java index edd6f25..172758c 100644 --- a/se/sics/mspsim/cli/ProfilerCommands.java +++ b/se/sics/mspsim/cli/ProfilerCommands.java @@ -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; /** diff --git a/se/sics/mspsim/core/MSP430.java b/se/sics/mspsim/core/MSP430.java index 6c4d635..fe99de1 100644 --- a/se/sics/mspsim/core/MSP430.java +++ b/se/sics/mspsim/core/MSP430.java @@ -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 { diff --git a/se/sics/mspsim/plugin/ContikiChecker.java b/se/sics/mspsim/plugin/ContikiChecker.java index 550d5ea..4e2af28 100644 --- a/se/sics/mspsim/plugin/ContikiChecker.java +++ b/se/sics/mspsim/plugin/ContikiChecker.java @@ -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 _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 } diff --git a/se/sics/mspsim/profiler/CallEntry.java b/se/sics/mspsim/profiler/CallEntry.java new file mode 100644 index 0000000..8229080 --- /dev/null +++ b/se/sics/mspsim/profiler/CallEntry.java @@ -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 { + 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 callers; + + public CallEntry() { + callers = new HashMap(); + } + + public MapEntry getFunction() { + return function; + } + } diff --git a/se/sics/mspsim/profiler/CallListener.java b/se/sics/mspsim/profiler/CallListener.java index ffa5f1c..3e74468 100644 --- a/se/sics/mspsim/profiler/CallListener.java +++ b/se/sics/mspsim/profiler/CallListener.java @@ -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); -} +} \ No newline at end of file diff --git a/se/sics/mspsim/util/SimpleProfiler.java b/se/sics/mspsim/profiler/SimpleProfiler.java similarity index 95% rename from se/sics/mspsim/util/SimpleProfiler.java rename to se/sics/mspsim/profiler/SimpleProfiler.java index f08b46f..5fad9f6 100644 --- a/se/sics/mspsim/util/SimpleProfiler.java +++ b/se/sics/mspsim/profiler/SimpleProfiler.java @@ -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 callers; - - public CallEntry() { - callers = new HashMap(); - } - } - - private static class CallCounter implements Comparable { - 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 { public final String tag; diff --git a/se/sics/mspsim/util/StackMonitor.java b/se/sics/mspsim/util/StackMonitor.java index bc01294..eed6f68 100644 --- a/se/sics/mspsim/util/StackMonitor.java +++ b/se/sics/mspsim/util/StackMonitor.java @@ -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 {