public void addClickListener(DACustomButtonClickEventListener listener) {
addListener(SWT.MouseUp, listener);
}
+
+ public int getState() {
+ return state;
+ }
}
@Override\r
public void handleEvent(Event event) {\r
DACustomButton button = (DACustomButton) event.widget;\r
- if (null != button) {\r
+ if (null != button && button.getState() != DACustomButton.STATE_DISABLE) {\r
Rectangle rectangle = button.getBounds();\r
int x = event.x;\r
int y = event.y;\r
if (x < 0 || x > rectangle.width || y < 0 || y > rectangle.height) {\r
return;\r
}\r
+ } else {\r
+ return;\r
}\r
\r
handleClickEvent(button);\r
--- /dev/null
+/*\r
+ * Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * Jooyoul Lee <jy.exe.lee@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * This program and the accompanying materials are made available\r
+ * under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+package org.tizen.dynamicanalyzer.widgets.helper;\r
+\r
+import org.eclipse.jface.resource.FontRegistry;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.FontData;\r
+import org.eclipse.ui.PlatformUI;\r
+\r
+public class FontResources {\r
+\r
+ private static FontRegistry fontRegistry = new FontRegistry();\r
+\r
+ public static final String ARIAL = "Arial"; //$NON-NLS-1$\r
+ private static final Font systemFont = PlatformUI.getWorkbench()\r
+ .getDisplay().getSystemFont();\r
+\r
+ public static final Font EX_FONT = getFont("ex_font", //$NON-NLS-1$\r
+ new FontData[] { new FontData(ARIAL, 28, SWT.NORMAL) });\r
+ public static final Font TITLEBAR = getFont("titlebar", resizeSystemFont(10));//$NON-NLS-1$\r
+\r
+ /** device and application combo specific fonts **/\r
+ public static final Font COMBO = getFont("combo", resizeSystemFont(10));//$NON-NLS-1$\r
+\r
+ public static final Font DROPDOWN = getFont("dropdown", resizeSystemFont(10));//$NON-NLS-1$\r
+\r
+ /** table specific fonts **/\r
+ public static final Font TABLE_HEADER = getFont(\r
+ "table_header", setSystemFont(SWT.NONE, 8));//$NON-NLS-1$\r
+ public static final Font TABLE_CONTENTS = getFont(\r
+ "table_contents", resizeSystemFont(8));//$NON-NLS-1$\r
+\r
+ /** open trace window specific fonts **/\r
+ public static final Font OPEN_TRACE_TITLE = getFont(\r
+ "open_trace_title", resizeSystemFont(9));//$NON-NLS-1$\r
+ public static final Font OPEN_TRACE_INNER_TITLE = getFont(\r
+ "open_trace_inner_title", resizeSystemFont(8));//$NON-NLS-1$\r
+ public static final Font OPEN_TRACE_BUTTON = getFont("open_trace_button", //$NON-NLS-1$\r
+ resizeSystemFont(9));//$NON-NLS-1$\r
+ public static final Font OPEN_TRACE_TEXT = getFont(\r
+ "open_trace_text", resizeSystemFont(8));//$NON-NLS-1$\r
+ \r
+ /** about window specific fonts **/\r
+ public static final Font ABOUT_TITLE = getFont(\r
+ "about_title", resizeSystemFont(12));//$NON-NLS-1$\r
+ public static final Font ABOUT_TEXT = getFont(\r
+ "about_text", resizeSystemFont(9));//$NON-NLS-1$\r
+ \r
+\r
+ public static final Font TEST_TEXT = getFont(\r
+ "about_text", resizeSystemFont(28));//$NON-NLS-1$\r
+ \r
+ /** detail info font **/\r
+ public static final Font DETAIL_INFO_FONT = getFont(\r
+ "detail_info_font", resizeSystemFont(9));//$NON-NLS-1$\r
+ \r
+ \r
+ \r
+ public static final Font CATEGORY = getFont("category", resizeSystemFont(8));//$NON-NLS-1$\r
+\r
+ public static final Font TIMER = getFont("timer", resizeSystemFont(12));//$NON-NLS-1$\r
+ public static final Font TIMER_MSEC = getFont(\r
+ "timer_msec", resizeSystemFont(10));//$NON-NLS-1$\r
+\r
+ public static final Font VIEW_TITLE = getFont(\r
+ "view_title", resizeSystemFont(10));//$NON-NLS-1$\r
+\r
+ public static final Font TOOLTIP = getFont("tooltip", resizeSystemFont(9));//$NON-NLS-1$\r
+\r
+ public static final Font TABLE_HEADER_FONT = getFont(\r
+ "table_header_font", resizeSystemFont(8));//$NON-NLS-1$\r
+ public static final Font TABLE_CELL_FONT = getFont(\r
+ "table_cell_font", resizeSystemFont(8));//$NON-NLS-1$\r
+\r
+ public static final Font TIMELINE_FONT = getFont(\r
+ "table_font", resizeSystemFont(8));//$NON-NLS-1$\r
+ public static final Font TIMELINE_TICK_FONT = getFont(\r
+ "time_tick", resizeSystemFont(7));//$NON-NLS-1$\r
+\r
+ public static final Font CIRCULAR_GRAPH_FONT = getFont(\r
+ "circular_graph_font", resizeSystemFont(13));//$NON-NLS-1$\r
+ public static final Font CIRCULAR_GRAPH_MEASURE_FONT = getFont(\r
+ "circular_graph_measure_font", resizeSystemFont(9));//$NON-NLS-1$\r
+ public static final Font CIRCULAR_LABEL_FONT = getFont(\r
+ "circular_label_font", resizeSystemFont(9));//$NON-NLS-1$\r
+ \r
+ public static final Font ADDITEM_BUTTON_FONT = getFont(\r
+ "additem_button_font", resizeSystemFont(8));//$NON-NLS-1$\r
+ public static final Font TAB_BUTTON_FONT = getFont(\r
+ "tab_button_font", resizeSystemFont(10));//$NON-NLS-1$\r
+\r
+ public static final Font CURRENT_TABLE_HEADER_FONT = getFont(\r
+ "current_table_header_font", resizeSystemFont(8));//$NON-NLS-1$\r
+ public static final Font CURRENT_TABLE_CELL_FONT = getFont(\r
+ "current_table_cell_font", resizeSystemFont(8));//$NON-NLS-1$\r
+ \r
+ public static final Font DIALOG_BUTTON_FONT = getFont(\r
+ "dialog_button_font", resizeSystemFont(10));//$NON-NLS-1$\r
+ \r
+ public static final Font SCORE_TITLE_FONT = getFont(\r
+ "score_title_font", setSystemFont(SWT.BOLD,12));//$NON-NLS-1$\r
+ \r
+ private static Font getFont(String fontName, FontData[] fontData) {\r
+ if (!fontRegistry.hasValueFor(fontName)) {\r
+ fontRegistry.put(fontName, fontData);\r
+ }\r
+\r
+ return fontRegistry.get(fontName);\r
+ }\r
+\r
+ public static FontData[] resizeSystemFont(int size) {\r
+ FontData[] fontData = systemFont.getFontData();\r
+ for (int i = 0; i < fontData.length; i++) {\r
+ fontData[i].setHeight(size);\r
+ }\r
+ return fontData;\r
+ }\r
+\r
+ public static FontData[] setStyleSystemFont(int style) {\r
+ FontData[] fontData = systemFont.getFontData();\r
+ for (int i = 0; i < fontData.length; i++) {\r
+ fontData[i].setStyle(style);\r
+ }\r
+ return fontData;\r
+ }\r
+\r
+ public static FontData[] setSystemFont(int style, int size) {\r
+ FontData[] fontData = systemFont.getFontData();\r
+ for (int i = 0; i < fontData.length; i++) {\r
+ fontData[i].setStyle(style);\r
+ fontData[i].setHeight(size);\r
+ }\r
+ return fontData;\r
+ }\r
+}\r
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;
import org.tizen.dynamicanalyzer.constants.LogCenterConstants;
import org.tizen.dynamicanalyzer.model.CallStackUnit;
-import org.tizen.dynamicanalyzer.model.CallStackData;
-import org.tizen.dynamicanalyzer.model.DeviceCurrent;
import org.tizen.dynamicanalyzer.model.ImageInfo;
import org.tizen.dynamicanalyzer.model.LogCenter;
import org.tizen.dynamicanalyzer.model.LogPackage;
import org.tizen.dynamicanalyzer.model.LogQueue;
import org.tizen.dynamicanalyzer.model.Project;
-import org.tizen.dynamicanalyzer.nl.InformationViewLables;
import org.tizen.dynamicanalyzer.threads.LogQueueObservingThread;
import org.tizen.dynamicanalyzer.ui.views.base.DAPageComposite;
+import org.tizen.dynamicanalyzer.utils.CallStackManager;
import org.tizen.dynamicanalyzer.utils.FunctionUsageProfiler;
public class LogSpliter {
private static LogQueue logQueue = null;
private static Thread logQueueObserver = null;
private static String lastLogSeqNumber = null;
- // private static HashMap<Long, String> callstackApiByAddrMap;
- private static HashMap<Long, CallStackUnit> callstackApiByAddrMap;
- // private static List<CallStackApi> callstackApiList;
- private static HashMap<Integer, CallStackData> callstackDataBySeqMap;
private static String pid = null;
-
- private static List<CallStackUnit> userCallstack = null;
- private static String userFunctionBin = null;
-
private static boolean dropCallTraceLog = false;
public static void clear() {
stopLogQueueObservingThread();
logQueue = null;
lastLogSeqNumber = null;
- callstackApiByAddrMap = null;
- // callstackApiList = null;
- callstackDataBySeqMap = null;
pid = null;
- userCallstack = null;
- userFunctionBin = null;
- }
-
- public static List<CallStackUnit> getUserCallstack() {
- if (null == userCallstack) {
- userCallstack = new ArrayList<CallStackUnit>();
- }
- return userCallstack;
- }
-
- // public static List<CallStackApi> getCallStackApiList() {
- // if (null == callstackApiList) {
- // callstackApiList = new ArrayList<CallStackApi>();
- // }
- // return callstackApiList;
- // }
-
- // public static HashMap<Long, String> getCallStackApiByAddrMap() {
- // if (null == callstackApiByAddrMap) {
- // callstackApiByAddrMap = new HashMap<Long, String>();
- // }
- // return callstackApiByAddrMap;
- // }
- public static HashMap<Long, CallStackUnit> getCallStackApiByAddrMap() {
- if (null == callstackApiByAddrMap) {
- callstackApiByAddrMap = new HashMap<Long, CallStackUnit>();
- }
- return callstackApiByAddrMap;
- }
-
- public static HashMap<Integer, CallStackData> getCallStackDataBySeqMap() {
- if (null == callstackDataBySeqMap) {
- callstackDataBySeqMap = new HashMap<Integer, CallStackData>();
- }
- return callstackDataBySeqMap;
- }
-
- public static CallStackData getCallStack(String seqNum) {
- int seq = Integer.parseInt(seqNum);
- return getCallStackDataBySeqMap().get(seq);
+ CallStackManager.clear();
}
public static LogQueue getLogQueue() {
// TODO: user callstack create by back trace
{
- pushCallStack(log[1]
- .split(AnalyzerConstants.DATA_PARSING_TOKEN));
+ CallStackManager.getInstance().pushCallStack(
+ log[1].split(AnalyzerConstants.DATA_PARSING_TOKEN),
+ lastLogSeqNumber);
checkCallCount(slicedLog);
}
} else if (log.length > 1) {
pushLog(logId, slicedLog, logPack);
- pushCallStack(log[1]
- .split(AnalyzerConstants.DATA_PARSING_TOKEN));
+ CallStackManager.getInstance().pushCallStack(
+ log[1].split(AnalyzerConstants.DATA_PARSING_TOKEN),
+ lastLogSeqNumber);
if (id == LogCenterConstants.LOG_RESOURCE
|| id == LogCenterConstants.LOG_MEMORY) {
AnalyzerManager.getLeakDectector()
}
private static void checkCallCount(String[] input) {
- HashMap<Long, CallStackUnit> addrMap = getCallStackApiByAddrMap();
+ HashMap<Long, CallStackUnit> addrMap = CallStackManager.getInstance()
+ .getCallStackApiByAddrMap();
boolean isPieBuild = AnalyzerManager.getProject().isPieBuild();
String baseAddr = AnalyzerManager.getProject().getBaseAddress();
String binPath = AnalyzerManager.getProject().getBinaryPath();
if (null == selfCallstackUnit) {
String strSelfFuncName = SymbolManager.addr2func(binPath,
strSelfAddr, isPieBuild, baseAddr);
- String strSelfSymbol = getUserFunctionPosition()
+ String strSelfSymbol = CallStackManager.getInstance()
+ .getUserFunctionPosition()
+ AnalyzerConstants.CALLSTACK_API_TOKEN_STRING
+ strSelfFuncName;
selfCallstackUnit = new CallStackUnit(selfAddr, strSelfSymbol);
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();
- String binPath = AnalyzerManager.getProject().getBinaryPath();
- if (null == binPath || binPath.isEmpty()) {
- return;
- }
- String strSelfAddr = input[LogCenterConstants.PCADDR_INDEX];
- String strCallerAddr = input[LogCenterConstants.USER_FUNCTION_CALLER_INDEX];
- String strSeq = input[LogCenterConstants.SEQUENCE_NUMBER_INDEX];
-
- int seq = Integer.parseInt(strSeq);
-
- long selfAddr = Long.parseLong(strSelfAddr);
- long callerAddr = Long.parseLong(strCallerAddr);
-
- // if (!AnalyzerManager.isInBinaryRange(callerAddr)) {
- // return;
- // }
- CallStackData callstackData = new CallStackData(seq);
- 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);
-
- List<CallStackUnit> userCallstack = getUserCallstack();
- int size = userCallstack.size();
-
- CallStackUnit callerCallstackUnit = addrMap.get(callerAddr);
- if (null == callerCallstackUnit) {
- String strCallerFuncName = SymbolManager.addr2func(binPath,
- strCallerAddr, isPieBuild, baseAddr);
- String strCallerSymbol = getUserFunctionPosition()
- + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING
- + strCallerFuncName;
- callerCallstackUnit = new CallStackUnit(callerAddr, strCallerSymbol);
- addrMap.put(callerAddr, callerCallstackUnit);
- }
-
- String strEventType = input[LogCenterConstants.USER_FUNCTION_TYPE_INDEX];
- int eventType = Integer.parseInt(strEventType);
-
- if (eventType == LogCenterConstants.USER_FUNCTION_EVENT_TYPE_ENTER) {
- if (size == 0) {
- userCallstack.add(selfCallstackUnit);
- } else {
- if (!AnalyzerManager.isInBinaryRange(strCallerAddr)) {
- CallStackUnit callbackApi = new CallStackUnit(
- LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR,
- LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL);
- userCallstack.add(callbackApi);
- if (addrMap
- .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR) == null) {
- CallStackUnit defaultCallstackUnit = new CallStackUnit(
- LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR,
- LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL);
- addrMap.put(
- LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR,
- defaultCallstackUnit);
- }
- } else {
- CallStackUnit callerCsa = addrMap.get(callerAddr);
- if (null == callerCsa) {
- callerCsa = userCallstack.get(size - 1);
- callerCsa.setAddr(callerAddr);
- } else {
- userCallstack.set(size - 1, callerCsa);
- }
- }
- userCallstack.add(selfCallstackUnit);
- }
- size = userCallstack.size();
- for (int i = size - 1; i >= 0; i--) {
- callstackData.getAddrs().add(userCallstack.get(i).getAddr());
- // System.out.println(userCallstack.get(i).getApi());
- }
- // System.out.println();
- getCallStackDataBySeqMap().put(seq, callstackData);
- } else if (eventType == LogCenterConstants.USER_FUNCTION_EVENT_TYPE_EXIT) {
- CallStackUnit removeCallStackUnit = userCallstack.get(size - 1);
- if (selfCallstackUnit.getFunctionName().equals(
- removeCallStackUnit.getFunctionName())) {
- userCallstack.remove(size - 1);
- if (size - 2 > 0) {
- CallStackUnit checkCallStackUnit = userCallstack
- .get(size - 2);
- if (checkCallStackUnit.getFunctionName().equals(
- LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC)) {
- userCallstack.remove(size - 2);
- }
- }
- }
- }
- }
-
private static void pushLog(String logId, String[] slicedLog,
LogPackage logPack) {
imgInfo.setTime(input.get(LogCenterConstants.TIME_INDEX));
AnalyzerManager.getImageSet().put(imgInfo.getSeq(), imgInfo);
} else if (id == LogCenterConstants.LOG_DEVICE) {
- // TODO: calculate power usage
-// Long power = DeviceCurrent.calculatePower(input
-// .get(LogCenterConstants.DEVICE_AUDIO_INDEX), input
-// .get(LogCenterConstants.DEVICE_RSSI_INDEX), input
-// .get(LogCenterConstants.DEVICE_BRIGHTNESS_INDEX), input
-// .get(LogCenterConstants.DEVICE_VIDEO_INDEX), input
-// .get(LogCenterConstants.DEVICE_CALL_INDEX), input
-// .get(LogCenterConstants.DEVICE_WIFI_INDEX), input
-// .get(LogCenterConstants.DEVICE_BLUETOOTH_INDEX), input
-// .get(LogCenterConstants.DEVICE_DNET_INDEX), input
-// .get(LogCenterConstants.DEVICE_GPS_INDEX), input
-// .get(LogCenterConstants.DEVICE_CAMERA_INDEX), input
-// .get(LogCenterConstants.DEVICE_CPU_FREQUENCY_INDEX), input
-// .get(LogCenterConstants.DEVICE_SYSTEM_USED_MEMORY_INDEX),
-// input.get(LogCenterConstants.DEVICE_CALL_ALPHA_INDEX),
-// input.get(LogCenterConstants.DEVICE_RSSI_ALPHA_INDEX),
-// input.get(LogCenterConstants.DEVICE_VOLTAGE_INDEX));
-// input.set(LogCenterConstants.DEVICE_ENERGY_INDEX, power.toString());
+ // TODO: calculate power usage
+ // Long power = DeviceCurrent.calculatePower(input
+ // .get(LogCenterConstants.DEVICE_AUDIO_INDEX), input
+ // .get(LogCenterConstants.DEVICE_RSSI_INDEX), input
+ // .get(LogCenterConstants.DEVICE_BRIGHTNESS_INDEX), input
+ // .get(LogCenterConstants.DEVICE_VIDEO_INDEX), input
+ // .get(LogCenterConstants.DEVICE_CALL_INDEX), input
+ // .get(LogCenterConstants.DEVICE_WIFI_INDEX), input
+ // .get(LogCenterConstants.DEVICE_BLUETOOTH_INDEX), input
+ // .get(LogCenterConstants.DEVICE_DNET_INDEX), input
+ // .get(LogCenterConstants.DEVICE_GPS_INDEX), input
+ // .get(LogCenterConstants.DEVICE_CAMERA_INDEX), input
+ // .get(LogCenterConstants.DEVICE_CPU_FREQUENCY_INDEX), input
+ // .get(LogCenterConstants.DEVICE_SYSTEM_USED_MEMORY_INDEX),
+ // input.get(LogCenterConstants.DEVICE_CALL_ALPHA_INDEX),
+ // input.get(LogCenterConstants.DEVICE_RSSI_ALPHA_INDEX),
+ // input.get(LogCenterConstants.DEVICE_VOLTAGE_INDEX));
+ // input.set(LogCenterConstants.DEVICE_ENERGY_INDEX,
+ // power.toString());
}
logPack.setLogs(id, input);
input[LogCenterConstants.APINAME_INDEX] = funcName;
}
- private static void pushCallStack(String[] slicedLog) {
- if (slicedLog.length < 3) {
- return;
- }
-
- List<String> callstackLog = new ArrayList<String>();
- for (String str : slicedLog) {
- callstackLog.add(new String(str));
- }
-
- int lastNum = 0;
- try {
- lastNum = Integer.parseInt(lastLogSeqNumber);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- CallStackData callstackData = new CallStackData(lastNum);
- HashMap<Long, CallStackUnit> addrMap = getCallStackApiByAddrMap();
-
- String prevPath = ""; //$NON-NLS-1$
- String currentPath;
- int size = callstackLog.size();
- for (int i = 1; i + 1 < size; i += 2) {
- currentPath = null;
- if (callstackLog.get(i).equals(AnalyzerConstants.CALLSTACK_END)
- || callstackLog.get(i + 1).equals(
- AnalyzerConstants.CALLSTACK_END)) {
- break;
- }
- String strAddr = callstackLog.get(i);
- if (strAddr.isEmpty()) {
- return;
- }
- long addr = 0;
- try {
- addr = Long.parseLong(strAddr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- CallStackUnit callstackUnit = addrMap.get(addr);
-
- if (null == callstackUnit) {
- String strSymbol = callstackLog.get(i + 1);
- if (strSymbol.isEmpty()) {
- continue;
- }
- callstackUnit = new CallStackUnit(addr, strSymbol);
- }
-
- if (callstackUnit.getFunctionName().equals(
- InformationViewLables.CALLSTACK_TABLE_UNKNOWN)) {
- currentPath = callstackUnit.getPath();
- if (prevPath.equals(currentPath)) {
- continue;
- }
- prevPath = currentPath;
- }
-
- if (null == addrMap.get(addr)) {
- addrMap.put(addr, callstackUnit);
- }
-
- if (checkUserCall(callstackUnit.getPath())
- && (userFunctionBin == null || userFunctionBin.isEmpty())) {
- if (AnalyzerManager.isOsp()) {
- userFunctionBin = new String(callstackUnit.getPath()
- + ".exe");
- } else {
- userFunctionBin = new String(callstackUnit.getPath());
- }
- // System.out.println("set ufp " + userFunctionBin); //$NON-NLS-1$
- }
- callstackData.getAddrs().add(addr);
- }// end of callstack start-end
- getCallStackDataBySeqMap().put(lastNum, callstackData);
- }
-
public static void startLogQueueObservingThread() {
if (null == logQueueObserver || !logQueueObserver.isAlive()) {
logQueueObserver = new Thread(null, new LogQueueObservingThread(),
for (int i = 0; i < size; i++) {
pages.get(i).updateLog(logPack);
}
- // AnalyzerManager.getCurrentPage().updateLog(logPack);
- /* 2. timeline update extension */
- // TimelineComposite timelineComposite = AnalyzerUtil
- // .getTimelineComposite();
- // if (null != timelineComposite) {
- // timelineComposite.updateData(logPack);
- // }
-
- /* 3.lifecycle update extension */
- // ResourceManagerObserver.getInstance().update(logPack);
-
- /* 4. test update extension */
- // LogParsingTest test = new LogParsingTest();
- // test.postUpdateLog(logPack);
-
- // Timeline Test
- // tView.updateView();
- // atView.updateView();
- // bView.updateView();
-
- }
-
- public static String getPCAddrBySeq(int seq) {
- HashMap<Integer, CallStackData> cdMap = LogSpliter
- .getCallStackDataBySeqMap();
- // HashMap<Long, String> apiMap = LogSpliter.getCallStackApiByAddrMap();
- // HashMap<Long, CallStackApi> apiMap =
- // LogSpliter.getCallStackApiByAddrMap();
- // if (null == cdMap || null == apiMap) {
- // return null;
- // }
- if (null == cdMap) {
- return null;
- }
- CallStackData csd = cdMap.get(seq);
- if (null == csd) {
- return null;
- }
- List<Long> addrs = csd.getAddrs();
- if (null == addrs || addrs.isEmpty()) {
- return null;
- }
- return Long.toString(addrs.get(0));
}
- public static void setUserFunctionPosition(String path) {
- userFunctionBin = path;
- }
-
- public static String getUserFunctionPosition() {
- return userFunctionBin;
- }
-
- public static boolean checkUserCall(String input) {
- if (input.contains(AnalyzerConstants.USER_BIN_POS)) {
- return true;
- }
- return false;
- }
}
import java.util.List;
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;
-import org.tizen.dynamicanalyzer.model.CallStackUnit;
import org.tizen.dynamicanalyzer.model.CallStackData;
+import org.tizen.dynamicanalyzer.model.CallStackUnit;
import org.tizen.dynamicanalyzer.model.FailedData;
import org.tizen.dynamicanalyzer.model.FunctionUsageProfilingData;
import org.tizen.dynamicanalyzer.model.LeakData;
import org.tizen.dynamicanalyzer.model.LogCenter;
import org.tizen.dynamicanalyzer.model.ProfilingChildData;
import org.tizen.dynamicanalyzer.model.Project;
-import org.tizen.dynamicanalyzer.tableInfo.DBTableManager;
import org.tizen.dynamicanalyzer.tableInfo.DBTableInfo;
+import org.tizen.dynamicanalyzer.tableInfo.DBTableManager;
import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
+import org.tizen.dynamicanalyzer.utils.CallStackManager;
import org.tizen.dynamicanalyzer.utils.FailedChecker;
import org.tizen.dynamicanalyzer.utils.FunctionUsageProfiler;
import org.tizen.dynamicanalyzer.utils.LeakDetector;
String insertQuery = unitTableInfo.insertQuery();
PreparedStatement prep = conn.prepareStatement(insertQuery);
- HashMap<Long, CallStackUnit> callstackMap = LogSpliter
- .getCallStackApiByAddrMap();
+ HashMap<Long, CallStackUnit> callstackMap = CallStackManager
+ .getInstance().getCallStackApiByAddrMap();
List<CallStackUnit> callstackUnits = new ArrayList<CallStackUnit>();
callstackUnits.addAll(callstackMap.values());
int size = callstackUnits.size();
e.printStackTrace();
}
}
-
conn.setAutoCommit(false);
prep.executeBatch();
conn.setAutoCommit(true);
.getTableInfo(DBTableManager.TABLE_INDEX_CALLSTACK_DATA);
String insertQuery = callstackData.insertQuery();
PreparedStatement prep = conn.prepareStatement(insertQuery);
- Collection<CallStackData> col = LogSpliter
+ Collection<CallStackData> col = CallStackManager.getInstance()
.getCallStackDataBySeqMap().values();
List<CallStackData> callstackDataList = new ArrayList<CallStackData>();
callstackDataList.addAll(col);
import org.eclipse.core.commands.ExecutionEvent;\r
import org.eclipse.core.commands.ExecutionException;\r
import org.tizen.dynamicanalyzer.AnalyzerManager;\r
-import org.tizen.dynamicanalyzer.LogSpliter;\r
import org.tizen.dynamicanalyzer.SqlManager;\r
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;\r
import org.tizen.dynamicanalyzer.constants.LogCenterConstants;\r
-import org.tizen.dynamicanalyzer.model.CallStackUnit;\r
import org.tizen.dynamicanalyzer.model.CallStackData;\r
+import org.tizen.dynamicanalyzer.model.CallStackUnit;\r
import org.tizen.dynamicanalyzer.model.FailedData;\r
import org.tizen.dynamicanalyzer.model.FunctionUsageProfilingData;\r
import org.tizen.dynamicanalyzer.model.ImageInfo;\r
import org.tizen.dynamicanalyzer.tableInfo.DBTableInfo;\r
import org.tizen.dynamicanalyzer.tableInfo.DBTableManager;\r
import org.tizen.dynamicanalyzer.ui.views.CoolbarArea;\r
+import org.tizen.dynamicanalyzer.utils.CallStackManager;\r
import org.tizen.dynamicanalyzer.utils.FailedChecker;\r
import org.tizen.dynamicanalyzer.utils.FunctionUsageProfiler;\r
import org.tizen.dynamicanalyzer.utils.LeakDetector;\r
long addr = Long.parseLong(splitAddrs[i]);\r
addrList.add(addr);\r
}\r
- LogSpliter.getCallStackDataBySeqMap().put(seq, csd);\r
+ CallStackManager.getInstance().getCallStackDataBySeqMap()\r
+ .put(seq, csd);\r
}\r
rs.close();\r
} catch (SQLException e) {\r
\r
// HashMap<Long, String> apiHash =\r
// LogSpliter.getCallStackApiByAddrMap();\r
- HashMap<Long, CallStackUnit> apiHash = LogSpliter\r
+ HashMap<Long, CallStackUnit> apiHash = CallStackManager.getInstance()\r
.getCallStackApiByAddrMap();\r
try {\r
while (rs.next()) {\r
import org.tizen.dynamicanalyzer.ColorResources;\r
import org.tizen.dynamicanalyzer.FontResources;\r
import org.tizen.dynamicanalyzer.ImageResources;\r
-import org.tizen.dynamicanalyzer.LogSpliter;\r
import org.tizen.dynamicanalyzer.SymbolManager;\r
import org.tizen.dynamicanalyzer.SymbolManager.SourceLine;\r
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;\r
import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;\r
import org.tizen.dynamicanalyzer.ui.views.CoolbarArea;\r
import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;\r
+import org.tizen.dynamicanalyzer.utils.CallStackManager;\r
\r
public class TableTooltipListener implements Listener {\r
\r
private static final int SOURCE_LINE_BOTTOM = 11;\r
private static final int TOOLTIP_OFFSET = 5;\r
private static final Cursor sourceCursor = new Cursor(null,\r
- ImageResources.VIEW_SOURCE_CURSOR.getImageData(),\r
- 0, 0);\r
- private static final Cursor defaultCursor = new Cursor(null, SWT.CURSOR_ARROW);\r
+ ImageResources.VIEW_SOURCE_CURSOR.getImageData(), 0, 0);\r
+ private static final Cursor defaultCursor = new Cursor(null,\r
+ SWT.CURSOR_ARROW);\r
\r
public TableTooltipListener(Grid table, boolean toggle) {\r
this.grid = table;\r
if (SWT.CTRL == event.keyCode) {\r
grid.setCursor(sourceCursor);\r
\r
-// CoolbarArea.getInstance().setSourceViewButtonToggleState(\r
-// true);\r
+ // CoolbarArea.getInstance().setSourceViewButtonToggleState(\r
+ // true);\r
}\r
}\r
break;\r
if (SWT.CTRL == event.keyCode) {\r
grid.setCursor(defaultCursor);\r
\r
-// CoolbarArea.getInstance().setSourceViewButtonToggleState(\r
-// false);\r
+ // CoolbarArea.getInstance().setSourceViewButtonToggleState(\r
+ // false);\r
}\r
\r
disposeTooltip();\r
}\r
break;\r
case SWT.MouseEnter:\r
-// grid.setFocus();\r
+ // grid.setFocus();\r
if (sourceButtonToggle) {\r
createTooltip(event);\r
} else {\r
\r
// error no check\r
if (AnalyzerConstants.SOURCELINE_NO_MATCHING_LINE == errno) {\r
-// boolean isPie = AnalyzerManager.getProject().isPieBuild();\r
-// if (isPie) {\r
-// errno = AnalyzerConstants.SOURCELINE_PIE_BUILD;\r
-// }\r
+ // boolean isPie = AnalyzerManager.getProject().isPieBuild();\r
+ // if (isPie) {\r
+ // errno = AnalyzerConstants.SOURCELINE_PIE_BUILD;\r
+ // }\r
}\r
\r
// Creates tooltip title label.\r
sl.setError(AnalyzerConstants.SOURCELINE_NO_SOURCELINE_DATA);\r
return sl;\r
}\r
- addr = LogSpliter.getPCAddrBySeq(seqNum);\r
+ addr = CallStackManager.getInstance().getPCAddrBySeq(seqNum);\r
}\r
boolean isPieBuild = AnalyzerManager.getProject().isPieBuild();\r
String baseAddr = AnalyzerManager.getProject().getBaseAddress();\r
String path = AnalyzerManager.getProject().getBinaryPath();\r
- SourceLine sl = SymbolManager.addr2line(path, addr, isPieBuild, baseAddr);\r
+ SourceLine sl = SymbolManager.addr2line(path, addr, isPieBuild,\r
+ baseAddr);\r
return sl;\r
}\r
\r
public abstract class DATheme {
protected String name = "black";
protected static ColorRegistry colorRegistry = new ColorRegistry();
- protected String THEME_PATH = "theme" + File.separator + name
- + File.separator;
- protected final String IMAGE_PATH = THEME_PATH + "img" + File.separator;
- protected final String ICON_PATH = THEME_PATH + "icon" + File.separator;
+
public DATheme() {
setColor("white", new RGB(255, 255, 255)); //$NON-NLS-1$
setColor("black", new RGB(0, 0, 0)); //$NON-NLS-1$
public abstract void setColor(String colorName, RGB rgb);
- public abstract String getThemePath();
+ public String getThemePath() {
+ // TODO Auto-generated method stub
+ return "theme" + File.separator + name + File.separator;
+ }
- public abstract String getImagePath();
+ public String getImagePath() {
+ String path = getThemePath() + "img" + File.separator;
+ return path;
+ }
- public abstract String getIconPath();
+ public String getIconPath() {
+ return getThemePath() + "icon" + File.separator;
+ }
}
return getTableInfos().get(tableInfoIndex);
}
-}
+}
\ No newline at end of file
package org.tizen.dynamicanalyzer.theme;
-import java.io.File;
-
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.tizen.dynamicanalyzer.model.DATheme;
public class DAThemeBlack extends DATheme {
public static DAThemeBlack instance;
- // private final String THEME_PATH = "theme" + File.separator + "black"
- // + File.separator;
- // private final String IMAGE_PATH = THEME_PATH + "img" + File.separator;
- // private final String ICON_PATH = THEME_PATH + "icon" + File.separator;;
-
public static DAThemeBlack getInstance() {
if (null == instance) {
instance = new DAThemeBlack();
DAThemeBlack() {
super();
+ name = "black";
// shell window background color
setColor("window_bg_color", new RGB(51, 52, 53)); //$NON-NLS-1$
return colorRegistry.get(colorName);
}
- @Override
- public String getThemePath() {
- // TODO Auto-generated method stub
- return THEME_PATH;
- }
-
- @Override
- public String getImagePath() {
- // TODO Auto-generated method stub
- return IMAGE_PATH;
- }
-
- @Override
- public String getIconPath() {
- // TODO Auto-generated method stub
- return ICON_PATH;
- }
}
public class DAThemeWhite extends DATheme {
private static DAThemeWhite instance;
- protected String name = "white";
public static DAThemeWhite getInstance() {
if (instance == null) {
DAThemeWhite() {
super();
+ name = "white";
// shell window background color
setColor("window_bg_color", new RGB(51, 52, 53)); //$NON-NLS-1$
return colorRegistry.get(colorName);
}
- @Override
- public String getThemePath() {
- // TODO Auto-generated method stub
- return THEME_PATH;
- }
-
- @Override
- public String getImagePath() {
- // TODO Auto-generated method stub
- return IMAGE_PATH;
- }
-
- @Override
- public String getIconPath() {
- // TODO Auto-generated method stub
- return ICON_PATH;
- }
+// @Override
+// public String getThemePath() {
+// // TODO Auto-generated method stub
+// // return THEME_PATH;
+// return "theme" + File.separator + name + File.separator;
+// }
+//
+// @Override
+// public String getImagePath() {
+// // TODO Auto-generated method stub
+// return IMAGE_PATH;
+// }
+//
+// @Override
+// public String getIconPath() {
+// // TODO Auto-generated method stub
+// return ICON_PATH;
+// }
}
\r
public DAWindow(Shell parent, int style) {\r
shell = new Shell(parent, style | SWT.NO_TRIM | SWT.NO_BACKGROUND | SWT.CENTER);\r
+// shell = new Shell(parent, style | SWT.NO_BACKGROUND | SWT.CENTER | SWT.TITLE);\r
+// shell.setText("test");\r
closeButton = new DACustomButton(shell, closeImage, closePushImage,\r
closeHoverImage, null);\r
closeButton.setToolTipText(AnalyzerLabels.CLOSE);\r
import org.eclipse.swt.widgets.Composite;
import org.tizen.dynamicanalyzer.AnalyzerManager;
import org.tizen.dynamicanalyzer.ColorResources;
-import org.tizen.dynamicanalyzer.LogSpliter;
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;
import org.tizen.dynamicanalyzer.constants.LogCenterConstants;
import org.tizen.dynamicanalyzer.model.CallStackData;
import org.tizen.dynamicanalyzer.ui.views.summaryPage.FunctionUsageProfilingView;
import org.tizen.dynamicanalyzer.ui.widgets.DATabComposite;
import org.tizen.dynamicanalyzer.ui.widgets.DATable.DATableComposite;
+import org.tizen.dynamicanalyzer.utils.CallStackManager;
import org.tizen.dynamicanalyzer.utils.Formatter;
public class CallstackTable extends DATableComposite {
String seq = logData.get(LogCenterConstants.SEQUENCE_NUMBER_INDEX);
if (null != seq && !seq.isEmpty()) {
int seqNum = Integer.parseInt(seq);
- HashMap<Integer, CallStackData> cdMap = LogSpliter
+ HashMap<Integer, CallStackData> cdMap = CallStackManager.getInstance()
.getCallStackDataBySeqMap();
- HashMap<Long, CallStackUnit> addrMap = LogSpliter
+ HashMap<Long, CallStackUnit> addrMap = CallStackManager.getInstance()
.getCallStackApiByAddrMap();
if (null == cdMap || null == addrMap) {
return;
// }
// }
- if (LogSpliter.checkUserCall(path)) {
+ if (CallStackManager.getInstance().checkUserCall(path)) {
gridItem.setForeground(ColorResources.TITLEBAR_TEXT_COLOR);
}
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;
-import org.tizen.dynamicanalyzer.LogSpliter;
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;
import org.tizen.dynamicanalyzer.constants.LogCenterConstants;
import org.tizen.dynamicanalyzer.handlers.RealtimePerspectiveHandler;
-import org.tizen.dynamicanalyzer.model.CallStackUnit;
import org.tizen.dynamicanalyzer.model.CallStackData;
+import org.tizen.dynamicanalyzer.model.CallStackUnit;
import org.tizen.dynamicanalyzer.services.RecordStateSourceProvider;
import org.tizen.dynamicanalyzer.timeline.TimelineComposite;
import org.tizen.dynamicanalyzer.ui.views.filePage.fileChart.FileChartManager;
}
}
- HashMap<Integer, CallStackData> cdMap = LogSpliter
+ HashMap<Integer, CallStackData> cdMap = CallStackManager.getInstance()
.getCallStackDataBySeqMap();
-// HashMap<Long, String> apiMap = LogSpliter.getCallStackApiByAddrMap();
- HashMap<Long, CallStackUnit> addrMap = LogSpliter.getCallStackApiByAddrMap();
+ // HashMap<Long, String> apiMap = LogSpliter.getCallStackApiByAddrMap();
+ HashMap<Long, CallStackUnit> addrMap = CallStackManager.getInstance()
+ .getCallStackApiByAddrMap();
if (null == cdMap || null == addrMap) {
return AnalyzerConstants.USER_CALL_CHECK_ERROR;
String funcName = addrMap.get(addrs.get(0)).getFunctionName();
// if (funcName.contains(AnalyzerConstants.USER_BIN_POS)) {
- if (LogSpliter.checkUserCall(funcName)) {
+ if (CallStackManager.getInstance().checkUserCall(funcName)) {
return AnalyzerConstants.USER_CALL;
}
return AnalyzerConstants.INTERNAL_CALL;
--- /dev/null
+package org.tizen.dynamicanalyzer.utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.AnalyzerManager;
+import org.tizen.dynamicanalyzer.SymbolManager;
+import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;
+import org.tizen.dynamicanalyzer.constants.LogCenterConstants;
+import org.tizen.dynamicanalyzer.model.CallStackData;
+import org.tizen.dynamicanalyzer.model.CallStackUnit;
+import org.tizen.dynamicanalyzer.nl.InformationViewLables;
+
+public class CallStackManager {
+ private static CallStackManager instance;
+ private HashMap<Long, CallStackUnit> callstackApiByAddrMap;
+ private HashMap<Integer, CallStackData> callstackDataBySeqMap;
+ private String userFunctionBin = null;
+ private List<CallStackUnit> userCallstack = null;
+
+ public static CallStackManager getInstance() {
+ if (null == instance) {
+ instance = new CallStackManager();
+ }
+ return instance;
+ }
+
+ public void makeUserCallstack(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];
+ String strCallerAddr = input[LogCenterConstants.USER_FUNCTION_CALLER_INDEX];
+ String strSeq = input[LogCenterConstants.SEQUENCE_NUMBER_INDEX];
+
+ int seq = Integer.parseInt(strSeq);
+
+ long selfAddr = Long.parseLong(strSelfAddr);
+ long callerAddr = Long.parseLong(strCallerAddr);
+
+ // if (!AnalyzerManager.isInBinaryRange(callerAddr)) {
+ // return;
+ // }
+ CallStackData callstackData = new CallStackData(seq);
+ 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);
+
+ List<CallStackUnit> userCallstack = getUserCallstack();
+ int size = userCallstack.size();
+
+ CallStackUnit callerCallstackUnit = addrMap.get(callerAddr);
+ if (null == callerCallstackUnit) {
+ String strCallerFuncName = SymbolManager.addr2func(binPath,
+ strCallerAddr, isPieBuild, baseAddr);
+ String strCallerSymbol = getUserFunctionPosition()
+ + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING
+ + strCallerFuncName;
+ callerCallstackUnit = new CallStackUnit(callerAddr, strCallerSymbol);
+ addrMap.put(callerAddr, callerCallstackUnit);
+ }
+
+ String strEventType = input[LogCenterConstants.USER_FUNCTION_TYPE_INDEX];
+ int eventType = Integer.parseInt(strEventType);
+
+ if (eventType == LogCenterConstants.USER_FUNCTION_EVENT_TYPE_ENTER) {
+ if (size == 0) {
+ userCallstack.add(selfCallstackUnit);
+ } else {
+ if (!AnalyzerManager.isInBinaryRange(strCallerAddr)) {
+ CallStackUnit callbackApi = new CallStackUnit(
+ LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR,
+ LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL);
+ userCallstack.add(callbackApi);
+ if (addrMap
+ .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR) == null) {
+ CallStackUnit defaultCallstackUnit = new CallStackUnit(
+ LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR,
+ LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL);
+ addrMap.put(
+ LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR,
+ defaultCallstackUnit);
+ }
+ } else {
+ CallStackUnit callerCsa = addrMap.get(callerAddr);
+ if (null == callerCsa) {
+ callerCsa = userCallstack.get(size - 1);
+ callerCsa.setAddr(callerAddr);
+ } else {
+ userCallstack.set(size - 1, callerCsa);
+ }
+ }
+ userCallstack.add(selfCallstackUnit);
+ }
+ size = userCallstack.size();
+ for (int i = size - 1; i >= 0; i--) {
+ callstackData.getAddrs().add(userCallstack.get(i).getAddr());
+ // System.out.println(userCallstack.get(i).getApi());
+ }
+ // System.out.println();
+ getCallStackDataBySeqMap().put(seq, callstackData);
+ } else if (eventType == LogCenterConstants.USER_FUNCTION_EVENT_TYPE_EXIT) {
+ CallStackUnit removeCallStackUnit = userCallstack.get(size - 1);
+ if (selfCallstackUnit.getFunctionName().equals(
+ removeCallStackUnit.getFunctionName())) {
+ userCallstack.remove(size - 1);
+ if (size - 2 > 0) {
+ CallStackUnit checkCallStackUnit = userCallstack
+ .get(size - 2);
+ if (checkCallStackUnit.getFunctionName().equals(
+ LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC)) {
+ userCallstack.remove(size - 2);
+ }
+ }
+ }
+ }
+ }
+
+ public void pushCallStack(String[] slicedLog, String lastLogSeqNumber) {
+ if (slicedLog.length < 3) {
+ return;
+ }
+
+ List<String> callstackLog = new ArrayList<String>();
+ for (String str : slicedLog) {
+ callstackLog.add(new String(str));
+ }
+
+ int lastNum = 0;
+ try {
+ lastNum = Integer.parseInt(lastLogSeqNumber);
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ }
+ CallStackData callstackData = new CallStackData(lastNum);
+ HashMap<Long, CallStackUnit> addrMap = getCallStackApiByAddrMap();
+
+ String prevPath = ""; //$NON-NLS-1$
+ String currentPath;
+ int size = callstackLog.size();
+ for (int i = 1; i + 1 < size; i += 2) {
+ currentPath = null;
+ if (callstackLog.get(i).equals(AnalyzerConstants.CALLSTACK_END)
+ || callstackLog.get(i + 1).equals(
+ AnalyzerConstants.CALLSTACK_END)) {
+ break;
+ }
+ String strAddr = callstackLog.get(i);
+ if (strAddr.isEmpty()) {
+ return;
+ }
+ long addr = 0;
+ try {
+ addr = Long.parseLong(strAddr);
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ }
+ CallStackUnit callstackUnit = addrMap.get(addr);
+
+ if (null == callstackUnit) {
+ String strSymbol = callstackLog.get(i + 1);
+ if (strSymbol.isEmpty()) {
+ continue;
+ }
+ callstackUnit = new CallStackUnit(addr, strSymbol);
+ }
+
+ if (callstackUnit.getFunctionName().equals(
+ InformationViewLables.CALLSTACK_TABLE_UNKNOWN)) {
+ currentPath = callstackUnit.getPath();
+ if (prevPath.equals(currentPath)) {
+ continue;
+ }
+ prevPath = currentPath;
+ }
+
+ if (null == addrMap.get(addr)) {
+ addrMap.put(addr, callstackUnit);
+ }
+
+ if (checkUserCall(callstackUnit.getPath())
+ && (userFunctionBin == null || userFunctionBin.isEmpty())) {
+ if (AnalyzerManager.isOsp()) {
+ userFunctionBin = new String(callstackUnit.getPath()
+ + ".exe");
+ } else {
+ userFunctionBin = new String(callstackUnit.getPath());
+ }
+ // System.out.println("set ufp " + userFunctionBin); //$NON-NLS-1$
+ }
+ callstackData.getAddrs().add(addr);
+ }// end of callstack start-end
+ getCallStackDataBySeqMap().put(lastNum, callstackData);
+ }
+
+ public HashMap<Long, CallStackUnit> getCallStackApiByAddrMap() {
+ if (null == callstackApiByAddrMap) {
+ callstackApiByAddrMap = new HashMap<Long, CallStackUnit>();
+ }
+ return callstackApiByAddrMap;
+ }
+
+ public HashMap<Integer, CallStackData> getCallStackDataBySeqMap() {
+ if (null == callstackDataBySeqMap) {
+ callstackDataBySeqMap = new HashMap<Integer, CallStackData>();
+ }
+ return callstackDataBySeqMap;
+ }
+
+ public String getUserFunctionPosition() {
+ return userFunctionBin;
+ }
+
+ public List<CallStackUnit> getUserCallstack() {
+ if (null == userCallstack) {
+ userCallstack = new ArrayList<CallStackUnit>();
+ }
+ return userCallstack;
+ }
+
+ public CallStackData getCallStack(String seqNum) {
+ int seq = Integer.parseInt(seqNum);
+ return getCallStackDataBySeqMap().get(seq);
+ }
+
+ public boolean checkUserCall(String input) {
+ if (input.contains(AnalyzerConstants.USER_BIN_POS)) {
+ return true;
+ }
+ return false;
+ }
+
+ public String getPCAddrBySeq(int seq) {
+ HashMap<Integer, CallStackData> cdMap = getCallStackDataBySeqMap();
+ if (null == cdMap) {
+ return null;
+ }
+ CallStackData csd = cdMap.get(seq);
+ if (null == csd) {
+ return null;
+ }
+ List<Long> addrs = csd.getAddrs();
+ if (null == addrs || addrs.isEmpty()) {
+ return null;
+ }
+ return Long.toString(addrs.get(0));
+ }
+
+ public static void clear() {
+ instance = null;
+ }
+}
import java.util.List;
import org.tizen.dynamicanalyzer.AnalyzerManager;
-import org.tizen.dynamicanalyzer.LogSpliter;
import org.tizen.dynamicanalyzer.constants.AnalyzerConstants;
import org.tizen.dynamicanalyzer.constants.LogCenterConstants;
import org.tizen.dynamicanalyzer.model.CallStackUnit;
}
List<Long> addrs = makeCallstackHashAndList(sampleCallstack);
- HashMap<Long, CallStackUnit> addrMap = LogSpliter
+ HashMap<Long, CallStackUnit> addrMap = CallStackManager.getInstance()
.getCallStackApiByAddrMap();
String selfAddrStr = selfAddrLog[0];
long selfAddr = Long.parseLong(selfAddrStr);
private void checkUserCall(CallStackUnit csa,
FunctionUsageProfilingData parent, FunctionUsageProfilingData pp) {
- if (LogSpliter.checkUserCall(csa.getPath())) {
+ if (CallStackManager.getInstance().checkUserCall(csa.getPath())) {
if (null == appBin) {
CallStackUnit appBinCsa = new CallStackUnit(-1,
FunctionUsageProfiler.APPLICATION);
}
private List<Long> makeCallstackHashAndList(List<String> callstackLog) {
- HashMap<Long, CallStackUnit> addrMap = LogSpliter
+ HashMap<Long, CallStackUnit> addrMap = CallStackManager.getInstance()
.getCallStackApiByAddrMap();
List<Long> addrs = new ArrayList<Long>();
int size = callstackLog.size();
import java.util.List;
import org.tizen.dynamicanalyzer.AnalyzerManager;
-import org.tizen.dynamicanalyzer.LogSpliter;
import org.tizen.dynamicanalyzer.constants.LogCenterConstants;
import org.tizen.dynamicanalyzer.model.CallStackData;
import org.tizen.dynamicanalyzer.model.CallStackUnit;
public final static int API_TYPE_OPEN = 0;
public final static int API_TYPE_CLOSE = 1;
public final static int API_TYPE_REALLOC = 2;
- private final String[] columnNames = { SummaryLables.LEAK_DETECTOR_ADDRESS, SummaryLables.LEAK_DETECTOR_SEQUENCE, SummaryLables.LEAK_DETECTOR_ID, SummaryLables.LEAK_DETECTOR_TIME,
- SummaryLables.LEAK_DETECTOR_API_NAME, SummaryLables.LEAK_DETECTOR_INPUT_PARAM, SummaryLables.LEAK_DETECTOR_RETURN, SummaryLables.LEAK_DETECTOR_LEAK_SEQ, SummaryLables.LEAK_DETECTOR_PARENT };
+ private final String[] columnNames = { SummaryLables.LEAK_DETECTOR_ADDRESS,
+ SummaryLables.LEAK_DETECTOR_SEQUENCE,
+ SummaryLables.LEAK_DETECTOR_ID, SummaryLables.LEAK_DETECTOR_TIME,
+ SummaryLables.LEAK_DETECTOR_API_NAME,
+ SummaryLables.LEAK_DETECTOR_INPUT_PARAM,
+ SummaryLables.LEAK_DETECTOR_RETURN,
+ SummaryLables.LEAK_DETECTOR_LEAK_SEQ,
+ SummaryLables.LEAK_DETECTOR_PARENT };
HashMap<String, Check> leakCheckHash;
HashMap<String, LeakData> leakHash;
}
private void checkUserFuncLeakData(String[] input, Check chk) {
- HashMap<Integer, CallStackData> cdMap = LogSpliter
+ HashMap<Integer, CallStackData> cdMap = CallStackManager.getInstance()
.getCallStackDataBySeqMap();
-// HashMap<Long, String> apiMap = LogSpliter.getCallStackApiByAddrMap();
- HashMap<Long, CallStackUnit> addrMap = LogSpliter.getCallStackApiByAddrMap();
-
+ // HashMap<Long, String> apiMap = LogSpliter.getCallStackApiByAddrMap();
+ HashMap<Long, CallStackUnit> addrMap = CallStackManager.getInstance()
+ .getCallStackApiByAddrMap();
+
int seqNum = Integer
.parseInt(input[LogCenterConstants.SEQUENCE_NUMBER_INDEX]);
CallStackData csd = cdMap.get(seqNum);
}
int size = addrs.size();
-// String funcName = apiMap.get(addrs.get(0));
+ // String funcName = apiMap.get(addrs.get(0));
CallStackUnit funcName = addrMap.get(addrs.get(0));
// user call
// if (funcName.contains(AnalyzerConstants.USER_BIN_POS)) {
- if (LogSpliter.checkUserCall(funcName.getPath())) {
+ if (CallStackManager.getInstance().checkUserCall(funcName.getPath())) {
// if (!AnalyzerUtil.isInternal(input)) {
HashMap<String, LeakData> leaks = getLeakHash();
LeakData newLeak = new LeakData(input[chk.getKeyIndex()], input);
return;
}
// if (funcName.contains(AnalyzerConstants.USER_BIN_POS)) {
- if (LogSpliter.checkUserCall(funcName.getPath())) {
+ if (CallStackManager.getInstance().checkUserCall(funcName.getPath())) {
LeakData childData = new LeakData(input[chk.getKeyIndex()],
input);
String addr = Long.toString(addrs.get(i - 1));
funcName = addrMap.get(addrs.get(i - 1));
LeakData parentLeakData = getLeakHash().get(addr);
if (null == parentLeakData) {
- parentLeakData = new LeakData(addr, funcName.getSymbol(),
+ parentLeakData = new LeakData(addr,
+ funcName.getSymbol(),
input[LogCenterConstants.ID_INDEX]);
getLeakHash().put(addr, parentLeakData);
}