@Override
public List<TreeInput> makeTreeInput() {
List<TreeInput> output = new ArrayList<TreeInput>();
- Map<Integer, CurrentLeakData> leaks = null;
- List<List<Object>> leakDataList = null;
- // TODO : make hashkey (LogData.getKey() --> combination of pid and
- // address)
+ List<Integer> selectedPids = new ArrayList<Integer>(); // for multiple processes selection
+ selectedPids.add(Integer.valueOf(ToolbarArea.getInstance().getSelectedPid()));
-
++
if (isRange) {
- leakDataList = SummaryDataManager.getInstance().getLeakDataMaker()
- .getLeakDataForRange();
+ // Grouping - user direct allocation
+ HashMap<Integer, List<GroupLeakData>> rangeGroupData = RangeDataManager.getInstance()
+ .getSelectedRangeGroupDataHashMap(selectedPids);
+ if (rangeGroupData == null || rangeGroupData.size() < 1)
+ return output;
+
+ for (Map.Entry<Integer, List<GroupLeakData>> entry : rangeGroupData.entrySet()) {
+ output.addAll(makeTreeInputForRangeGroupData(entry.getKey().intValue(),
+ entry.getValue()));
+ }
+
+ // TODO : Internal allocation
} else {
- leaks = AnalyzerManager.getNewLeakDetector().getLeakHash();
+ // Grouping - user direct allocation
+ HashMap<Integer, LeakDataBundle> leaks = AnalyzerManager.getLeakDetector()
+ .getSelectedLeakDataBundleHashMap(selectedPids);
if (leaks == null || leaks.size() < 1)
return output;
- ArrayList<CurrentLeakData> leakList = new ArrayList<CurrentLeakData>();
- leakList.addAll(leaks.values());
- List<Long> leakSeqNumList = new ArrayList<Long>();
- for (int i = 0; i < leakList.size(); i++)
- leakSeqNumList.add(leakList.get(i).getSequenceNumber());
-
- leakDataList = SummaryDataManager.getInstance().getLeakDataMaker()
- .getLeakDataWithSeq(leakSeqNumList);
- }
- if (leakDataList == null)
- return output;
- // TODO : it is necessary to consider when choosing a multi-processes.
- int selectedPid = ToolbarArea.getInstance().getSelectedPid();
- int size = leakDataList.size();
- for (int i = 0; i < size; i++) {
- List<Object> iLeakData = leakDataList.get(i);
- int pid = (Integer) iLeakData.get(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.index);
- if (selectedPid != 0) {
- if (selectedPid != pid) {
- continue;
- }
- }
-
- TreeInput leakInput = makeTreeInputForLeakData(iLeakData, i);
- if (leakInput != null){
- output.add(leakInput);
+ for (Map.Entry<Integer, LeakDataBundle> entry : leaks.entrySet()) {
+ output.addAll(makeTreeInputForGroupData(entry.getKey().intValue(), entry.getValue()));
}
+
+ // TODO : Internal allocation
}
return output;