File : bug fixed where the chart seriese would not draw in case of file duplicated... 19/24519/1
authorhyeran74.kim <hyeran74.kim@samsung.com>
Wed, 16 Jul 2014 02:50:25 +0000 (11:50 +0900)
committerhyeran74.kim <hyeran74.kim@samsung.com>
Wed, 16 Jul 2014 02:50:25 +0000 (11:50 +0900)
Change-Id: I7d6f813099a522439a4564208c0f9d48157e9f89
Signed-off-by: hyeran74.kim <hyeran74.kim@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartBoard.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileDetailInfoView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileApiDB.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileSelectedData.java

index c0d4ca6..963c614 100644 (file)
@@ -147,7 +147,8 @@ public class FileApiListView extends DAViewComposite {
                // if new event is put from swap, update table 
                List<FileEvent> events = manager.getApiDB().selectAPITable(
                                selectedData.getFilePath(), selectedData.getPid(),
-                               selectedData.getTid(), selectedData.isParentChart());
+                               selectedData.getTid(), 
+                               selectedData.isParentChart());
                if(events != null) {
                        if (tableComp.getTable().getItemCount() > 0
                                        && events.size() != tableComp.getTable().getItemCount()) {
index c3deaa5..95b74de 100644 (file)
@@ -60,12 +60,9 @@ public class FileChart {
        private long fd = -1;
        private long fileSize = 0;
        
-       private List<FileEvent> statusList = new ArrayList<FileEvent>(); // only open, close event
-       
-       private boolean isOpenedFile = false;
-       private boolean isLockedFile = false;
+       private boolean isTarget = false;
        
-       private double fileOpenedTime = 0;
+       private List<FileEvent> statusList = new ArrayList<FileEvent>(); // only open, close event
        
        public FileChart(String filePath) {
                this.filePath = filePath;
@@ -78,12 +75,14 @@ public class FileChart {
                this.fd = fd;
        }
        
-       public FileChart( int pid, int tid, long fd,  String filePath, long fileSize) {
+       public FileChart(int pid, int tid, long fd, String filePath, long fileSize,
+                       boolean isTarget) {
                this.filePath = filePath;
                this.pid = pid;
                this.tid = tid;
                this.fd = fd;
                this.fileSize = fileSize;
+               this.isTarget = isTarget;
        }
 
        public void setItem(DAChartBoardItem item) {
@@ -115,12 +114,26 @@ public class FileChart {
                                continue;
                        }
                        double time = event.getTime() / TimelineConstants.MEGA_DOUBLE;
-                       String apiName = event.getApiName();
+                       int id = event.getFdApiType(); 
+                       String apiName = null;
+                       if (event.isTarget()) {
+                               apiName = event.getApiName();
+                       } else {
+                               switch (id) {
+                               case LogCenterConstants.FD_API_TYPE_OPEN:
+                                       apiName = "open";
+                                       break;
+                               case LogCenterConstants.FD_API_TYPE_CLOSE:
+                                       apiName = "close";
+                                       break;
+                               default:
+                                       break;
+                               }
+                       }
                        Color color = ColorResources.FILE_OTHER_OPERATION;
                        if (event.getErrno() != 0) {
                                color = ColorResources.FILE_API_FAILED;
                        } else {
-                               int id = event.getFdApiType(); 
                                if( id == LogCenterConstants.FD_API_TYPE_READ_START
                                                || id ==  LogCenterConstants.FD_API_TYPE_READ_END
                                                || id == LogCenterConstants.FD_API_TYPE_WRITE_START
@@ -133,7 +146,6 @@ public class FileChart {
                        DAChartSeriesItem seriesItem  = new DAChartSeriesItem(time,
                                        DAChartSeriesItem.SERIES_AREA_BAR, color, color, apiName);
                        accessSeries.addSeriesItem(seriesItem);
-                       
                }
                chart.redraw();
        }
@@ -233,6 +245,7 @@ public class FileChart {
                                break;
                        }
                }
+               
                chart.redraw();
        }
        
@@ -254,6 +267,7 @@ public class FileChart {
                        case LogCenterConstants.FD_API_TYPE_OPEN:
                                if(openNum > 0){ // duplicated open
                                        // the file has been already opened by other process or thread
+                                       openNum++;
                                        statusSeries.addSeriesItem(new DAChartSeriesItem(
                                                        time, DAChartSeriesItem.SERIES_AREA_START,
                                                        ColorResources.FILE_DUPLICATE_OPENED,
@@ -262,7 +276,6 @@ public class FileChart {
                                }else{
                                        // the file has been opened by only one process or thread
                                        openNum++;
-                                       setFileOpenedTime(time);
                                        statusSeries.addSeriesItem(new DAChartSeriesItem(
                                                        time, DAChartSeriesItem.SERIES_AREA_START,
                                                        ColorResources.FILE_OPENED,
@@ -357,22 +370,6 @@ public class FileChart {
                statusList.add(event);
        }
 
-       public boolean isOpenedFile() {
-               return isOpenedFile;
-       }
-
-       public void setOpenedFile(boolean isOpenedFile) {
-               this.isOpenedFile = isOpenedFile;
-       }
-
-       public boolean isLockedFile() {
-               return isLockedFile;
-       }
-
-       public void setLockedFile(boolean isLockedFile) {
-               this.isLockedFile = isLockedFile;
-       }
-
        public int getPid() {
                return pid;
        }
@@ -388,14 +385,6 @@ public class FileChart {
        public void setTid(int tid) {
                this.tid = tid;
        }
-
-       public void setFileOpenedTime(double time) {
-               this.fileOpenedTime = time;
-       }
-       
-       public double getFileOpenedTime() {
-               return fileOpenedTime;
-       }
        
        public long getFileSize() {
                return fileSize;
@@ -412,4 +401,12 @@ public class FileChart {
        public void setFd(long fd) {
                this.fd = fd;
        }
+       
+       public void setTarget(boolean isTarget) {
+               this.isTarget = isTarget;
+       }
+       
+       public boolean isTarget() {
+               return isTarget;
+       }
 }
\ No newline at end of file
index 518f109..e4be146 100644 (file)
@@ -28,6 +28,7 @@ package org.tizen.dynamicanalyzer.ui.file;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -70,7 +71,6 @@ public class FileChartBoard extends DAChartBoard {
 
        private List<FileChart> chartList = new ArrayList<FileChart>();
        private FileDataManager fileChartManager = FileDataManager.getInstance();
-       private Map<String, String> fileAccessorMap = new HashMap<String, String>();
        private FileDataMaker dataMaker;
        private FileApiDB apiDB;
 
@@ -134,7 +134,6 @@ public class FileChartBoard extends DAChartBoard {
                FileChart parent = null;
                FileChart child = null;
                String filePath = null;
-               String key = null;
 
                List<FileEvent> eventList = dataMaker.getFileEventList();
                if (eventList == null) {
@@ -143,26 +142,15 @@ public class FileChartBoard extends DAChartBoard {
                }
 
                for (FileEvent event : eventList) {
-                       // TODO need to think about what value could be a key
-                       key = createKey(event.getPid(), event.getTid());
-                       if (event.getFdApiType() == LogCenterConstants.FD_API_TYPE_OPEN) {
-                               if (fileAccessorMap.get(key) == null) {
-                                       fileAccessorMap.put(key, event.getFilePath());
-                               }
-                       }
-                       if(fileAccessorMap.get(key) != null) {
-                               filePath = fileAccessorMap.get(key);    
-                       }else {
-                               // The file has not opened
-                               return;
-                       }
+                       filePath = event.getFilePath();
                        
                        parent = getParentChart(filePath);
                        if (parent == null) {
                                parent = new FileChart(filePath);
                                parent.setFilePath(event.getFilePath());
                                child = new FileChart(event.getPid(), event.getTid(),
-                                               event.getFdValue(), event.getFilePath(), event.getFileSize());
+                                               event.getFdValue(), event.getFilePath(),
+                                               event.getFileSize(), event.isTarget());
                                parent.addChild(child);
                                createChartItem(null, parent);
                                createChartItem(parent, child);
@@ -171,9 +159,9 @@ public class FileChartBoard extends DAChartBoard {
                        } else {
                                child = parent.getChildChart(event);
                                if (child == null) {
-                                       child = new FileChart(event.getPid(),
-                                                       event.getTid(), event.getFdValue(), event.getFilePath(),
-                                                       event.getFileSize());
+                                       child = new FileChart(event.getPid(), event.getTid(),
+                                                       event.getFdValue(), event.getFilePath(),
+                                                       event.getFileSize(), event.isTarget());
                                        parent.addChild(child);
                                        createChartItem(parent, child);
                                        chartList.add(child);
@@ -196,13 +184,16 @@ public class FileChartBoard extends DAChartBoard {
 
                if (parent != null) { // child chart row
                        DAChartBoardItem parentItem = parent.getItem();
-                       item = new DAChartBoardItem(parentItem, "0x"//$NON-NLS-1$
-                                       + Long.toHexString(fileChart.getPid())
-                                       + "(PID)"
-                                       + CommonConstants.NEW_LINE
-                                       + Long.toHexString(fileChart.getTid()) + "(TID)");
+                       StringBuffer title = new StringBuffer();
+                       if(fileChart.isTarget()) {
+                               title.append("Target"+ CommonConstants.NEW_LINE);
+                       } else {
+                               title.append("Non-Target"+ CommonConstants.NEW_LINE);
+                       }
+                       title.append(fileChart.getPid() + "(PID)"
+                                       + CommonConstants.NEW_LINE + fileChart.getTid() + "(TID)");
+                       item = new DAChartBoardItem(parentItem, title.toString());
                        chart = item.getChart();
-                       // TODO change dentry to origin file path
                        item.setData(new FileSelectedData(fileChart.getFilePath(), fileChart.getPid(), 
                                        fileChart.getTid(), fileChart.getFd(), false));
                        initFileChart(chart, false);
@@ -218,9 +209,9 @@ public class FileChartBoard extends DAChartBoard {
                                                + fileName.substring(maxLen, maxLen*2 - 1) + "...";
                        }
                        item = new DAChartBoardItem(this, title);
-                       item.setData(new FileSelectedData(fileChart.getPid(), fileChart.getTid(), 
-                                       fileChart.getFd(), true,
-                                       fileChart.getFilePath(), fileChart.getFileSize()));
+                       item.setData(new FileSelectedData(fileChart.getFilePath(),
+                                       fileChart.getPid(), fileChart.getTid(), fileChart.getFd(),
+                                       fileChart.getFileSize(), true));
                        chart = item.getChart();
                        initFileChart(chart, true);
                }
@@ -287,20 +278,13 @@ public class FileChartBoard extends DAChartBoard {
                return null;
        }
 
-       private String createKey(int pid, int tid) {
-               StringBuffer key = new StringBuffer(pid);
-               key.append(":");
-               key.append(tid);
-               return key.toString();
-       }
-
        private List<FileStatus> getVisibleStatusList() {
                return dataMaker.getFileStatusList();
        }
 
        private List<FileAccess> getVisibleAccessList() {
                List<FileAccess> data = new ArrayList<FileAccess>();
-               for (FileAccess access : dataMaker.getFileAccessList()) {
+               for(FileAccess access : dataMaker.getFileAccessList()) {
                        double startTime = Formatter.toLongTimeForDoubleTime(access
                                        .getStartTime());
                        double endTime = Formatter.toLongTimeForDoubleTime(access
@@ -318,7 +302,6 @@ public class FileChartBoard extends DAChartBoard {
                return data;
        }
 
-       // TODO change dentry to origin file path
        public int[] getChartIndex(FileEvent event) {
                FileChart data = null;
                for (int i = 0; i < chartList.size(); i++) {
index 548b38d..e7e1e5b 100644 (file)
@@ -59,10 +59,10 @@ public class FileDetailInfoView extends DAViewComposite {
        private long writeSize = 0;
        private long totalUseTime = 0;
        private int apiCount = 0;
-       private int failedApiCount = 0; 
-       
+       private int failedApiCount = 0;
+
        private FileDataManager fileChartManager = FileDataManager.getInstance();
-       
+
        private void init() {
                fileName = AnalyzerLabels.EMPTY_STRING;
                filePath = AnalyzerLabels.EMPTY_STRING;
@@ -175,26 +175,27 @@ public class FileDetailInfoView extends DAViewComposite {
                        return;
                }
                List<FileEvent> events = null;
-               events = fileChartManager.getApiDB()
-                               .selectAPITable(selectData.getFilePath(),
-                                               selectData.getPid(), selectData.getTid(), selectData.isParentChart());
-               if(events != null) {
+               events = fileChartManager.getApiDB().selectAPITable(
+                               selectData.getFilePath(), selectData.getPid(),
+                               selectData.getTid(), selectData.isParentChart());
+               if (events != null) {
                        filePath = events.get(0).getFilePath();
                        fileName = events.get(0).getFileName();
                        fileSize = events.get(0).getFileSize();
                        apiCount = events.size();
                }
-               events = fileChartManager.getApiDB()
-                               .selectFailedAPI(selectData.getFilePath(),
-                                               selectData.getPid(), selectData.getTid(), selectData.isParentChart());
-               if(events != null) {
+               events = fileChartManager.getApiDB().selectFailedAPI(
+                               selectData.getFilePath(), selectData.getPid(),
+                               selectData.getTid(), selectData.getFdValue(),
+                               selectData.isParentChart());
+               if (events != null) {
                        failedApiCount = events.size();
                }
                // TODO define What totalUseTime
                // totalUseTime = (long) selectData.getFileTotalUseTime();
                // readSize = selectData.getReadSize();
                // writeSize = selectData.getWriteSize();
-                       
+
                canvas.redraw();
        }
 
index c58a119..3b761d9 100644 (file)
@@ -105,8 +105,9 @@ public class FileApiDB extends DBTable {
                        + TABLE_NAME + " where %s <= " 
                        + COLUMN.EVENT_TIME.getName() + " and "
                        + COLUMN.EVENT_TIME.getName()
-                       + " <= %s" + " and "
-                       + COLUMN.TARGET.getName() + " = true";
+                       + " <= %s"; 
+                       //+ " and "
+                       //+ COLUMN.TARGET.getName() + " = true";
        
        private static final String SELECT_APIS_FOR_CHILD = "select "
                        + selectAllColumn
@@ -192,7 +193,7 @@ public class FileApiDB extends DBTable {
        }
 
        public List<FileEvent> selectFailedAPI(String filePath, int pid, int tid, 
-                       boolean isParentChart) {
+                       long fd, boolean isParentChart) {
                String query = String.format(SELECT_FAILED_APIS_FOR_CHAILD, filePath, pid, tid);
                if (isParentChart) {
                        query = String
index d6f4913..adbcc16 100644 (file)
@@ -29,6 +29,7 @@ package org.tizen.dynamicanalyzer.ui.file.manager;
 
 import java.util.ArrayList;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -73,8 +74,10 @@ public class FileDataMaker {
        private FailedChecker failedChecker = null;
        private int timeLineFileChartFDCount = 0;
        
-       private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
-       private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
+       private List<FileStatus> fileStatusList = Collections.synchronizedList(new ArrayList<FileStatus>());
+       private List<FileAccess> fileAccessList = Collections.synchronizedList(new ArrayList<FileAccess>());
+       //private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
+       //private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
        private Map<String, String> fileAccessorMap = new HashMap<String, String>();
        
        private Map<Long, Boolean> isFileLocking = new HashMap<Long, Boolean>(); 
@@ -146,7 +149,7 @@ public class FileDataMaker {
                                long fileSize = input.getFileSize();
                                String arg = input.getArgs();
                                String returnVal = input.getReturn();
-                       
+                               
                                // check error
                                if (errNo != 0) {
                                        switch (input.getFdApiType()) {
@@ -262,18 +265,19 @@ public class FileDataMaker {
                                        // for creating read/write end event with MSG_FUNCTION_EXIT
                                        if (entryEvent == LogCenterConstants.FD_API_TYPE_READ_START
                                                        && entryEvent == eventType) {
-                                               DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType() 
-                                                               + ", return:" + profileData.getReturn());
+                                               /*DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType() 
+                                                               + ", return:" + profileData.getReturn());*/
                                                event = new FileEvent(seq, pid, tid, fd, filePath,
                                                                LogCenterConstants.FD_API_TYPE_READ_END, time, false);
+                                               addFileEvent(eventList, event);
                                        } else if (entryEvent == LogCenterConstants.FD_API_TYPE_WRITE_START
                                                        && entryEvent == eventType) {
-                                               DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType() 
-                                                               + ", return:" + profileData.getReturn());
+                                               /*DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType() 
+                                                               + ", return:" + profileData.getReturn());*/
                                                event = new FileEvent(seq, pid, tid, fd, filePath,
                                                                LogCenterConstants.FD_API_TYPE_WRITE_END, time, false);
+                                               addFileEvent(eventList, event);
                                        } // else, // no need end event for other event(open, close)
-                                       addFileEvent(eventList, event);
                                }
                        }
                }
@@ -312,7 +316,10 @@ public class FileDataMaker {
                String key = createKey(pid, tid, fd);
                if(filePath == null || filePath.equals("")) {
                        filePath = getFilePath(key);
+                       event.setFilePath(filePath);
                }
+               
+               DA_LOG.debug("==> entry eventType:" + apiType + ", fd:" + fd + ", filePath:" + filePath);
 
                switch (apiType) {
                case LogCenterConstants.FD_API_TYPE_OPEN:
@@ -339,6 +346,7 @@ public class FileDataMaker {
                        
                        addStatusData(new FileStatus(pid, tid, fd, filePath,
                                                apiType, eventTime, errNo));
+                       removeFileAccessor(key);
                        break;
                case LogCenterConstants.FD_API_TYPE_READ_START:
                        FileAccess readAccess = new FileAccess(filePath, pid,
@@ -435,6 +443,12 @@ public class FileDataMaker {
                }// else, already exist
        }
        
+       private void removeFileAccessor(String key) {
+               if(fileAccessorMap.get(key) != null) {
+                       fileAccessorMap.remove(key);
+               }// else, already not exist
+       }
+       
        private String getFilePath(String key) {
                String filePath = null;
                if(fileAccessorMap.get(key) != null) {
index 0714c31..dc89dc4 100644 (file)
@@ -37,8 +37,8 @@ public class FileSelectedData extends FileEvent{
                this.isParentChart = isParentChart;
        }
        
-       public FileSelectedData(int pid, int tid, long fd,
-                       boolean isParentChart, String filePath, long fileSize) {
+       public FileSelectedData(String filePath, int pid, int tid, long fd, 
+                       long fileSize, boolean isParentChart) {
                this.pid = pid;
                this.tid = tid;
                this.fdValue = fd;