[Title] User function callstack fixed
authorjy.exe.lee <jy.exe.lee@samsung.com>
Mon, 2 Jul 2012 05:45:27 +0000 (14:45 +0900)
committerjy.exe.lee <jy.exe.lee@samsung.com>
Mon, 2 Jul 2012 05:45:27 +0000 (14:45 +0900)
[Type] new feature
[Module] DynamicAnalyzer
[Priority] major
[CQ#]
[Redmine#] 5458
[Problem]
[Cause]
[Solution]
[TestCase]

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackApi.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/FunctionUsageProfiler.java

index 20f7954..3673fa4 100644 (file)
@@ -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<Long, CallStackUnit> 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<Long, CallStackUnit> 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 (file)
index 56146d0..0000000
+++ /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;
-       }
-}
index 10729af..8832757 100644 (file)
@@ -86,8 +86,6 @@ public class CallstackTable extends DATableComposite {
                                int seqNum = Integer.parseInt(seq);
                                HashMap<Integer, CallStackData> cdMap = LogSpliter
                                                .getCallStackDataBySeqMap();
-//                             HashMap<Long, String> apiMap = LogSpliter
-//                                             .getCallStackApiByAddrMap();
                                HashMap<Long, CallStackUnit> addrMap = LogSpliter
                                                .getCallStackApiByAddrMap();
                                if (null == cdMap || null == addrMap) {
@@ -99,17 +97,13 @@ public class CallstackTable extends DATableComposite {
                                }
 
                                List<Long> 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)) {
index cb9066c..6a68dbd 100644 (file)
@@ -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);