Merge remote-tracking branch 'origin/tizen' into da-file 26/25326/1
authorhyeran74.kim <hyeran74.kim@samsung.com>
Mon, 4 Aug 2014 04:53:04 +0000 (13:53 +0900)
committerhyeran74.kim <hyeran74.kim@samsung.com>
Mon, 4 Aug 2014 04:53:04 +0000 (13:53 +0900)
Conflicts:
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ImageResources.java
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeWhite.java
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/widgets/da/view/DATabComposite.java
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/widgets/da/view/TabButtonRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/DACustomButton.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/button/DACustomButtonRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/combo/DACustomCombo.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/combo/DACustomComboDefaultRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/combo/DACustomComboPopupDefaultRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/combo/DACustomComboRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/popupMenu/DAPopupMenuItemButtonRenderer.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/SqlConnectionManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogInserter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/data/ProcessInfoPackage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogPackage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/PageDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogDataFactory.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SystemData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListTable.java
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/FileChartView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileDetailInfoView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FilePage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileChartDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileApiListTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileApiListView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileChartData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileChartDataEvent.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileChartView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/old/FileDetailInfoView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/screenshot/ScreenshotDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/data/NetworkDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/data/NetworkDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChartView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLAPIDBTableManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLFrameRateDBTableManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLFrameTimeDBTableManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLStateDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLStateProgramDBTableManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/type/FrameRateInfo.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/api/GLAPIListView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/state/GLContextTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/state/GLProgramTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfileDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/EnergyDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/SystemDataDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/UIEventDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/CPUFrequencyChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineChartManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replay/data/ReplayDBManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replayEditor/ReplayEditDialogDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/TitleComboPopupRenderer.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/TitleComboRenderer.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java

Change-Id: I31c91f7dd48d933bd0681f9655365b8a09753e20
Signed-off-by: hyeran74.kim <hyeran74.kim@samsung.com>
12 files changed:
1  2 
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/widgets/da/base/DADialog.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/data/DataChannelConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/FileData.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/FileChartView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/Formatter.java

@@@ -54,6 -54,6 +54,10 @@@ public class DADialog 
        private String message = null;
        private boolean returnType = false;
        private String titleText = WidgetLabels.DA_WARNING;
++      private final int defaultWidth = 446;
++      private final int defaultHeifght = 153;
++      private int width = 0;
++      private int height = 0;
  
        private Image iconImage = ImageResources.DYNANMIC_ANALYZER_ICON;
  
        };
  
        public DADialog(Shell parent, int style) {
++              this.width = this.defaultWidth;
++              this.height = this.defaultHeifght;
                this.parent = parent;
        }
  
        public DADialog(Shell parent, int style, int width, int height) {
                this(parent, style);
++              this.width = width;
++              this.height = height;
        }
  
        public boolean open() {
                shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
--              shell.setSize(446, 153);
++              shell.setSize(width, height);
                shell.setLayout(new FormLayout());
                shell.setText(titleText);
  
@@@ -60,12 -59,8 +59,8 @@@ public class DALimit 
        public static final int MAX_LEAK_CHECK_BUFFER_SIZE = 2^20; // 1,048,576
  
        // File Analysis
-       // TODO: remove unused definition
-       public static final int MAX_FILE_COUNT = 2^10; // 1024, not used
 -      public static final int MAX_FILE_COUNT = 2^10; // 1024
        public static final int MAX_FILE_STATUS_COUNT = 2^10*100; // 102400
 -      public static final int MAX_FILE_ACCESSOR_COUNT = 2^10*100; // 102400
 +      public static final int MAX_FILE_ACCESS_COUNT = 2^10*100; // 102400
-       public static final int MAX_FILE_ACCESSOR_COUNT = 2^10*100; // 102400, not used
-       // TODO: change to MAX_CHART_NAME_LENGTH
 +      public static final int MAX_STRING_LENGTH = 12;
        
  }
@@@ -38,6 -38,6 +38,7 @@@ public class FilePageLabels extends NL
        public static String FILE_API_LIST_VIEW_ELAPSED_TIME;
        public static String FILE_API_LIST_VIEW_END_TIME;
        public static String FILE_API_LIST_VIEW_PID;
++      public static String FILE_API_LIST_VIEW_FD;
        public static String FILE_API_LIST_VIEW_API;
        public static String FILE_API_LIST_VIEW_PARAMETER;
        public static String FILE_API_LIST_VIEW_THREAD_ID;
@@@ -76,6 -74,6 +75,8 @@@
        public static String FILE_STATUS_DB;
        public static String FILE_ACCESS_DB;
        
++      public static String FILE_CHART_LOCK;
++      
        public static String TIME_MS;
        
        
@@@ -4,6 -4,6 +4,7 @@@ FILE_API_LIST_VIEW_START_TIME=Start Tim
  FILE_API_LIST_VIEW_ELAPSED_TIME=Elapsed Time
  FILE_API_LIST_VIEW_END_TIME=End Time
  FILE_API_LIST_VIEW_PID=PID
++FILE_API_LIST_VIEW_FD=FD
  FILE_API_LIST_VIEW_API=API Name
  FILE_API_LIST_VIEW_PARAMETER=Parameter
  FILE_API_LIST_VIEW_THREAD_ID=TID
