From 6cdf0a7d4d7d06924e8ce38004fd1356d81f0f0b Mon Sep 17 00:00:00 2001 From: greatim Date: Wed, 4 Feb 2015 18:09:08 +0900 Subject: [PATCH] INTERNAL: fix a bug that cannot insert whole data at stress test fix a bug that page data manager thread is terminated before whole data inserted. Change-Id: I20e850ebcc5c4cac8c80e3f31ee406d03b681d86 Signed-off-by: greatim --- .../dynamicanalyzer/common/AnalyzerConstants.java | 1 + .../swap/logparser/PageDataManager.java | 10 +++++--- .../swap/logparser/SWAPLogParser.java | 6 +++-- .../ui/info/callstack/CallStackInserter.java | 30 +++++++++++----------- .../opentrace/OpenTraceProgressManager.java | 17 ------------ 5 files changed, 27 insertions(+), 37 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 b478036..971a450 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java @@ -87,6 +87,7 @@ public class AnalyzerConstants { public static final String USER_INTERFACE_PAGE_MANAGER_THREAD = "User Interface Page Managerthread"; //$NON-NLS-1$ public static final String SQL_INSERTER_THREAD = "sql_inserter_thread"; //$NON-NLS-1$ public static final String HEART_BEAT_THREAD = "heart beat thread"; //$NON-NLS-1$ + public static final String CALLSTACK_INSERTER_THREAD = "Callstack inserter"; //$NON-NLS-1$ /* timer names */ public static final String SCREENSHOT_TIMER = "Periodic screenshot timer"; //$NON-NLS-1$ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/PageDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/PageDataManager.java index a6a730f..7c200f0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/PageDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/PageDataManager.java @@ -93,9 +93,7 @@ public abstract class PageDataManager implements Runnable { state = State.TO_BE_STOPED; sendNotify(); thread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME); - state = State.NOT_RUNNING; thread = null; - logPackQueue.clear(); Logger.debug(getName() + " thread joined!"); //$NON-NLS-1$ } catch (InterruptedException e) { Logger.exception(e); @@ -103,6 +101,11 @@ public abstract class PageDataManager implements Runnable { } } + private final void clear() { + state = State.NOT_RUNNING; + logPackQueue.clear(); + } + public final boolean isThreadAlive() { if (null == thread || !thread.isAlive()) { return false; @@ -133,8 +136,9 @@ public abstract class PageDataManager implements Runnable { onThreadStop(); - /* log for debug */ Logger.debug(getName() + " thread end!!"); //$NON-NLS-1$ + + clear(); } protected abstract void makeData(LogPackage pack); 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 db631e3..66d8d32 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 @@ -110,8 +110,6 @@ public class SWAPLogParser implements Runnable { Logger.exception(e); } } - functionEntryStackByTidMap.clear(); - DataManagerRegistry.stopThreads(); } /*** log parsing thread ***/ @@ -129,6 +127,10 @@ public class SWAPLogParser implements Runnable { /* log for debug */ Logger.debug("log parsing thread end!!"); //$NON-NLS-1$ + + functionEntryStackByTidMap.clear(); + DataManagerRegistry.stopThreads(); + AnalyzerManager.setLogParsingComplete(true); } 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 753702a..b019117 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 @@ -54,7 +54,7 @@ public class CallStackInserter implements Runnable { private static final int FULL_COUNT = 5000; private static boolean stopTrace = false; private static long lastInsertSeq = -1; - + private CallStackDataDBTable callStackDataTable = null; private CallStackUnitDBTable callStackUnitTable = null; @@ -62,18 +62,18 @@ public class CallStackInserter implements Runnable { callStackDataTable = new CallStackDataDBTable(); callStackUnitTable = new CallStackUnitDBTable(); } - + public synchronized static CallStackInserter getInstance() { if (null == instance) { instance = new CallStackInserter(); } return instance; } - + public CallStackDataDBTable getCallStackDataTable() { return callStackDataTable; } - + public CallStackUnitDBTable getCallStackUnitTable() { return callStackUnitTable; } @@ -81,7 +81,8 @@ public class CallStackInserter implements Runnable { public synchronized void startInserterThread() { if (inserterThread == null) { stopTrace = false; - inserterThread = new Thread(null, getInstance()); + inserterThread = new Thread(null, getInstance(), + AnalyzerConstants.CALLSTACK_INSERTER_THREAD); inserterThread.start(); } } @@ -135,7 +136,7 @@ public class CallStackInserter implements Runnable { while ((csd = callstackDataQueue.poll()) != null) { List addrs = csd.getAddrs(); - List insertRowData = new ArrayList(); + List insertRowData = new ArrayList(); try { insertRowData.add(new Long(csd.getSeq())); insertRowData.add(addrs); @@ -143,7 +144,7 @@ public class CallStackInserter implements Runnable { Logger.exception(e); } insertData.add(insertRowData); - + lastInsertSeq = csd.getSeq(); if ((insertCount-- <= 0) && (stopTrace == false)) { break; @@ -154,7 +155,7 @@ public class CallStackInserter implements Runnable { } // remove unnecessary callstackdata from memory TargetData target = SettingDataManager.getInstance().getConnectedTarget(); - if (target.isSelectedFeature(SettingConstants.FEATURE_NAME_INDEX_FUNCTION_SAMPLING)) { + if (target.isSelectedFeature(SettingConstants.FEATURE_NAME_INDEX_FUNCTION_SAMPLING)) { // sample feature is on long lastSampleSeq = FunctionUsageProfiler.getInstance().getLastSampleSeq(); if (lastSampleSeq != -1) { @@ -166,15 +167,14 @@ public class CallStackInserter implements Runnable { } } else { // sample feature is off // callstackdata is not needed in memory after insertion to DB - removeCallstackData(lastInsertSeq); + removeCallstackData(lastInsertSeq); } // clear SeqTimeMap if number of entries over > 1M List tids = AnalyzerManager.getCallstackManager().getTidsOfSeqTimeMap(); int size = tids.size(); for (int i = 0; i < size; i++) { - NavigableMap seqByTimeMap = - AnalyzerManager.getCallstackManager() - .getSeqTimeByTidMap(tids.get(i)); + NavigableMap seqByTimeMap = AnalyzerManager.getCallstackManager() + .getSeqTimeByTidMap(tids.get(i)); if (seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) { seqByTimeMap.clear(); } @@ -192,10 +192,10 @@ public class CallStackInserter implements Runnable { callstackDataQueue.offer(csd); } } - + private void removeCallstackData(long seq) { - NavigableMap callstackDataMap = AnalyzerManager - .getCallstackManager().getCallStackDataBySeqMap(); + NavigableMap callstackDataMap = AnalyzerManager.getCallstackManager() + .getCallStackDataBySeqMap(); SortedMap headMap = callstackDataMap.headMap(seq); Iterator> itr = headMap.entrySet().iterator(); while (itr.hasNext()) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java index c86f6d8..2fb85bb 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java @@ -189,23 +189,6 @@ public class OpenTraceProgressManager implements Runnable { DataManagerRegistry.startThreads(); } - private void waitingThreads() { - while (!AnalyzerManager.isExit()) { - OpenTraceInputReader.stopOpenTraceInputReader(); - DataManagerRegistry.stopThreads(); - try { - if (!DataManagerRegistry.isAnyoneAlive()) { - break; - } else { - Thread.sleep(AnalyzerConstants.LOG_CHECK_INTERVAL); - } - } catch (InterruptedException e) { - /** thread stop by interrupt */ - break; - } - } - } - @Override public void run() { AnalyzerUtil.executeCommand(ClearHandler.ID); -- 2.7.4