From 6da6339fc4b78db2e4f8b73e0c248116d9766097 Mon Sep 17 00:00:00 2001 From: "jy.exe.lee" Date: Mon, 2 Jul 2012 14:45:27 +0900 Subject: [PATCH] [Title] User function callstack fixed [Type] new feature [Module] DynamicAnalyzer [Priority] major [CQ#] [Redmine#] 5458 [Problem] [Cause] [Solution] [TestCase] --- .../src/org/tizen/dynamicanalyzer/LogSpliter.java | 41 ++++++++++++++++++++-- .../tizen/dynamicanalyzer/model/CallStackApi.java | 23 ------------ .../ui/widgets/tables/CallstackTable.java | 8 +---- .../utils/FunctionUsageProfiler.java | 2 +- 4 files changed, 41 insertions(+), 33 deletions(-) delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackApi.java diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java index 20f7954..3673fa4 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java @@ -182,7 +182,16 @@ public class LogSpliter { AnalyzerManager.setBinaryStartEndAddr(start, end); } pushLog(logId, slicedLog, logPack); - makeUserCallstack(slicedLog); + + // TODO: user callstack create by entry and exit + // makeUserCallstack(slicedLog); + + // TODO: user callstack create by back trace + { + pushCallStack(log[1] + .split(AnalyzerConstants.DATA_PARSING_TOKEN)); + checkCallCount(slicedLog); + } } else if (log.length > 1) { pushLog(logId, slicedLog, logPack); pushCallStack(log[1] @@ -204,7 +213,35 @@ public class LogSpliter { } - private static void makeUserCallstack(String[] input) { + private static void checkCallCount(String[] input) { + HashMap addrMap = getCallStackApiByAddrMap(); + boolean isPieBuild = AnalyzerManager.getProject().isPieBuild(); + String baseAddr = AnalyzerManager.getProject().getBaseAddress(); + String binPath = AnalyzerManager.getProject().getBinaryPath(); + if (null == binPath || binPath.isEmpty()) { + return; + } + String strSelfAddr = input[LogCenterConstants.PCADDR_INDEX]; + long selfAddr = Long.parseLong(strSelfAddr); + + CallStackUnit selfCallstackUnit = addrMap.get(selfAddr); + if (null == selfCallstackUnit) { + String strSelfFuncName = SymbolManager.addr2func(binPath, + strSelfAddr, isPieBuild, baseAddr); + String strSelfSymbol = getUserFunctionPosition() + + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + + strSelfFuncName; + selfCallstackUnit = new CallStackUnit(selfAddr, strSelfSymbol); + addrMap.put(selfAddr, selfCallstackUnit); + } + + // insert call count + FunctionUsageProfiler profiler = AnalyzerManager + .getFunctionUserProfiler(); + profiler.makeFupDataForCallTrace(selfCallstackUnit, input); + } + + public static void makeUserCallstack(String[] input) { HashMap addrMap = getCallStackApiByAddrMap(); boolean isPieBuild = AnalyzerManager.getProject().isPieBuild(); String baseAddr = AnalyzerManager.getProject().getBaseAddress(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackApi.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackApi.java deleted file mode 100644 index 56146d0..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackApi.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.tizen.dynamicanalyzer.model; - -public class CallStackApi { - private long addr; - private String api; - - public CallStackApi(long addr, String api) { - this.addr = addr; - this.api = api; - } - - public long getAddr() { - return addr; - } - - public String getApi() { - return api; - } - - public void setAddr(long addr) { - this.addr = addr; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java index 10729af..8832757 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java @@ -86,8 +86,6 @@ public class CallstackTable extends DATableComposite { int seqNum = Integer.parseInt(seq); HashMap cdMap = LogSpliter .getCallStackDataBySeqMap(); -// HashMap apiMap = LogSpliter -// .getCallStackApiByAddrMap(); HashMap addrMap = LogSpliter .getCallStackApiByAddrMap(); if (null == cdMap || null == addrMap) { @@ -99,17 +97,13 @@ public class CallstackTable extends DATableComposite { } List addrs = csd.getAddrs(); - int size = addrs.size(); + int size = addrs.size(); for (int i = 0; i < size; i++) { -// String api = apiMap.get(addrs.get(i)); CallStackUnit api = addrMap.get(addrs.get(i)); -// String[] apiData = api -// .split(AnalyzerConstants.CALLSTACK_API_TOKEN); String addr = Formatter .toHexString(addrs.get(i).toString()); String path = api.getPath(); -// String path = new String(apiData[0]); // if path has "da_probe.so" then reject if (path.contains(AnalyzerConstants.PROBE_LIB_TIZEN) || path.contains(AnalyzerConstants.PROBE_LIB_OSP)) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java index cb9066c..6a68dbd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java @@ -306,8 +306,8 @@ public class FunctionUsageProfiler { e.printStackTrace(); } addrs.add(addr); - CallStackUnit funcName = addrMap.get(addr); + CallStackUnit funcName = addrMap.get(addr); if (null == funcName) { String funcSymbol = callstackLog.get(i + 1); CallStackUnit cas = new CallStackUnit(addr, funcSymbol); -- 2.7.4