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]
}
- 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();
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) {
}
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)) {