[SRADA-411] Add 3D and GEM memory data to Process Memory
authordongkyu6 lee <dongkyu6.lee@samsung.com>
Fri, 22 Apr 2016 06:09:42 +0000 (15:09 +0900)
committerdongkyu6 lee <dongkyu6.lee@samsung.com>
Tue, 26 Apr 2016 23:49:39 +0000 (08:49 +0900)
 - SRADA-414, SRADA-415, SRADA-440

Change-Id: I33d89dffa46b1b648a7c08fdf8a910a281dbec60

23 files changed:
org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/config/setting
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessProfileData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SystemData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryAllocationTraceTableView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryChartView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/HeapMemoryChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartBoard.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/ProcessMemoryChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/SystemMemoryChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemAllocDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemoryDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/ProcessMemoryDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryAllocationTraceTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryDetailsTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryStatisticsTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ProcessMemoryChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineChartManager.java

index 30ff11d..572ca88 100644 (file)
@@ -11,16 +11,16 @@ mobile|Available Template List|1|2|3|4|5|6|7|8|9|10
 mobile|Selected Template|1
 mobile|Available Feature List|1|1000|4|5|6|7|8|9|100|101|1001|301|200|201|202|203|204|206
 mobile|Selected Feature List|1|5|1000:1000|100|101|1001:10
-mobile|Available Chart List|CPU|CPU core|CPU frequency|Heap allocation|Process Size|Memory|Screenshot|UI event|Disk IO|Network IO|Device|Energy
+mobile|Available Chart List|CPU|CPU core|CPU frequency|Memory|Process Size|Heap allocation|Screenshot|UI event|Disk IO|Network IO|Device|Energy
 wearable|Protocol Version|3.0
 wearable|Available Template List|1|2|3|4|5|6|7|8|9|10
 wearable|Selected Template|1
 wearable|Available Feature List|1|1000|4|5|6|7|8|9|100|101|1001|301|200|201|202|203|204
 wearable|Selected Feature List|1|5|1000:1000|100|101|1001:10
-wearable|Available Chart List|CPU|CPU core|CPU frequency|Heap allocation|Process Size|Memory|Screenshot|UI event|Disk IO|Network IO|Device|Energy
+wearable|Available Chart List|CPU|CPU core|CPU frequency|Memory|Process Size|Heap allocation|Screenshot|UI event|Disk IO|Network IO|Device|Energy
 tv|Protocol Version|3.0
 tv|Available Template List|1|3|9|10
 tv|Selected Template|1
 tv|Available Feature List|1|1000|4|5|6|7|8|9|100|101|1001|204
 tv|Selected Feature List|1|5|1000:1000|100|101|1001:10
