From 4bafb9e3797e3263df8add9408753c540885bcd3 Mon Sep 17 00:00:00 2001 From: jooyoul_lee Date: Wed, 25 Sep 2013 15:56:15 +0900 Subject: [PATCH] [Title] Failed api list view fixed [Desc.] [Issue] --- org.tizen.dynamicanalyzer.splash/plugin.properties | 2 +- .../dynamicanalyzer.product | 3 +- .../dynamicanalyzer/workbench/Application.java | 9 +++ .../dynamicanalyzer/common/ElfSymbolExtracter.java | 1 - .../communicator/DACommunicator.java | 12 ++-- .../org/tizen/dynamicanalyzer/project/Project.java | 2 - .../org/tizen/dynamicanalyzer/sql/SqlManager.java | 1 - .../swap/callstack/SWAPCallStackManager.java | 10 +-- .../swap/communicator/Communicator30.java | 2 + .../swap/logparser/SWAPLogParser.java | 11 +-- .../dynamicanalyzer/swap/model/ByteUtils.java | 7 +- .../ui/summary/failed/FailedApiListView.java | 2 +- .../ui/summary/failed/FailedApiTable.java | 10 +++ .../ui/summary/leaks/LeakCheckList.java | 75 +++++++++++++++++++ .../ui/summary/leaks/LeakDetector.java | 84 ++++++++++++---------- .../dynamicanalyzer/ui/summary/leaks/LeakInfo.java | 26 +++++++ .../ui/toolbar/StopLogProcessor.java | 17 ++--- 17 files changed, 199 insertions(+), 75 deletions(-) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakCheckList.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakInfo.java diff --git a/org.tizen.dynamicanalyzer.splash/plugin.properties b/org.tizen.dynamicanalyzer.splash/plugin.properties index b295a76..f74d8aa 100644 --- a/org.tizen.dynamicanalyzer.splash/plugin.properties +++ b/org.tizen.dynamicanalyzer.splash/plugin.properties @@ -1,4 +1,4 @@ #Plugin name -pluginName=bada Application Performance Analyzer Workbench Splash +pluginName=Tizen Dynamic Analyzer splash #Provider name providerName=Samsung Electronics diff --git a/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product b/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product index b1d987d..006ce65 100755 --- a/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product +++ b/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product @@ -1,12 +1,13 @@ - + + -data @noDefault -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -XX:MaxHeapFreeRatio=70 -XX:MinHeapFreeRatio=40 diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java index b58f0c4..124d543 100755 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java @@ -29,6 +29,7 @@ package org.tizen.dynamicanalyzer.workbench; import java.io.File; import java.io.FileOutputStream; import java.io.PrintStream; +import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; @@ -36,8 +37,10 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import org.eclipse.core.runtime.Platform; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; +import org.eclipse.osgi.service.datalocation.Location; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; @@ -50,6 +53,12 @@ public class Application implements IApplication { @Override public Object start(IApplicationContext context) throws Exception { Display display = PlatformUI.createDisplay(); + + Location instanceLoc = Platform.getInstanceLocation(); + String path = WorkbenchUtils.DYNAMIC_ANALYZER_INSTALL_PATH + + File.separator; + instanceLoc.set(new URL("file", null, path), false); + SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd_HH-mm-ss", //$NON-NLS-1$ Locale.KOREA); Date date = new Date(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtracter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtracter.java index 0e2e4d1..349604e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtracter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtracter.java @@ -60,7 +60,6 @@ public class ElfSymbolExtracter { elf = new Elf(path); elf.loadSymbols(); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); return false; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java index 8a0632a..fadc4fd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java @@ -145,7 +145,7 @@ public class DACommunicator { public static void setSelectedApp(AppInfo app) { selectedApp = app; - if (null != communicator) { + if (null != app && null != communicator) { communicator.setSelectedApp(app); } } @@ -842,15 +842,19 @@ public class DACommunicator { System.out.println("device disconnected : " + device.getSerialNumber()); DeviceInfo deviceInfo = getDeviceByName(device.getSerialNumber()); + DeviceInfo selectedDevice = getSelectedDevice(); if (null != devices && !devices.isEmpty()) { devices.remove(deviceInfo); if (!AnalyzerManager.isRunning()) { checkDevices(); } if (isRunning()) { - System.out.println("Disconnected while DA is running."); //$NON-NLS-1$ - UIRecorderTool.getInstance().stop(); - DACommunicator.setRunning(false); + if (selectedDevice.getIDevice().getSerialNumber() + .equals(deviceInfo.getIDevice().getSerialNumber())) { + System.out.println("Disconnected while DA is running."); //$NON-NLS-1$ + UIRecorderTool.getInstance().stop(); + DACommunicator.setRunning(false); + } } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java index 570664f..6a955e2 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java @@ -29,7 +29,6 @@ package org.tizen.dynamicanalyzer.project; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.List; import java.util.Locale; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; @@ -42,7 +41,6 @@ import org.tizen.dynamicanalyzer.sql.SqlManager; import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.swap.model.control.TargetInfo; import org.tizen.dynamicanalyzer.swap.model.data.ProcessInfo; -import org.tizen.dynamicanalyzer.swap.model.probe2.LogDataFactory; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; public class Project { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java index 308d36e..008f2ef 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java @@ -1080,7 +1080,6 @@ public class SqlManager { if (null != dbFilePath) { closeConnection(); } - } return dbInfo; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java index 4d9e588..8eaf375 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java @@ -220,15 +220,8 @@ public class SWAPCallStackManager extends BaseCallstackManager { } ProbeCommonData log = (ProbeCommonData) inputData; - // String strSeq = input[LogCenterConstants.SEQUENCE_NUMBER_INDEX]; - // String strTid = input[LogCenterConstants.THREAD_ID_INDEX]; - // String strCallerAddr = input[LogCenterConstants.CALLER_PCADDR_INDEX]; - - // int seq = Integer.parseInt(strSeq); - // int tid = Integer.parseInt(strTid); int seq = log.getSeq(); int tid = log.getTid(); - // long callerAddr = 0; long callerAddr = log.getCallerPcAddr(); // if (!strCallerAddr.isEmpty()) { // callerAddr = Long.parseLong(strCallerAddr); @@ -244,8 +237,11 @@ public class SWAPCallStackManager extends BaseCallstackManager { } String strCallerAddr = Long.toString(callerAddr); + System.out.println("tid :" + tid); List probeCallstack = new ArrayList( getUserCallstack(tid)); +// List probeCallstack = +// getUserCallstack(tid); int size = probeCallstack.size(); CallStackData callstackData = new CallStackData(seq); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java index b951fba..9f5eed2 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java @@ -324,12 +324,14 @@ public class Communicator30 extends BaseCommunicator { // return HostResult.ERR_BIN_INFO_GET_FAIL; binaryPath = CommonConstants.EMPTY; } + StringBuffer strBuf = new StringBuffer(); strBuf.append(binaryDir).append(File.separator) .append(selectedApp.getExecFileName(appInfo.getAppType())); binaryPath = strBuf.toString(); binInfo.setType(binaryType); + binInfo.setPath(binaryPath); // host has no binary file - pull binary file from target // change binary file path of host diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java index b8d3d1e..73dfaba 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java @@ -139,7 +139,7 @@ public class SWAPLogParser implements Runnable { private void logSlicing(List logLumb) { int size = logLumb.size(); LogPackage logPack = new LogPackage(); -// System.out.println(" log lumb size " + size); + // System.out.println(" log lumb size " + size); for (int i = 0; i < size; i++) { if (null == logLumb.get(i)) { continue; @@ -309,7 +309,7 @@ public class SWAPLogParser implements Runnable { BaseView bv = (BaseView) AnalyzerUtil.getViewPart(BaseView.ID); bv.getMainTab().updateLog(logPack); - // System.out.println("view update!!"); + // System.out.println("view update!!"); } private void setFuncName(ProfileData input) { @@ -318,12 +318,14 @@ public class SWAPLogParser implements Runnable { .getType() == 1) ? true : false; String baseAddr = Long.toString(AnalyzerManager.getProject() .getBaseAddress()); - // String path = AnalyzerManager.getProject().getBinaryPath(); + String highAddr = Long.toString(AnalyzerManager.getProject() + .getHighestAddress()); String path = DACommunicator.getSelectedApp().getBinInfo().getPath(); - // String path = DACommunicator.getSelectedApp().getBinInfo().getPath(); String pcAddr = Long.toString(input.getPcAddr()); String functionName = SymbolManager.addr2func(path, pcAddr, isPieBuild, baseAddr); + System.out.println("function name : " + functionName + "[ low :" + + baseAddr + " high : " + highAddr + " pcAddr : " + pcAddr + " ]"); if (null == functionName || functionName.isEmpty() || functionName.equals("_end")) { //$NON-NLS-1$ functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; @@ -334,7 +336,6 @@ public class SWAPLogParser implements Runnable { .demanglingFunctionName(prevFunctionName); ApiNameManager.getApiId(functionName); } - input.setApiName(functionName); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java index d12c413..181879b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java @@ -293,6 +293,7 @@ public class ByteUtils { return temp; } + @SuppressWarnings({ "unused", "unchecked" }) public static byte[] getByte(final Object... objects) { if (null == objects) { return null; @@ -371,12 +372,12 @@ public class ByteUtils { int line = 0; for (int i = 0; i < input.length; i++, line++) { String b = String.format("%2x", input[i]); - // System.out.print(b + " "); + System.out.print(b + " "); if (line == 9) { - // System.out.print(" "); + System.out.print(" "); } if (line == 19) { - // System.out.println(); + System.out.println(); line = -1; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiListView.java index 4b3ec49..df7d2d9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiListView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiListView.java @@ -63,7 +63,7 @@ public class FailedApiListView extends DAView { AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_GRID, AnalyzerConstants.SORT_TYPE_GRID }; + AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING }; protected int[] sourceColumns = { LogCenterConstants.SEQUENCE_NUMBER_INDEX, LogCenterConstants.TIME_INDEX, LogCenterConstants.APINAME_INDEX, LogCenterConstants.INPUTPARM_INDEX, diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java index eb7ff16..49ac14b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java @@ -95,15 +95,22 @@ public class FailedApiTable extends DATableComposite { for (int i = 0; i < size; i++) { // create text List text = new ArrayList(); + List data = new ArrayList(); + FailedData2 failedData = failedList.get(i); text.add(Integer.toString(failedData.getSeq())); String time = Formatter.toTimeFormat(failedData.getTime()); text.add(time); + data.add(time); text.add(failedData.getName()); + data.add(failedData.getName()); text.add(failedData.getArgs()); + data.add(failedData.getArgs()); text.add(Long.toString(failedData.getReturn())); + data.add(Long.toString(failedData.getReturn())); + String errCode = ErrorCodeManager.getInatance() .getErrorCode(failedData.getErrorCode()).name(); if (null == errCode) { @@ -111,6 +118,7 @@ public class FailedApiTable extends DATableComposite { errCode = "undefined error number"; //$NON-NLS-1$ } text.add(errCode); + data.add(Long.toString(failedData.getErrorCode())); String errMsg = ErrorCodeManager.getInatance().getErrorDescription( failedData.getErrorCode()); @@ -119,6 +127,7 @@ public class FailedApiTable extends DATableComposite { errMsg = "undefined error number"; //$NON-NLS-1$ } text.add(errMsg); + data.add(Long.toString(failedData.getErrorCode())); // create images @@ -127,6 +136,7 @@ public class FailedApiTable extends DATableComposite { failedData.getSeq()); tableData.setObject(failedData); tableData.setLogData(failedData.getData()); + tableData.getData().addAll(data); TableInput tableInput = new TableInput(); tableInput.setText(text); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakCheckList.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakCheckList.java new file mode 100644 index 0000000..bcdeb11 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakCheckList.java @@ -0,0 +1,75 @@ +package org.tizen.dynamicanalyzer.ui.summary.leaks; + +import java.util.HashMap; + +public class LeakCheckList { + private static HashMap leakCheckList = null; + + public static HashMap getLeakCheckList() { + if (null == leakCheckList) { + init(); + } + return leakCheckList; + } + + private static void init() { + leakCheckList = new HashMap(); + + /** memory leak check list */ + LeakInfo info = new LeakInfo("malloc", LeakDetector.API_TYPE_OPEN, true); + leakCheckList.put("malloc", info); + + info = new LeakInfo("free", LeakDetector.API_TYPE_CLOSE, true); + leakCheckList.put("free", info); + + info = new LeakInfo("realloc", LeakDetector.API_TYPE_REALLOC, true); + leakCheckList.put("realloc", info); + + info = new LeakInfo("calloc", LeakDetector.API_TYPE_OPEN, true); + leakCheckList.put("calloc", info); + + /** file leak check list */ + info = new LeakInfo("open", LeakDetector.API_TYPE_OPEN, true); + leakCheckList.put("open", info); + + info = new LeakInfo("close", LeakDetector.API_TYPE_CLOSE, true); + leakCheckList.put("close", info); + + info = new LeakInfo("fopen", LeakDetector.API_TYPE_OPEN, true); + leakCheckList.put("fopen", info); + + info = new LeakInfo("fclose", LeakDetector.API_TYPE_CLOSE, true); + leakCheckList.put("fclose", info); + + info = new LeakInfo("File::Construct", LeakDetector.API_TYPE_OPEN, + false); + leakCheckList.put("File::Construct", info); + + info = new LeakInfo("File::~File", LeakDetector.API_TYPE_CLOSE, false); + leakCheckList.put("File::~File", info); + + /** new - delete */ + info = new LeakInfo("new", LeakDetector.API_TYPE_OPEN, true); + leakCheckList.put("new", info); + + info = new LeakInfo("delete", LeakDetector.API_TYPE_CLOSE, true); + leakCheckList.put("delete", info); + + /** etc.. */ + info = new LeakInfo("app_get_name", LeakDetector.API_TYPE_OPEN, false); + leakCheckList.put("app_get_name", info); + + info = new LeakInfo("app_get_data_directory", + LeakDetector.API_TYPE_OPEN, false); + leakCheckList.put("app_get_data_directory", info); + + info = new LeakInfo("app_get_package", LeakDetector.API_TYPE_OPEN, + false); + leakCheckList.put("app_get_package", info); + + info = new LeakInfo("app_get_version", LeakDetector.API_TYPE_OPEN, + false); + leakCheckList.put("app_get_version", info); + + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDetector.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDetector.java index 3085d54..a96a577 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDetector.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDetector.java @@ -32,7 +32,6 @@ import java.util.List; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.model.Check; -import org.tizen.dynamicanalyzer.model.LeakCheckList; import org.tizen.dynamicanalyzer.swap.model.probe2.LeakData2; import org.tizen.dynamicanalyzer.swap.model.probe2.LogData; import org.tizen.dynamicanalyzer.swap.model.probe2.ProbeCommonData; @@ -50,16 +49,16 @@ public class LeakDetector { private int leakSeq = 0; public LeakDetector() { - LeakCheckList leakCheckList = AnalyzerManager.getLeakCheckList(); - if (leakCheckList != null) { - leakCheckHash = new HashMap(); - - List checks = leakCheckList.getChecks(); - int size = checks.size(); - for (int i = 0; i < size; i++) { - leakCheckHash.put(checks.get(i).getName(), checks.get(i)); - } - } + // LeakCheckList leakCheckList = AnalyzerManager.getLeakCheckList(); + // if (leakCheckList != null) { + // leakCheckHash = new HashMap(); + // + // List checks = leakCheckList.getChecks(); + // int size = checks.size(); + // for (int i = 0; i < size; i++) { + // leakCheckHash.put(checks.get(i).getName(), checks.get(i)); + // } + // } } public List getLeakDataList() { @@ -82,23 +81,23 @@ public class LeakDetector { return childHash; } - public HashMap getLeakCheckHash() { - if (null == leakCheckHash) { - leakCheckHash = new HashMap(); - LeakCheckList leakCheckList = AnalyzerManager.getLeakCheckList(); - if (null != leakCheckList) { - List checks = leakCheckList.getChecks(); - if (null != checks) { - int size = checks.size(); - for (int i = 0; i < size; i++) { - leakCheckHash.put(checks.get(i).getName(), - checks.get(i)); - } - } - } - } - return leakCheckHash; - } + // public HashMap getLeakCheckHash() { + // if (null == leakCheckHash) { + // leakCheckHash = new HashMap(); + // LeakCheckList leakCheckList = AnalyzerManager.getLeakCheckList(); + // if (null != leakCheckList) { + // List checks = leakCheckList.getChecks(); + // if (null != checks) { + // int size = checks.size(); + // for (int i = 0; i < size; i++) { + // leakCheckHash.put(checks.get(i).getName(), + // checks.get(i)); + // } + // } + // } + // } + // return leakCheckHash; + // } public void runLeakDectect(LogData logData) { ProbeCommonData log = (ProbeCommonData) logData; @@ -109,22 +108,29 @@ public class LeakDetector { } // step 1 : check "open" or "close" - Check chk; // 0: open , 1: close - if (null == getLeakCheckHash().get(apiName)) { + // Check chk; // 0: open , 1: close + // if (null == getLeakCheckHash().get(apiName)) { + // return; + // } else { + // chk = getLeakCheckHash().get(apiName); + // } + + LeakInfo chk = null; + if (null == LeakCheckList.getLeakCheckList().get(apiName)) { return; } else { - chk = getLeakCheckHash().get(apiName); + chk = LeakCheckList.getLeakCheckList().get(apiName); } HashMap leaks = getLeakHash(); - if (chk.getType() == API_TYPE_OPEN) { + if (chk.getApiType() == API_TYPE_OPEN) { if (chk.isCheckUserCall()) { checkUserFuncLeakData(logData, chk); } else { LeakData2 newLeak = new LeakData2(logData, this); leaks.put(logData.getKey(), newLeak); } - } else if (chk.getType() == API_TYPE_CLOSE) { + } else if (chk.getApiType() == API_TYPE_CLOSE) { int key = log.getKey(); LeakData2 freeData = getChildHash().get(key); if (null != freeData) { @@ -144,12 +150,12 @@ public class LeakDetector { leaks.remove(key); } - } else if (chk.getType() == API_TYPE_REALLOC) { + } else if (chk.getApiType() == API_TYPE_REALLOC) { // System.out.println("realloc!! " + input); // free index = input param 1st -// String inputParam = input[LogCenterConstants.INPUTPARM_INDEX]; - String inputParam = ((ProbeCommonData)log).getArgs(); + // String inputParam = input[LogCenterConstants.INPUTPARM_INDEX]; + String inputParam = ((ProbeCommonData) log).getArgs(); String[] splitInputParam = inputParam.split("\\,"); //$NON-NLS-1$ int rmKey = Integer.parseInt(splitInputParam[0]); leaks.remove(rmKey); @@ -158,15 +164,15 @@ public class LeakDetector { if (chk.isCheckUserCall()) { checkUserFuncLeakData(log, chk); } else { -// String key = input[chk.getKeyIndex()]; -// leaks.put(key, new LeakData(key, input, this)); + // String key = input[chk.getKeyIndex()]; + // leaks.put(key, new LeakData(key, input, this)); int key = log.getKey(); leaks.put(key, new LeakData2(log, this)); } } } - private void checkUserFuncLeakData(LogData log, Check chk) { + private void checkUserFuncLeakData(LogData log, LeakInfo chk) { HashMap cdMap = AnalyzerManager .getCallstackManager().getCallStackDataBySeqMap(); // HashMap apiMap = LogSpliter.getCallStackApiByAddrMap(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakInfo.java new file mode 100644 index 0000000..7eeb071 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakInfo.java @@ -0,0 +1,26 @@ +package org.tizen.dynamicanalyzer.ui.summary.leaks; + +public class LeakInfo { + private String apiName = null; + private int apiType = -1; + private boolean checkUserCall = false; + + public LeakInfo(String name, int type, boolean usercall) { + apiName = name; + apiType = type; + checkUserCall = usercall; + } + + public String getApiName() { + return apiName; + } + + public int getApiType() { + return apiType; + } + + public boolean isCheckUserCall() { + return checkUserCall; + } + +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java index e32c170..4d78b94 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java @@ -91,36 +91,33 @@ public class StopLogProcessor implements Runnable { } else { LogParser.stopLogParser(); } - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); - LogInserter.stopInsertLogThread(); - percent += 10; - StopProcessManager.getInstance().setValue(percent); FileChartManager.getInstance().stopUpdateLogThread(); - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); ThreadChartManager.getInstance().stopUpdateLogThread(); FunctionUsageProfiler.stopProfiler(); - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); UIDataManager.getInstance().stopUpdateLogThread(); - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); UpdateViewTimer.stop(); - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); LogInserter.stopInsertLogThread(); - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); UIRecorderTool.getInstance().stop(); - percent += 10; + percent += 5; StopProcessManager.getInstance().setValue(percent); /* save Project */ -- 2.7.4