From a47ea23ce3349f554497b03a54a36d272fb81286 Mon Sep 17 00:00:00 2001 From: woojin Date: Wed, 11 Feb 2015 00:06:02 +0900 Subject: [PATCH] CALLSTACK, FUNCTION PROFILING : remove potential bugs 1. safer usage of locks 2. remove potential NullPointerException 3. remove dead code Change-Id: Icb8dd27c9038d00f100a6142ccefbf5ded47d888 Signed-off-by: woojin --- .../swap/callstack/BaseCallstackManager.java | 4 +- .../ui/info/callstack/CallStackInserter.java | 4 +- .../ui/info/callstack/CallstackTable.java | 2 +- .../ui/info/callstack/CallstackView.java | 102 +++++++++++---------- .../summary/profiling/FunctionUsageProfiler.java | 2 +- .../ui/toolbar/StopLogProcessor.java | 2 +- 6 files changed, 59 insertions(+), 57 deletions(-) diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java index cba3a3c..7e3df03 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java @@ -103,7 +103,7 @@ public abstract class BaseCallstackManager { public void offerCallStackUnit(CallStackUnit csu) { if (callstackInserter != null) { - callstackInserter.startInserterThread(); + CallStackInserter.startInserterThread(); callstackInserter.offerCallstackUnit(csu); } return; @@ -111,7 +111,7 @@ public abstract class BaseCallstackManager { public void offerCallStackData(CallStackData csd) { if (callstackInserter != null) { - callstackInserter.startInserterThread(); + CallStackInserter.startInserterThread(); callstackInserter.offerCallstackData(csd); } return; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java index b019117..69df153 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java @@ -78,7 +78,7 @@ public class CallStackInserter implements Runnable { return callStackUnitTable; } - public synchronized void startInserterThread() { + public static synchronized void startInserterThread() { if (inserterThread == null) { stopTrace = false; inserterThread = new Thread(null, getInstance(), @@ -87,7 +87,7 @@ public class CallStackInserter implements Runnable { } } - public void stopInserterThread() { + public static synchronized void stopInserterThread() { if (inserterThread != null && inserterThread.isAlive()) { try { stopTrace = true; 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 d7e9b89..9010c22 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 @@ -64,7 +64,7 @@ public class CallstackTable extends DATableComposite { AnalyzerManager.getCurrentPage().updateView( new DAViewData(ScreenshotTabComposite.tabID, null)); GridItem[] sels = table.getSelection(); - if (sels.length < 0) { + if (sels.length <= 0) { return; } table.setFocusItem(sels[0]); 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 29f36f7..4f1f746 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 @@ -99,61 +99,63 @@ public class CallstackView extends DAViewComposite { for (int i = 0; i < size; i++) { DAViewComposite view = (DAViewComposite) AnalyzerManager .getCurrentPage().getView(observingViews[i]); - Control control = view.getControl(); - Grid table = null; - if (control instanceof DATableComposite) { - table = ((DATableComposite) control).getTable(); - } else if (control instanceof DAWindowingTableComposite) { - table = ((DAWindowingTableComposite) control).getTable(); - } else if (control instanceof DATreeComposite) { - table = ((DATreeComposite) control).getTable(); - } else { - continue; - } - if (table.getSelectionCount() > 0) { - GridItem[] selection = table.getSelection(); - long startTime = -1; - DATableDataFormat tableData = (DATableDataFormat) selection[0] - .getData(); - if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { - List failedData = tableData.getData(); - startTime = (Long) failedData.get(1); - } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { - List leakData = tableData.getData(); - startTime = (Long) leakData.get(4); - } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_CALLTRACE) { - List calltraceData = tableData.getData(); - startTime = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.STARTTIME.index); - } else { // in case table has LogData - LogData startData = ((DATableDataFormat) selection[0] - .getData()).getLogData(); - startTime = startData.getTime(); + if (view != null) { + Control control = view.getControl(); + Grid table = null; + if (control instanceof DATableComposite) { + table = ((DATableComposite) control).getTable(); + } else if (control instanceof DAWindowingTableComposite) { + table = ((DAWindowingTableComposite) control).getTable(); + } else if (control instanceof DATreeComposite) { + table = ((DATreeComposite) control).getTable(); + } else { + continue; } - long endTime = startTime; - // TODO: need to review what below code does - if (null != selection[selection.length - 1].getData()) { - DATableDataFormat lastTableData = (DATableDataFormat) selection[selection.length - 1] + if (table.getSelectionCount() > 0) { + GridItem[] selection = table.getSelection(); + long startTime = -1; + DATableDataFormat tableData = (DATableDataFormat) selection[0] .getData(); - if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { - List failedData = lastTableData.getData(); - endTime = (Long) failedData.get(1); - } else if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { - List leakData = lastTableData.getData(); - endTime = (Long) leakData.get(4); - } else if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_CALLTRACE) { - List calltraceData = lastTableData.getData(); - endTime = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.STARTTIME.index); - } else { - LogData endData = lastTableData.getLogData(); - endTime = endData.getTime(); + if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { + List failedData = tableData.getData(); + startTime = (Long) failedData.get(1); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { + List leakData = tableData.getData(); + startTime = (Long) leakData.get(4); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_CALLTRACE) { + List calltraceData = tableData.getData(); + startTime = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.STARTTIME.index); + } else { // in case table has LogData + LogData startData = ((DATableDataFormat) selection[0] + .getData()).getLogData(); + startTime = startData.getTime(); + } + long endTime = startTime; + // TODO: need to review what below code does + if (null != selection[selection.length - 1].getData()) { + DATableDataFormat lastTableData = (DATableDataFormat) selection[selection.length - 1] + .getData(); + if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { + List failedData = lastTableData.getData(); + endTime = (Long) failedData.get(1); + } else if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { + List leakData = lastTableData.getData(); + endTime = (Long) leakData.get(4); + } else if (lastTableData.getType() == AnalyzerConstants.TYPE_TABLE_CALLTRACE) { + List calltraceData = lastTableData.getData(); + endTime = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.STARTTIME.index); + } else { + LogData endData = lastTableData.getLogData(); + endTime = endData.getTime(); + } } + + DASelectionData data = new DASelectionData(observingViews[i], + startTime, endTime, selection, table); + updateView(data); } - - DASelectionData data = new DASelectionData(observingViews[i], - startTime, endTime, selection, table); - updateView(data); + return; } - return; } clear(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java index e923512..658c2b3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java @@ -67,7 +67,7 @@ public class FunctionUsageProfiler extends PageDataManager { private HashMap profileDataMakerMap = null; - private static long lastSampleSeq = -1; + private long lastSampleSeq = -1; private Object sampleSeqLock = new Object(); public void setLastSampleSeq(long seq) { 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 43dc2fd..5440d6f 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 @@ -105,7 +105,7 @@ public class StopLogProcessor implements Runnable { project.setTotalStopTime(ToolbarArea.getInstance().getTime()); // SqlManager.getInstance().saveLeakData(); // SqlManager.getInstance().saveFailedData(); - CallStackInserter.getInstance().stopInserterThread(); + CallStackInserter.stopInserterThread(); FunctionUsageProfiler.getInstance().saveProfilingData(); FunctionUsageProfiler.getInstance().saveProfilingChildData(); project.save(); -- 2.7.4