-tv|Available Chart List|CPU|CPU core|CPU frequency|Heap allocation|Process Size|Memory|Screenshot|UI event|Disk IO|Network IO|Device|Energy
+tv|Available Chart List|CPU|CPU core|CPU frequency|Memory|Process Size|Heap allocation|Screenshot|UI event|Disk IO|Network IO|Device|Energy
index 27ae2d6..a0c7e5f 100644 (file)
@@ -43,6 +43,8 @@ public class Global {
        private static PackageInfo currentApplication = null;
        private static Project currentProject = null;
        private static RuntimeCallstackManager temporaryCallstackManager = new RuntimeCallstackManager();
+       
+       public final static boolean MEMPSENABLE = true;
 
        public static DeviceInfo getCurrentDeviceInfo() {
                return currentDevice;
index b84800f..71d9bc2 100644 (file)
@@ -58,6 +58,8 @@ public class TimelineChartLabels extends NLS {
        public static String PROCESS_MEMORY_CHART_PSS;
        public static String PROCESS_MEMORY_CHART_RSS;
        public static String PROCESS_MEMORY_CHART_VSS;
+       public static String PROCESS_MEMORY_CHART_THREED;
+       public static String PROCESS_MEMORY_CHART_GEM;
        public static String PROCESS_MEMORY_CHART_TITLE;
        public static String PROCESS_MEMORY_CHART_DESCRIPTOR;
        
index 68af7b8..bff5152 100644 (file)
@@ -29,9 +29,11 @@ HEAP_CHART_SERIES_NAME_APP_ALLOCATION=Application
 HEAP_CHART_TITLE=Heap allocation
 HEAP_CHART_DESCRIPTOR=Shows heap memory allocation.
 
-PROCESS_MEMORY_CHART_PSS=Proportional set size
-PROCESS_MEMORY_CHART_RSS=Resident set size
-PROCESS_MEMORY_CHART_VSS=Virtual set size
+PROCESS_MEMORY_CHART_PSS=PSS
+PROCESS_MEMORY_CHART_RSS=RSS
+PROCESS_MEMORY_CHART_VSS=VSS
+PROCESS_MEMORY_CHART_THREED=3D
+PROCESS_MEMORY_CHART_GEM=GEM(ALLOC)
 PROCESS_MEMORY_CHART_TITLE=Process Size
 PROCESS_MEMORY_CHART_DESCRIPTOR=Shows process memory usage. \nvirtual memory, resident memory, proportional memory.
 
index f8c0ece..dcc08b3 100755 (executable)
@@ -316,7 +316,7 @@ public class Project {
                        if (processInfos.size() == 0) {
                                pinfo.setMainOrNot(true);
                        }
-                       processInfos.put(Integer.valueOf(pid), pinfo);
+                       processInfos.put(Integer.valueOf(pid), pinfo);                  
                }
        }
 
index a34a699..efc3cd4 100755 (executable)
@@ -140,7 +140,6 @@ public class MessageParser extends DataThread<LogData> {
        public void run() {
                DebugLog.openDataChannelWriter();
                Thread curThread = Thread.currentThread();
-
                try {
                        synchronized (AnalyzerManager.waitStartAck) {
                                try {
@@ -189,7 +188,10 @@ public class MessageParser extends DataThread<LogData> {
                        break;
                case ProtocolConstants.MSG_PROCESS_MAP:
                case ProtocolConstants.MSG_PROCESS_UNMAP:
+                       try {
                        memoryMapChanged(log);
+                       }
+                       catch (Exception ex) {}
                        break;
                case ProtocolConstants.MSG_DATA_TERMINATE:
                        processTerminate();
@@ -232,10 +234,14 @@ public class MessageParser extends DataThread<LogData> {
                ProcessInformation pinfo = project.getProcessInformation(pid);
                if (null == pinfo) {
                        pinfo = new ProcessInformation();
+                       
+                       int ppid = log.getPpid();
+                       
                        pinfo.setPid(pid);
-                       pinfo.setPpid(log.getPpid());
+                       pinfo.setPpid(ppid);
                        pinfo.setStartTime(starttime);
                        pinfo.setProcessName(log.getCmdname());
+                       
                        project.putProcessInformation(pinfo);
 
                        pinfo.setDropLog(true);
@@ -288,7 +294,7 @@ public class MessageParser extends DataThread<LogData> {
                                BinaryInfo bininfo = project.getDeviceStatusInfo().getBinaryInfo(libPath);
                                LibraryObject libObj = new LibraryObject(bininfo.getID(), lowAddr, highAddr);
                                if (!lastMap.addLibraryMap(libObj)) {
-                                       Logger.error("exist library");
+                                       Logger.error("exist library - PID #" + pid + ", lib : " + libPath);
                                }
 
                                pinfo.setMappingState(true);
index b0baaba..7ba7c7b 100644 (file)
@@ -33,6 +33,8 @@ public class ProcessProfileData {
        private long residentMemory; // protocol 3.0
        private long sharedMemory; // protocol 3.0
        private long pssMemory; // protocol 3.0
+       private long threeDMemory = -1; // protocol 4.2
+       private long gemMemory = -1; // protocol 4.2
        private long totalAllocSize; // protocol 3.0
        private int threadCount; // protocol 3.0
        private String threadLoad; // protocol 3.0
@@ -85,6 +87,22 @@ public class ProcessProfileData {
                this.pssMemory = pssMemory;
        }
 
+       public long getThreeDMemory() {
+               return threeDMemory;
+       }
+
+       public void setThreeDMemory(long threeDMemory) {
+               this.threeDMemory = threeDMemory;
+       }
+
+       public long getGemMemory() {
+               return gemMemory;
+       }
+
+       public void setGemMemory(long gemMemory) {
+               this.gemMemory = gemMemory;
+       }
+
        public long getTotalAllocSize() {
                return totalAllocSize;
        }
index a05fbad..d8354e2 100644 (file)
@@ -29,6 +29,8 @@ package org.tizen.dynamicanalyzer.swap.model.data;
 import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.model.DATime;
+import org.tizen.dynamicanalyzer.project.Project;
+import org.tizen.dynamicanalyzer.protocol.Protocol;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.UnsignedInt;
 
@@ -179,6 +181,8 @@ public class SystemData extends LogData {
        }
 
        private void parseTargetProcessInfo(int targetProcessCount) {
+               String protocolversion = Global.getProject().getProtocolVersion();
+               
                processProfileDataList = new ProcessProfileData[targetProcessCount];
                for (int i = 0; i < targetProcessCount; i++) {
                        ProcessProfileData processData = new ProcessProfileData();
@@ -189,6 +193,12 @@ public class SystemData extends LogData {
                        processData.setResidentMemory(getLong());
                        processData.setSharedMemory(getLong());
                        processData.setPssMemory(getLong());
+                       
+                       if(Global.MEMPSENABLE) {
+                               processData.setGemMemory(getLong());
+                               processData.setThreeDMemory(getLong());
+                       }
+                       
                        processData.setTotalAllocSize(getLong());
                        processData.setThreadCount(getInt());
                        processData.setThreadLoad(parseLoad(processData.getThreadCount()));
index 90d1264..4943688 100755 (executable)
@@ -54,7 +54,7 @@ public class MemoryAllocationTraceTableView extends DAViewComposite {
        private boolean firstUpdate;
        private boolean tableVisible;
        
-       private boolean[] columnVisibilityEnable = { true, true, true, true, true, true, true, true, false };
+       private boolean[] columnVisibilityEnable = { false, true, true, true, true, true, true, true, false };
        private boolean[] columnVisibilityDisable = { false, false, false, false, false, false, false, false, true };
        
        public MemoryAllocationTraceTableView(Composite parent, int style) {
index 63ee484..cceba41 100755 (executable)
@@ -31,6 +31,7 @@ import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.ScrollBar;
+import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.nl.MemoryPageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
@@ -119,6 +120,9 @@ public class MemoryChartView extends DAViewComposite {
                } else {
                        memoryChartBoard.setTotalEndTime(Toolbar.INSTANCE.getTime(), false);
                }
+               
+               if(Global.getProject() == null)
+                       return;
 
                memoryChartBoard.updateChartBoard();
                memoryChartBoard.setTimelineMarkerStartTime(rangeDataManager.getMarkerStartTime()
index cdd2ae6..1e92543 100755 (executable)
@@ -118,8 +118,12 @@ public class HeapMemoryChart extends MemoryChart {
                        return;\r
                }\r
                \r
+               /*\r
+                * index 0 : system memory\r
+                * index 1 : process memory\r
+                */\r
                @SuppressWarnings("unchecked")\r
-               Map<Integer, List<List<Object>>> processDataMap = (Map<Integer, List<List<Object>>>)dataList.get(TimelineConstants.TARGET_PROCESS_DB_DATA);\r
+               Map<Integer, List<List<Object>>> processDataMap = (Map<Integer, List<List<Object>>>)dataList.get(1);\r
                List<List<Object>> processData = processDataMap.get(pid);\r
                \r
                if(processData == null) {\r
@@ -128,27 +132,32 @@ public class HeapMemoryChart extends MemoryChart {
                \r
                for(int i = 0; i < processData.size(); i++) {\r
                        List<Object> row = processData.get(i);\r
-                       double time = (Long) row.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.ordinal())\r
+                       double time = (Long) row.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.index)\r
                                        / TimelineConstants.MEGA_DOUBLE;\r
                        \r
-                       if(totalSeries != null) {\r
-                               long totalAlloc = (Long) row\r
-                                               .get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_TOTAL_BYTE.ordinal());\r
-                               totalSeries.addSeriesItem(new DAChartSeriesItem(time, totalAlloc, Formatter\r
-                                               .toByteFormat(totalAlloc)));\r
-                       }\r
+                       long totalAlloc = 0;\r
                        \r
+                       @SuppressWarnings("unchecked")\r
+                       List<Integer> libIdList = (List<Integer>) row.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BINARY_ID.index);\r
                        \r
                        @SuppressWarnings("unchecked")\r
-                       List<Integer> libIdList = (List<Integer>) row.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BINARY_ID.ordinal());\r
+                       List<Long> libByteList = (List<Long>) row.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BYTE.index);\r
+                       \r
                        int index = libIdList.indexOf(libId);\r
                        \r
                        if(index != -1) {\r
-                               @SuppressWarnings("unchecked")\r
-                               List<Long> libByteList = (List<Long>) row.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BYTE.ordinal());\r
                                long targetAlloc = (Long) libByteList.get(index);\r
                                appSeries.addSeriesItem(new DAChartSeriesItem(time, targetAlloc, Formatter.toByteFormat(targetAlloc)));\r
                        }\r
+                       \r
+                       for(Long libbyte : libByteList) {\r
+                               totalAlloc += libbyte;\r
+                       }\r
+                       \r
+                       if(totalSeries != null) {               \r
+                               totalSeries.addSeriesItem(new DAChartSeriesItem(time, totalAlloc, Formatter\r
+                                               .toByteFormat(totalAlloc)));\r
+                       }\r
                }\r
        }\r
        \r
index caa26be..5c39b84 100755 (executable)
@@ -25,7 +25,6 @@
 package org.tizen.dynamicanalyzer.ui.memory.chart;\r
 \r
 import java.util.ArrayList;\r
-import java.util.HashSet;\r
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
@@ -66,7 +65,6 @@ public class MemoryChartBoard extends DAChartBoard {
        private int allProcessPID = 0;\r
        private int preSelectedPID = -1;\r
        \r
-       private final int HEAP_DB_LIB_ID_INDEX = 9;\r
        private final int appAllocSeriesID = -10;\r
        private final String libNameMainExecutable = "Main Executable";\r
        private final String libNameUnknown = "Unknown";\r
@@ -142,8 +140,11 @@ public class MemoryChartBoard extends DAChartBoard {
        private void createChartItem() {\r
                long startTime = AnalyzerUtil.translateSecToMicroSec(getVisibleStartTime());\r
                long endTime = AnalyzerUtil.translateSecToMicroSec(getVisibleEndTime());\r
+               \r
+               String pidliststring = getTargetPIDString();\r
+               \r
                Map<Integer, List<List<Object>>> allProcessDBData = MemoryDataManager.getInstance()\r
-                               .getTargetProcessDataMapFromDB(startTime, endTime, allProcessPID);\r
+                               .getTargetProcessDataMapFromDB(startTime, endTime, pidliststring);\r
                \r
                Set<Integer> pidSet = allProcessDBData.keySet();\r
                Object[] pidList = pidSet.toArray();\r
@@ -155,20 +156,17 @@ public class MemoryChartBoard extends DAChartBoard {
                        \r
                        List<List<Object>> targetProcessDBData = allProcessDBData.get(pid);\r
                        \r
-                       Set<Integer> libIDSet = new HashSet<Integer>();\r
+                       List<Integer> libIDSet = new ArrayList<Integer>();\r
                        for(List<Object> targetProcessDBDataBy1Sec : targetProcessDBData) {\r
-                               Object tmp = targetProcessDBDataBy1Sec.get(HEAP_DB_LIB_ID_INDEX);\r
+                               Object tmp = targetProcessDBDataBy1Sec.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BINARY_ID.index);\r
                                @SuppressWarnings("unchecked")\r
                                List<Object> tmplibIDList = (List<Object>)tmp;\r
                                        for(Object oLibID : tmplibIDList) {\r
-                                               int libID = (Integer)oLibID;\r
-                                               libIDSet.add(libID);\r
+                                               libIDSet.add((Integer)oLibID);\r
                                        }\r
                        }\r
                        \r
-                       Object[] libIDList = libIDSet.toArray();\r
-                       for(Object oLibID : libIDList) {\r
-                               int libId = (Integer)oLibID;\r
+                       for(Integer libId : libIDSet) {\r
                                if(!isExistHeapChart(pid, libId)) {\r
                                        addHeapChartItemList(pid, libId);\r
                                }\r
@@ -305,6 +303,10 @@ public class MemoryChartBoard extends DAChartBoard {
        private String getChartName(String libPath) {\r
                int index = libPath.lastIndexOf("/");\r
                \r
+               if(index < 1) {\r
+                       return libPath;\r
+               }\r
+                       \r
                return libPath.substring(0, index) + "\n" + libPath.substring(index+1);\r
        }\r
        \r
@@ -415,7 +417,7 @@ public class MemoryChartBoard extends DAChartBoard {
                        for(int i = 0; i < processData.size(); i++) {\r
                                List<Object> row = processData.get(i);\r
                                @SuppressWarnings("unchecked")\r
-                               List<Long> libByteList = (List<Long>) row.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BYTE.ordinal());\r
+                               List<Long> libByteList = (List<Long>) row.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BYTE.index);\r
                                for(Long libByte : libByteList) {\r
                                        if(max < libByte) {\r
                                                max = libByte;\r
@@ -451,5 +453,35 @@ public class MemoryChartBoard extends DAChartBoard {
                preSelectedPID = selectedPid;\r
        }\r
        \r
+       private String getTargetPIDString(){\r
+               List<Integer> pidlist = new ArrayList<Integer>();\r
+\r
+               int[] pids = Global.getProject().getProcessIDs();\r
+               int targetPID = Toolbar.INSTANCE.getSelectedPid();\r
+\r
+               if(targetPID > 0) {\r
+                       pidlist.add(targetPID);\r
+               }\r
+               else {\r
+                       for (int i = 0; i < pids.length; i++) {\r
+                               pidlist.add(pids[i]);\r
+                       }       \r
+               }\r
+\r
+               String pidliststring = "(";\r
+\r
+               for(int i = 0 ; i < pidlist.size() ; i++) {\r
+                       pidliststring += Integer.toString(pidlist.get(i));\r
+\r
+                       if(i != pidlist.size() - 1) {\r
+                               pidliststring += ", ";\r
+                       }\r
+               }\r
+\r
+               pidliststring += ")";\r
+\r
+               return pidliststring;\r
+       }\r
+       \r
 }\r
 \r
index 3f415fe..2be3d1b 100755 (executable)
@@ -45,6 +45,8 @@ public class ProcessMemoryChart extends MemoryChart {
        private DAChartSeries vssSeries;\r
        private DAChartSeries rssSeries;\r
        private DAChartSeries pssSeries;\r
+       private DAChartSeries threeDSeries;\r
+       private DAChartSeries gemSeries;\r
        \r
        private Map<Integer, DAChartBoardItem> processChartboardMap = new HashMap<Integer, DAChartBoardItem>();\r
        private Map<Integer, String> processNameMap = new HashMap<Integer, String>();\r
@@ -66,10 +68,23 @@ public class ProcessMemoryChart extends MemoryChart {
                pssSeries = new DAChartSeries(\r
                                TimelineChartLabels.PROCESS_MEMORY_CHART_PSS,\r
                                DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_PSS);\r
+               threeDSeries = new DAChartSeries(\r
+                               TimelineChartLabels.PROCESS_MEMORY_CHART_THREED,\r
+                               DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_VSS);\r
+               gemSeries = new DAChartSeries(\r
+                               TimelineChartLabels.PROCESS_MEMORY_CHART_GEM,\r
+                               DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_RSS);\r
                \r
-               chart.addSeries(vssSeries);\r
-               chart.addSeries(rssSeries);\r
-               chart.addSeries(pssSeries);\r
+               if(Global.MEMPSENABLE) {\r
+                       chart.addSeries(pssSeries);\r
+                       chart.addSeries(threeDSeries);\r
+                       chart.addSeries(gemSeries);\r
+               }\r
+               else {\r
+                       chart.addSeries(vssSeries);\r
+                       chart.addSeries(rssSeries);\r
+                       chart.addSeries(pssSeries);     \r
+               }               \r
        }\r
        \r
        @Override\r
@@ -77,6 +92,8 @@ public class ProcessMemoryChart extends MemoryChart {
                vssSeries.clear();\r
                rssSeries.clear();\r
                pssSeries.clear();\r
+               threeDSeries.clear();\r
+               gemSeries.clear();\r
                \r
                if(Global.getProject() == null) {\r
                        return;\r
@@ -87,8 +104,12 @@ public class ProcessMemoryChart extends MemoryChart {
                        return;\r
                }\r
                \r
+               /*\r
+                * index 0 : system memory\r
+                * index 1 : process memory\r
+                */             \r
                @SuppressWarnings("unchecked")\r
-               Map<Integer, List<List<Object>>> processDataMap = (Map<Integer, List<List<Object>>>)dataList.get(TimelineConstants.TARGET_PROCESS_DB_DATA);             \r
+               Map<Integer, List<List<Object>>> processDataMap = (Map<Integer, List<List<Object>>>)dataList.get(1);            \r
                List<List<Object>> processData = processDataMap.get(pid);\r
                \r
                if(processData == null) {\r
@@ -97,23 +118,37 @@ public class ProcessMemoryChart extends MemoryChart {
                \r
                for(int i = 0; i < processData.size(); i++) {\r
                        List<Object> row = processData.get(i);\r
-                       double time = (Long) row.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.ordinal())\r
-                                       / TimelineConstants.MEGA_DOUBLE;\r
-                       long vssMemory = (Long) row\r
-                                       .get(ProcessMemoryDBTable.COLUMN.MEMORY_VIRTUAL.ordinal());\r
-                       long rssMemory = (Long) row\r
-                                       .get(ProcessMemoryDBTable.COLUMN.MEMORY_RESIDENT.ordinal());\r
-                       long pssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_PSS\r
-                                       .ordinal());\r
-                       vssSeries.addSeriesItem(\r
-                                       new DAChartSeriesItem(time, vssMemory, Formatter\r
-                                                       .toByteFormat(vssMemory)));\r
-                       rssSeries.addSeriesItem(\r
-                                       new DAChartSeriesItem(time, rssMemory, Formatter\r
-                                                       .toByteFormat(rssMemory)));\r
-                       pssSeries.addSeriesItem(\r
-                                       new DAChartSeriesItem(time, pssMemory, Formatter\r
-                                                       .toByteFormat(pssMemory)));\r
+                       double time = (Long) row.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.index) / TimelineConstants.MEGA_DOUBLE;\r
+                       long vssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_VIRTUAL.index);\r
+                       long rssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_RESIDENT.index);\r
+                       long pssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_PSS.index);\r
+                       \r
+                       if(Global.MEMPSENABLE) {\r
+                               long threeDMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_THREED.index);\r
+                               long gemMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_GEM.index);\r
+\r
+                               pssSeries.addSeriesItem(\r
+                                               new DAChartSeriesItem(time, pssMemory, Formatter\r
+                                                               .toByteFormat(pssMemory)));\r
+                               threeDSeries.addSeriesItem(\r
+                                               new DAChartSeriesItem(time, threeDMemory, Formatter\r
+                                                               .toByteFormat(threeDMemory)));\r
+                               gemSeries.addSeriesItem(\r
+                                               new DAChartSeriesItem(time, gemMemory, Formatter\r
+                                                               .toByteFormat(gemMemory)));\r
+\r
+                       }                       \r
+                       else {\r
+                               vssSeries.addSeriesItem(\r
+                                               new DAChartSeriesItem(time, vssMemory, Formatter\r
+                                                               .toByteFormat(vssMemory)));\r
+                               rssSeries.addSeriesItem(\r
+                                               new DAChartSeriesItem(time, rssMemory, Formatter\r
+                                                               .toByteFormat(rssMemory)));\r
+                               pssSeries.addSeriesItem(\r
+                                               new DAChartSeriesItem(time, pssMemory, Formatter\r
+                                                               .toByteFormat(pssMemory)));     \r
+                       }                       \r
                }\r
        }\r
        \r
index e3e6193..1450f03 100755 (executable)
@@ -153,17 +153,13 @@ public class SystemMemoryChart extends MemoryChart {
                        List<List<Object>> data = targetProcessDataMap.get(pid);\r
                        for (int i = 0; i < data.size(); i++) {\r
                                List<Object> oneTime = data.get(i);\r
-                               Long time = (Long) oneTime.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME\r
-                                               .ordinal());\r
-                               Long processMemorySize = (Long) oneTime\r
-                                               .get(ProcessMemoryDBTable.COLUMN.MEMORY_RESIDENT\r
-                                                               .ordinal());\r
+                               Long time = (Long) oneTime.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.index);\r
+                               Long processMemorySize = (Long) oneTime.get(ProcessMemoryDBTable.COLUMN.MEMORY_RESIDENT.index);\r
                                Long processMemorySizeSum = processLoadSumMap.get(time);\r
                                if (processMemorySizeSum == null) {\r
                                        processLoadSumMap.put(time, processMemorySize);\r
                                } else {\r
-                                       processLoadSumMap.put(time, processMemorySizeSum\r
-                                                       + processMemorySize);\r
+                                       processLoadSumMap.put(time, processMemorySizeSum + processMemorySize);\r
                                }\r
                        }\r
                }\r
index f839da1..60315dd 100755 (executable)
@@ -64,6 +64,8 @@ public class HeapDataManager extends PageDataManager {
        
        private HashSet<Long> addressMap = new HashSet<Long> ();
        
+       private HashSet<Long> previousSeq = new HashSet<Long> (); 
+       
        public HeapDataManager() {
                allocateDBTable = new MemAllocDBTable();
                freeDBTable = new MemFreeDBTable();
@@ -71,6 +73,8 @@ public class HeapDataManager extends PageDataManager {
                
                allocateDBInserter = makeInserter(allocateDBTable);
                freeDBInserter = makeInserter(freeDBTable);
+               
+               previousSeq.clear();;
        }
        
        public static HeapDataManager getInstance() {
@@ -82,6 +86,8 @@ public class HeapDataManager extends PageDataManager {
                memoryfreeDataList.clear();
                
                addressMap.clear();
+               
+               previousSeq.clear();
        }
 
        @Override
@@ -132,34 +138,6 @@ public class HeapDataManager extends PageDataManager {
                return output;
        }
        
-       public List<String> getHeapLibNames(long start, long end, String targetIds) {
-               List<String> output = new ArrayList<String>();
-               
-               String where = "";              
-               if (start != 0 || end != 0) {
-                       where += String.format("%s BETWEEN %s AND %s AND ", MemHeapDBTable.COLUMN.CALL_TIME.name, Long.toString(start), Long.toString(end));
-               }
-               
-               where += String.format("%s IN %s", MemHeapDBTable.COLUMN.PID.name, targetIds);
-               
-               String query = String.format("SELECT DISTINCT %s FROM %s WHERE %s", 
-                               MemHeapDBTable.COLUMN.CALLER_LIBRARY_ID.name, heapDBTable.getTableName(), where);
-               
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs != null) {
-                       try {
-                               while (rs.next()) {
-                                       output.add(rs.getString(1));
-                               }
-                       } catch (SQLException e) {
-                               Logger.exception(e);
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
-                       }
-               }
-               return output;
-       }
-       
        public int getColumnCount(String tablename, String column, String timestring, long start, long end, String targetIds) {
                int count = 0;
                
@@ -340,9 +318,9 @@ public class HeapDataManager extends PageDataManager {
 
                memoryAllocDataList.add(dbAllocData);
                
-               if(!addressMap.contains(address)) {
-                       addressMap.add(address);
-               }
+               //if(!addressMap.contains(address)) {
+               //      addressMap.add(address);
+               //}
        }
 
        private void makeFreeData(MemoryData mData, int binaryid) {
@@ -350,14 +328,14 @@ public class HeapDataManager extends PageDataManager {
        }
        
        private void makeFreeData(MemoryData mData, Long address, int binaryid) {
-               if(!addressMap.contains(address)) {
-                       return;
-               }
+               //if(!addressMap.contains(address)) {
+               //      return;
+               //}
                
                ArrayList<Object> dbFreeData = new ArrayList<Object>();
                
                int pid = mData.getPid();
-
+               
                dbFreeData.add(Long.valueOf(mData.getSeq()));
                dbFreeData.add(Integer.valueOf(pid));
                dbFreeData.add(Integer.valueOf(mData.getMsgID()));
index d057ae4..70d9c4c 100644 (file)
@@ -45,16 +45,16 @@ public class MemAllocDBTable extends DBTable {
                addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.API_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.ALLOCATED_ADDRESS.name, DBConstants.NOT_NULL,     DBConstants.DBTYPE_LONG)); // default:-1
+               addColumn(new DBColumn(COLUMN.ALLOCATED_ADDRESS.name, DBConstants.NOT_NULL,     DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.ALLOCATED_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.CALLER_PC_ADDRESS.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.CALLER_LIBRARY_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.MESSAGE_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.ALLOCATED_MEMORY_SIZE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-                               
+
                setIndexColumn(COLUMN.PID.index);
-               setIndexColumn(COLUMN.ALLOCATED_ADDRESS.index);
                setIndexColumn(COLUMN.SEQUENCE_NUMBER.index);
+               setIndexColumn(COLUMN.ALLOCATED_TIME.index);
        }
 
        @Override
@@ -76,7 +76,6 @@ public class MemAllocDBTable extends DBTable {
                                prep.setInt(8, (Integer) (rowData.get(COLUMN.CALLER_LIBRARY_ID.index)));
                                prep.setInt(9, (Integer) (rowData.get(COLUMN.MESSAGE_ID.index)));
                                prep.setLong(10, (Long) (rowData.get(COLUMN.ALLOCATED_MEMORY_SIZE.index)));
-                               
                        } catch (SQLException e) {
                                Logger.exception(e);
                                isPrepared = false;
index fc5da8d..d5f5cf2 100755 (executable)
@@ -36,9 +36,6 @@ import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;\r
 import org.tizen.dynamicanalyzer.database.DBInserter;\r
 import org.tizen.dynamicanalyzer.database.SqlConnectionManager;\r
-import org.tizen.dynamicanalyzer.project.LibraryObject;\r
-import org.tizen.dynamicanalyzer.project.ProcessMemoryMap;\r
-import org.tizen.dynamicanalyzer.project.Project;\r
 import org.tizen.dynamicanalyzer.protocol.ProtocolConstants;\r
 import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;\r
 import org.tizen.dynamicanalyzer.swap.logparser.Logs;\r
@@ -58,12 +55,16 @@ public class MemoryDataManager extends PageDataManager {
        \r
        private static final int appAllocSeriesID = -10;\r
        \r
+       private int REALLOC_ID;\r
+       \r
        // Map<PID, target Allocation Byte>\r
-       private Map<Integer, Long> allocByteMap = new HashMap<Integer, Long>(); \r
+       private Map<Integer, Long> mainAllocByteMap = new HashMap<Integer, Long>();     \r
        // Map<PID, Map<binaryID, Allocation Byte>>\r
        private Map<Integer, Map<Integer, Long>> libraryAllocByteMap = new HashMap<Integer, Map<Integer, Long>>();\r
        // Map<Address, Allocation Byte>\r
-       private HashMap<String, List<List<Object>>> allocationSeriesDataSetMap = new HashMap<String, List<List<Object>>>();\r
+       private HashMap<String, List<List<Object>>> allocAddressDataMap = new HashMap<String, List<List<Object>>>();\r
+       \r
+       private List<MemoryData> freedatalist = new ArrayList<MemoryData>();\r
        \r
        private SystemMemoryDBTable systemMemoryDBTable = null;\r
        private ProcessMemoryDBTable processMemoryDBTable = null;\r
@@ -84,9 +85,10 @@ public class MemoryDataManager extends PageDataManager {
        }\r
        \r
        public void clear() {\r
-               allocByteMap = new HashMap<Integer, Long>();\r
+               mainAllocByteMap = new HashMap<Integer, Long>();\r
                libraryAllocByteMap = new HashMap<Integer, Map<Integer, Long>>();\r
-               allocationSeriesDataSetMap.clear();\r
+               allocAddressDataMap.clear();\r
+               freedatalist.clear();\r
        }\r
 \r
        public void saveData(Map<String, String> dataMap) {\r
@@ -100,7 +102,9 @@ public class MemoryDataManager extends PageDataManager {
        @Override\r
        protected void makeData(LogPackage pack) {\r
                Logs systemmemorylogs = getLogsFromLogPackage(pack, ProtocolConstants.MSG_DATA_SYSTEM);\r
-               Logs allocatedlogs = getLogsFromLogPackage(pack, ProtocolConstants.MSG_PROBE_MEMORY);           \r
+               Logs allocatedlogs = getLogsFromLogPackage(pack, ProtocolConstants.MSG_PROBE_MEMORY);\r
+               \r
+               REALLOC_ID = Global.getFunctionID("realloc");\r
 \r
                makeSystemMemoryData(systemmemorylogs, allocatedlogs);\r
        }\r
@@ -126,104 +130,131 @@ public class MemoryDataManager extends PageDataManager {
                        GetSystemMemoryData(systemLogList);\r
                }\r
        }\r
-\r
-       private void addNewSeriesUserAllocData(int fdApiType, MemoryData log, int binaryId) {\r
-               long allocsize = 0;\r
-               Long allocByte = allocByteMap.get(log.getPid());\r
-\r
+       \r
+       private void plusAllocData(MemoryData log) {\r
+               int pid = log.getPid();\r
                long address = log.getAddress();\r
-               long seqnum = log.getSeq();\r
+               long tracetime = log.getTime();\r
                \r
                if (address == 0) {\r
                        return;\r
                }\r
                \r
-               String keystring = String.format("%d-%d", address, binaryId);\r
-\r
-               if (MEM_API_TYPE_ALLOC == fdApiType) {\r
+               String keystring = String.format("%d-%d", pid, address);\r
+               \r
+               int binaryId = Global.getBinaryID(pid, tracetime, log.getCallerPcAddr());\r
+               String appname = Global.getCurrentDeviceInfo().getSelectedPackageLabel();\r
+               \r
+               if(log.getLibName().endsWith(appname)) {\r
+                       binaryId = appAllocSeriesID;\r
+               }\r
+               \r
+               if(REALLOC_ID == log.getApiId()) {\r
                        try {\r
-                               allocsize = log.getSize();\r
-                               if (binaryId == appAllocSeriesID) {\r
-                                       allocByteMap.put(log.getPid(), allocByte + allocsize);\r
-                               } else {\r
-                                       Long libraryAllocByte;\r
-                                       \r
-                                       if(libraryAllocByteMap.get(log.getPid()).containsKey(binaryId)) {\r
-                                               libraryAllocByte = libraryAllocByteMap.get(log.getPid()).get(binaryId);\r
-                                               if (libraryAllocByte == null) {\r
-                                                       libraryAllocByte = new Long(0);\r
-                                               }\r
-                                       }\r
-                                       else {\r
-                                               libraryAllocByte = new Long(0);\r
-                                       }\r
-                                       \r
-                                       libraryAllocByteMap.get(log.getPid()).put(binaryId,libraryAllocByte + allocsize);\r
-                               }\r
+                               Long freeaddress = Long.parseLong(log.getArgs().replace("0x", "").split(",")[0], 16);\r
+                               MemoryData freetempdata = log.clone();\r
+                               freetempdata.setAddress(freeaddress);\r
+                               freedatalist.add(freetempdata);\r
+                       }\r
+                       catch(NumberFormatException ex) {\r
+                               Logger.warning("realloc address invalide : %s", log.getArgs());\r
+                       } catch (CloneNotSupportedException e) {\r
                                \r
-                               if(allocationSeriesDataSetMap.containsKey(keystring)) {\r
-                                       if(allocationSeriesDataSetMap.get(keystring) == null) {\r
-                                               List<List<Object>> newlist = new ArrayList<List<Object>>();\r
-                                               allocationSeriesDataSetMap.put(keystring, newlist);\r
-                                       }\r
-                               }\r
+                       }\r
+               }\r
+               \r
+               try {\r
+                       long allocsize = log.getSize();\r
+                       \r
+                       if (binaryId == appAllocSeriesID) {\r
+                               mainAllocByteMap.put(pid, mainAllocByteMap.get(pid) + allocsize);\r
+                       } else {\r
+                               Long libraryAllocByte;\r
                                \r
-                               if(allocationSeriesDataSetMap.containsKey(keystring)) {\r
-                                       List<Object> onedata = new ArrayList<Object>();\r
-                                       onedata.add(seqnum);\r
-                                       onedata.add(allocsize);\r
-                                       \r
-                                       allocationSeriesDataSetMap.get(keystring).add(onedata);\r
+                               if(libraryAllocByteMap.get(pid).containsKey(binaryId)) {\r
+                                       libraryAllocByte = libraryAllocByteMap.get(pid).get(binaryId);\r
+                                       if (libraryAllocByte == null) {\r
+                                               libraryAllocByte = new Long(0);\r
+                                       }\r
                                }\r
                                else {\r
-                                       List<List<Object>> newlist = new ArrayList<List<Object>>();\r
-                                       \r
-                                       List<Object> onedata = new ArrayList<Object>();\r
-                                       onedata.add(seqnum);\r
-                                       onedata.add(allocsize);\r
-                                       \r
-                                       newlist.add(onedata);\r
-                                       allocationSeriesDataSetMap.put(keystring, newlist);\r
+                                       libraryAllocByte = new Long(0);\r
                                }\r
                                \r
-                       } catch (NumberFormatException ne) {\r
-                               Logger.exception(ne);\r
-                       }\r
-               } else if (MEM_API_TYPE_FREE == fdApiType) {\r
-                       if (!allocationSeriesDataSetMap.containsKey(keystring)) {\r
-                               return;\r
+                               libraryAllocByteMap.get(pid).put(binaryId,libraryAllocByte + allocsize);\r
                        }\r
                        \r
-                       if(allocationSeriesDataSetMap.containsKey(keystring)) {\r
-                               int listsize = allocationSeriesDataSetMap.get(keystring).size();\r
-                               for(int j = 0; j < listsize ; j++) {\r
-                                       List<Object> onedata = allocationSeriesDataSetMap.get(keystring).get(j);\r
-                                       \r
-                                       if((Long) onedata.get(0)  <= seqnum) {\r
-                                               allocsize = (Long) onedata.get(1);\r
-                                               allocationSeriesDataSetMap.get(keystring).remove(j);\r
-                                               break;\r
-                                       }\r
+                       if(!allocAddressDataMap.containsKey(keystring)) {\r
+                               List<List<Object>> newlist = new ArrayList<List<Object>>();\r
+                               List<Object> onedata = new ArrayList<Object>();\r
+                               onedata.add(tracetime);\r
+                               onedata.add(allocsize);\r
+                               onedata.add(binaryId);\r
+                               \r
+                               newlist.add(onedata);\r
+                               allocAddressDataMap.put(keystring, newlist);\r
+                       }\r
+                       else {\r
+                               List<Object> onedata = new ArrayList<Object>();\r
+                               onedata.add(tracetime);\r
+                               onedata.add(allocsize);\r
+                               onedata.add(binaryId);\r
+                               \r
+                               allocAddressDataMap.get(keystring).add(onedata);\r
+                       }\r
+               } catch (NumberFormatException ne) {\r
+                       Logger.exception(ne);\r
+               }\r
+       }\r
+       \r
+       private void minusFreeData(MemoryData log) {\r
+               int pid = log.getPid();\r
+               long address = log.getAddress();\r
+               long tracetime = log.getTime();\r
+               \r
+               String keystring = String.format("%d-%d", pid, address);\r
+               \r
+               if (!allocAddressDataMap.containsKey(keystring)) {\r
+                       return;\r
+               }\r
+               \r
+               long allocsize = -1;\r
+               int alloclib = 0;\r
+               \r
+               if(allocAddressDataMap.containsKey(keystring)) {\r
+                       int listsize = allocAddressDataMap.get(keystring).size();\r
+                       for(int j = 0; j < listsize ; j++) {\r
+                               List<Object> onedata = allocAddressDataMap.get(keystring).get(j);\r
+                               \r
+                               if((Long) onedata.get(0)  <= tracetime) {\r
+                                       allocsize = (Long) onedata.get(1);\r
+                                       alloclib = (Integer) onedata.get(2);\r
+                                       allocAddressDataMap.get(keystring).remove(j);\r
+                                       break;\r
                                }\r
                        }\r
-                       \r
-                       if (binaryId == appAllocSeriesID) {\r
-                               allocByteMap.put(log.getPid(), allocByte - allocsize);\r
-                       } else {\r
-                               if(libraryAllocByteMap.get(log.getPid()).containsKey(binaryId)) {\r
-                                       Long libraryAllocByte = libraryAllocByteMap.get(log.getPid()).get(binaryId);\r
-                                       if (libraryAllocByte != null) {\r
-                                               long calsize = libraryAllocByte - allocsize;\r
-                                               \r
-                                               if (calsize < 0){\r
-                                                       calsize = 0;\r
-                                               }\r
-                                               libraryAllocByteMap.get(log.getPid()).put(binaryId,calsize);\r
-                                       }\r
-                                       else {\r
-                                               libraryAllocByte = new Long(0);\r
-                                               libraryAllocByteMap.get(log.getPid()).put(binaryId,libraryAllocByte);\r
+               }\r
+               \r
+               if(allocsize == -1)\r
+                       return;\r
+               \r
+               if (alloclib == appAllocSeriesID) {\r
+                       Long allocByte = mainAllocByteMap.get(pid);\r
+                       mainAllocByteMap.put(pid, allocByte - allocsize);\r
+               } else {\r
+                       if(libraryAllocByteMap.get(pid).containsKey(alloclib)) {\r
+                               Long libraryAllocByte = libraryAllocByteMap.get(pid).get(alloclib);\r
+                               if (libraryAllocByte != null) {\r
+                                       long calsize = libraryAllocByte - allocsize;\r
+                                       \r
+                                       if (calsize < 0){\r
+                                               calsize = 0;\r
                                        }\r
+                                       libraryAllocByteMap.get(pid).put(alloclib,calsize);\r
+                               }\r
+                               else {\r
+                                       libraryAllocByte = new Long(0);\r
+                                       libraryAllocByteMap.get(pid).put(alloclib,libraryAllocByte);\r
                                }\r
                        }\r
                }\r
@@ -242,27 +273,27 @@ public class MemoryDataManager extends PageDataManager {
                        int pid = logData.getPid();\r
                        int memApiType = logData.getMemoryApiType();\r
                        \r
-                       if (allocByteMap.get(pid) == null) {\r
-                               allocByteMap.put(Integer.valueOf(pid), new Long(0));\r
+                       if (mainAllocByteMap.get(pid) == null) {\r
+                               mainAllocByteMap.put(Integer.valueOf(pid), new Long(0));\r
                                libraryAllocByteMap.put(Integer.valueOf(pid), new HashMap<Integer, Long>());\r
                        }\r
                        \r
-                       int binaryid = appAllocSeriesID;\r
-                       \r
-                       Project project = Global.getProject();\r
-                       ProcessMemoryMap pmap = project.getProcessInformation(pid).getProcessMemoryMap(logData.getTime());\r
-\r
-                       if (pmap != null) {\r
-                               LibraryObject lib = pmap.getLibraryByAddress(logData.getCallerPcAddr());\r
-                               if (lib != null && lib != pmap.getMainbinary()) {\r
-                                       binaryid = project.getDeviceStatusInfo().getBinaryInfo(lib.getBinaryID()).getID();\r
-                               }\r
+                       if(memApiType == MEM_API_TYPE_ALLOC) {\r
+                               plusAllocData(logData);\r
                        }\r
-\r
-                       addNewSeriesUserAllocData(memApiType, logData, binaryid);                       \r
+                       else if(memApiType == MEM_API_TYPE_FREE) {\r
+                               freedatalist.add(logData);\r
+                       }                       \r
                }\r
 \r
        }\r
+       \r
+       private void calculateFreeData(){\r
+               for(MemoryData freelog : freedatalist) {\r
+                       minusFreeData(freelog);\r
+               }\r
+               freedatalist.clear();\r
+       }\r
 \r
        private void GetSystemMemoryData(List<LogData> systemLogList) {\r
                ArrayList<List<Object>> systemDataList = new ArrayList<List<Object>>();\r
@@ -296,7 +327,7 @@ public class MemoryDataManager extends PageDataManager {
                        dbSystemData.add(pIDList);\r
                        dbSystemData.add(processLoadList);\r
                        systemDataList.add(dbSystemData);\r
-\r
+                       \r
                        /*\r
                         * Make target Process Table data\r
                         */\r
@@ -306,26 +337,20 @@ public class MemoryDataManager extends PageDataManager {
                                        ProcessProfileData process = targetProcessList[j];\r
 \r
                                        ArrayList<Object> dbTargetProcessData = new ArrayList<Object>();\r
-                                       dbTargetProcessData.add(new Long(log.getTime()));\r
-                                       dbTargetProcessData.add(new Integer(process.getPid()));\r
-                                       dbTargetProcessData.add(new Float(process.getProcessLoad()));\r
-                                       dbTargetProcessData.add(new Long(process.getVirtualMemory()));\r
-                                       dbTargetProcessData.add(new Long(process.getResidentMemory()));\r
-                                       dbTargetProcessData.add(new Long(process.getSharedMemory()));\r
-                                       dbTargetProcessData.add(new Long(process.getPssMemory()));\r
-                                       dbTargetProcessData.add(new Integer(process.getThreadCount()));\r
-                                       dbTargetProcessData.add(new Long(process.getTotalAllocSize()));\r
 \r
                                        /*\r
                                         * Set inform for Heap allocation\r
                                         */\r
+                                       \r
+                                       calculateFreeData();\r
+                                       \r
                                        List<Object> binaryIDList = new ArrayList<Object>();\r
                                        List<Object> allocByteList = new ArrayList<Object>();\r
                                        binaryIDList.add(appAllocSeriesID);\r
-                                       if (allocByteMap.get(process.getPid()) == null) {\r
+                                       if (mainAllocByteMap.get(process.getPid()) == null) {\r
                                                allocByteList.add(new Long(0));\r
                                        } else {\r
-                                               allocByteList.add(allocByteMap.get(process.getPid()));\r
+                                               allocByteList.add(mainAllocByteMap.get(process.getPid()));\r
                                        }\r
 \r
                                        Map<Integer, Long> libraryList = libraryAllocByteMap.get(process.getPid());\r
@@ -339,8 +364,6 @@ public class MemoryDataManager extends PageDataManager {
                                                binaryIDList.add(binaryID);\r
                                                allocByteList.add(libraryList.get(binaryID));\r
                                        }\r
-                                       dbTargetProcessData.add(binaryIDList);\r
-                                       dbTargetProcessData.add(allocByteList);\r
 \r
                                        /*\r
                                         * Set inform for Thread\r
@@ -357,6 +380,23 @@ public class MemoryDataManager extends PageDataManager {
                                                threadIdList.add(new Integer(threadLoad));\r
                                                threadLoadList.add(threadLoads[++iii]);\r
                                        }\r
+                                       \r
+                                       dbTargetProcessData.add(new Long(log.getTime()));\r
+                                       dbTargetProcessData.add(new Integer(process.getPid()));\r
+                                       dbTargetProcessData.add(new Float(process.getProcessLoad()));\r
+                                       dbTargetProcessData.add(new Long(process.getVirtualMemory()));\r
+                                       dbTargetProcessData.add(new Long(process.getResidentMemory()));\r
+                                       dbTargetProcessData.add(new Long(process.getSharedMemory()));\r
+                                       dbTargetProcessData.add(new Long(process.getPssMemory()));\r
+                                       // for new version\r
+                                       dbTargetProcessData.add(new Long(process.getThreeDMemory()));\r
+                                       dbTargetProcessData.add(new Long(process.getGemMemory()));\r
+                                       \r
+                                       dbTargetProcessData.add(new Integer(process.getThreadCount()));\r
+                                       dbTargetProcessData.add(new Long(process.getTotalAllocSize()));\r
+                                       \r
+                                       dbTargetProcessData.add(binaryIDList);\r
+                                       dbTargetProcessData.add(allocByteList);\r
                                        dbTargetProcessData.add(threadIdList);\r
                                        dbTargetProcessData.add(threadLoadList);\r
 \r
@@ -465,14 +505,14 @@ public class MemoryDataManager extends PageDataManager {
                \r
                String where = "WHERE";         \r
                if (start != 0 || end != 0) {\r
-                       where += String.format(" %s BETWEEN %s AND %s", ProcessMemoryDBTable.SAMPLING_TIME, Long.toString(start), Long.toString(end));\r
+                       where += String.format(" %s BETWEEN %s AND %s", ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.name, Long.toString(start), Long.toString(end));\r
                }\r
                \r
                if (targetPID > 0) {\r
                        if (start != 0 || end != 0) \r
                                where += " AND";\r
                        \r
-                       where += String.format(" %s = %s", ProcessMemoryDBTable.PID, Integer.toString(targetPID));\r
+                       where += String.format(" %s = %s", ProcessMemoryDBTable.COLUMN.PID.name, Integer.toString(targetPID));\r
                } else {\r
                        // Do nothing. Get information from all processes.\r
                }\r
@@ -481,7 +521,7 @@ public class MemoryDataManager extends PageDataManager {
                        where = "";\r
                }\r
                \r
-               where += " ORDER BY " + ProcessMemoryDBTable.SAMPLING_TIME;\r
+               where += " ORDER BY " + ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.name;\r
 \r
                List<List<Object>> queryResult = processMemoryDBTable.selectAllColumnData(where);\r
                if (queryResult == null) {\r
@@ -521,6 +561,34 @@ public class MemoryDataManager extends PageDataManager {
                return processedResult;\r
        }\r
        \r
+       public Map<Integer, List<List<Object>>> getTargetProcessDataMapFromDB(long start, long end, String targetPIDs) {\r
+               Map<Integer, List<List<Object>>> processedResult = new HashMap<Integer, List<List<Object>>>();\r
+               String where = "WHERE";\r
+               if (start != 0 || end != 0) {           \r
+                       where += String.format(" SAMPLING_TIME BETWEEN %s AND %s AND", Long.toString(start), Long.toString(end));\r
+               }\r
+               \r
+               where += String.format(" PID IN %s", targetPIDs);\r
+               where += " ORDER BY SAMPLING_TIME";\r
+\r
+               List<List<Object>> queryResult = processMemoryDBTable.selectAllColumnData(where);\r
+               if (queryResult == null) {\r
+                       return processedResult;\r
+               }\r
+\r
+               for (int i = 0; i < queryResult.size(); i++) {\r
+                       List<Object> row = queryResult.get(i);\r
+                       Integer pid = (Integer) row.get(TargetProcessDBTable.COLUMN.PID.ordinal());\r
+                       List<List<Object>> processData = processedResult.get(pid);\r
+                       if (processData == null) {\r
+                               processData = new ArrayList<List<Object>>();\r
+                               processedResult.put(pid, processData);\r
+                       }\r
+                       processData.add(row);\r
+               }\r
+               return processedResult;\r
+       }\r
+       \r
        public long getSystemMemoriesFromDB(long time) {\r
                long processMemories = 0;\r
                String tableName = systemMemoryDBTable.getTableName();\r
index 88a2bb6..bcccab6 100755 (executable)
@@ -22,7 +22,6 @@
  * 
  */
 
-
 package org.tizen.dynamicanalyzer.ui.memory.data;
 
 import java.sql.PreparedStatement;
@@ -39,36 +38,32 @@ import org.tizen.dynamicanalyzer.util.Logger;
 public class ProcessMemoryDBTable extends DBTable {
        private static final String TABLENAME = "MEMORY_PROCESS_DATA";
        
-       public static enum COLUMN {
-               SAMPLING_TIME,
-               PID,
-               CPU_LOAD,
-               MEMORY_VIRTUAL,
-               MEMORY_RESIDENT,
-               MEMORY_SHARED,
-               MEMORY_PSS,
-               THREAD_COUNT,
-               HEAP_ALLOCATION_TOTAL_BYTE,
-               HEAP_ALLOCATION_BINARY_ID,
-               HEAP_ALLOCATION_BYTE,
-               TID,
-               THREAD_LOAD
-       }
+       public enum COLUMN {
+               SAMPLING_TIME(0, "SAMPLING_TIME"),
+               PID(1, DBConstants.DBCOLUMN_PID),
+               CPU_LOAD(2, "CPU_LOAD"),
+               MEMORY_VIRTUAL(3, "MEMORY_VIRTUAL"),
+               MEMORY_RESIDENT(4, "MEMORY_RESIDENT"),
+               MEMORY_SHARED(5, "MEMORY_SHARED"),
+               MEMORY_PSS(6, "MEMORY_PSS"),
+               MEMORY_THREED(7, "MEMORY_THREED"),
+               MEMORY_GEM(8, "MEMORY_GEM"),
+               THREAD_COUNT(9, "THREAD_COUNT"),
+               HEAP_ALLOCATION_TOTAL_BYTE(10, "HEAP_ALLOCATION_TOTAL_BYTE"),
+               HEAP_ALLOCATION_BINARY_ID(11, "HEAP_ALLOCATION_BINARY_ID"),
+               HEAP_ALLOCATION_BYTE(12, "HEAP_ALLOCATION_BYTE"),
+               TID(13, "TID"),
+               THREAD_LOAD(14, "THREAD_LOAD");
 
-       public static final String SAMPLING_TIME = "SAMPLING_TIME";
-       public static final String PID = "PID";
-       public static final String CPU_LOAD = "CPU_LOAD";
-       public static final String MEMORY_VIRTUAL = "MEMORY_VIRTUAL";
-       public static final String MEMORY_RESIDENT = "MEMORY_RESIDENT";
-       public static final String MEMORY_SHARED = "MEMORY_SHARED";
-       public static final String MEMORY_PSS = "MEMORY_PSS";
-       public static final String THREAD_COUNT = "THREAD_COUNT";
-       public static final String HEAP_ALLOCATION_TOTAL_BYTE = "HEAP_ALLOCATION_TOTAL_BYTE";
-       public static final String HEAP_ALLOCATION_BINARY_ID = "HEAP_ALLOCATION_BINARY_ID";
-       public static final String HEAP_ALLOCATION_BYTE = "HEAP_ALLOCATION_BYTE";
-       public static final String TID = "TID";
-       public static final String THREAD_LOAD = "THREAD_LOAD";
+               public final int index;
+               public final String name;
 
+               COLUMN(int index, String name) {
+                       this.index = index;
+                       this.name = name;
+               }
+       }
+       
        @Override
        public String getTableName() {
                return TABLENAME;
@@ -79,20 +74,24 @@ public class ProcessMemoryDBTable extends DBTable {
        }
 
        public ProcessMemoryDBTable() {
-               addColumn(new DBColumn(SAMPLING_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(PID, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(CPU_LOAD, DBConstants.EMPTY, DBConstants.DBTYPE_FLOAT));
-               addColumn(new DBColumn(MEMORY_VIRTUAL, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(MEMORY_RESIDENT, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(MEMORY_SHARED, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(MEMORY_PSS, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(THREAD_COUNT, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(HEAP_ALLOCATION_TOTAL_BYTE, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(HEAP_ALLOCATION_BINARY_ID, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY));
-               addColumn(new DBColumn(HEAP_ALLOCATION_BYTE, DBConstants.EMPTY, DBConstants.BIGINT_ARRAY));
-               addColumn(new DBColumn(TID, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY));
-               addColumn(new DBColumn(THREAD_LOAD, DBConstants.EMPTY, DBConstants.FLOAT_ARRAY));
-               setIndexColumn(COLUMN.SAMPLING_TIME.ordinal());
+               addColumn(new DBColumn(COLUMN.SAMPLING_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.PID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.CPU_LOAD.name, DBConstants.EMPTY, DBConstants.DBTYPE_FLOAT));
+               addColumn(new DBColumn(COLUMN.MEMORY_VIRTUAL.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.MEMORY_RESIDENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.MEMORY_SHARED.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.MEMORY_PSS.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.MEMORY_THREED.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.MEMORY_GEM.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.THREAD_COUNT.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.HEAP_ALLOCATION_TOTAL_BYTE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.HEAP_ALLOCATION_BINARY_ID.name, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY));
+               addColumn(new DBColumn(COLUMN.HEAP_ALLOCATION_BYTE.name, DBConstants.EMPTY, DBConstants.BIGINT_ARRAY));
+               addColumn(new DBColumn(COLUMN.TID.name, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY));
+               addColumn(new DBColumn(COLUMN.THREAD_LOAD.name, DBConstants.EMPTY, DBConstants.FLOAT_ARRAY));
+               
+               setIndexColumn(COLUMN.SAMPLING_TIME.index);
+               setIndexColumn(COLUMN.PID.index);
        }
 
        @Override
@@ -104,24 +103,22 @@ public class ProcessMemoryDBTable extends DBTable {
                        isPrepared = false;
                } else {
                        try {
-                               int index = 0;
-                               prep.setLong(++index, (Long) (rowData.get(COLUMN.SAMPLING_TIME.ordinal())));
-                               prep.setInt(++index, (Integer) (rowData.get(COLUMN.PID.ordinal())));
-                               prep.setFloat(++index, (Float) (rowData.get(COLUMN.CPU_LOAD.ordinal())));
-                               prep.setLong(++index, (Long) (rowData.get(COLUMN.MEMORY_VIRTUAL.ordinal())));
-                               prep.setLong(++index, (Long) (rowData.get(COLUMN.MEMORY_RESIDENT.ordinal())));
-                               prep.setLong(++index, (Long) (rowData.get(COLUMN.MEMORY_SHARED.ordinal())));
-                               prep.setLong(++index, (Long) (rowData.get(COLUMN.MEMORY_PSS.ordinal())));
-                               prep.setInt(++index, (Integer) (rowData.get(COLUMN.THREAD_COUNT.ordinal())));
-                               prep.setLong(++index, (Long) (rowData.get(COLUMN.HEAP_ALLOCATION_TOTAL_BYTE.ordinal())));
-                               setArrayToPreparedStatement(COLUMN.HEAP_ALLOCATION_BINARY_ID.ordinal(), 
-                                               DBConstants.DBTYPE_INT4, prep, rowData);
-                               setArrayToPreparedStatement(COLUMN.HEAP_ALLOCATION_BYTE.ordinal(),
-                                               DBConstants.DBTYPE_LONG, prep, rowData);
-                               setArrayToPreparedStatement(COLUMN.TID.ordinal(), DBConstants.DBTYPE_INT4, prep,
-                                               rowData);
-                               setArrayToPreparedStatement(COLUMN.THREAD_LOAD.ordinal(), DBConstants.DBTYPE_FLOAT, prep,
-                                               rowData);
+                               prep.setLong(1, (Long) (rowData.get(COLUMN.SAMPLING_TIME.index)));
+                               prep.setInt(2, (Integer) (rowData.get(COLUMN.PID.index)));
+                               prep.setFloat(3, (Float) (rowData.get(COLUMN.CPU_LOAD.index)));
+                               prep.setLong(4, (Long) (rowData.get(COLUMN.MEMORY_VIRTUAL.index)));
+                               prep.setLong(5, (Long) (rowData.get(COLUMN.MEMORY_RESIDENT.index)));
+                               prep.setLong(6, (Long) (rowData.get(COLUMN.MEMORY_SHARED.index)));
+                               prep.setLong(7, (Long) (rowData.get(COLUMN.MEMORY_PSS.index)));
+                               prep.setLong(8, (Long) (rowData.get(COLUMN.MEMORY_THREED.index)));
+                               prep.setLong(9, (Long) (rowData.get(COLUMN.MEMORY_GEM.index)));
+                               prep.setInt(10, (Integer) (rowData.get(COLUMN.THREAD_COUNT.index)));
+                               prep.setLong(11, (Long) (rowData.get(COLUMN.HEAP_ALLOCATION_TOTAL_BYTE.index)));
+                               setArrayToPreparedStatement(COLUMN.HEAP_ALLOCATION_BINARY_ID.index, DBConstants.DBTYPE_INT4, prep, rowData);
+                               setArrayToPreparedStatement(COLUMN.HEAP_ALLOCATION_BYTE.index, DBConstants.DBTYPE_LONG, prep, rowData);
+                               setArrayToPreparedStatement(COLUMN.TID.index, DBConstants.DBTYPE_INT4, prep, rowData);
+                               setArrayToPreparedStatement(COLUMN.THREAD_LOAD.index, DBConstants.DBTYPE_FLOAT, prep, rowData);
+                               
                        } catch (SQLException e) {
                                Logger.exception(e);
                                isPrepared = false;
@@ -135,19 +132,24 @@ public class ProcessMemoryDBTable extends DBTable {
        public List<Object> extractDataFromResultSet(ResultSet rs) {
                List<Object> row = new ArrayList<Object>();
                try {
-                       row.add(Long.valueOf(rs.getLong(1)));
-                       row.add(Integer.valueOf(rs.getInt(2)));
-                       row.add(Float.valueOf(rs.getFloat(3)));
-                       row.add(Long.valueOf(rs.getLong(4)));
-                       row.add(Long.valueOf(rs.getLong(5)));
-                       row.add(Long.valueOf(rs.getLong(6)));
-                       row.add(Long.valueOf(rs.getLong(7)));
-                       row.add(Integer.valueOf(rs.getInt(8)));
-                       row.add(Long.valueOf(rs.getLong(9)));
-                       row.add(getArrayFromResultSet(rs, 10, Integer.valueOf(0)));
-                       row.add(getArrayFromResultSet(rs, 11, Long.valueOf(0)));
-                       row.add(getArrayFromResultSet(rs, 12, Integer.valueOf(0)));
-                       row.add(getArrayFromResultSet(rs, 13, Float.valueOf(0)));
+                       int index = 1;
+                       
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Integer.valueOf(rs.getInt(index++)));
+                       row.add(Float.valueOf(rs.getFloat(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(Integer.valueOf(rs.getInt(index++)));
+                       row.add(Long.valueOf(rs.getLong(index++)));
+                       row.add(getArrayFromResultSet(rs, index++, Integer.valueOf(0)));
+                       row.add(getArrayFromResultSet(rs, index++, Long.valueOf(0)));
+                       row.add(getArrayFromResultSet(rs, index++, Integer.valueOf(0)));
+                       row.add(getArrayFromResultSet(rs, index++, Float.valueOf(0)));
+                       
                } catch (SQLException e) {
                        Logger.exception(e);
                        return null;
index 8fab659..91f2286 100755 (executable)
@@ -26,7 +26,6 @@ package org.tizen.dynamicanalyzer.ui.memory.table;
 \r
 import java.util.ArrayList;\r
 import java.util.HashMap;\r
-import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
 \r
@@ -158,15 +157,17 @@ public class MemoryAllocationTraceTable extends DATableComposite {
        }\r
        \r
        public List<List<Object>> remainedAllocatedListForRange(long startTime, long endTime, String targetPIDs) {\r
+               int current_alloc_count = 0;\r
+               int current_free_count = 0;\r
                \r
-               int current_alloc_count = HeapDataManager.getInstance().getColumnCount(MemAllocDBTable.TABLENAME,\r
+               if(startTime == 0 && endTime == 0) {\r
+                       current_alloc_count = HeapDataManager.getInstance().getColumnCount(MemAllocDBTable.TABLENAME,\r
                                MemAllocDBTable.COLUMN.SEQUENCE_NUMBER.name, MemAllocDBTable.COLUMN.ALLOCATED_TIME.name,\r
                                startTime, endTime, targetPIDs);\r
-               int current_free_count = HeapDataManager.getInstance().getColumnCount(MemFreeDBTable.TABLENAME,\r
+                       current_free_count = HeapDataManager.getInstance().getColumnCount(MemFreeDBTable.TABLENAME,\r
                                MemFreeDBTable.COLUMN.SEQUENCE_NUMBER.name, MemFreeDBTable.COLUMN.FREE_TIME.name,\r
                                startTime, endTime, targetPIDs);\r
-               \r
-               if(startTime == 0 && endTime == 0) {\r
+\r
                        if(current_alloc_count == PREV_ALLOC_COUNT && current_free_count == PREV_FREE_COUNT) {\r
                                if(savedRemaindedList != null && savedRemaindedList.size() != 0){\r
                                        //Logger.info("Used old data");\r
@@ -200,75 +201,115 @@ public class MemoryAllocationTraceTable extends DATableComposite {
        }\r
        \r
        private List<List<Object>> makeRemainedAllocatedList(List<List<Object>> allocData, List<List<Object>> freeData) {\r
+               Map<Long, List<Long>> addressMap = new HashMap<Long, List<Long>>();\r
+               List<List<Object>> output = new ArrayList<List<Object>>();\r
                \r
-               Map<String, List<List<Object>>> addresMap = new HashMap<String, List<List<Object>>>();\r
-               HashSet<Integer> removeindex = new HashSet<Integer>();\r
+               for (int i = 0; i < freeData.size(); i++) {\r
+                       List<Object> iFreeData = freeData.get(i);\r
+                       \r
+                       long freetime = (Long) iFreeData.get(MemFreeDBTable.COLUMN.FREE_TIME.index);\r
+                       long address = (Long) iFreeData.get(MemFreeDBTable.COLUMN.ALLOCATED_ADDRESS.index);\r
+                       \r
+                       if(!addressMap.containsKey(address)) {\r
+                               List<Long> newlist = new ArrayList<Long>();\r
+                               addressMap.put(address, newlist);\r
+                       }\r
+\r
+                       addressMap.get(address).add(freetime);\r
+               }\r
                \r
                int allocDataSize = allocData.size();           \r
-               for (int j = 0; j < allocDataSize; j++) {\r
-                       List<Object> iAllocData = allocData.get(j);\r
+               for (int i = 0; i < allocDataSize; i++) {\r
+                       List<Object> iAllocData = allocData.get(i);\r
+                       boolean live = true;\r
+                       long alloctime = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_TIME.index);\r
                        long address = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.index);\r
-                       long seqnum = (Long) iAllocData.get(MemAllocDBTable.COLUMN.SEQUENCE_NUMBER.index);\r
+                       \r
+                       if(addressMap.containsKey(address)) {\r
+                               int size = addressMap.get(address).size();\r
+                               for(int j = 0; j < size ; j++) {\r
+                                       Long freetime = addressMap.get(address).get(j);\r
+                                       \r
+                                       if(alloctime <= freetime) {\r
+                                               live = false;\r
+                                               addressMap.get(address).remove(j);\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+                       \r
+                       if(live == true) {\r
+                               output.add(iAllocData);\r
+                       }\r
+               }\r
+\r
+               return output;\r
+       }\r
+/*\r
+       private List<List<Object>> makeRemainedAllocatedList(List<List<Object>> allocData, List<List<Object>> freeData) {\r
+\r
+               Map<String, List<List<Object>>> addressMap = new HashMap<String, List<List<Object>>>();\r
+               HashSet<Integer> removeindexlist = new HashSet<Integer>();\r
+               \r
+               int allocDataSize = allocData.size();           \r
+               for (int removeindex = 0; removeindex < allocDataSize; removeindex++) {\r
+                       List<Object> iAllocData = allocData.get(removeindex);\r
+                       long alloctime = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.index);\r
+                       long address = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.index);                   \r
                        int binaryId = (Integer) iAllocData.get(MemAllocDBTable.COLUMN.CALLER_LIBRARY_ID.index);\r
                        \r
                        String keystring = String.format("%d-%d", address, binaryId);\r
                        \r
-                       if(addresMap.containsKey(keystring)) {\r
-                               List<Object> onedata = new ArrayList<Object>();\r
-                               onedata.add(seqnum);\r
-                               onedata.add(j);\r
-                               \r
-                               addresMap.get(keystring).add(onedata);\r
-                       }\r
-                       else {\r
+                       if(!addressMap.containsKey(keystring)) {\r
                                List<List<Object>> newlist = new ArrayList<List<Object>>();\r
-                               \r
-                               List<Object> onedata = new ArrayList<Object>();\r
-                               onedata.add(seqnum);\r
-                               onedata.add(j);\r
-                               \r
-                               newlist.add(onedata);\r
-                               addresMap.put(keystring, newlist);\r
+                               addressMap.put(keystring, newlist);\r
                        }\r
+                       \r
+                       List<Object> onedata = new ArrayList<Object>();\r
+                       onedata.add(alloctime);\r
+                       onedata.add(removeindex);\r
+                       \r
+                       addressMap.get(keystring).add(onedata);\r
                }\r
                \r
                for (int i = 0; i < freeData.size(); i++) {\r
                        List<Object> iFreeData = freeData.get(i);\r
                        \r
-                       long address = (Long) iFreeData.get(MemFreeDBTable.COLUMN.ALLOCATED_ADDRESS.index);\r
-                       long seqnum = (Long) iFreeData.get(MemFreeDBTable.COLUMN.SEQUENCE_NUMBER.index);\r
+                       long freetime = (Long) iFreeData.get(MemFreeDBTable.COLUMN.FREE_TIME.index);\r
+                       long address = (Long) iFreeData.get(MemFreeDBTable.COLUMN.ALLOCATED_ADDRESS.index);                     \r
                        int binaryId = (Integer) iFreeData.get(MemFreeDBTable.COLUMN.CALLER_LIBRARY_ID.index);\r
                        \r
                        String keystring = String.format("%d-%d", address, binaryId);\r
                        \r
-                       if(addresMap.containsKey(keystring)) {\r
-                               int size = addresMap.get(keystring).size();\r
+                       if(addressMap.containsKey(keystring)) {\r
+                               int size = addressMap.get(keystring).size();\r
                                for(int j = 0; j < size ; j++) {\r
-                                       List<Object> onedata = addresMap.get(keystring).get(j);\r
+                                       List<Object> onedata = addressMap.get(keystring).get(j);\r
                                        \r
-                                       if((Long) onedata.get(0)  <= seqnum) {\r
-                                               removeindex.add((Integer) onedata.get(1));\r
-                                               addresMap.get(keystring).remove(j);\r
+                                       if((Long) onedata.get(0)  <= freetime) {\r
+                                               // 1 : removeindex\r
+                                               removeindexlist.add((Integer) onedata.get(1));\r
+                                               addressMap.get(keystring).remove(j);\r
                                                break;\r
                                        }\r
                                }\r
                        }\r
                        else {\r
-                               //Logger.info("Unknow : 0x%s", Long.toHexString(address));\r
+                               //Logger.info("Unknown : 0x%s", Long.toHexString(address));\r
                        }\r
                }\r
                \r
                List<List<Object>> output = new ArrayList<List<Object>>();\r
                        \r
                for (int j = 0; j < allocDataSize; j++) {\r
-                       if(!removeindex.contains(j)) {\r
+                       if(!removeindexlist.contains(j)) {\r
                                output.add(allocData.get(j));\r
                        }\r
                }\r
 \r
-               return output;          \r
+               return output;\r
        }\r
-       \r
+*/     \r
        public void removeSelection() {\r
                table.removeAll();\r
                updateTable();\r
index f4d6363..118e905 100755 (executable)
@@ -48,6 +48,7 @@ import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator;\r
 import org.tizen.dynamicanalyzer.ui.widgets.table.TableColumnSizePackListener;\r
 import org.tizen.dynamicanalyzer.util.Logger;\r
+import org.tizen.dynamicanalyzer.utils.Formatter;\r
 \r
 public class MemoryDetailsTable extends DATreeComposite {\r
 \r
@@ -205,15 +206,15 @@ public class MemoryDetailsTable extends DATreeComposite {
                List<Object> data = new ArrayList<Object>();\r
                \r
                // add name\r
-               text.add("System (Used KB)");\r
+               text.add("System (Used)");\r
                data.add(parentString);\r
                \r
                // add current data\r
-               text.add(String.format("%,d", currentmemory / 1024));\r
+               text.add(Formatter.toByteFormat(currentmemory));\r
                data.add(currentmemory);\r
                \r
                for(int i = 1 ; i < sorteddata.size() ; i++) {\r
-                       text.add(String.format("%,d", sorteddata.get(i) / 1024));\r
+                       text.add(Formatter.toByteFormat(sorteddata.get(i)));\r
                        data.add(sorteddata.get(i));\r
                }\r
                \r
@@ -226,8 +227,17 @@ public class MemoryDetailsTable extends DATreeComposite {
        }\r
 \r
        private TreeInput makeprocessMemory(int targetID) {\r
+               if(Global.MEMPSENABLE) {\r
+                       return NewMemoryData(targetID);\r
+               }\r
+               else {\r
+                       return OldMemoryData(targetID);\r
+               }\r
+       }\r
+       \r
+       private TreeInput NewMemoryData(int targetID) {\r
                DATableDataFormat tableData = new DATableDataFormat(keyindex++);\r
-               String parentString = String.format("Process #%s (Total KB)", targetID);\r
+               String parentString = String.format("Process #%s", targetID);\r
                \r
                tableData.setObject(parentString);\r
                \r
@@ -236,12 +246,88 @@ public class MemoryDetailsTable extends DATreeComposite {
                List<Object> data = new ArrayList<Object>();\r
                \r
                String tablename = ProcessMemoryDBTable.getTablename();         \r
-               String timeString = ProcessMemoryDBTable.SAMPLING_TIME;\r
+               String timeString = ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.name;\r
+               \r
+               // These columns will be changed to 'memps' data.\r
+               String columnNamePSS = ProcessMemoryDBTable.COLUMN.MEMORY_PSS.name;\r
+               String columnNameTHREED = ProcessMemoryDBTable.COLUMN.MEMORY_THREED.name;\r
+               String columnNameGEM = ProcessMemoryDBTable.COLUMN.MEMORY_GEM.name;\r
+               \r
+               // This data will be changed to Total data.\r
+               List<Long> processPSS = \r
+                               MemoryDataManager.getInstance().getColumnLongFromDB(tablename, columnNamePSS, timeString, targetID, StartTime, EndTime);\r
+               \r
+               if(processPSS.size() == 0) {\r
+                       return null;\r
+               }\r
+\r
+               List<Long> processTHREED = \r
+                               MemoryDataManager.getInstance().getColumnLongFromDB(tablename, columnNameTHREED, timeString, targetID, StartTime, EndTime);\r
+               List<Long> processGEM = \r
+                               MemoryDataManager.getInstance().getColumnLongFromDB(tablename, columnNameGEM, timeString, targetID, StartTime, EndTime);\r
+               \r
+               List<Long> sorteddataPSS = SortMemoryData(processPSS);\r
+               List<Long> sorteddataThreeD = SortMemoryData(processTHREED);\r
+               List<Long> sorteddataGem = SortMemoryData(processGEM);\r
+               \r
+               long currentPSS = 0;\r
+               long currentThreed = 0;\r
+               long currentGem = 0;\r
+               \r
+               if(Current != -1) {\r
+                       currentPSS = MemoryDataManager.getInstance().getCurrentColumnLongFromDB(tablename, columnNamePSS, timeString, targetID, Current);\r
+                       currentThreed = MemoryDataManager.getInstance().getCurrentColumnLongFromDB(tablename, columnNameTHREED, timeString, targetID, Current);\r
+                       currentGem = MemoryDataManager.getInstance().getCurrentColumnLongFromDB(tablename, columnNameGEM, timeString, targetID, Current);\r
+                       sorteddataPSS.set(0, currentPSS);\r
+                       sorteddataThreeD.set(0, currentThreed);\r
+                       sorteddataGem.set(0, currentGem);\r
+               }\r
+               \r
+               // add title\r
+               text.add(parentString);\r
+               data.add(targetID);\r
+                       \r
+               for(int i = 0 ; i < sorteddataPSS.size() ; i++) {\r
+                       long total = sorteddataPSS.get(i) + sorteddataThreeD.get(i) + sorteddataGem.get(i);\r
+                       text.add(Formatter.toByteFormat(total));\r
+                       data.add(total);\r
+               }\r
+               \r
+               output.setText(text);\r
+               tableData.getData().addAll(data);\r
+               output.setData(tableData);\r
+               output.setParent(parentString);\r
+               \r
+               Map<String, List<Long>> childrenDataMap = new HashMap<String, List<Long>>();\r
+               \r
+               childrenDataMap.put("PSS", sorteddataPSS);\r
+               childrenDataMap.put("3D", sorteddataThreeD);\r
+               childrenDataMap.put("GEM(ALLOC)", sorteddataGem);\r
+               \r
+               for(Map.Entry<String, List<Long>> entry : childrenDataMap.entrySet()) {\r
+                       makeChildTree(entry.getValue(), output, entry.getKey(), parentString);\r
+               }\r
+               \r
+               return output;\r
+       }\r
+       \r
+       private TreeInput OldMemoryData(int targetID) {\r
+               DATableDataFormat tableData = new DATableDataFormat(keyindex++);\r
+               String parentString = String.format("PSS (PID #%d)", targetID);\r
+\r
+               tableData.setObject(parentString);\r
+\r
+               TreeInput output = new TreeInput();\r
+               List<String> text = new ArrayList<String>();\r
+               List<Object> data = new ArrayList<Object>();\r
+\r
+               String tablename = ProcessMemoryDBTable.getTablename();         \r
+               String timeString = ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.name;\r
                \r
                // These columns will be changed to 'memps' data.\r
-               String columnNamePSS = ProcessMemoryDBTable.MEMORY_PSS;\r
-               String columnNameRSS = ProcessMemoryDBTable.MEMORY_RESIDENT;\r
-               String columnNameVSS = ProcessMemoryDBTable.MEMORY_VIRTUAL;\r
+               String columnNamePSS = ProcessMemoryDBTable.COLUMN.MEMORY_PSS.name;\r
+               String columnNameRSS = ProcessMemoryDBTable.COLUMN.MEMORY_RESIDENT.name;\r
+               String columnNameVSS = ProcessMemoryDBTable.COLUMN.MEMORY_VIRTUAL.name;\r
                \r
                // This data will be changed to Total data.\r
                List<Long> processPSS = \r
@@ -264,7 +350,7 @@ public class MemoryDetailsTable extends DATreeComposite {
                data.add(targetID);\r
                        \r
                for(int i = 0 ; i < sorteddataPSS.size() ; i++) {\r
-                       text.add(String.format("%,d", sorteddataPSS.get(i) / 1024));\r
+                       text.add(Formatter.toByteFormat(sorteddataPSS.get(i)));\r
                        data.add(sorteddataPSS.get(i));\r
                }\r
                \r
@@ -305,7 +391,7 @@ public class MemoryDetailsTable extends DATreeComposite {
        }\r
        \r
        private TreeInput makeHeapData(int targetID) {          \r
-               String parentString = "Heap (Total KB)";\r
+               String parentString = "Heap (Total)";\r
                \r
                DATableDataFormat tableData = new DATableDataFormat(keyindex++);\r
                tableData.setObject(parentString);\r
@@ -329,7 +415,7 @@ public class MemoryDetailsTable extends DATreeComposite {
                                data.add(targetID);\r
                                        \r
                                for(int i = 0 ; i < parentsdata.size() ; i++) {\r
-                                       text.add(String.format("%,d", parentsdata.get(i) / 1024));\r
+                                       text.add(Formatter.toByteFormat(parentsdata.get(i)));\r
                                        data.add(parentsdata.get(i));\r
                                }\r
                                \r
@@ -391,7 +477,7 @@ public class MemoryDetailsTable extends DATreeComposite {
                data.add(childName);\r
                        \r
                for(int i = 0 ; i < childdata.size() ; i++) {\r
-                       text.add(String.format("%,d", childdata.get(i) / 1024));\r
+                       text.add(Formatter.toByteFormat(childdata.get(i)));\r
                        data.add(childdata.get(i));\r
                }\r
                \r
@@ -437,10 +523,10 @@ public class MemoryDetailsTable extends DATreeComposite {
                for(int k = 0 ; k < processDataList.size() ; k++) {\r
                        List<Object> processData = processDataList.get(k);\r
                        // 9 : HEAP_ALLOCATION_BINARY_ID\r
-                       List<Object> binaryIDList =  cast(processData.get(9));\r
+                       List<Object> binaryIDList =  cast(processData.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BINARY_ID.index));\r
                        \r
                        // 10 : allocated size by libraries\r
-                       List<Object> allocByteList = cast(processData.get(10));\r
+                       List<Object> allocByteList = cast(processData.get(ProcessMemoryDBTable.COLUMN.HEAP_ALLOCATION_BYTE.index));\r
                        \r
                        for(int i = 0; i < binaryIDList.size() ; i++) {\r
                                Integer binaryID = (Integer) binaryIDList.get(i);\r
index c7710e5..1fcf0a7 100755 (executable)
@@ -45,6 +45,7 @@ import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator;\r
 import org.tizen.dynamicanalyzer.ui.widgets.table.TableColumnSizePackListener;\r
 import org.tizen.dynamicanalyzer.util.Logger;\r
+import org.tizen.dynamicanalyzer.utils.Formatter;\r
 \r
 public class MemoryStatisticsTable extends DATableComposite {\r
 \r
@@ -75,6 +76,11 @@ public class MemoryStatisticsTable extends DATableComposite {
 \r
        private int PREV_STATIC_ALLOC_COUNT;\r
        private int PREV_STATIC_FREE_COUNT;\r
+\r
+       private final int PRESISTENT_SIZE_INDEX = 0; \r
+       private final int PRESISTENT_COUNT_INDEX = 1;\r
+       private final int FREE_COUNT_INDEX = 2;\r
+       private final int TOTAL_SIZE_INDEX = 3;\r
        \r
        private Map<Integer,List<Object>> savedRemaindedStatic = new HashMap<Integer,List<Object>> ();\r
 \r
@@ -128,8 +134,8 @@ public class MemoryStatisticsTable extends DATableComposite {
                \r
                int index = 0;\r
                for(Map.Entry<Integer, List<Object>> elem : staticdatas.entrySet()) {\r
-                       if((Long) elem.getValue().get(1) == 0) {\r
-                               continue;\r
+                       if((Long) elem.getValue().get(PRESISTENT_COUNT_INDEX) == 0) {\r
+                               //continue;\r
                        }\r
                        \r
                        String apiName = Global.getLibraryName(elem.getKey());\r
@@ -190,15 +196,17 @@ public class MemoryStatisticsTable extends DATableComposite {
        }\r
        \r
        private Map<Integer, List<Object>> remainedAllocStaticData(long startTime, long endTime, String targetPIDs) {\r
+               int current_alloc_count = 0;\r
+               int current_free_count = 0;\r
                \r
-               int current_alloc_count = HeapDataManager.getInstance().getColumnCount(MemAllocDBTable.TABLENAME,\r
+               if(startTime == 0 && endTime == 0) {\r
+                       current_alloc_count = HeapDataManager.getInstance().getColumnCount(MemAllocDBTable.TABLENAME,\r
                                                MemAllocDBTable.COLUMN.SEQUENCE_NUMBER.name, MemAllocDBTable.COLUMN.ALLOCATED_TIME.name,\r
                                                startTime, endTime, targetPIDs);\r
-               int current_free_count = HeapDataManager.getInstance().getColumnCount(MemFreeDBTable.TABLENAME,\r
+                       current_free_count = HeapDataManager.getInstance().getColumnCount(MemFreeDBTable.TABLENAME,\r
                                                MemFreeDBTable.COLUMN.SEQUENCE_NUMBER.name, MemFreeDBTable.COLUMN.FREE_TIME.name,\r
                                                startTime, endTime, targetPIDs);\r
-               \r
-               if(startTime == 0 && endTime == 0) {\r
+\r
                        if(current_alloc_count == PREV_STATIC_ALLOC_COUNT && current_free_count == PREV_STATIC_FREE_COUNT) {\r
                                if(savedRemaindedStatic != null && savedRemaindedStatic.size() != 0){\r
                                        //Logger.info("Used old data");\r
@@ -222,95 +230,84 @@ public class MemoryStatisticsTable extends DATableComposite {
        }\r
        \r
        private Map<Integer, List<Object>> makeRemainedAllocatedStatic(List<List<Object>> allocData, List<List<Object>> freeData) {\r
-               Map<String, List<List<Object>>> addresMap = new HashMap<String, List<List<Object>>>();\r
-               Map<Integer, List<Object>> staticMap = new HashMap<Integer, List<Object>>();\r
+               Map<Long, List<List<Object>>> addressMap = new HashMap<Long, List<List<Object>>>();\r
+               Map<Integer, List<Object>> libStatisticMap = new HashMap<Integer, List<Object>>();\r
                \r
                int allocDataSize = allocData.size();           \r
                for (int j = 0; j < allocDataSize; j++) {\r
                        List<Object> iAllocData = allocData.get(j);\r
                        \r
                        long address = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.index);\r
-                       long seqnum = (Long) iAllocData.get(MemAllocDBTable.COLUMN.SEQUENCE_NUMBER.index);\r
+                       long alloctime = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_TIME.index);\r
                        long allocSize = (Long) iAllocData.get(MemAllocDBTable.COLUMN.ALLOCATED_MEMORY_SIZE.index);\r
                        int binaryId = (Integer) iAllocData.get(MemAllocDBTable.COLUMN.CALLER_LIBRARY_ID.index);\r
-                       String keystring = String.format("%d-%d", address, binaryId);\r
                        \r
-                       if(addresMap.containsKey(keystring)) {\r
-                               List<Object> onedata = new ArrayList<Object>();\r
-                               onedata.add(seqnum);\r
-                               onedata.add(allocSize);\r
-                               \r
-                               addresMap.get(keystring).add(onedata);\r
-                       }\r
-                       else {\r
+                       if(!addressMap.containsKey(address)) {\r
                                List<List<Object>> newlist = new ArrayList<List<Object>>();\r
-                               \r
-                               List<Object> onedata = new ArrayList<Object>();\r
-                               onedata.add(seqnum);\r
-                               onedata.add(allocSize);\r
-                               \r
-                               newlist.add(onedata);\r
-                               addresMap.put(keystring, newlist);\r
+                               addressMap.put(address, newlist);\r
                        }\r
                        \r
-                       if(staticMap.containsKey(binaryId)) {\r
-                               List<Object> oldbinary = staticMap.get(binaryId);\r
+                       List<Object> onedata = new ArrayList<Object>();\r
+                       onedata.add(alloctime);\r
+                       onedata.add(allocSize);\r
+                       onedata.add(binaryId);\r
+                       \r
+                       addressMap.get(address).add(onedata);\r
+                       \r
+                       if(libStatisticMap.containsKey(binaryId)) {\r
+                               List<Object> libstaticdata = libStatisticMap.get(binaryId);\r
                                \r
-                               oldbinary.set(0, (Long)oldbinary.get(0) + allocSize);\r
-                               oldbinary.set(1, (Long)oldbinary.get(1) + 1);\r
-                               oldbinary.set(3, (Long)oldbinary.get(3) + allocSize);\r
+                               libstaticdata.set(PRESISTENT_SIZE_INDEX, (Long)libstaticdata.get(PRESISTENT_SIZE_INDEX) + allocSize);\r
+                               libstaticdata.set(PRESISTENT_COUNT_INDEX, (Long)libstaticdata.get(PRESISTENT_COUNT_INDEX) + 1);\r
+                               libstaticdata.set(TOTAL_SIZE_INDEX, (Long)libstaticdata.get(TOTAL_SIZE_INDEX) + allocSize);\r
                                \r
-                               staticMap.put(binaryId, oldbinary);\r
+                               libStatisticMap.put(binaryId, libstaticdata);\r
                        }\r
                        else {\r
                                List<Object> newbinary = new ArrayList<Object>();\r
                                \r
+                               /*\r
+                                * 0: allocated size\r
+                                * 1: allocated count\r
+                                * 2: free count\r
+                                * 3 : total size\r
+                                */\r
+                               \r
                                newbinary.add(allocSize);\r
                                newbinary.add((long) 1);                                \r
                                newbinary.add((long) 0);\r
                                newbinary.add(allocSize);\r
                                \r
-                               staticMap.put(binaryId, newbinary);\r
+                               libStatisticMap.put(binaryId, newbinary);\r
                        }\r
                }\r
 \r
                for (int i = 0; i < freeData.size(); i++) {\r
                        List<Object> iFreeData = freeData.get(i);\r
                        long address = (Long) iFreeData.get(MemFreeDBTable.COLUMN.ALLOCATED_ADDRESS.index);\r
-                       long seqnum = (Long) iFreeData.get(MemFreeDBTable.COLUMN.SEQUENCE_NUMBER.index);\r
-                       int binaryId = (Integer) iFreeData.get(MemFreeDBTable.COLUMN.CALLER_LIBRARY_ID.index);\r
-                       \r
-                       String keystring = String.format("%d-%d", address, binaryId);\r
+                       long freetime = (Long) iFreeData.get(MemFreeDBTable.COLUMN.FREE_TIME.index);\r
                        \r
-                       if(addresMap.containsKey(keystring)) {\r
-                               int size = addresMap.get(keystring).size();\r
-                               for(int j = 0; j < size ; j++) {\r
-                                       List<Object> onedata = addresMap.get(keystring).get(j);\r
+                       if(addressMap.containsKey(address)) {\r
+                               int size = addressMap.get(address).size();\r
+                               \r
+                               for(int removeindex = 0; removeindex < size ; removeindex++) {\r
+                                       List<Object> onedata = addressMap.get(address).get(removeindex);\r
                                        \r
-                                       if((Long) onedata.get(0)  <= seqnum) {\r
-                                               long allocSize = (Long) onedata.get(1);\r
+                                       if((Long) onedata.get(0)  <= freetime) {\r
+                                               long freeSize = (Long) onedata.get(1);\r
+                                               int binaryId = (Integer) onedata.get(2);\r
                                                \r
-                                               if(staticMap.containsKey(binaryId)) {\r
-                                                       List<Object> oldbinary = staticMap.get(binaryId);\r
-                                                       \r
-                                                       oldbinary.set(0, (Long)oldbinary.get(0) - allocSize);\r
-                                                       oldbinary.set(1, (Long)oldbinary.get(1) - 1);\r
-                                                       oldbinary.set(2, (Long)oldbinary.get(2) + 1);\r
+                                               if(libStatisticMap.containsKey(binaryId)) {\r
+                                                       List<Object> libstaticdata = libStatisticMap.get(binaryId);\r
                                                        \r
-                                                       staticMap.put(binaryId, oldbinary);\r
-                                               }\r
-                                               else {\r
-                                                       List<Object> newbinary = new ArrayList<Object>();\r
-                                                       \r
-                                                       newbinary.add((long) (0 - allocSize));\r
-                                                       newbinary.add((long) 0);\r
-                                                       newbinary.add((long) 1);\r
-                                                       newbinary.add((long) 0);\r
+                                                       libstaticdata.set(PRESISTENT_SIZE_INDEX, (Long)libstaticdata.get(PRESISTENT_SIZE_INDEX) - freeSize);\r
+                                                       libstaticdata.set(PRESISTENT_COUNT_INDEX, (Long)libstaticdata.get(PRESISTENT_COUNT_INDEX) - 1);\r
+                                                       libstaticdata.set(FREE_COUNT_INDEX, (Long)libstaticdata.get(FREE_COUNT_INDEX) + 1);\r
                                                        \r
-                                                       staticMap.put(binaryId, newbinary);\r
+                                                       libStatisticMap.put(binaryId, libstaticdata);                                                   \r
                                                }\r
                                                \r
-                                               addresMap.get(keystring).remove(j);\r
+                                               addressMap.get(address).remove(removeindex);\r
                                                break;\r
                                        }\r
                                }\r
@@ -319,7 +316,7 @@ public class MemoryStatisticsTable extends DATableComposite {
                                //Logger.info("Unknow : 0x%s", Long.toHexString(address));\r
                        }\r
                }\r
-               return staticMap;\r
+               return libStatisticMap;\r
        }\r
 \r
        private TableInput makeTreeInputForDatas(String path, List<Object> staticdata, int index) {\r
@@ -343,16 +340,10 @@ public class MemoryStatisticsTable extends DATableComposite {
 \r
                text.add(libname);\r
                data.add(libname);\r
-               // Persistent byte\r
+               // Persistent byte              \r
                Long PByte = (Long) staticdata.get(0);\r
+               text.add(Formatter.toByteFormat(PByte));\r
                data.add(PByte);\r
-\r
-               String byteunit = "B";          \r
-               if (PByte > 1024) {\r
-                       PByte /= 1024;\r
-                       byteunit = "KB";\r
-               }               \r
-               text.add(String.format("%,d %s", PByte, byteunit));\r
                \r
                // Persistent count\r
                //Integer PCount = (Integer) staticdata.get(1);\r
@@ -367,16 +358,10 @@ public class MemoryStatisticsTable extends DATableComposite {
                data.add(FCount);\r
 \r
                // Total Byte\r
-               Long TotalByte = (Long) staticdata.get(3);              \r
+               Long TotalByte = (Long) staticdata.get(3);\r
+               text.add(Formatter.toByteFormat(TotalByte));\r
                data.add(TotalByte);\r
 \r
-               byteunit = "B";         \r
-               if (TotalByte > 1024) {\r
-                       TotalByte /= 1024;                      \r
-                       byteunit = "KB";\r
-               }\r
-               text.add(String.format("%,d %s", TotalByte, byteunit));\r
-\r
                // Total count\r
                //Integer TotalCount = PCount + FCount;\r
                Long TotalCount = PCount + FCount;\r
index c67aa88..5f6c976 100644 (file)
@@ -40,6 +40,7 @@ import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.ImageResources;
 import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
 import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.memory.data.ProcessMemoryDBTable;
 import org.tizen.dynamicanalyzer.ui.timeline.TargetProcessDBTable;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
 import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar;
@@ -56,7 +57,10 @@ public class ProcessMemoryChart extends TimelineChart {
        private final int VSS = 0;
        private final int RSS = 1;
        private final int PSS = 2;
-
+       private final int NEW_PSS = 0;
+       private final int NEW_THREED = 1;
+       private final int NEW_GEM = 2;
+       
        private Map<Integer, DAChartBoardItem> processChartboardMap = new HashMap<Integer, DAChartBoardItem>();
        private Map<Integer, String> processNameMap = new HashMap<Integer, String>();
        private DAChartBoardItem parentBoardItem;
@@ -74,21 +78,35 @@ public class ProcessMemoryChart extends TimelineChart {
        private List<DAChartSeries> createChartSeries() {
                List<DAChartSeries> chartSeriesList = new ArrayList<DAChartSeries>();
 
-               DAChartSeries vssMemorySeries = new DAChartSeries(
-                               TimelineChartLabels.PROCESS_MEMORY_CHART_VSS,
-                               DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_VSS);
-               DAChartSeries rssMemorySeries = new DAChartSeries(
-                               TimelineChartLabels.PROCESS_MEMORY_CHART_RSS,
-                               DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_RSS);
-               DAChartSeries pssMemorySeries = new DAChartSeries(
+               DAChartSeries pssSeries = new DAChartSeries(
                                TimelineChartLabels.PROCESS_MEMORY_CHART_PSS,
                                DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_PSS);
-               /*
-                * Insert order is important.
-                */
-               chartSeriesList.add(vssMemorySeries);
-               chartSeriesList.add(rssMemorySeries);
-               chartSeriesList.add(pssMemorySeries);
+               
+               if(Global.MEMPSENABLE) {
+                       DAChartSeries threeDSeries = new DAChartSeries(
+                                       TimelineChartLabels.PROCESS_MEMORY_CHART_THREED,
+                                       DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_VSS);
+                       DAChartSeries gemSeries = new DAChartSeries(
+                                       TimelineChartLabels.PROCESS_MEMORY_CHART_GEM,
+                                       DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_RSS);
+                       
+                       chartSeriesList.add(pssSeries);
+                       chartSeriesList.add(threeDSeries);
+                       chartSeriesList.add(gemSeries);
+               }
+               else {
+                       DAChartSeries vssSeries = new DAChartSeries(
+                                       TimelineChartLabels.PROCESS_MEMORY_CHART_VSS,
+                                       DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_VSS);
+                       DAChartSeries rssSeries = new DAChartSeries(
+                                       TimelineChartLabels.PROCESS_MEMORY_CHART_RSS,
+                                       DAChartSeries.SERIES_STYLE_AREA, ColorResources.SERIES_COLOR_PROCESS_RSS);
+
+                       
+                       chartSeriesList.add(vssSeries);
+                       chartSeriesList.add(rssSeries);
+                       chartSeriesList.add(pssSeries); 
+               }
 
                return chartSeriesList;
        }
@@ -216,23 +234,37 @@ public class ProcessMemoryChart extends TimelineChart {
                        List<List<Object>> data = processDataMap.get(pid);
                        for (int i = 0; i < data.size(); i++) {
                                List<Object> row = data.get(i);
-                               double time = (Long) row.get(TargetProcessDBTable.COLUMN.SAMPLING_TIME.ordinal())
-                                               / TimelineConstants.MEGA_DOUBLE;
-                               long vssMemory = (Long) row
-                                               .get(TargetProcessDBTable.COLUMN.MEMORY_VIRTUAL.ordinal());
-                               long rssMemory = (Long) row
-                                               .get(TargetProcessDBTable.COLUMN.MEMORY_RESIDENT.ordinal());
-                               long pssMemory = (Long) row.get(TargetProcessDBTable.COLUMN.MEMORY_PSS
-                                               .ordinal());
-                               seriesList.get(VSS).addSeriesItem(
-                                               new DAChartSeriesItem(time, vssMemory, Formatter
-                                                               .toByteFormat(vssMemory)));
-                               seriesList.get(RSS).addSeriesItem(
-                                               new DAChartSeriesItem(time, rssMemory, Formatter
-                                                               .toByteFormat(rssMemory)));
-                               seriesList.get(PSS).addSeriesItem(
-                                               new DAChartSeriesItem(time, pssMemory, Formatter
-                                                               .toByteFormat(pssMemory)));
+                               double time = (Long) row.get(ProcessMemoryDBTable.COLUMN.SAMPLING_TIME.index) / TimelineConstants.MEGA_DOUBLE;
+                               long vssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_VIRTUAL.index);
+                               long rssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_RESIDENT.index);
+                               long pssMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_PSS.index);
+                               
+                               if(Global.MEMPSENABLE) {
+                                       long threeDMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_THREED.index);
+                                       long gemMemory = (Long) row.get(ProcessMemoryDBTable.COLUMN.MEMORY_GEM.index);
+                                       
+                                       seriesList.get(NEW_PSS).addSeriesItem(
+                                                       new DAChartSeriesItem(time, pssMemory, Formatter
+                                                                       .toByteFormat(pssMemory)));
+                                       seriesList.get(NEW_THREED).addSeriesItem(
+                                                       new DAChartSeriesItem(time, threeDMemory, Formatter
+                                                                       .toByteFormat(threeDMemory)));
+                                       seriesList.get(NEW_GEM).addSeriesItem(
+                                                       new DAChartSeriesItem(time, gemMemory, Formatter
+                                                                       .toByteFormat(gemMemory)));
+
+                               }                       
+                               else {
+                                       seriesList.get(VSS).addSeriesItem(
+                                                       new DAChartSeriesItem(time, vssMemory, Formatter
+                                                                       .toByteFormat(vssMemory)));
+                                       seriesList.get(RSS).addSeriesItem(
+                                                       new DAChartSeriesItem(time, rssMemory, Formatter
+                                                                       .toByteFormat(rssMemory)));
+                                       seriesList.get(PSS).addSeriesItem(
+                                                       new DAChartSeriesItem(time, pssMemory, Formatter
+                                                                       .toByteFormat(pssMemory)));     
+                               }       
                        }
                }
        }
index 16cc2b3..01e9873 100644 (file)
@@ -62,6 +62,7 @@ import org.tizen.dynamicanalyzer.swap.model.data.UIEventData;
 import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
 import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
 import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotDataManager;
+import org.tizen.dynamicanalyzer.ui.memory.data.MemoryDataManager;
 import org.tizen.dynamicanalyzer.ui.timeline.CustomDataDBTable;
 import org.tizen.dynamicanalyzer.ui.timeline.LifeCycleDBTable;
 import org.tizen.dynamicanalyzer.ui.timeline.SystemDataDBTable;
@@ -74,7 +75,6 @@ import org.tizen.dynamicanalyzer.ui.timeline.chart.CPUFrequencyChart;
 import org.tizen.dynamicanalyzer.ui.timeline.chart.DeviceChart;
 import org.tizen.dynamicanalyzer.ui.timeline.chart.DiskIOChart;
 import org.tizen.dynamicanalyzer.ui.timeline.chart.EnergyChart;
-import org.tizen.dynamicanalyzer.ui.timeline.chart.HeapChart;
 import org.tizen.dynamicanalyzer.ui.timeline.chart.NetworkIOChart;
 import org.tizen.dynamicanalyzer.ui.timeline.chart.ProcessMemoryChart;
 import org.tizen.dynamicanalyzer.ui.timeline.chart.ScreenshotChart;
@@ -157,9 +157,9 @@ public class TimelineChartManager extends PageDataManager implements IDAChartSer
                initChartMap(new CPUChart(TimelinePage.pageID));
                initChartMap(new CPUCoreChart(TimelinePage.pageID));
                initChartMap(new CPUFrequencyChart(TimelinePage.pageID));
-               initChartMap(new HeapChart(TimelinePage.pageID));
-               initChartMap(new ProcessMemoryChart(TimelinePage.pageID));
+               //initChartMap(new HeapChart(TimelinePage.pageID));
                initChartMap(new SystemMemoryChart(TimelinePage.pageID));
+               initChartMap(new ProcessMemoryChart(TimelinePage.pageID));              
                initChartMap(new ScreenshotChart(TimelinePage.pageID));
                initChartMap(new UIEventChart(TimelinePage.pageID));
                initChartMap(new DiskIOChart(TimelinePage.pageID));
@@ -760,8 +760,8 @@ public class TimelineChartManager extends PageDataManager implements IDAChartSer
                if (Toolbar.INSTANCE != null) {
                        selectedPID = Toolbar.INSTANCE.getSelectedPid();
                }
-               Map<Integer, List<List<Object>>> targetProcessDBData = getTargetProcessDataFromDB(
-                               startTime, endTime, selectedPID);
+               Map<Integer, List<List<Object>>> targetProcessDBData = 
+                               MemoryDataManager.getInstance().getTargetProcessDataMapFromDB(startTime, endTime, selectedPID);
 
                /*
                 * 2. Make series of chart