From 3f087025d39eeaa1706776feb452a042993d4338 Mon Sep 17 00:00:00 2001 From: jooyoul_lee Date: Tue, 12 Nov 2013 14:36:24 +0900 Subject: [PATCH] [Title] Callstack view excpetion fixed [Desc.] [Issue] --- .../dynamicanalyzer/common/AnalyzerConstants.java | 1 + .../listeners/TableTooltipListener.java | 13 ++++++- .../swap/logparser/MessageParser.java | 6 --- .../dynamicanalyzer/swap/model/data/LogData.java | 9 +++++ .../swap/model/data/ProbeCommonData.java | 2 - .../swap/model/data/ProfileData.java | 4 +- .../ui/info/callstack/CallstackTable.java | 43 ++++++++++++++++++---- .../ui/info/callstack/CallstackView.java | 36 +++++++++++++++--- .../ui/summary/failed/FailedApiTable.java | 1 + .../toolbar/configuration/BinarySettingsPage.java | 4 +- 10 files changed, 91 insertions(+), 28 deletions(-) diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java index 468bf0f..077dd31 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java @@ -336,6 +336,7 @@ public class AnalyzerConstants { public final static String CALLSTACK_KEY_PID = "pid";//$NON-NLS-1$ public final static String CALLSTACK_KEY_ADDR = "address";//$NON-NLS-1$ public final static String CALLSTACK_KEY_TIME = "time";//$NON-NLS-1$ + public final static String CALLSTACK_KEY_LIBNAME = "libName";//$NON-NLS-1$ public final static int SASH_WIDTH = 4; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java index 2c63c60..45533c3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java @@ -383,18 +383,22 @@ public class TableTooltipListener implements Listener { addr = (Long) item.getData(AnalyzerConstants.CALLSTACK_KEY_ADDR); pid = (Integer) item.getData(AnalyzerConstants.CALLSTACK_KEY_PID); time = (Long) item.getData(AnalyzerConstants.CALLSTACK_KEY_TIME); + libName = (String) item + .getData(AnalyzerConstants.CALLSTACK_KEY_LIBNAME); break; case AnalyzerConstants.TYPE_TABLE_FAILED: List failedData = tableData.getData(); addr = Long.parseLong(failedData.get(8)); pid = Integer.parseInt(failedData.get(7)); time = Long.parseLong(failedData.get(1)); + libName = failedData.get(9); break; case AnalyzerConstants.TYPE_TABLE_LEAK: List leakData = tableData.getData(); addr = Long.parseLong(leakData.get(9)); pid = Integer.parseInt(leakData.get(1)); time = Long.parseLong(leakData.get(4)); + libName = leakData.get(7); break; case AnalyzerConstants.TYPE_TABLE_WARNING: data = tableData.getLogData(); @@ -402,15 +406,18 @@ public class TableTooltipListener implements Listener { addr = pData.getCallerPcAddr(); pid = data.getPid(); time = data.getTime(); + libName = pData.getLibName(); break; case AnalyzerConstants.TYPE_TABLE_CALLTRACE: data = tableData.getLogData(); if (data instanceof UserFunctionData) { addr = ((UserFunctionData) data).getCallerPcAddr(); + libName = ((UserFunctionData) data).getLibName(); } else if (data instanceof ProfileData) { // addr = ((ProfileData) data).getPcAddr(); // config addr = ((ProfileData) data).getCallerPcAddr(); + libName = ((ProfileData) data).getLibName(); } pid = data.getPid(); time = data.getTime(); @@ -421,9 +428,10 @@ public class TableTooltipListener implements Listener { addr = wData.getCallerPcAddr(); pid = data.getPid(); time = data.getTime(); + wData.getLibName(); } - libName = getLibPath(item); + // libName = getLibPath(item); ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() .getProcessInfo(pid); @@ -496,10 +504,11 @@ public class TableTooltipListener implements Listener { switch (tableData.getType()) { case AnalyzerConstants.TYPE_TABLE_CALLSTACK: // addr = (Long) tableData.getObject(); + libName = item.getText(2); break; case AnalyzerConstants.TYPE_TABLE_FAILED: List failedData = tableData.getData(); - // libName = failedData.get(6)); + libName = failedData.get(9); break; case AnalyzerConstants.TYPE_TABLE_LEAK: List leakData = tableData.getData(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java index 66db1d8..7a1e7f0 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java @@ -529,12 +529,6 @@ public class MessageParser { if (AnalyzerManager.isProcessInfoArrived() && id > 0x0100 && id < 0x0200) { log = LogDataFactory.createInstance(data); - - if (log.getId() == DataChannelConstants.MSG_PROBE_MEMORY) { - ProbeCommonData pdata = (ProbeCommonData) log; - System.out.println("memory log : " + pdata.getApiName() - + " internal type : " + pdata.getInternalCall()); - } if (null != log) { buffer.add(log); messageCount++; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java index db78ead..0dbb526 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java @@ -47,6 +47,8 @@ public abstract class LogData { int seq = -1; long time = 0; + protected String libName = null; + public LogData() { } @@ -133,4 +135,11 @@ public abstract class LogData { public abstract int getPid(); + public String getLibName() { + return libName; + } + + public void setLibName(String libName) { + this.libName = libName; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java index 48a7bb4..fadd45f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java @@ -56,8 +56,6 @@ public class ProbeCommonData extends LogData { protected int reserved1 = 0; protected int reserved2 = 0; - protected String libName = null; - private String apiName = null; public ProbeCommonData() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java index c8d685f..7195645 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java @@ -58,8 +58,6 @@ public class ProfileData extends LogData { long ret = 0; String apiName = null; - String libName = null; - int buildType = -1; String binaryPath = null; @@ -94,7 +92,7 @@ public class ProfileData extends LogData { cpuNum = ByteUtils.toInt(data, index); index += INT_SIZE; ArgsInfo info = LogDataUtils.parseArgs(data, index); - args = info.getArgs(); + args = info.getProfileArgs(); break; case MSG_FUNCTION_EXIT: logCount++; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java index 68635b6..155b292 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java @@ -99,8 +99,34 @@ public class CallstackTable extends DATableComposite { } DATableDataFormat tableData = (DATableDataFormat) items[0] .getData(); - LogData logData = tableData.getLogData(); - int seqNum = logData.getSeq(); + + int seqNum = -1; + // long addr = -1; + int pid = -1; + long time = -1; + String libName = null; + if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { + List failedData = tableData.getData(); + seqNum = Integer.parseInt(failedData.get(0)); + // addr = Long.parseLong(failedData.get(8)); + pid = Integer.parseInt(failedData.get(7)); + time = Long.parseLong(failedData.get(1)); + libName = failedData.get(9); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { + List leakData = tableData.getData(); + seqNum = Integer.parseInt(leakData.get(2)); + // addr = Long.parseLong(leakData.get(9)); + pid = Integer.parseInt(leakData.get(1)); + time = Long.parseLong(leakData.get(4)); + libName = leakData.get(7); + } else { + LogData logData = tableData.getLogData(); + seqNum = logData.getSeq(); + pid = logData.getPid(); + time = logData.getTime(); + libName = logData.getLibName(); + } + HashMap cdMap = AnalyzerManager .getCallstackManager().getCallStackDataBySeqMap(); HashMap addrMap = AnalyzerManager @@ -118,7 +144,7 @@ public class CallstackTable extends DATableComposite { for (int i = 0; i < size; i++) { CallStackUnit api = addrMap.get(addrs.get(i)); - String addr = Formatter.toHexString(addrs.get(i).toString()); + String hexAddr = Formatter.toHexString(addrs.get(i).toString()); String path = api.getPath(); // if path has "da_probe.so" then reject if (path.contains(AnalyzerConstants.PROBE_LIB_TIZEN) @@ -137,12 +163,15 @@ public class CallstackTable extends DATableComposite { .setType(AnalyzerConstants.TYPE_TABLE_CALLSTACK); callstackTableData.setObject(address); gridItem.setData(callstackTableData); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, address); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_PID, logData.getPid()); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_TIME, logData.getTime()); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, + address); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_PID, pid); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_TIME, time); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_LIBNAME, + libName); } - String addrInput = (addrs.get(i) == 0) ? "" : addr; //$NON-NLS-1$ + String addrInput = (addrs.get(i) == 0) ? "" : hexAddr; //$NON-NLS-1$ gridItem.setText(1, addrInput); String fName = api.getFunctionName(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java index e079ec5..9b7a648 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java @@ -26,12 +26,15 @@ package org.tizen.dynamicanalyzer.ui.info.callstack; +import java.util.List; + import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridItem; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.model.DAView; @@ -111,14 +114,35 @@ public class CallstackView extends DAView { } if (table.getSelectionCount() > 0) { GridItem[] selection = table.getSelection(); - LogData startData = ((DATableDataFormat) selection[0].getData()) - .getLogData(); - long startTime = startData.getTime(); + long startTime = -1; + DATableDataFormat tableData = (DATableDataFormat) selection[0] + .getData(); + if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { + List failedData = tableData.getData(); + startTime = Long.parseLong(failedData.get(1)); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { + List leakData = tableData.getData(); + startTime = Long.parseLong(leakData.get(4)); + } else { + LogData startData = ((DATableDataFormat) selection[0] + .getData()).getLogData(); + startTime = startData.getTime(); + } long endTime = startTime; if (null != selection[selection.length - 1].getData()) { - LogData endData = ((DATableDataFormat) selection[selection.length - 1] - .getData()).getLogData(); - endTime = endData.getTime(); + DATableDataFormat lastTableData = (DATableDataFormat) selection[0] + .getData(); + if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { + List failedData = tableData.getData(); + endTime = Long.parseLong(failedData.get(1)); + } else if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { + List leakData = tableData.getData(); + endTime = Long.parseLong(leakData.get(4)); + } else { + LogData endData = ((DATableDataFormat) selection[selection.length - 1] + .getData()).getLogData(); + endTime = endData.getTime(); + } } DASelectionData data = new DASelectionData(observingViews[i], 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 2054513..713e6e7 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 @@ -141,6 +141,7 @@ public class FailedApiTable extends DATableComposite { data.add(Integer.toString(failedData.getPid())); data.add(Long.toString(failedData.getCallerPc())); // 8 + data.add(failedData.getLibName()); //9 // create images diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java index 211ea70..ab3137a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java @@ -279,7 +279,7 @@ public class BinarySettingsPage extends DAPageComposite { currentRadioButton.setLayoutData(data); currentRadioButton.setForeground(ColorResources.BLACK); currentRadioButton.setBackground(ColorResources.DIALOG_BG_UPPER); - currentRadioButton.setText("Current Libarry"); + currentRadioButton.setText("Current Library"); currentRadioButton.addSelectionListener(currentRadioButtonListener); radioGroup.addChild(currentRadioButton); @@ -292,7 +292,7 @@ public class BinarySettingsPage extends DAPageComposite { addRadioButton.setLayoutData(data); addRadioButton.setForeground(ColorResources.BLACK); addRadioButton.setBackground(ColorResources.DIALOG_BG_UPPER); - addRadioButton.setText("Add Libarry"); + addRadioButton.setText("Add Library"); addRadioButton.addSelectionListener(addRadioButtonListener); radioGroup.addChild(addRadioButton); -- 2.7.4