File: improve performance about drawing file chart
authorhyeran74.kim <hyeran74.kim@samsung.com>
Tue, 6 Oct 2015 09:30:34 +0000 (18:30 +0900)
committerhyeran74.kim <hyeran74.kim@samsung.com>
Tue, 6 Oct 2015 09:30:34 +0000 (18:30 +0900)
Change-Id: Ibfd0c07fced67f24319ad660f93ebb121b1bbce8
Signed-off-by: hyeran74.kim <hyeran74.kim@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartBoard.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java

index 81cdcdd..6b911dc 100644 (file)
@@ -27,6 +27,8 @@
 package org.tizen.dynamicanalyzer.ui.file;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -191,15 +193,13 @@ public class FileChartBoard extends DAChartBoard {
                int fileId = 0;
 
                // 1. get accessorlist from data maker
-               List<FileAccessor> accessorList = dataMaker.getFileAccessor();
-               if (accessorList == null) {
-                       if(dataMaker.getFileAccessorList() != null) {
-                               accessorList = dataMaker.getFileAccessorList();
-                       }else {
-                               return;
-                       }
+               List<FileAccessor> accessorList = dataMaker.getFileAccessorList();
+               if(accessorList == null) {
+                       return;
                }
-
+               
+               Collections.sort(accessorList, new AccessorCompare());
+       
                for (FileAccessor accessor : accessorList) {
                        filePath = accessor.getFilePath();
                        fileId = accessor.getFileId();
@@ -491,4 +491,13 @@ public class FileChartBoard extends DAChartBoard {
        public int getChartSize() {
                return chartList.size();
        }
+       
+       static class AccessorCompare implements Comparator<FileAccessor> {
+               @Override
+               public int compare(FileAccessor arg0, FileAccessor arg1) {
+                       // TODO Auto-generated method stub
+                       return arg0.getAccessorId() < arg1.getAccessorId() ? 
+                                       -1 : arg0.getAccessorId() > arg1.getAccessorId() ? 1:0;
+               }
+       }
 }
index dab3481..33ed019 100644 (file)
@@ -28,7 +28,9 @@ package org.tizen.dynamicanalyzer.ui.file.manager;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -66,15 +68,14 @@ public class FileDataMaker {
        private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
        private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
        private List<FileEvent> fileApiList = new ArrayList<FileEvent>();
-       private List<FileAccessor> fileAccessorList = new ArrayList<FileAccessor>();
-
+       private List<FileAccessor> fileAccessorList = Collections.synchronizedList(new ArrayList<FileAccessor>());
+       
        // to match entry and exit message
        private Map<Long, FileEvent> entryMap = new HashMap<Long, FileEvent>();
        private Map<String, List<Object>> fileAccessorMap = new HashMap<String, List<Object>>();
-
+       
        // to find file path
        private Map<String, List<Object>> filePathMap = new HashMap<String, List<Object>>();
-       private Queue<List<FileAccessor>> fileAccessorQueue = new ConcurrentLinkedQueue<List<FileAccessor>>();
 
        // to auto release
        private Map<List<Integer>, List<Integer>> accessorHasLockMap = new HashMap<List<Integer>, List<Integer>>();
@@ -94,7 +95,6 @@ public class FileDataMaker {
                fileApiList.clear();
                fileAccessorList.clear();
                fileAccessorMap.clear();
-               fileAccessorQueue.clear();
                filePathMap.clear();
                accessorHasLockMap.clear();
                concurrentAccessNumMap.clear();
@@ -135,24 +135,7 @@ public class FileDataMaker {
                // files
                Logs sysLogs = pack.getLogs(ProtocolConstants.MSG_FUNCTION_ENTRY_EXIT);
                processSysData(sysLogs, fileEventList);
-
-               // insert to DB: file API Table
-               if (fileEventList.size() > 0) {
-                       for (FileEvent data : fileEventList) {
-                               fileApiList.add(data.getDBData());
-                       }
-                       FileDataManager.getInstance().getApiDB().insert((List<List<Object>>) fileApiList);
-               }
-
-               Set<String> kyeSet = fileAccessorMap.keySet();
-               for (Iterator<String> iterator = kyeSet.iterator(); iterator.hasNext();) {
-                       String key = (String) iterator.next();
-                       List<Object> values = fileAccessorMap.get(key);
-                       Object[] list = values.toArray();
-                       List<FileAccessor> accessor = (ArrayList<FileAccessor>) list[1];
-                       fileAccessorList.addAll(accessor);
-               }
-               fileAccessorQueue.add(fileAccessorList);
+               
        }
        
        
@@ -210,6 +193,8 @@ public class FileDataMaker {
 
                                addFileEvent(fileEventList, event, input);
                        }
+                       
+                       saveFileAccessors(fileEventList);
                }
        }
 
@@ -373,9 +358,29 @@ public class FileDataMaker {
                                        break;
                                }
                        }
+                       
+                       saveFileAccessors(fileEventList);
+                       
                }
        }
        
+       public void saveFileAccessors(List<FileEvent> fileEventList) {
+               ArrayList<List<Object>> fileApiList = new ArrayList<List<Object>>();
+
+               if (fileEventList.size() > 0) {
+                       for (FileEvent data : fileEventList) {
+                               fileApiList.add(data.getDBData());
+                       }
+                       FileDataManager.getInstance().getApiDB().insert((List<List<Object>>) fileApiList);
+               }
+               
+               fileAccessorList.clear();
+               for(String key : fileAccessorMap.keySet()){
+                       List<Object> values = fileAccessorMap.get(key);
+                       Object[] list = values.toArray();
+                       fileAccessorList.addAll((ArrayList<FileAccessor>) list[1]);
+               }
+       }
 
        /**
         * Add FileEvent list into eventList
@@ -812,10 +817,6 @@ public class FileDataMaker {
                return false;
        }
 
-       public List<FileAccessor> getFileAccessor() {
-               return fileAccessorQueue.poll();
-       }
-
        public List<FileAccess> getFileAccessList() {
                return fileAccessList;
        }
@@ -847,5 +848,4 @@ public class FileDataMaker {
        public void setFileAccessorList(List<FileAccessor> fileAccessorList) {
                this.fileAccessorList = fileAccessorList;
        }
-
 }
\ No newline at end of file