@@@ -27,9 -26,8 +27,10 @@@ FILE_DETAILS_FILE_NAME_NEWLINE=File nam
   
  FILE_CHART_SERIES=STATE
  FILE_CHART_API=API List
- FILE_CHART_LOCK=LOCK
  FILE_CHART_ACCESS=ACCESS
  
++FILE_CHART_LOCK=LOCK
++
  FILE_CHART_TOOLTIP_CLOSED=CLOSED
  FILE_CHART_TOOLTIP_OPEND=OPENED
  FILE_CHART_TOOLTIP_USED=USED
@@@ -42,6 -42,6 +42,7 @@@ public class DataChannelConstants 
        public final static int MSG_PROCESS_MAP = 0x0012;
        public final static int MSG_PROCESS_UNMAP = 0x0013;
        public final static int MSG_PROCESS_COMM = 0x0014;
++      public final static int MSG_CUSTOME_FUCNTION = 0x0015;
        
        public static final int LOG_USER_FUNCTION = 0x002C;  //44
        public static final int LOG_CONTEXT_SWITCH = 0x002D;  //45 
@@@ -114,27 -118,13 +114,28 @@@ public class FileChart 
                                        event.getTid() != this.tid) {
                                continue;
                        }
 -                      double time = event.getEventTime() / TimelineConstants.MEGA_DOUBLE;
 -                      String apiName = event.getApiName();
 -                      Color color = ColorResources.FILE_OTHER_OPERATION;
 -                      if (event.getErrNo() != 0) {
 +                      double time = event.getTime() / TimelineConstants.MEGA_DOUBLE;
 +                      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;
++                      Color color = null;
 +                      if (event.getErrno() != 0) {
                                color = ColorResources.FILE_API_FAILED;
                        } else {
 -                              int id = event.getApiType(); 
                                if( id == LogCenterConstants.FD_API_TYPE_READ_START
                                                || id ==  LogCenterConstants.FD_API_TYPE_READ_END
                                                || id == LogCenterConstants.FD_API_TYPE_WRITE_START
                                                || id == LogCenterConstants.FD_API_TYPE_LOCK_END) {
                                        continue;
                                }
++                              color = ColorResources.FILE_OTHER_OPERATION;
                        }
                        DAChartSeriesItem seriesItem  = new DAChartSeriesItem(time,
                                        DAChartSeriesItem.SERIES_AREA_BAR, color, color, apiName);
@@@ -54,10 -53,10 +54,11 @@@ import org.tizen.dynamicanalyzer.ui.fil
  import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
  import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
  import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
 -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
++import org.tizen.dynamicanalyzer.ui.network.data.NetworkDataManager;
 +import org.tizen.dynamicanalyzer.util.DALogger;
 +import org.tizen.dynamicanalyzer.utils.Formatter;
  import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
  import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
 -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker;
  import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
  import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
  import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
@@@ -180,21 -191,20 +181,26 @@@ public class FileChartBoard extends DAC
        private void createChartItem(FileChart parent, FileChart fileChart) {
                DAChartBoardItem item;
                DAChart chart;
 -      
 -              if(parent != null){     // child chart row
 +
 +              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();
 -                      if (chart == null) {
 -                              // TODO: very strange case, ask to ryu what is this case
 +                      item.setData(new FileSelectedData(fileChart.getFilePath(), fileChart.getPid(), 
 +                                      fileChart.getTid(), fileChart.getFd(), false));
++                      // disable non-target rows
++                      if(!fileChart.isTarget()) {
++                              item.setSelectable(false);
++                              //item.setNameCellColor(topColor, bottomColor)
+                       }
 -                      item.setData(new FileSelectedData(fileChart.getDentry(), fileChart
 -                                      .getPid(), fileChart.getTid(), false));
                        initFileChart(chart, false);
                } else { // parent chart row
                        String fileName = fileChart.getFileName();
                }
                return null;
        }
 -      
 -      private String createKey(int pid, int tid) {
 -              StringBuffer key = new StringBuffer(pid);
 -              key.append(":");
 -              key.append(tid);
 -              return key.toString();
 -      }
 -      
 -      // TODO: rename getVisibleSatausList => getVisibleStatusList
 -      private List<FileStatus> getVisibleSatausList() {
 +
 +      private List<FileStatus> getVisibleStatusList() {
                return dataMaker.getFileStatusList();
        }
 -      
 +
        private List<FileAccess> getVisibleAccessList() {
                List<FileAccess> data = new ArrayList<FileAccess>();
 -              for(FileAccess access : dataMaker.getFileAccessList()){
 -                      // TODO: use the utility API
 -                      double startTime = access.getStartTime() / TimelineConstants.MEGA_DOUBLE;
 -                      double endTime = access.getEndTime() / TimelineConstants.MEGA_DOUBLE;
 -                      if ( startTime >= getVisibleStartTime()
 -                                      && startTime <= getVisibleEndTime()) {
 +              List<FileAccess> accessList = dataMaker.getFileAccessList();
 +              for(int i =0; i< accessList.size(); i++) {
 +                      FileAccess access = accessList.get(i);
 +                      double startTime = Formatter.toLongTimeForDoubleTime(access
 +                                      .getStartTime());
 +                      double endTime = Formatter.toLongTimeForDoubleTime(access
 +                                      .getEndTime());
-                       if (startTime >= getVisibleStartTime()
-                                       && startTime <= getVisibleEndTime()) {
++                      double visibleStartTime =  getVisibleStartTime();
++                      double visibleEndTime = getVisibleEndTime();
++                      
++                      if(startTime >= visibleStartTime && startTime <= visibleEndTime) {
+                               data.add(access);
 -                      } else if (endTime >= getVisibleStartTime()
 -                                      && endTime <= getVisibleEndTime()) {
++                      }else if(endTime >= visibleStartTime && endTime >= visibleEndTime) {
                                data.add(access);
-                       } else if (endTime >= getVisibleStartTime()
-                                       && endTime <= getVisibleEndTime()) {
 -                      } else if (endTime <= 0) { // not finished
++                      }else if(startTime <= visibleStartTime && endTime <= visibleEndTime) {
 +                              data.add(access);
-                       } else if (endTime <= 0) { // not finished
++                      }else if(endTime <= 0) { // not finished
                                data.add(access);
                        }
                }
@@@ -108,24 -107,14 +108,14 @@@ public class FileChartView extends DAVi
                initIntervalMarkers(fileChartBoard);
  
                stackLayout.topControl = fileChartBoard;
 -
 +              
-               // draw title what page on the top of the file chart board
-               Composite textBoxLabel = new Composite(fileChartBoard.getTitleComp(),
-                               SWT.NONE);
-               textBoxLabel.addPaintListener(new PaintListener() {
-                       @Override
-                       public void paintControl(PaintEvent e) {
-                               Composite composite = (Composite) e.widget;
-                               Rectangle rect = composite.getClientArea();
-                               e.gc.drawImage(ImageResources.TIMELINE_DROPDOWN_NORMAL, rect.x,
-                                               rect.y);
-                               e.gc.setFont(FontResources.COMBO);
-                               e.gc.setForeground(ColorResources.BLACK);
-                               e.gc.drawString(FilePageLabels.FILE_CHART_FILE, rect.x + 30,
-                                               rect.y + 2, true);
-                       }
-               });
+               // Making title composition using resource of timeline pages.
+               fileChartBoard.makeDefaultTitleComposite(FilePageLabels.FILE_CHART_FILE, 
+                               FontResources.ADDITEM_BUTTON_FONT,
+                               ColorResources.ADD_CHART_FONT_COLOR,
+                               ColorResources.ADD_CHART_NORMAL_START,
+                               ColorResources.ADD_CHART_NORMAL_END,
+                               ColorResources.ADD_CHART_NORMAL_STROKE);
  
                DATimeline timeline = fileChartBoard.getTimeline();
  
index 2aa0ca3,0000000..baa76e0
mode 100644,000000..100644
--- /dev/null
@@@ -1,594 -1,0 +1,624 @@@
- import org.tizen.dynamicanalyzer.ui.timeline.chart.FileChart;
 +package org.tizen.dynamicanalyzer.ui.file.manager;
 +
 +/*
 + *  Dynamic Analyzer
 + *
 + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
 + *
 + * Contact: 
 + * Hyeran Lim <hyeran74.kim@samsung.com>
 + * Juyoung Kim <j0.kim@samsung.com>
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + * 
 + * Contributors:
 + * - S-Core Co., Ltd
 + * 
 + */
 +
 +
 +import java.util.ArrayList;
 +
 +import java.util.HashMap;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Queue;
 +import java.util.concurrent.ConcurrentLinkedQueue;
 +
 +import org.eclipse.swt.SWT;
 +import org.eclipse.swt.widgets.Display;
 +import org.eclipse.swt.widgets.Shell;
 +import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 +import org.tizen.dynamicanalyzer.common.DALimit;
 +import org.tizen.dynamicanalyzer.common.path.PathManager;
 +import org.tizen.dynamicanalyzer.constant.CommonConstants;
 +import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
 +import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
 +import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 +import org.tizen.dynamicanalyzer.resources.ImageResources;
 +import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants;
 +import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
 +import org.tizen.dynamicanalyzer.swap.logparser.Logs;
 +import org.tizen.dynamicanalyzer.swap.model.data.FileData;
 +import org.tizen.dynamicanalyzer.swap.model.data.LogData;
 +import org.tizen.dynamicanalyzer.swap.model.data.ProfileData;
 +import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
 +import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 +import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
++import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
 +import org.tizen.dynamicanalyzer.ui.summary.failed.FailedChecker;
 +import org.tizen.dynamicanalyzer.ui.summary.failed.FailedData;
 +import org.tizen.dynamicanalyzer.ui.summary.leaks.LeakDetector;
 +import org.tizen.dynamicanalyzer.ui.summary.warning.WarningChecker;
-       private int timeLineFileChartFDCount = 0;
 +import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
 +import org.tizen.dynamicanalyzer.ui.toolbar.configuration.ConfigurationDialogDataManager;
 +import org.tizen.dynamicanalyzer.util.DALogger;
 +import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
 +import org.tizen.dynamicanalyzer.widgets.da.base.DADialog;
 +
 +public class FileDataMaker {
 +      private static final DALogger DA_LOG = DALogger.getInstance();
 +      
 +      private FailedChecker failedChecker = null;
-       List<String> accessedFilePathList = new ArrayList<String>();
 +
 +      // from LogPackage to... 
 +      private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
 +      private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
 +      List<FileEvent> fileEventList = new ArrayList<FileEvent>();
 +
 +
 +      // to find file path, (key(PID, TID, FD), value (file_path))
 +      private Map<String, String> fileAccessorMap = new HashMap<String, String>();
 +      
 +      // temporary, file log list for 1second
 +      private Queue<List<FileEvent>> fileLogsQueue = new ConcurrentLinkedQueue<List<FileEvent>>();
 +      
 +      // (key(file path), value (read_count or write_count))
 +      private Map<String, Integer> concurrentReadNumMap = new HashMap<String, Integer>();
 +      private Map<String, Integer> concurrentWriteNumMap = new HashMap<String, Integer>();
 +      
++      // for filtering out non-target file from syscall messages
++      List<String> accessedFilePathList = new ArrayList<String>();
++      
 +      // temporary, to check if open event has been sent before the event has been sent
 +      private Map<String, FileEvent> sysCallMap = new HashMap<String, FileEvent>();
++      private List<Long> sysLockedFd = new ArrayList<Long>();
++      // for searching entry message from exit message
++      Map<Integer, FileEvent> entryMap =  new HashMap<Integer, FileEvent>();
 +      
++      // temp
++      private List<Long> sentOpenEventList = new ArrayList<Long>();
++      
++      public FileDataMaker() {}
 +      
 +      public FileDataMaker(FailedChecker failedChecker,
 +                      LeakDetector leakDetector, WarningChecker warningChecker) {
 +              this.failedChecker = failedChecker;
 +      }
-               timeLineFileChartFDCount = 0;
++      
 +      public void clear(){
 +              fileStatusList.clear();
 +              fileAccessList.clear();
 +              fileAccessorMap.clear();
 +              concurrentReadNumMap.clear();
 +              concurrentWriteNumMap.clear();
 +              sysCallMap.clear();
 +              accessedFilePathList.clear();
-                               // TODO: DISCUSSION: check the internal call rule.
++              entryMap.clear();
 +      }
 +
 +      public void makeData(LogPackage pack) {
 +              if (!AnalyzerManager.isRunning()) {
 +                      return;
 +              }
 +              /*
 +               * TODO: considering the start of trace when the process is running 
 +               * for not-open event
 +               *      1) make fake open event: time: start trace time (0sec) => FileDataMaker...., add field: isFake 
 +               */
 +              
 +              List<FileEvent>  fileEventList = new ArrayList<FileEvent>();
 +              
 +              // 1. In case of target process that the user is interested to analyze
 +              ArrayList<List<Object>> fileApiList = new ArrayList<List<Object>>();
 +              Logs probeLogs = pack.getLogs(DataChannelConstants.MSG_PROBE_FILE);
 +              
 +              if(null != probeLogs && probeLogs.getRawLogs().size() != 0) {
 +                      List<LogData> inputs = probeLogs.getLogs();
 +                      FileEvent event = null;
 +                      
 +                      for (int i = 0; i < inputs.size(); i++) {
 +                              FileData input = (FileData) inputs.get(i);
 +                              
 +                              // filtering out internal call
-                                       FailedData ffd = new FailedData(input);
-                                       this.failedChecker.getFailedList().add(ffd);
++                              // some internal calls are sent when the open or close event to check leak
 +                              if (ConfigurationDialogDataManager.getInstance()
 +                                              .getfeatureValue(
 +                                                              ConfigureLabels.INCLUDE_INSIDE_CALL_FILE) == 0) {
 +                                      if (input.isInternal()) {
 +                                              continue;
 +                                      }
 +                              }
 +                              // filtering out print log and main func log
 +                              // TODO: DISCUSSION: checkInvalidApiName: make the SWAP not send
 +                              // TODO: DISCUSSION: isOpenMainLog: why osp main?
 +                              if (checkInvalidApiName(input) || isOpenMainLog(input)) {
 +                                      continue;
 +                              }
 +                              
 +                              // make failed API list
 +                              if (input.getErrno() != 0) {
-                               event = new FileEvent(input.getSeq(), input.getFilePath(),
-                                               input.getPid(), input.getTid(), input.getFdValue(),
-                                               input.getFdApiType(), input.getApiName(),
-                                               input.getTime(), input.getFileSize(), input.getSize(),
-                                               input.getArgs(), input.getReturn(), input.getErrno(),
-                                               true);
-                               addFileEvent(fileEventList, event);
++                                      SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
 +                              }
 +                              
++                              long fd = input.getFdValue();
 +                              if(input.getFdApiType() == LogCenterConstants.FD_API_TYPE_OPEN){
 +                                      accessedFilePathList.add(input.getFilePath());
++                                      // TODO temp code 
++                                      sentOpenEventList.add(fd);
 +                              }
 +                              
-               Logs syscallLogs = pack.getLogs(DataChannelConstants.CUSTOM_MSG_FUCNTION);
++                              DA_LOG.debug(">>probe pid:" + input.getPid()
++                                              + ", tid:" + input.getTid() + ", fd:" + input.getFdValue() 
++                                              + ", type:" + input.getFdApiType() 
++                                              +  ", filePath:" + input.getFilePath() + ", err:" + input.getErrno() );
++                              
++                              if(sentOpenEventList.contains(fd)) {
++                                      event = new FileEvent(input.getSeq(), input.getFilePath(),
++                                                      input.getPid(), input.getTid(), input.getFdValue(),
++                                                      input.getFdApiType(), input.getApiName(),
++                                                      input.getTime(), input.getFileSize(), input.getSize(),
++                                                      input.getArgs(), input.getReturn(), input.getErrno(),
++                                                      true);
++                                      addFileEvent(fileEventList, event);
++                              }
++                              
++                              // TODO temp code       
++                              if (input.getFdApiType() == LogCenterConstants.FD_API_TYPE_CLOSE) {
++                                      sentOpenEventList.remove(fd);
++                              }
 +                      }
 +              }
 +
 +              // 2. In case of non-target process that the user is not interested but access the target files
-                       // for searching entry message from exit message
-                       Map<Integer, FileEvent> entryMap =  new HashMap<Integer, FileEvent>();
++              Logs syscallLogs = pack.getLogs(DataChannelConstants.MSG_CUSTOME_FUCNTION);
 +              if (syscallLogs != null) {
 +                      ProfileData profileData = null;
 +                      FileEvent event = null;
 +                      String filePath = null;
 +                      long fd = 0;
 +                      
 +                      List<LogData> inputs = syscallLogs.getLogs();
 +                      for (int i = 0; i < inputs.size(); i++) {
 +                              LogData input = (LogData) inputs.get(i);
 +                              profileData = (ProfileData) input;
 +                              int seq = profileData.getSeq();
 +                              int pid = profileData.getPid();
 +                              int tid = profileData.getTid();
 +                              long time = profileData.getTime();
 +                              int eventType = profileData.getProbeSubType();
-                                                       if(fd == -1) {
-                                                               event.setErrNo(-1);
++                              
 +                              switch (profileData.getId()) {
 +                              case DataChannelConstants.MSG_FUNCTION_ENTRY:
 +                                      // get file path and FD from args : string of "file_path,fd"
 +                                      String args = profileData.getArgs();
 +                                      String[] splitPath = args.split(",\\s+");
 +                                      filePath = splitPath[0];
 +                                      fd = Long.parseLong(splitPath[1]);
 +                                      FileEvent openEvent = null;
++                                      
 +                                      // filtering out non-target files that user in not interested
 +                                      if(accessedFilePathList.contains(filePath)) {
 +                                              // target file
 +                                              DA_LOG.debug(">> syscall:seq:" + seq + ", pid:" + pid
 +                                                              + ", tid:" + tid + ", type:" + eventType +  ", args:" + args);
 +                                              
 +                                              event = new FileEvent(seq, pid, tid, fd, filePath, eventType, time, 0,  false);
++                                              if(fd == -1) {
++                                                      event.setErrNo(-1);
++                                              }
 +                                              switch(eventType) {
 +                                              case LogCenterConstants.FD_API_TYPE_OPEN:
 +                                                      sysCallMap.put(filePath, event);
++                                                      addFileEvent(fileEventList, event);
++                                                      break;
 +                                              case LogCenterConstants.FD_API_TYPE_CLOSE:
++                                                      openEvent = sysCallMap.get(filePath);
++                                                      if(openEvent != null) {
++                                                              if(sysLockedFd.contains(fd)) {
++                                                                      sysLockedFd.remove(fd);
++                                                              }
++                                                              addFileEvent(fileEventList, event);
++                                                      }
++                                                      break;
 +                                              case LogCenterConstants.FD_API_TYPE_LOCK_START:
 +                                                      openEvent = sysCallMap.get(filePath);
 +                                                      if(openEvent == null) {
 +                                                              // make fake open event
 +                                                              openEvent = new FileEvent(0, pid,
 +                                                                              tid, fd, filePath,
 +                                                                              LogCenterConstants.FD_API_TYPE_OPEN,
 +                                                                              time, 0, false);
++                                                              addFileEvent(fileEventList, openEvent);
 +                                                      }
++                                                      sysLockedFd.add(fd);
++                                                      addFileEvent(fileEventList, event);
++                                                      break;
 +                                              case LogCenterConstants.FD_API_TYPE_LOCK_END:
-                                                       }
-                                                       if(Long.parseLong(profileData.getReturn()) == -1) {
-                                                               event.setErrNo(-1);
++                                                      if(sysLockedFd.contains(fd)) {
++                                                              addFileEvent(fileEventList, event);
 +                                                      }
 +                                                      break;
 +                                              case  LogCenterConstants.FD_API_TYPE_READ_START:
 +                                              case  LogCenterConstants.FD_API_TYPE_WRITE_START:
 +                                                      openEvent = sysCallMap.get(filePath);
 +                                                      if(openEvent == null) {
 +                                                              // make fake open event
 +                                                              openEvent = new FileEvent(0, pid,
 +                                                                              tid, fd, filePath,
 +                                                                              LogCenterConstants.FD_API_TYPE_OPEN,
 +                                                                              time, 0, false);
-                                               addFileEvent(fileEventList, event);
++                                                              addFileEvent(fileEventList, openEvent);
 +                                                      }
 +                                                      entryMap.put(seq, event);
++                                                      addFileEvent(fileEventList, event);
++                                                      break;
++                                              default:
 +                                                      break;
 +                                              }
-                                       
 +                                      }// else, non-target file
-                                       //TODO int entrySeq = 0 getEntrySeq() after merging from jung pro
-                                       int entrySeq = 0;
 +                                      break;
 +                              case DataChannelConstants.MSG_FUNCTION_EXIT:
 +                                      // for creating read/write end event with MSG_FUNCTION_EXIT
-                                               event = entryMap.get(entryMap);
-                                               switch(event.getFdApiType()) {
++                                      if(Long.parseLong(profileData.getReturn()) == -1) {
++                                              event.setErrNo(-1);
++                                      }
++                                      int entrySeq = profileData.getEntrySeq();
 +                                      if(entryMap.containsKey(entrySeq)) {
-                                               addFileEvent(fileEventList, event);
++                                              DA_LOG.debug(">> syscall end :seq:" + seq + ", pid:" + pid
++                                                              + ", tid:" + tid + ", type:" + eventType);
++                                              event = entryMap.get(entrySeq);
++                                              switch(eventType) {
 +                                              case LogCenterConstants.FD_API_TYPE_READ_START:
 +                                                      event.setFdApiType(LogCenterConstants.FD_API_TYPE_READ_END);
++                                                      addFileEvent(fileEventList, event);
 +                                                      break;
 +                                              case LogCenterConstants.FD_API_TYPE_WRITE_START:
 +                                                      event.setFdApiType(LogCenterConstants.FD_API_TYPE_WRITE_END);
++                                                      addFileEvent(fileEventList, event);
++                                                      break;
++                                              default:
++                                                      break;
 +                                              }
-               DA_LOG.debug(">> addFileEvent pid:" + pid
-                               + ", tid:" + tid + ", type:" + apiType +  ", filePath:" + filePath + ", err:" + errNo );
-               
 +                                      }// else, dump read/write end event
++                                      break;
 +                              }
 +                      }
 +              }
 +
 +              // insert to DB: file API Table
 +              if(fileEventList.size() > 0) {
 +                      for(FileEvent data : fileEventList) {
 +                              fileApiList.add(data.getDBData());
 +                      }
 +                      fileLogsQueue.add(fileEventList);
 +                      FileDataManager.getInstance().getApiDB().insert((List<List<Object>>)fileApiList);
 +              }
 +      }
 +      
 +      /**
 +       * Add FileEvent list into eventList
 +       * @param list: target probe list for all file event
 +       * @param event: original file event 
 +       * set event to list
 +       */
 +      public void addFileEvent(List<FileEvent> fileEventList, FileEvent event) {
 +              
 +              // check heap memory
 +              checkFileAnalysisLimit();
 +              
 +              int pid = event.getPid();
 +              int tid = event.getTid();
 +              long fd = event.getFdValue();
 +              String filePath = event.getFilePath();
 +              int apiType = event.getFdApiType();
 +              long eventTime = event.getTime();
 +              boolean isTarget = event.isTarget();
 +              
 +              long size = event.getSize();
 +              long errNo = event.getErrno();
 +              String key = null;
 +              
 +              if(isTarget) {
 +                      key = createKey(pid, tid, fd);
 +                      if(fd == -1) {
 +                              // set the unknown file if the file open or close has been failed
 +                              event.setFilePath(FilePageLabels.FILE_CHART_UNKNOWN_FILE);
 +                      } else if(filePath == null || filePath.equals("")) {
 +                              // set the file path to all normal file event that open and close was succeed
 +                              filePath = getFilePath(key);
 +                              event.setFilePath(filePath);
 +                      }
 +              }
 +              
-                       if(isTarget) {
-                               // update FD count on timeLine chart
-                               if(errNo == 0) {
-                                       timeLineFileChartFDCount++;
-                                       FileChart.getInstance().setFDCount(1, eventTime);
 +              switch (apiType) {
 +              case LogCenterConstants.FD_API_TYPE_OPEN:
-                               }
++                      if(isTarget && errNo == 0) {
 +                                      addFileAccessor(key, filePath);
-                       if(isTarget) {
-                               if(errNo == 0) {
-                                       // update FD count on timeLine chart
-                                       if(timeLineFileChartFDCount > 0) {
-                                               timeLineFileChartFDCount--;
-                                               FileChart.getInstance().setFDCount(-1, eventTime);
-                                       }// the case of timeLineFileChartFDCount<0 is not exist, 
-                                        // if timeLineFileChartFDCount==0, no need to update
 +                      }
 +                      addStatusData(new FileStatus(pid, tid, fd, filePath, 
 +                                      apiType, eventTime, errNo));
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_CLOSE:
-                               }
++                      if(isTarget && errNo == 0) {
 +                                      removeFileAccessor(key);
-                                       size, LogCenterConstants.FD_API_TYPE_READ_START);
 +                      }
 +                      addStatusData(new FileStatus(pid, tid, fd, filePath,
 +                                              apiType, eventTime, errNo));
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_READ_START:
 +                      FileAccess readAccess = new FileAccess(filePath, pid,
 +                                      tid, fd, apiType, eventTime);
 +                      if(checkConcurrentRead(filePath)) {
 +                              readAccess.setAlreadyReading(true);
 +                      }
 +                      addStartAccessData(readAccess);
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_READ_END:
 +                      addEndAccessData(pid, tid, fd, filePath, eventTime,
-                                       size, LogCenterConstants.FD_API_TYPE_WRITE_START);
++                                      size, LogCenterConstants.FD_API_TYPE_READ_START, errNo);
 +                      removeConcurrentNum(filePath, true);
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_WRITE_START:
 +                      FileAccess writeAccess = new FileAccess(filePath, pid,
 +                                      tid, fd, apiType, eventTime);
 +                      if(checkConcurrentWrite(filePath)) {
 +                              writeAccess.setAlreadyWriting(true);
 +                      }
 +                      addStartAccessData(writeAccess);
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_WRITE_END:
 +                      addEndAccessData(pid, tid, fd,  filePath, eventTime,
-                                       size, LogCenterConstants.FD_API_TYPE_LOCK_START);
++                                      size, LogCenterConstants.FD_API_TYPE_WRITE_START, errNo);
 +                      removeConcurrentNum(filePath, false);
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_LOCK_START:
 +                      addStartAccessData(new FileAccess(filePath, pid, tid, fd, 
 +                                      apiType, eventTime));
 +                      break;
 +              case LogCenterConstants.FD_API_TYPE_LOCK_END:
 +                      addEndAccessData(pid, tid, fd, filePath, eventTime,
-                       long endTime, long fileSize, int apiType) {
++                                      size, LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
 +                      break;
 +              default:
 +                              break;
 +              }
 +              fileEventList.add(event);
 +      }
 +      
 +      public void addStatusData(FileStatus data) {
 +              fileStatusList.add(data);
 +              FileDataManager.getInstance().getStatusDB().insert(data);
 +      }
 +      
 +      public void addStartAccessData(FileAccess data) {
 +              fileAccessList.add(data);
 +      }
 +
 +      // in case of file read/write/lock probe/system call
 +      // TODO: refactoring search way
 +      public void addEndAccessData(int pid, int tid, long fd, String filePath, 
-                       DA_LOG.info("==> concurrent read num:" + num);
++                      long endTime, long fileSize, int apiType, long errNo) {
 +              for (int i = 0; i < fileAccessList.size(); i++) {
 +                      FileAccess data = fileAccessList.get(i);
 +                      if (data.getPid() == pid
 +                                      && data.getTid() == tid 
 +                                      && data.getFd() == fd
 +                                      && data.getApiType() == apiType
 +                                      && data.getEndTime() <= 0){
 +                              data.setEndTime(endTime);
 +                              data.setFileSize(fileSize);
++                              data.setErroNo(errNo);
 +                              FileDataManager.getInstance().getAccessDB().insert(data);
 +                              break;
 +                      }
 +              }
 +              // when failed search start time, dump endEvent.
 +      }
 +
 +      public List<FileEvent> getFileEventList() {
 +              return fileLogsQueue.poll();
 +      }
 +      
 +      public List<FileAccess> getFileAccessList() {
 +              return fileAccessList;
 +      }
 +      
 +      public List<FileStatus> getFileStatusList() {
 +              return fileStatusList;
 +      }
 +      
 +      private String createKey(int pid, int tid, long fd) {
 +              StringBuffer key = new StringBuffer();
 +              key.append(pid);
 +              key.append(":");
 +              key.append(tid);
 +              if(fd != -1) {
 +                      key.append(":");
 +                      key.append(fd);
 +              }
 +              return key.toString();
 +      }
 +      
 +      // for the open log: probe only
 +      private void addFileAccessor(String key, String filePath) {
 +              if(!fileAccessorMap.containsKey(key)) {
 +                      fileAccessorMap.put(key, filePath);
 +              } else {
 +                      DA_LOG.error(" addFileAccessor:" + key + "is aleady exist" );
 +              }
 +      }
 +      
 +      // for the close log: probe only
 +      private void removeFileAccessor(String key) {
 +              if(fileAccessorMap.containsKey(key)) {
 +                      fileAccessorMap.remove(key);
 +              }else {
 +                      DA_LOG.error(" removeFileAccessor:" + key + "is not exist" );
 +              }
 +      }
 +      
 +      private String getFilePath(String key) {
 +              String filePath = null;
 +              if(fileAccessorMap.containsKey(key)) {
 +                      filePath = fileAccessorMap.get(key);
 +              }else{
 +                      DA_LOG.error("The key is not exist : " + key);
 +              }
 +              return filePath;
 +      }
 +      
 +      /**
 +       * Check if it is concurrent reading
 +       * @param concurrentKey
 +       * @return
 +       */
 +      private boolean checkConcurrentRead(String concurrentKey) {
 +              int num = 0;
 +              if(concurrentReadNumMap.containsKey(concurrentKey)) {
 +                      num = concurrentReadNumMap.get(concurrentKey);
-                       if (AnalyzerManager.getProject().getPkgId().equals(strApiFilePath)) {
 +              }
 +              concurrentReadNumMap.put(concurrentKey, num+1);
 +              if(num > 0) {
 +                      return true;
 +              }else {
 +                      return false;
 +              }
 +              
 +      }
 +      
 +      /**
 +       * Check if it is concurrent writing
 +       * @param concurrentKey
 +       * @return
 +       */
 +      private boolean checkConcurrentWrite(String concurrentKey) {
 +              int num = 0;
 +              if(concurrentWriteNumMap.containsKey(concurrentKey)) {
 +                      num = concurrentWriteNumMap.get(concurrentKey);
 +              }
 +              concurrentWriteNumMap.put(concurrentKey, num+1);
 +              if(num > 0) {
 +                      return true;
 +              }else {
 +                      return false;
 +              }
 +      }
 +      
 +      /**
 +       * Remove concurrent read or write number
 +       * @param concurrentKey
 +       * @param isRead
 +       */
 +      private void removeConcurrentNum(String concurrentKey, boolean isRead) {
 +              if(isRead) { // concurrent read
 +                      if(concurrentReadNumMap.containsKey(concurrentKey)) {
 +                              int num = concurrentReadNumMap.get(concurrentKey);
 +                              if(num != 0){
 +                                      concurrentReadNumMap.put(concurrentKey, num-1);
 +                              } //else, no need to update concurrent read num
 +                      }else{
 +                              DA_LOG.error("Couldn't get concurrent read num!, key :" + concurrentKey);
 +                      }
 +              }else{ // concurrent write
 +                      if(concurrentWriteNumMap.containsKey(concurrentKey)) {
 +                              int num = concurrentWriteNumMap.get(concurrentKey);
 +                              if(num != 0){
 +                                      concurrentWriteNumMap.put(concurrentKey, num-1);
 +                              } //else, no need to update concurrent write num
 +                      }else{
 +                              DA_LOG.error("Couldn't get current concurrent write num!, key :" + concurrentKey);
 +                      }
 +              }
 +      }
 +      private void checkFileAnalysisLimit() {
 +              if ( (fileAccessList.size() > DALimit.MAX_FILE_ACCESS_COUNT
 +                              || fileStatusList.size() > DALimit.MAX_FILE_STATUS_COUNT)) { 
 +                      ToolbarArea.getInstance().stopTrace();
 +                      Display.getDefault().asyncExec(new Runnable() {
 +                              @Override
 +                              // display a dialog to alert heap memory warning
 +                              public void run() {
 +                                      final Shell shell = WorkbenchUtil.getWorkbenchWindow()
 +                                                      .getShell();
 +                                      DADialog dialog = new DADialog(shell, SWT.NONE, 550, 153);
 +                                      dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
 +                                      dialog.setMessage(AnalyzerLabels.HEAP_MEMORY_WARNING_PRE
 +                                                      + PathManager.DA_INSTALL_PATH
 +                                                      + AnalyzerLabels.HEAP_MEMORY_WARNING_POST);
 +                                      dialog.open();
 +                              }
 +                      });
 +              }
 +      }
 +
 +      
 +      /**
 +       * filtering out STDIN/STDOUT ops
 +       * @param input
 +       * @return
 +       */
 +      private boolean checkInvalidApiName(FileData input) {
 +              String apiName = input.getApiName();
 +              if (apiName.contains("print")
 +                              || apiName.contains("printf")
 +                              || apiName.contains("fdopen") // in case of OSP
 +                              || apiName.contains("putchar")
 +                              || apiName.contains("getchar")
 +                              || apiName.contains("putchar")
 +                              || apiName.contains("scanf")
 +                              || apiName.contains("gets")
 +                              || apiName.contains("puts")) {
 +                      return true;
 +              } 
 +              return false;
 +      }
 +      
 +      /**
 +       * filtering out "main" function call when it's OSP api
 +       * @param input
 +       * @return
 +       */
 +      private boolean isOpenMainLog(FileData input) {
 +              String filePath = input.getFilePath();
 +              if (filePath.contains(CommonConstants.SLASH)) {
 +                      String[] splitApiFilePath = filePath.split(CommonConstants.SLASH);
 +                      String strApiFilePath = new String(
 +                                      splitApiFilePath[splitApiFilePath.length - 1].trim());
++                      if (AnalyzerManager.getProject().getPackageID().equals(strApiFilePath)) {
 +                              return true;
 +                      }
 +              }
 +              return false;
 +      }
 +      
 +      public void setFileAccessList(List<FileAccess> fileAccessList) {
 +              this.fileAccessList = fileAccessList;
 +      }
 +      
 +      public void setFileStatusList(List<FileStatus> fileStatusList) {
 +              this.fileStatusList = fileStatusList;
 +      }
 +
 +}
@@@ -28,11 -28,12 +28,13 @@@ package org.tizen.dynamicanalyzer.ui.fi
  
  import java.util.ArrayList;
  import java.util.List;
 +import java.util.Map;
  
 +import org.tizen.dynamicanalyzer.common.AnalyzerManager;
+ import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants;
  import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
+ import org.tizen.dynamicanalyzer.swap.logparser.Logs;
  import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
 -import org.tizen.dynamicanalyzer.swap.model.data.LogData;
  import org.tizen.dynamicanalyzer.ui.file.data.FileAccessDB;
  import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
  import org.tizen.dynamicanalyzer.ui.file.data.FileStatusDB;
@@@ -48,13 -48,12 +50,10 @@@ public class FileDataManager extends Pa
        private FileApiDB apiDB = null;
        private FileStatusDB statusDB = null;
        
 -      // TODO: comment or rename eventList
 -      private List<FileEvent> eventList = new ArrayList<FileEvent>();
        private List<FileEvent> selectedTableAPIList = new ArrayList<FileEvent>();
 -      
 -      private FileChartManager() {
 -              dataMaker = new FileChartDataMaker();
 +
 +      private FileDataManager() {
-               dataMaker = new FileDataMaker(
-                               AnalyzerManager.getFailedChecker(),
-                               AnalyzerManager.getLeakDetector(),
-                               AnalyzerManager.getWarningChecker());
++              dataMaker = new FileDataMaker();
  
                initDB();
        }
@@@ -469,9 -467,4 +469,10 @@@ public class Formatter 
                }
                return value;
        }
-       // translate long time to double time
 +      
 +      public static double toLongTimeForDoubleTime(long time) {
 +              return time / TimelineConstants.MEGA_DOUBLE;
 +      }
++      
++      
  }