Function : remove function entry/exit time select query for sample/probe log
authorheeyoung <heeyoung1008.hwang@samsung.com>
Tue, 6 Oct 2015 07:48:09 +0000 (16:48 +0900)
committerheeyoung <heeyoung1008.hwang@samsung.com>
Wed, 7 Oct 2015 05:41:00 +0000 (14:41 +0900)
Change-Id: Ie3fe292337334ae1bf3c991301c77749dcac9c0d
Signed-off-by: heeyoung <heeyoung1008.hwang@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RuntimeCallstackManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java

index f38a38f..f15ff16 100644 (file)
@@ -27,8 +27,6 @@
 
 package org.tizen.dynamicanalyzer.project.callstack;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -39,7 +37,6 @@ import java.util.concurrent.ConcurrentSkipListMap;
 
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.project.BinaryInfo;
 import org.tizen.dynamicanalyzer.project.LibraryObject;
@@ -55,8 +52,6 @@ import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackItem;
 import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit;
 import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnitDBTable;
 import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker;
-import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable;
-import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionExitDBTable;
 import org.tizen.dynamicanalyzer.util.Logger;
 
 public class RuntimeCallstackManager extends BaseCallstackManager {
@@ -71,9 +66,16 @@ public class RuntimeCallstackManager extends BaseCallstackManager {
                CallStackInserter.getInstance().pushData(csd);
        }
 
-       public NavigableMap<Long, Long> getSeqTimeByTidMap(int tid) {
+       /**
+        * Get sequence time map (for each tid)
+        * 
+        * @param tid thread id
+        * @param isCreate whether sequence time map create or not
+        *                      (true : if the map does not exist for thread, create and return)
+        */
+       public NavigableMap<Long, Long> getSeqTimeByTidMap(int tid, boolean isCreate) {
                NavigableMap<Long, Long> seqByTimeMap = seqTimeByTidMap.get(tid);
-               if (null == seqByTimeMap) {
+               if (isCreate && null == seqByTimeMap) {
                        seqByTimeMap = new ConcurrentSkipListMap<Long, Long>();
                        seqTimeByTidMap.put(tid, seqByTimeMap);
                }
@@ -130,7 +132,7 @@ public class RuntimeCallstackManager extends BaseCallstackManager {
 
                List<CallStackItem> userCallstack = getUserCallstack(tid);
                int size = userCallstack.size();
-               NavigableMap<Long, Long> seqByTimeMap = getSeqTimeByTidMap(tid);
+               NavigableMap<Long, Long> seqByTimeMap = getSeqTimeByTidMap(tid, true);
 
                CallStackUnit callerCallstackUnit = addrMap.get(callerAddr);
                if (null == callerCallstackUnit) {
@@ -301,50 +303,15 @@ public class RuntimeCallstackManager extends BaseCallstackManager {
        // to make callstack for sample, probe
        @Override
        public long getSeqOfUserCallstackForTime(int tid, long time) {
-               long seq = -1;
-               String query;
-               long entrySeq = -1, exitSeq = -1;
-               ResultSet rs;
-               NavigableMap<Long, Long> seqByTimeMap = getSeqTimeByTidMap(tid);
-               Long callstackTime = seqByTimeMap.floorKey(time);
-
-               if (null != callstackTime) { // found from memory
-                       seq = seqByTimeMap.get(callstackTime);
-               } else { // select from database
-                       try {
-                               query = String.format(FunctionEntryDBTable.USERCALLSTACK_QUERY, time);
-                               rs = SqlConnectionManager.executeQueryRS(query);
-                               if (rs == null) {
-                                       Logger.error("failed to query seq for given time from functionentry");
-                               } else {
-                                       if (rs.next()) {
-                                               entrySeq = rs.getLong(1);
-                                       }
-                                       SqlConnectionManager.releaseResultSet(rs);
-                               }
-
-                               query = String.format(FunctionExitDBTable.USERCALLSTACK_QUERY, time);
-                               rs = SqlConnectionManager.executeQueryRS(query);
-                               if (rs == null) {
-                                       Logger.error("failed to query seq for given time from functionexit");
-                               } else {
-                                       if (rs.next()) {
-                                               exitSeq = rs.getLong(1);
-                                       }
-                                       SqlConnectionManager.releaseResultSet(rs);
-                               }
-
-                               if (entrySeq < exitSeq) { // greater seq which time is less than sample/probe time
-                                       seq = exitSeq;
-                               } else {
-                                       seq = entrySeq;
-                               }
-                       } catch (SQLException e) {
-                               Logger.exception(e);
+               NavigableMap<Long, Long> seqByTimeMap = getSeqTimeByTidMap(tid, false);
+               if (null != seqByTimeMap) {
+                       Long callstackTime = seqByTimeMap.floorKey(time);
+                       if (null != callstackTime) { // found from memory
+                               return seqByTimeMap.get(callstackTime);
                        }
                }
 
-               return seq;
+               return -1;
        }
 
        public List<Long> getCallstackAddrListFromSeq(long seq) {
index e392d80..6b50ad5 100644 (file)
@@ -163,14 +163,14 @@ public class CallStackInserter extends DataThread<CallStackData> {
                        }
                }
 
-               // clear SeqTimeMap if number of entries over > 1M
+               // stop trace if number of entries over > 1M
                List<Integer> tids = Global.getRuntimeCallstackManager().getTidsOfSeqTimeMap();
                int size = tids.size();
                for (int i = 0; i < size; i++) {
                        Map<Long, Long> seqByTimeMap = Global.getRuntimeCallstackManager().getSeqTimeByTidMap(
-                                       tids.get(i));
-                       if (seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) {
-                               seqByTimeMap.clear();
+                                       tids.get(i), false);
+                       if (null != seqByTimeMap && seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) {
+                               DALimit.stopTraceAndOpenWarningDialog();
                        }
                }
        }
index 65efb9d..98720cf 100644 (file)
@@ -269,15 +269,19 @@ public class FunctionUsageProfiler extends PageDataManager {
                                                        .makeFunctionUsageProfileData(sampleLog);
                                        // set LastSampleSeq
                                        NavigableMap<Long, Long> seqByTimeMap = Global.getRuntimeCallstackManager()
-                                                       .getSeqTimeByTidMap(sampleLog.getTid());
-                                       // find the time of callstackdata which was made
-                                       // right before the current sample time
-                                       // callstackdatas made before that time is needless
-                                       Long lastTime = seqByTimeMap.floorKey(sampleLog.getTime());
-                                       if (lastTime != null) {
-                                               Long lastSeq = seqByTimeMap.get(lastTime);
-                                               setLastSampleSeq(lastSeq);
+                                                       .getSeqTimeByTidMap(sampleLog.getTid(), false);
+                                       
+                                       if (null != seqByTimeMap) {
+                                               // find the time of callstackdata which was made
+                                               // right before the current sample time
+                                               // callstackdatas made before that time is needless
+                                               Long lastTime = seqByTimeMap.floorKey(sampleLog.getTime());
+                                               if (lastTime != null) {
+                                                       Long lastSeq = seqByTimeMap.get(lastTime);
+                                                       setLastSampleSeq(lastSeq);
+                                               }
                                        }
+                                       
                                        // save to DB
                                        try {
                                                insertRowData.add(new Long(sampleLog.getSeq()));