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;
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;
}
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();
}
}
while ((csd = callstackDataQueue.poll()) != null) {
List<Long> addrs = csd.getAddrs();
- List<Object> insertRowData = new ArrayList<Object>();
+ List<Object> insertRowData = new ArrayList<Object>();
try {
insertRowData.add(new Long(csd.getSeq()));
insertRowData.add(addrs);
Logger.exception(e);
}
insertData.add(insertRowData);
-
+
lastInsertSeq = csd.getSeq();
if ((insertCount-- <= 0) && (stopTrace == false)) {
break;
}
// 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) {
}
} 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<Integer> tids = AnalyzerManager.getCallstackManager().getTidsOfSeqTimeMap();
int size = tids.size();
for (int i = 0; i < size; i++) {
- NavigableMap<Long, Long> seqByTimeMap =
- AnalyzerManager.getCallstackManager()
- .getSeqTimeByTidMap(tids.get(i));
+ NavigableMap<Long, Long> seqByTimeMap = AnalyzerManager.getCallstackManager()
+ .getSeqTimeByTidMap(tids.get(i));
if (seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) {
seqByTimeMap.clear();
}
callstackDataQueue.offer(csd);
}
}
-
+
private void removeCallstackData(long seq) {
- NavigableMap<Long, CallStackData> callstackDataMap = AnalyzerManager
- .getCallstackManager().getCallStackDataBySeqMap();
+ NavigableMap<Long, CallStackData> callstackDataMap = AnalyzerManager.getCallstackManager()
+ .getCallStackDataBySeqMap();
SortedMap<Long, CallStackData> headMap = callstackDataMap.headMap(seq);
Iterator<Map.Entry<Long, CallStackData>> itr = headMap.entrySet().iterator();
while (itr.hasNext()) {