Revert "Merge branch 'tizen' into mw and update package version" 22/29722/1
authorjuyoung kim <j0.kim@samsung.com>
Mon, 3 Nov 2014 09:08:59 +0000 (01:08 -0800)
committerjuyoung kim <j0.kim@samsung.com>
Mon, 3 Nov 2014 09:08:59 +0000 (01:08 -0800)
This reverts commit f14930a50fc589b801415d5c0957ea2f813994e2.

Change-Id: I6443c27f0df1d1ebb1852fdffa65ac54e1fee298

124 files changed:
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java
org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeWhite.java
org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/constant/CommonConstants.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItem.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItemCell.java
org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product
org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathConstants.java
org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerShellCommands.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ErrorCode.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/SwapErrorCode.java with 73% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/HostResult.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ApplistManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogCenterConstants.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/nl/ThreadPageLabels.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/control/FunctionInst.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/AckMessage.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorer.java with 98% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerRenderer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerRenderer.java with 97% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerToggleRenderer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerToggleRenderer.java with 98% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorer.java with 67% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerDialog.java with 92% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/ExplorerUtil.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/ExplorerUtil.java with 96% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorer.java with 98% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerEmptyCellRenderer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerEmptyCellRenderer.java with 96% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerTableRenderer.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerTableRenderer.java with 97% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileExplorerDialog.java with 97% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorerDialog.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileTreeExplorerDialog.java with 96% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerTableRenderer.java [deleted file]
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/FileChartRenderer.java [deleted file]
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/data/FileAccessDB.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessorDB.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileApiDB.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileStatusDB.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/ui/file/model/FileAccess.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccessor.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileEvent.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileSelectedData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileStatus.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/SummaryDataManager.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/summary/profiling/ProfilingChildDataDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartManager.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartView.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartView.java with 50% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadDetailInfoView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageDataEvent.java with 90% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChart.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChartBoard.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChart.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartBoard.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIDBTable.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncAPIDBTable.java with 58% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIInserter.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataDBTable.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataInserter.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventDBTable.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventInserter.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadAPIDBTable.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadAPIDBTable.java with 56% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataDBTable.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadDataDBTable.java with 54% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataManager.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventDBTable.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadEventDBTable.java with 53% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventInserter.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadLoadDataMaker.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadSyncDataMaker.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadThreadDataMaker.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncDataDBTable.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncEventDBTable.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncData.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataEvent.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncDataEvent.java with 80% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataManager.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadData.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataEvent.java [moved from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadDataEvent.java with 81% similarity]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataManager.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageData.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncData.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadData.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ScreenshotChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/UIEventChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialog.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java
package/changelog
package/pkginfo.manifest

index 4029264..6065aa2 100755 (executable)
@@ -329,8 +329,7 @@ public class ColorResources {
        public static Color FILE_ACCESS_WRITE = getColor("file_access_write"); //$NON-NLS-1$\r
        public static Color FILE_ACCESS_CONCURRENT_READ = getColor("file_access_concurrent_read"); //$NON-NLS-1$\r
        public static Color FILE_ACCESS_CONCURRENT_WRITE = getColor("file_access_concurrent_write"); //$NON-NLS-1$\r
-       public static Color FILE_LOCK = getColor("file_lock"); //$NON-NLS-1$\r
-       public static Color FILE_UNLOCK = getColor("file_unlock"); //$NON-NLS-1$file_unlock\r
+       public static Color FILE_LOCK_ACQUIRED = getColor("file_lock_acquired"); //$NON-NLS-1$\r
        public static Color FILE_LOCK_WAITING = getColor("file_lock_waiting"); //$NON-NLS-1$\r
        public static Color FILE_OTHER_OPERATION = getColor("file_other_operation"); //$NON-NLS-1$\r
        public static Color FILE_OPENED = getColor("file_opened"); //$NON-NLS-1$\r
index 3759fb8..c8c24f0 100644 (file)
@@ -339,8 +339,7 @@ public class DAThemeWhite extends DATheme {
                setColor("file_access_write",new RGB(131, 207, 232)); //$NON-NLS-1$
                setColor("file_access_concurrent_read",  new RGB(40, 160, 198)); //$NON-NLS-1$
                setColor("file_access_concurrent_write",  new RGB(40, 160, 198)); //$NON-NLS-1$
-               setColor("file_lock", new RGB(229, 123, 206)); //$NON-NLS-1$
-               setColor("file_unlock", new RGB(125, 61, 204)); //$NON-NLS-1$
+               setColor("file_lock_acquired", new RGB(229, 123, 206)); //$NON-NLS-1$
                setColor("file_lock_waiting", new RGB(194, 79, 167)); //$NON-NLS-1$
                setColor("file_other_operation",  new RGB(173, 173, 173)); //$NON-NLS-1$
                setColor("file_other_operation",  new RGB(173, 173, 173)); //$NON-NLS-1$
index 00cbfc4..00a2ecd 100644 (file)
@@ -32,7 +32,6 @@ public class CommonConstants {
        /* special character */
        public static final String EMPTY = ""; //$NON-NLS-1$
        public static final String SPACE = " "; //$NON-NLS-1$
-       public static final String DOUBLE_SPACE = "  "; //$NON-NLS-1$
        public static final String TAB = "      "; //$NON-NLS-1$
        public static final String SLASH = "/"; //$NON-NLS-1$
        public static final String BSLASH = "\\"; //$NON-NLS-1$
@@ -41,7 +40,6 @@ public class CommonConstants {
        public static final String CMD_SPLIT_DOT = "\\."; //$NON-NLS-1$
        public static final String NEW_LINE_CHAR = "\\n"; //$NON-NLS-1$
        public static final String NEW_LINE = "\n"; //$NON-NLS-1$
-       public static final String DOUBLE_NEW_LINE = "\n\n"; //$NON-NLS-1$
        public static final String DOT = "."; //$NON-NLS-1$
        public static final String COMMA = ","; //$NON-NLS-1$
        public static final String COLON = ":"; //$NON-NLS-1$
index 2a4a327..f4107d9 100644 (file)
@@ -223,7 +223,7 @@ public class DAChartRenderer {
                }
 
                drawAxis(gc);
-
+               
                /*
                 * draw chart information
                 */
@@ -231,7 +231,7 @@ public class DAChartRenderer {
                        gc.setForeground(ColorResources.CHART_INFO);
                        gc.setFont(FontResources.CHART_INFO_FONT);
                        gc.drawImage(ImageResources.CHART_INFO, r.x + 5, (r.y + r.height) / 2 - 4);
-                       gc.drawText(chart.getInformation(), r.x + 18,
+                       gc.drawText(chart.getInformation(), r.x + 18, 
                                        (r.y + r.height / 2 - gc.textExtent(chart.getInformation()).y / 2), true);
                }
        }
@@ -622,13 +622,8 @@ public class DAChartRenderer {
 
                int totalHeight;
                if (plot instanceof DAUIEventChartPlot) {
-                       if (!tooltipTexts.isEmpty()) {
-                               totalHeight = gc.textExtent(tooltipTexts.get(0)).y
-                                               + DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_MARGIN;
-                       } else {
-                               totalHeight = DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT
+                       totalHeight = DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT
                                        + DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_MARGIN;
-                       }
                } else {
                        totalHeight = seriesCountPerColumn * DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT
                                        + DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_BOTTOM_MARGIN
@@ -647,11 +642,9 @@ public class DAChartRenderer {
                } else {
                        startY = (r.y + r.height / 2) - (totalHeight / 2);
                }
-               int rowCount = tooltipSize / seriesCountPerColumn;
-               if ((tooltipSize % seriesCountPerColumn) != 0) {
-                       rowCount++;
-               }
-               int tooltipBoxWidth = (preTextWidthMargin + textWidthMax) * rowCount + DAChartPlotTooltip.TOOLTIP_MARGIN;
+
+               int tooltipBoxWidth = (preTextWidthMargin + textWidthMax)
+                               * (tooltipSize / seriesCountPerColumn) + DAChartPlotTooltip.TOOLTIP_MARGIN;
                gc.setAlpha(150);
                gc.setBackground(tooltip.getBackgroundColor());
                gc.setForeground(tooltip.getForegroundColor());
@@ -1497,17 +1490,8 @@ public class DAChartRenderer {
                Color colorB = series.getSecondColor();
                float aAmount = (float) (1.0 - bAmount);
                float r = colorA.getRed() * aAmount + colorB.getRed() * bAmount;
-               if (r < 0) {
-                       r = 0;
-               }
                float g = colorA.getGreen() * aAmount + colorB.getGreen() * bAmount;
-               if (g < 0) {
-                       g = 0;
-               }
                float b = colorA.getBlue() * aAmount + colorB.getBlue() * bAmount;
-               if (b < 0) {
-                       b = 0;
-               }
                return new Color(Display.getCurrent(), (int) r, (int) g, (int) b);
        }
 
index 09c72b7..d42b279 100644 (file)
@@ -73,23 +73,6 @@ public class DAChartBoardItem extends Composite {
                this.layout();
        }
        
-       private void initWidget(String name, String fullName, Image icon, int chartStyle) {
-               heightRatio = getBoardItemHeightRatio();
-
-               this.setLayout(new FormLayout());
-               itemCell = new DAChartBoardItemCell(this, name, icon, chartStyle);
-               itemCell.setFullName(fullName);
-               itemCell.addExpandToggleButton();
-
-               FormData data = new FormData();
-               data.top = new FormAttachment(0, 0);
-               data.left = new FormAttachment(0, 0);
-               data.right = new FormAttachment(100, 0);
-               data.height = (int) (heightRatio * height);
-               itemCell.setLayoutData(data);
-               this.layout();
-       }
-       
        public DAChartBoardItem(DAChartBoard parent, String itemName) {
                super(parent.getItemList(), SWT.NONE);
                parentBoard = parent;
@@ -97,26 +80,6 @@ public class DAChartBoardItem extends Composite {
                initWidget(itemName, null, DAChart.CHART_STYLE_NORMAL);
                parentBoard.registerItem(this);
        }
-       
-       //to show full title
-       public DAChartBoardItem(DAChartBoard parent, String itemName, String fullName) {
-               super(parent.getItemList(), SWT.NONE);
-               parentBoard = parent;
-               height = parent.getItemHeight();
-               initWidget(itemName, fullName, null, DAChart.CHART_STYLE_NORMAL);
-               parentBoard.registerItem(this);
-       }
-       
-       //to show full title
-       public DAChartBoardItem(DAChartBoardItem parent, String itemName, String fullName) {
-               super(parent.getChildItemList(), SWT.NONE);
-               parentItem = parent;
-               height = parent.getChartBoard().getItemHeight();
-               depth = parent.getDepth() + 1;
-               initWidget(itemName, fullName, null, DAChart.CHART_STYLE_NORMAL);
-               parentItem.registerItem(this);
-       }
-       
        // for sorting of chart items   
        public DAChartBoardItem(DAChartBoard parent, String itemName,
                        Object o, Comparator c) {
@@ -140,7 +103,7 @@ public class DAChartBoardItem extends Composite {
        public DAChartBoardItem(DAChartBoardItem parent, String itemName) {
                super(parent.getChildItemList(), SWT.NONE);
                parentItem = parent;
-               height = parent.getChartBoard().getItemHeight();
+               height = parent.getItemHeight();
                depth = parent.getDepth() + 1;
                initWidget(itemName, null, DAChart.CHART_STYLE_NORMAL);
                parentItem.registerItem(this);
@@ -150,7 +113,7 @@ public class DAChartBoardItem extends Composite {
                        Object o, Comparator c) {
                super(parent.getChildItemList(), SWT.NONE);
                parentItem = parent;
-               height = parent.getChartBoard().getItemHeight();
+               height = parent.getItemHeight();
                depth = parent.getDepth() + 1;
                sortObj = o;
                initWidget(itemName, null, DAChart.CHART_STYLE_NORMAL);
@@ -161,7 +124,7 @@ public class DAChartBoardItem extends Composite {
                        int chartStyle) {
                super(parent.getChildItemList(), SWT.NONE);
                parentItem = parent;
-               height = parent.getChartBoard().getItemHeight();
+               height = parent.getItemHeight();
                depth = parent.getDepth() + 1;
                initWidget(itemName, icon, chartStyle);
                parentItem.registerItem(this);
index f7e9454..cebbf75 100644 (file)
@@ -80,8 +80,6 @@ public class DAChartBoardItemCell extends Composite {
        private PaintListener nameCellPaintListener;
        private boolean hasAdditionalInfo = false;
        
-       private String itemFullName = null;
-       
        //FIXME for debugging
        public String getItemName() {
                return itemName;
@@ -267,25 +265,6 @@ public class DAChartBoardItemCell extends Composite {
                                boolean bToggled = expandButton.isToggled();
                                parentItem.callbackSelect(true);
                                parentItem.callbackExpand(bToggled);
-                               
-                               PaintListener fullNameCellPaintListener = (new PaintListener() {
-                                       @Override
-                                       public void paintControl(PaintEvent e) {        // draw full name
-                                               Rectangle rect = ((Canvas) (e.widget)).getClientArea();
-                                               drawNameCellBackGround(e.gc, rect);
-                                               Point point = e.gc.textExtent(itemFullName, SWT.DRAW_DELIMITER);
-                                               int startY = rect.height / 2 - point.y / 2 + NAME_CELL_DEFAULT_MARGIN;
-                                               e.gc.setForeground(ColorResources.BLACK);
-                                               drawText(e.gc, itemFullName, rect, startY);
-                                       }
-                               });
-                               if(itemFullName != null) {
-                                       if(bToggled) {
-                                               nameCell.addPaintListener(fullNameCellPaintListener);
-                                       }else{
-                                               nameCell.addPaintListener(nameCellPaintListener);
-                                       }                                       
-                               }
                                nameCell.redraw();
                        }
                });
@@ -402,8 +381,4 @@ public class DAChartBoardItemCell extends Composite {
                nameCellCurrentBGColorEnd = endColor;   
                nameCell.redraw();
        }
-       
-       public void setFullName(String fullName) {
-               this.itemFullName = fullName;
-       }
 }
index 99af921..2ed5668 100755 (executable)
@@ -16,8 +16,8 @@
    <launcherArgs>
       <programArgs>-data @noDefault</programArgs>
       <vmArgs>-XX:MaxPermSize=64m
--Xms256m
--Xmx1024m
+-Xms512m
+-Xmx512m
 -XX:+UseParNewGC
 -XX:+UseConcMarkSweepGC</vmArgs>
       <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
index 77b0199..20c8c17 100644 (file)
@@ -44,7 +44,6 @@ public class PathConstants {
        public static final String IDE_FOLDER_NAME = "ide"; //$NON-NLS-1$
        public static final String PLUGINS_FOLDER_NAME = "plugins"; //$NON-NLS-1$
        public static final String BASE_PLATFORM_PLUGIN_FOLDER_NAME = "org.tizen.base.platform"; //$NON-NLS-1$
-       public static final String PLATFORM_IDE_PLUGIN_NAME = "org.tizen.nativeplatform"; //$NON-NLS-1$
        public static final String WORKBENCH_PLUGIN_FOLDER_NAME = "org.tizen.dynamicanalyzer.workbench"; //$NON-NLS-1$
        public static final String ABOUT_FILE_NAME = "about.mappings"; //$NON-NLS-1$
        public static final String SINGLETON_LOCK_FILE = "active_da";//$NON-NLS-1$
index 9ddbb50..75b15b3 100755 (executable)
@@ -51,8 +51,8 @@ public class PathManager {
        public static final String DA_INSTALL_PATH = TIZEN_SDK_INSTALL_PATH + File.separator
                        + PathConstants.TOOLS_FOLDER_NAME + File.separator
                        + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME;
-       public static final String DA_AUTOTEST_PATH = TIZEN_SDK_DATA_PATH + File.separator + "test"
-                       + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME;
+       public static final String DA_AUTOTEST_PATH = TIZEN_SDK_DATA_PATH + File.separator
+                       + "test" + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME;
        public static final String DA_READELF_PATH = DA_INSTALL_PATH + File.separator
                        + PathConstants.TARGET_FOLDER_NAME;
 
@@ -71,10 +71,10 @@ public class PathManager {
        public static final String DA_TOOL_FOLDER_PATH = DA_INSTALL_PATH + File.separator
                        + PathConstants.TOOL_FOLDER_NAME;
 
-       public static final String DA_DEBUG_DATA_CHANNEL_LOG_FILE = DA_LOG_PATH + File.separator
-                       + "data.log"; //$NON-NLS-1$
-       public static final String DA_DEBUG_CONTROL_CHANNEL_LOG_FILE = DA_LOG_PATH + File.separator
-                       + "control.log"; //$NON-NLS-1$
+       public static final String DA_DEBUG_DATA_CHANNEL_LOG_FILE = DA_LOG_PATH
+                       + File.separator + "data.log"; //$NON-NLS-1$
+       public static final String DA_DEBUG_CONTROL_CHANNEL_LOG_FILE = DA_LOG_PATH
+                       + File.separator + "control.log"; //$NON-NLS-1$
        public static final String DA_BINARY_AUTO_SAVE_FILE = DA_SAVE_PATH + File.separator
                        + "BinarySettings.save";
 
@@ -146,11 +146,11 @@ public class PathManager {
                        String platformVersion = platform.replaceAll("[A-Za-z]", "");//$NON-NLS-1$
 
                        if (Double.parseDouble(platformVersion) < 2.1) {
-                               tizenHeaderSouecePath = String.format(tempPath, platformName, currentDevie,
-                                               platformVersion + ".cpp");//$NON-NLS-1$
+                               tizenHeaderSouecePath = String.format(tempPath, platformName,
+                                               currentDevie, platformVersion + ".cpp");//$NON-NLS-1$
                        } else {
-                               tizenHeaderSouecePath = String.format(tempPath, platformName, currentDevie,
-                                               platformVersion + ".native");//$NON-NLS-1$
+                               tizenHeaderSouecePath = String.format(tempPath, platformName,
+                                               currentDevie, platformVersion + ".native");//$NON-NLS-1$
                        }
                }
 
@@ -160,9 +160,10 @@ public class PathManager {
        // currently not used
        public static String getTargetPath(String platform) {
                if (null != platform && !platform.isEmpty()) {
-                       return TIZEN_SDK_INSTALL_PATH + File.separator + PathConstants.PLATFORM_FOLDER_NAME
-                                       + File.separator + platform + File.separator
-                                       + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME + File.separator;
+                       return TIZEN_SDK_INSTALL_PATH + File.separator
+                                       + PathConstants.PLATFORM_FOLDER_NAME + File.separator + platform
+                                       + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME
+                                       + File.separator;
                } else {
                        return DA_INSTALL_PATH + File.separator + PathConstants.TARGET_FOLDER_NAME
                                        + File.separator;
@@ -198,32 +199,6 @@ public class PathManager {
                return aboutFilePath;
        }
 
-       public static boolean checkPlatformPlugin() {
-               String idePluginPath = TIZEN_SDK_INSTALL_PATH + File.separator
-                               + PathConstants.IDE_FOLDER_NAME + File.separator
-                               + PathConstants.PLUGINS_FOLDER_NAME;
-
-               File dir = new File(idePluginPath);
-               String[] files;
-               if (dir.exists()) {
-                       files = dir.list(new FilenameFilter() {
-
-                               @Override
-                               public boolean accept(File dir, String name) {
-                                       return name.contains(PathConstants.PLATFORM_IDE_PLUGIN_NAME);
-                               }
-                       });
-               } else {
-                       return false;
-               }
-
-               if (null == files || files.length < 1) {
-                       return false;
-               }
-
-               return true;
-       }
-
        public static String getWorkbenchPluginPath() {
                String aboutFolderPath = TIZEN_SDK_INSTALL_PATH + File.separator
                                + PathConstants.TOOLS_FOLDER_NAME + File.separator
@@ -255,9 +230,9 @@ public class PathManager {
 
        public static String getRootstrapsPath(String platform) {
                if (platform != null) {
-                       return TIZEN_SDK_INSTALL_PATH + File.separator + PathConstants.PLATFORM_FOLDER_NAME
-                                       + File.separator + platform + File.separator
-                                       + PathConstants.TIZEN_FOLDER_ROOTSTRAPS;
+                       return TIZEN_SDK_INSTALL_PATH + File.separator
+                                       + PathConstants.PLATFORM_FOLDER_NAME + File.separator + platform
+                                       + File.separator + PathConstants.TIZEN_FOLDER_ROOTSTRAPS;
                } else {
                        return "";
                }
@@ -270,37 +245,40 @@ public class PathManager {
                        returnstr = DA_TOOL_FOLDER_PATH + File.separator
                                        + PathConstants.WINDOW_ACTIVATOR_WINDOWS;
                } else if (CommonUtil.isMac()) {
-                       returnstr = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.WINDOW_ACTIVATOR_MACOS;
+                       returnstr = DA_TOOL_FOLDER_PATH + File.separator
+                                       + PathConstants.WINDOW_ACTIVATOR_MACOS;
                } else if (CommonUtil.isLinux()) {
-                       returnstr = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.WINDOW_ACTIVATOR_LINUX;
+                       returnstr = DA_TOOL_FOLDER_PATH + File.separator
+                                       + PathConstants.WINDOW_ACTIVATOR_LINUX;
                } else {
                        returnstr = null;
                }
 
                return returnstr;
        }
-
+       
        public static String getTestLogPath() {
                String returnstr = null;
 
                returnstr = getTizenSdkDataPath();
-               if (returnstr == null)
-                       return returnstr;
-               return returnstr + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME
-                               + File.separator + PathConstants.TEST_FOLDER_NAME;
+               if (returnstr == null)  return returnstr;
+               return returnstr + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME  
+                               + File.separator + PathConstants.TEST_FOLDER_NAME;  
        }
-
+       
        public static String getDebugInfoScript() {
                String path = null;
-
+               
                if (CommonUtil.isLinux() || CommonUtil.isMac()) {
-                       path = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.DEBUGINFO_LINUX_MAC;
+                       path = DA_TOOL_FOLDER_PATH + File.separator
+                       + PathConstants.DEBUGINFO_LINUX_MAC;
                } else if (CommonUtil.isWin()) {
-                       path = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.DEBUGINFO_WINDOWS;
+                       path = DA_TOOL_FOLDER_PATH + File.separator
+                       + PathConstants.DEBUGINFO_WINDOWS;
                } else { // should never be here
-                       Logger.error("Unknown host OS!\n");
+                       Logger.error("Unknown host OS!\n");                     
                }
-
+               
                return path;
        }
 }
index 2ad90b5..de4f317 100644 (file)
@@ -55,7 +55,7 @@ public class IndexedHashMap<K, V extends Indexable> {
        }
 
        public V getByIndex(int index) {
-               if (index >= 0 && index < dataList.size()) {
+               if (index < dataList.size()) {
                        return dataList.get(index);
                } else {
                        return null;
index c6f7336..e567a98 100644 (file)
@@ -51,9 +51,6 @@ public class AnalyzerPlugin extends AbstractUIPlugin {
        public void start(BundleContext context) throws Exception {\r
                super.start(context);\r
                plugin = this;\r
-               \r
-               // check for platform sdk\r
-               Global.setPlatformSDK(PathManager.checkPlatformPlugin());\r
 \r
                // Adds workbench listener.\r
                IWorkbench workbench = PlatformUI.getWorkbench();\r
index 0f94308..6e6395f 100755 (executable)
@@ -39,14 +39,13 @@ public class AnalyzerShellCommands {
        public static final String CMD_UPLOAD_FILE_LIST = "du -b " + //$NON-NLS-1$
                        PathConstants.DA_REMOTE_PATH + AnalyzerConstants.READELF_BIN;
        public static final String CMD_PROCESS_NAME = "ps -p %d -o comm=rcu_sched";
-       public static final String CMD_GET_FILE_SIZE = "stat -c %s";
 
        // via da_command
-       public static final String DACOMMAND_KILL_MANAGER = "profile killmanager";
-       public static final String DACOMMAND_RUN_MANAGER = "profile runmanager";
-       public static final String DACOMMAND_FIND_UNITTEST = "profile findunittest";
-       public static final String DACOMMAND_CHECK_VERSION = "profile getversion";
-       public static final String DACOMMAND_READLINK = "profile readlink ";
+       public static final String DACOMMAND_KILL_MANAGER = "da killmanager";
+       public static final String DACOMMAND_RUN_MANAGER = "da runmanager";
+       public static final String DACOMMAND_FIND_UNITTEST = "da findunittest";
+       public static final String DACOMMAND_CHECK_VERSION = "da getversion";
+       public static final String DACOMMAND_READLINK = "da readlink ";
 
        // direct shell command
        public static final String CMD_FIND_IME = "/usr/bin/pkginfo --arg-flt 10 http://tizen.org/category/ime";
index 62a3469..711ad81 100644 (file)
@@ -68,7 +68,6 @@ public class DALimit {
        public static final int MAX_BINARY_COUNT = (int) Math.pow(2, 16); // 65535
        public static final int MAX_FUNCTION_COUNT = (int) Math.pow(2, 20);     // 1,048,576
        public static final int MAX_FUNCTION_ARGUMENTS_COUNT = FUNCTION_ARGUMENTS_FORMAT_LENGTH; // Because "MAX_FUNCTION_ARGUMENTS_COUNT < FUNCTION_ARGUMENTS_FORMAT_LENGTH" is always true
-       public static final long MAX_DAEMON_LOG_SIZE = 1024*1024;       // 1 mega byte
        
        // Leak 
        public static final int MAX_LEAK_CHECK_BUFFER_SIZE = (int) Math.pow(2, 20); // 1,048,576
@@ -78,8 +77,6 @@ public class DALimit {
        public static final int MAX_FILE_ACCESS_COUNT = ((int) Math.pow(2, 10))*100; // 102400 // 102400
        public static final int MAX_STRING_LENGTH = 16;
        
-       // Callstack
-       public static final int MAX_CALLSTACK_SEQTIMEMAP_SIZE = 100000;
        
        
        public static void stopTraceAndOpenWarningDialog() {
@@ -24,9 +24,9 @@
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.swap.communicator;
+package org.tizen.dynamicanalyzer.common;
 
-public enum SwapErrorCode {
+public enum ErrorCode {
        SUCCESS(0, "Success"),
 
        ERR_LOCKFILE_CREATE_FAILED(-101, "Lock file create failed"),
@@ -35,9 +35,11 @@ public enum SwapErrorCode {
 
        ERR_INITIALIZE_SYSTEM_INFO_FAILED(-103, "Initialize system info failed"),
 
-       ERR_HOST_SERVER_SOCKET_CREATE_FAILED(-104, "host server socket create failed"),
+       ERR_HOST_SERVER_SOCKET_CREATE_FAILED(-104,
+                       "host server socket create failed"),
 
-       ERR_TARGET_SERVER_SOCKET_CREATE_FAILED(-105, "target server socket create failed"),
+       ERR_TARGET_SERVER_SOCKET_CREATE_FAILED(-105,
+                       "target server socket create failed"),
 
        ERR_WRONG_MESSAGE_FORMAT(-201, "Wrong message format"),
 
@@ -47,18 +49,16 @@ public enum SwapErrorCode {
 
        ERR_CANNOT_START_PROFILING(-204, "cannot start profiling"),
 
-       ERR_SER_SOCK_CREATE(-900, "Server socket creation failed"),
-
-       ERR_SER_SOCK_BIND(-901, "Server socket bind failed"),
-
-       ERR_SER_SOCK_LISTEN(-902, "Server socket listen failed"),
-
        ERR_NOT_DEFINED(-999, "Unknown error");
 
        private final String message;
        private final int errNo;
 
-       private SwapErrorCode(int num, String msg) {
+       public static final int ERROR_MSG_INDEX = 0;
+       public static final int ERROR_LENGTH_INDEX = 1;
+       public static final int ERROR_NUMBER_INDEX = 2;
+
+       private ErrorCode(int num, String msg) {
                errNo = num;
                message = msg;
        }
@@ -71,13 +71,13 @@ public enum SwapErrorCode {
                return message;
        }
 
-       public static SwapErrorCode getError(int num) {
-               SwapErrorCode[] errors = values();
+       public static ErrorCode getError(int num) {
+               ErrorCode[] errors = values();
                for (int i = 0; i < errors.length; i++) {
                        if (errors[i].getErrorNumber() == num) {
                                return errors[i];
                        }
                }
-               return SwapErrorCode.ERR_NOT_DEFINED;
+               return ErrorCode.ERR_NOT_DEFINED;
        }
 }
index c6892d3..ad5368c 100644 (file)
@@ -38,27 +38,17 @@ import org.tizen.dynamicanalyzer.swap.channel.control.RunTimeConfiguration;
 // This class is for global information that can be accessed from anywhere in dynamic analyzer code.
 // So this class contains only static methods and variables.
 public class Global {
-       private static boolean isPlatformSDK = false;
-       
        private static DeviceInfo currentDevice = null;
        private static PackageInfo currentApplication = null;
        private static Project currentProject = null;
        private static RunTimeConfiguration currentConfiguration = null;
 
-       public static boolean isPlatformSDK() {
-               return isPlatformSDK;
-       }
-
-       public static void setPlatformSDK(boolean isPlatformSDK) {
-               Global.isPlatformSDK = isPlatformSDK;
-       }
-
        public static DeviceInfo getCurrentDeviceInfo() {
                return currentDevice;
        }
 
        public static void setCurrentDeviceInfo(DeviceInfo device) {
-               Global.currentDevice = device;
+               currentDevice = device;
        }
 
        public static PackageInfo getCurrentApplication() {
@@ -66,7 +56,7 @@ public class Global {
        }
 
        public static void setCurrentApplication(PackageInfo pkgInfo) {
-               Global.currentApplication = pkgInfo;
+               currentApplication = pkgInfo;
        }
 
        public static RunTimeConfiguration getCurrentConfiguration() {
@@ -74,15 +64,15 @@ public class Global {
        }
 
        public static void setCurrentConfiguration(RunTimeConfiguration currentConfig) {
-               Global.currentConfiguration = currentConfig;
+               currentConfiguration = currentConfig;
        }
 
-       public static Project getProject() {
-               return currentProject;
+       public static void setProject(Project p) {
+               currentProject = p;
        }
 
-       public static void setProject(Project p) {
-               Global.currentProject = p;
+       public static Project getProject() {
+               return currentProject;
        }
 
        public static String getFunctionName(int id) {
index b74bfbe..ba6331e 100755 (executable)
@@ -53,13 +53,13 @@ public enum HostResult {
 
        ERR_READELF_UPLOAD_FAILED(-205, "readelf file size is different!!"),
 
-       ERR_DEVICE_IS_NULL(-301, "Current device is not available"),
+       ERR_DEVICE_IS_NULL(-301, "current device is null"),
 
        ERR_DEVICE_IS_OFFLINE(-302, "current device is offline"),
 
        ERR_SELECTED_APP_IS_NULL(-401, "selected app is null"),
 
-       ERR_MSG_START_FAIL(-501, "Current application is not available"),
+       ERR_MSG_START_FAIL(-501, "start message is not ok"),
 
        ERR_MSG_STOP_FAIL(-502, "stop message is not ok"),
 
@@ -74,8 +74,6 @@ public enum HostResult {
        ERR_BIN_INFO_GET_FAIL(-507, "binary info get fail..."),
        
        ERR_RECEIVE_ACK_FAIL(-508, "receiving ack message fail..."),
-       
-       ERR_BY_SECURITY_REASON(-601, "error by security reason"),
 
        ERR_DA_IS_EXIT(-901, "Dynamic Analyzer is closing"),
 
index 4dcd0f7..68ef308 100755 (executable)
@@ -284,8 +284,8 @@ public class CommunicatorUtils {
 
        public static int getRemotePort(IDevice device) {
                int remotePort = -1;
-               
                // add error check
+               System.out.print("Getting Port Progress \n ");
                long start = System.currentTimeMillis();
                while ((System.currentTimeMillis() - start) < PORT_WAIT_TIME) {
                        try {
@@ -335,9 +335,9 @@ public class CommunicatorUtils {
 
                System.out.print("\n");
                if (remotePort < 0) {
-                       Logger.error("!!failed to get port number of da manager!!");
+                       Logger.debug("!!port get failed!!");
                } else {
-                       Logger.debug("!!succeeded to get port number!! : " + remotePort);
+                       Logger.debug("!!port get success!! : " + remotePort);
                }
 
                return remotePort;
index 73931df..2fe8184 100644 (file)
@@ -43,7 +43,6 @@ import org.eclipse.swt.widgets.Display;
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.AnalyzerShellCommands;
-import org.tizen.dynamicanalyzer.common.DALimit;
 import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.common.HostResult;
 import org.tizen.dynamicanalyzer.common.path.PathConstants;
@@ -364,12 +363,7 @@ public class DACommunicator {
                                }
                        }
                });
-               if (cmdResultMultiLines.size() == 1) {
-                       processName = "unknow proccess";//$NON-NLS-1$
-               } else {
-                       processName = cmdResultMultiLines.get(1);
-               }
-
+               processName = cmdResultMultiLines.get(1);
                return processName;
        }
 
@@ -454,7 +448,22 @@ public class DACommunicator {
                                }
                        });
 
-                       onDisconnectedInternal(device);
+                       Logger.debug("device disconnected : " + device.getSerialNumber());
+                       DeviceInfo deviceInfo = getDeviceByName(device.getSerialNumber());
+                       DeviceInfo selectedDevice = Global.getCurrentDeviceInfo();
+                       if (null != devices && !devices.isEmpty()) {
+                               devices.remove(deviceInfo);
+                               if (!AnalyzerManager.isRunning()) {
+                                       updateToolbarDevice();
+                               }
+                               if (isRunning()) {
+                                       if (selectedDevice.getIDevice().getSerialNumber()
+                                                       .equals(deviceInfo.getIDevice().getSerialNumber())) {
+                                               Logger.debug("Disconnected while DA is running."); //$NON-NLS-1$
+                                               DACommunicator.setRunning(false);
+                                       }
+                               }
+                       }
 
                        Display.getDefault().syncExec(new Runnable() {
                                @Override
@@ -475,7 +484,24 @@ public class DACommunicator {
                                }
                        });
 
-                       onConnectedInternal(device);
+                       Logger.debug("device connected : " + device.getSerialNumber());
+                       // addDevice(device);
+                       if (!AnalyzerManager.isRunning()) {
+                               DeviceInfo devInfo = new DeviceInfo(device);
+                               HostResult result = readVersion(devInfo);
+                               if (result.isSuccess()) {
+                                       devInfo.initCommunicator();
+                                       updateToolbarDevice();
+                               }
+                       }
+                       if (null != Global.getCurrentDeviceInfo() && null != Global.getCurrentApplication()) {
+                               Display.getDefault().syncExec(new Runnable() {
+                                       @Override
+                                       public void run() {
+                                               ToolbarArea.getInstance().setStartButtonEnablement(true);
+                                       }
+                               });
+                       }
 
                        Display.getDefault().syncExec(new Runnable() {
                                @Override
@@ -497,9 +523,23 @@ public class DACommunicator {
                        });
 
                        Logger.debug("device changed : " + device.getSerialNumber() + "   " + changeMask);
-                       if (1 == changeMask) { // state changed (offline -> online, vice versa)
-                               onDisconnectedInternal(device);
-                               onConnectedInternal(device);
+                       if (1 == changeMask) {
+                               if (!AnalyzerManager.isRunning()) {
+                                       DeviceInfo devInfo = new DeviceInfo(device);
+                                       HostResult result = readVersion(devInfo);
+                                       if (result.isSuccess()) {
+                                               devInfo.initCommunicator();
+                                               updateToolbarDevice();
+                                       }
+                               }
+                               if (null != Global.getCurrentDeviceInfo() && null != Global.getCurrentApplication()) {
+                                       Display.getDefault().syncExec(new Runnable() {
+                                               @Override
+                                               public void run() {
+                                                       ToolbarArea.getInstance().setStartButtonEnablement(true);
+                                               }
+                                       });
+                               }
                        } else {
                                Logger.debug("device changed type :" + changeMask);
                        }
@@ -512,45 +552,6 @@ public class DACommunicator {
                        });
                }
 
-               private void onDisconnectedInternal(IDevice device) {
-                       Logger.debug("device disconnected : " + device.getSerialNumber());
-                       DeviceInfo deviceInfo = getDeviceByName(device.getSerialNumber());
-                       DeviceInfo selectedDevice = Global.getCurrentDeviceInfo();
-                       if (null != devices && !devices.isEmpty()) {
-                               devices.remove(deviceInfo);
-                               if (!AnalyzerManager.isRunning()) {
-                                       updateToolbarDevice();
-                               }
-                               if (isRunning()) {
-                                       if (selectedDevice.getIDevice().getSerialNumber()
-                                                       .equals(deviceInfo.getIDevice().getSerialNumber())) {
-                                               Logger.debug("Disconnected while DA is running."); //$NON-NLS-1$
-                                               DACommunicator.setRunning(false);
-                                       }
-                               }
-                       }
-               }
-
-               private void onConnectedInternal(IDevice device) {
-                       Logger.debug("device connected : " + device.getSerialNumber());
-                       // addDevice(device);
-                       if (!AnalyzerManager.isRunning()) {
-                               DeviceInfo devInfo = new DeviceInfo(device);
-                               HostResult result = readVersion(devInfo);
-                               if (result.isSuccess()) {
-                                       devInfo.initCommunicator();
-                                       updateToolbarDevice();
-                               }
-                       }
-                       if (null != Global.getCurrentDeviceInfo() && null != Global.getCurrentApplication()) {
-                               Display.getDefault().syncExec(new Runnable() {
-                                       @Override
-                                       public void run() {
-                                               ToolbarArea.getInstance().setStartButtonEnablement(true);
-                                       }
-                               });
-                       }
-               }
        };
 
        public static void updateToolbarDevice() {
@@ -614,37 +615,16 @@ public class DACommunicator {
 
        public static void pullDaemonLog() {
                final String from = PathConstants.DA_DAEMON_LOG_PATH;
-               String command = AnalyzerShellCommands.CMD_GET_FILE_SIZE + CommonConstants.SPACE + from;
-
-               cmdResultMultiLines.clear();
-               CommunicatorUtils.execShellCommand(command, new MultiLineReceiver() {
-                       @Override
-                       public void processNewLines(String[] lines) {
-                               for (int i = 0; i < lines.length; i++) {
-                                       cmdResultMultiLines.add(lines[i]);
-                               }
-                       }
-               });
-
-               long filesize = -1;
-               if (cmdResultMultiLines.size() > 0) {
-                       filesize = Long.parseLong(cmdResultMultiLines.get(0));
-               }
-
-               if (filesize > 0 && filesize < DALimit.MAX_DAEMON_LOG_SIZE) {
-                       final String to = PathManager.DA_LOG_PATH + File.separator + DAEMONLOG_PREFIX
-                                       + PathManager.getLogPostFix();//$NON-NLS-1$ 
-                       SyncResult res = CommunicatorUtils.pull(from, to);
-                       if (null != res && res.isOk()) {
-                               Logger.debug("daemon log copying success!!");//$NON-NLS-1$ 
-                       } else {
-                               Logger.debug("Failed to get " + from); //$NON-NLS-1$ 
-                       }
-
-                       AnalyzerUtil.checkLogs(PathManager.DA_LOG_PATH, DAEMONLOG_PREFIX, DAEMONLOG_COUNT);
+               final String to = PathManager.DA_LOG_PATH + File.separator + DAEMONLOG_PREFIX
+                               + PathManager.getLogPostFix();//$NON-NLS-1$ 
+               SyncResult res = CommunicatorUtils.pull(from, to);
+               if (null != res && res.isOk()) {
+                       Logger.debug("daemon log copying success!!");//$NON-NLS-1$ 
                } else {
-                       Logger.debug("daemon log file is too large or does not exist");
+                       Logger.debug("Failed to get " + from); //$NON-NLS-1$ 
                }
+
+               AnalyzerUtil.checkLogs(PathManager.DA_LOG_PATH, DAEMONLOG_PREFIX, DAEMONLOG_COUNT);
        }
 
        // public static String getLocalhost() {
index 00821bc..5906aa2 100644 (file)
@@ -31,7 +31,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.project.AppInfo;
 import org.tizen.dynamicanalyzer.project.PackageInfo;
@@ -135,19 +134,15 @@ public class ApplistManager {
                                pkgInfo.setPackageId(value);
                        } else if (key.equals(PackageInfo.VERSION)) {
                                pkgInfo.setVersion(value);
-                       } else if (key.equals(PackageInfo.PRELOAD)) {
-                               pkgInfo.setPreload(Integer.parseInt(value));
                        } else if (key.equals(PackageInfo.INSTALLTIME)) {
                                pkgInfo.setInstallTime(Long.parseLong(value));
                        }
                }
-               
-               if (pkgInfo.getPackageId() == null) {
-                       return null;
-               } else if (!Global.isPlatformSDK() && pkgInfo.getPreload() != 0) {
-                       return null;
-               } else {
+
+               if (pkgInfo.getPackageId() != null) {
                        return pkgInfo;
+               } else {
+                       return null;
                }
        }
 
index 26d49c1..11519d7 100644 (file)
@@ -78,17 +78,13 @@ public class DBConstants {
         */
 
        // length of string type column
-       public static final int SHORT_TEXT_LEN = 64;
        public static final int TEXT_LEN = 256;
        public static final int BIG_TEXT_LEN = 1024;
-       public static final int LONG_TEXT_LEN = 4096;
        public static final int BIGBIG_TEXT_LEN = 16384;
 
-       public static final String SHORT_TEXT =  "VARCHAR(" + SHORT_TEXT_LEN + ")";//$NON-NLS-1$
        public static final String TEXT = "VARCHAR(" + TEXT_LEN + ")";//$NON-NLS-1$
        public static final String BIG_TEXT = "VARCHAR(" + BIG_TEXT_LEN + ")";//$NON-NLS-1$
        public static final String BIGBIG_TEXT = "VARCHAR(" + BIGBIG_TEXT_LEN + ")";//$NON-NLS-1$
-       public static final String LONG_TEXT = "VARCHAR(" + LONG_TEXT_LEN + ")";//$NON-NLS-1$
        public static final String TEXT_LIB_NAME = "VARCHAR(1024)";//$NON-NLS-1$
 
        // types type constant
index 597d073..c2f095d 100644 (file)
@@ -250,25 +250,21 @@ public class OpenTraceHandler extends AbstractHandler {
                boolean isSuccess = true;
                List<List<Object>> profilingChilds = FunctionUsageProfiler.getInstance()
                                .getProfilingChildDataTable().getProfilingChildDataFromDB();
-               if (null == profilingChilds || 0 == profilingChilds.size()) {
+               if (null == profilingChilds) {
                        Logger.debug("failed - loadProfilingChildData");
                        isSuccess = false;
                } else {
-                       int size = profilingChilds.size();
-                       for (int i = 0; i < size; i++) {
+                       for (int i = 0; i < profilingChilds.size(); i++) {
                                List<Object> data = profilingChilds.get(i);
                                int parentID = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.PROFILINGDATAID.index);
                                int pid = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.PID.index);
+                               int childID = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.CHILDDATAID.index);
 
-                               @SuppressWarnings("unchecked")
-                               List<Integer> childSeqList = 
-                                               (List<Integer>) data.get(ProfilingChildDataDBTable.COLUMN.CHILDSEQARRAY.index);
-       
                                ProfileDataMaker profiler = FunctionUsageProfiler.getInstance()
                                                .getProfileDataMakerByPid(pid);
                                ProfilingData parent = profiler.getProfilingDataMap().get(parentID);
                                ProfilingChildData child = parent.getChildData();
-                               child.getChildren().addAll(childSeqList);
+                               child.getChildren().add(childID);
                        }
                }
                return isSuccess;
index b7f7d03..b9be2b1 100644 (file)
@@ -52,8 +52,8 @@ public class LogCenterConstants {
        public static final int FD_API_TYPE_LOCK_START = 14;
        public static final int FD_API_TYPE_LOCK_END = 15;
        public static final int FD_API_TYPE_UNLOCK = 16;
-       public static final int FD_API_TYPE_LOCK_AUTORELEASE = 17;
-       public static final int FD_API_TYPE_FAIL = 18;
+       public static final int FD_API_TYPE_LOCK_WAIT_START = 17;
+       public static final int FD_API_TYPE_LOCK_WAIT_END = 18;         
 
        /* network api type */
        public static final int SOCKET_API_FD_OPEN = 0;
index 8dc1fe0..0bbaf13 100644 (file)
@@ -74,16 +74,11 @@ public class FilePageLabels extends NLS {
        public static String FILE_CHART_TOOLTIP_READ;
        public static String FILE_CHART_TOOLTIP_CONCURRENT_READ;
        public static String FILE_CHART_TOOLTIP_LOCK;
-       public static String FILE_CHART_TOOLTIP_UNLOCK;
-       public static String FILE_CHART_TOOLTIP_LOCK_AUTORELEASE;
        public static String FILE_CHART_TOOLTIP_LOCK_WAIT;
-       public static String FILE_CHART_TOOLTIP_FAIL;
-       
        
        public static String FILE_API_DB;
        public static String FILE_STATUS_DB;
        public static String FILE_ACCESS_DB;
-       public static String FILE_ACCESSOR_DB;
        
        public static String FILE_CHART_LOCK;
        
index 00b6894..7981169 100644 (file)
@@ -41,16 +41,12 @@ FILE_CHART_TOOLTIP_WRITE=WRITE
 FILE_CHART_TOOLTIP_CONCURRENT_WRITE=CONCURRENT WRITE
 FILE_CHART_TOOLTIP_READ=READ
 FILE_CHART_TOOLTIP_CONCURRENT_READ=CONCURRENT READ
-FILE_CHART_TOOLTIP_LOCK=LOCK
-FILE_CHART_TOOLTIP_UNLOCK=UNLOCK
+FILE_CHART_TOOLTIP_LOCK=LOCKED
 FILE_CHART_TOOLTIP_LOCK_WAIT=LOCK WAITING
-FILE_CHART_TOOLTIP_LOCK_AUTORELEASE=AUTO RELEASE
-FILE_CHART_TOOLTIP_FAIL=FAIL
 
 FILE_API_DB=FILE_API_DB
 FILE_STATUS_DB=FILE_STATUS_DB
 FILE_ACCESS_DB=FILE_ACCESS_DB
-FILE_ACCESSOR_DB=FILE_ACCESSOR_DB
        
 TIME_MS = ms
 
index 4745350..29201d5 100644 (file)
@@ -32,7 +32,6 @@ import org.eclipse.osgi.util.NLS;
 public class ThreadPageLabels extends NLS {
        private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.ThreadPageLabels"; //$NON-NLS-1$
        public static String THREAD_CHART_THREAD;
-       public static String THREAD_CHART_SYNC;
        public static String THREAD_CHART_TITLE;
        public static String THREAD_DETAILS_TITLE;
        public static String SYNC_CHART_TITLE;
index fbd56c4..39e285a 100644 (file)
@@ -36,8 +36,6 @@ public class UserErrorWarningLabels extends NLS {
        public static String ERROR_LIB_NOT_FOUND_INRPM;
        public static String ERROR_NO_APPID_FOR_LAUNCHPAD;
        public static String ERROR_DEVICE_CONNECTION;
-       
-       public static String ERROR_BY_SECURITY_REASON;
 
        public static String WARNING_PATH_NOT_FOUND;
        public static String WARNING_FILE_NOT_FOUND;
index 3fe3a57..f608c90 100644 (file)
@@ -4,8 +4,6 @@ ERROR_LIB_NOT_FOUND_INRPM=Library file cannot be found in rpm package.
 ERROR_NO_APPID_FOR_LAUNCHPAD=There is no appid for launch_app.
 ERROR_DEVICE_CONNECTION=Failed to connect with the device.\nPlease re-run Dynamic Analyzer and reboot the device.
 
-ERROR_BY_SECURITY_REASON=You cannot analyze this application for the security reason.
-
 WARNING_PATH_NOT_FOUND=Path cannot be found.
 WARNING_FILE_NOT_FOUND=File cannot be found.
 
index 86b1347..4124449 100644 (file)
@@ -104,12 +104,10 @@ public class AppInfo {
 
        private ElfSymbolExtractor symbolExtractor = new ElfSymbolExtractor();
 
-       // temporary information
-       private String execPath = null;
        private String execFileName = null;
-
        private List<String> localPackagePath = null;
        private Map<Integer, String> runningProcesses = null;
+       private String execPath = null;
 
        private static List<String> readlinkResult = new ArrayList<String>();
        private List<String> properties = new ArrayList<String>();
@@ -159,10 +157,6 @@ public class AppInfo {
 
        public void setInfo(int index, String data) {
                properties.set(index, data);
-               if (index == PROPERTY.EXEC.index) {
-                       execFileName = null;
-                       execPath = null;
-               }
        }
 
        public String getInfo(int index) {
@@ -333,7 +327,7 @@ public class AppInfo {
        public String getPackageId() {
                return properties.get(PROPERTY.PACKAGE.index);
        }
-
+       
        public String getLabel() {
                return properties.get(PROPERTY.LABEL.index);
        }
@@ -356,10 +350,13 @@ public class AppInfo {
                                                readlinkResult.add(appLines[i]);
                                        }
                                }
-                       }); // get actual file path using da readlink command (inside target platform)
+                       }); // get actual file path using da readlink command (inside target
+                               // platform)
 
-                       if (readlinkResult.isEmpty() || readlinkResult.size() > 1) {
-                               // fail to get path
+                       if (readlinkResult.isEmpty() || readlinkResult.size() > 1) { // fail
+                                                                                                                                                       // to
+                                                                                                                                                       // get
+                                                                                                                                                       // path
                                if (getAppType().contains(APPTYPE_CPP)) {
                                        exec = exec.replaceFirst(AnalyzerConstants.TIZEN_APP_PATH,
                                                        AnalyzerConstants.TIZEN_USR_APP_PATH);
index 4c15f86..94758aa 100644 (file)
@@ -32,13 +32,11 @@ public class PackageInfo {
        public static final String PKGTYPE = "pkg_type";
        public static final String PKGID = "pkgid";
        public static final String VERSION = "version";
-       public static final String PRELOAD = "preload";
        public static final String INSTALLTIME = "installed_time";
 
        private String id = null;
        private String pkgType = null;
        private String version = null;
-       private int preload = 0;                // 1 for preload, otherwise 0
        private long installTime = 0;
 
        private List<AppInfo> appInfos = new ArrayList<AppInfo>();
@@ -100,14 +98,6 @@ public class PackageInfo {
        public void setVersion(String version) {
                this.version = version;
        }
-       
-       public int getPreload() {
-               return preload;
-       }
-       
-       public void setPreload(int preload) {
-               this.preload = preload;
-       }
 
        public long getInstallTime() {
                return installTime;
index cba3a3c..a646dd6 100644 (file)
@@ -85,7 +85,7 @@ public abstract class BaseCallstackManager {
        }
 
        protected ConcurrentHashMap<Integer, ConcurrentHashMap<Long, CallStackUnit>> callstackApiAddrByPidMap = new ConcurrentHashMap<Integer, ConcurrentHashMap<Long, CallStackUnit>>();
-       protected ConcurrentSkipListMap<Long, CallStackData> callstackDataBySeqMap = new ConcurrentSkipListMap<Long, CallStackData>();
+       protected ConcurrentHashMap<Long, CallStackData> callstackDataBySeqMap = new ConcurrentHashMap<Long, CallStackData>();
        protected String userFunctionBin = null;
        protected HashMap<Integer, List<CallStackItem>> userCallstackByTidMap = new HashMap<Integer, List<CallStackItem>>();
        protected HashMap<Integer, DuplicateUserCall> dupUserCallByTidMap = new HashMap<Integer, DuplicateUserCall>();
@@ -97,9 +97,6 @@ public abstract class BaseCallstackManager {
        abstract public void makeUserCallstackforRange(LogData log, ProfileDataMaker profiler);
 
        abstract public void makeCallstackWithoutBacktrace(LogData inputData);
-       abstract public long getSeqOfUserCallstackForTime(int tid, long time);  
-       abstract public List<Long> getCallstackAddrListFromSeq(long seq);
-       abstract public List<List<Long>> getArrayOfAddrListFromSeq(List<Long> seqs);
 
        public void offerCallStackUnit(CallStackUnit csu) {
                if (callstackInserter != null) {
@@ -117,6 +114,13 @@ public abstract class BaseCallstackManager {
                return;
        }
 
+       public List<Integer> getPidsOfCallstackApiAddrMap() {
+               ArrayList<Integer> pids = new ArrayList<Integer>();
+               pids.addAll(callstackApiAddrByPidMap.keySet());
+
+               return pids;
+       }
+
        public Map<Long, CallStackUnit> getCallStackApiAddrByPidMap(int pid) {
                if (null == callstackApiAddrByPidMap) {
                        callstackApiAddrByPidMap = new ConcurrentHashMap<Integer, ConcurrentHashMap<Long, CallStackUnit>>();
@@ -130,9 +134,9 @@ public abstract class BaseCallstackManager {
                return callstackApiByAddrMap;
        }
 
-       public NavigableMap<Long, CallStackData> getCallStackDataBySeqMap() {
+       public Map<Long, CallStackData> getCallStackDataBySeqMap() {
                if (null == callstackDataBySeqMap) {
-                       callstackDataBySeqMap = new ConcurrentSkipListMap<Long, CallStackData>();
+                       callstackDataBySeqMap = new ConcurrentHashMap<Long, CallStackData>();
                }
                return callstackDataBySeqMap;
        }
@@ -155,13 +159,6 @@ public abstract class BaseCallstackManager {
                }
                return seqByTimeMap;
        }
-       
-       public List<Integer> getTidsOfSeqTimeMap() {
-               ArrayList<Integer> tids = new ArrayList<Integer>();
-               tids.addAll(seqTimeByTidMap.keySet());
-
-               return tids;
-       }
 
        public String getUserFunctionPosition() {
                if (userFunctionBin == null || userFunctionBin.isEmpty()) {
index 32d1b22..e920416 100644 (file)
@@ -34,12 +34,9 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
-import java.sql.ResultSet;
-import java.sql.SQLException;
 
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.project.BinaryInfo;
 import org.tizen.dynamicanalyzer.project.LibraryObject;
@@ -55,8 +52,6 @@ import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter;
 import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackItem;
 import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit;
 import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker;
-import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable;
-import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionExitDBTable;
 import org.tizen.dynamicanalyzer.util.Logger;
 
 public class SWAPCallStackManager extends BaseCallstackManager {
@@ -307,16 +302,8 @@ public class SWAPCallStackManager extends BaseCallstackManager {
                        return;
                }
 
-               long userCallstackSeq = getSeqOfUserCallstackForTime(tid, time);
-               List<Long> addrs = null;
-               int size = 0;
-               
-               if (-1 != userCallstackSeq) { // seq for usercallstack is found
-                       addrs = getCallstackAddrListFromSeq(userCallstackSeq);
-                       if (null != addrs) { // callstack data for seq is found
-                               size = addrs.size();
-                       }
-               }
+               List<CallStackItem> probeCallstack = new ArrayList<CallStackItem>(getUserCallstack(tid));
+               int size = probeCallstack.size();
 
                CallStackData callstackData = new CallStackData(seq);
 
@@ -330,10 +317,7 @@ public class SWAPCallStackManager extends BaseCallstackManager {
                                offerCallStackUnit(callbackApi);
                                addrMap.put(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, callbackApi);
                        }
-                       if (null == addrs) {
-                               addrs = new ArrayList<Long>();
-                       }
-                       addrs.add(0, LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR);
+                       probeCallstack.add(new CallStackItem(callbackApi));
                } else {
                        CallStackUnit callerCallstackUnit = addrMap.get(callerAddr);
                        if (null == callerCallstackUnit) {
@@ -343,105 +327,22 @@ public class SWAPCallStackManager extends BaseCallstackManager {
                                addrMap.put(callerAddr, callerCallstackUnit);
                        }
 
-                       CallStackUnit topUserCallstack = addrMap.get(addrs.get(0));
+                       CallStackUnit topUserCallstack = probeCallstack.get(size - 1).getCallStackUnit();
                        if (callerCallstackUnit.getFunctionId() == topUserCallstack.getFunctionId()) {
-                               addrs.set(0, callerAddr);
+                               probeCallstack.set(size - 1, new CallStackItem(callerCallstackUnit));
                        } else {
                                Logger.debug("probe caller is not the same as top of user callstack"); //$NON-NLS-1$
                        }
                }
 
-               size = addrs.size();
-               for (int i = 0; i < size; i++) {
-                       callstackData.getAddrs().add(addrs.get(i));
+               size = probeCallstack.size();
+               for (int i = size - 1; i >= 0; i--) {
+                       callstackData.getAddrs().add(probeCallstack.get(i).getCallStackUnit().getAddr());
                }
                offerCallStackData(callstackData);
                getCallStackDataBySeqMap().put(seq, callstackData);
        }
 
-       // to make callstack for sample, probe
-       public long getSeqOfUserCallstackForTime(int tid, long time) {
-               long seq = -1;
-               String query;
-               long entrySeq = -1, exitSeq = -1;
-               ResultSet rs;
-               NavigableMap<Long, Long> seqByTimeMap = getSeqTimeByTidMap(tid);
-               Long callstackTime = seqByTimeMap.floorKey(time);
-               
-               if (null != callstackTime) { // found from memory
-                       seq = seqByTimeMap.get(callstackTime);
-               } else { // select from database
-                       try {
-                               query = String.format(FunctionEntryDBTable.USERCALLSTACK_QUERY, time);
-                               rs = SqlConnectionManager.executeQueryRS(query);
-                               if (rs.next()) {
-                                       entrySeq = rs.getLong(1);
-                               }
-                               SqlConnectionManager.releaseResultSet(rs);
-                               
-                               query = String.format(FunctionExitDBTable.USERCALLSTACK_QUERY, time);
-                               rs = SqlConnectionManager.executeQueryRS(query);
-                               if (rs.next()) {
-                                       exitSeq = rs.getLong(1);
-                               }
-                               SqlConnectionManager.releaseResultSet(rs);
-                               if (entrySeq < exitSeq) { // greater seq which time is less than sample/probe time
-                                       seq = exitSeq;
-                               } else {
-                                       seq = entrySeq;
-                               }                       
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       }
-               }
-               
-               return seq;
-       }
-       
-       public List<Long> getCallstackAddrListFromSeq(long seq) {
-               List<Long> addrs = null;
-               CallStackData csd = getCallStackDataBySeqMap().get(seq);
-               
-               if (null == csd) { // callstackdata is not in memory, find from DB
-                       List<List<Object>> callStackAddrs = CallStackInserter.getInstance()
-                                       .getCallStackDataTable().getCallStackAddrsFromDB(seq);
-                       
-                       if (null == callStackAddrs || 0 == callStackAddrs.size()
-                                       || null == callStackAddrs.get(0)) { // not found
-                               Logger.debug("CallStackData is not found for seq : " + seq);
-                               return null;
-                       }
-                       
-                       @SuppressWarnings("unchecked")
-                       List<Long> addressList = (List<Long>) callStackAddrs.get(0).get(0);
-
-                       addrs = new ArrayList<Long>();
-                       addrs.addAll(addressList);
-               } else { // callstackdata is in memory
-                       addrs = csd.getAddrs();
-               }               
-               return addrs;
-       }
-//TODO: 1. execute select query once 2. change return type - <seq, List<Long>>
-//TODO: 3. additional discussion with leak analysis implementer if needed 
-       public List<List<Long>> getArrayOfAddrListFromSeq(List<Long> seqs) {
-               List<List<Long>> addrsList = null;
-               if (null == seqs) {
-                       return null;
-               }
-               
-               addrsList = new ArrayList<List<Long>>();
-               int size = seqs.size();
-               for (int i = 0; i < size; i++) {
-                       List<Long> addrs = getCallstackAddrListFromSeq(seqs.get(i));
-                       if (null != addrs) {
-                               addrsList.add(addrs);
-                       }
-               }
-               
-               return addrsList;
-       }
-       
        public void clear() {
                callstackApiAddrByPidMap.clear();
                callstackDataBySeqMap.clear();
index 5406bd9..d212bdb 100755 (executable)
@@ -60,18 +60,4 @@ public class FunctionInst implements Streamable {
 
        }
 
-       // FIXME: black list hard coded.
-       // function instrumentation black list
-       public static boolean isInBlacklist(String funcname) {
-               if (funcname.equals("_start")) {
-                       return true;
-               }
-
-               if (funcname.contains("get_pc_thunk")) {
-                       return true;
-               }
-
-               return false;
-       }
-
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/AckMessage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/AckMessage.java
deleted file mode 100644 (file)
index 50744cf..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.tizen.dynamicanalyzer.swap.communicator;
-
-import static org.tizen.dynamicanalyzer.constant.CommonConstants.INT_SIZE;
-
-import java.util.Arrays;
-
-import org.tizen.dynamicanalyzer.util.ByteUtil;
-
-public class AckMessage {
-       private int msgID = -1;
-       private int payloadLength = -1;
-       private int returnCode = -1;
-       private byte[] payload = null; // this payload include returnCode
-
-       public static AckMessage NOACK = new AckMessage(SwapErrorCode.SUCCESS);
-
-       public AckMessage() {
-
-       }
-
-       private AckMessage(SwapErrorCode errorcode) {
-               this.msgID = 0;
-               this.returnCode = errorcode.getErrorNumber();
-       }
-
-       public int getMsgID() {
-               return msgID;
-       }
-
-       public int getPayloadLength() {
-               return payloadLength;
-       }
-
-       public int getReturnCode() {
-               return returnCode;
-       }
-
-       public byte[] getPayload() {
-               return payload;
-       }
-
-       public boolean isSuccess() {
-               if (returnCode == SwapErrorCode.SUCCESS.getErrorNumber()) {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       public boolean isCorrectID(int msgid) {
-               if (this.msgID == msgid) {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       public void parseAck(byte[] message) {
-               int index = 0;
-               this.msgID = ByteUtil.toInt(message, index);
-               index += INT_SIZE;
-               this.payloadLength = ByteUtil.toInt(message, index);
-               index += INT_SIZE;
-               if (message.length > index) {
-                       this.payload = Arrays.copyOfRange(message, index, message.length);
-
-                       // the first value of payload is usually return code
-                       this.returnCode = ByteUtil.toInt(this.payload, 0);
-               }
-       }
-}
index 04c88dd..7d80f24 100755 (executable)
@@ -33,7 +33,6 @@ import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_KEEP_ALIVE_
 import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_START_ACK;
 import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_STOP_ACK;
 import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_TARGET_INFO_ACK;
-import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_GET_PROCESS_ADD_INFO_ACK;
 import static org.tizen.dynamicanalyzer.constant.CommonConstants.INT_SIZE;
 import static org.tizen.dynamicanalyzer.constant.CommonConstants.LONG_SIZE;
 
@@ -63,6 +62,7 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.AnalyzerShellCommands;
 import org.tizen.dynamicanalyzer.common.ElfSymbolExtractor;
+import org.tizen.dynamicanalyzer.common.ErrorCode;
 import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.common.HostResult;
 import org.tizen.dynamicanalyzer.common.path.PathManager;
@@ -74,7 +74,6 @@ import org.tizen.dynamicanalyzer.handlers.ReplayTraceHandler;
 import org.tizen.dynamicanalyzer.model.AddrSymbolPair;
 import org.tizen.dynamicanalyzer.model.DeviceInfo;
 import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
-import org.tizen.dynamicanalyzer.nl.UserErrorWarningLabels;
 import org.tizen.dynamicanalyzer.project.AppInfo;
 import org.tizen.dynamicanalyzer.project.BinaryInfo;
 import org.tizen.dynamicanalyzer.project.DeviceStatusInfo;
@@ -197,8 +196,7 @@ public class Communicator30 extends BaseCommunicator {
                UserSpaceInst userSpaceInst = getUserSpaceInst();
                Logger.performance("TEST", "Start Trace", "Set application inst");
 
-               if (userSpaceInst == null || userSpaceInst.getAppInstList().isEmpty()) {
-                       StartProcessManager.getInstance().setValue(100); // set progress bar to 100%
+               if (userSpaceInst == null) {
                        Logger.error("cannot get user space inst");
                        return HostResult.ERR_MSG_START_FAIL;
                }
@@ -232,8 +230,11 @@ public class Communicator30 extends BaseCommunicator {
                        }
                }
 
+               // data receive thread create and start
+               Thread dataThread = new Thread(null, new DataChannelThread(),
+                               AnalyzerConstants.COMMUNICATOR_RECEIVE_THREAD);
                // start message send
-               AckMessage result = handleControlMessage(curDev, ret);
+               HostResult result = handleControlMessage(curDev, ret);
                Logger.performance("TEST", "Start Trace", "Make and Send start message");
 
                // FIX
@@ -242,41 +243,58 @@ public class Communicator30 extends BaseCommunicator {
                        StartProcessManager.getInstance().setValue(100);
                }
 
-               if (result != null && result.isCorrectID(MSG_START_ACK) && result.isSuccess()) {
-                       byte[] payload = result.getPayload();
-                       int index = INT_SIZE; // return code
-                       int sec = ByteUtil.toInt(payload, index);
-                       index += INT_SIZE;
-                       int nano = ByteUtil.toInt(payload, index);
-                       index += INT_SIZE;
-
-                       Global.getProject().setProfilingStartTime(new DATime(sec, nano));
-
-                       // data receive thread create and start
-                       Thread dataThread = new Thread(null, new DataChannelThread(),
-                                       AnalyzerConstants.COMMUNICATOR_RECEIVE_THREAD);
-                       dataThread.start();
-                       Logger.performance("TEST", "Start Trace", "Start data receiving thread");
-
-                       ToolbarArea.getInstance().startTimer();
-                       Logger.performance("TEST", "Start Trace", "Start Timer");
-                       SWAPLogParser.startLogParser();
-                       Logger.performance("TEST", "Start Trace", "Start SWAP log parser thread");
-
-                       // start registered data manager thread
-                       DataManagerRegistry.startThreads();
-                       Logger.performance("TEST", "Start Trace", "Start DataManager threads");
-
-                       /* Timeline */
-                       UpdateViewTimer.start();
-                       Logger.performance("TEST", "Start Trace", "Start Update view timer");
-
-                       Logger.debug("Start recorder, timer, log parser, file, thread, ui, profile , update timer");
-                       return HostResult.SUCCESS;
+               if (result.isSuccess()) {
+                       if (!isCorrectAck(MSG_START_ACK, result)) {
+                               HostResult failResult = HostResult.ERR_MSG_START_FAIL;
+                               failResult.setMessage(ErrorCode.getError(getReturnId(result.getRet())).toString());
+                               DACommunicator.setRunning(false);
+                               dataThread = null;
+                               return failResult;
+                       } else { // right ack for start
+                               byte[] data = result.getRet();
+                               int index = 0;
+                               index += INT_SIZE; // message id
+                               index += INT_SIZE; // payload length
+                               index += INT_SIZE; // return id
+                               int sec = ByteUtil.toInt(data, index);
+                               index += INT_SIZE;
+                               int nano = ByteUtil.toInt(data, index);
+
+                               Global.getProject().setProfilingStartTime(new DATime(sec, nano));
+                       }
                } else {
                        DACommunicator.setRunning(false);
-                       return HostResult.ERR_MSG_START_FAIL;
+                       dataThread = null;
+                       return result;
                }
+
+               dataThread.start();
+               Logger.performance("TEST", "Start Trace", "Start data receiving thread");
+
+               // success start trace!!
+               byte[] payload = getMessagePayload(result.getRet());
+               DATime profilingStartTime = new DATime();
+               int index = 0;
+               int sec = ByteUtil.toInt(payload, index);
+               index += INT_SIZE;
+               int nano = ByteUtil.toInt(payload, index);
+               index += INT_SIZE;
+               profilingStartTime.setSec(sec);
+               profilingStartTime.setNano(nano);
+
+               ToolbarArea.getInstance().startTimer();
+               Logger.performance("TEST", "Start Trace", "Start Timer");
+               SWAPLogParser.startLogParser();
+               Logger.performance("TEST", "Start Trace", "Start SWAP log parser thread");
+               // start registered data manager thread
+               DataManagerRegistry.startThreads();
+               Logger.performance("TEST", "Start Trace", "Start DataManager threads");
+
+               /* Timeline */
+               UpdateViewTimer.start();
+               Logger.performance("TEST", "Start Trace", "Start Update view timer");
+               Logger.debug("Start recorder, timer, log parser, file, thread, ui, profile , update timer");
+               return result;
        }
 
        private UserSpaceInst getUserSpaceInst() {
@@ -383,8 +401,8 @@ public class Communicator30 extends BaseCommunicator {
                for (int i = 0; i < size; i++) {
                        AddrSymbolPair addrSymbol = symbols.get(i);
                        String symbol = addrSymbol.getSymbol();
-
-                       if (FunctionInst.isInBlacklist(symbol)) {
+                       // FIXME: black list hard coded.
+                       if (symbol.contains("__i686.get_pc_thunk")) {
                                continue;
                        }
 
@@ -443,21 +461,19 @@ public class Communicator30 extends BaseCommunicator {
                int length = preMsg.length;
                byte[] msg = ByteUtil.getByte(msgBinInfo, length, preMsg);
 
-               AckMessage result = handleControlMessage(curDevice, msg);
-
-               if (result != null && result.isCorrectID(MSG_BINARY_INFO_ACK)) {
-                       if (result.isSuccess()
-                                       || (result.getReturnCode() == SwapErrorCode.ERR_WRONG_MESSAGE_DATA
-                                                       .getErrorNumber() && result.getPayloadLength() > INT_SIZE)) {
+               HostResult result = handleControlMessage(curDevice, msg);
 
-                               // parse binary info
-                               List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
-                               parseBinaryInfo(result.getPayload(), paths, bininfos);
-                               return HostResult.SUCCESS;
-                       }
+               if (!result.isSuccess() || !isCorrectAck(MSG_BINARY_INFO_ACK, result)) {
+                       return HostResult.ERR_BIN_INFO_GET_FAIL;
                }
 
-               return HostResult.ERR_BIN_INFO_GET_FAIL;
+               // parse binary info
+               byte[] payload = getMessagePayload(result.getRet());
+               List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
+
+               parseBinaryInfo(payload, paths, bininfos);
+
+               return result;
        }
 
        private String getFileName(String fullPath) {
@@ -469,20 +485,15 @@ public class Communicator30 extends BaseCommunicator {
        }
 
        private HostResult pullTheFile(String from, String to) {
-               boolean becomeSuper = false;
 
                try {
-                       becomeSuper = Global.getCurrentDeviceInfo().getIDevice().becomeSuperUser(true);
+                       Global.getCurrentDeviceInfo().getIDevice().becomeSuperUser(true);
                } catch (TimeoutException e) {
                        e.printStackTrace();
                } catch (SdbCommandRejectedException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
-               } finally {
-                       if (!becomeSuper) {
-                               return HostResult.ERR_BY_SECURITY_REASON;
-                       }
                }
 
                SyncResult res = CommunicatorUtils.pull(from, to);
@@ -515,8 +526,7 @@ public class Communicator30 extends BaseCommunicator {
                                .getSelectedFeatureValue(ConfigureLabels.FEATURE_DETAIL_VALUE_FUNCTION_PROFILING_SAMPLING_RATE);
                if (samplingPeriod < 0) {
                        samplingPeriod = target.getAvailableFeature(
-                                       ConfigureLabels.FEATURE_DETAIL_VALUE_FUNCTION_PROFILING_SAMPLING_RATE)
-                                       .getDefaultValue();
+                                       ConfigureLabels.FEATURE_DETAIL_VALUE_FUNCTION_PROFILING_SAMPLING_RATE).getDefaultValue();
                }
                rt.setSystemTracePeriod(systemPeriod);
                rt.setSamplingPeriod(samplingPeriod);
@@ -525,31 +535,34 @@ public class Communicator30 extends BaseCommunicator {
                int length = rtByte.length;
                byte[] msg = ByteUtil.getByte(config, length, rtByte);
 
-               AckMessage result = handleControlMessage(devInfo, msg);
+               // ByteUtils.printByteArrayForStart(msg);
 
-               if (result != null && result.isCorrectID(MSG_CONFIG_ACK) && result.isSuccess()) {
-                       if (AnalyzerManager.isRunning()) {
-                               rt.setApplyTime(ToolbarArea.getInstance().getTime());
-                               Global.getProject().addConfigHistory(rt);
-                       } else {
-                               rt.setApplyTime(0); // set time of configuration to zero
-                       }
+               HostResult result = handleControlMessage(devInfo, msg);
 
-                       Global.setCurrentConfiguration(rt);
-                       return HostResult.SUCCESS;
-               } else {
-                       Display.getDefault().asyncExec(new Runnable() {
-                               @Override
-                               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("Configuration failed..");
-                                       dialog.open();
+               if (result.isSuccess()) {
+                       if (isCorrectAck(MSG_CONFIG_ACK, result)) {
+                               if (AnalyzerManager.isRunning()) {
+                                       rt.setApplyTime(ToolbarArea.getInstance().getTime());
+                                       Global.getProject().addConfigHistory(rt);
+                               } else {
+                                       rt.setApplyTime(0); // set time of configuration to zero
                                }
-                       });
-                       return HostResult.ERR_MSG_RUNTIME_FAIL;
+
+                               Global.setCurrentConfiguration(rt);
+                               return result;
+                       }
                }
+               Display.getDefault().asyncExec(new Runnable() {
+                       @Override
+                       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("Configuration failed..");
+                               dialog.open();
+                       }
+               });
+               return HostResult.ERR_MSG_RUNTIME_FAIL;
        }
 
        @Override
@@ -558,13 +571,14 @@ public class Communicator30 extends BaseCommunicator {
                        byte[] stop = ByteUtil.toBytes(AnalyzerConstants.MSG_STOP_SWAP);
                        int length = 0;
                        byte[] stopMsg = ByteUtil.getByte(stop, length);
-                       AckMessage result = handleControlMessage(stopMsg);
+                       HostResult result = handleControlMessage(stopMsg);
 
-                       if (result != null && result.isCorrectID(MSG_STOP_ACK) && result.isSuccess()) {
-                               return HostResult.SUCCESS;
+                       if (result.isSuccess()) {
+                               if (isCorrectAck(MSG_STOP_ACK, result)) {
+                                       return result;
+                               }
                        }
                }
-
                return HostResult.ERR_MSG_STOP_FAIL;
        }
 
@@ -589,21 +603,21 @@ public class Communicator30 extends BaseCommunicator {
                }
        }
 
-       public AckMessage handleControlMessage(byte[] message) {
+       public HostResult handleControlMessage(byte[] message) {
                DeviceInfo curDev = Global.getCurrentDeviceInfo();
                if (curDev != null) {
                        return handleControlMessage(curDev, message);
                } else {
-                       return null;
+                       return HostResult.ERR_DEVICE_IS_NULL;
                }
        }
 
-       public AckMessage handleControlMessage(DeviceInfo device, byte[] message) {
+       public HostResult handleControlMessage(DeviceInfo device, byte[] message) {
                if (device != null) {
                        return handleControlMessage(device, message, true,
                                        AnalyzerConstants.CONTROL_SOCKET_TIMEOUT);
                } else {
-                       return null;
+                       return HostResult.ERR_DEVICE_IS_NULL;
                }
        }
 
@@ -620,9 +634,9 @@ public class Communicator30 extends BaseCommunicator {
         *            when wait for ack message, time limit of waiting by millisec
         * @return HostResult
         */
-       public AckMessage handleControlMessage(DeviceInfo device, byte[] message, boolean waitack,
+       public HostResult handleControlMessage(DeviceInfo device, byte[] message, boolean waitack,
                        int timeout) {
-               AckMessage retack = null;
+               HostResult result = null;
                Socket controlSock = device.getControlSock();
 
                try {
@@ -638,7 +652,7 @@ public class Communicator30 extends BaseCommunicator {
                                synchronized (controlSock) {
                                        controlSock.getOutputStream().write(message);
                                        if (!waitack) {
-                                               return AckMessage.NOACK;
+                                               return HostResult.SUCCESS;
                                        }
 
                                        Logger.debug("wait for ack of message [" + ByteUtil.toInt(message) + "]");
@@ -683,30 +697,39 @@ public class Communicator30 extends BaseCommunicator {
                                if (readsize > 0) {
                                        byte[] buf = new byte[readsize];
                                        System.arraycopy(cbuf, 0, buf, 0, readsize);
+                                       result = HostResult.SUCCESS;
                                        int ackId = ByteUtil.toInt(buf);
 
                                        // for debug
-                                       Logger.debug("ack id : " + AnalyzerUtil.toHexdecimal(ackId));
+                                       System.out.print("ack id : ");
+                                       AnalyzerUtil.printHexdecimal(ackId);
+                                       Logger.debug();
 
-                                       retack = new AckMessage();
-                                       retack.parseAck(buf);
+                                       result.setRet(buf);
                                } else {
-                                       Logger.warning("Read size for ack message is zero");
+                                       result = HostResult.ERR_RECEIVE_ACK_FAIL;
+                                       result.setMessage(result.getMessage());
                                }
                        } else {
-                               Logger.warning("Control socket connection is closed");
+                               result = HostResult.ERR_CONTROL_SOCKET_CONNECTION_CLOSED;
+                               result.setMessage("Control socket connection is closed");
                        }
                } catch (SocketException e) {
+                       result = HostResult.ERR_EXCEPTION_OCCURRED;
+                       result.setMessage(e.getMessage());
                        e.printStackTrace();
                } catch (SocketTimeoutException e) {
+                       result = HostResult.ERR_EXCEPTION_OCCURRED;
+                       result.setMessage(e.getMessage());
                        e.printStackTrace();
                } catch (IOException e) {
+                       result = HostResult.ERR_EXCEPTION_OCCURRED;
+                       result.setMessage(e.getMessage());
                        e.printStackTrace();
                } finally {
                        blocked = false;
                }
-
-               return retack;
+               return result;
        }
 
        private HostResult createControlSocket(DeviceInfo device) {
@@ -772,28 +795,52 @@ public class Communicator30 extends BaseCommunicator {
 
        public HostResult getTargetInfo(DeviceInfo device) {
                Logger.debug("Send target info...");
-               AckMessage result = handleControlMessage(device,
+               HostResult result = handleControlMessage(device,
                                ByteUtil.getByte(AnalyzerConstants.MSG_TARGET_INFO, 0));
-               if (result != null && result.isCorrectID(MSG_TARGET_INFO_ACK)) {
-                       if (result.isSuccess()) {
-                               processTargetInfo(result.getPayload(), INT_SIZE, device.getDeviceStatusInfo());
-                               return HostResult.SUCCESS;
+               if (result.isSuccess()) {
+                       // FIXME : log parsing
+                       byte[] data = result.getRet();
+                       int index = INT_SIZE * 3;
+
+                       if (isCorrectAck(MSG_TARGET_INFO_ACK, result)) {
+                               processTargetInfo(data, index, device.getDeviceStatusInfo());
+                               return result;
                        }
                }
-
                return HostResult.ERR_TARGET_INFO_GET_FAIL;
        }
 
        @Override
        public HostResult sendKeepAliveMessage(DeviceInfo device) {
                Logger.debug("Send keep alive message...");
-               AckMessage result = handleControlMessage(device,
+               HostResult result = handleControlMessage(device,
                                ByteUtil.getByte(AnalyzerConstants.MSG_KEEP_ALIVE, 0));
-               if (result != null && result.isCorrectID(MSG_KEEP_ALIVE_ACK) && result.isSuccess()) {
-                       return HostResult.SUCCESS;
-               } else {
-                       return HostResult.ERR_KEEP_ALIVE;
+               if (result.isSuccess()) {
+                       Logger.debug("keep alive message ack :" + result.getMessage());
+
+                       if (isCorrectAck(MSG_KEEP_ALIVE_ACK, result)) {
+                               return result;
+                       }
                }
+               return HostResult.ERR_KEEP_ALIVE;
+       }
+
+       private boolean isCorrectAck(int ackType, HostResult result) {
+               byte[] data = result.getRet();
+               int index = 0;
+               int msgId = ByteUtil.toInt(data, index);
+               index += INT_SIZE;
+               int paylen = ByteUtil.toInt(data, index);
+               index += INT_SIZE;
+               int retId = ByteUtil.toInt(data, index);
+               index += INT_SIZE;
+
+               if (ackType == msgId) {
+                       if (paylen != INT_SIZE || retId == ErrorCode.SUCCESS.getErrorNumber()) {
+                               return true;
+                       }
+               }
+               return false;
        }
 
        @Override
@@ -861,6 +908,21 @@ public class Communicator30 extends BaseCommunicator {
                Global.getCurrentDeviceInfo().releaseDataSock();
        }
 
+       private int getReturnId(byte[] data) {
+               int index = INT_SIZE * 2;
+               return ByteUtil.toInt(data, index);
+       }
+
+       private byte[] getMessagePayload(byte[] data) {
+               int index = INT_SIZE;
+               int size = ByteUtil.toInt(data, index);
+               index += INT_SIZE * 2;
+               size -= INT_SIZE;
+               byte[] payload = new byte[size];
+               System.arraycopy(data, index, payload, 0, size);
+               return payload;
+       }
+
        private byte[] getFunctionArgs(String symbol) {
                int start = symbol.indexOf(CommonConstants.OPEN_BRACKET);
                int end = symbol.indexOf(CommonConstants.CLOSE_BRACKET);
@@ -926,12 +988,7 @@ public class Communicator30 extends BaseCommunicator {
        public HostResult sendScreenShotRequest() {
                byte[] msg = ByteUtil.getByte(AnalyzerConstants.MSG_GET_SCREENSHOT, 0);
 
-               AckMessage result = handleControlMessage(Global.getCurrentDeviceInfo(), msg, false, 0);
-               if (result != null && result.isSuccess()) {
-                       return HostResult.SUCCESS;
-               } else {
-                       return HostResult.ERR_MSG_SEND_FAIL;
-               }
+               return handleControlMessage(Global.getCurrentDeviceInfo(), msg, false, 0);
        }
 
        public HostResult sendSWAPMessage(int messageId, List<BinarySettingData> settings) {
@@ -968,15 +1025,22 @@ public class Communicator30 extends BaseCommunicator {
                                FunctionInst functionInst = new FunctionInst();
                                AddrSymbolPair addrSymbol = symbols.get(i);
                                String symbol = addrSymbol.getSymbol();
-
-                               if (FunctionInst.isInBlacklist(symbol)) {
+                               // FIXME: black list hard coded.
+                               if (symbol.contains("__i686.get_pc_thunk")) {
                                        exSize++;
                                        continue;
                                }
-
                                functionInst.setAddr(addrSymbol.getAddr());
                                functionInst.setArgs(getFunctionArgs(addrSymbol.getSymbol()));
                                functionInstList.add(functionInst);
+
+                               // for debug
+                               // System.out.print("LIB : addr ");
+                               // AnalyzerUtil.printHexdecimal(addrSymbol.getAddr());
+                               // System.out.print("   symbol " + addrSymbol.getSymbol()
+                               // + "   args ");
+                               // ByteUtils.printByteArray(functionInst.getArgs());
+                               // System.out.println();
                        }
                        size = size - exSize;
                        libInst = ByteUtil.getByte(libInst, binaryPath, size);
@@ -990,18 +1054,17 @@ public class Communicator30 extends BaseCommunicator {
                msg = ByteUtil.getByte(msg, length, libInst);
 
                // ByteUtils.printByteArrayForStart(msg);
-               AckMessage result = handleControlMessage(curDev, msg);
+               HostResult result = handleControlMessage(curDev, msg);
 
                int ackMsg = AnalyzerConstants.MSG_SWAP_INST_ADD_ACK;
                if (messageId == AnalyzerConstants.MSG_SWAP_INST_REMOVE) {
                        ackMsg = AnalyzerConstants.MSG_SWAP_INST_REMOVE_ACK;
                }
-
-               if (result != null && result.isCorrectID(ackMsg) && result.isSuccess()) {
-                       return HostResult.SUCCESS;
-               } else {
+               if (!result.isSuccess() || !isCorrectAck(ackMsg, result)) {
                        return HostResult.ERR_BIN_INFO_GET_FAIL;
                }
+
+               return HostResult.SUCCESS;
        }
 
        public Map<Integer, String> sendProcessAddInfoMessage(List<Integer> pids) {
@@ -1025,29 +1088,28 @@ public class Communicator30 extends BaseCommunicator {
                        int length = sendbin.length;
                        byte[] msg = ByteUtil.getByte(AnalyzerConstants.MSG_GET_PROCESS_ADD_INFO, length,
                                        sendbin);
-                       AckMessage result = handleControlMessage(curDev, msg, true,
+                       HostResult result = handleControlMessage(curDev, msg, true,
                                        AnalyzerConstants.PROC_ADD_INFO_TIMEOUT);
 
-                       if (result != null && result.isCorrectID(MSG_GET_PROCESS_ADD_INFO_ACK)) {
-                               if (result.isSuccess() || result.getPayloadLength() > INT_SIZE) {
-                                       // parse binary info
-                                       byte[] payload = result.getPayload();
-                                       int index = INT_SIZE;
+                       if (result.isSuccess()
+                                       && isCorrectAck(AnalyzerConstants.MSG_GET_PROCESS_ADD_INFO_ACK, result)) {
+                               // parse binary info
+                               byte[] payload = getMessagePayload(result.getRet());
+                               int index = 0;
 
-                                       int count = ByteUtil.toInt(payload, index);
-                                       index += INT_SIZE;
+                               int count = ByteUtil.toInt(payload, index);
+                               index += INT_SIZE;
 
-                                       if (count > 0) {
-                                               infoMap = new HashMap<Integer, String>();
+                               if (count > 0) {
+                                       infoMap = new HashMap<Integer, String>();
 
-                                               for (int i = 0; i < count; i++) {
-                                                       int pid = ByteUtil.toInt(payload, index);
-                                                       index += INT_SIZE;
-                                                       String cmdname = ByteUtil.getString(payload, index);
-                                                       index += ByteUtil.getStringLength(payload, index);
+                                       for (int i = 0; i < count; i++) {
+                                               int pid = ByteUtil.toInt(payload, index);
+                                               index += INT_SIZE;
+                                               String cmdname = ByteUtil.getString(payload, index);
+                                               index += ByteUtil.getStringLength(payload, index);
 
-                                                       infoMap.put(Integer.valueOf(pid), cmdname);
-                                               }
+                                               infoMap.put(Integer.valueOf(pid), cmdname);
                                        }
                                }
                        }
@@ -1075,27 +1137,25 @@ public class Communicator30 extends BaseCommunicator {
                int length = sendBin.length;
                byte[] msg = ByteUtil.getByte(AnalyzerConstants.MSG_BINARY_INFO, length, sendBin);
 
-               AckMessage result = handleControlMessage(msg);
-
-               if (result != null && result.isCorrectID(MSG_BINARY_INFO_ACK)) {
-                       if (result.isSuccess()
-                                       || (result.getReturnCode() == SwapErrorCode.ERR_WRONG_MESSAGE_DATA
-                                                       .getErrorNumber() && result.getPayloadLength() > INT_SIZE)) {
+               HostResult result = handleControlMessage(msg);
 
-                               // parse binary info
-                               List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
-                               parseBinaryInfo(result.getPayload(), binPaths, bininfos);
-                               return HostResult.SUCCESS;
-                       }
+               if (!result.isSuccess() || !isCorrectAck(MSG_BINARY_INFO_ACK, result)) {
+                       return HostResult.ERR_BIN_INFO_GET_FAIL;
                }
 
-               return HostResult.ERR_BIN_INFO_GET_FAIL;
+               // parse binary info
+               byte[] payload = getMessagePayload(result.getRet());
+               List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
+
+               parseBinaryInfo(payload, binPaths, bininfos);
+
+               return result;
        }
 
        private void parseBinaryInfo(byte[] payload, List<String> targetPaths,
                        List<BinaryInfo> outBinaries) {
                HostResult result;
-               int index = INT_SIZE;
+               int index = 0;
 
                DeviceInfo curDevice = Global.getCurrentDeviceInfo();
 
@@ -1133,20 +1193,6 @@ public class Communicator30 extends BaseCommunicator {
                                result = pullTheFile(targetPath, localBinaryPath);
                                if (result.isSuccess()) {
                                        binInfo.setTempBinaryPath(localBinaryPath);
-                               } else if (result.equals(HostResult.ERR_BY_SECURITY_REASON)) {
-                                       // popup by security reason
-                                       Display.getDefault().syncExec(new Runnable() {
-                                               @Override
-                                               public void run() {
-                                                       final Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                                                       DADialog dialog = new DADialog(shell, SWT.NONE, 480, 153);
-                                                       dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
-                                                       dialog.setMessage(UserErrorWarningLabels.ERROR_BY_SECURITY_REASON);
-                                                       dialog.open();
-                                               }
-                                       });
-
-                                       return;
                                }
                        } else {
                                // if local binary exist already, then check for md5sum
@@ -1186,20 +1232,6 @@ public class Communicator30 extends BaseCommunicator {
                                        result = pullTheFile(targetPath, localBinaryPath);
                                        if (result.isSuccess()) {
                                                binInfo.setTempBinaryPath(localBinaryPath);
-                                       } else if (result.equals(HostResult.ERR_BY_SECURITY_REASON)) {
-                                               // popup by security reason
-                                               Display.getDefault().syncExec(new Runnable() {
-                                                       @Override
-                                                       public void run() {
-                                                               final Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                                                               DADialog dialog = new DADialog(shell, SWT.NONE, 480, 153);
-                                                               dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
-                                                               dialog.setMessage(UserErrorWarningLabels.ERROR_BY_SECURITY_REASON);
-                                                               dialog.open();
-                                                       }
-                                               });
-
-                                               return;
                                        }
                                } else {
                                        binInfo.setTempBinaryPath(localBinaryPath);
@@ -1216,8 +1248,7 @@ public class Communicator30 extends BaseCommunicator {
                } else if (CommonUtil.isMac()) {
                        cmd = AnalyzerShellCommands.CMD_MAC_MD_5_SUM;
                } else if (CommonUtil.isWin()) {
-                       cmd = PathManager.DA_TOOL_FOLDER_PATH + File.separator
-                                       + AnalyzerShellCommands.CMD_WIN_MD_5_SUM;
+                       cmd = PathManager.DA_TOOL_FOLDER_PATH + File.separator + AnalyzerShellCommands.CMD_WIN_MD_5_SUM;
                } else { // should never be here
                        Logger.error("Unknown host OS!\n");
                }
index 7201225..3ec8eb0 100755 (executable)
@@ -63,7 +63,7 @@ import org.tizen.dynamicanalyzer.swap.model.DATime;
 import org.tizen.dynamicanalyzer.swap.model.data.LogData;
 import org.tizen.dynamicanalyzer.swap.model.data.LogDataFactory;
 import org.tizen.dynamicanalyzer.swap.model.data.LogDataUtils;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.StartProcessManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.StopLogProcessor;
 import org.tizen.dynamicanalyzer.ui.toolbar.StopProcessManager;
@@ -72,6 +72,7 @@ import org.tizen.dynamicanalyzer.util.ByteUtil;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.UnsignedInt;
+import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
 import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
 
 public class MessageParser {
@@ -86,7 +87,7 @@ public class MessageParser {
        static final int MSG_BUFFER_MAX = 5000;
        static final int MSG_BUFFER_TIMER_DELAY = 5;
        static final int MSG_BUFFER_TIMER_PERIOD = 1000; // 1 second
-       static final int WAITING_TIME = 10;
+       static final int WAITING_TIME = 100;
 
        public static final int MSG_HEADER_SIZE = 20;
        final int MSG_PAYLOAD_SIZE_INDEX = 16;
@@ -229,7 +230,7 @@ public class MessageParser {
 
                AnalyzerManager.setProcessInfoArrived(true);
 
-               ThreadDataManager.getInstance().getThreadDataMaker().createMainThreadItem(pid);
+               ThreadChartManager.getInstance().getThreadDataManager().createMainThreadItem(pid);
        }
 
        private void memoryMapChanged(byte[] data) {
index 6067dd4..e4a47d3 100644 (file)
@@ -201,7 +201,6 @@ public class ProfileData extends LogData {
                                LibraryObject obj = null;
                                ProcessMemoryMap pmap = process.getProcessMemoryMap(time);
                                if (pmap == null || (obj = pmap.getLibraryByAddress(pcAddr)) == null) {
-                                       Logger.error("cannot find library for the pid and address : " + pid + ", " + pcAddr);
                                        binaryId = -1;
                                } else {
                                        binaryId = obj.getBinaryID();
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java
new file mode 100644 (file)
index 0000000..bac36d4
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * Jaewon Lim <jaewon81.lim@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
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer;
+
+import org.eclipse.nebula.widgets.grid.GridItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.sdblib.service.FileEntry;
+import org.tizen.sdblib.service.FileEntryType;
+
+public class DADeviceExplorer extends DeviceExplorer {
+       public DADeviceExplorer(Composite parent) {
+               super(parent);
+       }
+
+       @Override
+       public void updateData() {
+               if (null == current) {
+                       if (null == root) {
+                               Logger.debug("Root is empty");
+                               return;
+                       }
+                       current = root;
+               }
+               table.removeAll();
+               inputText.setText(current.getFullPath());
+
+               if (!current.getFullPath().equals(root.getFullPath())) {
+                       GridItem parentItem = new GridItem(table, SWT.NONE);
+                       parentItem.setText(ExplorerUtil.PARENT_STR);
+                       parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, current.getParent());
+               }
+               FileEntry[] children = current.getChildren();
+               int selectionIndex = -1;
+
+               if (null != children) {
+                       int size = children.length;
+                       // dirs
+                       for (int i = 0; i < size; i++) {
+                               FileEntry child = children[i];
+                               if (!child.isDirectory()
+                                               || child.getType() == FileEntryType.DirectoryLink) {
+                                       continue;
+                               }
+
+                               GridItem item = new GridItem(table, SWT.NONE);
+                               item.setText(child.getName());
+                               item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
+                               if (null != selectionStr
+                                               && selectionStr.equals(child.getFullPath())) {
+                                       int index = table.indexOf(item);
+                                       // table.getVerticalBar().setSelection(index);
+                                       table.setSelection(index);
+                                       selected = child;
+                                       inputText.setText(child.getFullPath());
+                                       selectionIndex = index;
+                               }
+                       }
+
+                       // files
+                       for (int i = 0; i < size; i++) {
+                               FileEntry child = children[i];
+                               if (child.isDirectory()
+                                               || child.getType() == FileEntryType.Link) {
+                                       continue;
+                               }
+
+                               if (null != filter && !child.getName().contains(filter)) {
+                                       continue;
+                               }
+                               GridItem item = new GridItem(table, SWT.NONE);
+                               item.setText(child.getName());
+                               item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
+                               if (null != selectionStr
+                                               && selectionStr.equals(child.getFullPath())) {
+                                       int index = table.indexOf(item);
+                                       table.setSelection(index);
+                                       selected = child;
+                                       inputText.setText(child.getFullPath());
+                                       selectionIndex = index;
+                               }
+                       }
+                       table.getVerticalBar().setMaximum(size);
+                       table.getVerticalBar().setSelection(selectionIndex);
+               }
+               table.update();
+       }
+
+}
@@ -25,7 +25,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -48,6 +48,9 @@ import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.DAFileExplorerEmptyCellRenderer;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.DAFileExplorerTableRenderer;
 import org.tizen.dynamicanalyzer.ui.widgets.DAGrid;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer;
 import org.tizen.dynamicanalyzer.util.Logger;
@@ -64,21 +67,16 @@ public class DeviceExplorer extends Composite {
        protected static int FILE = 1;
        protected static int DIRECTORY = 2;
 
-       private static int PERMISSION_STR_LENGTH = 10;
-       private static int PERMISSION_FILTER_LENGTH = 3;
-
        protected Grid table = null;
        protected DAText inputText = null;
        protected DACustomButton goButton = null;
 
        protected IDevice device = null;
        protected FileEntry root = null;
-       protected FileEntry currentDir = null;
+       protected FileEntry current = null;
        protected FileEntry selected = null;
 
-       protected String nameFilter = null;
-       protected String permissionFilterStr = null;
-       private int permissionFilter = 0; // all permission is allowed
+       protected String filter = null;
 
        protected String selectionStr = null;
 
@@ -88,14 +86,15 @@ public class DeviceExplorer extends Composite {
                public void widgetSelected(SelectionEvent e) {
                        GridItem[] selections = table.getSelection();
                        GridItem selection = selections[0];
-                       FileEntry file = (FileEntry) selection.getData(ExplorerUtil.DATA_FIEL_KEY);
-
+                       FileEntry file = (FileEntry) selection
+                                       .getData(ExplorerUtil.DATA_FIEL_KEY);
                        Logger.debug("Selected : " + file.getFullPath());
                        selected = file;
-
-                       // inputText.setText(selected.getFullPath());
+                       inputText.setText(selected.getFullPath());
                        inputText.setBackground(ColorResources.WHITE);
-                       inputText.getControl().setSelection(inputText.getText().length());
+
+                       int length = inputText.getText().length();
+                       inputText.getControl().setSelection(length, length);
                }
 
                @Override
@@ -108,18 +107,20 @@ public class DeviceExplorer extends Composite {
 
                @Override
                public void mouseUp(MouseEvent e) {
+                       // TODO Auto-generated method stub
 
                }
 
                @Override
                public void mouseDown(MouseEvent e) {
+                       // TODO Auto-generated method stub
 
                }
 
                @Override
                public void mouseDoubleClick(MouseEvent e) {
                        if (selected.isDirectory() || selected.isRoot()) {
-                               currentDir = selected;
+                               current = selected;
                                updateData();
                        }
                }
@@ -137,9 +138,10 @@ public class DeviceExplorer extends Composite {
 
                @Override
                public void keyReleased(KeyEvent e) {
-                       if (e.keyCode == 13) { // press enter
+                       if (e.keyCode == 13) {
                                adjustInput();
-                               inputText.getControl().setSelection(inputText.getText().length());
+                               inputText.getControl().setSelection(
+                                               inputText.getText().length());
                        } else {
 
                        }
@@ -154,12 +156,12 @@ public class DeviceExplorer extends Composite {
 
                @Override
                public void focusLost(FocusEvent e) {
+                       // TODO Auto-generated method stub
 
                }
 
                @Override
                public void focusGained(FocusEvent e) {
-                       // remove selection
                        GridItem[] selections = new GridItem[0];
                        table.setSelection(selections);
 
@@ -168,7 +170,7 @@ public class DeviceExplorer extends Composite {
                }
        };
 
-       public DeviceExplorer(Composite parent, boolean multiSelection) {
+       public DeviceExplorer(Composite parent) {
                super(parent, SWT.NONE);
                this.setLayout(new FormLayout());
                this.setBackground(ColorResources.DIALOG_BG_UPPER);
@@ -193,19 +195,12 @@ public class DeviceExplorer extends Composite {
                goButton.setText("Go");
                goButton.addClickListener(goButtonClickListener);
 
-               int style = SWT.BORDER | SWT.V_SCROLL;
-               if (multiSelection) {
-                       style |= SWT.MULTI;
-               } else {
-                       style |= SWT.SINGLE;
-               }
-
-               table = new DAGrid(this, style);
+               table = new DAGrid(this, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
                table.setBackground(ColorResources.TABLE_CONTENTS_NORMAL);
                table.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
                setColumns();
                table.setEmptyCellRenderer(new DAFileExplorerEmptyCellRenderer());
-               table.setItemHeight(32);
+               table.setItemHeight(46);
 
                data = new FormData();
                data.top = new FormAttachment(inputText.getControl(), 7);
@@ -218,31 +213,31 @@ public class DeviceExplorer extends Composite {
                table.addMouseListener(tableMouseListener);
        }
 
-       private void setColumns() {
+       public void setColumns() {
                GridColumn fileColumn = new GridColumn(table, SWT.NONE);
-               fileColumn.setCellRenderer(new DeviceExplorerTableRenderer());
+               fileColumn.setCellRenderer(new DAFileExplorerTableRenderer());
                fileColumn.setHeaderRenderer(new DATableHeaderRenderer());
                fileColumn.setText("File");
                fileColumn.setWidth(450);
        }
 
        public void updateData() {
-               if (null == currentDir) {
+               if (null == current) {
                        if (null == root) {
                                Logger.debug("Root is empty");
                                return;
                        }
-                       currentDir = root;
+                       current = root;
                }
                table.removeAll();
-               inputText.setText(currentDir.getFullPath());
+               inputText.setText(current.getFullPath());
 
-               if (!currentDir.getFullPath().equals(root.getFullPath())) {
+               if (!current.getFullPath().equals(root.getFullPath())) {
                        GridItem parentItem = new GridItem(table, SWT.NONE);
                        parentItem.setText(ExplorerUtil.PARENT_STR);
-                       parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, currentDir.getParent());
+                       parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, current.getParent());
                }
-               FileEntry[] children = currentDir.getChildren();
+               FileEntry[] children = current.getChildren();
                int selectionIndex = -1;
 
                if (null != children) {
@@ -250,15 +245,17 @@ public class DeviceExplorer extends Composite {
                        // dirs
                        for (int i = 0; i < size; i++) {
                                FileEntry child = children[i];
-                               if (!child.isDirectory() || child.getType() == FileEntryType.DirectoryLink) {
+                               if (!child.isDirectory()) {
                                        continue;
                                }
 
                                GridItem item = new GridItem(table, SWT.NONE);
                                item.setText(child.getName());
                                item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
-                               if (null != selectionStr && selectionStr.equals(child.getFullPath())) {
+                               if (null != selectionStr
+                                               && selectionStr.equals(child.getFullPath())) {
                                        int index = table.indexOf(item);
+                                       // table.getVerticalBar().setSelection(index);
                                        table.setSelection(index);
                                        selected = child;
                                        inputText.setText(child.getFullPath());
@@ -269,26 +266,20 @@ public class DeviceExplorer extends Composite {
                        // files
                        for (int i = 0; i < size; i++) {
                                FileEntry child = children[i];
-                               if (child.isDirectory() || child.getType() == FileEntryType.Link) {
+                               if (child.isDirectory()) {
                                        continue;
                                }
 
-                               if (null != nameFilter && !child.getName().contains(nameFilter)) {
+                               if (null != filter && !child.getName().contains(filter)) {
                                        continue;
                                }
-
-                               if (permissionFilter != 0) {
-                                       int permission = getPermission(child.getPermissions());
-                                       if((permission & permissionFilter) != permissionFilter) {
-                                               continue;
-                                       }
-                               }
-
                                GridItem item = new GridItem(table, SWT.NONE);
                                item.setText(child.getName());
                                item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
-                               if (null != selectionStr && selectionStr.equals(child.getFullPath())) {
+                               if (null != selectionStr
+                                               && selectionStr.equals(child.getFullPath())) {
                                        int index = table.indexOf(item);
+                                       // table.getVerticalBar().setSelection(index);
                                        table.setSelection(index);
                                        selected = child;
                                        inputText.setText(child.getFullPath());
@@ -304,7 +295,8 @@ public class DeviceExplorer extends Composite {
        public void setRoot(String r) {
                if (null != device && null != r && !r.isEmpty()) {
                        FileEntry rootDir = device.getFileEntry(r);
-                       if (null == rootDir || (!rootDir.isDirectory() && !rootDir.isRoot())) {
+                       if (null == rootDir
+                                       || (!rootDir.isDirectory() && !rootDir.isRoot())) {
                                Logger.debug("root path is invalid");
                                return;
                        } else {
@@ -313,8 +305,8 @@ public class DeviceExplorer extends Composite {
                }
        }
 
-       public void addTableMouseListener(MouseListener listener) {
-               table.addMouseListener(listener);
+       public Grid getTable() {
+               return table;
        }
 
        public List<FileEntry> getSelection() {
@@ -329,10 +321,12 @@ public class DeviceExplorer extends Composite {
                                        continue;
                                }
 
-                               FileEntry entry = (FileEntry) selection.getData(ExplorerUtil.DATA_FIEL_KEY);
+                               FileEntry entry = (FileEntry) selection
+                                               .getData(ExplorerUtil.DATA_FIEL_KEY);
                                fileEntries.add(entry);
                        }
-               } else if (null != inputText.getText() && !inputText.getText().isEmpty()) {
+               } else if (null != inputText.getText()
+                               && !inputText.getText().isEmpty()) {
                        String path = inputText.getText();
                        FileEntry file = device.getFileEntry(path);
                        if (null != file) {
@@ -354,95 +348,49 @@ public class DeviceExplorer extends Composite {
                                Logger.debug("invalid path");
                                return result;
                        } else if (!file.isDirectory() && !file.isRoot()) {
-                               currentDir = file.getParent();
+                               current = file.getParent();
                                selectionStr = file.getFullPath();
                                result = FILE;
                        } else {
-                               currentDir = file;
+                               current = file;
                                selectionStr = CommonConstants.EMPTY;
                                result = DIRECTORY;
                        }
                        updateData();
+                       return result;
                }
                return result;
        }
 
        private void adjustInput() {
-               String errorstr = null;
-
                String path = inputText.getText();
-               if (null != path && !path.isEmpty()) {
-                       if (path.contains(root.getFullPath())) {
-                               if (setCurrent(path) != FAIL) {
-                                       inputText.setBackground(ColorResources.WHITE);
-                               } else {
-                                       errorstr = "Failed to set current directory";
-                               }
-                       } else {
-                               errorstr = "Out of root range";
-                       }
-               } else {
-                       errorstr = "path must not empty";
+               if (null == path || path.isEmpty()) {
+                       Logger.debug("path must not empty");
+                       // inputText.setBackground(ColorResources.RED);
+                       // info.setText("Empty path");
+                       inputText.setText(current.getFullPath());
+                       return;
                }
 
-               if (errorstr != null) {
-                       Logger.debug(errorstr);
+               if (!path.contains(root.getFullPath())) {
+                       Logger.debug("Out of root range");
                        // inputText.setBackground(ColorResources.RED);
-                       // info.setText(errorstr);
-                       inputText.setText(currentDir.getFullPath());
-               }
-       }
-       
-       private int getPermission(String permissionStr) {
-               int permission = 0; 
-               if(permissionStr != null && permissionStr.length() == PERMISSION_STR_LENGTH) {
-                       for (int i = 1; i < permissionStr.length(); i++) {
-                               permission = permission << 1;
-                               switch (permissionStr.charAt(i)) {
-                               case 'r':
-                               case 'w':
-                               case 'x':
-                                       permission = permission | 1;
-                                       break;
-                               default:
-                                       // other letter is possible for permission string
-                                       // but it is not necessary to parsing
-                                       break;
-                               }
-                       }
+                       // info.setText("Out of root range");
+                       inputText.setText(current.getFullPath());
+                       return;
                }
-               
-               return permission;
-       }
 
-       /**
-        * set filename filter to filter file entry by file name
-        * 
-        * @param filter
-        *            file name filter string
-        */
-       public void setNameFilter(String filter) {
-               this.nameFilter = filter;
+               int ret = setCurrent(path);
+               if (ret != FAIL) {
+                       inputText.setBackground(ColorResources.WHITE);
+               } else {
+                       // inputText.setBackground(ColorResources.RED);
+                       // info.setText("Invalid path");
+                       inputText.setText(current.getFullPath());
+               }
        }
 
-       /**
-        * set permission filter to filter file entry by permission
-        * 
-        * @param filter
-        *            permission filter string (ex. 755)
-        */
-       public void setPermissionFilter(String filter) {
-               if (filter == null || filter.length() == PERMISSION_FILTER_LENGTH) {
-                       this.permissionFilterStr = filter;
-
-                       if (filter != null) {
-                               int userclass = filter.charAt(0) - '0';
-                               int groupclass = filter.charAt(1) - '0';
-                               int otherclass = filter.charAt(2) - '0';
-                               permissionFilter = userclass << 6 | groupclass << 3 | otherclass;
-                       } else {
-                               permissionFilter = 0;
-                       }
-               }
+       public void setFilterString(String filter) {
+               this.filter = filter;
        }
 }
@@ -25,7 +25,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -47,25 +47,26 @@ import org.tizen.dynamicanalyzer.appearance.DesignConstants;
 import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.nl.WidgetLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
 import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
 import org.tizen.dynamicanalyzer.widgets.da.base.DAMessageBox;
 import org.tizen.sdblib.service.FileEntry;
 
-public class DeviceExplorerDialog extends DAMessageBox {
+public class DeviceExplorerDilaog extends DAMessageBox {
        private DeviceExplorer explorer = null;
        private DACustomButton okButton = null;
        private DACustomButton cancelButton = null;
 
-       public DeviceExplorerDialog(Shell parentShell, boolean multiSelection) {
+       public DeviceExplorerDilaog(Shell parentShell) {
                super(parentShell);
                shell.setLayout(new FormLayout());
                shell.setSize(446, 600);
                shell.setBackground(ColorResources.DIALOG_BG_UPPER);
                shell.setText("Select binary");
 
-               explorer = new DeviceExplorer(shell, multiSelection);
+               explorer = new DADeviceExplorer(shell);
                FormData data = new FormData();
                data.top = new FormAttachment(0, 17);
                data.left = new FormAttachment(0, 6);
@@ -137,7 +138,7 @@ public class DeviceExplorerDialog extends DAMessageBox {
                        }
                });
 
-               explorer.addTableMouseListener(new MouseListener() {
+               explorer.getTable().addMouseListener(new MouseListener() {
 
                        @Override
                        public void mouseUp(MouseEvent e) {
@@ -183,11 +184,7 @@ public class DeviceExplorerDialog extends DAMessageBox {
                return explorer;
        }
 
-       public void setNameFilter(String filter) {
-               explorer.setNameFilter(filter);
-       }
-       
-       public void setPermissionFilter(String filter) {
-               explorer.setPermissionFilter(filter);
+       public void setFilter(String filter) {
+               explorer.setFilterString(filter);
        }
 }
@@ -25,7 +25,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -49,6 +49,7 @@ import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
 import org.tizen.dynamicanalyzer.ui.widgets.DAGrid;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer;
 import org.tizen.dynamicanalyzer.util.Logger;
@@ -24,7 +24,7 @@
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
 
 import java.io.File;
 
@@ -37,6 +37,7 @@ import org.eclipse.swt.graphics.Rectangle;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
 import org.tizen.dynamicanalyzer.resources.ImageResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer;
 import org.tizen.sdblib.service.FileEntry;
 
@@ -24,7 +24,7 @@
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -46,6 +46,7 @@ import org.eclipse.swt.widgets.Shell;
 import org.tizen.dynamicanalyzer.appearance.DesignConstants;
 import org.tizen.dynamicanalyzer.nl.WidgetLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
 import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
@@ -24,7 +24,7 @@
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui;
 
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridItem;
@@ -43,12 +43,12 @@ import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
 import org.tizen.dynamicanalyzer.widgets.da.base.DAMessageBox;
 import org.tizen.sdblib.service.FileEntry;
 
-public class FileTreeExplorerDialog extends DAMessageBox {
+public class FileExplorerDialog extends DAMessageBox {
        private DAFileTreeExplorer explorerTree = null;
        private DACustomButton okButton = null;
        private DACustomButton cancelButton = null;
 
-       public FileTreeExplorerDialog(Shell parentShell) {
+       public FileExplorerDialog(Shell parentShell) {
                super(parentShell);
                shell.setLayout(new FormLayout());
                shell.setSize(500, 600);
index 2f62cfe..0f5d68c 100644 (file)
@@ -44,7 +44,7 @@ import org.tizen.dynamicanalyzer.resources.FontResources;
 import org.tizen.dynamicanalyzer.resources.ImageResources;
 import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData;
 import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager;
-import org.tizen.dynamicanalyzer.ui.common.explorer.FileExplorerDialog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerTableRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerTableRenderer.java
deleted file mode 100644 (file)
index a636d08..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-package org.tizen.dynamicanalyzer.ui.common.explorer;
-
-import java.io.File;
-
-import org.eclipse.nebula.widgets.grid.GridItem;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.resources.ImageResources;
-import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer;
-import org.tizen.sdblib.service.FileEntry;
-
-public class DeviceExplorerTableRenderer extends DATableCellRenderer {
-       @Override
-       public void paint(GC gc, Object value) {
-               textTopMargin = 8;
-
-               GridItem item = (GridItem) value;
-
-               gc.setFont(item.getFont(getColumn()));
-
-               boolean drawAsSelected = isSelected();
-
-               boolean drawBackground = true;
-
-               if (isCellSelected()) {
-                       drawAsSelected = true;// (!isCellFocus());
-               }
-
-               if (drawAsSelected) {
-                       gc.setForeground(ColorResources.EXPLORER_SELECT_START);
-                       gc.setBackground(ColorResources.EXPLORER_SELECT_END);
-               } else {
-                       if (item.getParent().isEnabled()) {
-                               gc.setBackground(ColorResources.EXPLORER_CELL_BG);
-                       } else {
-                               gc.setBackground(getDisplay().getSystemColor(
-                                               SWT.COLOR_WIDGET_BACKGROUND));
-                       }
-               }
-
-               if (drawBackground && drawAsSelected) {
-                       gc.fillGradientRectangle(getBounds().x, getBounds().y,
-                                       getBounds().width, getBounds().height, true);
-               } else if (drawBackground) {
-                       gc.fillRectangle(getBounds().x, getBounds().y + 1,
-                                       getBounds().width, getBounds().height);
-               }
-
-               int x = leftMargin;
-
-               if (isCheck()) {
-                       checkRenderer.setChecked(item.getChecked(getColumn()));
-                       checkRenderer.setGrayed(item.getGrayed(getColumn()));
-                       if (!item.getParent().isEnabled()) {
-                               checkRenderer.setGrayed(true);
-                       }
-                       checkRenderer.setHover(getHoverDetail().equals("check")); //$NON-NLS-1$
-
-                       checkRenderer.setBounds(getBounds().x + x,
-                                       (getBounds().height - checkRenderer.getBounds().height) / 2
-                                                       + getBounds().y, checkRenderer.getBounds().width,
-                                       checkRenderer.getBounds().height);
-                       checkRenderer.paint(gc, null);
-
-                       x += checkRenderer.getBounds().width + insideMargin;
-               }
-
-               int width = getBounds().width - x - rightMargin;
-
-               String text = item.getText(getColumn());
-
-               if (getAlignment() == SWT.RIGHT) {
-                       int len = gc.stringExtent(text).x;
-                       if (len < width) {
-                               x += width - len;
-                       }
-               } else if (getAlignment() == SWT.CENTER) {
-                       int len = gc.stringExtent(text).x;
-                       if (len < width) {
-                               x += (width - len) / 2;
-                       }
-               }
-
-               if (drawAsSelected) {
-                       gc.setForeground(ColorResources.BLACK);
-               } else {
-                       Color fontColor = item.getForeground();
-                       if (null != fontColor) {
-                               gc.setForeground(item.getForeground());
-                       } else {
-                               gc.setForeground(ColorResources.BLACK);
-                       }
-               }
-
-               Image image = null;
-               Object object = item.getData(ExplorerUtil.DATA_FIEL_KEY);
-               if (object instanceof File) {
-                       File file = (File) object;
-                       if (file.isDirectory()) {
-                               image = ImageResources.FILE_TYPE_DIR;
-                       } else if (file.isFile()) {
-                               image = ImageResources.FILE_TYPE_FILE;
-                       } else {
-                               image = ImageResources.FILE_TYPE_ETC;
-                       }
-               } else if (object instanceof FileEntry) {
-                       FileEntry entry = (FileEntry) object;
-                       switch (entry.getType()) {
-                       case File:
-                               image = ImageResources.FILE_TYPE_FILE;
-                               break;
-                       case Link:
-                               image = ImageResources.FILE_TYPE_FILE_LINK;
-                               break;
-                       case Directory:
-                               image = ImageResources.FILE_TYPE_DIR;
-                               break;
-                       case DirectoryLink:
-                               image = ImageResources.FILE_TYPE_DIR_LINK;
-                               break;
-                       case RootEmulator:
-                               image = ImageResources.FILE_TYPE_EMULATOR;
-                               break;
-                       case RootDevice:
-                               image = ImageResources.FILE_TYPE_DEVICE;
-                               break;
-                       default:
-                               image = ImageResources.FILE_TYPE_ETC;
-                               break;
-                       }
-               }
-
-               int imageTopMargin = 0;
-               int imageLeftMargin = 16;
-               int textLeftMargin = 66;
-               Rectangle rect = getBounds();
-               gc.drawImage(image, rect.x + imageLeftMargin, rect.y + imageTopMargin);
-               gc.setFont(FontResources.getDADefaultFont());
-               gc.drawText(text, rect.x + textLeftMargin, rect.y + textTopMargin, true);
-
-               if (item.getParent().getLinesVisible()) {
-                       gc.setForeground(ColorResources.EXPLORER_CELL_LINE);
-                       gc.drawLine(rect.x, rect.y + rect.height,
-                                       rect.x + rect.width - 1, rect.y
-                                                       + rect.height);
-                       // gc.drawLine(getBounds().x + getBounds().width - 1, getBounds().y,
-                       // getBounds().x + getBounds().width - 1, getBounds().y
-                       // + getBounds().height);
-               }
-
-               if (isCellFocus()) {
-                       Rectangle focusRect = new Rectangle(getBounds().x - 1,
-                                       getBounds().y - 1, getBounds().width,
-                                       getBounds().height + 1);
-
-                       gc.setForeground(ColorResources.RED);
-                       gc.drawRectangle(focusRect);
-
-                       if (isFocus()) {
-                               focusRect.x++;
-                               focusRect.width -= 2;
-                               focusRect.y++;
-                               focusRect.height -= 2;
-
-                               gc.drawRectangle(focusRect);
-                       }
-               }
-       }
-}
index f3c6369..b16cc9d 100644 (file)
@@ -26,8 +26,6 @@
 
 package org.tizen.dynamicanalyzer.ui.file;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -40,15 +38,12 @@ import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.error.ErrorCodeManager;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.model.TableInput;
 import org.tizen.dynamicanalyzer.swap.model.data.FileData;
 import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
 import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
-import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DAApiListTableComposite;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat;
@@ -56,8 +51,6 @@ import org.tizen.dynamicanalyzer.utils.Formatter;
 
 
 public class FileApiListTable extends DAApiListTableComposite {
-       private FileDataManager fileDataManager = FileDataManager.getInstance();
-       
        public FileApiListTable(Composite parent, int compStyle, int tableStyle) {
                super(parent, compStyle, tableStyle);
                table.addSelectionListener(new SelectionListener() {
@@ -109,159 +102,118 @@ public class FileApiListTable extends DAApiListTableComposite {
                long rangeEndTime = view.getRangeEndTime();
                
                HashMap<String, Integer> findStartAPITableIndexHashMap = new HashMap<String, Integer>();
-               HashMap<Integer, Long> findStartTimeHashMap = new HashMap<Integer, Long>();
                List<Integer> removeTableIndex = new ArrayList<Integer>();
                List<TableInput> input = new ArrayList<TableInput>();
                
-               FileSelectedData selectedData = fileDataManager.getSelectedData();
-               ResultSet rs = fileDataManager.getApiDB().selectAPI(
-                               selectedData.getFileId(),
-                               selectedData.getAccessorId(),
-                               selectedData.isParentChart());
-               FileAccessor accessor = selectedData.getFileAccessor();
-               boolean isParentChart = selectedData.isParentChart();
-               String filePath = null;
-               int pid = -1;
-               int tid = -1;
-               if (rs != null) {
-                       try {
-                               int i = -1;
-                               int index = 0;
-                               while (rs.next()) {
-                                       i++;
-                                       index++;
-                                       
-                                       List<String> contentText = new ArrayList<String>();
-                                       List<String> contentData = new ArrayList<String>();
-                                       Integer startLogIndex = 0;
+               List<FileEvent> contents = FileDataManager.getInstance().getSelectedTableAPIList();
+               if(contents == null) {
+                       return null;
+               }
+               for (int i = 0; i < contents.size(); i++) {
+                       FileEvent contentTemp = contents.get(i);
+                       List<String> contentText = new ArrayList<String>();
+                       List<String> contentData = new ArrayList<String>();
 
-                                       long seq = rs.getLong(1);
-                                       long fd = rs.getLong(2);
-                                       int fdApiType = rs.getInt(3);
-                                       long time = rs.getLong(4);
-                                       int apiId = rs.getInt(5);
-                                       long errno = rs.getLong(6);
-                                       long fileSize = rs.getLong(7);
-                                       long ioSize = rs.getLong(8);
-                                       String returns = rs.getString(9);
-                                       String args = rs.getString(10); 
-                                       
-                                       if(isParentChart){
-                                               filePath = rs.getString(11);
-                                               pid = rs.getInt(12);
-                                               tid = rs.getInt(13);    
-                                       }else{
-                                               filePath = accessor.getFilePath();
-                                               pid = accessor.getPid();
-                                               tid = accessor.getTid();
-                                       }
-                                       
-                                       FileEvent fileEvent = new FileEvent(seq,  filePath, pid,
-                                                       tid, fd, fdApiType, apiId, time, fileSize, ioSize,
-                                                       args, returns, errno);
-                                       
-                                       String apiName = Global.getFunctionName(apiId);
-                                       long startTime = 0;
-                                       
-                                       boolean isExistStartTimeLog = false;
-                                       if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_START
-                                                       || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_START
-                                                       ||  fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_START) {
-                                               String keString = apiName + pid + tid + fd;
-                                               findStartAPITableIndexHashMap.put(keString, i);
-                                               findStartTimeHashMap.put(i, time);
-                                               index--;
-                                       } else if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_END
-                                                       || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_END
-                                                       ||  fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_END) {
-                                               String keString = apiName + pid + tid + fd;
-                                               startLogIndex = findStartAPITableIndexHashMap.get(keString);
-                                               findStartAPITableIndexHashMap.remove(keString);
-                                               if (null != startLogIndex) {
-                                                       contentText.add(input.get(startLogIndex.intValue())
-                                                                       .getText().get(1)); // start time
-                                                       contentData.add(input.get(startLogIndex.intValue())
-                                                                       .getText().get(1));
+                       Integer startLogIndex = 0;
+                       int fdApiType = contentTemp.getFdApiType();
 
-                                                       startTime = findStartTimeHashMap.get(startLogIndex);
-                                                       String timeFormat = Formatter
-                                                                       .toTimeFormat(time - startTime);
-                                                       String removeTimeFormat = timeFormat.replace(
-                                                                       "00:", CommonConstants.EMPTY);//$NON-NLS-1$
+                       long seq = contentTemp.getSeq();
+                       contentText.add(0, Long.toString(seq));
+                       contentData.add(Long.toString(seq));
+                       long time = contentTemp.getTime();
 
-                                                       contentText.add(removeTimeFormat); // elapsed time
-                                                       contentData.add(Long.toString(time - startTime));
-                                                       
-                                                       isExistStartTimeLog = true;
-                                                       removeTableIndex.add(startLogIndex.intValue());
-                                               } else {
-                                                       contentText.add(Formatter.toTimeFormat(time)); // start//
-                                                       contentData.add(Long.toString(time));
-                                                       contentText.add("00.000");//$NON-NLS-1$
-                                                       contentData.add("00.000");//$NON-NLS-1$
-                                               }
-                                       }
+                       boolean isExistStartTimeLog = false;
+                       if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_START
+                                       || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_START
+                                       ||  fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_START) {
+                               String keString = contentTemp.getApiName()
+                                               + contentTemp.getPid() + contentTemp.getTid() + contentTemp.getFdValue();
+                               findStartAPITableIndexHashMap.put(keString, i);
 
-                                       if (!isExistStartTimeLog) {
-                                               contentText.add(Formatter.toTimeFormat(time)); // start time
-                                               contentData.add(Long.toString(time));
-                                               contentText.add("00.000");//$NON-NLS-1$ //elapsed time
-                                               contentData.add("00.000");//$NON-NLS-1$                                                         
-                                       }
+                       } else if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_END
+                                       || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_END
+                                       ||  fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_END) {
+                               String keString = contentTemp.getApiName()
+                                               + contentTemp.getPid() + contentTemp.getTid() + contentTemp.getFdValue();
+                               startLogIndex = findStartAPITableIndexHashMap.get(keString);
+                               findStartAPITableIndexHashMap.remove(keString);
+                               if (null != startLogIndex) {
+                                       contentText.add(input.get(startLogIndex.intValue())
+                                                       .getText().get(1)); // start time
+                                       contentData.add(input.get(startLogIndex.intValue())
+                                                       .getText().get(1));
 
-                                       contentText.add(0, Integer.toString(index));
-                                       contentData.add(0, Integer.toString(index));
-                                       
-                                       contentText.add(Integer.toString(pid));
-                                       contentData.add(Integer.toString(pid));
+                                       long startTime = contents.get(startLogIndex.intValue()).getTime();
+                                       String timeFormat = Formatter
+                                                       .toTimeFormat(time - startTime);
+                                       String removeTimeFormat = timeFormat.replace(
+                                                       "00:", CommonConstants.EMPTY);//$NON-NLS-1$
 
-                                       contentText.add(Integer.toString(tid));
-                                       contentData.add(Integer.toString(tid));
+                                       contentText.add(removeTimeFormat); // elapsed time
+                                       contentData.add(Long.toString(time - startTime));
                                        
-                                       contentText.add(Long.toString(fd));
-                                       contentData.add(Long.toString(fd));
+                                       isExistStartTimeLog = true;
+                                       removeTableIndex.add(startLogIndex.intValue());
+                               } else {
+                                       contentText.add(Formatter.toTimeFormat(contentTemp
+                                                       .getTime())); // start//
+                                       contentData.add(Long.toString(contentTemp.getTime()));
+                                       contentText.add("00.000");//$NON-NLS-1$
+                                       contentData.add("00.000");//$NON-NLS-1$
+                               }
+                       }
+
+                       if (!isExistStartTimeLog) {
+                               contentText.add(Formatter.toTimeFormat(time)); // start time
+                               contentData.add(Long.toString(time));
+                               contentText.add("00.000");//$NON-NLS-1$                                                 //elapsed time
+                               contentData.add("00.000");//$NON-NLS-1$                                                         
+                       }
 
-                                       contentText.add(apiName);
-                                       contentData.add(apiName);
+                       contentText.add(Integer.toString(contentTemp.getPid()));
+                       contentData.add(Integer.toString(contentTemp.getPid()));
 
-                                       contentText.add(args);
-                                       contentData.add(args);
-                                       
-                                       contentText.add(returns);
-                                       contentData.add(returns);
-                                       
-                                       contentText.add(Long.toString(seq));
-                                       contentData.add(Long.toString(seq));
+                       contentText.add(Integer.toString(contentTemp.getTid()));
+                       contentData.add(Integer.toString(contentTemp.getTid()));
+                       
+                       contentText.add(Long.toString(contentTemp.getFdValue()));
+                       contentData.add(Long.toString(contentTemp.getFdValue()));
 
-                                       String errMsg = ErrorCodeManager.getInatance()
-                                                       .getErrorCode(errno).name();
-                                       if (null == errMsg) {
-                                               errMsg = "undefined error code"; //$NON-NLS-1$
-                                       }
+                       contentText.add(Global.getFunctionName(contentTemp.getApiId()));
+                       contentData.add(Global.getFunctionName(contentTemp.getApiId()));
 
-                                       // create DATableDataFormat
-                                       DATableDataFormat tableData = new DATableDataFormat(seq);
-                                       tableData.setLogData(fileEvent);
-                                       tableData.getData().addAll(contentData);
-                                       TableInput tableInput = new TableInput();
-                                       tableInput.setText(contentText);
-                                       tableInput.setData(tableData);
-                                       if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
-                                               tableInput.setFailed(true);
-                                       }
-                                       input.add(tableInput);
+                       contentText.add(contentTemp.getArgs());
+                       contentData.add(contentTemp.getArgs());
 
-                                       if (time >= rangeStartTime && time <= rangeEndTime) {
-                                               tableInput.setInRange(true);
-                                       }
-                               }
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
+                       contentText.add(contentTemp.getReturn());
+                       contentData.add(contentTemp.getReturn());
+
+                       String errMsg = ErrorCodeManager.getInatance()
+                                       .getErrorCode(contentTemp.getErrno()).name();
+                       if (null == errMsg) {
+                               errMsg = "undefined error code"; //$NON-NLS-1$
+                       }
+                       contentText.add(errMsg);
+                       contentData.add(errMsg);
+                       contentText.add(Long.toString(contentTemp.getFileSize()));
+                       contentData.add(Long.toString(contentTemp.getFileSize()));
+
+                       DATableDataFormat tableData = new DATableDataFormat(
+                                       contentTemp.getSeq());
+                       tableData.setLogData(contentTemp);
+                       tableData.getData().addAll(contentData);
+                       TableInput tableInput = new TableInput();
+                       tableInput.setText(contentText);
+                       tableInput.setData(tableData);
+                       if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
+                               tableInput.setFailed(true);
+                       }
+                       input.add(tableInput);
+
+                       if (time >= rangeStartTime && time <= rangeEndTime) {
+                               tableInput.setInRange(true);
                        }
                }
-               
                int removeCount = 0;
                for (int index : removeTableIndex) {
                        int removeIndex = index - removeCount;
index 485e8a0..5722dd9 100644 (file)
@@ -26,6 +26,8 @@
 
 package org.tizen.dynamicanalyzer.ui.file;
 
+import java.util.List;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -35,6 +37,7 @@ import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
 import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
@@ -142,11 +145,17 @@ public class FileApiListView extends DAViewComposite {
                }
                
                // if new event is put from swap, update table 
-               /*int newTotal = manager.getApiDB().getTotal();
-               if(tableComp.getTable().getItemCount() > 0 && newTotal > currentTotal) {
-                       manager.setSelectedData(selectedData);
-                       isUpdate = true;
-               }*/
+               List<FileEvent> events = manager.getApiDB().selectAPITable(
+                               selectedData.getFilePath(), selectedData.getPid(),
+                               selectedData.getTid(), 
+                               selectedData.isParentChart());
+               if(events != null) {
+                       if (tableComp.getTable().getItemCount() > 0
+                                       && events.size() != tableComp.getTable().getItemCount()) {
+                               manager.setSelectedTableAPIList(events);
+                               isUpdate = true;
+                       }
+               }
                
                return isUpdate;
        }
@@ -175,8 +184,12 @@ public class FileApiListView extends DAViewComposite {
                                if (null == selectedData) {
                                        return;
                                }
-                               
-                               manager.setSelectedData(selectedData);
+                               manager.setSelectedTableAPIList(
+                                               manager.getApiDB().
+                                               selectAPITable(selectedData.getFilePath(),
+                                                               selectedData.getPid(), 
+                                                               selectedData.getTid(), 
+                                                               selectedData.isParentChart()));
 
                                tableComp.updateTable();
                                tableComp.setSelectionByTime(selectionStartTime,
index 3ad7b18..a101c2c 100644 (file)
@@ -29,11 +29,13 @@ package org.tizen.dynamicanalyzer.ui.file;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.swt.graphics.Color;
+import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
 import org.tizen.dynamicanalyzer.utils.Formatter;
@@ -54,22 +56,35 @@ public class FileChart {
        private DAChartSeries accessSeries;
        
        private String filePath = null;
-       private int fileId = -1;
-       
-       private FileAccessor fileAccessor = null;
+       private int pid = -1;
+       private int tid = -1;
+       private long fd = -1;
+       private long fileSize = 0;
+       //private int parentChartIndex = -1;
        private int chartIndex = -1;
        
        private boolean isTarget = false;
        
-       public FileChart(String filePath, int fileId) {
+       public FileChart(String filePath) {
                this.filePath = filePath;
-               this.fileId = fileId;
        }
        
-       public FileChart(FileAccessor fileAccessor, int chartIndex, boolean isTarget) {
-               this.fileAccessor = fileAccessor;
-               this.chartIndex = chartIndex;
+       public FileChart(String filePath, int pid, int tid, long fd) {
+               this.filePath = filePath;
+               this.pid = pid;
+               this.tid = tid;
+               this.fd = fd;
+       }
+       
+       public FileChart(int pid, int tid, long fd, String filePath, long fileSize,
+                       boolean isTarget, int chartIndex) {
+               this.filePath = filePath;
+               this.pid = pid;
+               this.tid = tid;
+               this.fd = fd;
+               this.fileSize = fileSize;
                this.isTarget = isTarget;
+               this.chartIndex = chartIndex;
        }
 
        public void setItem(DAChartBoardItem item) {
@@ -90,15 +105,42 @@ public class FileChart {
        }
        
        /**
+        * Update API series chart
+        * @param apiList
+        */
+       public void updateApiSeries(List<FileEvent> apiList){
+               for(int i=0; i < apiList.size(); i++) {
+                       FileEvent event = apiList.get(i);
+                       if(!event.getFilePath().equals(this.filePath) || 
+                                       event.getPid() != this.pid ||
+                                       event.getTid() != this.tid) {
+                               continue;
+                       }
+                       double time = event.getTime() / TimelineConstants.MEGA_DOUBLE;
+                       String apiName = Global.getFunctionName(event.getApiId());
+                       Color color = ColorResources.FILE_API_FAILED;
+                       
+                       DAChartSeriesItem seriesItem  = new DAChartSeriesItem(time,
+                                       DAChartSeriesItem.SERIES_AREA_BAR, color, color, apiName);
+                       accessSeries.addSeriesItem(seriesItem);
+               }
+               chart.redraw();
+       }
+       
+       /**
         * Update access series chart - read/write/lock event
         * @param accessList
         */
        public void updateAccessSeries(List<FileAccess> accessList) {
                for(int i=0; i < accessList.size(); i++) {
                        FileAccess data = accessList.get(i);
-                       if(data.getAccessorId() != this.fileAccessor.getAccessorId()) {
+                       if(!data.getFilePath().equals(this.filePath) ||
+                                       data.getPid() != this.pid ||
+                                       data.getTid() != this.tid ||
+                                       data.getErroNo() != 0) {
                                continue;
                        }
+                       
                        double startTime = data.getStartTime() / TimelineConstants.MEGA_DOUBLE;
                        double endTime = data.getEndTime() / TimelineConstants.MEGA_DOUBLE;
                        
@@ -110,13 +152,13 @@ public class FileChart {
                                                        startTime, DAChartSeriesItem.SERIES_AREA_START,
                                                        ColorResources.FILE_ACCESS_CONCURRENT_READ,
                                                        ColorResources.FILE_ACCESS_CONCURRENT_READ, false,
-                                                       data.getTooltip()));
+                                                       FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_READ));
                                        if(endTime > 0) { 
                                                accessSeries.addSeriesItem(new DAChartSeriesItem(
                                                                endTime, DAChartSeriesItem.SERIES_AREA_END,
                                                                ColorResources.FILE_ACCESS_CONCURRENT_READ, 
                                                                ColorResources.FILE_ACCESS_CONCURRENT_READ, false,
-                                                               data.getTooltip()));
+                                                               FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_READ));
                                        } // else, if endTime <=0, still accessing
                                }else{
                                        // the file has been read by only one process or thread
@@ -124,13 +166,13 @@ public class FileChart {
                                                        startTime, DAChartSeriesItem.SERIES_AREA_START,
                                                        ColorResources.FILE_ACCESS_READ, 
                                                        ColorResources.FILE_ACCESS_READ, false,
-                                                       data.getTooltip()));
+                                                       FilePageLabels.FILE_CHART_TOOLTIP_READ));
                                        if(endTime > 0) {
                                                accessSeries.addSeriesItem(new DAChartSeriesItem(
                                                                endTime, DAChartSeriesItem.SERIES_AREA_END,
                                                                ColorResources.FILE_ACCESS_READ, 
                                                                ColorResources.FILE_ACCESS_READ, false,
-                                                               data.getTooltip()));
+                                                               FilePageLabels.FILE_CHART_TOOLTIP_READ));
                                        } // else, if endTime <=0, still accessing
                                }
                                break;
@@ -141,13 +183,13 @@ public class FileChart {
                                                        startTime, DAChartSeriesItem.SERIES_AREA_START,
                                                        ColorResources.FILE_ACCESS_CONCURRENT_WRITE, 
                                                        ColorResources.FILE_ACCESS_CONCURRENT_WRITE, false,
-                                                       data.getTooltip()));
+                                                       FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_WRITE));
                                        if(endTime > 0) { 
                                                accessSeries.addSeriesItem(new DAChartSeriesItem(
                                                                endTime, DAChartSeriesItem.SERIES_AREA_END,
                                                                ColorResources.FILE_ACCESS_CONCURRENT_WRITE, 
                                                                ColorResources.FILE_ACCESS_CONCURRENT_WRITE, false,
-                                                               data.getTooltip()));
+                                                               FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_WRITE));
                                        } // else, if endTime <=0, still accessing
                                }else{
                                        // the file has been written by only one process or thread
@@ -155,47 +197,43 @@ public class FileChart {
                                                        startTime, DAChartSeriesItem.SERIES_AREA_START,
                                                        ColorResources.FILE_ACCESS_WRITE, 
                                                        ColorResources.FILE_ACCESS_WRITE, false,
-                                                       data.getTooltip()));
+                                                       FilePageLabels.FILE_CHART_TOOLTIP_WRITE));
                                        if(endTime > 0) {
                                                accessSeries.addSeriesItem(new DAChartSeriesItem(
                                                                endTime, DAChartSeriesItem.SERIES_AREA_END,
                                                                ColorResources.FILE_ACCESS_WRITE, 
                                                                ColorResources.FILE_ACCESS_WRITE, false,
-                                                               data.getTooltip()));
+                                                               FilePageLabels.FILE_CHART_TOOLTIP_WRITE));
                                        }// else, if endTime <=0, still accessing
                                }
                                break;
                        case LogCenterConstants.FD_API_TYPE_LOCK_START:
                                lockSeries.addSeriesItem(new DAChartSeriesItem(
                                                startTime, DAChartSeriesItem.SERIES_AREA_START,
-                                               ColorResources.FILE_LOCK, 
-                                               ColorResources.FILE_LOCK, false,
-                                               data.getTooltip()));
+                                               ColorResources.FILE_LOCK_ACQUIRED
+                                               ColorResources.FILE_LOCK_ACQUIRED, false,
+                                               FilePageLabels.FILE_CHART_TOOLTIP_LOCK));
                                if(endTime > 0){
                                        lockSeries.addSeriesItem(new DAChartSeriesItem(
                                                        endTime, DAChartSeriesItem.SERIES_AREA_END,
-                                                       ColorResources.FILE_LOCK,
-                                                       ColorResources.FILE_LOCK, false,
-                                                       data.getTooltip()));
+                                                       ColorResources.FILE_LOCK_ACQUIRED,
+                                                       ColorResources.FILE_LOCK_ACQUIRED, false,
+                                                       FilePageLabels.FILE_CHART_TOOLTIP_LOCK));
                                }// else, if endTime <=0, still accessing
                                break;
-                       case LogCenterConstants.FD_API_TYPE_UNLOCK:
-                               lockSeries.addSeriesItem(new DAChartSeriesItem(
-                                               startTime, DAChartSeriesItem.SERIES_AREA_BAR, 
-                                               ColorResources.FILE_UNLOCK, ColorResources.FILE_UNLOCK, 
-                                               data.getTooltip()));
-                               break;
-                       case LogCenterConstants.FD_API_TYPE_LOCK_AUTORELEASE:
-                               lockSeries.addSeriesItem(new DAChartSeriesItem(
-                                               startTime, DAChartSeriesItem.SERIES_AREA_BAR, 
-                                               ColorResources.FILE_UNLOCK, ColorResources.FILE_UNLOCK, 
-                                               data.getTooltip()));
-                               break;
-                       case LogCenterConstants.FD_API_TYPE_FAIL:
-                               accessSeries.addSeriesItem(new DAChartSeriesItem(
-                                               startTime, DAChartSeriesItem.SERIES_AREA_BAR, 
-                                               ColorResources.FILE_API_FAILED, ColorResources.FILE_API_FAILED, 
-                                               data.getTooltip()));
+                       case LogCenterConstants.FD_API_TYPE_LOCK_WAIT_START:
+                               lockSeries.addSeriesItem(new DAChartSeriesItem(startTime,
+                                               DAChartSeriesItem.SERIES_AREA_START,
+                                               ColorResources.FILE_LOCK_WAITING,
+                                               ColorResources.FILE_LOCK_WAITING, false,
+                                               FilePageLabels.FILE_CHART_TOOLTIP_LOCK_WAIT));
+                               if (endTime > 0) {
+                                       lockSeries.addSeriesItem(new DAChartSeriesItem(endTime,
+                                                       DAChartSeriesItem.SERIES_AREA_END,
+                                                       ColorResources.FILE_LOCK_WAITING,
+                                                       ColorResources.FILE_LOCK_WAITING, false,
+                                                       FilePageLabels.FILE_CHART_TOOLTIP_LOCK_WAIT));
+                               }// else, if endTime <=0, still accessing
                                break;
                        }
                }
@@ -213,7 +251,8 @@ public class FileChart {
 
                for(int i =0; i < statusList.size(); i++) {
                        FileStatus data = statusList.get(i);
-                       if(data.getFileId() != this.fileId) {
+                       if(!data.getFilePath().equals(this.filePath)
+                                       || data.getErrNo() != 0) {
                                continue;
                        }
                        double time = Formatter.longTimeToDoubleTime(data.getEventTime());
@@ -270,18 +309,18 @@ public class FileChart {
                }
        }
        
-       public FileChart getChildChart(FileAccessor accessor) {
+       public FileChart getChildChart(FileEvent event) {
                int size = child.size();
                FileChart row;
                for (int i = 0; i < size; i++) {
                        row = child.get(i);
-                       if (row.getFileAccessor().equals(accessor)){
+                       if (row.getPid() == event.getPid()
+                                       && row.getTid() == event.getTid()){
                                return row;
                        }
                }
                return null;
        }
-       
        public DAChartBoardItem getItem() {
                return item;
        }
@@ -319,35 +358,51 @@ public class FileChart {
                this.filePath = filePath;
        }
 
-       public void setTarget(boolean isTarget) {
-               this.isTarget = isTarget;
+       public int getPid() {
+               return pid;
+       }
+
+       public void setPid(int pid) {
+               this.pid = pid;
+       }
+
+       public int getTid() {
+               return tid;
+       }
+
+       public void setTid(int tid) {
+               this.tid = tid;
        }
        
-       public boolean isTarget() {
-               return isTarget;
+       public long getFileSize() {
+               return fileSize;
        }
        
-       public int getChartIndex() {
-               return chartIndex;
+       public void getFileSize(long fileSize) {
+               this.fileSize = fileSize;
        }
        
-       public void setChartIndex(int index) {
-               this.chartIndex = index;
+       public long getFd() {
+               return fd;
        }
        
-       public int getFileId() {
-               return fileId;
+       public void setFd(long fd) {
+               this.fd = fd;
        }
        
-       public void setFileId(int fileId) {
-               this.fileId = fileId;
+       public void setTarget(boolean isTarget) {
+               this.isTarget = isTarget;
        }
        
-       public void setFileAccessor(FileAccessor fileAccessor) {
-               this.fileAccessor = fileAccessor;
+       public boolean isTarget() {
+               return isTarget;
        }
        
-       public  FileAccessor getFileAccessor() {
-               return fileAccessor;
+       public int getChartIndex() {
+               return chartIndex;
+       }
+       
+       public void setChartIndex(int index) {
+               this.chartIndex = index;
        }
 }
\ No newline at end of file
index c50b42d..0ceb3f3 100644 (file)
@@ -28,10 +28,12 @@ package org.tizen.dynamicanalyzer.ui.file;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
 import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.common.DALimit;
 import org.tizen.dynamicanalyzer.communicator.DACommunicator;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
@@ -46,13 +48,13 @@ import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListen
 import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
 import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
 import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
 import org.tizen.dynamicanalyzer.ui.file.manager.FileDataMaker;
 import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
 import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
+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.toolbar.ToolbarArea;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
 import org.tizen.dynamicanalyzer.utils.Formatter;
@@ -70,18 +72,14 @@ public class FileChartBoard extends DAChartBoard {
        private List<FileChart> chartList = new ArrayList<FileChart>();
        private FileDataManager fileChartManager = FileDataManager.getInstance();
        private FileDataMaker dataMaker;
+       private FileApiDB apiDB;
        private int parentChartIndex = -1;
-       private int preSelectionPId = -1;
-       private Map<Integer, int[]> chartIndexMap = new HashMap<Integer, int[]>();
-       public static final int FILE_NAME_MAX_LENGTH = 12;
-       public static final int FILE_NAME_SHOW_LINENUM = 2;
-       public static final int PROCESS_NAME_MAX_LENGTH = 16;
-       public static final int PROCESS_NAME_SHOW_LINENUM = 1;
-       public static final int MAX_LINE = 10;
+       private Map<HashSet<Object>, int[]> chartIndexMap = new HashMap<HashSet<Object>, int[]>();
        
        public FileChartBoard(Composite parent, String title) {
                super(parent, title);
                dataMaker = fileChartManager.getFileChartDataMaker();
+               apiDB = fileChartManager.getApiDB();
        }
 
        @Override
@@ -112,7 +110,7 @@ public class FileChartBoard extends DAChartBoard {
                addNewFileChartRows();
                updateStatusSeries();
                updateAccessSeries();
-               chartFilteringByPId();
+               updateApiSeries();
        }
 
        public void clear() {
@@ -129,59 +127,33 @@ public class FileChartBoard extends DAChartBoard {
                }
        }
 
-       private void chartFilteringByPId() {
-               if (null == getItemList()) {
-                       return;
-               }
-               int selectedPid = ToolbarArea.getInstance().getSelectedPid();
-               if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
-                       return;
-               }
-
-               int parentIndex = 0;
-               for (FileChart chart : chartList) {
-                       if (!chart.isParentChart()) {
-                               continue;
-                       }
-                       if (selectedPid == 0) {
-                               showItem(parentIndex);
-                       } else if (selectedPid == chart.getFileAccessor().getPid()) {
-                               showItem(parentIndex);
-                       } else {
-                               hideItem(parentIndex);
-                       }
-                       parentIndex++;
-               }
-               preSelectionPId = selectedPid;
-       }
-       
+       /**
+        * create chart rows
+        */
        private void addNewFileChartRows() {
                FileChart parent = null;
                FileChart child = null;
                String filePath = null;
-               boolean isTarget = false;
-               int fileId = 0;
-
-               // 1. get accessorlist from data maker
-               List<FileAccessor> accessorList = dataMaker.getFileAccessor();
-               if (accessorList == null) {
-                       if(dataMaker.getFileAccessorList() != null) {
-                               accessorList = dataMaker.getFileAccessorList();
+
+               List<FileEvent> eventList = dataMaker.getFileEventList();
+               if (eventList == null) {
+                       // no file event at all.
+                       if(dataMaker.getFileApiList() != null) {
+                               eventList = dataMaker.getFileApiList();
                        }else {
                                return;
                        }
                }
 
-               for (FileAccessor accessor : accessorList) {
-                       filePath = accessor.getFilePath();
-                       fileId = accessor.getFileId();
-                       isTarget = accessor.isTarget();
-                       parent = getParentChart(fileId);
-                       
+               for (FileEvent event : eventList) {
+                       filePath = event.getFilePath();
+                       parent = getParentChart(filePath);
                        if (parent == null) {
                                parentChartIndex++;
-                               parent = new FileChart(filePath, fileId);
-                               child = new FileChart(accessor,  parentChartIndex, isTarget);
+                               parent = new FileChart(filePath);
+                               child = new FileChart(event.getPid(), event.getTid(),
+                                               event.getFdValue(), event.getFilePath(),
+                                               event.getFileSize(), event.isTarget(), parentChartIndex);
                                parent.addChild(child);
                                parent.setChartIndex(parentChartIndex);
                                createChartItem(null, parent);
@@ -190,9 +162,11 @@ public class FileChartBoard extends DAChartBoard {
                                chartList.add(child);
                                putChartIndextoMap(child, parent);
                        } else {
-                               child = parent.getChildChart(accessor);
+                               child = parent.getChildChart(event);
                                if (child == null) {
-                                       child = new FileChart(accessor, parent.getChartIndex(), isTarget);
+                                       child = new FileChart(event.getPid(), event.getTid(),
+                                                       event.getFdValue(), event.getFilePath(),
+                                                       event.getFileSize(), event.isTarget(), parent.getChartIndex());
                                        parent.addChild(child);
                                        createChartItem(parent, child);
                                        chartList.add(child);
@@ -202,7 +176,6 @@ public class FileChartBoard extends DAChartBoard {
                }
        }
        
-       
        /**
         * Drawing the chart title 1. parent: file name: max 2line, last: ... 2.
         * child: "pid(PID) \n tid(TID)"
@@ -213,30 +186,29 @@ public class FileChartBoard extends DAChartBoard {
        private void createChartItem(FileChart parent, FileChart fileChart) {
                DAChartBoardItem item;
                DAChart chart;
+
                if (parent != null) { // child chart row
                        DAChartBoardItem parentItem = parent.getItem();
                        StringBuffer title = new StringBuffer();
-                       //StringBuffer fullTitle = new StringBuffer();
-                       int pid = fileChart.getFileAccessor().getPid();
+                       int pid = fileChart.getPid();
                        String processName = null;
-                       String porcessInfo = fileChart.getFileAccessor().getPid() + "(PID)"//$NON-NLS-1$
-                                       + CommonConstants.NEW_LINE + fileChart.getFileAccessor().getTid() + "(TID)";//$NON-NLS-1$
-                       if(fileChart.getFileAccessor().isTarget()) {
-                               processName = AnalyzerUtil.getProcessName(fileChart.getFileAccessor().getPid());
+                       if(fileChart.isTarget()) {
+                               processName = AnalyzerUtil.getProcessName(fileChart.getPid());
                        } else {
                                processName = DACommunicator.getProcessNameFromTarget(pid);
                        }
                        if(processName!=null){
-                               title.append(processName + CommonConstants.NEW_LINE + porcessInfo);
+                               processName = splitTitle(processName,  DALimit.MAX_STRING_LENGTH);
+                               title.append(processName + CommonConstants.NEW_LINE);
                        }else{
-                               title.append("unKnown process" + CommonConstants.NEW_LINE + porcessInfo);
+                               title.append("unKnown process" + CommonConstants.NEW_LINE);
                        }
-                       String name = splitTitle(title.toString(), PROCESS_NAME_MAX_LENGTH, false, PROCESS_NAME_SHOW_LINENUM);
-                       String fullName = splitTitle(title.toString(), PROCESS_NAME_MAX_LENGTH, false, MAX_LINE);
-                       item = new DAChartBoardItem(parentItem, name, fullName);
+                       title.append(fileChart.getPid() + "(PID)"
+                                       + CommonConstants.NEW_LINE + fileChart.getTid() + "(TID)");
+                       item = new DAChartBoardItem(parentItem, title.toString());
                        chart = item.getChart();
-                       // add a selected data 
-                       item.setData(new FileSelectedData(fileChart.getFileAccessor(),  false));
+                       item.setData(new FileSelectedData(fileChart.getFilePath(), fileChart.getPid(), 
+                                       fileChart.getTid(), fileChart.getFd(), false));
                        // disable non-target rows
                        if(!fileChart.isTarget()) {
                                item.setSelectable(false);
@@ -244,11 +216,11 @@ public class FileChartBoard extends DAChartBoard {
                        initFileChart(chart, false);
                } else { // parent chart row
                        String fileName = fileChart.getFileName();
-                       String title = splitTitle(fileName, FILE_NAME_MAX_LENGTH, true, FILE_NAME_SHOW_LINENUM);
-                       String fullName = splitTitle(fileName, FILE_NAME_MAX_LENGTH, true, MAX_LINE);
-                       item = new DAChartBoardItem(this, title, fullName);
-                       // add a selected data
-                       item.setData(new FileSelectedData(fileChart.getFileId(), true));
+                       String title = splitTitle(fileName,  DALimit.MAX_STRING_LENGTH);
+                       item = new DAChartBoardItem(this, title);
+                       item.setData(new FileSelectedData(fileChart.getFilePath(),
+                                       fileChart.getPid(), fileChart.getTid(), fileChart.getFd(),
+                                       fileChart.getFileSize(), true));
                        chart = item.getChart();
                        initFileChart(chart, true);
                }
@@ -257,6 +229,14 @@ public class FileChartBoard extends DAChartBoard {
                chart.redraw();
        }
        
+       private String splitTitle(String name, int maxLen) {
+               String title = name;
+               if (name.length() > maxLen ) {
+                       title = name.substring(0, maxLen) + "...";
+               }
+               return title;
+       }
+
        /**
         * update file open status
         */
@@ -279,16 +259,38 @@ public class FileChartBoard extends DAChartBoard {
                if (chartList.size() > 0) {
                        List<FileAccess> accessList = getVisibleAccessList();
                        for (FileChart chart : chartList) {
-                               if(!chart.isParentChart()) {
-                                       chart.updateAccessSeries(accessList);
+                               chart.updateAccessSeries(accessList);
+                       }
+               }
+       }
+
+       /**
+        * update file api
+        */
+       private void updateApiSeries() {
+               if (chartList.size() > 0) {
+                       /*List<FileEvent> apiList = apiDB.selectAPISeries(
+                                       getVisibleStartTime(), getVisibleEndTime());*/
+                       List<FileEvent> apiList = apiDB.selectFailedAPISeries(
+                                       getVisibleStartTime(), getVisibleEndTime());
+                       if (null == apiList) {
+                               // no file event within the selected time range.
+                               return;
+                       }
+                       for (FileChart chart : chartList) {
+                               if (chart.isParentChart()) {
+                                       continue;
                                }
+                               chart.updateApiSeries(apiList);
                        }
+               } else { // chartList.size() <= 0
+                                       // no data at all
                }
        }
 
-       private FileChart getParentChart(int id) {
+       private FileChart getParentChart(String filePath) {
                for (FileChart chart : chartList) {
-                       if (chart.getFileId()==id && chart.isParentChart()) {
+                       if (chart.getFilePath().equals(filePath) && chart.isParentChart()) {
                                return chart;
                        }
                }
@@ -326,86 +328,33 @@ public class FileChartBoard extends DAChartBoard {
        }
 
        private void putChartIndextoMap(FileChart childChart, FileChart parentChart ) {
-               chartIndexMap.put(childChart.getFileAccessor().getAccessorId(), 
-                               new int[] { parentChart.getChartIndex(), parentChart.getLastChildChartIndex() });
+               HashSet<Object> set = new HashSet<Object>();
+               set.add(childChart.getFilePath());
+               set.add(childChart.getPid());
+               set.add(childChart.getTid());
+               chartIndexMap.put(set, new int[] { parentChart.getChartIndex(),
+                               parentChart.getLastChildChartIndex() });
        }
        
-       public int[] getChartIndex(int accessorId) {
-               if(chartIndexMap.containsKey(accessorId)) {
-                       return chartIndexMap.get(accessorId);
+       public int[] getChartIndex(FileEvent event) {
+               HashSet<Object> set = new HashSet<Object>();
+               set.add(event.getFilePath());
+               set.add(event.getPid());
+               set.add(event.getTid());
+               if(chartIndexMap.containsKey(set)) {
+                       return chartIndexMap.get(set);
                }
-               Logger.error("couldn't find index:" + accessorId );
+               Logger.error("couldn't find index:" + event.getFilePath() + ","
+                               + event.getPid() + "," + event.getTid());
                return new int[]{0, 0};
        }
        
-       private String splitTitle(String name, int maxLen, boolean isParent, int line) {
-               String titleString = null;
-               String title[] = null;
-               int i = 1;
-               int len = name.length();
-               if (!isParent) {
-                       title = name.split("\n");
-                       name = title[0];
-               }
-               if (len > maxLen) {
-                       String slice = splitTitle(name, maxLen);
-                       String spare = name.substring(maxLen, name.length());
-                       titleString = slice;
-                       if (spare.length() <= maxLen) {
-                               if (line > 1) {
-                                       titleString += (CommonConstants.NEW_LINE + spare);
-                               } else {
-                                       titleString += "...";//$NON-NLS-1$
-                               }
-                       } else {
-                               while (spare.length() > maxLen) {
-                                       i++;
-                                       slice = splitTitle(spare, maxLen);
-                                       spare = spare.substring(maxLen, spare.length());
-                                       titleString += (CommonConstants.NEW_LINE + slice);
-                                       if (i >= line) {
-                                               break;
-                                       }
-                               }
-                               if (i < line) {
-                                       titleString += (CommonConstants.NEW_LINE + spare);
-                               } else {
-                                       String temp = (titleString.substring(titleString.length()
-                                                       - maxLen, titleString.length() - 3) + "...");//$NON-NLS-1$
-                                       String text = titleString.substring(0, titleString.length()
-                                                       - maxLen);
-                                       text += temp;
-                                       titleString = text;
-                               }
-                       }
-               } else {
-                       titleString = name;
-               }
-               if (!isParent) {
-                       titleString += (CommonConstants.NEW_LINE + title[1]
-                                       + CommonConstants.NEW_LINE + title[2]);
-               }
-               return titleString;
-       }
-
-       private String splitTitle(String text, int maxLen) {
-               String spare = null;
-               int len = text.length();
-               if(len > maxLen) {
-                       spare = text.substring(0, maxLen);
-               }else{
-                       spare = text;
-               }
-               return spare;
-       }
-       
-       
        private void initFileChart(DAChart chart, boolean isParent) {
                if (null == chart) {
                        return;
                }
                DAChartPlot plot = chart.getPlot();
-               chart.setChartRenderer(new FileChartRenderer());        // need to custom Chart Render for file chart
+
                if (isParent) {
                        DAChartSeries statusSeries = new DAChartSeries(
                                        FilePageLabels.FILE_CHART_SERIES,
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartRenderer.java
deleted file mode 100644 (file)
index 89490f3..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyeran kim <hyearn74.kim@samsung.com>
- * Jungwook Ryu <jungwook.ryu@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.file;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartRenderer;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
-import org.tizen.dynamicanalyzer.widgets.helper.ColorResources;
-
-public class FileChartRenderer extends DAChartRenderer {
-       @Override
-       protected void drawToGc(GC gc, DAChart chart) {
-               if (!preDraw(gc, chart)) {
-                       return;
-               }
-               for (int i = 0; i < seriesList.size(); i++) {
-                       drawSeries(gc, seriesList.get(i), i, seriesList.size());
-               }
-       }
-
-       /*
-        * This method is one of Chart renderer. Real chart using this method is
-        * File Analysis chart. This renderer draws Rectangle and bar in multi line
-        * and need specific seriesItem type. Type is possible SERIES_AREA_START,
-        * SERIES_AREA_END, SERIES_AREA_BAR.
-        */
-       private void drawSeries(GC gc, DAChartSeries series, int seriesIndex, int seriesSize) {
-               List<DAChartSeriesItem> seriesItems = series.getSeriesItemList();
-               if (null == seriesItems) {
-                       return;
-               }
-
-               int seriesItemSize = seriesItems.size();
-               if (seriesItemSize < 1) {
-                       return;
-               }
-               int index = series.getPrevIndexByXvalue(plot.getVisibleStartX());
-               if (index < 0) {
-                       index = 0;
-               }
-
-               final int MARGIN_PERCENT = 20; // It's mean 20%
-               final int STATE_AREA_BAR_WIDTH = 1;
-               final int DIAGONAL_DIVIDE = 16; // divided in 16 pieces for diagonal box
-                                                                               // size.
-               final Color DIAGONAL_BOX_COLOR = ColorResources.WHITE;
-               /*
-                * Formula to divide in equal series heights.
-                */
-               int margin = (int) ((r.height * (MARGIN_PERCENT / 100.0)) / (seriesSize + 1));
-               int areaHeight = (r.height - margin * (seriesSize + 1)) / seriesSize;
-               int pixcelStartY = (margin * (seriesIndex + 1)) + (areaHeight * seriesIndex);
-
-               List<DAChartSeriesItem> barSeriesItems = new ArrayList<DAChartSeriesItem>();
-               /*
-                * 1. Draw Start/End Status Area.
-                */
-               for (int i = 0; i < seriesItemSize; i++) {
-                       DAChartSeriesItem seriesItem = seriesItems.get(i);
-                       DAChartSeriesItem endSeriesItem = null;
-
-                       int type = (int) seriesItem.getY();
-                       if (DAChartSeriesItem.SERIES_AREA_START == type) {
-                               int startCount = 1;
-                               /*
-                                * Find end series item matched with start series item.
-                                */
-                               for (int ii = i + 1; ii < seriesItemSize; ii++) {
-                                       DAChartSeriesItem nextSeriesItem = seriesItems.get(ii);
-                                       int nextType = (int) nextSeriesItem.getY();
-                                       if (nextType == DAChartSeriesItem.SERIES_AREA_START) {
-                                               startCount += 1;
-                                       } else if (nextType == DAChartSeriesItem.SERIES_AREA_END) {
-                                               --startCount;
-                                               if (startCount == 0) {
-                                                       endSeriesItem = nextSeriesItem;
-                                                       break;
-                                               }
-                                       }
-                               }
-                               Color foreGroundColor = seriesItem.getGradationForegroundColor();
-                               Color backGroundcolor = seriesItem.getColor();
-                               gc.setForeground(foreGroundColor);
-                               gc.setBackground(backGroundcolor);
-
-                               int pixcelStartX = plot.getXPixcelFromX(seriesItem.getX(), r);
-                               int pixcelWidth;
-                               if (endSeriesItem != null) {
-                                       pixcelWidth = plot.getXPixcelFromX(endSeriesItem.getX(), r) - pixcelStartX;
-                               } else {
-                                       /*
-                                        * endSeriesItem is null when end series is not exist. this
-                                        * case, draw it as much as getValidEndX.
-                                        */
-                                       pixcelWidth = plot.getXPixcelFromX(plot.getValidEndX(), r) - pixcelStartX;
-                               }
-                               if (pixcelWidth == 0) { // If diffence is less than 1 second.
-                                                                               // draw 1 pixcel force.
-                                       pixcelWidth = 1;
-                               }
-                               gc.fillRectangle(pixcelStartX, pixcelStartY, pixcelWidth, areaHeight);
-
-                               /*
-                                * If it's needed, draw diagonal line. diagonal line is composed
-                                * of square boxes. Direction of diagonal line is right top to
-                                * left down like "/".
-                                */
-                               if (seriesItem.getDiagonal()) {
-                                       int diagonalBoxSize = areaHeight / DIAGONAL_DIVIDE;
-                                       gc.setForeground(DIAGONAL_BOX_COLOR);
-                                       gc.setBackground(DIAGONAL_BOX_COLOR);
-                                       for (int j = 0; j < 16; j++) {
-                                               int boxY = pixcelStartY + (diagonalBoxSize * j);
-                                               // Formula to draw diagonal line like "/"
-                                               for (int k = 3 - (j % 4) - (j / 4); k < pixcelWidth; k = k + 3) {
-                                                       int boxX = diagonalBoxSize * k + pixcelStartX;
-                                                       if (pixcelStartX <= boxX && boxX <= pixcelWidth + pixcelStartX - diagonalBoxSize) {
-                                                               gc.fillRectangle(boxX, boxY, diagonalBoxSize, diagonalBoxSize);
-                                                       }
-                                               }
-                                       }
-                               }
-                       } else if (DAChartSeriesItem.SERIES_AREA_BAR == type) {
-                               barSeriesItems.add(seriesItem);
-                       }
-               }
-
-               /*
-                * 2. Draw Bar series
-                */
-               for (int i = 0; i < barSeriesItems.size(); i++) {
-                       DAChartSeriesItem barSeriesItem = barSeriesItems.get(i);
-                       Color foreGroundColor = barSeriesItem.getGradationForegroundColor();
-                       Color backGroundcolor = barSeriesItem.getColor();
-                       gc.setForeground(foreGroundColor);
-                       gc.setBackground(backGroundcolor);
-                       int pixcelStartX = plot.getXPixcelFromX(barSeriesItem.getX(), r);
-                       gc.fillRectangle(pixcelStartX, pixcelStartY, STATE_AREA_BAR_WIDTH, areaHeight);
-               }
-       }
-
-       @Override
-       protected void drawTooltip(GC gc) {
-               DAChartPlotTooltip tooltip = plot.getTooltip();
-               if (tooltip == null || tooltip.shouldBeDrawn() == false || tooltip.getStartVal() == -1) {
-                       return;
-               }
-
-               gc.setFont(tooltip.getFont());
-
-               List<String> tooltipTexts = new ArrayList<String>();
-               List<String> tooltipTimes = new ArrayList<String>();
-               List<Color> tooltipColor = new ArrayList<Color>();
-
-               // make text,time & draw auxiliary line
-               int textWidthMax = 0;
-               double realXVal = tooltip.getStartVal();
-               int tooltipSize = 0;
-
-               int seriesIndex = (int) (seriesList.size() * tooltip.getYPosRatio());
-               DAChartSeries series = seriesList.get(seriesIndex);
-
-               int index = series.getPrevIndexByXvalue(realXVal);
-               String text = "";
-               String time = "";
-               Color color;
-               if (index >= 0) {
-                       double xVal = series.getSeriesItemList().get(index).getX();
-
-                       text += series.getName() + ": ";
-                       time += toTimeFormat(xVal);
-
-                       if (true == series.isSummarizeTooltip() && true == checkOverlapFromPrevItem(series, index)) {
-                               text += series.getSummarizeString();
-                       } else {
-                               text += series.getSeriesItemList().get(index).getTooltipText();
-                       }
-
-                       gc.setForeground(tooltip.getLineColor());
-                       gc.setLineStyle(SWT.LINE_DOT);
-                       gc.setLineWidth(1);
-                       gc.drawLine(plot.getXPixcelFromX(xVal), 0, plot.getXPixcelFromX(xVal), r.height);
-                       gc.setLineStyle(SWT.LINE_CUSTOM);
-
-                       // event color
-                       color = series.getSeriesItemList().get(index).getColor();
-               } else {
-                       return;
-               }
-
-               tooltipTexts.add(text);
-               tooltipTimes.add(time);
-               tooltipColor.add(color);
-
-               int textWidth = gc.textExtent(text).x + DAChartPlotTooltip.TOOLTIP_TIME_MARGIN + gc.textExtent(time).x;
-               if (textWidthMax < textWidth) {
-                       textWidthMax = textWidth;
-               }
-
-               /*
-                * Drawing Tooltip Box
-                */
-               int preTextWidthMargin = DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH
-                               + DAChartPlotTooltip.TOOLTIP_MARGIN;
-               int startX = getTooltipStartX(realXVal, textWidthMax + preTextWidthMargin, DAChartPlotTooltip.TOOLTIP_MARGIN);
-
-               int totalHeight;
-               if (!tooltipTexts.isEmpty()) {
-                       totalHeight = gc.textExtent(tooltipTexts.get(0)).y + DAChartPlotTooltip.TOOLTIP_MARGIN
-                                       + DAChartPlotTooltip.TOOLTIP_MARGIN;
-               } else {
-                       totalHeight = DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT + DAChartPlotTooltip.TOOLTIP_MARGIN
-                                       + DAChartPlotTooltip.TOOLTIP_MARGIN;
-               }
-
-               int startY;
-               tooltipSize = seriesList.size();
-               int heightPerSeries = r.height / tooltipSize;
-               int currentSeries = ((int) (tooltip.getYPosRatio() * tooltipSize) + 1);
-               startY = r.y + (heightPerSeries * (currentSeries - 1)) + (heightPerSeries / 2) - (totalHeight / 2);
-               if (r.height - startY - totalHeight < 0) {
-                       startY = r.height - totalHeight - 1;
-                       if (startY < 0) {
-                               startY = DAChartPlotTooltip.TOOLTIP_MARGIN;
-                       }
-               }
-               gc.setAlpha(150);
-               gc.setBackground(tooltip.getBackgroundColor());
-               gc.setForeground(tooltip.getForegroundColor());
-               gc.fillGradientRectangle(startX, startY, preTextWidthMargin + textWidthMax + DAChartPlotTooltip.TOOLTIP_MARGIN,
-                               totalHeight, true);
-               gc.setAlpha(255);
-               gc.setForeground(tooltip.getLineColor());
-               gc.drawRoundRectangle(startX, startY, preTextWidthMargin + textWidthMax + DAChartPlotTooltip.TOOLTIP_MARGIN,
-                               totalHeight, 5, 5);
-               gc.setFont(tooltip.getFont());
-
-               /*
-                * Drawing Tooltip contents (color square, text, time)
-                */
-               int y = startY + DAChartPlotTooltip.TOOLTIP_MARGIN;
-               Color col = tooltipColor.get(0);
-               if (col == null) {
-                       gc.setBackground(series.getColor());
-               } else {
-                       gc.setBackground(col);
-               }
-
-               gc.fillRectangle(startX + DAChartPlotTooltip.TOOLTIP_MARGIN, y + DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT / 2
-                               - DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH / 2, DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH,
-                               DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH);
-               gc.setBackground(tooltip.getBackgroundColor());
-
-               gc.setForeground(tooltip.getTextColor());
-               gc.drawText(tooltipTexts.get(0), startX + DAChartPlotTooltip.TOOLTIP_MARGIN
-                               + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + DAChartPlotTooltip.TOOLTIP_MARGIN, y,
-                               SWT.DRAW_DELIMITER | SWT.DRAW_TRANSPARENT);
-
-               gc.setForeground(tooltip.getTimeColor());
-               String timeStr = tooltipTimes.get(0);
-               gc.drawText(tooltipTimes.get(0), startX + DAChartPlotTooltip.TOOLTIP_MARGIN
-                               + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + DAChartPlotTooltip.TOOLTIP_MARGIN + textWidthMax
-                               - DAChartPlotTooltip.TOOLTIP_MARGIN - gc.textExtent(timeStr).x, y, SWT.DRAW_DELIMITER
-                               | SWT.DRAW_TRANSPARENT);
-       }
-}
index 9e7f52a..a61c7f1 100644 (file)
 
 package org.tizen.dynamicanalyzer.ui.file;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DASelectionData;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
@@ -42,6 +39,7 @@ import org.tizen.dynamicanalyzer.swap.model.data.LogData;
 import org.tizen.dynamicanalyzer.ui.common.SetRangeMarkerMouseMoveListener;
 import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;
 import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
 import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser;
@@ -82,13 +80,19 @@ public class FileChartView extends DAViewComposite {
                        @Override
                        public void handleSelectionEvent(DAChartBoardItem item) {
                                lastSelectedItemForSummary = item;
-                               DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) fileChartBoard
-                                               .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
-                               long selectiedStartTime = (long) (intervalMarker.getStartVal() * TimelineConstants.MEGA_DOUBLE);
-                               long selectiedEndTime = (long) (intervalMarker.getEndVal() * TimelineConstants.MEGA_DOUBLE);
-                               AnalyzerManager.getCurrentPage().updateView(
-                                                               new DASelectionData(FilePage.chartViewID, 
-                                                                               selectiedStartTime, selectiedEndTime, item.getData(), null));
+                               AnalyzerManager
+                                               .getCurrentPage().updateView(
+                                                               new DASelectionData(
+                                                                               FilePage.chartViewID,
+                                                                               (long) (((DAChartPlotIntervalMarker) fileChartBoard
+                                                                                               .getMarkers()
+                                                                                               .get(UICommonConstants.SELECTION_MARKER_INDEX))
+                                                                                               .getStartVal() * TimelineConstants.MEGA_DOUBLE),
+                                                                               (long) (((DAChartPlotIntervalMarker) fileChartBoard
+                                                                                               .getMarkers()
+                                                                                               .get(UICommonConstants.SELECTION_MARKER_INDEX))
+                                                                                               .getEndVal() * TimelineConstants.MEGA_DOUBLE),
+                                                                               item.getData(), null));
                        }
                });
 
@@ -161,29 +165,19 @@ public class FileChartView extends DAViewComposite {
                                if (null != obData && (obData instanceof LogData)) { // summary
                                        LogData ldata = (LogData) obData;
                                        dataTime = ldata.getTime();
-                                       
                                        long seq = ldata.getSeq();
-                                        
-                                       ResultSet rs = chartManager.getApiDB().selectFileEventBySeq(seq);
-                                       if (rs != null) {
-                                               try {
-                                                       if (rs.next()) {
-                                                               int selectedIndex[] = fileChartBoard.getChartIndex(rs.getInt(1));
-                                                               fileChartBoard.selectItem(selectedIndex[0], selectedIndex[1]);
-                                                               if (null != lastSelectedItemForSummary) {
-                                                                       AnalyzerManager.getCurrentPage().updateView(
-                                                                                       new DASelectionData(FilePage.chartViewID,
-                                                                                                       dataTime, dataTime,
-                                                                                                       lastSelectedItemForSummary.getData(),
-                                                                                                       null));
-                                                               }
-                                                       }
-                                               } catch (SQLException e) {
-                                                       e.printStackTrace();
-                                               } finally {
-                                                       SqlConnectionManager.releaseResultSet(rs);
+                                       FileEvent event = chartManager.getApiDB().selectFileEventBySeq(seq);
+                                       if(event != null) {
+                                               int selectedIndex[] = fileChartBoard.getChartIndex(event);
+                                               fileChartBoard.selectItem(selectedIndex[0], selectedIndex[1]);
+                                               if (null != lastSelectedItemForSummary) {
+                                                       AnalyzerManager.getCurrentPage().updateView(
+                                                                       new DASelectionData(FilePage.chartViewID,
+                                                                                       dataTime, dataTime,
+                                                                                       lastSelectedItemForSummary.getData(),
+                                                                                       null));
                                                }
-                                       }
+                                       } // else, no need to update
                                }
                        } else {
                                dataTime = selData.getStartTime();
index 44980d5..342f38c 100644 (file)
@@ -26,8 +26,7 @@
 
 package org.tizen.dynamicanalyzer.ui.file;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.util.List;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.PaintEvent;
@@ -35,30 +34,22 @@ import org.eclipse.swt.events.PaintListener;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Canvas;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
 import org.tizen.dynamicanalyzer.common.DASelectionData;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
 import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData;
 
 public class FileDetailInfoView extends DAViewComposite {
-       
        private Canvas canvas = null;
        private String fileName = AnalyzerLabels.EMPTY_STRING;
        private String filePath = AnalyzerLabels.EMPTY_STRING;
@@ -69,10 +60,7 @@ public class FileDetailInfoView extends DAViewComposite {
        private int failedApiCount = 0;
 
        private FileDataManager fileChartManager = FileDataManager.getInstance();
-       
-       private Text detailText = null;
-       private Label labelMessage = null;
-       
+
        private void init() {
                fileName = AnalyzerLabels.EMPTY_STRING;
                filePath = AnalyzerLabels.EMPTY_STRING;
@@ -88,37 +76,49 @@ public class FileDetailInfoView extends DAViewComposite {
                this.setLayout(new FillLayout());
 
                setTitle(FilePageLabels.FILE_DETAILS_TITLE);
-               
-               Composite detailCom = getContentArea();
-               detailCom.setBackground(ColorResources.VIEW_BG_COLOR);
-               detailCom.setLayout(new FormLayout());
-               FormData labelData = new FormData();
-               labelData.top = new FormAttachment(0, 0);
-               labelData.left = new FormAttachment(0, 0);
-               labelData.right = new FormAttachment(100, 0);
-               labelData.bottom = new FormAttachment(100, 0);
-               detailCom.setLayoutData(labelData);
 
-               Composite contents = detailCom;
+               Composite contents = getContentArea();
                contents.setBackground(ColorResources.VIEW_BG_COLOR);
-               contents.setLayout(new FormLayout());
-
-               detailText = new Text(contents, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-               detailText.setBackground(ColorResources.VIEW_BG_COLOR);
-               detailText.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
-               detailText.setFont(FontResources.DETAIL_INFO_FONT);
-
-               FormData buttonData = new FormData();
-               buttonData.top = new FormAttachment(labelMessage, 0);
-               buttonData.left = new FormAttachment(0, 0);
-               buttonData.right = new FormAttachment(100, 0);
-               buttonData.bottom = new FormAttachment(100, 0);
-               detailText.setLayoutData(buttonData);
-               detailText.getVerticalBar().setVisible(true);
-               detailText.getHorizontalBar().setVisible(true);
-               
-               showDetailInfoContents();
-
+               contents.setLayout(new FillLayout());
+               canvas = new Canvas(contents, SWT.TRANSPARENT);
+               canvas.addPaintListener(new PaintListener() {
+
+                       @Override
+                       public void paintControl(PaintEvent e) {
+                               int x = 0;
+                               int y = 0;
+                               Rectangle rect = canvas.getBounds();
+                               e.gc.setBackground(ColorResources.VIEW_BG_COLOR);
+                               e.gc.fillRectangle(rect.x, rect.y, rect.width, rect.height);
+                               e.gc.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
+                               e.gc.setFont(FontResources.DETAIL_INFO_FONT);
+
+                               String pathLabel = FilePageLabels.FILE_DETAILS_FILE_PATH;
+                               Point pathSize = e.gc.textExtent(pathLabel, SWT.DRAW_MNEMONIC);
+                               int fontHeight = pathSize.y + 5;
+                               e.gc.drawString(FilePageLabels.FILE_DETAILS_FILE_PATH
+                                               + filePath, x + 10, y += fontHeight);
+                               
+                               e.gc.drawString( FilePageLabels.FILE_DETAILS_FILE_NAME 
+                                               + fileName, x += 10, y += fontHeight);
+                               
+                               e.gc.drawString(
+                                               FilePageLabels.FILE_DETAILS_TOTAL_SIZE
+                                                               + Long.toString(fileSize), x, y += fontHeight);
+                               e.gc.drawString(
+                                               FilePageLabels.FILE_DETAILS_READ_SIZE
+                                                               + Long.toString(readSize), x, y += fontHeight);
+                               e.gc.drawString(
+                                               FilePageLabels.FILE_DETAILS_WRITE_SIZE
+                                                               + Long.toString(writeSize), x, y += fontHeight);
+                               e.gc.drawString(
+                                               FilePageLabels.FILE_DETAILS_API_COUNT
+                                                               + Integer.toString(apiCount), x,
+                                               y += fontHeight);
+                               e.gc.drawString(FilePageLabels.FILE_DETAILS_FAILED_API_COUNT
+                                               + Integer.toString(failedApiCount), x, y += fontHeight);
+                       }
+               });
        }
 
        @Override
@@ -140,122 +140,61 @@ public class FileDetailInfoView extends DAViewComposite {
 
        private void updateData(FileSelectedData selectData) {
                failedApiCount = 0;
-               ResultSet rs = fileChartManager.getApiDB().selectAPI(
-                               selectData.getFileId(),
-                               selectData.getAccessorId(),
-                               selectData.isParentChart());
-               boolean isParentChart = selectData.isParentChart();
-               FileAccessor accessor = selectData.getFileAccessor();
-               String path = null;
-               if (rs != null) {
-                       try {
-                               long readSize = 0;
-                               long writeSize = 0;
-                               int apiCount = 0;
-                               
-                               while (rs.next()) {
-                                       apiCount++;
-                                       if(rs.isFirst()) {
-                                               if(isParentChart){
-                                                       path = rs.getString(11);
-                                               }else{
-                                                       path = accessor.getFilePath();
-                                               }
-                                               boolean isFindSpliter = false;
-                                               for(int i= path.length()-1; i > 0; i--) {
-                                                       char character = path.charAt(i);
-                                                       if(Character.toString(character).matches("\\/")) { //$NON-NLS-1$*/
-                                                               filePath = path.substring(0, i+1);
-                                                               fileName = path.substring(i+1, path.length());
-                                                               isFindSpliter = true;
-                                                               break;
-                                                       }
-                                               }
-                                               if(!isFindSpliter) {
-                                                       fileName = path;
-                                                       filePath = AnalyzerLabels.EMPTY_STRING;
-                                               }
-                                       }else if(rs.isLast()) {
-                                               fileSize = rs.getLong(7);
+               List<FileEvent> 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(events.size()-1).getFileSize();
+                       
+                       long readSize = 0;
+                       long writeSize = 0;
+                       int apiCount = events.size();
+                       for(FileEvent data : events) {
+                               switch(data.getFdApiType()) {
+                               case LogCenterConstants.FD_API_TYPE_OPEN:
+                               case LogCenterConstants.FD_API_TYPE_CLOSE:
+                               case LogCenterConstants.FD_API_TYPE_OTHERS:
+                               case LogCenterConstants.FD_API_TYPE_UNLOCK:
+                                       if(data.getErrno() != 0) {
+                                               failedApiCount++;
+                                       }
+                                       break;
+                               case LogCenterConstants.FD_API_TYPE_LOCK_END:
+                                       if(data.getErrno() != 0) {
+                                               failedApiCount++;
                                        }
-                                       int apiType = rs.getInt(3);
-                                       long errno = rs.getInt(6);
-                                       long ioSize = rs.getLong(8);
-                                       
-                                       switch(apiType) {
-                                       case LogCenterConstants.FD_API_TYPE_OPEN:
-                                       case LogCenterConstants.FD_API_TYPE_CLOSE:
-                                       case LogCenterConstants.FD_API_TYPE_OTHERS:
-                                       case LogCenterConstants.FD_API_TYPE_UNLOCK:
-                                               if(errno != 0) {
-                                                       failedApiCount++;
-                                               }
-                                               break;
-                                       case LogCenterConstants.FD_API_TYPE_LOCK_END:
-                                               if(errno != 0) {
-                                                       failedApiCount++;
-                                               }
-                                               apiCount--;
-                                               break;
-                                       case LogCenterConstants.FD_API_TYPE_READ_END:
-                                               if(errno != 0) {
-                                                       failedApiCount++;
-                                               }
-                                               readSize += ioSize;
-                                               // except *_end event among the API count
-                                               apiCount--;
-                                               break;
-                                       case LogCenterConstants.FD_API_TYPE_WRITE_END:
-                                               if(errno != 0) {
-                                                       failedApiCount++;
-                                               }
-                                               writeSize += ioSize;
-                                               // except *_end event among the API count
-                                               apiCount--;
-                                               break;
-                                       default:
-                                               break;
+                                       apiCount--;
+                                       break;
+                               case LogCenterConstants.FD_API_TYPE_READ_END:
+                                       if(data.getErrno() != 0) {
+                                               failedApiCount++;
                                        }
+                                       readSize += data.getSize();
+                                       // except *_end event among the API count
+                                       apiCount--;
+                                       break;
+                               case LogCenterConstants.FD_API_TYPE_WRITE_END:
+                                       if(data.getErrno() != 0) {
+                                               failedApiCount++;
+                                       }
+                                       writeSize += data.getSize();
+                                       // except *_end event among the API count
+                                       apiCount--;
+                                       break;
+                               default:
+                                       break;
                                }
-                               this.apiCount = apiCount;
-                               this.readSize = readSize;
-                               this.writeSize = writeSize;
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
                        }
-                       
-                       showDetailInfoContents();
+                       this.apiCount = apiCount;
+                       this.readSize = readSize;
+                       this.writeSize = writeSize;
                }
+               canvas.redraw();
        }
 
-       private void showDetailInfoContents() {
-               StringBuffer strDetailView = new StringBuffer(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_FILE_PATH );
-               strDetailView.append(filePath);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_FILE_NAME);
-               strDetailView.append(fileName);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_TOTAL_SIZE);
-               strDetailView.append(fileSize);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_READ_SIZE);
-               strDetailView.append(readSize);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_WRITE_SIZE);
-               strDetailView.append(writeSize);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_API_COUNT);
-               strDetailView.append(apiCount);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_FAILED_API_COUNT);
-               strDetailView.append(failedApiCount);
-               strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
-               detailText.setText(strDetailView.toString());
-       }
-       
        @Override
        public Control getControl() {
                return canvas;
@@ -264,6 +203,6 @@ public class FileDetailInfoView extends DAViewComposite {
        @Override
        public void clear() {
                init();
-               showDetailInfoContents();
+               canvas.redraw();
        }
 }
index 4ea9582..a67867d 100644 (file)
@@ -27,7 +27,6 @@
 package org.tizen.dynamicanalyzer.ui.file.data;
 
 import java.sql.PreparedStatement;
-import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -39,113 +38,100 @@ import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
 
+// read, write, lock
 public class FileAccessDB extends DBTable {
-       private static final String ACCESS_TABLE = FilePageLabels.FILE_ACCESS_DB;
-       private static final String DBTYPE_TOOLTIP = "VARCHAR(256)";//$NON-NLS-1$
-       
+       private static final String TABLE_NAME = FilePageLabels.FILE_ACCESS_DB;
+
        public static enum COLUMN {
-               ACCESSOR_ID(1, "ACCESSOR_ID"),
-               API_TYPE(2, "API_TYPE"),
-               START_TIME(3, "START_TIME"),
-               END_TIME(4, "END_TIME"),
-               TOOLTIP(5, "TOOLTIP");
+               PID(0, "pid"),
+               TID(1, "tid"),
+               FILE_PATH(2, "filePath"),
+               FD(3, "fd"),
+               API_TYPE(4, "apiType"),
+               START_TIME(5, "startTime"),
+               END_TIME(6, "endTime"),
+               ERRNO(7, "errNo"),
+               FILE_SIZE(8, "fileSize");
                
-               private final int index;
+               private final int value;
                private final String name;
-               private COLUMN(int index, String name) {
-                       this.index = index;
+               private COLUMN(int value, String name) {
+                       this.value = value;
                        this.name = name;
                }
 
-               public int getIndex() {
-                       return index;
+               public int getValue() {
+                       return value;
                }
                
                public String getName() {
                        return name;
                }
        }
-
+               
        public FileAccessDB() {
-               addColumn(new DBColumn(COLUMN.ACCESSOR_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.START_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.END_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, DBTYPE_TOOLTIP));
+               addColumn(new DBColumn(COLUMN.PID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.TID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.FILE_PATH.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+               addColumn(new DBColumn(COLUMN.FD.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.API_TYPE.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.START_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.END_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.ERRNO.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.FILE_SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
        }
        
        @Override
        public String getTableName() {
-               return ACCESS_TABLE;
+               return TABLE_NAME;
        }
 
        private static final String selectAll = selectAll();
        private static final String SELECT_QUERY = "select "
                        + selectAll
-                       + " from " + ACCESS_TABLE; 
-       
-       public List<FileAccess> executeQueryRS(String query) {
-               List<FileAccess> resultData = new ArrayList<FileAccess>();
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs != null) {
-                       try {
-                               while (rs.next()) {
-                                       FileAccess access= getDataFromResultSet(rs);
-                                       if (access != null) {
-                                               resultData.add(access);
-                                       }
-                               }
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
-                       }
-               }
-               return resultData;
-       }
-       
-       public FileAccess getDataFromResultSet(ResultSet rs) {
-               FileAccess access = null;
-               try {
-                       access = new FileAccess(
-                                       rs.getInt(COLUMN.ACCESSOR_ID.index),
-                                       rs.getInt(COLUMN.API_TYPE.index),
-                                       rs.getLong(COLUMN.START_TIME.index),
-                                       rs.getLong(COLUMN.END_TIME.index),
-                                       rs.getString(COLUMN.TOOLTIP.index)
-                                       );
-               } catch (SQLException e) {
-                       e.printStackTrace();
-                       return null;
-               }
-               return access;
-       }
+                       + " from " + TABLE_NAME; //$NON-NLS-1$
        
        public void insert(FileAccess insertData) {
                List<List<Object>> insertDataList = new ArrayList<List<Object>>();
                insertDataList.add(insertData.getDBData());
                insertData(insertDataList);
        }
-       
+
        public List<FileAccess> select() {
                String query = String.format(SELECT_QUERY);
                
                List<FileAccess> accessList = new ArrayList<FileAccess>();
-               accessList = executeQueryRS(query);
+               
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                       return accessList;
+               }
+               
+               for (List<Object> data : result) {
+                       accessList.add(new FileAccess(data));
+               }
                return accessList;
        }
-
+       
        public static String selectAll() {
                StringBuffer selectAllColumn = new StringBuffer();
-               selectAllColumn.append(COLUMN.ACCESSOR_ID.name);
+               selectAllColumn.append(COLUMN.PID.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.TID.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.FILE_PATH.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.FD.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.API_TYPE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.API_TYPE.name);
+               selectAllColumn.append(COLUMN.START_TIME.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.START_TIME.name);
+               selectAllColumn.append(COLUMN.END_TIME.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.END_TIME.name);
+               selectAllColumn.append(COLUMN.ERRNO.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.TOOLTIP.name);
+               selectAllColumn.append(COLUMN.FILE_SIZE.getName());
                return selectAllColumn.toString();
        }
        
@@ -158,11 +144,15 @@ public class FileAccessDB extends DBTable {
                        isPrepared = false;
                } else {
                        try {
-                               prep.setInt(1, (Integer)(rowData.get(0)));
-                               prep.setInt(2, (Integer)(rowData.get(1)));
-                               prep.setLong(3, (Long)(rowData.get(2)));
-                               prep.setLong(4, (Long)(rowData.get(3)));
-                               prep.setString(5, (String)(rowData.get(4)));
+                               prep.setInt(1, (Integer)(rowData.get(COLUMN.PID.getValue())));
+                               prep.setInt(2, (Integer)(rowData.get(COLUMN.TID.getValue())));
+                               prep.setString(3, (String)(rowData.get(COLUMN.FILE_PATH.getValue())));
+                               prep.setLong(4, (Long)(rowData.get(COLUMN.FD.getValue())));
+                               prep.setInt(5, (Integer)(rowData.get(COLUMN.API_TYPE.getValue())));
+                               prep.setLong(6, (Long)(rowData.get(COLUMN.START_TIME.getValue())));
+                               prep.setLong(7, (Long)(rowData.get(COLUMN.END_TIME.getValue())));
+                               prep.setLong(8, (Long)(rowData.get(COLUMN.ERRNO.getValue())));
+                               prep.setLong(9, (Long)(rowData.get(COLUMN.FILE_SIZE.getValue())));
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessorDB.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessorDB.java
deleted file mode 100644 (file)
index b75f87d..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyeran Kim <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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.file.data;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.database.DBColumn;
-import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
-import org.tizen.dynamicanalyzer.nl.FilePageLabels;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
-
-public class FileAccessorDB  extends DBTable {
-       private static final String ACCESSOR_TABLE = FilePageLabels.FILE_ACCESSOR_DB;
-       private static final String DBTYPE_FILEPATH = "VARCHAR(4096)";//$NON-NLS-1$
-
-       public static enum COLUMN {
-               ACCESSOR_ID(1, "ACCESSOR_ID"),
-               FILE_ID(2, "FILE_ID"),
-               FILE_PATH(3, "FILE_PATH"),
-               PID(4, "PID"),
-               TID(5, "TID"),
-               IS_TARGET(6, "IS_TARGET");
-               
-               
-               private final int index;
-               private final String name;
-               private COLUMN(int index, String name) {
-                       this.index = index;
-                       this.name = name;
-               }
-
-               public int getIndex() {
-                       return index;
-               }
-               
-               public String getName() {
-                       return name;
-               }
-       }
-               
-       public FileAccessorDB() {
-               addColumn(new DBColumn(COLUMN.ACCESSOR_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.FILE_PATH.name, DBConstants.NOT_NULL, DBTYPE_FILEPATH));
-               addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.IS_TARGET.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_BOOLEAN));
-       }
-       
-       
-       @Override
-       public String getTableName() {
-               return ACCESSOR_TABLE;
-       }
-
-       private static final String selectAll = selectAll();
-       private static final String SELECT_QUERY = "select "
-                       + selectAll
-                       + " from " + ACCESSOR_TABLE; //$NON-NLS-1$
-       
-       public List<FileAccessor> executeQueryRS(String query) {
-               List<FileAccessor> resultData = new ArrayList<FileAccessor>();
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs != null) {
-                       try {
-                               while (rs.next()) {
-                                       FileAccessor accessor = getDataFromResultSet(rs);
-                                       if (accessor != null) {
-                                               resultData.add(accessor);
-                                       }
-                               }
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
-                       }
-               }
-               return resultData;
-       }
-       
-       public FileAccessor getDataFromResultSet(ResultSet rs) {
-               FileAccessor accessor = null;
-               try {
-                       accessor = new FileAccessor(
-                                       rs.getInt(COLUMN.ACCESSOR_ID.index),
-                                       rs.getInt(COLUMN.FILE_ID.index),
-                                       rs.getString(COLUMN.FILE_PATH.index),
-                                       rs.getInt(COLUMN.PID.index),
-                                       rs.getInt(COLUMN.TID.index),
-                                       rs.getBoolean(COLUMN.IS_TARGET.index)
-                                       );
-               } catch (SQLException e) {
-                       e.printStackTrace();
-                       return null;
-               }
-               return accessor;
-       }
-       
-       public void insert(FileAccessor insertData) {
-               List<List<Object>> insertDataList = new ArrayList<List<Object>>();
-               insertDataList.add(insertData.getDBData());
-               insertData(insertDataList);
-       }
-
-       public List<FileAccessor> select() {
-               String query = String.format(SELECT_QUERY);
-               
-               List<FileAccessor> accessorList = new ArrayList<FileAccessor>();
-               accessorList = executeQueryRS(query);
-               return accessorList;
-       }
-       
-       public static String selectAll() {
-               StringBuffer selectAllColumn = new StringBuffer();
-               selectAllColumn.append(COLUMN.ACCESSOR_ID.name);
-               selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.FILE_ID.name);
-               selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.FILE_PATH.name);
-               selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.PID.name);
-               selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.TID.name);
-               selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.IS_TARGET.name);
-               return selectAllColumn.toString();
-       }
-       
-       @Override
-       public boolean prepare(PreparedStatement prep, List<Object> rowData) {
-               boolean isPrepared = true;
-
-               int columnsize = getColumnSize();
-               if (columnsize != rowData.size()) {
-                       isPrepared = false;
-               } else {
-                       try {
-                               prep.setInt(1, (Integer)(rowData.get(0)));
-                               prep.setInt(2, (Integer)(rowData.get(1)));
-                               prep.setString(3, (String)(rowData.get(2)));
-                               prep.setLong(4, (Integer)(rowData.get(3)));
-                               prep.setInt(5, (Integer)(rowData.get(4)));
-                               prep.setBoolean(6, (Boolean)(rowData.get(5)));
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                               isPrepared = false;
-                       }
-               }
-               return isPrepared;
-       }
-}
index d72e7f7..9ba6b7a 100644 (file)
@@ -27,7 +27,6 @@
 package org.tizen.dynamicanalyzer.ui.file.data;
 
 import java.sql.PreparedStatement;
-import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -38,37 +37,38 @@ import org.tizen.dynamicanalyzer.database.DBTable;
 import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.nl.FilePageLabels;
 import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
+import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
 
 public class FileApiDB extends DBTable {
-       private static final String API_TABLE = FilePageLabels.FILE_API_DB;
-       private static final String ACCESSOR_TABLE = FilePageLabels.FILE_ACCESSOR_DB;
-       private static final String DBTYPE_RETUREN_VALUE = "VARCHAR(1024)";//$NON-NLS-1$
-       private static final String DBTYPE_ARGUMENTS_VALUE = "VARCHAR(1024)";//$NON-NLS-1$
+       private static final String TABLE_NAME = FilePageLabels.FILE_API_DB;
        
        public static enum COLUMN {
-               SEQUENCE_NUMBER(1, "SEQUENCE_NUMBER"),
-               FILE_ID(2, "FILE_ID"),
-               ACCESSOR_ID(3, "ACCESSOR_ID"),
-               FD(4, "FD"),
-               API_TYPE(5, "API_TYPE"),
-               EVENT_TIME(6, "EVENT_TIME"),
-               API_ID(7, "API_ID"),
-               ERRNO(8, "ERRNO"),
-               IO_SIZE(9, "IO_SIZE"),
-               FILE_SIZE(10, "FILE_SIZE"),
-               RETURN_VALUE(11, "RETURN_VALUE"),
-               ARGUMENTS_VALUE(12, "ARGUMENTS_VALUE");
+               SEQ(0, "seq"),
+               FILE_PATH(1, "filePath"),
+               PID(2, "pid"),
+               TID(3, "tid"),
+               FD(4, "fd"),
+               API_TYPE(5, "apiType"),
+               EVENT_TIME(6, "eventTime"),
+               API_ID(7, "apiId"),
+               ERRNO(8, "errNo"),
+               IO_SIZE(9, "ioSize"),
+               FILE_SIZE(10, "fileSize"),
+               SIZE(11, "size"),
+               RETURN_VALUE(12, "returnValue"),
+               ARGS(13, "args"),
+               TARGET(14, "target");
                
-               public final int index;
-               public final String name;
+               private final int value;
+               private final String name;
 
-               private COLUMN(int index, String name) {
-                       this.index = index;
+               private COLUMN(int value, String name) {
+                       this.value = value;
                        this.name = name;
                }
 
-               public int getIndex() {
-                       return index;
+               public int getValue() {
+                       return value;
                }
                
                public String getName() {
@@ -78,180 +78,204 @@ public class FileApiDB extends DBTable {
 
        @Override
        public String getTableName() {
-               return API_TABLE;
+               return TABLE_NAME;
        }
-       
+
        public FileApiDB() {
-               addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.ACCESSOR_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.FD.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.EVENT_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.API_ID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.ERRNO.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.IO_SIZE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.FILE_SIZE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY, DBTYPE_RETUREN_VALUE));
-               addColumn(new DBColumn(COLUMN.ARGUMENTS_VALUE.name, DBConstants.EMPTY, DBTYPE_ARGUMENTS_VALUE));
+               addColumn(new DBColumn(COLUMN.SEQ.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.FILE_PATH.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+               addColumn(new DBColumn(COLUMN.PID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.TID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.FD.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.API_TYPE.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.EVENT_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.API_ID.getName(), DBConstants.EMPTY, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.ERRNO.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.IO_SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.FILE_SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.RETURN_VALUE.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+               addColumn(new DBColumn(COLUMN.ARGS.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+               addColumn(new DBColumn(COLUMN.TARGET.getName(), DBConstants.NOT_NULL, DBConstants.BOOLEAN));
        }
        
        private static final String selectAllColumn = selectAllColumn();
+       private static final String SELECT_API_SERIES = "select " 
+                       + selectAllColumn
+                       +" from "
+                       + TABLE_NAME + " where %s <= " 
+                       + COLUMN.EVENT_TIME.getName() + " and "
+                       + COLUMN.EVENT_TIME.getName()
+                       + " <= %s";
+       
+       private static final String SELECT_FAILED_API_SERIES = "select " 
+                       + selectAllColumn
+                       +" from "
+                       + TABLE_NAME + " where %s <= " 
+                       + COLUMN.EVENT_TIME.getName() + " and "
+                       + COLUMN.EVENT_TIME.getName()
+                       + " <= %s" + " and "
+                       + COLUMN.ERRNO.getName() + " != '0'" + " and "
+                       + COLUMN.TARGET.getName() + " = 'true'";
+       
+       private static final String SELECT_APIS_FOR_CHILD = "select "
+                       + selectAllColumn
+                       +" from "
+                       + TABLE_NAME + " where " 
+                       + COLUMN.FILE_PATH.getName() + " = '%s'" + " and "
+                       + COLUMN.PID.getName() + " = '%d'" + " and "
+                       + COLUMN.TID.getName() + " = '%d'" + " and "
+                       + COLUMN.TARGET.getName() + " = 'true'";
 
-       private static final String SELECT_APIS_FOR_CHILD = 
-                       "select "
-                       + "SEQUENCE_NUMBER, FD, API_TYPE, EVENT_TIME, API_ID, ERRNO, "
-                       + "IO_SIZE, FILE_SIZE, RETURN_VALUE, ARGUMENTS_VALUE "
-                       + "from " + API_TABLE
-                       + " where "
-                       + "ACCESSOR_ID" + " = '%d'"; 
-               
-
-       private static final String SELECT_APIS_FOR_PARENT= 
-                       "select "
-                       + "api.SEQUENCE_NUMBER, api.FD, api.API_TYPE, api.EVENT_TIME, api.API_ID, api.ERRNO, "
-                       + "api.IO_SIZE, api.FILE_SIZE, api.RETURN_VALUE, api.ARGUMENTS_VALUE, "
-                       + "accessor.FILE_PATH, accessor.PID, accessor.TID "
-                       + "from " + API_TABLE + " api, " + ACCESSOR_TABLE + " accessor " 
-                       + "where "
-                       + "api.FILE_ID" + " = '%d'"+ " and " + "api.ACCESSOR_ID = accessor.ACCESSOR_ID";
+       private static final String SELECT_APIS_FOR_PARENT= "select "
+                       + selectAllColumn
+                       + " from "
+                       + TABLE_NAME + " where " 
+                       + COLUMN.FILE_PATH.getName()  + " = '%s'" + " and "
+                       + COLUMN.TARGET.getName() + " = 'true'";
        
        private static final String SELECT_FILE_EVENT_BY_SEQ = "select "
-                       + COLUMN.ACCESSOR_ID.name
-                       + " from " + API_TABLE 
-                       + " where " 
-                       + COLUMN.SEQUENCE_NUMBER.name  + " = '%d'";
-       
-       private static final String SELECT_APIS_COUNT = 
-                       "select COUNT(*) from " + API_TABLE;
+                       //+ selectAllColumn
+                       + COLUMN.SEQ.getName() + " , "
+                       + COLUMN.FILE_PATH.getName() + " , "
+                       + COLUMN.PID.getName() + " , "
+                       + COLUMN.TID.getName()
+                       + " from "
+                       + TABLE_NAME + " where " 
+                       + COLUMN.SEQ.getName()  + " = '%d'"+ " and "
+                       + COLUMN.TARGET.getName() + " = 'true'";
        
        private static final String SELECT_ALL = "select "
                        + selectAllColumn
                        + " from "
-                       + API_TABLE;
+                       + TABLE_NAME + " where " 
+                       + COLUMN.TARGET.getName() + " = 'true'";
        
-       public ResultSet executeQuery(String query) {
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               return rs;
+       public void insert(List<List<Object>> insertData) {
+               insertData(insertData);
        }
        
-       public List<FileEvent> executeQueryRS(String query) {
-               List<FileEvent> resultData = new ArrayList<FileEvent>();
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs != null) {
-                       try {
-                               while (rs.next()) {
-                                       FileEvent event= getDataFromResultSet(rs);
-                                       if (event != null) {
-                                               resultData.add(event);
-                                       }
-                               }
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
-                       }
+       // for updating api series chart
+       public List<FileEvent> selectAPISeries(double visibleStartTime,
+                       double visibleEndTime) {
+               double selectStartTime = visibleStartTime * TimelineConstants.MEGA_DOUBLE;
+               double selectEndTime = visibleEndTime * TimelineConstants.MEGA_DOUBLE;
+               
+               String query = String.format(SELECT_API_SERIES, selectStartTime, selectEndTime);
+               
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                       return null;
                }
-               return resultData;
+               List<FileEvent> apiList = new ArrayList<FileEvent>();
+               for (List<Object> data : result) {
+                       apiList.add(new FileEvent(data));
+               }
+               return apiList;
        }
        
-       public FileEvent getDataFromResultSet(ResultSet rs) {
-               FileEvent event = null;
-               try {
-                       event = new FileEvent(
-                                       rs.getLong(COLUMN.SEQUENCE_NUMBER.index),
-                                       rs.getInt(COLUMN.FILE_ID.index),
-                                       rs.getInt(COLUMN.ACCESSOR_ID.index),
-                                       rs.getLong(COLUMN.FD.index),
-                                       rs.getInt(COLUMN.API_TYPE.index),
-                                       rs.getInt(COLUMN.API_ID.index),
-                                       rs.getLong(COLUMN.EVENT_TIME.index),
-                                       rs.getLong(COLUMN.FILE_SIZE.index),
-                                       rs.getLong(COLUMN.IO_SIZE.index),
-                                       rs.getString(COLUMN.ARGUMENTS_VALUE.index),
-                                       rs.getString(COLUMN.RETURN_VALUE.index),
-                                       rs.getLong(COLUMN.ERRNO.index)
-                                       );
-               } catch (SQLException e) {
-                       e.printStackTrace();
+       // for updating api series chart
+       public List<FileEvent> selectFailedAPISeries(double visibleStartTime,
+                       double visibleEndTime) {
+               double selectStartTime = visibleStartTime
+                               * TimelineConstants.MEGA_DOUBLE;
+               double selectEndTime = visibleEndTime * TimelineConstants.MEGA_DOUBLE;
+
+               String query = String.format(SELECT_FAILED_API_SERIES, selectStartTime,
+                               selectEndTime);
+
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
                        return null;
                }
-               return event;
-       }
-       
-       public void insert(List<List<Object>> insertData) {
-               insertData(insertData);
+               List<FileEvent> apiList = new ArrayList<FileEvent>();
+               for (List<Object> data : result) {
+                       apiList.add(new FileEvent(data));
+               }
+               return apiList;
        }
-       
-       // for updating api table view and detail view
-       public ResultSet selectAPI(int fileId, int accessorId,
+
+       // for updating api table view
+       public List<FileEvent> selectAPITable(String filePath, int pid, int tid,
                        boolean isParentChart) {
-               String query = null;
+               String query = String.format(SELECT_APIS_FOR_CHILD, filePath, pid, tid);
                if (isParentChart) {
-                       query = String.format(SELECT_APIS_FOR_PARENT, fileId);
-               }else{
-                       query = String.format(SELECT_APIS_FOR_CHILD, accessorId);
+                       query = String
+                                       .format(SELECT_APIS_FOR_PARENT, filePath);
+               }
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                       return null;
                }
-               return SqlConnectionManager.executeQueryRS(query);
+               List<FileEvent> apiList = new ArrayList<FileEvent>();
+               for (List<Object> data : result) {
+                       apiList.add(new FileEvent(data));
+               }
+               return apiList;
        }
-       
-       // to get chart row index
-       public ResultSet selectFileEventBySeq(long seq) {
-               String query = String.format(SELECT_FILE_EVENT_BY_SEQ, seq);
 
-               return SqlConnectionManager.executeQueryRS(query);
-       }
-       
-       public int getTotal() {
-               String query = SELECT_APIS_COUNT;
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               int totalCount = 0;
-               if (rs != null) {
-                       try {
-                               if (rs.next()) {
-                                       totalCount = rs.getInt(1);
-                               }
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
-                       }
+       public FileEvent selectFileEventBySeq(long seq) {
+               String query = String.format(SELECT_FILE_EVENT_BY_SEQ, seq);
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                       return null;
                }
-               return totalCount;
+               List<Object> data = result.get(0);
+               FileEvent fileEvent = new FileEvent(
+                               (Long) data.get(FileApiDB.COLUMN.SEQ.getValue()),
+                               (String) data.get(FileApiDB.COLUMN.FILE_PATH.getValue()),
+                               (Integer) data.get(FileApiDB.COLUMN.PID.getValue()),
+                               (Integer) data.get(FileApiDB.COLUMN.TID.getValue()));
+               return fileEvent;
        }
        
        public List<FileEvent> select() {
                String query = String.format(SELECT_ALL);
-               List<FileEvent> apiList = executeQueryRS(query);
-       
+               
+               List<FileEvent> apiList = new ArrayList<FileEvent>();
+               
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                       return apiList;
+               }
+               
+               for (List<Object> data : result) {
+                       apiList.add(new FileEvent(data));
+               }
                return apiList;
        }
        
        public static String selectAllColumn() {
                StringBuffer selectAllColumn = new StringBuffer();
-               selectAllColumn.append(COLUMN.SEQUENCE_NUMBER.name);
+               selectAllColumn.append(COLUMN.SEQ.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.FILE_PATH.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.PID.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.TID.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.FILE_ID.name);
+               selectAllColumn.append(COLUMN.FD.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.ACCESSOR_ID.name);
+               selectAllColumn.append(COLUMN.API_TYPE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.FD.name);
+               selectAllColumn.append(COLUMN.EVENT_TIME.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.API_TYPE.name);
+               selectAllColumn.append(COLUMN.API_ID.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.EVENT_TIME.name);
+               selectAllColumn.append(COLUMN.ERRNO.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.API_ID.name);
+               selectAllColumn.append(COLUMN.IO_SIZE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.ERRNO.name);
+               selectAllColumn.append(COLUMN.FILE_SIZE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.IO_SIZE.name);
+               selectAllColumn.append(COLUMN.SIZE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.FILE_SIZE.name);
+               selectAllColumn.append(COLUMN.RETURN_VALUE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.RETURN_VALUE.name);
+               selectAllColumn.append(COLUMN.ARGS.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.ARGUMENTS_VALUE.name);
+               selectAllColumn.append(COLUMN.TARGET.getName());
                return selectAllColumn.toString();
        }
        
@@ -264,18 +288,21 @@ public class FileApiDB extends DBTable {
                        isPrepared = false;
                } else {
                        try {
-                               prep.setLong(1, (Long)(rowData.get(0)));
-                               prep.setInt(2, (Integer)(rowData.get(1)));
-                               prep.setInt(3, (Integer)(rowData.get(2)));
-                               prep.setLong(4, (Long)(rowData.get(3)));
-                               prep.setInt(5, (Integer)(rowData.get(4)));
-                               prep.setLong(6, (Long)(rowData.get(5)));
-                               prep.setInt(7, (Integer)(rowData.get(6)));
-                               prep.setLong(8, (Long)(rowData.get(7)));
-                               prep.setLong(9, (Long)(rowData.get(8)));
-                               prep.setLong(10, (Long)(rowData.get(9)));
-                               prep.setString(11, (String)(rowData.get(10)));
-                               prep.setString(12, (String)(rowData.get(11)));
+                               prep.setLong(1, (Long)(rowData.get(COLUMN.SEQ.getValue())));
+                               prep.setString(2, (String)(rowData.get(COLUMN.FILE_PATH.getValue())));
+                               prep.setInt(3, (Integer)(rowData.get(COLUMN.PID.getValue())));
+                               prep.setInt(4, (Integer)(rowData.get(COLUMN.TID.getValue())));
+                               prep.setLong(5, (Long)(rowData.get(COLUMN.FD.getValue())));
+                               prep.setInt(6, (Integer)(rowData.get(COLUMN.API_TYPE.getValue())));
+                               prep.setLong(7, (Long)(rowData.get(COLUMN.EVENT_TIME.getValue())));
+                               prep.setInt(8, (Integer)(rowData.get(COLUMN.API_ID.getValue())));
+                               prep.setLong(9, (Long)(rowData.get(COLUMN.ERRNO.getValue())));
+                               prep.setLong(10, (Long)(rowData.get(COLUMN.IO_SIZE.getValue())));
+                               prep.setLong(11, (Long)(rowData.get(COLUMN.FILE_SIZE.getValue())));
+                               prep.setLong(12, (Long)(rowData.get(COLUMN.SIZE.getValue())));
+                               prep.setString(13, (String)(rowData.get(COLUMN.RETURN_VALUE.getValue())));
+                               prep.setString(14, (String)(rowData.get(COLUMN.ARGS.getValue())));
+                               prep.setBoolean(15, (Boolean)(rowData.get(COLUMN.TARGET.getValue())));
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
index 1670c9b..a215358 100644 (file)
@@ -27,7 +27,6 @@
 package org.tizen.dynamicanalyzer.ui.file.data;
 
 import java.sql.PreparedStatement;
-import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -41,22 +40,26 @@ import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
 
 // open, close
 public class FileStatusDB extends DBTable {
-       private static final String STATUS_TABLE = FilePageLabels.FILE_STATUS_DB;
+       private static final String TABLE_NAME = FilePageLabels.FILE_STATUS_DB;
        
        public static enum COLUMN {
-               FILE_ID(1, "FILE_ID"),
-               API_TYPE(2, "API_TYPE"),
-               EVENT_TIME(3, "EVENT_TIME");
+               PID(0, "pid"),
+               TID(1, "tid"),
+               FILE_PATH(2, "filePath"),
+               FD(3, "FD"),
+               API_TYPE(4, "apiType"),
+               EVENT_TIME(5, "eventTime"),
+               ERRNO(6, "errNo");
                
-               private final int index;
+               private final int value;
                private final String name;
-               private COLUMN(int index, String name) {
-                       this.index = index;
+               private COLUMN(int value, String name) {
+                       this.value = value;
                        this.name = name;
                }
 
-               public int getIndex() {
-                       return index;
+               public int getValue() {
+                       return value;
                }
                
                public String getName() {
@@ -65,55 +68,24 @@ public class FileStatusDB extends DBTable {
        }
 
        public FileStatusDB() {
-               addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
-               addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
-               addColumn(new DBColumn(COLUMN.EVENT_TIME.name, DBConstants.NOT_NULL, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.PID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.TID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.FILE_PATH.getName(), DBConstants.NOT_NULL, DBConstants.BIG_TEXT));
+               addColumn(new DBColumn(COLUMN.FD.getName(), DBConstants.EMPTY, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.API_TYPE.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+               addColumn(new DBColumn(COLUMN.EVENT_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+               addColumn(new DBColumn(COLUMN.ERRNO.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
        }
        
        @Override
        public String getTableName() {
-               return STATUS_TABLE;
+               return TABLE_NAME;
        }
 
        private static final String selectAll = selectAll();
        private static final String SELECT_QUERY = "select "
                        + selectAll
-                       + " from " + STATUS_TABLE; //$NON-NLS-1$
-       
-       public List<FileStatus> executeQueryRS(String query) {
-               List<FileStatus> resultData = new ArrayList<FileStatus>();
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs != null) {
-                       try {
-                               while (rs.next()) {
-                                       FileStatus status= getDataFromResultSet(rs);
-                                       if (status != null) {
-                                               resultData.add(status);
-                                       }
-                               }
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                       } finally {
-                               SqlConnectionManager.releaseResultSet(rs);
-                       }
-               }
-               return resultData;
-       }
-       
-       public FileStatus getDataFromResultSet(ResultSet rs) {
-               FileStatus status = null;
-               try {
-                       status = new FileStatus(
-                                       rs.getInt(COLUMN.FILE_ID.index),
-                                       rs.getInt(COLUMN.API_TYPE.index),
-                                       rs.getLong(COLUMN.EVENT_TIME.index)
-                                       );
-               } catch (SQLException e) {
-                       e.printStackTrace();
-                       return null;
-               }
-               return status;
-       }
+                       + " from " + TABLE_NAME; //$NON-NLS-1$
        
        public void insert(FileStatus insertData) {
                List<List<Object>> insertDataList = new ArrayList<List<Object>>();
@@ -125,17 +97,33 @@ public class FileStatusDB extends DBTable {
                String query = String.format(SELECT_QUERY);
                
                List<FileStatus> statusList = new ArrayList<FileStatus>();
-               statusList = executeQueryRS(query);
+               
+               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                       return statusList;
+               }
+               
+               for (List<Object> data : result) {
+                       statusList.add(new FileStatus(data));
+               }
                return statusList;
        }
 
        public static String selectAll() {
                StringBuffer selectAllColumn = new StringBuffer();
-               selectAllColumn.append(COLUMN.FILE_ID.name);
+               selectAllColumn.append(COLUMN.PID.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.TID.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.FILE_PATH.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.FD.getName());
+               selectAllColumn.append(",");
+               selectAllColumn.append(COLUMN.API_TYPE.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.API_TYPE.name);
+               selectAllColumn.append(COLUMN.EVENT_TIME.getName());
                selectAllColumn.append(",");
-               selectAllColumn.append(COLUMN.EVENT_TIME.name);
+               selectAllColumn.append(COLUMN.ERRNO.getName());
                return selectAllColumn.toString();
        }
        
@@ -148,9 +136,13 @@ public class FileStatusDB extends DBTable {
                        isPrepared = false;
                } else {
                        try {
-                               prep.setInt(1, (Integer)(rowData.get(0)));
-                               prep.setInt(2, (Integer)(rowData.get(1)));
-                               prep.setLong(3, (Long)(rowData.get(2)));
+                               prep.setInt(1, (Integer)(rowData.get(COLUMN.PID.getValue())));
+                               prep.setInt(2, (Integer)(rowData.get(COLUMN.TID.getValue())));
+                               prep.setString(3, (String)(rowData.get(COLUMN.FILE_PATH.getValue())));
+                               prep.setLong(4, (Long)(rowData.get(COLUMN.FD.getValue())));
+                               prep.setInt(5, (Integer)(rowData.get(COLUMN.API_TYPE.getValue())));
+                               prep.setLong(6, (Long)(rowData.get(COLUMN.EVENT_TIME.getValue())));
+                               prep.setLong(7, (Long)(rowData.get(COLUMN.ERRNO.getValue())));
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
index c18a904..29eb87a 100644 (file)
 package org.tizen.dynamicanalyzer.ui.file.manager;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
-import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicInteger;
 
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DALimit;
 import org.tizen.dynamicanalyzer.common.Global;
@@ -51,7 +48,6 @@ 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.FileAccessor;
 import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
 import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
@@ -65,29 +61,37 @@ 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>();
+
+
+       // 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> concurrentAccessNumMap = new HashMap<String, Integer>();
+       private Map<String, Integer> lockNumMap = new HashMap<String, Integer>();
        
-       private Map<Long, FileEvent> entryMap =  new HashMap<Long, FileEvent>(); // to match entry and exit message
-       private Map<String,  List<Object>> fileAccessorMap= new HashMap<String, List<Object>>();
-       private Map<String,  List<Object>> filePathMap= new HashMap<String, List<Object>>(); // to find file path
-       private Queue<List<FileAccessor>> fileAccessorQueue = new ConcurrentLinkedQueue<List<FileAccessor>>();
-       private Map<List<Integer>, List<Integer>> accessorHasLockMap = new HashMap<List<Integer>, List<Integer>>(); //to auto release
-       private Map<String, Integer> concurrentAccessNumMap = new HashMap<String, Integer>(); // to check concurrent access
+       // for filtering out non-target file from syscall messages
+       List<String> accessedFilePathList = new ArrayList<String>();
        
-       AtomicInteger idGenerator = new AtomicInteger();
+       // temporary, to check if open event has been sent before the event has been sent
+       private Map<String, FileEvent> sysCallMap = new HashMap<String, FileEvent>();
+       // for searching entry message from exit message
+       Map<Long, FileEvent> entryMap =  new HashMap<Long, FileEvent>();
        
        public FileDataMaker() {}
        
        public void clear(){
                fileStatusList.clear();
                fileAccessList.clear();
-               fileApiList.clear();
-               fileAccessorList.clear();
                fileAccessorMap.clear();
-               fileAccessorQueue.clear();
-               filePathMap.clear();
-               accessorHasLockMap.clear();
+               fileLogsQueue.clear();
                concurrentAccessNumMap.clear();
+               lockNumMap.clear();
+               sysCallMap.clear();
+               accessedFilePathList.clear();
                entryMap.clear();
        }
 
@@ -102,7 +106,6 @@ public class FileDataMaker {
                 */
                
                List<FileEvent>  fileEventList = new ArrayList<FileEvent>();
-               List<FileAccessor> fileAccessorList = new ArrayList<FileAccessor>();
                
                // 1. In case of target process that the user is interested to analyze
                ArrayList<List<Object>> fileApiList = new ArrayList<List<Object>>();
@@ -131,6 +134,8 @@ public class FileDataMaker {
                                }
                                
                                // 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;
                                }
@@ -152,6 +157,17 @@ public class FileDataMaker {
                                                input.getArgs(), input.getReturn(), input.getErrno(),
                                                true);
                                
+                               switch(input.getFdApiType()) {
+                               case LogCenterConstants.FD_API_TYPE_OPEN:
+                                       accessedFilePathList.add(input.getFilePath());
+                                       break;
+                               case LogCenterConstants.FD_API_TYPE_LOCK_START:
+                               case LogCenterConstants.FD_API_TYPE_LOCK_END:
+                                       String args = input.getArgs();
+                                       String[] splitPath = args.split(",\\s+");
+                                       event.setLockType(Integer.parseInt(splitPath[1]));
+                                       break;
+                               }
                                addFileEvent(fileEventList, event, input);
                        }
                }
@@ -161,7 +177,6 @@ public class FileDataMaker {
                if (syscallLogs != null) {
                        ProfileData profileData = null;
                        FileEvent event = null;
-                       FileEvent fakeOpenEvent = null;
                        String filePath = null;
                        long fd = 0;
                        
@@ -182,14 +197,11 @@ public class FileDataMaker {
                                        String[] splitPath = args.split(",\\s+");
                                        filePath = splitPath[0];
                                        fd = Long.parseLong(splitPath[1]);
-                                       
-                                       event = new FileEvent(seq, pid, tid, fd, filePath, eventType, time, 0,  false);
-                                       fakeOpenEvent = new FileEvent(0, pid, tid, fd, filePath,
-                                                       LogCenterConstants.FD_API_TYPE_OPEN, time, 0, false);
+                                       FileEvent openEvent = null;
 
-                                       //fileAccessorMap: to filter out non-target files that user in not interested
-                                       //filePathMap: to check if the open event is exist
-                                       if(fileAccessorMap.containsKey(filePath)) {
+                                       // filtering out non-target files that user in not interested
+                                       if(accessedFilePathList.contains(filePath)) {
+                                               // target file
                                                Logger.debug(">> syscall:seq:" + seq + ", pid:" + pid
                                                                + ", tid:" + tid + ", type:" + eventType +  ", args:" + args);
                                                
@@ -197,38 +209,53 @@ public class FileDataMaker {
                                                if(fd == -1) {
                                                        event.setErrNo(-1);
                                                }
-                                               
-                                               String key = createKey(pid, tid, fd);
                                                switch(eventType) {
                                                case LogCenterConstants.FD_API_TYPE_OPEN:
-                                                       addFilePathInfo(key, filePath, -1, -1);
+                                                       sysCallMap.put(filePath, event);
                                                        addFileEvent(fileEventList, event, null);
                                                        break;
                                                case LogCenterConstants.FD_API_TYPE_CLOSE:
-                                                       if(filePathMap.containsKey(key)) {
+                                                       openEvent = sysCallMap.get(filePath);
+                                                       if(openEvent != null) {
                                                                addFileEvent(fileEventList, event, null);
-                                                               removeFilePathInfo(key);
                                                        }
                                                        break;
                                                case LogCenterConstants.FD_API_TYPE_LOCK_START:
-                                                       if(!filePathMap.containsKey(key)){
+                                                       openEvent = sysCallMap.get(filePath);
+                                                       if(openEvent == null) {
+                                                               // make fake open event
+                                                               FileEvent fakeOpenEvent = new FileEvent(0, pid,
+                                                                               tid, fd, filePath,
+                                                                               LogCenterConstants.FD_API_TYPE_OPEN,
+                                                                               time, 0, false);
                                                                addFileEvent(fileEventList, fakeOpenEvent, null);
-                                                               addFilePathInfo(key, filePath, -1, -1);
                                                        }
                                                        entryMap.put(seq, event);
+                                                       event.setLockType(Integer.parseInt(splitPath[2]));
                                                        addFileEvent(fileEventList, event, null);
                                                        break;
                                                case LogCenterConstants.FD_API_TYPE_UNLOCK:
-                                                       if(!filePathMap.containsKey(key)){
+                                                       openEvent = sysCallMap.get(filePath);
+                                                       if(openEvent == null) {
+                                                               // make fake open event
+                                                               FileEvent fakeOpenEvent = new FileEvent(0, pid,
+                                                                               tid, fd, filePath,
+                                                                               LogCenterConstants.FD_API_TYPE_OPEN,
+                                                                               time, 0, false);
                                                                addFileEvent(fileEventList, fakeOpenEvent, null);
-                                                               addFilePathInfo(key, filePath, -1, -1);
                                                        }
+                                                       entryMap.put(seq, event);
                                                        break;
                                                case  LogCenterConstants.FD_API_TYPE_READ_START:
                                                case  LogCenterConstants.FD_API_TYPE_WRITE_START:
-                                                       if(!filePathMap.containsKey(key)){
+                                                       openEvent = sysCallMap.get(filePath);
+                                                       if(openEvent == null) {
+                                                               // make fake open event
+                                                               FileEvent fakeOpenEvent = new FileEvent(0, pid,
+                                                                               tid, fd, filePath,
+                                                                               LogCenterConstants.FD_API_TYPE_OPEN,
+                                                                               time, 0, false);
                                                                addFileEvent(fileEventList, fakeOpenEvent, null);
-                                                               addFilePathInfo(key, filePath, -1, -1);
                                                        }
                                                        entryMap.put(seq, event);
                                                        addFileEvent(fileEventList, event, null);
@@ -239,10 +266,11 @@ public class FileDataMaker {
                                        }// else, non-target file
                                        break;
                                case DataChannelConstants.MSG_FUNCTION_EXIT:
-                                       // for creating read/write/lock end event with MSG_FUNCTION_EXIT
+                                       // for creating read/write end event with MSG_FUNCTION_EXIT
                                        long entrySeq = profileData.getEntrySeq();
-                                       String ret = profileData.getReturn();
                                        if(entryMap.containsKey(entrySeq)) {
+                                               Logger.debug(">> syscall entrySeq:" + + entrySeq + "endseq:" + seq + ", pid:" + pid
+                                                               + ", tid:" + tid + ", type:" + eventType);
                                                event = entryMap.get(entrySeq);
                                                if(Long.parseLong(profileData.getReturn()) == -1) {
                                                        event.setErrNo(-1);
@@ -250,24 +278,20 @@ public class FileDataMaker {
                                                switch(eventType) {
                                                case LogCenterConstants.FD_API_TYPE_READ_START:
                                                        event.setFdApiType(LogCenterConstants.FD_API_TYPE_READ_END);
-                                                       event.setTime(time);
                                                        addFileEvent(fileEventList, event, null);
                                                        break;
                                                case LogCenterConstants.FD_API_TYPE_WRITE_START:
                                                        event.setFdApiType(LogCenterConstants.FD_API_TYPE_WRITE_END);
-                                                       event.setTime(time);
                                                        addFileEvent(fileEventList, event, null);
                                                        break;
                                                case LogCenterConstants.FD_API_TYPE_LOCK_START:
                                                        event.setFdApiType(LogCenterConstants.FD_API_TYPE_LOCK_END);
-                                                       event.setTime(time);
                                                        addFileEvent(fileEventList, event, null);
                                                        break;
                                                case LogCenterConstants.FD_API_TYPE_UNLOCK:
                                                        event.setFdApiType(LogCenterConstants.FD_API_TYPE_UNLOCK);
                                                        event.setTime(time);
                                                        addFileEvent(fileEventList, event, null);
-                                                       break;
                                                default:
                                                        break;
                                                }
@@ -282,18 +306,9 @@ public class FileDataMaker {
                        for(FileEvent data : fileEventList) {
                                fileApiList.add(data.getDBData());
                        }
+                       fileLogsQueue.add(fileEventList);
                        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);
        }
        
        /**
@@ -320,67 +335,45 @@ public class FileDataMaker {
                String key = null;
                
                Logger.debug("pid:" + pid + " tid:" +tid + " apiType:" + apiType);
-
                
                if(isTarget) {
                        key = createKey(pid, tid, fd);
                        if(fd == -1) {
-                               filePath = FilePageLabels.FILE_CHART_UNKNOWN_FILE;
-                               int[] fileInfo = addFileAccessor(filePath, pid, tid, isTarget);
-                               event.setFileId(fileInfo[0]);
-                               event.setAccessorId(fileInfo[1]);
-                               event.setFilePath(filePath);
-                       }else if(filePath == null || filePath.equals("")) { 
-                               // get file path except open event
-                               Object[] fileInfo = getFilePathInfo(key);
-                               filePath = (String)fileInfo[0];
+                               // 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);
-                               event.setFileId((Integer)fileInfo[1]);
-                               event.setAccessorId((Integer)fileInfo[2]);
                        }
-               }else{
-                       int[] fileInfo = addFileAccessor(filePath, pid, tid, isTarget);
-                       event.setFileId(fileInfo[0]);
-                       event.setAccessorId(fileInfo[1]);
                }
                
                switch (apiType) {
                case LogCenterConstants.FD_API_TYPE_OPEN:
-                       if (isTarget) {
-                               int[] fileInfo = addFileAccessor(filePath, pid, tid, isTarget);
-                               event.setFileId(fileInfo[0]);
-                               event.setAccessorId(fileInfo[1]);
-                               addFilePathInfo(key, filePath, fileInfo[0], fileInfo[1]);
-                       }
-                       if (errNo == 0) {
-                               addStatusData(new FileStatus(event.getFileId(), apiType, eventTime));
+                       if(isTarget && errNo == 0) {
+                                       addFileAccessor(key, filePath);
                        }
+                       addStatusData(new FileStatus(pid, tid, fd, filePath, 
+                                       apiType, eventTime, errNo));
                        break;
                case LogCenterConstants.FD_API_TYPE_CLOSE:
-                       if(errNo == 0) {
-                               if(isTarget) {
-                                       removeFilePathInfo(key);
-                               }
-                               addStatusData(new FileStatus(event.getFileId(), apiType, eventTime));
-                               List<Integer> accessorIds = getTidsHasLock(event.getFileId(), pid);
-                               if(accessorIds != null) {
-                                       // lock auto release
-                                       for(Integer accessor : accessorIds){
-                                               FileAccess access = new FileAccess(accessor, 
-                                                               LogCenterConstants.FD_API_TYPE_LOCK_AUTORELEASE, 
-                                                               eventTime, eventTime, FilePageLabels.FILE_CHART_TOOLTIP_LOCK_AUTORELEASE);
-                                               addAccessData(access);
-                                       }
-                                       removeTidsHasLock(event.getFileId(), pid);
-                               }
+                       if(isTarget && errNo == 0) {
+                                       removeFileAccessor(key);
+                       }
+                       addStatusData(new FileStatus(pid, tid, fd, filePath,
+                                               apiType, eventTime, errNo));
+                       // if it remains lock without lock release
+                       if(getCurrentLockNum(filePath) > 0) {
+                               removeLockNum(filePath);
+                               addEndAccessData(pid, tid, fd, filePath, eventTime, size,
+                                               LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
                        }
                        break;
                case LogCenterConstants.FD_API_TYPE_READ_START:
-                       FileAccess readAccess = new FileAccess(event.getAccessorId(), fd, apiType, 
-                                       eventTime, FilePageLabels.FILE_CHART_TOOLTIP_READ);
+                       FileAccess readAccess = new FileAccess(filePath, pid,
+                                       tid, fd, apiType, eventTime);
                        if(checkConcurrentAccess(filePath)) {
                                readAccess.setWarning();
-                               readAccess.setTooltip(FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_READ);
                                if(logData != null) {
                                        SummaryDataManager.getInstance().getWarningDataMaker().add(
                                                        logData, 
@@ -392,16 +385,15 @@ public class FileDataMaker {
                        addStartAccessData(readAccess);
                        break;
                case LogCenterConstants.FD_API_TYPE_READ_END:
-                       addEndAccessData(event.getAccessorId(), fd, eventTime,
-                                               size, LogCenterConstants.FD_API_TYPE_READ_START, errNo);
+                       addEndAccessData(pid, tid, fd, filePath, eventTime,
+                                       size, LogCenterConstants.FD_API_TYPE_READ_START, errNo);
                        removeConcurrentAccess(filePath);
                        break;
                case LogCenterConstants.FD_API_TYPE_WRITE_START:
-                       FileAccess writeAccess = new FileAccess(event.getAccessorId(), fd, apiType, 
-                                       eventTime,  FilePageLabels.FILE_CHART_TOOLTIP_WRITE);
+                       FileAccess writeAccess = new FileAccess(filePath, pid,
+                                       tid, fd, apiType, eventTime);
                        if(checkConcurrentAccess(filePath)) {
                                writeAccess.setWarning();
-                               writeAccess.setTooltip(FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_WRITE);
                                if(logData != null) {
                                        SummaryDataManager.getInstance().getWarningDataMaker().add(
                                                        logData, 
@@ -413,40 +405,37 @@ public class FileDataMaker {
                        addStartAccessData(writeAccess);
                        break;
                case LogCenterConstants.FD_API_TYPE_WRITE_END:
-                       addEndAccessData(event.getAccessorId(), fd, eventTime,
+                       addEndAccessData(pid, tid, fd,  filePath, eventTime,
                                        size, LogCenterConstants.FD_API_TYPE_WRITE_START, errNo);
                        removeConcurrentAccess(filePath);
                        break;
                case LogCenterConstants.FD_API_TYPE_LOCK_START:
-                       addStartAccessData(new FileAccess(event.getAccessorId(), fd, apiType, 
-                                       eventTime, FilePageLabels.FILE_CHART_TOOLTIP_LOCK));
+                       if(event.getLockType() == AnalyzerConstants.F_SETLKW) {// F_SETLKW
+                               addStartAccessData(new FileAccess(filePath, pid, tid, fd, 
+                                               LogCenterConstants.FD_API_TYPE_LOCK_WAIT_START, eventTime));
+                       }else{
+                               addStartAccessData(new FileAccess(filePath, pid, tid, fd, 
+                                               LogCenterConstants.FD_API_TYPE_LOCK_START, eventTime));
+                       }
+                       addCurrentLock(filePath);
                        break;
                case LogCenterConstants.FD_API_TYPE_LOCK_END:
-                       addEndAccessData(event.getAccessorId(), fd, eventTime, size,
-                                       LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
-                       addFileLock(event.getFileId(), pid, event.getAccessorId());
+                       if(event.getLockType() == AnalyzerConstants.F_SETLKW) {// F_SETLKW
+                               addEndAccessData(pid, tid, fd, filePath, eventTime,
+                                               size, LogCenterConstants.FD_API_TYPE_LOCK_WAIT_START, errNo);
+                               addStartAccessData(new FileAccess(filePath, pid, tid, fd, 
+                                               LogCenterConstants.FD_API_TYPE_LOCK_START, eventTime));
+                       }
                        break;
                case LogCenterConstants.FD_API_TYPE_UNLOCK:
-                       addAccessData(new FileAccess(event.getAccessorId(), apiType,
-                                       eventTime, eventTime, FilePageLabels.FILE_CHART_TOOLTIP_UNLOCK));
+                       removeLockNum(filePath);
+                       addEndAccessData(pid, tid, fd, filePath, eventTime,
+                                       size, LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
                        break;
                default:
                                break;
                }
-
-               // file access fail
-               if (errNo != 0) {
-                       String tooltip = FilePageLabels.FILE_CHART_TOOLTIP_FAIL + " "
-                                       + Global.getFunctionName(event.getApiId());
-                       FileAccess accessFail = new FileAccess(event.getAccessorId(),
-                                       LogCenterConstants.FD_API_TYPE_FAIL, eventTime, eventTime,
-                                       tooltip);
-                       addAccessData(accessFail);
-               }
-               
-               if(event.isTarget()) {
-                       fileEventList.add(event);
-               }
+               fileEventList.add(event);
        }
        
        public void addStatusData(FileStatus data) {
@@ -457,38 +446,43 @@ public class FileDataMaker {
        public void addStartAccessData(FileAccess data) {
                fileAccessList.add(data);
        }
-       
-       public void addAccessData(FileAccess data) {
-               fileAccessList.add(data);
-               FileDataManager.getInstance().getAccessDB().insert(data);
-       }
-       
+
        // in case of file read/write/lock probe/system call
-       public void addEndAccessData(int accessorId, long fd, long endTime
-                       long ioSize, int apiType, long errNo) {
+       public void addEndAccessData(int pid, int tid, long fd, String filePath
+                       long endTime, long fileSize, int apiType, long errNo) {
                for (int i = 0; i < fileAccessList.size(); i++) {
                        FileAccess data = fileAccessList.get(i);
-                       if (data.getAccessorId() == accessorId
+                       if (data.getPid() == pid
+                                       && data.getTid() == tid 
                                        && data.getFd() == fd
                                        && data.getApiType() == apiType
                                        && data.getEndTime() <= 0){
-                               if(errNo!=0) {
-                                       fileAccessList.remove(i);
-                               }else{
-                                       data.setEndTime(endTime);
-                                       if(apiType == LogCenterConstants.FD_API_TYPE_WRITE_START
-                                                       || apiType == LogCenterConstants.FD_API_TYPE_READ_START){
-                                               String tooltip = data.getTooltip() + " , " + String.valueOf(ioSize);
-                                               data.setTooltip(tooltip);
-                                       }
-                                       FileDataManager.getInstance().getAccessDB().insert(data);
-                               }
+                               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;
+       }
+       
+       public List<FileEvent> getFileApiList() {
+               return fileApiList;
+       }
+       
        private String createKey(int pid, int tid, long fd) {
                StringBuffer key = new StringBuffer();
                key.append(pid);
@@ -501,6 +495,34 @@ public class FileDataMaker {
                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 {
+                       Logger.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 {
+                       Logger.error(" removeFileAccessor:" + key + "is not exist" );
+               }
+       }
+       
+       private String getFilePath(String key) {
+               String filePath = null;
+               if(fileAccessorMap.containsKey(key)) {
+                       filePath = fileAccessorMap.get(key);
+               }else{
+                       Logger.error("The key is not exist : " + key);
+               }
+               return filePath;
+       }
+       
        /**
         * Check if it is concurrent access
         * @param concurrentKey
@@ -510,9 +532,8 @@ public class FileDataMaker {
                int num = 0;
                if(concurrentAccessNumMap.containsKey(concurrentKey)) {
                        num = concurrentAccessNumMap.get(concurrentKey);
-               }else{
-                       concurrentAccessNumMap.put(concurrentKey, 1);
                }
+               concurrentAccessNumMap.put(concurrentKey, num+1);
                if(num > 0) {
                        return true;
                }else {
@@ -537,136 +558,31 @@ public class FileDataMaker {
                }
        }
        
-       /**
-        * Add a new file accessor
-        * @param filePath
-        * @param pid
-        * @param tid
-        * @return fileId
-        */
-       private int[] addFileAccessor(String filePath, int pid, int tid, boolean isTarget) {
-               int fileId = -1;
-               int accessorId = -1;
-               if(fileAccessorMap.containsKey(filePath)) {
-                       List<Object> set = fileAccessorMap.get(filePath);
-                       Object[] list = set.toArray();
-                       fileId = (Integer) list[0];
-                       List<FileAccessor> accessorList = (ArrayList<FileAccessor>) list[1]; 
-                       boolean isExistAccessor = false;
-                       for(FileAccessor accessor : accessorList) {
-                               if(pid == accessor.getPid() && tid == accessor.getTid()) {
-                                       accessorId = accessor.getAccessorId();
-                                       isExistAccessor = true;
-                                       break;
-                               }
-                       }
-                       if(!isExistAccessor){
-                               // add a new file accessor
-                               accessorId = idGenerator.incrementAndGet();
-                               FileAccessor newAccessor = new FileAccessor(
-                                               accessorId, fileId, filePath, pid, tid, isTarget);
-                               accessorList.add(newAccessor);
-                               set.add(fileId);
-                               set.add(accessorList);
-                               fileAccessorMap.put(filePath, set);
-                               FileDataManager.getInstance().getAccessorDB().insert(newAccessor);
-                       }
-               }else{
-                       fileId = fileAccessorMap.size()+1;
-                       accessorId = idGenerator.incrementAndGet();
-                       List<FileAccessor> accessorList = new ArrayList<FileAccessor>();
-                       FileAccessor newAccessor = new FileAccessor(accessorId, 
-                                       fileId, filePath, pid, tid, isTarget);
-                       accessorList.add(newAccessor);
-                       List<Object> set = new ArrayList<Object>();
-                       set.add(fileId);
-                       set.add(accessorList);
-                       fileAccessorMap.put(filePath, set);
-                       FileDataManager.getInstance().getAccessorDB().insert(newAccessor);
-               }
-               return new int[]{fileId, accessorId};
-       }
-       
-       
-       /**
-        * Get file path
-        * @param key
-        * @return Object[0]:filePath,Object[1]:fileId, Object[2]:accessorId 
-        */
-       private Object[] getFilePathInfo(String key) {
-               Object[] list = null;
-               if(filePathMap.containsKey(key)) {
-                       List<Object> set = filePathMap.get(key);
-                       list = set.toArray();
-               }else{
-                       Logger.error("The key is not exist : " + key);
-               }
-               return list;
-       }
-       
-       /**
-        * Add file path information
-        * @param key
-        * @param filePath
-        * @param fileId
-        * @param accessorId
-        */
-       private void addFilePathInfo(String key, String filePath, int fileId, int accessorId){
-               if(!filePathMap.containsKey(key)) {
-                       List<Object> set = new ArrayList<Object>();
-                       set.add((String)filePath);
-                       set.add((Integer)fileId);
-                       set.add((Integer)accessorId);
-                       filePathMap.put(key, set);
-               }
-       }
-       
-       private void removeFilePathInfo(String key) {
-               if(filePathMap.containsKey(key)) {
-                       filePathMap.remove(key);
-               }
-       }
-       
-       /**
-        * Add file lock information
-        * @param fileId
-        * @param pid
-        * @param accessorId
-        */
-       private void addFileLock(int fileId, int pid, int accessorId) {
-               List<Integer> key = Arrays.asList(fileId, pid);
-               List<Integer> tids = new ArrayList<Integer>();
-               if(accessorHasLockMap.containsKey(key)){
-                       tids = accessorHasLockMap.get(key);
-                       if(!tids.contains(accessorId)) {
-                               tids.add(accessorId);
-                               accessorHasLockMap.put(key, tids);
-                       }
-               }else{
-                       tids.add(accessorId);
-                       accessorHasLockMap.put(key, tids);
+       private int addCurrentLock(String lockKey) {
+               int num = 0;
+               if(lockNumMap.containsKey(lockKey)) {
+                       num = lockNumMap.get(lockKey);
+                       lockNumMap.put(lockKey, num+1);
                }
+               lockNumMap.put(lockKey, num+1);
+               return num;
        }
        
-       /**
-        * Get TIDs which has file locks
-        * @param fileId
-        * @param pid
-        * @return
-        */
-       private List<Integer> getTidsHasLock(int fileId, int pid) {
-               List<Integer> tids = null;
-               List<Integer> key = Arrays.asList(fileId, pid);
-               if(accessorHasLockMap.containsKey(key)) {
-                       tids = accessorHasLockMap.get(key);
+       private int getCurrentLockNum(String lockKey) {
+               int num = 0;
+               if(lockNumMap.containsKey(lockKey)) {
+                       num = lockNumMap.get(lockKey);
                }
-               return tids;
+               return num;
        }
-       
-       private void removeTidsHasLock(int fileId, int pid) {
-               List<Integer> key = Arrays.asList(fileId, pid);
-               if(accessorHasLockMap.containsKey(key)) {
-                       accessorHasLockMap.remove(key);
+
+       private void removeLockNum(String lockKey) {
+               int num = 0;
+               if(lockNumMap.containsKey(lockKey)) {
+                       num = lockNumMap.get(lockKey);
+                       lockNumMap.put(lockKey, num-1);
+               } else {
+                       Logger.error("Couldn't get current lock num!, key :" + lockKey);
                }
        }
        
@@ -677,6 +593,7 @@ public class FileDataMaker {
                }
        }
 
+       
        /**
         * filtering out STDIN/STDOUT ops
         * @param input
@@ -716,26 +633,6 @@ public class FileDataMaker {
                return false;
        }
        
-       public List<FileAccessor> getFileAccessor() {
-               return fileAccessorQueue.poll();
-       }
-
-       public List<FileAccess> getFileAccessList() {
-               return fileAccessList;
-       }
-       
-       public List<FileStatus> getFileStatusList() {
-               return fileStatusList;
-       }
-       
-       public List<FileEvent> getFileApiList() {
-               return fileApiList;
-       }
-       
-       public List<FileAccessor> getFileAccessorList() {
-               return fileAccessorList;
-       }
-       
        public void setFileAccessList(List<FileAccess> fileAccessList) {
                this.fileAccessList = fileAccessList;
        }
@@ -747,9 +644,5 @@ public class FileDataMaker {
        public void setFileApiList(List<FileEvent> fileApiList) {
                this.fileApiList = fileApiList;
        }
-       
-       public void setFileAccessorList(List<FileAccessor> fileAccessorList) {
-               this.fileAccessorList = fileAccessorList;
-       }
 
 }
index b9fa88e..b835d88 100644 (file)
 
 package org.tizen.dynamicanalyzer.ui.file.manager;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
 import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
 import org.tizen.dynamicanalyzer.ui.file.data.FileAccessDB;
-import org.tizen.dynamicanalyzer.ui.file.data.FileAccessorDB;
 import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
 import org.tizen.dynamicanalyzer.ui.file.data.FileStatusDB;
 import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
 
 
 public class FileDataManager extends PageDataManager {
@@ -46,9 +46,8 @@ public class FileDataManager extends PageDataManager {
        private FileAccessDB accessDB = null;
        private FileApiDB apiDB = null;
        private FileStatusDB statusDB = null;
-       private FileAccessorDB accessorDB = null;
        
-       private FileSelectedData selectedData = null;
+       private List<FileEvent> selectedTableAPIList = new ArrayList<FileEvent>();
 
        private FileDataManager() {
                dataMaker = new FileDataMaker();
@@ -67,15 +66,13 @@ public class FileDataManager extends PageDataManager {
                accessDB = new FileAccessDB();
                apiDB = new FileApiDB();
                statusDB = new FileStatusDB();
-               accessorDB = new FileAccessorDB();
        }
        
        public void clear() {
                accessDB = null;
                apiDB = null;
                statusDB = null;
-               accessorDB = null;
-               selectedData = null;
+               selectedTableAPIList = new ArrayList<FileEvent>();
        }
        
        public FileAccessDB getAccessDB(){
@@ -90,10 +87,6 @@ public class FileDataManager extends PageDataManager {
                return statusDB;
        }
        
-       public FileAccessorDB getAccessorDB() {
-               return accessorDB;
-       }
-       
        public void saveData(Map<String, String> dataMap) {
                List<FileAccess> accessList = dataMaker.getFileAccessList();
                if (accessList != null ) {
@@ -121,22 +114,19 @@ public class FileDataManager extends PageDataManager {
                if (dataMaker.getFileApiList().size() == 0) {
                        dataMaker.setFileApiList(apiDB.select());
                }
-               
-               if (dataMaker.getFileAccessorList().size() == 0) {
-                       dataMaker.setFileAccessorList(accessorDB.select());
-               }
        }
 
        public FileDataMaker getFileChartDataMaker() {
                return dataMaker;
        }
        
-       public void setSelectedData(FileSelectedData selectedData) {
-               this.selectedData = selectedData;
+       public List<FileEvent> getSelectedTableAPIList() {
+               return selectedTableAPIList;
        }
-       
-       public FileSelectedData getSelectedData() {
-               return selectedData;
+
+       public void setSelectedTableAPIList(
+                       List<FileEvent> selectedTableAPIList) {
+               this.selectedTableAPIList = selectedTableAPIList;
        }
        
        /**
index 3c26c20..55ff42c 100644 (file)
@@ -29,45 +29,98 @@ package org.tizen.dynamicanalyzer.ui.file.model;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.tizen.dynamicanalyzer.ui.file.data.FileAccessDB;
 
 public class FileAccess {
-       private int accessorId = -1;
+       private String filePath = null;
+       private int pid = -1;
+       private int tid = -1;
        private long fd = -1;
-       private int apiType = -1;       // r/w, concurrent r/w, lock, lock wait, unlock, auto release, fail
+       private int apiType = -1;       // only read, write, lock event
        private long startTime = -1;
        private long endTime = -1;
-       private String tooltip = null;
+       private long erroNo = 0;
+       private long fileSize = -1;
        
        private boolean isAlreadyReading = false;
        private boolean isAlreadyWriting = false;
        private boolean isAlreadyLocking = false;
        private boolean isWarning = false;
        
-       public FileAccess(int accessorId, long fd,  int apiType, long startTime, String tooltip) {
-               this.fd = fd;
-               this.accessorId = accessorId;
+       public FileAccess(String filePath, int pid, int tid, int apiType, long startTime) {
+               this.filePath = filePath;
+               this.pid = pid;
+               this.tid = tid;
                this.apiType = apiType;
                this.startTime = startTime;
-               this.tooltip = tooltip;
        }
-       
-       public FileAccess(int accessorId, int apiType, long startTime, long endTime, String tooltip) {
-               this.accessorId = accessorId;
+
+       public FileAccess(String filePath, int pid, int tid, long fd, int apiType, long startTime) {
+               this.filePath = filePath;
+               this.pid = pid;
+               this.tid = tid;
+               this.fd = fd;
                this.apiType = apiType;
                this.startTime = startTime;
-               this.endTime = endTime;
-               this.tooltip = tooltip;
        }
 
        public List<Object> getDBData() {
                List<Object> data = new ArrayList<Object>();
-               data.add(this.accessorId);
-               data.add(this.apiType);
-               data.add(this.startTime);
-               data.add(this.endTime);
-               data.add(this.tooltip);
+               data.add(new Integer(this.pid));
+               data.add(new Integer(this.tid));
+               data.add(this.filePath);
+               data.add(new Long(this.fd));
+               data.add(new Integer(this.apiType));
+               data.add(new Long(this.startTime));
+               data.add(new Long(this.endTime));
+               data.add(new Long(this.erroNo));
+               data.add(new Long(this.fileSize));
                return data;
        }
+       
+       public FileAccess(List<Object> data) {
+               this.pid = (Integer)data.get(FileAccessDB.COLUMN.PID.getValue());
+               this.tid = (Integer)data.get(FileAccessDB.COLUMN.TID.getValue());
+               this.filePath = (String)data.get(FileAccessDB.COLUMN.FILE_PATH.getValue());
+               this.fd = (Long)data.get(FileAccessDB.COLUMN.FD.getValue());
+               this.apiType = (Integer)data.get(FileAccessDB.COLUMN.API_TYPE.getValue());
+               this.startTime = (Long)data.get(FileAccessDB.COLUMN.START_TIME.getValue());
+               this.endTime = (Long)data.get(FileAccessDB.COLUMN.END_TIME.getValue());
+               this.erroNo = (Long)data.get(FileAccessDB.COLUMN.ERRNO.getValue());
+               this.fileSize = (Long)data.get(FileAccessDB.COLUMN.FILE_SIZE.getValue());
+       }
+       
+       public String getFilePath() {
+               return filePath;
+       }
+
+       public void setFilePath(String filePath) {
+               this.filePath = filePath;
+       }
+
+       public int getPid() {
+               return pid;
+       }
+
+       public void setPid(int pid) {
+               this.pid = pid;
+       }
+
+       public int getTid() {
+               return tid;
+       }
+
+       public void setTid(int tid) {
+               this.tid = tid;
+       }
+       
+       public long getFd() {
+               return fd;
+       }
+
+       public void setFd(long fd) {
+               this.fd = fd;
+       }
 
        public int getApiType() {
                return apiType;
@@ -117,13 +170,20 @@ public class FileAccess {
                this.isAlreadyLocking = isAlreadyLocking;
        }
 
+       public long getErroNo() {
+               return erroNo;
+       }
+
+       public void setErroNo(long erroNo) {
+               this.erroNo = erroNo;
+       }
 
-       public String getTooltip() {
-               return tooltip;
+       public long getFileSize() {
+               return fileSize;
        }
 
-       public void setTooltip(String tooltip) {
-               this.tooltip = tooltip;
+       public void setFileSize(long fileSize) {
+               this.fileSize = fileSize;
        }
        
        public void setWarning() {
@@ -133,20 +193,4 @@ public class FileAccess {
        public boolean isWarning() {
                return isWarning;
        }
-       
-       public void setFd(long fd) {
-               this.fd = fd;
-       }
-       
-       public long getFd() {
-               return fd;
-       }
-       
-       public int getAccessorId() {
-               return accessorId;
-       }
-       
-       public void setAccessorId(int accessorId) {
-               this.accessorId = accessorId;
-       }
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccessor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccessor.java
deleted file mode 100644 (file)
index e38ea1c..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyeran Kim <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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.file.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class FileAccessor {
-       private int accessorId = -1;
-       private int fileId = -1;
-       private String filePath = null;
-       private int pid = -1;
-       private int tid = -1;
-       private boolean isTarget = true;
-       
-       public FileAccessor(int accessorId, int fileId, String filePath, int pid, int tid, boolean isTarget) {
-               this.accessorId = accessorId;
-               this.fileId = fileId;
-               this.filePath = filePath;
-               this.pid = pid;
-               this.tid = tid;
-               this.isTarget = isTarget;
-       }
-       
-       public List<Object> getDBData() {
-               List<Object> data = new ArrayList<Object>();
-               data.add(this.accessorId);
-               data.add(this.fileId);
-               data.add(this.filePath);
-               data.add(this.pid);
-               data.add(this.tid);
-               data.add(this.isTarget);
-               return data;
-       }
-       
-       public int getAccessorId() {
-               return accessorId;
-       }
-       public void setAccessorId(int accessorId) {
-               this.accessorId = accessorId;
-       }
-       public int getFileId() {
-               return fileId;
-       }
-       public void setFileId(int fileId) {
-               this.fileId = fileId;
-       }
-       public String getFilePath() {
-               return filePath;
-       }
-       public void setFilePath(String filePath) {
-               this.filePath = filePath;
-       }
-       public int getPid() {
-               return pid;
-       }
-       public void setPid(int pid) {
-               this.pid = pid;
-       }
-       public int getTid() {
-               return tid;
-       }
-       public void setTid(int tid) {
-               this.tid = tid;
-       }
-       public boolean isTarget() {
-               return isTarget;
-       }
-       public void setIsTarget(boolean isTarget) {
-               this.isTarget = isTarget;
-       }
-       
-       @Override
-    public boolean equals(Object o){
-        FileAccessor s = (FileAccessor) o;
-        if(this.fileId == s.getFileId()
-            && this.pid == s.getPid()
-            && this.tid == s.getTid()){
-            return true;
-        } else {
-            return false;
-        }
-    }
-}
index 9ab496e..9198953 100644 (file)
@@ -30,15 +30,15 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.tizen.dynamicanalyzer.swap.model.data.FileData;
+import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
 
 public class FileEvent extends FileData{
+       // TODO considering apiId 
        private int apiId = -1;
+       private long ioSize =-1;
        private boolean target = false;
        private int lockType = -1;
-       
-       protected int fileId = -1;      
-       protected int accessorId = -1;
-       
+
        public FileEvent() { }
 
        // for non-target process
@@ -74,56 +74,47 @@ public class FileEvent extends FileData{
                this.target = target;
        }
        
-       public FileEvent(long seq, String filePath, int pid, int tid, 
-                       long fd, int apiType, int apiId, long eventTime, long fileSize, long size,
-                       String args, String returnVal, long errNo){
+       public FileEvent(long seq, String filePath, int pid, int tid) {
                this.seq = seq;
+               this.filePath = filePath;
                this.pid = pid;
                this.tid = tid;
-               this.filePath = filePath;
-               this.fdValue = fd;
-               this.fdApiType = apiType;
-               this.apiId = apiId;
-               this.time = eventTime;
-               this.fileSize = fileSize;
-               this.size = size;
-               this.args = args;
-               this.ret = returnVal;
-               this.errno = errNo;
        }
-
-       public FileEvent(long seq, int accessorId, int fileId,
-                       long fd, int apiType, int apiId, long eventTime, long fileSize, long size,
-                       String args, String returnVal, long errNo){
-               this.seq = seq;
-               this.fileId = fileId;
-               this.accessorId = accessorId;
-               this.fdValue = fd;
-               this.fdApiType = apiType;
-               this.apiId = apiId;
-               this.time = eventTime;
-               this.fileSize = fileSize;
-               this.size = size;
-               this.args = args;
-               this.ret = returnVal;
-               this.errno = errNo;
+       
+       public FileEvent(List<Object> data) {
+               this.seq = (Long) data.get(FileApiDB.COLUMN.SEQ.getValue());
+               this.filePath = (String) data.get(FileApiDB.COLUMN.FILE_PATH.getValue());
+               this.pid = (Integer) data.get(FileApiDB.COLUMN.PID.getValue());
+               this.tid = (Integer) data.get(FileApiDB.COLUMN.TID.getValue());
+               this.fdValue = (Long) data.get(FileApiDB.COLUMN.FD.getValue());
+               this.fdApiType = (Integer) data.get(FileApiDB.COLUMN.API_TYPE.getValue());
+               this.apiId = (Integer) data.get(FileApiDB.COLUMN.API_ID.getValue());
+               this.time = (Long) data.get(FileApiDB.COLUMN.EVENT_TIME.getValue());
+               this.fileSize = (Long) data.get(FileApiDB.COLUMN.FILE_SIZE.getValue());
+               this.size = (Long) data.get(FileApiDB.COLUMN.SIZE.getValue());
+               this.ret = (String) data.get(FileApiDB.COLUMN.RETURN_VALUE.getValue());
+               this.args = (String) data.get(FileApiDB.COLUMN.ARGS.getValue());
+               this.errno = (Long) data.get(FileApiDB.COLUMN.ERRNO.getValue());
+               this.target = (Boolean) data.get(FileApiDB.COLUMN.TARGET.getValue());
        }
        
        public List<Object> getDBData() {
                List<Object> data = new ArrayList<Object>();
                data.add(this.seq);
-               data.add(this.fileId);
-               data.add(this.accessorId);
+               data.add(this.filePath);
+               data.add(this.pid);
+               data.add(this.tid);
                data.add(this.fdValue);
                data.add(this.fdApiType);
                data.add(this.time);
                data.add(this.apiId);
                data.add(this.errno);
+               data.add(this.ioSize);
                data.add(this.fileSize);
                data.add(this.size);
                data.add(this.ret);
                data.add(this.args);
-               
+               data.add(this.target);
                return data;
        }
        
@@ -157,6 +148,14 @@ public class FileEvent extends FileData{
                this.seq = seqNo;
        }
 
+       public long getIoSize() {
+               return ioSize;
+       }
+
+       public void setIoSize(long ioSize) {
+               this.ioSize = ioSize;
+       }
+
        public long getFileSize() {
                return fileSize;
        }
@@ -188,20 +187,4 @@ public class FileEvent extends FileData{
        public int getLockType() {
                return lockType;
        }
-       
-       public void setFileId(int fileId) {
-               this.fileId = fileId;
-       }
-       
-       public int getFileId() {
-               return fileId;
-       }
-       
-       public int getAccessorId() {
-               return accessorId;
-       }
-       
-       public void setAccessorId(int accessorId) {
-               this.accessorId = accessorId;
-       }
 }
index fefef98..dc89dc4 100644 (file)
@@ -28,26 +28,41 @@ package org.tizen.dynamicanalyzer.ui.file.model;
 
 public class FileSelectedData extends FileEvent{
        private boolean isParentChart = false;
-       private FileAccessor accessor = null;
        
-       public FileSelectedData(FileAccessor accessor, boolean isParentChart) {
-               this.accessor = accessor;
-               this.accessorId = accessor.getAccessorId();
-               this.fileId = accessor.getFileId();
-       }
-       
-       /*public FileSelectedData(int accessorId, int fileId, boolean isParentChart) {
-               this.fileId = fileId;
-               this.accessorId = accessorId;
+       public FileSelectedData(String filePath, int pid, int tid,long fd, boolean isParentChart) {
+               this.filePath = filePath;
+               this.pid = pid;
+               this.tid = tid;
+               this.fdValue = fd;
                this.isParentChart = isParentChart;
-       }*/
+       }
        
-       public FileSelectedData(int fileId, boolean isParentChart) {
-               this.fileId = fileId;
+       public FileSelectedData(String filePath, int pid, int tid, long fd, 
+                       long fileSize, boolean isParentChart) {
+               this.pid = pid;
+               this.tid = tid;
+               this.fdValue = fd;
                this.isParentChart = isParentChart;
+               this.filePath = filePath;
+               this.fileSize = fileSize;
+       }
+
+       public int getPid() {
+               return pid;
+       }
+
+       public void setPid(int pid) {
+               this.pid = pid;
+       }
+
+       public int getTid() {
+               return tid;
+       }
+
+       public void setTid(int tid) {
+               this.tid = tid;
        }
-                       
-                       
+
        public boolean isParentChart() {
                return isParentChart;
        }
@@ -56,8 +71,8 @@ public class FileSelectedData extends FileEvent{
                this.isParentChart = isParentChart;
        }
        
-       public FileAccessor getFileAccessor() {
-               return accessor;
+       public String getFilePath(){
+               return filePath;
        }
        
        public String getFileName() {
@@ -66,4 +81,12 @@ public class FileSelectedData extends FileEvent{
                return fileName;
        }
        
+       public long getFileSize() {
+               return fileSize;
+       }
+       
+       public void getFileSize(long fileSize) {
+               this.fileSize = fileSize;
+       }
+
 }
index 450a4d4..04af3c7 100644 (file)
@@ -29,25 +29,82 @@ package org.tizen.dynamicanalyzer.ui.file.model;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.tizen.dynamicanalyzer.ui.file.data.FileStatusDB;
+
 public class FileStatus {
-       private int fileId = -1;
+       private String filePath = null;
+       private int pid = -1;
+       private int tid = -1;
+       private long fd = -1;
        private int apiType = -1;       // only open, close event
        private long eventTime = -1;
-
-       public FileStatus(int fileId, int apiType, long eventTime) {
-               this.fileId = fileId;
+       private long errNo = 0;
+       
+       public FileStatus(int pid, int tid, long fd, String filePath,
+                       int apiType, long eventTime, long errNo) {
+               this.filePath = filePath;
+               this.pid = pid;
+               this.tid = tid;
+               this.fd = fd;
                this.apiType = apiType;
                this.eventTime = eventTime;
+               this.errNo = errNo;
        }
        
        public List<Object> getDBData() {
                List<Object> data = new ArrayList<Object>();
-               data.add(this.fileId);
+               data.add(this.pid);
+               data.add(this.tid);
+               data.add(this.filePath);
+               data.add(this.fd);
                data.add(this.apiType);
                data.add(this.eventTime);
+               data.add(this.errNo);
                return data;
        }
        
+       public FileStatus(List<Object> data) {
+               this.pid = (Integer)data.get(FileStatusDB.COLUMN.PID.getValue());
+               this.tid = (Integer)data.get(FileStatusDB.COLUMN.TID.getValue());
+               this.filePath = (String)data.get(FileStatusDB.COLUMN.FILE_PATH.getValue());
+               this.fd = (Long)data.get(FileStatusDB.COLUMN.FD.getValue());
+               this.apiType = (Integer)data.get(FileStatusDB.COLUMN.API_TYPE.getValue());
+               this.eventTime = (Long)data.get(FileStatusDB.COLUMN.EVENT_TIME.getValue());
+               this.errNo = (Long)data.get(FileStatusDB.COLUMN.ERRNO.getValue());
+       }
+
+       public String getFilePath() {
+               return filePath;
+       }
+
+       public void setFilePath(String filePath) {
+               this.filePath = filePath;
+       }
+
+       public int getPid() {
+               return pid;
+       }
+
+       public void setPid(int pid) {
+               this.pid = pid;
+       }
+
+       public int getTid() {
+               return tid;
+       }
+
+       public void setTid(int tid) {
+               this.tid = tid;
+       }
+       
+       public long getFd() {
+               return fd;
+       }
+
+       public void setFd(long fd) {
+               this.fd = fd;
+       }
+
        public int getApiType() {
                return apiType;
        }
@@ -63,11 +120,13 @@ public class FileStatus {
        public void setApiType(int apiType) {
                this.apiType = apiType;
        }
-       public void setFileId(int fileId) {
-               this.fileId = fileId;
+       
+       public void setErrNo(long errNo) {
+               this.errNo = errNo;
+       }
+       
+       public long getErrNo() {
+               return errNo;
        }
 
-       public int getFileId() {
-               return fileId;
-       }
 }
index 955df9c..c210b77 100644 (file)
@@ -40,10 +40,11 @@ import org.tizen.dynamicanalyzer.database.IResultSet;
 public class CallStackDataDBTable extends DBTable {
        private static final String TABLENAME="CallStackData";
        private static final String queryto_withSeq = "where %s = %s";
-
+       //TODO: use Array type of DB
        public enum COLUMN {
                SEQ(0, "SEQNUMBER"),
-               ADDRESS_ARRAY(1, "ADDRESS_ARRAY");
+               ORDER(1, "CallStackOrder"),
+               PCADDR(2, "PcAddr");
                
                public final int index;
                public final String name;
@@ -61,7 +62,8 @@ public class CallStackDataDBTable extends DBTable {
        
        public CallStackDataDBTable() {
                addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.ADDRESS_ARRAY.name, DBConstants.NOT_NULL, DBConstants.BIGINT_ARRAY));             
+               addColumn(new DBColumn(COLUMN.ORDER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.PCADDR.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));             
        }
 
        public List<List<Object>> getCallStackAddrsFromDB(long seq) {
@@ -69,13 +71,19 @@ public class CallStackDataDBTable extends DBTable {
                                COLUMN.SEQ.name, seq);
                
                List<String> selectColumn = new ArrayList<String>();
-               selectColumn.add(COLUMN.ADDRESS_ARRAY.name);
+               selectColumn.add(COLUMN.PCADDR.name);
                
                return selectData(selectColumn, where, new IResultSet() {
                        @Override
                        public List<Object> extractDataFromResultSet(ResultSet rs) {
                                List<Object> row = new ArrayList<Object>();
-                               row.add(getArrayFromResultSet(rs, 1, Long.valueOf(0)));                         
+                               try {
+                                       row.add(Long.valueOf(rs.getLong(1)));
+                               } catch (SQLException e) {
+                                       e.printStackTrace();
+                                       return null;
+                               }
+                               
                                return row;
                        }
                }); 
@@ -91,8 +99,8 @@ public class CallStackDataDBTable extends DBTable {
                } else {
                        try {
                                prep.setLong(COLUMN.SEQ.index + 1, (Long) (rowData.get(COLUMN.SEQ.index)));
-                               setArrayToPreparedStatement(COLUMN.ADDRESS_ARRAY.index, DBConstants.LONG,
-                                               prep, rowData);
+                               prep.setInt(COLUMN.ORDER.index + 1, (Integer) (rowData.get(COLUMN.ORDER.index)));
+                               prep.setLong(COLUMN.PCADDR.index + 1, (Long) (rowData.get(COLUMN.PCADDR.index)));
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
index 5bab326..4db3cd8 100644 (file)
 package org.tizen.dynamicanalyzer.ui.info.callstack;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.NavigableMap;
-import java.util.SortedMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
-import org.tizen.dynamicanalyzer.common.AnalyzerManager;
-import org.tizen.dynamicanalyzer.common.DALimit;
 import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
 import org.tizen.dynamicanalyzer.project.BinaryInfo;
-import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler;
-import org.tizen.dynamicanalyzer.ui.toolbar.setting.SettingDataManager;
-import org.tizen.dynamicanalyzer.ui.toolbar.setting.TargetData;
 
 // inserter thread for callstackdata, callstackunit
 public class CallStackInserter implements Runnable {
@@ -52,7 +42,6 @@ public class CallStackInserter implements Runnable {
        private static volatile Thread inserterThread = null;
        private static final int FULL_COUNT = 100;
        private static boolean stopTrace = false;
-       private static long lastInsertSeq = -1;
        
        private CallStackDataDBTable callStackDataTable = null;
        private CallStackUnitDBTable callStackUnitTable = null;
@@ -133,17 +122,19 @@ public class CallStackInserter implements Runnable {
 
                while ((csd = callstackDataQueue.poll()) != null) {
                        List<Long> addrs = csd.getAddrs();
-
-                       List<Object> insertRowData = new ArrayList<Object>();                           
-                       try {
-                               insertRowData.add(new Long(csd.getSeq()));
-                               insertRowData.add(addrs);
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
+                       int size = addrs.size();
+
+                       for(int i = 0; i < size; i++) {
+                               List<Object> insertRowData = new ArrayList<Object>();                           
+                               try {
+                                       insertRowData.add(new Long(csd.getSeq()));
+                                       insertRowData.add(new Integer(i));
+                                       insertRowData.add(new Long(addrs.get(i)));
+                               } catch (ArrayIndexOutOfBoundsException e) {
+                                       e.printStackTrace();
+                               }
+                               insertData.add(insertRowData);
                        }
-                       insertData.add(insertRowData);
-                       
-                       lastInsertSeq = csd.getSeq();
                        if ((insertCount-- <= 0) && (stopTrace == false)) {
                                break;
                        }
@@ -151,33 +142,6 @@ public class CallStackInserter implements Runnable {
                if (insertData.size() > 0) {
                        callStackDataTable.insertData(insertData);
                }
-               // remove unnecessary callstackdata from memory
-               TargetData target = SettingDataManager.getInstance().getConnectedTarget();
-               if (target.isSelectedFeature(ConfigureLabels.FEATURE_FUNCTION_SAMPLING)) {              
-                       // sample feature is on
-                       long lastSampleSeq = FunctionUsageProfiler.getInstance().getLastSampleSeq();
-                       if (lastSampleSeq != -1) {
-                               if (lastSampleSeq <= lastInsertSeq) {
-                                       removeCallstackData(lastSampleSeq);
-                               } else { // lastSampleSeq > lastInsertSeq
-                                       removeCallstackData(lastInsertSeq);
-                               }
-                       }
-               } else { // sample feature is off
-                       // callstackdata is not needed in memory after insertion to DB
-                       removeCallstackData(lastInsertSeq);                     
-               }
-               // clear SeqTimeMap if number of entries over > 1M
-               List<Integer> tids = AnalyzerManager.getCallstackManager().getTidsOfSeqTimeMap();
-               int size = tids.size();
-               for (int i = 0; i < size; i++) {
-                       NavigableMap<Long, Long> seqByTimeMap = 
-                                       AnalyzerManager.getCallstackManager()
-                                       .getSeqTimeByTidMap(tids.get(i));                       
-                       if (seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) {
-                               seqByTimeMap.clear();
-                       }
-               }
        }
 
        public void offerCallstackUnit(CallStackUnit csu) {
@@ -191,17 +155,6 @@ public class CallStackInserter implements Runnable {
                        callstackDataQueue.offer(csd);
                }
        }
-       
-       private void removeCallstackData(long seq) {
-               NavigableMap<Long, CallStackData> callstackDataMap = AnalyzerManager
-                               .getCallstackManager().getCallStackDataBySeqMap();
-               SortedMap<Long, CallStackData> headMap = callstackDataMap.headMap(seq);
-               Iterator<Map.Entry<Long, CallStackData>> itr = headMap.entrySet().iterator();
-               while (itr.hasNext()) {
-                       itr.next();
-                       itr.remove();
-               }
-       }
 
        @Override
        public void run() {
index d7e9b89..6e5a9a2 100644 (file)
@@ -27,6 +27,7 @@
 
 package org.tizen.dynamicanalyzer.ui.info.callstack;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -135,25 +136,41 @@ public class CallstackTable extends DATableComposite {
                                time = logData.getTime();
                        }
 
+                       Map<Long, CallStackData> cdMap = AnalyzerManager
+                                       .getCallstackManager().getCallStackDataBySeqMap();
                        Map<Long, CallStackUnit> addrMap = AnalyzerManager
                                        .getCallstackManager().getCallStackApiAddrByPidMap(pid);
-                       if (null == addrMap) {
+                       if (null == cdMap || null == addrMap) {
                                return;
                        }
-
+                       CallStackData csd = cdMap.get(seqNum);
                        List<Long> addrs = null;
-                       addrs = AnalyzerManager.getCallstackManager().getCallstackAddrListFromSeq(seqNum);
-                       if (null == addrs) {
-                               return;
+                       if (null == csd) { // callstackdata is not in memory, find from DB
+                               List<List<Object>> callStackAddrs = 
+                                               CallStackInserter.getInstance().getCallStackDataTable()
+                                               .getCallStackAddrsFromDB(seqNum); 
+
+                               if (null == callStackAddrs || 0 == callStackAddrs.size() 
+                                               || null == callStackAddrs.get(0)) { // not found
+                                       return;
+                               }
+
+                               int size = callStackAddrs.size();
+                               addrs = new ArrayList<Long>(); 
+                               for (int i = 0; i < size; i++) {
+                                       addrs.add((Long) callStackAddrs.get(i).get(0));
+                               }
+                       } else { // callstackdata is in memory
+                               addrs = csd.getAddrs();
                        }
-                       
+
                        int size = addrs.size();
                        for (int i = 0; i < size; i++) {
                                String hexAddr = Formatter.toHexString(addrs.get(i).toString());
                                CallStackUnit api = addrMap.get(addrs.get(i));
 
                                if (null == api) {
-                                       Logger.debug("callstackunit for addr : " + hexAddr + " not found");     
+                                       Logger.debug("callstackunit for addr : " + hexAddr + " not found");                                     
                                        return;
                                }
 
index 706d896..91da69d 100644 (file)
@@ -115,7 +115,6 @@ public class SummaryDataManager extends PageDataManager {
 
        public void clear() {
                leakDataMaker.clear();
-               warningDataMaker.clear();
        }
 
        @Override
index 5f1f1c0..86b9c2b 100644 (file)
@@ -29,9 +29,11 @@ package org.tizen.dynamicanalyzer.ui.summary.profiling;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
+import java.util.SortedMap;
 
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.Global;
@@ -45,6 +47,7 @@ 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.swap.model.data.ProfileData;
+import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackData;
 import org.tizen.dynamicanalyzer.ui.toolbar.setting.SettingDataManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.setting.TargetData;
 
@@ -56,6 +59,7 @@ public class FunctionUsageProfiler extends PageDataManager {
        public static final String APPLICATION_KEY = "profiling_app_bin_key";//$NON-NLS-1$
        public static final String DEPENDENT_LIB_KEY = "profiling_dependent_lib_key";//$NON-NLS-1$
        public static final String UNKNOWN = CommonConstants.EMPTY;
+       public static final int CALLSTACKDATA_MAX = 5000;
 
        private static FunctionUsageProfiler instance = null;
        private boolean isSetSamplePeriod = false;
@@ -65,21 +69,6 @@ public class FunctionUsageProfiler extends PageDataManager {
        private FunctionSampleDBTable functionSampleTable = null;
        
        private HashMap<Integer, ProfileDataMaker> profileDataMakerMap = null;
-       
-       private static long lastSampleSeq = -1;
-       private Object sampleSeqLock = new Object();
-       
-       public void setLastSampleSeq(long seq) {
-               synchronized(sampleSeqLock) {
-                       lastSampleSeq = seq;
-               }
-       }
-       
-       public long getLastSampleSeq() {
-               synchronized(sampleSeqLock) {
-                       return lastSampleSeq;
-               }
-       }
 
        private FunctionUsageProfiler() {
                profilingDataTable = new ProfilingDataDBTable();
@@ -216,12 +205,16 @@ public class FunctionUsageProfiler extends PageDataManager {
                        for (int j = 0; j < count; j++) {
                                ProfilingChildData data = pDataList.get(j);
                                List<Integer> childList = data.getChildren();
+                               int childCount = childList.size();
                                try {
-                                       List<Object> insertRowData = new ArrayList<Object>();                                           
-                                       insertRowData.add(Integer.valueOf(data.getProfilingDataID()));
-                                       insertRowData.add(new Integer(data.getPid()));
-                                       insertRowData.add(childList);
-                                       insertData.add(insertRowData);
+                                       for (int k = 0; k < childCount; k++)
+                                       {
+                                               List<Object> insertRowData = new ArrayList<Object>();                                           
+                                               insertRowData.add(Integer.valueOf(data.getProfilingDataID()));
+                                               insertRowData.add(new Integer(data.getPid()));
+                                               insertRowData.add(new Integer(childList.get(k)));
+                                               insertData.add(insertRowData);
+                                       }
                                } catch (ArrayIndexOutOfBoundsException e) {
                                        e.printStackTrace();
                                }
@@ -258,18 +251,29 @@ public class FunctionUsageProfiler extends PageDataManager {
                                        getInstance().getProfileDataMakerByPid(
                                                        sample.get(i).getPid())
                                                        .makeFunctionUsageProfileData(sampleLog);
-                                       // set LastSampleSeq
-                                       NavigableMap<Long, Long> seqByTimeMap = 
-                                                       AnalyzerManager.getCallstackManager()
-                                                       .getSeqTimeByTidMap(sampleLog.getTid());
-                                       // find the time of callstackdata which was made 
-                                       // right before the current sample time
-                                       // callstackdatas made before that time is needless                                             
-                                       Long lastTime = seqByTimeMap
-                                                       .floorKey(sampleLog.getTime());
-                                       if (lastTime != null) {
-                                               Long lastSeq = seqByTimeMap.get(lastTime);
-                                               setLastSampleSeq(lastSeq);
+                                       Map<Long, CallStackData> callstackDataMap = AnalyzerManager.getCallstackManager()
+                                                       .getCallStackDataBySeqMap();
+                                       if (callstackDataMap.size() > CALLSTACKDATA_MAX) {
+                                               // remove unnecessary callstackdata from memory
+                                               NavigableMap<Long, Long> seqByTimeMap = 
+                                                               AnalyzerManager.getCallstackManager()
+                                                               .getSeqTimeByTidMap(sampleLog.getTid());
+                                               // find the time of callstackdata which was made 
+                                               // right before the current sample time
+                                               // callstackdatas made before that time is needless                                             
+                                               Long lastTime = seqByTimeMap
+                                                               .floorKey(sampleLog.getTime());
+                                               if (null != lastTime) {
+                                                       SortedMap<Long, Long> headMap = 
+                                                                       seqByTimeMap.headMap(lastTime);
+                                                       Iterator<Map.Entry<Long, Long>> itr = headMap
+                                                                       .entrySet().iterator();
+                                                       while (itr.hasNext()) {
+                                                               Map.Entry<Long, Long> entry = itr.next();
+                                                               callstackDataMap.remove(entry.getValue());
+                                                               itr.remove();
+                                                       }
+                                               }
                                        }
                                        // save to DB
                                        try {
@@ -289,6 +293,13 @@ public class FunctionUsageProfiler extends PageDataManager {
                                        functionSampleTable.insertData(insertData);
                                }
                        }
+               } else { // sampling is off, callstackdata is not needed in memory
+                       // need to maintain callstackdata until insertion to DB is finished
+                       Map<Long, CallStackData> callstackDataMap = AnalyzerManager.getCallstackManager()
+                                       .getCallStackDataBySeqMap();
+                       if (callstackDataMap.size() > CALLSTACKDATA_MAX) {
+                               callstackDataMap.clear();
+                       }
                }
        }
 }
index 935d47d..bb2d9ab 100644 (file)
@@ -33,6 +33,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.NavigableMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
@@ -267,11 +268,13 @@ public class ProfileDataMaker {
                int pid = sampleLog.getPid();
                
                if(DACommunicator.isSWAPVersion()) {
-                       long userCallstackSeq;
+                       long seq;
                        int tid = sampleLog.getTid();
                        long sampleTime = sampleLog.getTime();  
-
+                       long callstackTime;
+                       Long longTime = null;
                        CallStackData callstackData;
+                       NavigableMap<Long, Long> seqByTimeMap = callstackManager.getSeqTimeByTidMap(tid);
                        Map<Long, CallStackUnit> addrMap = callstackManager
                                        .getCallStackApiAddrByPidMap(pid);
 
@@ -283,22 +286,18 @@ public class ProfileDataMaker {
                                addrMap.put(selfAddr, newCallstackUnit);                                        
                        }
                        
-                       userCallstackSeq = callstackManager.getSeqOfUserCallstackForTime(tid, sampleTime);
-                       if (-1 != userCallstackSeq) {
-                               callstackData = callstackManager.getCallStackDataBySeqMap().get(userCallstackSeq);
-                               if (null == callstackData) {
-                                       Logger.debug("CallStackData is not found for seq : " + userCallstackSeq);
-                                       addrs = new ArrayList<Long>();
-                                       addrs.add(selfAddr);
-                               } else {
-                                       addrs = new ArrayList<Long>(callstackData.getAddrs());
-                                       for(int i = 0; i < addrs.size(); i++)   {
-                                               if(addrs.get(i) == 0) {
-                                                       addrs.remove(i);
-                                               }
+                       longTime = seqByTimeMap.floorKey(sampleTime);
+                       if(null != longTime) {
+                               callstackTime = longTime.longValue();
+                               seq = seqByTimeMap.get(callstackTime);
+                               callstackData = callstackManager.getCallStackDataBySeqMap().get(seq);
+                               addrs = new ArrayList<Long>(callstackData.getAddrs());
+                               for(int i = 0; i < addrs.size(); i++)   {
+                                       if(addrs.get(i) == 0) {
+                                               addrs.remove(i);
                                        }
-                                       addrs.add(0, selfAddr);
                                }
+                               addrs.add(0, selfAddr);
                        } else {
 //                             Logger.debug("makeFunctionUsageProfileData : cannot find seq by time");
                                addrs = new ArrayList<Long>();
index f222537..96090c2 100644 (file)
@@ -38,11 +38,11 @@ import org.tizen.dynamicanalyzer.database.DBTable;
 
 public class ProfilingChildDataDBTable extends DBTable {
        private static final String TABLENAME="ProfilingChildData";
-
+       // TODO: use Array type of DB
        public enum COLUMN {
                PROFILINGDATAID(0, "ProfilingDataID"),          
                PID(1, "PID"),          
-               CHILDSEQARRAY(2, "CHILD_SEQUENCE_ARRAY");       
+               CHILDDATAID(2, "ChildDataID");          
                
                public final int index;
                public final String name;
@@ -61,8 +61,8 @@ public class ProfilingChildDataDBTable extends DBTable {
        public ProfilingChildDataDBTable() {
                addColumn(new DBColumn(COLUMN.PROFILINGDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));            
                addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.CHILDSEQARRAY.name, DBConstants.NOT_NULL, DBConstants.INTEGER_ARRAY));
-       }
+               addColumn(new DBColumn(COLUMN.CHILDDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               }
 
        public List<List<Object>> getProfilingChildDataFromDB() {
                return selectAllColumnData(null);
@@ -79,7 +79,7 @@ public class ProfilingChildDataDBTable extends DBTable {
                        try {
                                prep.setInt(COLUMN.PROFILINGDATAID.index + 1, (Integer) (rowData.get(COLUMN.PROFILINGDATAID.index)));                           
                                prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
-                               setArrayToPreparedStatement(COLUMN.CHILDSEQARRAY.index, DBConstants.DBTYPE_INT4, prep, rowData);
+                               prep.setInt(COLUMN.CHILDDATAID.index + 1, (Integer) (rowData.get(COLUMN.CHILDDATAID.index)));
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
@@ -95,7 +95,7 @@ public class ProfilingChildDataDBTable extends DBTable {
                try {
                        row.add(Integer.valueOf(rs.getInt(1)));
                        row.add(Integer.valueOf(rs.getInt(2)));
-                       row.add(getArrayFromResultSet(rs, 3, Integer.valueOf(0)));
+                       row.add(Integer.valueOf(rs.getInt(3)));
                } catch (SQLException e) {
                        e.printStackTrace();
                        return null;
index 419a8a3..bb44904 100644 (file)
@@ -4,7 +4,6 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
@@ -30,8 +29,6 @@ package org.tizen.dynamicanalyzer.ui.thread;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 
 import org.eclipse.nebula.widgets.grid.GridItem;
@@ -43,34 +40,42 @@ import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.error.ErrorCodeManager;
 import org.tizen.dynamicanalyzer.model.TableInput;
+import org.tizen.dynamicanalyzer.swap.model.data.LogData;
 import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData;
-import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DAApiListTableComposite;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.utils.Formatter;
 
 public class ThreadAPIListTable extends DAApiListTableComposite {
-
+       
        private enum API {
-               SEQ(1), APICALLTIME(2), APIID(3), PID(4), TID(5), ARGUMENT(6), RETURN(7), ERRORNO(8);
+               SEQ(1),
+               APICALLTIME(2),
+               APIID(3),
+               PID(4),
+               TID(5),
+               ARGUMENT(6),
+               RETURN(7),
+               ERRORNO(8);
+               
                public final int index;
-
+               
                API(int index) {
                        this.index = index;
                }
        }
-
+       
        public ThreadAPIListTable(Composite parent, int compStyle, int tableStyle) {
                super(parent, compStyle, tableStyle);
                table.addSelectionListener(new SelectionListener() {
+
                        @Override
                        public void widgetSelected(SelectionEvent e) {
                                GridItem[] items = table.getSelection();
@@ -79,6 +84,7 @@ public class ThreadAPIListTable extends DAApiListTableComposite {
                                }
                                long startTime = 0;
                                long endTime = 0;
+
                                DATableDataFormat dataFormat;
                                for (int i = 0; i < items.length; i++) {
                                        dataFormat = (DATableDataFormat) items[i].getData();
@@ -93,8 +99,9 @@ public class ThreadAPIListTable extends DAApiListTableComposite {
                                                endTime = itemTime;
                                        }
                                }
-                               DASelectionData selData = new DASelectionData(ThreadPage.listViewID, startTime,
-                                               endTime, items, table);
+
+                               DASelectionData selData = new DASelectionData(
+                                               ThreadPage.listViewID, startTime, endTime, items, table);
                                AnalyzerManager.getCurrentPage().updateView(selData);
                        }
 
@@ -107,110 +114,97 @@ public class ThreadAPIListTable extends DAApiListTableComposite {
 
        @Override
        protected List<TableInput> makeTableInput() {
-               List<TableInput> input = new ArrayList<TableInput>();
-               ThreadAPIListView view = (ThreadAPIListView) AnalyzerManager.getCurrentPage().getView(
-                               ThreadPage.listViewID);
-               if(null == view){
-                       return input;
-               }
+               ThreadAPIListView view = (ThreadAPIListView) AnalyzerManager
+                               .getCurrentPage().getView(ThreadPage.listViewID);
+
                ThreadPageData data = view.getPageData();
-               if (null == data) {
-                       return input;
-               }
+               long rangeStartTime = view.getAnalysisStartTime();
+               long rangeEndTime = view.getAnaysisEndTime();
 
-               int selectID = -1;
-               List<ProbeCommonData> syncAPIList = new ArrayList<ProbeCommonData>();
-               if (data instanceof ThreadPageThreadData) {
-                       ThreadPageThreadData tData = (ThreadPageThreadData) data;
-                       selectID = tData.getThreadDataID();
-               } else if (data instanceof ThreadPageSyncData) {
-                       ThreadPageSyncData sData = (ThreadPageSyncData) data;
-                       selectID = sData.getSyncDataID();
-                       syncAPIList.addAll(getSyncAPIOfNotInsert(selectID));
-               } else {
-                       Logger.debug("failed to selectionD data in Thread Page API table");
+               if (null == data) {
                        return null;
                }
 
-               syncAPIList.addAll(selectAPIListFromDB(data, selectID));
-               sortListByTime(syncAPIList);
-               for (ProbeCommonData apiData : syncAPIList) {
-                       List<String> contentText = new ArrayList<String>();
-                       List<String> contentData = new ArrayList<String>();
-
-                       contentText.add(0, String.valueOf(apiData.getSeq()));
-                       contentData.add(String.valueOf(apiData.getSeq()));
-
-                       contentText.add(Formatter.toTimeFormat(apiData.getTime()));
-                       contentData.add(Long.toString(apiData.getTime()));
-
-                       contentText.add(Integer.toString(apiData.getPid()));
-                       contentData.add(Integer.toString(apiData.getPid()));
-
-                       contentText.add(Long.toString(apiData.getTid()));
-                       contentData.add(Long.toString(apiData.getTid()));
-
-                       contentText.add(apiData.getApiName());
-                       contentData.add(apiData.getApiName());
-
-                       contentText.add(apiData.getArgs());
-                       contentData.add(apiData.getArgs());
-
-                       contentText.add(apiData.getReturn());
-                       contentData.add(apiData.getReturn());
-
-                       String errMsg = ErrorCodeManager.getInatance().getErrorCode(apiData.getErrno()).name();
-                       if (null == errMsg) {
-                               errMsg = "undefined error code";
-                       }
-                       contentText.add(errMsg);
-                       contentData.add(errMsg);
-
-                       DATableDataFormat tableData = new DATableDataFormat(apiData.getSeq());
-                       tableData.setLogData(apiData);
-                       tableData.getData().addAll(contentData);
-                       TableInput tableInput = new TableInput();
-                       tableInput.setText(contentText);
-                       tableInput.setData(tableData);
-                       if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
-                               tableInput.setFailed(true);
-                       }
-                       input.add(tableInput);
-                       if (apiData.getTime() >= view.getAnalysisStartTime()
-                                       && apiData.getTime() <= view.getAnaysisEndTime()) {
-                               tableInput.setInRange(true);
-                       }
-               }
-               return input;
-       }
-
-       private List<ProbeCommonData> selectAPIListFromDB(ThreadPageData data, int selectID) {
-               List<ProbeCommonData> returnList = new ArrayList<ProbeCommonData>();
-               if(null == data){
-                       return returnList;
-               }
+               List<TableInput> input = new ArrayList<TableInput>();
                ResultSet rs = null;
+
                if (data instanceof ThreadPageThreadData) {
-                       String query = String.format(ThreadAPIDBTable.SELECT_QUERY, selectID);
+                       ThreadPageThreadData tData = (ThreadPageThreadData) data;
+                       String query = String.format(ThreadAPIDBTable.SELECT_QUERY, tData.getThreadDataID()); 
                        rs = SqlConnectionManager.executeQueryRS(query);
                        if (null == rs) {
                                Logger.debug("failed to query api data in thread API table");
-                               return returnList;
+                               return null;
                        }
                } else if (data instanceof ThreadPageSyncData) {
-                       String query = String.format(SyncAPIDBTable.SELECT_QUERY, selectID);
+                       ThreadPageSyncData sData = (ThreadPageSyncData) data;
+                       String query = String.format(SyncAPIDBTable.SELECT_QUERY, sData.getSyncDataID());
                        rs = SqlConnectionManager.executeQueryRS(query);
                        if (null == rs) {
                                Logger.debug("failed to query api data in sync API table");
-                               return returnList;
-                       }
+                               return null;
+                       }                       
                } else {
                        Logger.error("unknown thread page data type!!");
-                       return returnList;
+                       return null;
                }
+
                try {
-                       while (rs.next()) {
-                               returnList.add(makeProbeCommonData(rs));
+                       while(rs.next()) {
+                               ProbeCommonData apiData = makeProbeCommonData(rs);
+                               
+                               int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+                               if (selectedPid != 0) {
+                                       if (selectedPid != apiData.getPid()) {
+                                               continue;
+                                       }
+                               }
+                               List<String> contentText = new ArrayList<String>();
+                               List<String> contentData = new ArrayList<String>();
+       
+                               contentText.add(0, String.valueOf(apiData.getSeq()));
+                               contentData.add(String.valueOf(apiData.getSeq()));
+       
+                               contentText.add(Formatter.toTimeFormat(apiData.getTime()));
+                               contentData.add(Long.toString(apiData.getTime()));
+       
+                               contentText.add(Integer.toString(apiData.getPid()));
+                               contentData.add(Integer.toString(apiData.getPid()));
+       
+                               contentText.add(Long.toString(apiData.getTid()));
+                               contentData.add(Long.toString(apiData.getTid()));
+       
+                               contentText.add(apiData.getApiName());
+                               contentData.add(apiData.getApiName());
+       
+                               contentText.add(apiData.getArgs());
+                               contentData.add(apiData.getArgs());
+       
+                               contentText.add(apiData.getReturn());
+                               contentData.add(apiData.getReturn());
+       
+                               String errMsg = ErrorCodeManager.getInatance()
+                                               .getErrorCode(apiData.getErrno()).name();
+                               if (null == errMsg) {
+                                       errMsg = "undefined error code";
+                               }
+                               contentText.add(errMsg);
+                               contentData.add(errMsg);
+       
+                               DATableDataFormat tableData = new DATableDataFormat(apiData.getSeq());
+                               tableData.setLogData(apiData);
+                               tableData.getData().addAll(contentData);
+                               TableInput tableInput = new TableInput();
+                               tableInput.setText(contentText);
+                               tableInput.setData(tableData);
+                               if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
+                                       tableInput.setFailed(true);
+                               }
+                               input.add(tableInput);
+       
+                               if (apiData.getTime() >= rangeStartTime && apiData.getTime() <= rangeEndTime) {
+                                       tableInput.setInRange(true);
+                               }
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
@@ -219,38 +213,38 @@ public class ThreadAPIListTable extends DAApiListTableComposite {
                                SqlConnectionManager.releaseResultSet(rs);
                        }
                }
-               return returnList;
-       }
 
-       private List<ProbeCommonData> getSyncAPIOfNotInsert(int selectID) {
-               List<ProbeCommonData> returnList = new ArrayList<ProbeCommonData>();
-               List<ThreadPageSyncDataEvent> notInsertList = ThreadDataManager.getInstance()
-                               .getSyncDataMaker().getNotInsertSyncEventList();
-               for (ThreadPageSyncDataEvent event : notInsertList) {
-                       if (event.getSyncDataID() != selectID) {
-                               continue;
-                       }
-                       returnList.add((SyncData) event.getContents());
-               }
-               return returnList;
+               return input;
        }
 
-       private void sortListByTime(List<ProbeCommonData> list) {
-               Comparator<ProbeCommonData> comparator = new Comparator<ProbeCommonData>() {
-                       @Override
-                       public int compare(ProbeCommonData arg0, ProbeCommonData arg1) {
-                               if (arg0.getTime() > arg1.getTime()) {
-                                       return 1;
-                               } else if (arg0.getTime() < arg1.getTime()) {
-                                       return -1;
-                               } else {
-                                       return 0;
-                               }
+       protected void actionSetStartEnd(int type) {
+               GridItem item = table.getItem(mousePoint);
+               if (null != item) {
+                       LogData data = ((DATableDataFormat) item.getData()).getLogData();
+                       long inputTime = data.getTime();
+                       double startTime = -1;
+                       double endTime = -1;
+
+                       if (type == START_TIME) {
+                               rangeDataManager.setMarkerStartTime(inputTime);
+                               startTime = inputTime / TimelineConstants.MEGA_DOUBLE;
+                               endTime = rangeDataManager.getMarkerEndTime()
+                                               / TimelineConstants.MEGA_DOUBLE;
+
+                       } else if (type == END_TIME) {
+                               rangeDataManager.setMarkerEndTime(inputTime);
+                               endTime = inputTime / TimelineConstants.MEGA_DOUBLE;
+                               startTime = rangeDataManager.getMarkerStartTime()
+                                               / TimelineConstants.MEGA_DOUBLE;
                        }
-               };
-               Collections.sort(list, comparator);
-       }
 
+                       ThreadChartView chartview = (ThreadChartView) (AnalyzerManager
+                                       .getCurrentPage().getView(ThreadPage.chartViewID));
+
+                       chartview.setRangeMarker(startTime, endTime);
+               }
+       }
+       
        private ProbeCommonData makeProbeCommonData(ResultSet rs) {
                ProbeCommonData pData = null;
                try {
@@ -262,7 +256,7 @@ public class ThreadAPIListTable extends DAApiListTableComposite {
                        String args = rs.getString(API.ARGUMENT.index);
                        String returnValue = rs.getString(API.RETURN.index);
                        int errorno = rs.getInt(API.ERRORNO.index);
-
+                       
                        pData = new ProbeCommonData(seq, time, apiID, pid, tid, args, returnValue, errorno);
                } catch (SQLException e) {
                        e.printStackTrace();
index 134eb8c..a94fb02 100644 (file)
@@ -4,7 +4,6 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Jooyoul Lee <jy.exe.lee@samsung.com>
@@ -37,8 +36,6 @@ import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageData;
-import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
 import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
 import org.tizen.dynamicanalyzer.ui.widgets.table.TableColumnSizePackListener;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite;
@@ -52,8 +49,10 @@ public class ThreadAPIListView extends DAViewComposite {
        private long selectionEndTime = 0;
        private int preSelectionPid = -1;
 
-       private String[] columnNames = { ThreadPageLabels.THREAD_API_LIST_VIEW_INDEX,
-                       ThreadPageLabels.THREAD_API_LIST_VIEW_TIME, ThreadPageLabels.THREAD_API_LIST_VIEW_PID,
+       private String[] columnNames = {
+                       ThreadPageLabels.THREAD_API_LIST_VIEW_INDEX,
+                       ThreadPageLabels.THREAD_API_LIST_VIEW_TIME,
+                       ThreadPageLabels.THREAD_API_LIST_VIEW_PID,
                        ThreadPageLabels.THREAD_API_LIST_VIEW_THREAD_ID,
                        ThreadPageLabels.THREAD_API_LIST_VIEW_NAME,
                        ThreadPageLabels.THREAD_API_LIST_VIEW_PARAMETER,
@@ -62,13 +61,22 @@ public class ThreadAPIListView extends DAViewComposite {
 
        private int[] columnSizes = { 35, 70, 45, 45, 180, 240, 75, 100 };
 
-       private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
-                       SWT.LEFT, SWT.LEFT };
+       private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
+                       SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT };
 
-       int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
+       int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM,
                        AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
-                       AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING,
-                       AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING };
+                       AnalyzerConstants.SORT_TYPE_NUM,
+                       AnalyzerConstants.SORT_TYPE_STRING,
+                       AnalyzerConstants.SORT_TYPE_STRING,
+                       AnalyzerConstants.SORT_TYPE_STRING,
+                       AnalyzerConstants.SORT_TYPE_STRING };
+
+       // int[] sourceColumns = { LogCenterConstants.SEQUENCE_NUMBER_INDEX,
+       // LogCenterConstants.TIME_INDEX, LogCenterConstants.APINAME_INDEX,
+       // LogCenterConstants.INPUTPARM_INDEX,
+       // LogCenterConstants.THREAD_ID_INDEX,
+       // LogCenterConstants.RETURN_INDEX, LogCenterConstants.ERROR_INDEX };
 
        ThreadAPIListTable tableComp = null;
 
@@ -81,15 +89,17 @@ public class ThreadAPIListView extends DAViewComposite {
                Composite contents = getContentArea();
                contents.setBackground(ColorResources.WINDOW_BG_COLOR);
                contents.setLayout(new FillLayout());
-               tableComp = new ThreadAPIListTable(contents, SWT.NONE, SWT.MULTI | SWT.BORDER
-                               | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+               tableComp = new ThreadAPIListTable(contents, SWT.NONE, SWT.MULTI
+                               | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
                tableComp.setTableName("Thread API List");
                tableComp.setSortTypes(sortTypes);
+               // tableComp.setSourceColumns(sourceColumns);
                tableComp.setColumnAlignment(columnAlignment);
                tableComp.setColumns(columnNames);
                tableComp.setColumnSize(columnSizes);
 
-               contents.addControlListener(new TableColumnSizePackListener(tableComp, columnSizes));
+               contents.addControlListener(new TableColumnSizePackListener(tableComp,
+                               columnSizes));
        }
 
        @Override
@@ -102,14 +112,17 @@ public class ThreadAPIListView extends DAViewComposite {
                long newAnalysisEndTime = 0;
 
                if (RangeDataManager.getInstance().isBeingAnalyzed()) {
-                       newAnalysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime();
-                       newAnalysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime();
+                       newAnalysisStartTime = RangeDataManager.getInstance()
+                                       .getAnalysisStartTime();
+                       newAnalysisEndTime = RangeDataManager.getInstance()
+                                       .getAnalysisEndTime();
                } else {
                        newAnalysisStartTime = 0;
                        newAnalysisEndTime = 0;
                }
 
-               if (newAnalysisStartTime != analysisStartTime || newAnalysisEndTime != analysisEndTime) {
+               if (newAnalysisStartTime != analysisStartTime
+                               || newAnalysisEndTime != analysisEndTime) {
                        analysisStartTime = newAnalysisStartTime;
                        analysisEndTime = newAnalysisEndTime;
                        tableComp.updateTable();
@@ -123,34 +136,33 @@ public class ThreadAPIListView extends DAViewComposite {
                }
                preSelectionPid = selectedPid;
 
-               tableComp.updateTable();
+               if (tableComp.getTable().getItemCount() > 0
+                               && data.getContents().size() != tableComp.getTable()
+                                               .getItemCount()) {
+                       tableComp.updateTable();
+               }
        }
 
        @Override
        public void updateView(DAViewData vdata) {
-               if(vdata.getViewID().equals(TimelinePage.timelineViewID)){
-                       return;
-               }
-               if (vdata instanceof DASelectionData == false) {
-                       return;
-               }
-               tableComp.clear();
-               DASelectionData data = (DASelectionData) vdata;
-               ThreadPageData pageData;
-
-               if (data.getData() instanceof ThreadPageData) {
-                       pageData = (ThreadPageData) data.getData();
-                       this.data = pageData;
-               } else if (data.getData() instanceof Integer) {
-                       this.data = null;
-               }
+               if (vdata instanceof DASelectionData) {
+                       DASelectionData data = (DASelectionData) vdata;
+                       ThreadPageData pageData;
 
-               selectionStartTime = data.getStartTime();
-               selectionEndTime = data.getEndTime();
+                       if (data.getData() instanceof ThreadPageData) {
+                               pageData = (ThreadPageData) data.getData();
+                               this.data = pageData;
+                       } else if (data.getData() instanceof Integer) {
+                               this.data = null;
+                       }
 
-               tableComp.getTable().removeAll();
-               tableComp.updateTable();
-               tableComp.setSelectionByTime(selectionStartTime, selectionEndTime);
+                       selectionStartTime = data.getStartTime();
+                       selectionEndTime = data.getEndTime();
+
+                       tableComp.getTable().removeAll();
+                       tableComp.updateTable();
+                       tableComp.setSelectionByTime(selectionStartTime, selectionEndTime);
+               }
        }
 
        @Override
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartManager.java
new file mode 100644 (file)
index 0000000..8f28182
--- /dev/null
@@ -0,0 +1,385 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@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
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.ui.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+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.thread.data.SyncAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncDataDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncEventDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadEventDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataManager;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+
+public class ThreadChartManager extends PageDataManager {
+       private static ThreadChartManager instance = null;
+       
+       private ThreadDataDBTable threadDataTable = null;
+       private ThreadEventDBTable threadEventTable = null;
+       private ThreadAPIDBTable threadAPITable = null;
+       
+       private SyncDataDBTable syncDataTable = null;
+       private SyncEventDBTable syncEventTable = null;
+       private SyncAPIDBTable syncAPITable = null;
+
+       private ThreadPageThreadDataManager tManager;
+       private ThreadPageSyncDataManager sManager;
+
+       private enum THREADEVENT {
+               EVENTTIME(0),
+               TID(1),
+               APITYPE(2),
+               TOOLTIP(3),
+               ERRORNO(4),
+               EVENTTYPE(5),
+               THREADTYPE(6),
+               CALLERID(7);
+               
+               public final int index;
+               
+               THREADEVENT(int index) {
+                       this.index = index;
+               }
+       }
+       
+       private enum SYNCEVENT {
+               EVENTTIME(0),
+               APITYPE(1),
+               TOOLTIP(2),
+               ERRORNO(3),
+               SYNCVALUE(4);
+               
+               public final int index;
+               
+               SYNCEVENT(int index) {
+                       this.index = index;
+               }
+       }
+       
+       private ThreadChartManager() {
+               threadDataTable = new ThreadDataDBTable();
+               threadEventTable = new ThreadEventDBTable();
+               threadAPITable = new ThreadAPIDBTable();
+               
+               syncDataTable = new SyncDataDBTable();
+               syncEventTable = new SyncEventDBTable();
+               syncAPITable = new SyncAPIDBTable();
+               
+               tManager = new ThreadPageThreadDataManager(null);
+               sManager = new ThreadPageSyncDataManager(null);
+       }
+
+       public static ThreadChartManager getInstance() {
+               if (null == instance) {
+                       instance = new ThreadChartManager();
+               }
+               return instance;
+       }
+
+       public ThreadPageThreadDataManager getThreadDataManager() {
+               return tManager;
+       }
+       
+       public ThreadEventDBTable getThreadEventDBTable() {
+               return threadEventTable;
+       }
+       
+       public ThreadAPIDBTable getThreadAPIDBTable() {
+               return threadAPITable;
+       }
+       
+       public SyncDataDBTable getSyncDataDBTable() {
+               return syncDataTable;
+       }
+       
+       public SyncEventDBTable getSyncEventDBTable() {
+               return syncEventTable;
+       }
+       
+       public SyncAPIDBTable getSyncAPIDBTable() {
+               return syncAPITable;
+       }
+
+       private List<LogData> getLogsFromLogPackage(LogPackage logPack,
+                       int logCenterConstants) {
+               Logs logs = logPack.getLogs(logCenterConstants);
+               if (null == logs || logs.getRawLogs().size() == 0) {
+                       return null;
+               }
+               List<LogData> ret = logs.getLogs();
+
+               return ret;
+       }
+
+       public void update() {
+               tManager.checkUpdate();
+               sManager.checkUpdate();
+       }
+
+       public void clear() {
+               tManager.clear();
+               sManager.clear();
+       }
+       
+       @Override
+       protected void onThreadStop() {
+               saveRemainingThreadData();
+       }
+       
+       private void saveRemainingThreadData() {
+               // ThreadPageThreadData
+               List<ThreadPageThreadData> remainedThreadData = tManager.getRows();
+               int size = remainedThreadData.size();
+               for (int i = 0; i < size; i++) {
+                       ThreadPageThreadData threadData = remainedThreadData.get(i);
+                       if (threadData.getEndTime() < 0) {
+                               saveThreadPageThreadData(threadData);
+                       }
+               }
+       }
+
+       public void openData(Map<String, String> dataMap) {
+               openThreadData();
+       }       
+       
+       private void openThreadData() {
+               //TODO: use ResultSet
+               // load ThreadPageThreadData
+               List<List<Object>> threadDatas = threadDataTable.getThreadDataFromDB();
+               int size = threadDatas.size();
+               for (int i = 0; i < size; i++) {
+                       List<Object>rowData = threadDatas.get(i);
+                       int id = (Integer) rowData.get(ThreadDataDBTable.COLUMN.THREADDATAID.index);
+                       int pid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.PID.index);                    
+                       int tid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.TID.index);
+                       byte threadType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.THREADTYPE.index);
+                       byte attrType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.ATTRIBUTETYPE.index);
+                       String attributeType = ThreadPageThreadDataManager.getAttrTypeByTypeInt(attrType);
+                       long startTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.STARTTIME.index);
+                       long endTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.ENDTIME.index);
+                       int functionID = (Integer) rowData.get(ThreadDataDBTable.COLUMN.FUNCTIONID.index);
+                       String className = (String) rowData.get(ThreadDataDBTable.COLUMN.CLASSNAME.index);
+                       
+                       ThreadPageThreadData threadData = new ThreadPageThreadData(id, pid, tid, threadType,
+                                       attributeType, startTime, endTime, functionID, className);
+                       tManager.pushRow(threadData);
+                       
+                       // load ThreadPageThreadDataEvent for the ThreadPageThreadData
+                       String query = String.format(ThreadEventDBTable.SELECT_QUERY, id);
+                       List<List<Object>> threadEvents = SqlConnectionManager.executeQuery(query);
+                       int eventSize = threadEvents.size();
+                       for (int j = 0; j < eventSize; j++) {
+                               ThreadPageThreadDataEvent threadEvent = makeThreadEvent(threadEvents.get(j));
+                               threadData.pushEvent(threadEvent);
+                       }
+               }
+               
+               // load ThreadPageSyncData
+//             List<List<Object>> syncDatas = SqlConnectionManager.executeQuery(SyncDataDBTable.SELECT_QUERY);
+               List<List<Object>> syncDatas = syncDataTable.getSyncDataFromDB();
+               int syncSize = syncDatas.size();
+               for (int i = 0; i < syncSize; i++) {
+                       ThreadPageSyncData syncData = makeSyncData(syncDatas.get(i));
+                       // load ThreadPageSyncDataEvent for the ThreadPageSyncData
+                       String query = String.format(SyncEventDBTable.SELECT_QUERY, syncData.getSyncDataID());
+                       List<List<Object>> syncEvents = SqlConnectionManager.executeQuery(query);
+                       int eventSize = syncEvents.size();
+                       for (int j = 0; j < eventSize; j++) {
+                               ThreadPageSyncDataEvent syncEvent = makeSyncEvent(syncEvents.get(j));
+                               syncData.pushEvent(syncEvent);
+                       }
+                       
+                       switch (syncData.getSyncDataType()) {
+                       case ThreadPageSyncData.SYNC_PARENT:
+                       case ThreadPageSyncData.SYNC_CHILD:
+                               sManager.pushRow(syncData);
+                               break;
+                       case ThreadPageSyncData.THREAD_CHILD:
+                               tManager.pushSyncData(syncData);                                
+                               break;
+                       default:
+                               Logger.error("unknown sync data type");
+                       }                       
+               }
+       }
+       
+       private ThreadPageThreadDataEvent makeThreadEvent(List<Object> rowData) {
+               ThreadPageThreadDataEvent threadEvent = null;
+               long time = (Long) rowData.get(THREADEVENT.EVENTTIME.index);
+               int tid = (Integer) rowData.get(THREADEVENT.TID.index);
+               String tidStr = String.valueOf(tid);
+               byte apiType = (Byte) rowData.get(THREADEVENT.APITYPE.index);
+               String tooltip = (String) rowData.get(THREADEVENT.TOOLTIP.index);
+               long errorNum = (Long) rowData.get(THREADEVENT.ERRORNO.index);
+               byte eventType = (Byte) rowData.get(THREADEVENT.EVENTTYPE.index);
+               int threadType = (Integer) rowData.get(THREADEVENT.THREADTYPE.index);
+               int callerId = (Integer) rowData.get(THREADEVENT.CALLERID.index);
+               String callerIdStr = null;
+               if (callerId != -1) {
+                       callerIdStr = String.valueOf(callerId);
+               }
+               
+               threadEvent = new ThreadPageThreadDataEvent(eventType, threadType, apiType, time,
+                               tidStr, tooltip, errorNum, null);
+               threadEvent.setCallerTid(callerIdStr);
+               
+               return threadEvent;
+       }
+       
+       private ThreadPageSyncData makeSyncData(List<Object> rowData) {
+               ThreadPageSyncData syncData = null;
+               int id = (Integer) rowData.get(SyncDataDBTable.COLUMN.SYNCDATAID.index);
+               int pid = (Integer) rowData.get(SyncDataDBTable.COLUMN.PID.index);                      
+               int tid = (Integer) rowData.get(SyncDataDBTable.COLUMN.TID.index);
+               byte syncType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCTYPE.index);
+               long syncValue = (Long) rowData.get(SyncDataDBTable.COLUMN.SYNCVALUE.index);
+               byte attrType = (Byte) rowData.get(SyncDataDBTable.COLUMN.ATTRIBUTETYPE.index);
+               String attributeType = ThreadPageSyncDataManager.getAttrTypeByTypeInt(attrType);
+               byte syncDataType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCDATATYPE.index);
+               int parentID = (Integer) rowData.get(SyncDataDBTable.COLUMN.PARENTID.index);
+               
+               syncData = new ThreadPageSyncData(id, pid, tid, syncType, syncValue, attributeType, 
+                               syncDataType, parentID);
+               
+               return syncData;
+       }
+       
+       private ThreadPageSyncDataEvent makeSyncEvent(List<Object> rowData) {
+               ThreadPageSyncDataEvent syncEvent = null;
+               long time = (Long) rowData.get(SYNCEVENT.EVENTTIME.index);
+               byte apiType = (Byte) rowData.get(SYNCEVENT.APITYPE.index);
+               String tooltip = (String) rowData.get(SYNCEVENT.TOOLTIP.index);
+               long errorNum = (Long) rowData.get(SYNCEVENT.ERRORNO.index);
+               long syncValue = (Long) rowData.get(SYNCEVENT.SYNCVALUE.index);
+               String syncValueStr = String.valueOf(syncValue);
+               
+               syncEvent = new ThreadPageSyncDataEvent(time, apiType, tooltip, errorNum, syncValueStr);
+               
+               return syncEvent;
+       }
+       
+       public int getItemIndexByTid(String tid) {
+               return tManager.getItemIndexByTid(tid);
+       }
+
+       // FIXME
+       public void setBoard(DAChartBoard threadBoard, DAChartBoard syncBoard) {
+               tManager.setBoard(threadBoard);
+               sManager.setBoard(syncBoard);
+       }
+
+       @Override
+       protected void makeData(LogPackage pack) {
+               List<LogData> loadInputs = getLogsFromLogPackage(pack,
+                               DataChannelConstants.MSG_DATA_SYSTEM);
+               if (null != loadInputs) {
+                       int logSize = loadInputs.size();
+                       for (int i = 0; i < logSize; i++) {
+                               tManager.parseLoad(loadInputs.get(i));
+                       }
+               }
+
+               List<LogData> threadInputs = getLogsFromLogPackage(pack,
+                               DataChannelConstants.MSG_PROBE_THREAD);
+               if (null != threadInputs) {
+                       int logSize = threadInputs.size();
+                       for (int i = 0; i < logSize; i++) {
+                               tManager.parseAPI(threadInputs.get(i));
+                       }
+               }
+
+               List<LogData> syncInputs = getLogsFromLogPackage(pack,
+                               DataChannelConstants.MSG_PROBE_SYNC);
+               if (null != syncInputs) {
+                       int logSize = syncInputs.size();
+                       for (int i = 0; i < logSize; i++) {
+                               tManager.parseSync(syncInputs.get(i));
+                               sManager.parseSync(syncInputs.get(i));
+                       }
+               }
+       }
+       
+       public void saveThreadPageThreadData(ThreadPageData threadPageData) {
+               List<List<Object>> insertData = new ArrayList<List<Object>>();
+               List<Object> insertRowData = new ArrayList<Object>();           
+               
+               if (threadPageData instanceof ThreadPageThreadData) {
+                       ThreadPageThreadData threadData = (ThreadPageThreadData) threadPageData;
+                       try {
+                               insertRowData.add(new Integer(threadData.getThreadDataID()));
+                               insertRowData.add(new Integer(threadData.getPid()));
+                               insertRowData.add(new Integer(threadData.getTid()));
+                               Integer type = new Integer(threadData.getType());
+                               byte threadType = type.byteValue();
+                               insertRowData.add(new Byte(threadType));
+                               String attrTypeStr = threadData.getAttrType();
+                               byte attrType = -1;
+                               if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) {
+                                       attrType = ThreadPageThreadDataManager.PTHREAD_CREATE_JOINABLE;
+                               } else if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED)) {
+                                       attrType = ThreadPageThreadDataManager.PTHREAD_CREATE_DETACHED;
+                               } else { // main thread has no attribute
+                                       attrType = -1;
+                               }
+                               insertRowData.add(new Byte(attrType));
+                               insertRowData.add(new Long(threadData.getStartTime()));                         
+                               insertRowData.add(new Long(threadData.getEndTime()));
+                               insertRowData.add(new Integer(threadData.getThreadFuncID()));
+                               insertRowData.add(new String(threadData.getThreadClassName()));
+                       } catch (ArrayIndexOutOfBoundsException e) {
+                               e.printStackTrace();
+                       } 
+                       insertData.add(insertRowData);                  
+               } else if (threadPageData instanceof ThreadPageSyncData) {
+                       
+               } else {
+                       Logger.error("Unknown ThreadPageData type!");
+               }
+               
+               if (insertData.size() > 0) {
+                       threadDataTable.insertData(insertData);
+               }
+       }
+}
\ No newline at end of file
@@ -4,7 +4,8 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * - S-Core Co., Ltd
  * 
  */
-
-package org.tizen.dynamicanalyzer.ui.thread.chart;
+package org.tizen.dynamicanalyzer.ui.thread;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
 import org.tizen.dynamicanalyzer.resources.ImageResources;
-import org.tizen.dynamicanalyzer.swap.model.data.LogDataFactory;
 import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData;
 import org.tizen.dynamicanalyzer.ui.common.SetRangeMarkerMouseMoveListener;
 import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;
 import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.ThreadPage;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
 import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser;
 import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
@@ -60,18 +58,23 @@ import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData;
 import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline;
 
 public class ThreadChartView extends DAViewComposite {
-       public static final String ID = ThreadChartView.class.getName();
        public final static int THREAD_CHART_HEIGHT = 70;
+       public final static int THREAD_COMBO_ITEM_HEIGHT = 24;
+
        private final Composite contents;
-       private ThreadChartBoard threadChartBoard;
-       private SyncChartBoard syncChartBoard;
+       private DAChartBoard threadChart;
+       private DAChartBoard syncChart;
        private DACustomCombo threadCombo;
        private DACustomCombo syncCombo;
        private final StackLayout stackLayout;
 
+       ThreadChartManager manager;
+
+       private final RangeDataManager rangeDataManager = RangeDataManager.getInstance();
+
        public ThreadChartView(Composite parent, int style) {
                super(parent, style, false);
-               setLayout(new FillLayout());
+               this.setLayout(new FillLayout());
 
                setTitle(ThreadPageLabels.THREAD_CHART_TITLE);
 
@@ -80,112 +83,92 @@ public class ThreadChartView extends DAViewComposite {
 
                stackLayout = new StackLayout();
                contents.setLayout(stackLayout);
+               threadChart = new DAChartBoard(contents, ThreadPageLabels.THREAD_CHART_TITLE);
+               threadChart.setItemHeight(THREAD_CHART_HEIGHT);
+               threadChart.setNameFont(FontResources.CHART_NAME_FONT);
 
-               initThreadChart();
-               initSyncChart();
-
-               stackLayout.topControl = threadChartBoard;
-
-               syncChartBoard.setSelectable(true);
-               threadChartBoard.setSelectable(true);
+               threadChart.addSelectionListener(new DAChartBoardSelectionListener() {
+                       @Override
+                       public void handleSelectionEvent(DAChartBoardItem item) {
+                               callUpdatePage(item);
+                       }
+               });
 
-               initializeCharts();
-       }
+               initIntervalMarkers(threadChart);
+               syncChart = new DAChartBoard(contents, ThreadPageLabels.SYNC_CHART_TITLE);
+               syncChart.setItemHeight(THREAD_CHART_HEIGHT);
+               syncChart.setNameFont(FontResources.CHART_NAME_FONT);
 
-       private void initSyncChart() {
-               syncChartBoard = new SyncChartBoard(contents, ThreadPageLabels.THREAD_CHART_SYNC,
-                               DAChartBoard.BOARD_STYLE_TIME);
-               syncChartBoard.setItemHeight(THREAD_CHART_HEIGHT);
-               syncChartBoard.setNameFont(FontResources.CHART_NAME_FONT);
-               syncChartBoard.addSelectionListener(new DAChartBoardSelectionListener() {
+               syncChart.addSelectionListener(new DAChartBoardSelectionListener() {
                        @Override
                        public void handleSelectionEvent(DAChartBoardItem item) {
                                callUpdatePage(item);
+
                        }
                });
-               syncCombo = makeDACustomCombo(syncChartBoard.getTitleComp());
-               syncCombo.initCombo();
-               syncCombo.add(ThreadPageLabels.THREAD_CHART_THREAD);
-               syncCombo.add(ThreadPageLabels.THREAD_CHART_SYNC);
-               syncCombo.select(1);
-               syncCombo.setEnabled(true);
-               syncCombo.addSelectionListener(new DACustomComboSelectionListener() {
+               initIntervalMarkers(syncChart);
+
+               stackLayout.topControl = threadChart;
+               threadCombo = makeDACustomCombo(threadChart.getTitleComp());
+               threadCombo.initCombo();
+               threadCombo.add("Thread");
+               threadCombo.add("Sync");
+               threadCombo.select(0);
+               threadCombo.setEnabled(true);
+               threadCombo.addSelectionListener(new DACustomComboSelectionListener() {
                        @Override
                        public void selectionEvent(DACustomCombo combo) {
                                String selected = combo.getText();
                                if (null == selected || selected.isEmpty()) {
                                        return;
                                }
-                               if (selected.equals(ThreadPageLabels.THREAD_CHART_THREAD)) {
-                                       changeComboSyncToThread();
+                               if (selected.equals("Sync")) {
+                                       changeComboThreadToSync();
                                } else {
                                        return;
                                }
                        }
                });
-       }
 
-       private void initThreadChart() {
-               threadChartBoard = new ThreadChartBoard(contents, ThreadPageLabels.THREAD_CHART_THREAD,
-                               DAChartBoard.BOARD_STYLE_TIME);
-               threadChartBoard.setItemHeight(THREAD_CHART_HEIGHT);
-               threadChartBoard.setNameFont(FontResources.CHART_NAME_FONT);
-               threadChartBoard.addSelectionListener(new DAChartBoardSelectionListener() {
-                       @Override
-                       public void handleSelectionEvent(DAChartBoardItem item) {
-                               callUpdatePage(item);
-                       }
-               });
-               threadCombo = makeDACustomCombo(threadChartBoard.getTitleComp());
-               threadCombo.initCombo();
-               threadCombo.add(ThreadPageLabels.THREAD_CHART_THREAD);
-               threadCombo.add(ThreadPageLabels.THREAD_CHART_SYNC);
-               threadCombo.select(0);
-               threadCombo.setEnabled(true);
-               threadCombo.addSelectionListener(new DACustomComboSelectionListener() {
+               syncCombo = makeDACustomCombo(syncChart.getTitleComp());
+               syncCombo.initCombo();
+               syncCombo.add("Thread");
+               syncCombo.add("Sync");
+               syncCombo.select(1);
+               syncCombo.setEnabled(true);
+               syncCombo.addSelectionListener(new DACustomComboSelectionListener() {
                        @Override
                        public void selectionEvent(DACustomCombo combo) {
                                String selected = combo.getText();
                                if (null == selected || selected.isEmpty()) {
                                        return;
                                }
-                               if (selected.equals(ThreadPageLabels.THREAD_CHART_SYNC)) {
-                                       changeComboThreadToSync();
+                               if (selected.equals("Thread")) {
+                                       changeComboSyncToThread();
                                } else {
                                        return;
                                }
                        }
                });
-       }
 
-       private void callUpdatePage(DAChartBoardItem selectItem) {
-               if (null == selectItem) {
-                       AnalyzerManager.getCurrentPage()
-                                       .updateView(
-                                                       new DASelectionData(ThreadPage.chartViewID,
-                                                                       (long) (((DAChartPlotIntervalMarker) threadChartBoard
-                                                                                       .getMarkers().get(
-                                                                                                       UICommonConstants.SELECTION_MARKER_INDEX))
-                                                                                       .getStartVal() * TimelineConstants.MEGA_DOUBLE),
-                                                                       (long) (((DAChartPlotIntervalMarker) threadChartBoard
-                                                                                       .getMarkers().get(
-                                                                                                       UICommonConstants.SELECTION_MARKER_INDEX))
-                                                                                       .getEndVal() * TimelineConstants.MEGA_DOUBLE),
-                                                                       new Integer(0), null));
-               } else {
-                       AnalyzerManager.getCurrentPage()
-                                       .updateView(
-                                                       new DASelectionData(ThreadPage.chartViewID,
-                                                                       (long) (((DAChartPlotIntervalMarker) threadChartBoard
-                                                                                       .getMarkers().get(
-                                                                                                       UICommonConstants.SELECTION_MARKER_INDEX))
-                                                                                       .getStartVal() * TimelineConstants.MEGA_DOUBLE),
-                                                                       (long) (((DAChartPlotIntervalMarker) threadChartBoard
-                                                                                       .getMarkers().get(
-                                                                                                       UICommonConstants.SELECTION_MARKER_INDEX))
-                                                                                       .getEndVal() * TimelineConstants.MEGA_DOUBLE),
-                                                                       selectItem.getData(), null));
-               }
+               DATimeline threadTimeline = threadChart.getTimeline();
+               DATimeline syncTimeline = syncChart.getTimeline();
+
+               threadTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
+               threadTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
+               syncTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
+               syncTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
+
+               LifecycleLogParser.getInstance().registerLifecycleBar(threadChart.getLifecycleBar());
+               LifecycleLogParser.getInstance().registerTimeline(threadTimeline);
+               LifecycleLogParser.getInstance().registerLifecycleBar(syncChart.getLifecycleBar());
+               LifecycleLogParser.getInstance().registerTimeline(syncTimeline);
+
+               setTimelineMouseListener(threadTimeline, threadChart);
+               setTimelineMouseListener(syncTimeline, syncChart);
+
+               manager = ThreadChartManager.getInstance();
+               manager.setBoard(threadChart, syncChart);
        }
 
        private DACustomCombo makeDACustomCombo(Composite parent) {
@@ -201,7 +184,7 @@ public class ThreadChartView extends DAViewComposite {
                returnCombo.setComboImages(ImageResources.TAB_COMBO_BUTTON_DOWN,
                                ImageResources.TAB_COMBO_BUTTON_DOWN, ImageResources.TAB_COMBO_BUTTON_DOWN,
                                ImageResources.TAB_COMBO_BUTTON_DOWN);
-               returnCombo.setComboImagePoint(new Point(71, 10));
+               returnCombo.setComboImagePoint(new Point(65, 9));
                returnCombo.setButtonImages(ImageResources.TAB_COMBO_BUTTON_DOWN,
                                ImageResources.TAB_COMBO_BUTTON_DOWN);
                returnCombo.setFontPoint(new Point(7, 5));
@@ -215,140 +198,188 @@ public class ThreadChartView extends DAViewComposite {
                return returnCombo;
        }
 
-       private void changeComboThreadToSync() {
-               stackLayout.topControl = syncChartBoard;
-               threadCombo.setText(ThreadPageLabels.THREAD_CHART_SYNC);
-               syncChartBoard.setScaleVal(threadChartBoard.getScaleVal());
-               syncChartBoard.setVisibleStart(threadChartBoard.getVisibleStart());
-               syncChartBoard.setItemsHeightMode(threadChartBoard.isItemMinimized());
+       private void callUpdatePage(DAChartBoardItem selectItem) {
+               if (null == selectItem) {
+                       AnalyzerManager.getCurrentPage()
+                                       .updateView(
+                                                       new DASelectionData(ThreadPage.chartViewID,
+                                                                       (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+                                                                                       .get(UICommonConstants.SELECTION_MARKER_INDEX))
+                                                                                       .getStartVal() * TimelineConstants.MEGA_DOUBLE),
+                                                                       (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+                                                                                       .get(UICommonConstants.SELECTION_MARKER_INDEX))
+                                                                                       .getEndVal() * TimelineConstants.MEGA_DOUBLE),
+                                                                       new Integer(0), null));
+               } else {
+                       AnalyzerManager.getCurrentPage()
+                                       .updateView(
+                                                       new DASelectionData(ThreadPage.chartViewID,
+                                                                       (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+                                                                                       .get(UICommonConstants.SELECTION_MARKER_INDEX))
+                                                                                       .getStartVal() * TimelineConstants.MEGA_DOUBLE),
+                                                                       (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+                                                                                       .get(UICommonConstants.SELECTION_MARKER_INDEX))
+                                                                                       .getEndVal() * TimelineConstants.MEGA_DOUBLE),
+                                                                       selectItem.getData(), null));
+               }
+       }
+
+       private void changeComboSyncToThread() {
+               stackLayout.topControl = threadChart;
                contents.layout();
+               threadCombo.setText("Thread");
+               threadChart.setScaleVal(syncChart.getScaleVal());
+               threadChart.setVisibleStart(syncChart.getVisibleStart());
+               threadChart.setItemsHeightMode(syncChart.isItemMinimized());
+               callUpdatePage(threadChart.getSelectItem());
                updateView();
        }
 
-       private void changeComboSyncToThread() {
-               stackLayout.topControl = threadChartBoard;
-               threadCombo.setText(ThreadPageLabels.THREAD_CHART_THREAD);
-               threadChartBoard.setScaleVal(syncChartBoard.getScaleVal());
-               threadChartBoard.setVisibleStart(syncChartBoard.getVisibleStart());
-               threadChartBoard.setItemsHeightMode(syncChartBoard.isItemMinimized());
+       private void changeComboThreadToSync() {
+               stackLayout.topControl = syncChart;
                contents.layout();
+               syncCombo.setText("Sync");
+               syncChart.setScaleVal(threadChart.getScaleVal());
+               syncChart.setVisibleStart(threadChart.getVisibleStart());
+               syncChart.setItemsHeightMode(threadChart.isItemMinimized());
+               callUpdatePage(syncChart.getSelectItem());
                updateView();
        }
 
+       private void setTimelineMouseListener(final DATimeline timeline, DAChartBoard chartBoard) {
+               timeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(rangeDataManager,
+                               chartBoard, timeline));
+       }
+
        @Override
        public void updateView() {
-               if (stackLayout.topControl == syncChartBoard) {
-                       updateTimeLine(syncChartBoard);
-                       updateRange(syncChartBoard);
-                       syncChartBoard.updateChart();
-               } else {
-                       updateTimeLine(threadChartBoard);
-                       updateRange(threadChartBoard);
-                       threadChartBoard.updateChart();
-               }
-       }
+               threadChart.setTotalEndTime(ToolbarArea.getInstance().getTime());
+               syncChart.setTotalEndTime(ToolbarArea.getInstance().getTime());
+               manager.update();
 
-       private void updateRange(DAChartBoard chartBoard) {
-               chartBoard.setTimelineMarkerStartTime(RangeDataManager.getInstance().getMarkerStartTime()
+               threadChart.setTimelineMarkerStartTime(rangeDataManager.getMarkerStartTime()
+                               / TimelineConstants.MEGA_DOUBLE);
+               threadChart.setTimelineMarkerEndTime(rangeDataManager.getMarkerEndTime()
+                               / TimelineConstants.MEGA_DOUBLE);
+               syncChart.setTimelineMarkerStartTime(rangeDataManager.getMarkerStartTime()
                                / TimelineConstants.MEGA_DOUBLE);
-               chartBoard.setTimelineMarkerEndTime(RangeDataManager.getInstance().getMarkerEndTime()
+               syncChart.setTimelineMarkerEndTime(rangeDataManager.getMarkerEndTime()
                                / TimelineConstants.MEGA_DOUBLE);
+
                if (RangeDataManager.getInstance().isBeingAnalyzed()) {
-                       ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(
-                                       UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(RangeDataManager
-                                       .getInstance().getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE,
-                                       RangeDataManager.getInstance().getAnalysisEndTime()
-                                                       / TimelineConstants.MEGA_DOUBLE);
+                       ((DAChartPlotIntervalMarker) threadChart.getMarkers().get(
+                                       UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(
+                                       rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE,
+                                       rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE);
+
+                       ((DAChartPlotIntervalMarker) syncChart.getMarkers().get(
+                                       UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(
+                                       rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE,
+                                       rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE);
                } else {
-                       ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(
+                       ((DAChartPlotIntervalMarker) threadChart.getMarkers().get(
+                                       UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1);
+
+                       ((DAChartPlotIntervalMarker) syncChart.getMarkers().get(
                                        UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1);
                }
-               ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(
-                               UICommonConstants.RANGE_MARKER_INDEX)).setInterval(RangeDataManager.getInstance()
-                               .getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE, RangeDataManager
-                               .getInstance().getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
-       }
 
-       private void updateTimeLine(DAChartBoard chartBoard) {
-               chartBoard.setTotalEndTime(ToolbarArea.getInstance().getTime());
+               ((DAChartPlotIntervalMarker) threadChart.getMarkers().get(
+                               UICommonConstants.RANGE_MARKER_INDEX)).setInterval(
+                               rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE,
+                               rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
+
+               ((DAChartPlotIntervalMarker) syncChart.getMarkers().get(
+                               UICommonConstants.RANGE_MARKER_INDEX)).setInterval(
+                               rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE,
+                               rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
+
        }
 
        @Override
        public void updateView(DAViewData data) {
-               if (data instanceof DASelectionData == false) {
-                       return;
-               }
-               DASelectionData selData = (DASelectionData) data;
-               if (selData.isLogData()) {
-                       selectionFromSummary(selData);
-               } else {
-                       selectionFromAPITable(selData);
-               }
-       }
+               if (data instanceof DASelectionData) {
+                       DASelectionData selData = (DASelectionData) data;
 
-       private void selectionFromSummary(DASelectionData selData) {
-               Object odata = selData.getData();
-               String category = LogDataFactory.getLogFormatName(((ProbeCommonData) odata).getId());
-               if(null == category){
-                       return;
-               }
-               String selectTid = Integer.toString(((ProbeCommonData) odata).getTid());
-               if (category.equals(ThreadPageLabels.THREAD_CHART_THREAD)) {
-                       changeComboSyncToThread();
-                       threadChartBoard.selectItem(getThreadChartIndexOfSelected(selectTid));
-               } else {
-                       changeComboThreadToSync();
-                       syncChartBoard.selectItem(getSyncChartIndexOfSelected(selectTid));
+                       if (selData.isLogData()) {
+                               Object odata = selData.getData();
+                               if (stackLayout.topControl.equals(syncChart)) {
+                                       changeComboSyncToThread();
+                               }
+                               String selectTid = Integer.toString(((ProbeCommonData) odata).getTid());
+                               threadChart.selectItem(getChartIndexOfSelected(selectTid));
+                       } else {
+                               long start = selData.getStartTime();
+                               long end = selData.getEndTime();
+
+                               double startTime = (double) start / TimelineConstants.MEGA_DOUBLE;
+                               double endTime = (double) end / TimelineConstants.MEGA_DOUBLE;
+                               // double middleTime = (startTime + endTime) / 2.0;
+                               // if (start == end) {
+                               // middleTime = startTime;
+                               // }
+
+                               DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
+
+                               // chartBoard.setVisibleMiddleTime(middleTime);
+                               DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
+                                               .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
+                               intervalMarker.setInterval(startTime, endTime);
+                       }
                }
-               DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
-               DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
-                               .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
-               long start = ((ProbeCommonData) odata).getTime();
-               long end = ((ProbeCommonData) odata).getTime();
-               double startTime = (double) start / TimelineConstants.MEGA_DOUBLE;
-               double endTime = (double) end / TimelineConstants.MEGA_DOUBLE;
-               intervalMarker.setInterval(startTime, endTime);
        }
 
-       private void selectionFromAPITable(DASelectionData selData) {
-               DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
-               DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
-                               .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
-               long start = selData.getStartTime();
-               long end = selData.getEndTime();
-               double startTime = (double) start / TimelineConstants.MEGA_DOUBLE;
-               double endTime = (double) end / TimelineConstants.MEGA_DOUBLE;
-               intervalMarker.setInterval(startTime, endTime);
-       }
-
-       private int getThreadChartIndexOfSelected(String tID) {
-               int itemSize = threadChartBoard.getItemList().getItemSize();
-               if (null == tID || 0 == itemSize) {
+       private int getChartIndexOfSelected(String tID) {
+               int itemSize = threadChart.getItemList().getItemSize();
+               if (0 == itemSize) {
                        return 0;
                }
                for (int i = 0; i < itemSize; i++) {
-                       DAChartBoardItem item = threadChartBoard.getItemList().get(i);
+                       DAChartBoardItem item = threadChart.getItemList().get(i);
                        ThreadPageThreadData pageData = (ThreadPageThreadData) item.getData();
-                       if (pageData.getTid() == Integer.parseInt(tID)) {
+                       if (pageData.getTid().equals(tID)) {
                                return i;
                        }
                }
                return 0;
        }
-       
-       private int getSyncChartIndexOfSelected(String tID) {
-               int itemSize = syncChartBoard.getItemList().getItemSize();
-               if (null == tID || 0 == itemSize) {
-                       return 0;
-               }
-               for (int i = 0; i < itemSize; i++) {
-                       DAChartBoardItem item = syncChartBoard.getItemList().get(i);
-                       ThreadPageThreadData pageData = (ThreadPageThreadData) item.getData();
-                       if (pageData.getTid() == Integer.parseInt(tID)) {
-                               return i;
-                       }
-               }
-               return 0;
+
+       @Override
+       public void clear() {
+               threadChart.clear();
+               syncChart.clear();
+               initIntervalMarkers(threadChart);
+               initIntervalMarkers(syncChart);
+               manager.clear();
+               manager.setBoard(threadChart, syncChart);
+       }
+
+       @Override
+       public Control getControl() {
+               return stackLayout.topControl;
+       }
+
+       private void initIntervalMarkers(DAChartBoard board) {
+               // selection marker
+               DAChartPlotIntervalMarker selectionMarker = new DAChartPlotIntervalMarker(-1, -1,
+                               DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
+               selectionMarker.setBackgroundColor(ColorResources.SELECTION_RANGE);
+               selectionMarker.setAlpha((int) (255 * 0.25));
+               board.addIntervalMarker(selectionMarker);
+
+               // range analysis marker
+               DAChartPlotIntervalMarker rangeAnalyzeMarker = new DAChartPlotIntervalMarker(-1, -1,
+                               DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
+               rangeAnalyzeMarker.setBackgroundColor(ColorResources.YELLOW);
+               rangeAnalyzeMarker.setAlpha((int) (255 * 0.25));
+               board.addIntervalMarker(rangeAnalyzeMarker);
+
+               // range marker
+               DAChartPlotIntervalMarker rangeMarker = new DAChartPlotIntervalMarker(-1, -1,
+                               DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_LINE);
+               rangeMarker.setForegroundColor(ColorResources.RED);
+               rangeMarker.setAlpha((int) (255 * 0.25));
+               board.addIntervalMarker(rangeMarker);
        }
 
        public void setRangeMarker(double starttime, double endtime) {
@@ -360,39 +391,4 @@ public class ThreadChartView extends DAViewComposite {
                                UICommonConstants.RANGE_MARKER_INDEX)).setInterval(starttime, endtime);
        }
 
-       @Override
-       public void clear() {
-               ThreadDataManager.getInstance().clear();
-               syncChartBoard.contentsClear();
-               syncChartBoard.clear();
-               threadChartBoard.contentsClear();
-               threadChartBoard.clear();
-               initializeCharts();
-       }
-
-       private void initializeCharts() {
-               threadChartBoard.initIntervalMarkers();
-               syncChartBoard.initIntervalMarkers();
-               initTimeline();
-       }
-
-       private void initTimeline() {
-               DATimeline threadTimeline = threadChartBoard.getTimeline();
-               DATimeline syncTimeline = syncChartBoard.getTimeline();
-
-               threadTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
-               threadTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
-               syncTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
-               syncTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
-
-               LifecycleLogParser.getInstance().registerLifecycleBar(threadChartBoard.getLifecycleBar());
-               LifecycleLogParser.getInstance().registerTimeline(threadTimeline);
-               LifecycleLogParser.getInstance().registerLifecycleBar(syncChartBoard.getLifecycleBar());
-               LifecycleLogParser.getInstance().registerTimeline(syncTimeline);
-
-               threadTimeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(RangeDataManager
-                               .getInstance(), threadChartBoard, threadTimeline));
-               syncTimeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(RangeDataManager
-                               .getInstance(), syncChartBoard, syncTimeline));
-       }
 }
index 8fd4cfe..225cafe 100644 (file)
@@ -4,7 +4,6 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Jooyoul Lee <jy.exe.lee@samsung.com>
@@ -44,10 +43,8 @@ import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
 import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData;
 
@@ -55,7 +52,8 @@ public class ThreadDetailInfoView extends DAViewComposite {
        private Composite contents = null;
        private Text detailText = null;
 
-       private final static String leftFormAttachment = CommonConstants.SPACE + CommonConstants.SPACE;
+       private final static String leftFormAttachment = CommonConstants.SPACE
+                       + CommonConstants.SPACE;
        private final static String heightFormAttachment = CommonConstants.NEW_LINE
                        + CommonConstants.NEW_LINE;
 
@@ -102,7 +100,8 @@ public class ThreadDetailInfoView extends DAViewComposite {
                contents.setBackground(ColorResources.VIEW_BG_COLOR);
                contents.setLayout(new FormLayout());
 
-               detailText = new Text(contents, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+               detailText = new Text(contents, SWT.BORDER | SWT.V_SCROLL
+                               | SWT.H_SCROLL);
                detailText.setBackground(ColorResources.VIEW_BG_COLOR);
                detailText.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
                detailText.setFont(FontResources.DETAIL_INFO_FONT);
@@ -123,7 +122,7 @@ public class ThreadDetailInfoView extends DAViewComposite {
 
                String str;
                if (item instanceof ThreadPageThreadData) {
-                       tid = Integer.toString(item.getTid());
+                       tid = item.getTid();
                        type = ((ThreadPageThreadData) item).getTypeString();
                        str = ((ThreadPageThreadData) item).getThreadFuncName();
                        if (null != str && !(str.equals(CommonConstants.EMPTY))) {
@@ -151,7 +150,7 @@ public class ThreadDetailInfoView extends DAViewComposite {
                        List<ThreadPageSyncData> children = syncItem.getChildren();
                        int childrenSize = children.size();
                        if (0 == childrenSize) {
-                               tid = Integer.toString(item.getTid());
+                               tid = item.getTid();
                        }
                        str = item.getAttrType();
                        if (null != str && !(str.equals(CommonConstants.EMPTY))) {
@@ -159,31 +158,38 @@ public class ThreadDetailInfoView extends DAViewComposite {
                        }
                }
 
-               StringBuffer strDetailView = new StringBuffer(CommonConstants.NEW_LINE);
-               addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TYPE + type);
+               StringBuffer strDetailView = new StringBuffer(heightFormAttachment);
+               addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TYPE
+                               + type);
                if (null != tid && !(tid.equals(CommonConstants.EMPTY))) {
-                       addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TID + tid);
+                       addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TID
+                                       + tid);
                }
                if (type.equals(ThreadPageLabels.THREAD_ITEM_TYPE_TIZEN)) {
                        if (null != className && !(className.equals(CommonConstants.EMPTY))) {
-                               addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_CLASSNAME + className);
+                               addDetailInfo(strDetailView,
+                                               ThreadPageLabels.THREAD_DETAILS_CLASSNAME + className);
                        }
                } else {
                        if (null != funcName && !(funcName.equals(CommonConstants.EMPTY))) {
-                               addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_FUNCNAME + funcName);
+                               addDetailInfo(strDetailView,
+                                               ThreadPageLabels.THREAD_DETAILS_FUNCNAME + funcName);
                        }
                }
 
                if (null != startTime && !(startTime.equals(CommonConstants.EMPTY))) {
-                       addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_STARTTIME + startTime);
+                       addDetailInfo(strDetailView,
+                                       ThreadPageLabels.THREAD_DETAILS_STARTTIME + startTime);
                }
 
                if (null != endTime && !(endTime.equals(CommonConstants.EMPTY))) {
-                       addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_ENDTIME + endTime);
+                       addDetailInfo(strDetailView,
+                                       ThreadPageLabels.THREAD_DETAILS_ENDTIME + endTime);
                }
 
                if (null != attrType && !(attrType.equals(CommonConstants.EMPTY))) {
-                       addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_ATTRTYPE + attrType);
+                       addDetailInfo(strDetailView,
+                                       ThreadPageLabels.THREAD_DETAILS_ATTRTYPE + attrType);
                }
                detailText.setText(strDetailView.toString());
                detailText.redraw();
@@ -195,29 +201,33 @@ public class ThreadDetailInfoView extends DAViewComposite {
 
        private boolean isChange() {
                if (item instanceof ThreadPageThreadData) {
-                       if (!tid.equals(Integer.toString(item.getTid()))) {
+                       if (!tid.equals(item.getTid())) {
                                return true;
                        }
                        if (!type.equals(((ThreadPageThreadData) item).getTypeString())) {
                                return true;
                        }
-                       if (!funcName.equals(((ThreadPageThreadData) item).getThreadFuncName())) {
+                       if (!funcName.equals(((ThreadPageThreadData) item)
+                                       .getThreadFuncName())) {
                                return true;
                        }
-                       if (!className.equals(((ThreadPageThreadData) item).getThreadClassName())) {
+                       if (!className.equals(((ThreadPageThreadData) item)
+                                       .getThreadClassName())) {
                                return true;
                        }
-                       if (!startTime.equals(((ThreadPageThreadData) item).getStartTimeString())) {
+                       if (!startTime.equals(((ThreadPageThreadData) item)
+                                       .getStartTimeString())) {
                                return true;
                        }
-                       if (!endTime.equals(((ThreadPageThreadData) item).getEndTimeString())) {
+                       if (!endTime.equals(((ThreadPageThreadData) item)
+                                       .getEndTimeString())) {
                                return true;
                        }
                        if (!attrType.equals(item.getAttrType())) {
                                return true;
                        }
                } else if (item instanceof ThreadPageSyncData) {
-                       if (!tid.equals(Integer.toString(item.getTid()))) {
+                       if (!tid.equals(item.getTid())) {
                                return true;
                        }
                        if (!attrType.equals(item.getAttrType())) {
@@ -236,23 +246,20 @@ public class ThreadDetailInfoView extends DAViewComposite {
 
        @Override
        public void updateView(DAViewData vdata) {
-               if(vdata.getViewID().equals(TimelinePage.timelineViewID)){
-                       return;
-               }
-               if (vdata instanceof DASelectionData == false) {
-                       return;
-               }
-               DASelectionData data = (DASelectionData) vdata;
-               String id = data.getViewID();
-               if (!(id.equals(ThreadPage.chartViewID))) {
-                       return;
-               }
-               if (data.getData() instanceof ThreadPageData) {
-                       item = (ThreadPageData) data.getData();
-               } else {
-                       item = null;
+               if (vdata instanceof DASelectionData) {
+                       DASelectionData data = (DASelectionData) vdata;
+                       String id = data.getViewID();
+                       if (!(id.equals(ThreadPage.chartViewID))) {
+                               return;
+                       }
+                       if (data.getData() instanceof ThreadPageData) {
+                               item = (ThreadPageData) data.getData();
+                       } else {
+                               item = null;
+                       }
+
+                       updateDetails();
                }
-               updateDetails();
        }
 
        @Override
index d147e4e..b3b7434 100644 (file)
@@ -4,7 +4,6 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Jooyoul Lee <jy.exe.lee@samsung.com>
@@ -37,8 +36,6 @@ import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
 import org.tizen.dynamicanalyzer.shortcut.ShortCutManager;
 import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry;
 import org.tizen.dynamicanalyzer.ui.page.ScreenshotTabComposite;
-import org.tizen.dynamicanalyzer.ui.thread.chart.ThreadChartView;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAPageComposite;
 
 public class ThreadPage extends DAPageComposite {
@@ -54,32 +51,38 @@ public class ThreadPage extends DAPageComposite {
        public ThreadPage(Composite parent, int style) {
                super(parent, style);
                setTitle(AnalyzerLabels.COOLBAR_AREA_THREAD);
-               this.setData(DAPageComposite.KEY_TOOLTIP, ShortCutManager.COOLBAR_AREA_THREAD_TOOLTIP);
+               this.setData(DAPageComposite.KEY_TOOLTIP,
+                               ShortCutManager.COOLBAR_AREA_THREAD_TOOLTIP);
                this.setLayout(new FillLayout());
 
                baseForm = new SashForm(this, SWT.HORIZONTAL);
                baseForm.setLayout(new FillLayout());
 
                leftForm = new SashForm(baseForm, SWT.VERTICAL);
-               ThreadChartView threadChartView = new ThreadChartView(leftForm, SWT.NONE);
+               ThreadChartView threadChartView = new ThreadChartView(leftForm,
+                               SWT.NONE);
                addView(threadChartView);
 
-               ThreadAPIListView threadAPIListView = new ThreadAPIListView(leftForm, SWT.NONE);
+               ThreadAPIListView threadAPIListView = new ThreadAPIListView(leftForm,
+                               SWT.NONE);
                addView(threadAPIListView);
 
                leftForm.setWeights(new int[] { 60, 40 });
 
                rightForm = new SashForm(baseForm, SWT.VERTICAL);
-
-               ScreenshotTabComposite tabView = new ScreenshotTabComposite(rightForm, SWT.NONE,
-                               ThreadPage.pageID);
+               // INFO_VIEW_INDEX = 2;
+               
+               ScreenshotTabComposite tabView = new ScreenshotTabComposite(rightForm,
+                               SWT.NONE, ThreadPage.pageID);
                tabView.setObservingViews(ScreenshotTabComposite.screenshotViewID,
                                new String[] { ThreadPage.listViewID });
                tabView.setObservingViews(ScreenshotTabComposite.callstackViewID,
                                new String[] { ThreadPage.listViewID });
                addView(tabView);
 
-               ThreadDetailInfoView detailInfo = new ThreadDetailInfoView(rightForm, SWT.NONE);
+               // FILE_DETAIL = 3;
+               ThreadDetailInfoView detailInfo = new ThreadDetailInfoView(rightForm,
+                               SWT.NONE);
                addView(detailInfo);
 
                rightForm.setWeights(new int[] { 50, 50 });
@@ -88,8 +91,8 @@ public class ThreadPage extends DAPageComposite {
                baseForm.setSashWidth(AnalyzerConstants.SASH_WIDTH);
                leftForm.setSashWidth(AnalyzerConstants.SASH_WIDTH);
                rightForm.setSashWidth(AnalyzerConstants.SASH_WIDTH);
-
-               DataManagerRegistry.registerPageDataManager(ThreadDataManager.getInstance());
+               
+               DataManagerRegistry.registerPageDataManager(ThreadChartManager.getInstance());
        }
 
        @Override
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java
new file mode 100644 (file)
index 0000000..1ed1ee7
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@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
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+
+public abstract class ThreadPageData {
+       private String pid;
+       private String tid;
+       private int type;
+       private String key;
+       private String attrType;
+       protected DAChartBoardItem item;
+       protected List<ThreadPageDataEvent> contents = new ArrayList<ThreadPageDataEvent>();
+       protected List<ThreadPageDataEvent> contentsQueue = new ArrayList<ThreadPageDataEvent>();
+       protected DAChart chart;
+       protected boolean hasUpdate = false;
+
+       public ThreadPageData(int type, String name, String pid, String tid, String attrType) {
+               setType(type);
+               setKey(name);
+               setPid(pid);
+               setTid(tid);
+               setAttrType(attrType);
+       }
+
+       public String getTid() {
+               return tid;
+       }
+
+       public void setTid(String tid) {
+               this.tid = tid;
+       }
+
+       public String getPid() {
+               return pid;
+       }
+
+       public void setPid(String pid) {
+               this.pid = pid;
+       }
+
+       public int getType() {
+               return type;
+       }
+
+       public void setType(int type) {
+               this.type = type;
+       }
+
+       public String getKey() {
+               return key;
+       }
+
+       public void setKey(String name) {
+               this.key = name;
+       }
+
+       public DAChartBoardItem getItem() {
+               return item;
+       }
+
+       public DAChart getChart() {
+               return chart;
+       }
+
+       public void setChart(DAChart chart) {
+               this.chart = chart;
+       }
+
+       public void pushEvent(ThreadPageDataEvent event) {
+               contentsQueue.add(event);
+               hasUpdate = true;
+       }
+
+       public void setHasUpdate() {
+               hasUpdate = true;
+       }
+
+       public List<ThreadPageDataEvent> getContents() {
+               return contents;
+       }
+
+       protected abstract void checkUpdate();
+
+       public abstract void setItem(DAChartBoardItem item);
+
+       protected abstract int createChartItem(ThreadPageDataEvent event);
+
+       public String getAttrType() {
+               return attrType;
+       }
+
+       public void setAttrType(String attrType) {
+               this.attrType = attrType;
+       }
+
+       protected DAChartSeriesItem createApiItem(
+                       ThreadPageDataEvent event, long errno) {
+               DAChartSeriesItem apiItem = null;
+               if (0 != errno) {
+                       apiItem = new DAChartSeriesItem(event.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_BAR,
+                                       ColorResources.RED, event.getTooltipContent()
+                                                       + ThreadPageLabels.SYNC_CHART_ITEM_FAILED);
+               } else {
+                       apiItem = new DAChartSeriesItem(event.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_BAR,
+                                       ColorResources.YELLOW, event.getTooltipContent());
+               }
+               return apiItem;
+       }
+}
\ No newline at end of file
@@ -24,7 +24,7 @@
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.ui.thread.type;
+package org.tizen.dynamicanalyzer.ui.thread;
 
 import org.tizen.dynamicanalyzer.swap.model.data.LogData;
 import org.tizen.dynamicanalyzer.utils.Formatter;
@@ -32,13 +32,13 @@ import org.tizen.dynamicanalyzer.utils.Formatter;
 public abstract class ThreadPageDataEvent implements Cloneable {
        private LogData contents;
        private long time = -1;
-       private int tid = -1;
+       private String tid = null;
        private int apiType = -1;
        private String tooltip = null;
        private long errorNum = -1;
 
-       public ThreadPageDataEvent(long time, int tid, int apiType, String tooltip, long errorNum,
-                       LogData contents) {
+       public ThreadPageDataEvent(long time, String tid, int apiType,
+                       String tooltip, long errorNum, LogData contents) {
                setTime(time);
                setTid(tid);
                setApiType(apiType);
@@ -46,7 +46,7 @@ public abstract class ThreadPageDataEvent implements Cloneable {
                setErrorNum(errorNum);
                setContents(contents);
        }
-
+       
        public ThreadPageDataEvent clone() throws CloneNotSupportedException {
                ThreadPageDataEvent dataEvent = (ThreadPageDataEvent) super.clone();
                dataEvent.setContents(contents);
@@ -55,7 +55,7 @@ public abstract class ThreadPageDataEvent implements Cloneable {
                dataEvent.setApiType(apiType);
                dataEvent.setTooltipContent(tooltip);
                dataEvent.setErrorNum(errorNum);
-
+               
                return dataEvent;
        }
 
@@ -69,22 +69,22 @@ public abstract class ThreadPageDataEvent implements Cloneable {
 
        public long getTime() {
                return time;
-       }
+       }       
 
        public void setTime(long time) {
                this.time = time;
        }
-
+       
        public double getDoubleTime() {
                double dTime = Formatter.longTimeToDoubleTime(time);
                return dTime;
        }
 
-       public int getTid() {
+       public String getTid() {
                return tid;
        }
 
-       public void setTid(int tid) {
+       public void setTid(String tid) {
                this.tid = tid;
        }
 
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChart.java
deleted file mode 100644 (file)
index 000c89d..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.chart;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageDataEvent;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.utils.Formatter;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-
-public class SyncChart {
-       public final static int SYNC_PARENT_CHART = 0;
-       public final static int SYNC_CHILD_CHART = 1;
-       public final static int THREAD_CHART = 2;
-       protected int chartType = -1;;
-       protected DAChartBoardItem item;
-       protected DAChart chart;
-       protected List<SyncChart> children = new ArrayList<SyncChart>();
-       protected DAChartSeries syncAPISeries;
-       protected DAChartSeries syncStateSeries;
-
-       protected String chartName = CommonConstants.EMPTY;
-       protected int chartID = -1;
-       protected int pId = -1;
-       protected int tId = -1;
-
-       public SyncChart(int chartId, DAChartBoardItem item, DAChart chart, int chartType) {
-               setChartType(chartType);
-               setChartID(chartId);
-               setItem(item);
-               setChart(chart);
-       }
-
-       public int getChartID() {
-               return chartID;
-       }
-
-       public void setChartID(int chartID) {
-               this.chartID = chartID;
-       }
-
-       public String getChartName() {
-               return chartName.trim();
-       }
-
-       public void setChartName(String chartName) {
-               this.chartName = chartName;
-       }
-
-       public int getpId() {
-               return pId;
-       }
-
-       public void setpId(int pId) {
-               this.pId = pId;
-       }
-
-       public int gettId() {
-               return tId;
-       }
-
-       public void settId(int tId) {
-               this.tId = tId;
-       }
-
-       public boolean isParentChartRow() {
-               if (children.size() > 0) {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       public void pushChild(SyncChart data) {
-               children.add(data);
-       }
-
-       public void setItem(DAChartBoardItem item) {
-               this.item = item;
-               setChart(item.getChart());
-               if (chartType == THREAD_CHART) {
-                       return;
-               }
-               syncStateSeries = new DAChartSeries(ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE,
-                               DAChartSeries.SERIES_STYLE_STATE, ColorResources.WHITE, false);
-
-               syncAPISeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
-                               DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
-               syncAPISeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
-
-               chart.addSeries(syncStateSeries);
-               chart.addSeries(syncAPISeries);
-       }
-
-       public DAChartBoardItem getItem() {
-               return item;
-       }
-
-       public DAChart getChart() {
-               return chart;
-       }
-
-       public void setChart(DAChart chart) {
-               this.chart = chart;
-       }
-
-       public void clearSeries() {
-               if (null != syncAPISeries) {
-                       syncAPISeries.clear();
-               }
-               if (null != syncStateSeries) {
-                       syncStateSeries.clear();
-               }
-       }
-
-       public void updateSyncSeries(List<ThreadPageSyncDataEvent> eventList) {
-               if (chartType == THREAD_CHART) {
-                       return;
-               }
-               for (ThreadPageSyncDataEvent syncEvent : eventList) {
-                       if (chartID != syncEvent.getSyncDataID()) {
-                               continue;
-                       }
-                       addSyncSeriesItem(syncEvent);
-               }
-               chart.redraw();
-       }
-
-       private void addSyncSeriesItem(ThreadPageSyncDataEvent syncEvent) {
-               double startTime = syncEvent.getDoubleTime();
-               double endTime = Formatter.longTimeToDoubleTime(syncEvent.getBlockEndTime());
-               long errorNum = syncEvent.getErrorNum();
-               switch (syncEvent.getApiType()) {
-               case LogCenterConstants.SYNC_API_TYPE_NEW:
-               case LogCenterConstants.SYNC_API_TYPE_NOTIFY:
-               case LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL:
-               case LogCenterConstants.SYNC_API_TYPE_OTHER:
-                       syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
-                                       DAChartSeriesItem.SERIES_STATE_BAR,
-                                       ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
-                                       ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
-                       syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
-                       break;
-               case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START:
-               case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START:
-                       syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
-                                       DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                       ColorResources.THREAD_GRAPH_LOCK_WAIT_COLOR,
-                                       ThreadPageLabels.SYNC_CHART_ITEM_WAITED));
-                       if (syncEvent.getBlockEndTime() != -1) {
-                               syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
-                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                               ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
-                                               ThreadPageLabels.SYNC_CHART_ITEM_USED));
-                       }
-                       syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
-                       break;
-               case LogCenterConstants.SYNC_API_TYPE_RELEASE:
-                       if (syncEvent.getBlockEndTime() == -1) {
-                               syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
-                                               DAChartSeriesItem.SERIES_STATE_BAR,
-                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
-                                               ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
-                       } else {
-                               syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
-                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
-                                               ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
-                               syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
-                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                               ColorResources.THREAD_GRAPH_LOCK_WAIT_COLOR,
-                                               ThreadPageLabels.SYNC_CHART_ITEM_WAITED));
-                       }
-                       syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
-                       break;
-               case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END:
-               case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END:
-                       syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
-                                       DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                       ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
-                                       ThreadPageLabels.SYNC_CHART_ITEM_USED));
-                       if (syncEvent.getBlockEndTime() != -1) {
-                               syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
-                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
-                                               ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
-                       }
-                       break;
-               case LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE:
-                       syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
-                                       DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                       ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
-                                       ThreadPageLabels.SYNC_CHART_ITEM_USED));
-                       if (syncEvent.getBlockEndTime() != -1) {
-                               syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
-                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
-                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
-                                               ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
-                       }
-                       syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
-                       break;
-               default:
-                       return;
-               }
-       }
-
-       protected DAChartSeriesItem createAPIItem(ThreadPageDataEvent event, long errno) {
-               DAChartSeriesItem apiItem = null;
-               if (0 != errno) {
-                       apiItem = new DAChartSeriesItem(event.getDoubleTime(),
-                                       DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.RED,
-                                       event.getTooltipContent() + ThreadPageLabels.SYNC_CHART_ITEM_FAILED);
-               } else {
-                       apiItem = new DAChartSeriesItem(event.getDoubleTime(),
-                                       DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.YELLOW,
-                                       event.getTooltipContent());
-               }
-               return apiItem;
-       }
-
-       public int getChartType() {
-               return chartType;
-       }
-
-       public void setChartType(int chartType) {
-               this.chartType = chartType;
-       }
-}
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChartBoard.java
deleted file mode 100644 (file)
index d691f34..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.chart;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Composite;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.resources.ImageResources;
-import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupClearMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupEndMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
-import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
-import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
-
-public class SyncChartBoard extends DAChartBoard {
-       private List<SyncChart> syncChartItemList = new ArrayList<SyncChart>();
-       protected int syncListCount = -1;
-       private int preSelectionPId = -1;
-
-       public SyncChartBoard(Composite parent, String title) {
-               super(parent, title);
-               initIntervalMarkers();
-
-       }
-
-       public SyncChartBoard(Composite parent, String title, int[] scaleValues) {
-               super(parent, title, scaleValues);
-       }
-
-       public SyncChartBoard(Composite parent, String title, int boardStyle) {
-               super(parent, title, boardStyle);
-       }
-
-       @Override
-       protected void callBackScaleChanged() {
-               super.callBackScaleChanged();
-               updateChart();
-       }
-
-       @Override
-       protected void callBackScrollChanged() {
-               super.callBackScrollChanged();
-               updateChart();
-       }
-
-       @Override
-       protected void callBackSizeChanged() {
-               layout(true, true);
-               super.callBackSizeChanged();
-       }
-
-       public void updateChart() {
-               createChartItem();
-               clearSeries();
-               updateSeries();
-               chartFilteringByPId();
-       }
-
-       protected void chartFilteringByPId() {
-               if (null == getItemList()) {
-                       return;
-               }
-               int selectedPid = ToolbarArea.getInstance().getSelectedPid();
-               if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
-                       return;
-               }
-
-               int parentIndex = 0;
-               for (SyncChart chart : syncChartItemList) {
-                       if (!chart.isParentChartRow()) {
-                               continue;
-                       }
-                       if (selectedPid == 0) {
-                               showItem(parentIndex);
-                       } else if (selectedPid == chart.getpId()) {
-                               showItem(parentIndex);
-                       } else {
-                               hideItem(parentIndex);
-                       }
-                       parentIndex++;
-               }
-               preSelectionPId = selectedPid;
-       }
-
-       public void clear() {
-               super.clear();
-               syncChartItemList.clear();
-               syncListCount = -1;
-               preSelectionPId = -1;
-               initIntervalMarkers();
-       }
-
-       public void initIntervalMarkers() {
-               // selection marker
-               DAChartPlotIntervalMarker selectionMarker = new DAChartPlotIntervalMarker(-1, -1,
-                               DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
-               selectionMarker.setBackgroundColor(ColorResources.SELECTION_RANGE);
-               selectionMarker.setAlpha((int) (255 * 0.25));
-               addIntervalMarker(selectionMarker);
-
-               // range analysis marker
-               DAChartPlotIntervalMarker rangeAnalyzeMarker = new DAChartPlotIntervalMarker(-1, -1,
-                               DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
-               rangeAnalyzeMarker.setBackgroundColor(ColorResources.YELLOW);
-               rangeAnalyzeMarker.setAlpha((int) (255 * 0.25));
-               addIntervalMarker(rangeAnalyzeMarker);
-
-               // range marker
-               DAChartPlotIntervalMarker rangeMarker = new DAChartPlotIntervalMarker(-1, -1,
-                               DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_LINE);
-               rangeMarker.setForegroundColor(ColorResources.RED);
-               rangeMarker.setAlpha((int) (255 * 0.25));
-               addIntervalMarker(rangeMarker);
-
-       }
-
-       protected void initChart(DAChart chart, boolean isParent) {
-               if (null == chart) {
-                       return;
-               }
-
-               DAChartPlot plot = chart.getPlot();
-               if (null == plot) {
-                       return;
-               }
-               if (true == isParent) {
-                       plot.setBackgroundImage(ImageResources.BG_GRADIENT);
-               } else {
-                       plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
-               }
-               plot.setAutoHeightRange(AutoRangeType.MANUAL);
-               plot.setAxisFont(FontResources.CHART_AXIS_FONT);
-               plot.setAxisRangeY(0, 101);
-               plot.setAxisRangeX(getVisibleStartTime(), getVisibleEndTime());
-               DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
-               tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
-               plot.setTooltip(tooltip);
-
-               DAPopupMenu popupMenu = new DAPopupMenu(chart);
-               popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
-               DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
-               startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
-               startItem.addListener(new PopupStartMenuItemClickListener(startItem, this));
-
-               DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
-               endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
-               endItem.addListener(new PopupEndMenuItemClickListener(endItem, this));
-
-               DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
-               fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
-               fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(
-                               fromSelectionItem, this));
-
-               DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
-               analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
-               analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
-
-               DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
-               clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
-               clearItem.addListener(new PopupClearMenuItemClickListener());
-
-               TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
-                               popupMenu, getTimeline());
-               chart.addMouseListener(timelineChartMouseEventListener);
-               chart.addMouseMoveListener(timelineChartMouseEventListener);
-               chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(getTimeline()));
-               plot.setMarkers(getMarkers());
-       }
-
-       public boolean createChartItem() {
-               if (syncListCount != ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData()
-                               .size()) {
-                       for (ThreadPageSyncData data : ThreadDataManager.getInstance().getSyncDataMaker()
-                                       .getChartRowData()) {
-                               if (isExistSyncChartRow(data)) {
-                                       continue;
-                               }
-                               if (data.getSyncDataType() == ThreadPageSyncData.SYNC_PARENT) {
-                                       addSyncParentChartItemList(data);
-                               } else if (data.getSyncDataType() == ThreadPageSyncData.SYNC_CHILD) {
-                                       addChartChildItemList(data);
-                               }
-                       }
-               }
-               syncListCount = ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData().size();
-               return true;
-       }
-
-       protected boolean isExistSyncChartRow(ThreadPageSyncData data) {
-               for (SyncChart chart : syncChartItemList) {
-                       if (chart.getChartID() == data.getSyncDataID()) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       private void addChartChildItemList(ThreadPageSyncData data) {
-               SyncChart parent = getParentChartData(data);
-               if (null != parent) {
-                       addSyncChildChartItemList(parent, data);
-               }
-       }
-
-       private void addSyncParentChartItemList(ThreadPageSyncData sync) {
-               DAChartBoardItem parentItem = new DAChartBoardItem(this, sync.getTypeString()
-                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
-                               + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
-                               + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
-               parentItem.setData(sync);
-               DAChart parentDAChart = parentItem.getChart();
-               initChart(parentDAChart, true);
-               SyncChart parentChartData = new SyncChart(sync.getSyncDataID(), parentItem, parentDAChart,
-                               ThreadChart.SYNC_PARENT_CHART);
-               parentChartData.setpId(Integer.parseInt(sync.getPid()));
-               syncChartItemList.add(parentChartData);
-       }
-
-       protected void addSyncChildChartItemList(SyncChart parent, ThreadPageSyncData sync) {
-               DAChartBoardItem parentItem = parent.getItem();
-               DAChartBoardItem childItem = new DAChartBoardItem(parentItem, sync.getTypeString()
-                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
-                               + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
-                               + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
-               childItem.setData(sync);
-               DAChart childChart = childItem.getChart();
-               initChart(childChart, false);
-               SyncChart childChartData = new SyncChart(sync.getSyncDataID(), childItem, childChart,
-                               ThreadChart.SYNC_CHILD_CHART);
-               parent.pushChild(childChartData);
-               syncChartItemList.add(childChartData);
-       }
-
-       private SyncChart getParentChartData(ThreadPageSyncData syncData) {
-               if (syncData.getSyncDataType() != ThreadPageSyncData.SYNC_CHILD) {
-                       return null;
-               }
-               for (SyncChart chart : syncChartItemList) {
-                       if (chart.getChartID() == syncData.getParentID()) {
-                               return chart;
-                       }
-               }
-               return null;
-       }
-
-       public void clearSeries() {
-               clearSyncSeries();
-       }
-
-       private void clearSyncSeries() {
-               if (null == syncChartItemList) {
-                       return;
-               }
-               for (SyncChart chart : syncChartItemList) {
-                       chart.clearSeries();
-               }
-       }
-
-       private void updateSeries() {
-               updateSyncEventSeries();
-       }
-
-       protected void updateSyncEventSeries() {
-               if (null == syncChartItemList) {
-                       return;
-               }
-               List<ThreadPageSyncDataEvent> seriesList = getSyncEventList();
-               if (null == seriesList) {
-                       return;
-               }
-               for (SyncChart chart : syncChartItemList) {
-                       chart.updateSyncSeries(seriesList);
-               }
-       }
-
-       private List<ThreadPageSyncDataEvent> getSyncEventList() {
-               List<ThreadPageSyncDataEvent> returnList = new ArrayList<ThreadPageSyncDataEvent>();
-               returnList.addAll(selectSyncEventFromDB());
-               returnList.addAll(ThreadDataManager.getInstance().getSyncDataMaker()
-                               .getNotInsertSyncEventList());
-               return returnList;
-       }
-
-       private List<ThreadPageSyncDataEvent> selectSyncEventFromDB() {
-               List<ThreadPageSyncDataEvent> returnList = new ArrayList<ThreadPageSyncDataEvent>();
-               double chartStartTime = (getVisibleStartTime() - 2) * TimelineConstants.MEGA_LONG;
-               double chartEndTime = getVisibleEndTime() * TimelineConstants.MEGA_LONG;
-               String query = String.format(SyncEventDBTable.SELECT_QUERY, chartStartTime, chartEndTime,
-                               chartStartTime, chartEndTime);
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs == null) {
-                       SqlConnectionManager.releaseResultSet(rs);
-                       return returnList;
-               }
-               try {
-                       while (rs.next()) {
-                               int syncDataID = rs.getInt(SyncEventDBTable.COLUMN.SYNCDATAID.index + 1);
-                               long time = rs.getLong(SyncEventDBTable.COLUMN.EVENTTIME.index + 1);
-                               int apiType = rs.getByte(SyncEventDBTable.COLUMN.APITYPE.index + 1);
-                               String tooltip = rs.getString(SyncEventDBTable.COLUMN.TOOLTIP.index + 1);
-                               long errorNum = rs.getLong(SyncEventDBTable.COLUMN.ERRORNO.index + 1);
-                               long syncValue = rs.getLong(SyncEventDBTable.COLUMN.SYNCVALUE.index + 1);
-                               long releaseTime = rs.getLong(SyncEventDBTable.COLUMN.RELEASETIME.index + 1);
-                               ThreadPageSyncDataEvent syncData = new ThreadPageSyncDataEvent(time, apiType,
-                                               tooltip, errorNum, Long.toString(syncValue));
-                               syncData.setSyncDataID(syncDataID);
-                               syncData.setBlockEndTime(releaseTime);
-                               returnList.add(syncData);
-                       }
-                       SqlConnectionManager.releaseResultSet(rs);
-               } catch (SQLException e) {
-                       e.printStackTrace();
-               }
-               return returnList;
-       }
-}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChart.java
deleted file mode 100644 (file)
index 089a2e9..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.chart;
-
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-
-public class ThreadChart extends SyncChart {
-       private DAChartSeries threadLoadSeries;
-       private DAChartSeries threadEventSeries;
-       private DAChartSeries threadAPISeries;
-
-       public ThreadChart(int chartId, DAChartBoardItem item, DAChart chart, int chartType) {
-               super(chartId, item, chart, chartType);
-       }
-
-       public void setItem(DAChartBoardItem item) {
-               super.setItem(item);
-               this.item = item;
-               setChart(item.getChart());
-               threadLoadSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_LOAD,
-                               DAChartSeries.SERIES_STYLE_LOAD, ColorResources.THREAD_GRAPH_MIN_CPU_LOAD_COLOR,
-                               ColorResources.THREAD_GRAPH_MAX_CPU_LOAD_COLOR);
-               threadLoadSeries.setBarWidth(1);
-
-               threadAPISeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
-                               DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
-
-               threadEventSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_EVENT,
-                               DAChartSeries.SERIES_STYLE_ARROW, ColorResources.THREAD_GRAPH_CALLEE_COLOR);
-
-               threadAPISeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
-               threadEventSeries.setFont(FontResources.CHART_ARROW_TID_FONT);
-
-               chart.addSeries(threadLoadSeries);
-               chart.addSeries(threadAPISeries);
-               chart.addSeries(threadEventSeries);
-       }
-
-       public void clearSeries() {
-               super.clearSeries();
-               if (null != threadLoadSeries) {
-                       threadLoadSeries.clear();
-               }
-               if (null != threadEventSeries) {
-                       threadEventSeries.clear();
-               }
-               if (null != threadAPISeries) {
-                       threadAPISeries.clear();
-               }
-       }
-
-       public void updateThreadSeries(List<ThreadPageThreadDataEvent> eventList) {
-               for (ThreadPageThreadDataEvent threadEvent : eventList) {
-                       if (getChartType() != THREAD_CHART || chartID != threadEvent.getThreadDataID()) {
-                               continue;
-                       }
-                       addThreadSeriesItem(threadEvent);
-               }
-               chart.redraw();
-       }
-
-       private void addThreadSeriesItem(ThreadPageThreadDataEvent threadEvent) {
-               switch (threadEvent.getEventType()) {
-               case ThreadPageThreadDataEvent.TYPE_LOAD:
-                       updateLoadSeries(threadEvent);
-                       break;
-               case ThreadPageThreadDataEvent.TYPE_EVENT:
-                       updateEventSeries(threadEvent);
-                       break;
-               case ThreadPageThreadDataEvent.TYPE_API:
-                       updateAPISeries(threadEvent);
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       private void updateLoadSeries(ThreadPageThreadDataEvent threadEvent) {
-               DAChartSeriesItem seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                               (double) (threadEvent.getThreadType() * 2.55), threadEvent.getTooltipContent());
-               threadLoadSeries.addSeriesItem(seriesItem);
-       }
-
-       private void updateEventSeries(ThreadPageThreadDataEvent threadEvent) {
-               DAChartSeriesItem seriesItem;
-               int eventApiType = threadEvent.getApiType();
-               if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
-                       seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                                       DAChartSeriesItem.SERIES_ARROW_LEFT, threadEvent.getTooltipContent());
-                       seriesItem.setBarWidth(threadEvent.getCallerTid());
-               } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_WAIT_END) {
-                       if (threadEvent.isJoinAPI()) {
-                               seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                                               DAChartSeriesItem.SERIES_ARROW_LEFT,
-                                               ThreadPageLabels.THREAD_CHART_ITEM_JOINED);
-                               seriesItem.setBarWidth(threadEvent.getCallerTid());
-                       } else {
-                               seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                                               DAChartSeriesItem.SERIES_ARROW_NONE, threadEvent.getTooltipContent());
-                       }
-               } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
-                       if (threadEvent.getCallerTid() != -1) {
-                               seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                                               DAChartSeriesItem.SERIES_ARROW_RIGHT, threadEvent.getTooltipContent());
-                               seriesItem.setBarWidth(threadEvent.getCallerTid());
-                       } else {
-                               seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                                               DAChartSeriesItem.SERIES_ARROW_NONE, threadEvent.getTooltipContent());
-                       }
-               } else {
-                       seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
-                                       DAChartSeriesItem.SERIES_ARROW_NONE, threadEvent.getTooltipContent());
-               }
-               threadEventSeries.addSeriesItem(seriesItem);
-       }
-
-       private void updateAPISeries(ThreadPageThreadDataEvent threadEvent) {
-               long errorNum = threadEvent.getErrorNum();
-               DAChartSeriesItem seriesItem = createAPIItem(threadEvent, errorNum);
-               threadAPISeries.addSeriesItem(seriesItem);
-       }
-
-       private DAChartSeriesItem createAPIItem(ThreadPageThreadDataEvent event, long errno) {
-               DAChartSeriesItem apiItem = null;
-               if (0 != errno) {
-                       apiItem = new DAChartSeriesItem(event.getDoubleTime(),
-                                       DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.RED,
-                                       event.getTooltipContent() + ThreadPageLabels.SYNC_CHART_ITEM_FAILED);
-               } else {
-                       apiItem = new DAChartSeriesItem(event.getDoubleTime(),
-                                       DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.YELLOW,
-                                       event.getTooltipContent());
-               }
-               return apiItem;
-       }
-}
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartBoard.java
deleted file mode 100644 (file)
index 524d217..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.chart;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Composite;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
-import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-
-public class ThreadChartBoard extends SyncChartBoard {
-
-       private List<ThreadChart> threadChartItemList = new ArrayList<ThreadChart>();
-
-       private int threadListCount = -1;
-       private int preSelectionPId = -1;
-
-       public ThreadChartBoard(Composite parent, String title) {
-               super(parent, title);
-               initIntervalMarkers();
-       }
-
-       public ThreadChartBoard(Composite parent, String title, int[] scaleValues) {
-               super(parent, title, scaleValues);
-       }
-
-       public ThreadChartBoard(Composite parent, String title, int boardStyle) {
-               super(parent, title, boardStyle);
-       }
-
-       @Override
-       protected void callBackScaleChanged() {
-               super.callBackScaleChanged();
-               updateChart();
-       }
-
-       @Override
-       protected void callBackScrollChanged() {
-               super.callBackScrollChanged();
-               updateChart();
-       }
-
-       @Override
-       protected void callBackSizeChanged() {
-               super.callBackSizeChanged();
-               layout(true, true);
-       }
-
-       public void updateChart() {
-               createChartItem();
-               clearSeries();
-               updateSeries();
-               chartFilteringByPId();
-       }
-
-       protected void chartFilteringByPId() {
-               super.chartFilteringByPId();
-               if (null == getItemList()) {
-                       return;
-               }
-               int selectedPid = ToolbarArea.getInstance().getSelectedPid();
-               if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
-                       return;
-               }
-
-               int parentIndex = 0;
-               for (ThreadChart chart : threadChartItemList) {
-                       if (!chart.isParentChartRow()) {
-                               continue;
-                       }
-                       if (selectedPid == 0) {
-                               showItem(parentIndex);
-                       } else if (selectedPid == chart.getpId()) {
-                               showItem(parentIndex);
-                       } else {
-                               hideItem(parentIndex);
-                       }
-                       parentIndex++;
-               }
-               preSelectionPId = selectedPid;
-       }
-
-       public void clear() {
-               super.clear();
-               threadChartItemList.clear();
-               threadListCount = -1;
-               preSelectionPId = -1;
-               initIntervalMarkers();
-       }
-
-       public boolean createChartItem() {
-               createThreadItem();
-               createSyncItem();
-               return true;
-       }
-
-       private void createThreadItem() {
-               if (threadListCount == ThreadDataManager.getInstance().getThreadDataMaker()
-                               .getChartRowData().size()) {
-                       return;
-               }
-
-               List<ThreadPageThreadData> sortList = sortThreadChartByTID(ThreadDataManager.getInstance()
-                               .getThreadDataMaker().getChartRowData());
-               for (ThreadPageThreadData data : sortList) {
-                       if (isExistThreadChartRow(data)) {
-                               continue;
-                       }
-                       addThreadParentChartItemList(data);
-               }
-               threadListCount = ThreadDataManager.getInstance().getThreadDataMaker().getChartRowData()
-                               .size();
-       }
-
-       private List<ThreadPageThreadData> sortThreadChartByTID(List<ThreadPageThreadData> list) {
-               Comparator<ThreadPageThreadData> comparator = new Comparator<ThreadPageThreadData>() {
-                       @Override
-                       public int compare(ThreadPageThreadData arg0, ThreadPageThreadData arg1) {
-                               if (arg0.getTid() > arg1.getTid()) {
-                                       return 1;
-                               } else if (arg0.getTid() < arg1.getTid()) {
-                                       return -1;
-                               } else {
-                                       return 0;
-                               }
-                       }
-               };
-               Collections.sort(list, comparator);
-               return list;
-       }
-
-       private void createSyncItem() {
-               if (syncListCount == ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData()
-                               .size()) {
-                       return;
-               }
-               for (ThreadPageSyncData data : ThreadDataManager.getInstance().getSyncDataMaker()
-                               .getChartRowData()) {
-                       if (isExistSyncChartRow(data)) {
-                               continue;
-                       }
-                       addChartChildItemList(data);
-               }
-               syncListCount = ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData().size();
-       }
-
-       private boolean isExistThreadChartRow(ThreadPageThreadData data) {
-               for (ThreadChart chart : threadChartItemList) {
-                       if (chart.getChartID() == data.getThreadDataID()) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       private void addChartChildItemList(ThreadPageSyncData data) {
-               ThreadChart parent = getParentChartData(data);
-               if (null != parent) {
-                       addSyncChildChartItemList(parent, data);
-               }
-       }
-
-       private ThreadChart getParentChartData(ThreadPageSyncData syncData) {
-               if (syncData.getSyncDataType() != ThreadPageSyncData.THREAD_CHILD) {
-                       return null;
-               }
-               for (ThreadChart chart : threadChartItemList) {
-                       if (chart.getChartID() == syncData.getParentID()) {
-                               return chart;
-                       }
-               }
-               return null;
-       }
-
-       private void addThreadParentChartItemList(ThreadPageThreadData data) {
-               DAChartBoardItem parentItem = new DAChartBoardItem(this, data.getTypeString()
-                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
-                               + ThreadPageLabels.THREAD_CHART_NAME_PID + data.getPid()
-                               + ThreadPageLabels.THREAD_CHART_NAME_COMMA + ThreadPageLabels.THREAD_CHART_NAME_TID
-                               + data.getKey() + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
-               parentItem.setData(data);
-               DAChart parentDAChart = parentItem.getChart();
-               initChart(parentDAChart, true);
-               ThreadChart parentChartData = new ThreadChart(data.getThreadDataID(), parentItem,
-                               parentDAChart, ThreadChart.THREAD_CHART);
-               parentChartData.setpId(Integer.parseInt(data.getPid()));
-               threadChartItemList.add(parentChartData);
-       }
-
-       public void clearSeries() {
-               super.clearSeries();
-               clearThreadSeries();
-       }
-
-       private void clearThreadSeries() {
-               if (null == threadChartItemList) {
-                       return;
-               }
-               for (ThreadChart chart : threadChartItemList) {
-                       chart.clearSeries();
-               }
-       }
-
-       private void updateSeries() {
-               updateThreadEventSeries();
-               updateSyncEventSeries();
-       }
-
-       private void updateThreadEventSeries() {
-               if (null == threadChartItemList) {
-                       return;
-               }
-               List<ThreadPageThreadDataEvent> seriesList = selectThreadEventSeriesListFromDB();
-               if (null == seriesList) {
-                       return;
-               }
-               for (ThreadChart chart : threadChartItemList) {
-                       chart.updateThreadSeries(seriesList);
-               }
-       }
-
-       private List<ThreadPageThreadDataEvent> selectThreadEventSeriesListFromDB() {
-               List<ThreadPageThreadDataEvent> returnValue = new ArrayList<ThreadPageThreadDataEvent>();
-               String query = String.format(ThreadEventDBTable.SELECT_QUERY, (getVisibleStartTime() - 2)
-                               * TimelineConstants.MEGA_LONG, getVisibleEndTime() * TimelineConstants.MEGA_LONG);
-
-               ResultSet rs = SqlConnectionManager.executeQueryRS(query);
-               if (rs == null) {
-                       SqlConnectionManager.releaseResultSet(rs);
-                       return null;
-               }
-               try {
-                       while (rs.next()) {
-                               int chartID = rs.getInt(ThreadEventDBTable.COLUMN.THREADDATAID.index + 1);
-                               long time = rs.getLong(ThreadEventDBTable.COLUMN.EVENTTIME.index + 1);
-                               int tID = rs.getInt(ThreadEventDBTable.COLUMN.TID.index + 1);
-                               int apiType = rs.getByte(ThreadEventDBTable.COLUMN.APITYPE.index + 1);
-                               String tooltip = rs.getString(ThreadEventDBTable.COLUMN.TOOLTIP.index + 1);
-                               long errorNum = rs.getLong(ThreadEventDBTable.COLUMN.ERRORNO.index + 1);
-                               int eventType = rs.getByte(ThreadEventDBTable.COLUMN.EVENTTYPE.index + 1);
-                               int threadType = rs.getInt(ThreadEventDBTable.COLUMN.THREADTYPE.index + 1);
-                               int callerID = rs.getInt(ThreadEventDBTable.COLUMN.CALLERID.index + 1);
-                               ThreadPageThreadDataEvent chartData = new ThreadPageThreadDataEvent(eventType,
-                                               threadType, apiType, time, tID, tooltip, errorNum, null);
-                               chartData.setThreadDataID(chartID);
-                               chartData.setCallerTid(callerID);
-                               returnValue.add(chartData);
-                       }
-                       SqlConnectionManager.releaseResultSet(rs);
-               } catch (SQLException e) {
-                       e.printStackTrace();
-               }
-               return returnValue;
-       }
-}
@@ -3,8 +3,7 @@
  *
  * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
  *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com> 
+ * Contact: 
  * WooJin Jung <woojin2.jung@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  *
@@ -25,7 +24,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -37,125 +36,101 @@ import org.tizen.dynamicanalyzer.common.DALimit;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.database.DBColumn;
 import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
 import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
-
-public class SyncAPIDBTable extends DBTable {
-       public static final String TABLENAME = "SYNCAPI";
-       private DBInserter dbInserter = null;
-
-       private static final String SELECT_COLUMN = COLUMN.SEQ.name + CommonConstants.COMMA
-                       + COLUMN.APICALLTIME.name + CommonConstants.COMMA + COLUMN.APIID.name
-                       + CommonConstants.COMMA + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name
-                       + CommonConstants.COMMA + COLUMN.ARGUMENT.name + CommonConstants.COMMA
-                       + COLUMN.RETURN.name + CommonConstants.COMMA + COLUMN.ERRORNO.name;
-       public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from "
-                       + SyncEventDBTable.TABLENAME + CommonConstants.COMMA + TABLENAME + "  where "
-                       + SyncEventDBTable.COLUMN.SYNCDATAID.name + " = %s and "
-                       + SyncEventDBTable.COLUMN.API_SEQNUMBER.name + " = " + COLUMN.SEQ.name;
+import org.tizen.dynamicanalyzer.database.IResultSet;
 
+public class SyncAPIDBTable extends DBTable implements IResultSet {
+       public static final String TABLENAME="SyncAPI";
+       
+       private static final String SELECT_COLUMN = 
+                       COLUMN.SEQ.name + CommonConstants.COMMA +
+                       COLUMN.APICALLTIME.name + CommonConstants.COMMA +
+                       COLUMN.APIID.name + CommonConstants.COMMA +
+                       COLUMN.PID.name + CommonConstants.COMMA +
+                       COLUMN.TID.name + CommonConstants.COMMA +
+                       COLUMN.ARGUMENT.name + CommonConstants.COMMA +
+                       COLUMN.RETURN.name + CommonConstants.COMMA +
+                       COLUMN.ERRORNO.name;
+       public static final String SELECT_QUERY = 
+                       "select " + SELECT_COLUMN + " from " + SyncEventDBTable.TABLENAME + 
+                       CommonConstants.COMMA + TABLENAME + 
+                       "  where " + SyncEventDBTable.COLUMN.SYNCDATAID.name + " = %s and " +
+                       SyncEventDBTable.COLUMN.API_SEQNUMBER.name + " = " + COLUMN.SEQ.name;
+       
        public enum COLUMN {
-               SEQ(0, "SEQNUMBER"), APICALLTIME(1, "APICallTime"), APIID(2, "APIID"), PID(3, "PID"), TID(
-                               4, "TID"), ARGUMENT(5, DBConstants.DBCOLUMN_ARGUMENT), RETURN(6,
-                               DBConstants.DBCOLUMN_RETURN_VALUE), ERRORNO(7, DBConstants.DBCOLUMN_ERROR_NUMBER), SYNCVALUE(
-                               8, "SyncValue");
-
+               SEQ(0, "SEQNUMBER"),
+               APICALLTIME(1, "APICallTime"),
+               APIID(2, "APIID"),
+               PID(3, "PID"),
+               TID(4, "TID"),
+               ARGUMENT(5, DBConstants.DBCOLUMN_ARGUMENT),
+               RETURN(6, DBConstants.DBCOLUMN_RETURN_VALUE),
+               ERRORNO(7, DBConstants.DBCOLUMN_ERROR_NUMBER),
+               SYNCVALUE(8, "SyncValue");
+               
                public final int index;
                public final String name;
-
+               
                COLUMN(int index, String name) {
                        this.index = index;
                        this.name = name;
                }
        }
-
+       
        @Override
        public String getTableName() {
                return TABLENAME;
        }
-
+       
        public SyncAPIDBTable() {
                addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));              
                addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
-                               DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
-               addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
-                               DALimit.FUNCTION_RETURN_VALUE_LENGTH));
+               addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY,
+                               DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
+               addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY,
+                               DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_RETURN_VALUE_LENGTH));
                addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
-               dbInserter = DBInsertManager.makeInserter(this);
-       }
-
-       public void insertSyncAPIData(List<SyncData> insertSyncAPIList) {
-               if (insertSyncAPIList.size() == 0) {
-                       return;
-               }
-               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();
-               for (SyncData syncAPI : insertSyncAPIList) {
-                       List<Object> insertRowData = new ArrayList<Object>();
-                       try {
-                               insertRowData.add(new Long(syncAPI.getSeq()));
-                               insertRowData.add(new Long(syncAPI.getTime()));
-                               insertRowData.add(new Integer(syncAPI.getApiId()));
-                               insertRowData.add(new Integer(syncAPI.getPid()));
-                               insertRowData.add(new Integer(syncAPI.getTid()));
-                               insertRowData.add(new String(syncAPI.getArgs()));
-                               insertRowData.add(new String(syncAPI.getReturn()));
-                               insertRowData.add(new Long(syncAPI.getErrno()));
-                               insertRowData.add(new Long(syncAPI.getSyncValue()));
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
-                       }
-                       insertData.add(insertRowData);
-               }
-               if (insertData.size() > 0) {
-                       dbInserter.pushData(insertData);
-               }
        }
 
        public List<List<Object>> getSyncAPIFromDB() {
                return selectAllColumnData(null);
        }
-
+       
        @Override
        public boolean prepare(PreparedStatement prep, List<Object> rowData) {
                boolean isPrepared = true;
+               
                int columnsize = getColumnSize();
                if (columnsize != rowData.size()) {
                        isPrepared = false;
                } else {
                        try {
                                prep.setLong(COLUMN.SEQ.index + 1, (Long) (rowData.get(COLUMN.SEQ.index)));
-                               prep.setLong(COLUMN.APICALLTIME.index + 1,
-                                               (Long) (rowData.get(COLUMN.APICALLTIME.index)));
+                               prep.setLong(COLUMN.APICALLTIME.index + 1, (Long) (rowData.get(COLUMN.APICALLTIME.index)));
                                prep.setInt(COLUMN.APIID.index + 1, (Integer) (rowData.get(COLUMN.APIID.index)));
                                prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
                                prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
                                String argumentStr = clipString((String) (rowData.get(COLUMN.ARGUMENT.index)),
-                                               DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
-                                                               .toString());
+                                               DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
                                prep.setString(COLUMN.ARGUMENT.index + 1, argumentStr);
                                String retStr = clipString((String) (rowData.get(COLUMN.RETURN.index)),
-                                               DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
-                                                               .toString());
+                                               DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
                                prep.setString(COLUMN.RETURN.index + 1, retStr);
                                prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
-                               prep.setLong(COLUMN.SYNCVALUE.index + 1,
-                                               (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
+                               prep.setLong(COLUMN.SYNCVALUE.index + 1, (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
                        }
                }
+               
                return isPrepared;
        }
-
+       
        @Override
        public List<Object> extractDataFromResultSet(ResultSet rs) {
                List<Object> row = new ArrayList<Object>();
@@ -173,7 +148,7 @@ public class SyncAPIDBTable extends DBTable {
                        e.printStackTrace();
                        return null;
                }
-
+               
                return row;
        }
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIInserter.java
new file mode 100644 (file)
index 0000000..948e37d
--- /dev/null
@@ -0,0 +1,106 @@
+/*\r
+ *  Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.swap.model.data.SyncData;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+//TODO: use DBInserter\r
+public class SyncAPIInserter implements Runnable {\r
+       private static LinkedBlockingQueue<SyncData> syncAPIQueue = new LinkedBlockingQueue<SyncData>();\r
+\r
+       private static volatile Thread inserterThread = null;\r
+\r
+       public static void startThread() {\r
+               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                       synchronized (SyncAPIInserter.class) {\r
+                               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                                       inserterThread = new Thread(null,\r
+                                                       new SyncAPIInserter());\r
+                                       inserterThread.start();\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void stopThread() {\r
+               if (inserterThread != null && inserterThread.isAlive()) {\r
+                       try {\r
+                               sendNotify();\r
+                               inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+                       } catch (InterruptedException e) {\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void pushSyncEvent(SyncData syncAPI) {\r
+               syncAPIQueue.offer(syncAPI);\r
+       }\r
+\r
+       public static void clear() {\r
+               stopThread();\r
+       }\r
+\r
+       @Override\r
+       public void run() {\r
+               while (!AnalyzerManager.isExit()) {\r
+                       SyncData syncAPI = syncAPIQueue.poll();\r
+\r
+                       if (syncAPI != null) {\r
+                               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();             \r
+                               List<Object> insertRowData = new ArrayList<Object>();\r
+                               try {\r
+                                       insertRowData.add(new Long(syncAPI.getSeq()));\r
+                                       insertRowData.add(new Long(syncAPI.getTime()));\r
+                                       insertRowData.add(new Integer(syncAPI.getApiId()));\r
+                                       insertRowData.add(new Integer(syncAPI.getPid()));\r
+                                       insertRowData.add(new Integer(syncAPI.getTid()));\r
+                                       insertRowData.add(new String(syncAPI.getArgs()));\r
+                                       insertRowData.add(new String(syncAPI.getReturn()));\r
+                                       insertRowData.add(new Long(syncAPI.getErrno()));\r
+                                       insertRowData.add(new Long(syncAPI.getSyncValue()));\r
+                               } catch (ArrayIndexOutOfBoundsException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               insertData.add(insertRowData);\r
+                               if (insertData.size() > 0) {\r
+                                       ThreadChartManager.getInstance().getSyncAPIDBTable().insertData(insertData);\r
+                               }       \r
+                       }\r
+               }                       \r
+       }\r
+\r
+       public static void sendNotify() {\r
+//             syncAPIQueue.wake();\r
+       }\r
+}\r
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataDBTable.java
new file mode 100644 (file)
index 0000000..32d359d
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@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
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.ui.thread.data;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.database.DBColumn;
+import org.tizen.dynamicanalyzer.database.DBConstants;
+import org.tizen.dynamicanalyzer.database.DBTable;
+import org.tizen.dynamicanalyzer.database.IResultSet;
+
+public class SyncDataDBTable extends DBTable implements IResultSet {
+       public static final String TABLENAME="SyncData";
+       
+       public static final String QUERY_OPTION = "order by " + COLUMN.SYNCDATAID.name;
+       
+       private static final String SELECT_COLUMN = 
+                       COLUMN.SYNCDATAID.name + CommonConstants.COMMA +
+                       COLUMN.PID.name + CommonConstants.COMMA +
+                       COLUMN.TID.name + CommonConstants.COMMA +
+                       COLUMN.SYNCTYPE.name + CommonConstants.COMMA +
+                       COLUMN.SYNCVALUE.name + CommonConstants.COMMA +
+                       COLUMN.ATTRIBUTETYPE.name + CommonConstants.COMMA +
+                       COLUMN.SYNCDATATYPE.name + CommonConstants.COMMA +
+                       COLUMN.PARENTID.name;
+       public static final String SELECT_QUERY =
+                       "select " + SELECT_COLUMN + " from " + TABLENAME +
+                       "  order by " + COLUMN.SYNCDATAID.name; 
+       
+       public enum COLUMN {
+               SYNCDATAID(0, "SyncDataID"),
+               PID(1, "PID"),
+               TID(2, "TID"),
+               SYNCTYPE(3, "SyncType"),
+               SYNCVALUE(4, "SyncValue"),
+               ATTRIBUTETYPE(5, "AttributeType"),
+               SYNCDATATYPE(6, "SyncDataType"),
+               PARENTID(7, "ParentId");
+               
+               public final int index;
+               public final String name;
+               
+               COLUMN(int index, String name) {
+                       this.index = index;
+                       this.name = name;
+               }
+       }
+       
+       @Override
+       public String getTableName() {
+               return TABLENAME;
+       }
+       
+       public SyncDataDBTable() {
+               addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.SYNCTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+               addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));              
+               addColumn(new DBColumn(COLUMN.SYNCDATATYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+               addColumn(new DBColumn(COLUMN.PARENTID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
+       }
+
+       public List<List<Object>> getSyncDataFromDB() {
+               return selectAllColumnData(QUERY_OPTION);
+       }
+       
+       @Override
+       public boolean prepare(PreparedStatement prep, List<Object> rowData) {
+               boolean isPrepared = true;
+               
+               int columnsize = getColumnSize();
+               if (columnsize != rowData.size()) {
+                       isPrepared = false;
+               } else {
+                       try {
+                               prep.setInt(COLUMN.SYNCDATAID.index + 1, (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
+                               prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
+                               prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));                           
+                               prep.setByte(COLUMN.SYNCTYPE.index + 1, (Byte) (rowData.get(COLUMN.SYNCTYPE.index)));
+                               prep.setLong(COLUMN.SYNCVALUE.index + 1, (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
+                               prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1, (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
+                               prep.setByte(COLUMN.SYNCDATATYPE.index + 1, (Byte) (rowData.get(COLUMN.SYNCDATATYPE.index)));
+                               prep.setInt(COLUMN.PARENTID.index + 1, (Integer) (rowData.get(COLUMN.PARENTID.index)));
+
+                       } catch (SQLException e) {
+                               e.printStackTrace();
+                               isPrepared = false;
+                       }
+               }
+               
+               return isPrepared;
+       }
+       
+       @Override
+       public List<Object> extractDataFromResultSet(ResultSet rs) {
+               List<Object> row = new ArrayList<Object>();
+               try {
+                       row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
+                       row.add(Integer.valueOf(rs.getInt(COLUMN.PID.index + 1)));
+                       row.add(Integer.valueOf(rs.getInt(COLUMN.TID.index + 1)));
+                       row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCTYPE.index + 1)));
+                       row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
+                       row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
+                       row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCDATATYPE.index + 1)));
+                       row.add(Integer.valueOf(rs.getInt(COLUMN.PARENTID.index + 1)));
+               } catch (SQLException e) {
+                       e.printStackTrace();
+                       return null;
+               }
+               
+               return row;
+       }
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataInserter.java
new file mode 100644 (file)
index 0000000..7872def
--- /dev/null
@@ -0,0 +1,122 @@
+/*\r
+ *  Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;\r
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager;\r
+//TODO: use DBInserter\r
+public class SyncDataInserter implements Runnable {\r
+       private static LinkedBlockingQueue<ThreadPageSyncData> syncDataQueue = new LinkedBlockingQueue<ThreadPageSyncData>();\r
+\r
+       private static volatile Thread inserterThread = null;\r
+\r
+       public static void startThread() {\r
+               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                       synchronized (SyncDataInserter.class) {\r
+                               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                                       inserterThread = new Thread(null,\r
+                                                       new SyncDataInserter());\r
+                                       inserterThread.start();\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void stopThread() {\r
+               if (inserterThread != null && inserterThread.isAlive()) {\r
+                       try {\r
+                               sendNotify();\r
+                               inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+                       } catch (InterruptedException e) {\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void pushSyncData(ThreadPageSyncData syncData) {\r
+               syncDataQueue.offer(syncData);\r
+       }\r
+\r
+       public static void clear() {\r
+               stopThread();\r
+       }\r
+\r
+       @Override\r
+       public void run() {\r
+               while (!AnalyzerManager.isExit()) {\r
+                       ThreadPageSyncData syncData = syncDataQueue.poll();\r
+\r
+                       if (syncData != null) {\r
+                               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();             \r
+                               List<Object> insertRowData = new ArrayList<Object>();\r
+                               try {\r
+                                       insertRowData.add(new Integer(syncData.getSyncDataID()));\r
+                                       insertRowData.add(new Integer(syncData.getPid()));\r
+                                       insertRowData.add(new Integer(syncData.getTid()));\r
+                                       Integer type = new Integer(syncData.getType());\r
+                                       byte syncType = type.byteValue();\r
+                                       insertRowData.add(new Byte(syncType));\r
+                                       insertRowData.add(new Long(syncData.getKey()));\r
+                                       String attrTypeStr = syncData.getAttrType();\r
+                                       byte attrType = -1;\r
+                                       if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL)) {\r
+                                               attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL;\r
+                                       } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE)) {\r
+                                               attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_RECURSIVE;\r
+                                       } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK)) {\r
+                                               attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_ERRORCHECK;          \r
+                                       } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT)) {\r
+                                               attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_DEFAULT;\r
+                                       } else {\r
+                                               attrType = -1;\r
+                                       }\r
+                                       insertRowData.add(new Byte(attrType));\r
+                                       insertRowData.add(new Byte(syncData.getSyncDataType()));\r
+                                       insertRowData.add(new Integer(syncData.getParentID()));\r
+                               } catch (ArrayIndexOutOfBoundsException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               insertData.add(insertRowData);\r
+                               if (insertData.size() > 0) {\r
+                                       ThreadChartManager.getInstance().getSyncDataDBTable().insertData(insertData);\r
+                               }\r
+                       }\r
+               }                       \r
+       }\r
+\r
+       public static void sendNotify() {\r
+//             syncDataQueue.wake();\r
+       }\r
+}\r
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventDBTable.java
new file mode 100644 (file)
index 0000000..e79de6a
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@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
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.ui.thread.data;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.common.DALimit;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.database.DBColumn;
+import org.tizen.dynamicanalyzer.database.DBConstants;
+import org.tizen.dynamicanalyzer.database.DBTable;
+import org.tizen.dynamicanalyzer.database.IResultSet;
+
+public class SyncEventDBTable extends DBTable implements IResultSet {
+       public static final String TABLENAME="SyncEvent";
+       
+       private static final String SELECT_COLUMN = 
+                       COLUMN.EVENTTIME.name + CommonConstants.COMMA +
+                       COLUMN.APITYPE.name + CommonConstants.COMMA +
+                       COLUMN.TOOLTIP.name + CommonConstants.COMMA +
+                       COLUMN.ERRORNO.name + CommonConstants.COMMA +
+                       COLUMN.SYNCVALUE.name;
+       public static final String SELECT_QUERY = 
+                       "select " + SELECT_COLUMN + " from " + TABLENAME + 
+                       "  where " + COLUMN.SYNCDATAID.name + " = %s ";
+       
+       public enum COLUMN {
+               API_SEQNUMBER(0, "APISEQNUMBER"),
+               SYNCDATAID(1, "SyncDataID"),
+               EVENTTIME(2, "EventTime"),
+               APITYPE(3, "APIType"),
+               TOOLTIP(4, "Tooltip"),
+               ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER),
+               SYNCVALUE(6, "SyncValue");
+
+               public final int index;
+               public final String name;
+               
+               COLUMN(int index, String name) {
+                       this.index = index;
+                       this.name = name;
+               }
+       }
+       
+       @Override
+       public String getTableName() {
+               return TABLENAME;
+       }
+       
+       public SyncEventDBTable() {
+               addColumn(new DBColumn(COLUMN.API_SEQNUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.EVENTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.APITYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+               addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, 
+                               DBConstants.VARCHAR, DALimit.TOOLTIP_LENGTH));          
+               addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               setIndexColumn(COLUMN.SYNCDATAID.index);
+       }
+
+       public List<List<Object>> getSyncEventFromDB() {
+               return selectAllColumnData(null);
+       }
+       
+       @Override
+       public boolean prepare(PreparedStatement prep, List<Object> rowData) {
+               boolean isPrepared = true;
+               
+               int columnsize = getColumnSize();
+               if (columnsize != rowData.size()) {
+                       isPrepared = false;
+               } else {
+                       try {
+                               prep.setLong(COLUMN.API_SEQNUMBER.index + 1, (Long) (rowData.get(COLUMN.API_SEQNUMBER.index)));
+                               prep.setInt(COLUMN.SYNCDATAID.index + 1, (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));                             
+                               prep.setLong(COLUMN.EVENTTIME.index + 1, (Long) (rowData.get(COLUMN.EVENTTIME.index)));
+                               prep.setByte(COLUMN.APITYPE.index + 1, (Byte) (rowData.get(COLUMN.APITYPE.index)));
+                               String tooltipStr = clipString((String) (rowData.get(COLUMN.TOOLTIP.index)),
+                                               DALimit.TOOLTIP_LENGTH, rowData.get(COLUMN.EVENTTIME.index).toString());
+                               prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);                                                           
+                               prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
+                               prep.setLong(COLUMN.SYNCVALUE.index + 1, (Long) (rowData.get(COLUMN.SYNCVALUE.index)));         
+                       } catch (SQLException e) {
+                               e.printStackTrace();
+                               isPrepared = false;
+                       }
+               }
+               
+               return isPrepared;
+       }
+       
+       @Override
+       public List<Object> extractDataFromResultSet(ResultSet rs) {
+               List<Object> row = new ArrayList<Object>();
+               try {
+                       row.add(Long.valueOf(rs.getLong(COLUMN.API_SEQNUMBER.index + 1)));
+                       row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
+                       row.add(Long.valueOf(rs.getLong(COLUMN.EVENTTIME.index + 1)));
+                       row.add(Byte.valueOf(rs.getByte(COLUMN.APITYPE.index + 1)));
+                       row.add(rs.getString(COLUMN.TOOLTIP.index + 1));
+                       row.add(Long.valueOf(rs.getLong(COLUMN.ERRORNO.index + 1)));
+                       row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
+               } catch (SQLException e) {
+                       e.printStackTrace();
+                       return null;
+               }
+               
+               return row;
+       }
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventInserter.java
new file mode 100644 (file)
index 0000000..233a247
--- /dev/null
@@ -0,0 +1,105 @@
+/*\r
+ *  Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent;\r
+//TODO: use DBInserter\r
+public class SyncEventInserter implements Runnable {\r
+       private static LinkedBlockingQueue<ThreadPageSyncDataEvent> syncEventQueue = new LinkedBlockingQueue<ThreadPageSyncDataEvent>();\r
+\r
+       private static volatile Thread inserterThread = null;\r
+\r
+       public static void startThread() {\r
+               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                       synchronized (SyncEventInserter.class) {\r
+                               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                                       inserterThread = new Thread(null,\r
+                                                       new SyncEventInserter());\r
+                                       inserterThread.start();\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void stopThread() {\r
+               if (inserterThread != null && inserterThread.isAlive()) {\r
+                       try {\r
+                               sendNotify();\r
+                               inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+                       } catch (InterruptedException e) {\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void pushSyncEvent(ThreadPageSyncDataEvent syncEvent) {\r
+               syncEventQueue.offer(syncEvent);\r
+       }\r
+\r
+       public static void clear() {\r
+               stopThread();\r
+       }\r
+\r
+       @Override\r
+       public void run() {\r
+               while (!AnalyzerManager.isExit()) {\r
+                       ThreadPageSyncDataEvent syncEvent = syncEventQueue.poll();\r
+\r
+                       if (syncEvent != null) {\r
+                               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();             \r
+                               List<Object> insertRowData = new ArrayList<Object>();\r
+                               try {\r
+                                       insertRowData.add(new Long(syncEvent.getContents().getSeq()));\r
+                                       insertRowData.add(new Integer(syncEvent.getSyncDataID()));\r
+                                       insertRowData.add(new Long(syncEvent.getTime()));\r
+                                       Integer apiType = new Integer(syncEvent.getApiType());\r
+                                       insertRowData.add(new Byte(apiType.byteValue()));\r
+                                       insertRowData.add(new String(syncEvent.getTooltipContent()));\r
+                                       insertRowData.add(new Long(syncEvent.getErrorNum()));\r
+                                       insertRowData.add(new Long(syncEvent.getSyncVal()));\r
+                               } catch (ArrayIndexOutOfBoundsException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               insertData.add(insertRowData);\r
+                               if (insertData.size() > 0) {\r
+                                       ThreadChartManager.getInstance().getSyncEventDBTable().insertData(insertData);\r
+                               }\r
+                       }\r
+               }                       \r
+       }\r
+\r
+       public static void sendNotify() {\r
+//             syncEventQueue.wake();\r
+       }\r
+}\r
@@ -4,7 +4,6 @@
  * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  *
@@ -25,7 +24,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -34,136 +33,104 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.communicator.DACommunicator;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.database.DBColumn;
 import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
 import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-
-public class ThreadAPIDBTable extends DBTable {
-       public static final String TABLENAME = "THREADAPI";
-       private DBInserter dbInserter = null;
-       private static final String SELECT_COLUMN = COLUMN.SEQ.name + CommonConstants.COMMA
-                       + COLUMN.APICALLTIME.name + CommonConstants.COMMA + COLUMN.APIID.name
-                       + CommonConstants.COMMA + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name
-                       + CommonConstants.COMMA + COLUMN.ARGUMENT.name + CommonConstants.COMMA
-                       + COLUMN.RETURN.name + CommonConstants.COMMA + COLUMN.ERRORNO.name;
-       public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from " + TABLENAME
-                       + "  where " + COLUMN.THREADDATAID.name + " = %s";
+import org.tizen.dynamicanalyzer.database.IResultSet;
 
+public class ThreadAPIDBTable extends DBTable implements IResultSet {
+       public static final String TABLENAME="ThreadAPI";
+       
+       private static final String SELECT_COLUMN = 
+                       COLUMN.SEQ.name + CommonConstants.COMMA +
+                       COLUMN.APICALLTIME.name + CommonConstants.COMMA +
+                       COLUMN.APIID.name + CommonConstants.COMMA +
+                       COLUMN.PID.name + CommonConstants.COMMA +
+                       COLUMN.TID.name + CommonConstants.COMMA +
+                       COLUMN.ARGUMENT.name + CommonConstants.COMMA +
+                       COLUMN.RETURN.name + CommonConstants.COMMA +
+                       COLUMN.ERRORNO.name;
+       public static final String SELECT_QUERY = 
+                       "select " + SELECT_COLUMN + " from " + TABLENAME + 
+                       "  where " + COLUMN.THREADDATAID.name + " = %s";
+       
        public enum COLUMN {
-               SEQ(0, "SEQNUMBER"), THREADDATAID(1, "ThreadDataID"), APICALLTIME(2, "APICallTime"), APIID(
-                               3, "APIID"), PID(4, "PID"), TID(5, "TID"), ARGUMENT(6,
-                               DBConstants.DBCOLUMN_ARGUMENT), RETURN(7, DBConstants.DBCOLUMN_RETURN_VALUE), ERRORNO(
-                               8, DBConstants.DBCOLUMN_ERROR_NUMBER);
-
+               SEQ(0, "SEQNUMBER"),
+               THREADDATAID(1, "ThreadDataID"),
+               APICALLTIME(2, "APICallTime"),
+               APIID(3, "APIID"),
+               PID(4, "PID"),
+               TID(5, "TID"),
+               ARGUMENT(6, DBConstants.DBCOLUMN_ARGUMENT),
+               RETURN(7, DBConstants.DBCOLUMN_RETURN_VALUE),
+               ERRORNO(8, DBConstants.DBCOLUMN_ERROR_NUMBER);
+               
                public final int index;
                public final String name;
-
+               
                COLUMN(int index, String name) {
                        this.index = index;
                        this.name = name;
                }
        }
-
+       
        @Override
        public String getTableName() {
                return TABLENAME;
        }
-
+       
        public ThreadAPIDBTable() {
                addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));              
                addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
-                               DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
-               addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
-                               DALimit.FUNCTION_RETURN_VALUE_LENGTH));
+               addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY,
+                               DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
+               addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY,
+                               DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_RETURN_VALUE_LENGTH));
                addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
                setIndexColumn(COLUMN.THREADDATAID.index);
-               dbInserter = DBInsertManager.makeInserter(this);
        }
 
        public List<List<Object>> getThreadAPIFromDB() {
                return selectAllColumnData(null);
        }
-
-       public void insertThreadAPIData(List<ThreadPageThreadDataEvent> insertThreadEventList) {
-               ArrayList<List<Object>> apiData = new ArrayList<List<Object>>();
-               for (ThreadPageThreadDataEvent threadEvent : insertThreadEventList) {
-                       if (threadEvent.getEventType() != ThreadPageThreadDataEvent.TYPE_API) {
-                               continue;
-                       }
-                       List<Object> apiRowData = new ArrayList<Object>();
-                       ThreadData tData = (ThreadData) threadEvent.getContents();
-                       try {
-                               apiRowData.add(new Long(tData.getSeq()));
-                               apiRowData.add(new Integer(threadEvent.getThreadDataID()));
-                               apiRowData.add(new Long(tData.getTime()));
-                               apiRowData.add(new Integer(tData.getApiId()));
-                               apiRowData.add(new Integer(tData.getPid()));
-                               apiRowData.add(new Integer(tData.getTid()));
-                               apiRowData.add(new String(tData.getArgs()));
-                               apiRowData.add(new String(tData.getReturn()));
-                               apiRowData.add(new Long(tData.getErrno()));
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
-                       }
-                       apiData.add(apiRowData);
-               }
-               if (apiData.size() == 0) {
-                       return;
-               }
-               if (DACommunicator.isRunning()) {
-                       dbInserter.pushData(apiData);
-               } else {
-                       insertData(apiData);
-               }
-       }
-
+       
        @Override
        public boolean prepare(PreparedStatement prep, List<Object> rowData) {
                boolean isPrepared = true;
+               
                int columnsize = getColumnSize();
                if (columnsize != rowData.size()) {
                        isPrepared = false;
                } else {
                        try {
                                prep.setLong(COLUMN.SEQ.index + 1, (Long) (rowData.get(COLUMN.SEQ.index)));
-                               prep.setInt(COLUMN.THREADDATAID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
-                               prep.setLong(COLUMN.APICALLTIME.index + 1,
-                                               (Long) (rowData.get(COLUMN.APICALLTIME.index)));
+                               prep.setInt(COLUMN.THREADDATAID.index + 1, (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
+                               prep.setLong(COLUMN.APICALLTIME.index + 1, (Long) (rowData.get(COLUMN.APICALLTIME.index)));
                                prep.setInt(COLUMN.APIID.index + 1, (Integer) (rowData.get(COLUMN.APIID.index)));
                                prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
                                prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
                                String argumentStr = clipString((String) (rowData.get(COLUMN.ARGUMENT.index)),
-                                               DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
-                                                               .toString());
+                                               DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
                                prep.setString(COLUMN.ARGUMENT.index + 1, argumentStr);
                                String retStr = clipString((String) (rowData.get(COLUMN.RETURN.index)),
-                                               DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
-                                                               .toString());
+                                               DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
                                prep.setString(COLUMN.RETURN.index + 1, retStr);
                                prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
-
+                               
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
                        }
                }
+               
                return isPrepared;
        }
-
+       
        @Override
        public List<Object> extractDataFromResultSet(ResultSet rs) {
                List<Object> row = new ArrayList<Object>();
@@ -181,7 +148,7 @@ public class ThreadAPIDBTable extends DBTable {
                        e.printStackTrace();
                        return null;
                }
-
+               
                return row;
        }
 }
@@ -4,7 +4,6 @@
  * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  *
@@ -25,7 +24,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -37,128 +36,84 @@ import org.tizen.dynamicanalyzer.common.DALimit;
 import org.tizen.dynamicanalyzer.database.DBColumn;
 import org.tizen.dynamicanalyzer.database.DBConstants;
 import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadThreadDataMaker;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-
-public class ThreadDataDBTable extends DBTable {
-       public static final String TABLENAME = "THREADDATA";
+import org.tizen.dynamicanalyzer.database.IResultSet;
 
+public class ThreadDataDBTable extends DBTable implements IResultSet {
+       public static final String TABLENAME="ThreadData";
+       
        public enum COLUMN {
-               THREADDATAID(0, "ThreadDataID"), PID(1, "PID"), TID(2, "TID"), THREADTYPE(3, "ThreadType"), ATTRIBUTETYPE(
-                               4, "AttributeType"), STARTTIME(5, "StartTime"), ENDTIME(6, "EndTime"), FUNCTIONID(
-                               7, "FunctionId"), CLASSNAME(8, "ClassName");
-
+               THREADDATAID(0, "ThreadDataID"),
+               PID(1, "PID"),
+               TID(2, "TID"),
+               THREADTYPE(3, "ThreadType"),
+               ATTRIBUTETYPE(4, "AttributeType"),
+               STARTTIME(5, "StartTime"),
+               ENDTIME(6, "EndTime"),
+               FUNCTIONID(7, "FunctionId"),
+               CLASSNAME(8, "ClassName");
+               
                public final int index;
                public final String name;
-
+               
                COLUMN(int index, String name) {
                        this.index = index;
                        this.name = name;
                }
        }
-
+       
        @Override
        public String getTableName() {
                return TABLENAME;
        }
-
+       
        public ThreadDataDBTable() {
-               addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.PRIMARY_KEY,
-                               DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.STARTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+               addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+               addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+               addColumn(new DBColumn(COLUMN.STARTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));          
                addColumn(new DBColumn(COLUMN.ENDTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.FUNCTIONID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.CLASSNAME.name, DBConstants.EMPTY, DBConstants.VARCHAR,
-                               DALimit.CLASS_NAME_LENGTH));
+               addColumn(new DBColumn(COLUMN.CLASSNAME.name, DBConstants.EMPTY, 
+                               DBConstants.VARCHAR, DALimit.CLASS_NAME_LENGTH));               
        }
 
        public List<List<Object>> getThreadDataFromDB() {
                return selectAllColumnData(null);
        }
-
-       public void inserthreadPageThreadData(List<ThreadPageThreadData> remainedThreadData) {
-               List<List<Object>> insertData = new ArrayList<List<Object>>();
-               for (ThreadPageThreadData threadPageData : remainedThreadData) {
-                       if (threadPageData instanceof ThreadPageThreadData == false) {
-                               continue;
-                       }
-                       List<Object> insertRowData = new ArrayList<Object>();
-                       ThreadPageThreadData threadData = (ThreadPageThreadData) threadPageData;
-                       try {
-                               insertRowData.add(new Integer(threadData.getThreadDataID()));
-                               insertRowData.add(new Integer(threadData.getPid()));
-                               insertRowData.add(new Integer(threadData.getTid()));
-                               Integer type = new Integer(threadData.getType());
-                               byte threadType = type.byteValue();
-                               insertRowData.add(new Byte(threadType));
-                               String attrTypeStr = threadData.getAttrType();
-                               byte attrType = -1;
-                               if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) {
-                                       attrType = ThreadThreadDataMaker.PTHREAD_CREATE_JOINABLE;
-                               } else if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED)) {
-                                       attrType = ThreadThreadDataMaker.PTHREAD_CREATE_DETACHED;
-                               } else { // main thread has no attribute
-                                       attrType = -1;
-                               }
-                               insertRowData.add(new Byte(attrType));
-                               insertRowData.add(new Long(threadData.getStartTime()));
-                               insertRowData.add(new Long(threadData.getEndTime()));
-                               insertRowData.add(new Integer(threadData.getThreadFuncID()));
-                               insertRowData.add(new String(threadData.getThreadClassName()));
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
-                       }
-                       insertData.add(insertRowData);
-               }
-               if (insertData.size() > 0) {
-                       insertData(insertData);
-               }
-       }
-
+       
        @Override
        public boolean prepare(PreparedStatement prep, List<Object> rowData) {
                boolean isPrepared = true;
-
+               
                int columnsize = getColumnSize();
                if (columnsize != rowData.size()) {
                        isPrepared = false;
                } else {
                        try {
-                               prep.setInt(COLUMN.THREADDATAID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
+                               prep.setInt(COLUMN.THREADDATAID.index + 1, (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
                                prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
-                               prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
-                               prep.setByte(COLUMN.THREADTYPE.index + 1,
-                                               (Byte) (rowData.get(COLUMN.THREADTYPE.index)));
-                               prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1,
-                                               (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
-                               prep.setLong(COLUMN.STARTTIME.index + 1,
-                                               (Long) (rowData.get(COLUMN.STARTTIME.index)));
+                               prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));                           
+                               prep.setByte(COLUMN.THREADTYPE.index + 1, (Byte) (rowData.get(COLUMN.THREADTYPE.index)));
+                               prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1, (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
+                               prep.setLong(COLUMN.STARTTIME.index + 1, (Long) (rowData.get(COLUMN.STARTTIME.index)));
                                prep.setLong(COLUMN.ENDTIME.index + 1, (Long) (rowData.get(COLUMN.ENDTIME.index)));
-                               prep.setInt(COLUMN.FUNCTIONID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.FUNCTIONID.index)));
+                               prep.setInt(COLUMN.FUNCTIONID.index + 1, (Integer) (rowData.get(COLUMN.FUNCTIONID.index)));
 
                                String classNameStr = clipString((String) (rowData.get(COLUMN.CLASSNAME.index)),
-                                               DALimit.CLASS_NAME_LENGTH, rowData.get(COLUMN.THREADDATAID.index)
-                                                               .toString());
-                               prep.setString(COLUMN.CLASSNAME.index + 1, classNameStr);
-
+                                               DALimit.CLASS_NAME_LENGTH, rowData.get(COLUMN.THREADDATAID.index).toString());
+                               prep.setString(COLUMN.CLASSNAME.index + 1, classNameStr);                               
+                               
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
                        }
                }
-
+               
                return isPrepared;
        }
-
+       
        @Override
        public List<Object> extractDataFromResultSet(ResultSet rs) {
                List<Object> row = new ArrayList<Object>();
@@ -167,7 +122,7 @@ public class ThreadDataDBTable extends DBTable {
                        row.add(Integer.valueOf(rs.getInt(COLUMN.PID.index + 1)));
                        row.add(Integer.valueOf(rs.getInt(COLUMN.TID.index + 1)));
                        row.add(Byte.valueOf(rs.getByte(COLUMN.THREADTYPE.index + 1)));
-                       row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
+                       row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));      
                        row.add(Long.valueOf(rs.getLong(COLUMN.STARTTIME.index + 1)));
                        row.add(Long.valueOf(rs.getLong(COLUMN.ENDTIME.index + 1)));
                        row.add(Integer.valueOf(rs.getInt(COLUMN.FUNCTIONID.index + 1)));
@@ -176,7 +131,7 @@ public class ThreadDataDBTable extends DBTable {
                        e.printStackTrace();
                        return null;
                }
-
+               
                return row;
        }
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataManager.java
deleted file mode 100644 (file)
index a86b1a6..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.data;
-
-import java.util.List;
-import java.util.Map;
-
-import org.tizen.dynamicanalyzer.common.DALimit;
-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.thread.db.SyncAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncDataDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadDataDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-
-public class ThreadDataManager extends PageDataManager {
-       private static ThreadDataManager instance = null;
-       public final static double THREAD_DATA_MEMORY_KB = 0.3;
-       public final static double SYNC_DATA_MEMORY_KB = 0.3;
-       public final static double CHART_TYPE_HEAP_MEMORY_KB = 4.6 * 5;
-       public final static double MAX_THREAD_HEAP_MEMORY_KB = 10000; // possible to
-                                                                                                                                       // make
-                                                                                                                                       // approximately
-                                                                                                                                       // 400 chart
-
-       private ThreadDataDBTable threadDataTable = null;
-       private ThreadEventDBTable threadEventTable = null;
-       private ThreadAPIDBTable threadAPITable = null;
-
-       private SyncDataDBTable syncDataTable = null;
-       private SyncEventDBTable syncEventTable = null;
-       private SyncAPIDBTable syncAPITable = null;
-
-       private ThreadLoadDataMaker loadManager;
-       private ThreadThreadDataMaker tManager;
-       private ThreadSyncDataMaker sManager;
-
-       private ThreadDataManager() {
-               threadDataTable = new ThreadDataDBTable();
-               threadEventTable = new ThreadEventDBTable();
-               threadAPITable = new ThreadAPIDBTable();
-
-               syncDataTable = new SyncDataDBTable();
-               syncEventTable = new SyncEventDBTable();
-               syncAPITable = new SyncAPIDBTable();
-
-               loadManager = new ThreadLoadDataMaker();
-               tManager = new ThreadThreadDataMaker();
-               sManager = new ThreadSyncDataMaker();
-       }
-
-       public static ThreadDataManager getInstance() {
-               if (null == instance) {
-                       instance = new ThreadDataManager();
-               }
-               return instance;
-       }
-
-       public ThreadLoadDataMaker getThreadLoadDataMamker() {
-               return loadManager;
-       }
-
-       public ThreadThreadDataMaker getThreadDataMaker() {
-               return tManager;
-       }
-
-       public ThreadSyncDataMaker getSyncDataMaker() {
-               return sManager;
-       }
-
-       public ThreadEventDBTable getThreadEventDBTable() {
-               return threadEventTable;
-       }
-
-       public ThreadAPIDBTable getThreadAPIDBTable() {
-               return threadAPITable;
-       }
-
-       public SyncDataDBTable getSyncDataDBTable() {
-               return syncDataTable;
-       }
-
-       public SyncEventDBTable getSyncEventDBTable() {
-               return syncEventTable;
-       }
-
-       public SyncAPIDBTable getSyncAPIDBTable() {
-               return syncAPITable;
-       }
-
-       public void clear() {
-               tManager.clear();
-               sManager.clear();
-       }
-
-       public void saveData(Map<String, String> dataMap) {
-               threadDataTable.inserthreadPageThreadData(tManager.getChartRowData());
-               sManager.insertNoBlockEndTimeSyncEvent();
-               sManager.getNotInsertSyncEventList().clear();
-       }
-
-       public void openData(Map<String, String> dataMap) {
-               selectThreadDataWhenOpen();
-               selectSyncDataWhenOpen();
-       }
-
-       @Override
-       protected void onThreadStop() {
-               tManager.insertRemainingCallEvent();
-       }
-
-       private void checkHeapMemory() {
-               double useHeapMemory = 0;
-               useHeapMemory += tManager.getChartRowData().size() * THREAD_DATA_MEMORY_KB;
-               useHeapMemory += sManager.getChartRowData().size() * SYNC_DATA_MEMORY_KB;
-               int chartItemCount = tManager.getChartRowData().size() + sManager.getChartRowData().size();
-               useHeapMemory += CHART_TYPE_HEAP_MEMORY_KB * chartItemCount;
-               if ((MAX_THREAD_HEAP_MEMORY_KB < useHeapMemory)) {
-                       DALimit.stopTraceAndOpenWarningDialog();
-               }
-       }
-
-       private void selectThreadDataWhenOpen() {
-               List<List<Object>> threadDatas = threadDataTable.getThreadDataFromDB();
-               int size = threadDatas.size();
-               for (int i = 0; i < size; i++) {
-                       List<Object> rowData = threadDatas.get(i);
-                       int id = (Integer) rowData.get(ThreadDataDBTable.COLUMN.THREADDATAID.index);
-                       int pid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.PID.index);
-                       int tid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.TID.index);
-                       byte threadType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.THREADTYPE.index);
-                       byte attrType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.ATTRIBUTETYPE.index);
-                       String attributeType = ThreadThreadDataMaker.getAttrTypeByTypeInt(attrType);
-                       long startTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.STARTTIME.index);
-                       long endTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.ENDTIME.index);
-                       int functionID = (Integer) rowData.get(ThreadDataDBTable.COLUMN.FUNCTIONID.index);
-                       String className = (String) rowData.get(ThreadDataDBTable.COLUMN.CLASSNAME.index);
-
-                       ThreadPageThreadData threadData = new ThreadPageThreadData(id, pid, tid, threadType,
-                                       attributeType, startTime, endTime, functionID, className);
-                       tManager.setChartRowData(threadData);
-               }
-       }
-
-       private void selectSyncDataWhenOpen() {
-               List<List<Object>> syncDatas = syncDataTable.getSyncDataFromDB();
-               int syncSize = syncDatas.size();
-               for (int i = 0; i < syncSize; i++) {
-                       ThreadPageSyncData syncData = makeSyncData(syncDatas.get(i));
-                       sManager.setChartRowData(syncData);
-               }
-       }
-
-       private ThreadPageSyncData makeSyncData(List<Object> rowData) {
-               ThreadPageSyncData syncData = null;
-               int id = (Integer) rowData.get(SyncDataDBTable.COLUMN.SYNCDATAID.index);
-               int pid = (Integer) rowData.get(SyncDataDBTable.COLUMN.PID.index);
-               int tid = (Integer) rowData.get(SyncDataDBTable.COLUMN.TID.index);
-               byte syncType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCTYPE.index);
-               long syncValue = (Long) rowData.get(SyncDataDBTable.COLUMN.SYNCVALUE.index);
-               byte attrType = (Byte) rowData.get(SyncDataDBTable.COLUMN.ATTRIBUTETYPE.index);
-               String attributeType = ThreadSyncDataMaker.getAttrTypeByTypeInt(attrType);
-               byte syncDataType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCDATATYPE.index);
-               int parentID = (Integer) rowData.get(SyncDataDBTable.COLUMN.PARENTID.index);
-               syncData = new ThreadPageSyncData(id, pid, tid, syncType, syncValue, attributeType,
-                               syncDataType, parentID);
-               return syncData;
-       }
-
-       @Override
-       protected void makeData(LogPackage pack) {
-               List<LogData> loadInputs = getLogsFromLogPackage(pack, DataChannelConstants.MSG_DATA_SYSTEM);
-               if (null != loadInputs) {
-                       loadManager.makeLoadData(loadInputs);
-               }
-               List<LogData> threadInputs = getLogsFromLogPackage(pack,
-                               DataChannelConstants.MSG_PROBE_THREAD);
-               if (null != threadInputs) {
-                       tManager.makeThreadData(threadInputs);
-                       checkHeapMemory();
-               }
-               List<LogData> syncInputs = getLogsFromLogPackage(pack, DataChannelConstants.MSG_PROBE_SYNC);
-               if (null != syncInputs) {
-                       sManager.makeSyncData(syncInputs);
-                       checkHeapMemory();
-               }
-       }
-
-       private List<LogData> getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) {
-               Logs logs = logPack.getLogs(logCenterConstants);
-               if (null == logs || logs.getRawLogs().size() == 0) {
-                       return null;
-               }
-               List<LogData> ret = logs.getLogs();
-               return ret;
-       }
-}
\ No newline at end of file
@@ -4,7 +4,6 @@
  * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  *
@@ -25,7 +24,7 @@
  * 
  */
 
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -34,132 +33,100 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.communicator.DACommunicator;
 import org.tizen.dynamicanalyzer.constant.CommonConstants;
 import org.tizen.dynamicanalyzer.database.DBColumn;
 import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
 import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-
-public class ThreadEventDBTable extends DBTable {
-       public static final String TABLENAME = "THREADEVENT";
-       private DBInserter dbInserter = null;
-
-       private static final String SELECT_COLUMN = COLUMN.THREADDATAID.name + CommonConstants.COMMA
-                       + COLUMN.EVENTTIME.name + CommonConstants.COMMA + COLUMN.TID.name
-                       + CommonConstants.COMMA + COLUMN.APITYPE.name + CommonConstants.COMMA
-                       + COLUMN.TOOLTIP.name + CommonConstants.COMMA + COLUMN.ERRORNO.name
-                       + CommonConstants.COMMA + COLUMN.EVENTTYPE.name + CommonConstants.COMMA
-                       + COLUMN.THREADTYPE.name + CommonConstants.COMMA + COLUMN.CALLERID.name;
-
-       public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from " + TABLENAME
-                       + "  where " + COLUMN.EVENTTIME.name + " BETWEEN %s and %s";
-
+import org.tizen.dynamicanalyzer.database.IResultSet;
+
+public class ThreadEventDBTable extends DBTable implements IResultSet {
+       public static final String TABLENAME="ThreadEvent";
+       
+       private static final String SELECT_COLUMN = 
+                       COLUMN.EVENTTIME.name + CommonConstants.COMMA +
+                       COLUMN.TID.name + CommonConstants.COMMA +
+                       COLUMN.APITYPE.name + CommonConstants.COMMA +
+                       COLUMN.TOOLTIP.name + CommonConstants.COMMA +
+                       COLUMN.ERRORNO.name + CommonConstants.COMMA +
+                       COLUMN.EVENTTYPE.name + CommonConstants.COMMA +
+                       COLUMN.THREADTYPE.name + CommonConstants.COMMA +
+                       COLUMN.CALLERID.name;
+       public static final String SELECT_QUERY = 
+                       "select " + SELECT_COLUMN + " from " + TABLENAME + 
+                       "  where " + COLUMN.THREADDATAID.name + " = %s ";
+       
        public enum COLUMN {
-               THREADDATAID(0, "ThreadDataID"), EVENTTIME(1, "EventTime"), TID(2, "TID"), APITYPE(3,
-                               "APIType"), TOOLTIP(4, "Tooltip"), ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER), EVENTTYPE(
-                               6, "EventType"), THREADTYPE(7, "ThreadType"), CALLERID(8, "CallerID");
-
+               THREADDATAID(0, "ThreadDataID"),
+               EVENTTIME(1, "EventTime"),
+               TID(2, "TID"),
+               APITYPE(3, "APIType"),
+               TOOLTIP(4, "Tooltip"),
+               ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER),
+               EVENTTYPE(6, "EventType"),
+               THREADTYPE(7, "ThreadType"),
+               CALLERID(8, "CallerID");
+               
                public final int index;
                public final String name;
-
+               
                COLUMN(int index, String name) {
                        this.index = index;
                        this.name = name;
                }
        }
-
+       
        @Override
        public String getTableName() {
                return TABLENAME;
        }
-
+       
        public ThreadEventDBTable() {
-               addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.EVENTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
                addColumn(new DBColumn(COLUMN.APITYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, DBConstants.VARCHAR,
-                               DALimit.TOOLTIP_LENGTH));
+               addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, 
+                               DBConstants.VARCHAR, DALimit.TOOLTIP_LENGTH));          
                addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.EVENTTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.CALLERID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+               addColumn(new DBColumn(COLUMN.CALLERID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));              
                setIndexColumn(COLUMN.THREADDATAID.index);
-               dbInserter = DBInsertManager.makeInserter(this);
        }
 
        public List<List<Object>> getThreadEventFromDB() {
                return selectAllColumnData(null);
        }
-
-       public void insertThreadEventData(List<ThreadPageThreadDataEvent> insertThreadEventList) {
-               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();
-               for (ThreadPageThreadDataEvent threadEvent : insertThreadEventList) {
-                       List<Object> insertRowData = new ArrayList<Object>();
-                       try {
-                               insertRowData.add(new Integer(threadEvent.getThreadDataID()));
-                               insertRowData.add(new Long(threadEvent.getTime()));
-                               insertRowData.add(new Integer(threadEvent.getTid()));
-                               Integer apiType = new Integer(threadEvent.getApiType());
-                               insertRowData.add(new Byte(apiType.byteValue()));
-                               insertRowData.add(new String(threadEvent.getTooltipContent()));
-                               insertRowData.add(new Long(threadEvent.getErrorNum()));
-                               Integer eventType = new Integer(threadEvent.getEventType());
-                               insertRowData.add(new Byte(eventType.byteValue()));
-                               insertRowData.add(new Integer(threadEvent.getThreadType()));
-                               insertRowData.add(new Integer(threadEvent.getCallerTid()));
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
-                       }
-                       insertData.add(insertRowData);
-               }
-               if (insertData.size() == 0) {
-                       return;
-               }
-               if (DACommunicator.isRunning()) {
-                       dbInserter.pushData(insertData);
-               } else {
-                       insertData(insertData);
-               }
-       }
-
+       
        @Override
        public boolean prepare(PreparedStatement prep, List<Object> rowData) {
                boolean isPrepared = true;
+               
                int columnsize = getColumnSize();
                if (columnsize != rowData.size()) {
                        isPrepared = false;
                } else {
                        try {
-                               prep.setInt(COLUMN.THREADDATAID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
-                               prep.setLong(COLUMN.EVENTTIME.index + 1,
-                                               (Long) (rowData.get(COLUMN.EVENTTIME.index)));
+                               prep.setInt(COLUMN.THREADDATAID.index + 1, (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
+                               prep.setLong(COLUMN.EVENTTIME.index + 1, (Long) (rowData.get(COLUMN.EVENTTIME.index)));                         
                                prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
                                prep.setByte(COLUMN.APITYPE.index + 1, (Byte) (rowData.get(COLUMN.APITYPE.index)));
                                String tooltipStr = clipString((String) (rowData.get(COLUMN.TOOLTIP.index)),
                                                DALimit.TOOLTIP_LENGTH, rowData.get(COLUMN.EVENTTIME.index).toString());
-                               prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);
+                               prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);                                                           
                                prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
-                               prep.setByte(COLUMN.EVENTTYPE.index + 1,
-                                               (Byte) (rowData.get(COLUMN.EVENTTYPE.index)));
-                               prep.setInt(COLUMN.THREADTYPE.index + 1,
-                                               (Integer) (rowData.get(COLUMN.THREADTYPE.index)));
-                               prep.setInt(COLUMN.CALLERID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.CALLERID.index)));
+                               prep.setByte(COLUMN.EVENTTYPE.index + 1, (Byte) (rowData.get(COLUMN.EVENTTYPE.index)));
+                               prep.setInt(COLUMN.THREADTYPE.index + 1, (Integer) (rowData.get(COLUMN.THREADTYPE.index)));
+                               prep.setInt(COLUMN.CALLERID.index + 1, (Integer) (rowData.get(COLUMN.CALLERID.index)));                         
                        } catch (SQLException e) {
                                e.printStackTrace();
                                isPrepared = false;
                        }
                }
+               
                return isPrepared;
        }
-
+       
        public List<Object> extractDataFromResultSet(ResultSet rs) {
                List<Object> row = new ArrayList<Object>();
                try {
@@ -176,7 +143,7 @@ public class ThreadEventDBTable extends DBTable {
                        e.printStackTrace();
                        return null;
                }
-
+               
                return row;
        }
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventInserter.java
new file mode 100644 (file)
index 0000000..33b0e7c
--- /dev/null
@@ -0,0 +1,136 @@
+/*\r
+ *  Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataEvent;\r
+// TODO: use DBInserter\r
+public class ThreadEventInserter implements Runnable {\r
+       private static LinkedBlockingQueue<ThreadPageThreadDataEvent> threadEventQueue = new LinkedBlockingQueue<ThreadPageThreadDataEvent>();\r
+\r
+       private static volatile Thread inserterThread = null;\r
+\r
+       public static void startThread() {\r
+               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                       synchronized (ThreadEventInserter.class) {\r
+                               if (inserterThread == null || !inserterThread.isAlive()) {\r
+                                       inserterThread = new Thread(null,\r
+                                                       new ThreadEventInserter());\r
+                                       inserterThread.start();\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void stopThread() {\r
+               if (inserterThread != null && inserterThread.isAlive()) {\r
+                       try {\r
+                               sendNotify();\r
+                               inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+                       } catch (InterruptedException e) {\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void pushThreadEvent(ThreadPageThreadDataEvent threadEvent) {\r
+               threadEventQueue.offer(threadEvent);\r
+       }\r
+\r
+       public static void clear() {\r
+               stopThread();\r
+       }\r
+\r
+       @Override\r
+       public void run() {\r
+               while (!AnalyzerManager.isExit()) {\r
+                       ThreadPageThreadDataEvent threadEvent = threadEventQueue.poll();\r
+\r
+                       if (threadEvent != null) {\r
+                               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();             \r
+                               List<Object> insertRowData = new ArrayList<Object>();\r
+                               try {\r
+                                       insertRowData.add(new Integer(threadEvent.getThreadDataID()));\r
+                                       insertRowData.add(new Long(threadEvent.getTime()));\r
+                                       insertRowData.add(new Integer(threadEvent.getTid()));\r
+                                       Integer apiType = new Integer(threadEvent.getApiType());\r
+                                       insertRowData.add(new Byte(apiType.byteValue()));\r
+                                       insertRowData.add(new String(threadEvent.getTooltipContent()));\r
+                                       insertRowData.add(new Long(threadEvent.getErrorNum()));\r
+                                       Integer eventType = new Integer(threadEvent.getEventType());\r
+                                       insertRowData.add(new Byte(eventType.byteValue()));\r
+                                       insertRowData.add(new Integer(threadEvent.getThreadType()));\r
+                                       Integer callerTid = -1;\r
+                                       if (threadEvent.getCallerTid() != null) {\r
+                                               callerTid = new Integer(threadEvent.getCallerTid());                                            \r
+                                       }\r
+                                       insertRowData.add(callerTid);\r
+                               } catch (ArrayIndexOutOfBoundsException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               insertData.add(insertRowData);\r
+                               if (insertData.size() > 0) {\r
+                                       ThreadChartManager.getInstance().getThreadEventDBTable().insertData(insertData);\r
+                               }\r
+                               // save ThreadAPI\r
+                               if (threadEvent.getEventType() == ThreadPageThreadDataEvent.TYPE_API) {\r
+                                       ArrayList<List<Object>> apiData = new ArrayList<List<Object>>();                \r
+                                       List<Object> apiRowData = new ArrayList<Object>();\r
+                                       ThreadData tData = (ThreadData) threadEvent.getContents();\r
+                                       try {\r
+                                               apiRowData.add(new Long(tData.getSeq()));\r
+                                               apiRowData.add(new Integer(threadEvent.getThreadDataID()));\r
+                                               apiRowData.add(new Long(tData.getTime()));\r
+                                               apiRowData.add(new Integer(tData.getApiId()));\r
+                                               apiRowData.add(new Integer(tData.getPid()));\r
+                                               apiRowData.add(new Integer(tData.getTid()));\r
+                                               apiRowData.add(new String(tData.getArgs()));\r
+                                               apiRowData.add(new String(tData.getReturn()));\r
+                                               apiRowData.add(new Long(tData.getErrno()));\r
+                                       } catch (ArrayIndexOutOfBoundsException e) {\r
+                                               e.printStackTrace();\r
+                                       }\r
+                                       apiData.add(apiRowData);\r
+                                       if (apiData.size() > 0) {\r
+                                               ThreadChartManager.getInstance().getThreadAPIDBTable().insertData(apiData);\r
+                                       }       \r
+                               }\r
+                       }\r
+               }                       \r
+       }\r
+\r
+       public static void sendNotify() {\r
+//             threadEventQueue.wake();\r
+       }\r
+}\r
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadLoadDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadLoadDataMaker.java
deleted file mode 100644 (file)
index 61ca23c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com> 
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-package org.tizen.dynamicanalyzer.ui.thread.data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.swap.model.data.ProcessProfileData;
-import org.tizen.dynamicanalyzer.swap.model.data.SystemData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadLoadDataMaker {
-
-       public void makeLoadData(List<LogData> loadInputs) {
-               int logSize = loadInputs.size();
-               for (int i = 0; i < logSize; i++) {
-                       parseLoad(loadInputs.get(i));
-               }
-       }
-
-       public void parseLoad(LogData input) {
-               if (null == input) {
-                       return;
-               }
-
-               if (!(input instanceof SystemData)) {
-                       return;
-               }
-
-               ProcessProfileData[] processDataList = ((SystemData) input).getProcessProfileDataList();
-               List<ThreadPageThreadDataEvent> insertThreadEventList = new ArrayList<ThreadPageThreadDataEvent>();
-               for (int i = 0; i < processDataList.length; i++) {
-                       String loads = processDataList[i].getThreadLoad();
-                       String[] temp = loads.split(",");
-                       String tid;
-                       for (int j = 0; j + 1 < temp.length; j += 2) {
-                               try {
-                                       tid = temp[j];
-                               } catch (NumberFormatException nfe) {
-                                       Logger.error("parseLoad - tid parsing");
-                                       break;
-                               }
-                               int load = (int) (Double.parseDouble(temp[j + 1]));
-                               long time = input.getTime();
-                               ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
-                                               ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, Integer.parseInt(tid),
-                                               String.valueOf(load) + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1, null);
-                               event.setThreadDataID(ThreadDataManager.getInstance().getThreadDataMaker()
-                                               .getThreadDataID(event.getTid()));
-                               insertThreadEventList.add(event);
-                       }
-               }
-               ThreadDataManager.getInstance().getThreadEventDBTable()
-                               .insertThreadEventData(insertThreadEventList);
-       }
-}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadSyncDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadSyncDataMaker.java
deleted file mode 100644 (file)
index 2df1243..0000000
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com> 
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-package org.tizen.dynamicanalyzer.ui.thread.data;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
-import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadSyncDataMaker {
-       private List<ThreadPageSyncData> chartRowData = new ArrayList<ThreadPageSyncData>();
-       private List<ThreadPageSyncDataEvent> noBlockEndTimeSyncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
-       private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
-       private List<ThreadPageSyncDataEvent> syncEventQueueOfThread = new ArrayList<ThreadPageSyncDataEvent>();
-       private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
-
-       public static final int PTHREAD_MUTEX_NORMAL = 0;
-       public static final int PTHREAD_MUTEX_RECURSIVE = 1;
-       public static final int PTHREAD_MUTEX_ERRORCHECK = 2;
-       public static final int PTHREAD_MUTEX_DEFAULT = 3;
-
-       public ThreadSyncDataMaker() {
-       }
-
-       public void makeSyncData(List<LogData> syncInputs) {
-               int logSize = syncInputs.size();
-               for (int i = 0; i < logSize; i++) {
-                       parseSync(syncInputs.get(i));
-               }
-               insertSyncData();
-       }
-
-       public void parseSync(LogData input) {
-               if (null == input || !(input instanceof SyncData)) {
-                       return;
-               }
-               SyncData syncData = (SyncData) input;
-               long time = syncData.getTime();
-               int tID = syncData.getTid();
-               int type = syncData.getSyncType();
-               int apiType = syncData.getApiType();
-               String apiName = syncData.getApiName();
-               String name = Long.toString(syncData.getSyncValue());
-               long errorNum = syncData.getErrno();
-               if (errorNum != 0) {
-                       SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(syncData);
-               }
-               ThreadPageSyncDataEvent event;
-               switch (type) {
-               case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
-               case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
-               case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
-                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tID, apiName, errorNum,
-                                       input);
-                       syncEventQueue.add(event);
-                       syncEventQueueOfThread.add(event);
-                       break;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
-                       if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
-                               syncAttrMap.put(syncData.getArgs(), PTHREAD_MUTEX_NORMAL);
-                       } else if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
-                               checkMutexAttrType(syncData.getArgs());
-                       } else {
-                               if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
-                                       checkMutexType(syncData.getArgs());
-                               }
-                               event = new ThreadPageSyncDataEvent(name, type, apiType, time, tID, apiName,
-                                               errorNum, input);
-                               syncEventQueue.add(event);
-                               syncEventQueueOfThread.add(event);
-                       }
-                       break;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
-                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tID, apiName, errorNum,
-                                       input);
-                       syncEventQueue.add(event);
-                       syncEventQueueOfThread.add(event);
-                       Logger.error("sync parse - type = " + type);
-                       break;
-               default:
-                       Logger.error("sync parse unknown - type = " + type);
-               }
-       }
-
-       public void insertSyncData() {
-               makeSyncDataOfThread();
-               makeSyncData();
-       }
-
-       private void makeSyncData() {
-               int size = syncEventQueue.size();
-               if (size == 0) {
-                       return;
-               }
-               List<ThreadPageSyncDataEvent> insertSyncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
-               List<ThreadPageSyncData> insertSyncDataQueue = new ArrayList<ThreadPageSyncData>();
-               ThreadPageSyncData parent;
-               ThreadPageSyncData data;
-               ThreadPageSyncDataEvent event;
-               for (int i = 0; i < size; i++) {
-                       event = syncEventQueue.get(0);
-                       String syncVal = event.getSyncVal();
-                       String pid = Integer.toString(event.getContents().getPid());
-                       parent = findParentData(syncVal);
-                       if (null == parent) {
-                               Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
-                               String syncAttrType;
-
-                               if (null != syncAttrTypeInt) {
-                                       syncAttrType = getAttrTypeByTypeInt(syncAttrTypeInt);
-                               } else {
-                                       syncAttrType = getAttrTypeString(event);
-                               }
-                               parent = new ThreadPageSyncData(event.getType(), syncVal, pid, event.getTid(),
-                                               syncAttrType, ThreadPageSyncData.SYNC_PARENT);
-                               chartRowData.add(parent);
-                               insertSyncDataQueue.add(parent);
-                       }
-                       event.setSyncDataID(parent.getSyncDataID());
-                       data = parent.findChildData(event.getTid());
-                       insertSyncEventQueue.add(event);
-                       if (null == data) {
-                               String attrType = parent.getAttrType();
-                               data = new ThreadPageSyncData(event.getType(), syncVal, pid, event.getTid(),
-                                               attrType, ThreadPageSyncData.SYNC_CHILD);
-                               data.setParentID(parent.getSyncDataID());
-                               parent.pushSync(data);
-                               chartRowData.add(data);
-                               insertSyncDataQueue.add(data);
-                       }
-                       try {
-                               ThreadPageSyncDataEvent cloneEvent = (ThreadPageSyncDataEvent) event.clone();
-                               cloneEvent.setSyncDataID(data.getSyncDataID());
-                               insertSyncEventQueue.add(cloneEvent);
-                       } catch (CloneNotSupportedException e) {
-                               e.printStackTrace();
-                               continue;
-                       } finally {
-                               syncEventQueue.remove(0);
-                       }
-               }
-               insertSyncEvent(insertSyncEventQueue);
-               ThreadDataManager.getInstance().getSyncDataDBTable().insertSyncData(insertSyncDataQueue);
-       }
-
-       public void makeSyncDataOfThread() {
-               int size = syncEventQueueOfThread.size();
-               if (size == 0) {
-                       return;
-               }
-               List<ThreadPageSyncDataEvent> insertSyncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
-               List<ThreadPageSyncData> insertSyncDataQueue = new ArrayList<ThreadPageSyncData>();
-               List<SyncData> insertSyncAPIQueue = new ArrayList<SyncData>();
-               ThreadPageThreadData data;
-               ThreadPageSyncDataEvent event;
-               ThreadPageSyncData sync;
-               for (int i = 0; i < size; i++) {
-                       event = syncEventQueueOfThread.get(0);
-                       String pid = Integer.toString(event.getContents().getPid());
-                       data = ThreadDataManager.getInstance().getThreadDataMaker()
-                                       .findParentDataOfThread(event.getTid());
-                       if (null != data) {
-                               String syncVal = event.getSyncVal();
-                               sync = data.findSyncData(syncVal);
-                               if (null == sync) {
-                                       Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
-                                       String syncAttrType;
-                                       if (null != syncAttrTypeInt) {
-                                               syncAttrType = ThreadSyncDataMaker.getAttrTypeByTypeInt(syncAttrTypeInt);
-                                       } else {
-                                               syncAttrType = ThreadSyncDataMaker.getAttrTypeString(event);
-                                       }
-                                       sync = new ThreadPageSyncData(event.getType(), syncVal, pid, event.getTid(),
-                                                       syncAttrType, ThreadPageSyncData.THREAD_CHILD);
-                                       sync.setParentID(data.getThreadDataID());
-                                       chartRowData.add(sync);
-                                       data.pushSync(sync);
-                                       insertSyncDataQueue.add(sync);
-                               }
-                               event.setSyncDataID(sync.getSyncDataID());
-                               insertSyncEventQueue.add(event);
-                               if (ThreadPageSyncData.isSyncApi(event.getApiType())) {
-                                       insertSyncAPIQueue.add((SyncData) event.getContents());
-                               }
-                       }
-                       syncEventQueueOfThread.remove(0);
-               }
-               insertSyncEvent(insertSyncEventQueue);
-               ThreadDataManager.getInstance().getSyncDataDBTable().insertSyncData(insertSyncDataQueue);
-               ThreadDataManager.getInstance().getSyncAPIDBTable().insertSyncAPIData(insertSyncAPIQueue);
-       }
-
-       private ThreadPageSyncData findParentData(String name) {
-               int size = chartRowData.size();
-               ThreadPageSyncData ret;
-               for (int i = 0; i < size; i++) {
-                       ret = chartRowData.get(i);
-                       if (ret.getKey().equals(name)
-                                       && ret.getSyncDataType() == ThreadPageSyncData.SYNC_PARENT) {
-                               return ret;
-                       }
-               }
-               return null;
-       }
-
-       public static String getAttrTypeByTypeInt(int typeInt) {
-               if (typeInt == PTHREAD_MUTEX_NORMAL) {
-                       return ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL;
-               } else if (typeInt == PTHREAD_MUTEX_RECURSIVE) {
-                       return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
-               } else if (typeInt == PTHREAD_MUTEX_ERRORCHECK) {
-                       return ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK;
-               } else if (typeInt == PTHREAD_MUTEX_DEFAULT) { // for open trace
-                       return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
-               } else {
-                       return CommonConstants.EMPTY;
-               }
-       }
-
-       public static String getAttrTypeString(ThreadPageSyncDataEvent event) {
-               int type = event.getType();
-               if (type == LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX) {
-                       return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
-               } else if (type == LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX) {
-                       return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
-               }
-               return CommonConstants.EMPTY;
-       }
-
-       private void checkMutexAttrType(String input) {
-               String[] temp = input.split(",");
-               if (temp.length != 2) {
-                       return;
-               }
-               String obj = temp[0];
-               String type = temp[1].trim();
-               if (null != syncAttrMap.get(obj)) {
-                       syncAttrMap.put(obj, Integer.valueOf(type));
-               }
-       }
-
-       private void checkMutexType(String input) {
-               String[] temp = input.split(",");
-               if (temp.length != 2) {
-                       return;
-               }
-               String obj = temp[0];
-               String attrObj = temp[1].trim();
-               Integer attrType = syncAttrMap.get(attrObj);
-               if (attrType != null) {
-                       syncAttrMap.put(obj, attrType);
-               }
-       }
-
-       public void insertNoBlockEndTimeSyncEvent() {
-               ThreadDataManager.getInstance().getSyncEventDBTable()
-                               .insertSyncEventData(noBlockEndTimeSyncEventQueue);
-       }
-
-       private void insertSyncEvent(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
-               makeBlockEndTime(insertSyncEventQueue);
-               ThreadDataManager.getInstance().getSyncEventDBTable()
-                               .insertSyncEventData(insertSyncEventQueue);
-       }
-
-       private void makeBlockEndTime(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
-               setBlockEndTimeOfInsertList(insertSyncEventQueue);
-               updateNoBlockEndTimeList(insertSyncEventQueue);
-               addInsertListFromNoBlockEndTimeList(insertSyncEventQueue);
-       }
-
-       private void setBlockEndTimeOfInsertList(List<ThreadPageSyncDataEvent> list) {
-               setBlockEndTime(list, list);
-               setBlockEndTime(noBlockEndTimeSyncEventQueue, list);
-       }
-
-       private void setBlockEndTimeOfNoBlockEndTimeList(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
-               for (ThreadPageSyncDataEvent event : insertSyncEventQueue) {
-                       updateBlockEndTimeOfNotReleaseSyncEventQueue(event);
-               }
-       }
-
-       private void setBlockEndTime(List<ThreadPageSyncDataEvent> targetList,
-                       List<ThreadPageSyncDataEvent> refList) {
-               sortListByTime(targetList);
-               for (ThreadPageSyncDataEvent targerEvent : targetList) {
-                       setBlockEndTime(targerEvent, refList);
-               }
-       }
-
-       private void updateBlockEndTimeOfNotReleaseSyncEventQueue(ThreadPageSyncDataEvent event) {
-               setBlockEndTime(event, noBlockEndTimeSyncEventQueue);
-       }
-
-       private void setBlockEndTime(ThreadPageSyncDataEvent targetEvent,
-                       List<ThreadPageSyncDataEvent> refList) {
-               for (ThreadPageSyncDataEvent refEvent : refList) {
-                       if (targetEvent.equals(refEvent)
-                                       || targetEvent.getSyncDataID() != refEvent.getSyncDataID()
-                                       || targetEvent.getBlockEndTime() != -1
-                                       || targetEvent.getTime() >= refEvent.getTime()
-                                       || !isMappingBlockTimeLog(targetEvent.getApiType(), refEvent.getApiType())
-                                       || targetEvent.getErrorNum() != 0) {
-                               continue;
-                       }
-                       targetEvent.setBlockEndTime(refEvent.getTime());
-                       return;
-               }
-       }
-
-       private void sortListByTime(List<ThreadPageSyncDataEvent> list) {
-               Comparator<ThreadPageSyncDataEvent> comparator = new Comparator<ThreadPageSyncDataEvent>() {
-                       @Override
-                       public int compare(ThreadPageSyncDataEvent arg0, ThreadPageSyncDataEvent arg1) {
-                               if (arg0.getTime() > arg1.getTime()) {
-                                       return 1;
-                               } else if (arg0.getTime() < arg1.getTime()) {
-                                       return -1;
-                               } else {
-                                       return 0;
-                               }
-                       }
-               };
-               Collections.sort(list, comparator);
-       }
-
-       private void updateNoBlockEndTimeList(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
-               List<ThreadPageSyncDataEvent> removeEveneList = new ArrayList<ThreadPageSyncDataEvent>();
-               int size = insertSyncEventQueue.size();
-               for (int i = 0; i < size; i++) {
-                       ThreadPageSyncDataEvent event = insertSyncEventQueue.get(i);
-                       if (event.getBlockEndTime() == -1) {
-                               try {
-                                       removeEveneList.add(event);
-                                       noBlockEndTimeSyncEventQueue.add(event.clone());
-                               } catch (CloneNotSupportedException e) {
-                                       e.printStackTrace();
-                               }
-                       }
-               }
-               insertSyncEventQueue.removeAll(removeEveneList);
-               setBlockEndTimeOfNoBlockEndTimeList(insertSyncEventQueue);
-       }
-
-       private void addInsertListFromNoBlockEndTimeList(
-                       List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
-               List<ThreadPageSyncDataEvent> removeEveneList = new ArrayList<ThreadPageSyncDataEvent>();
-               int size = noBlockEndTimeSyncEventQueue.size();
-               for (int i = 0; i < size; i++) {
-                       ThreadPageSyncDataEvent event = noBlockEndTimeSyncEventQueue.get(i);
-                       if (event.getBlockEndTime() != -1 || isRequireOnlyEventTimeLog(event.getApiType())) {
-                               try {
-                                       removeEveneList.add(event);
-                                       insertSyncEventQueue.add(event.clone());
-                               } catch (CloneNotSupportedException e) {
-                                       e.printStackTrace();
-                               }
-                       }
-               }
-               noBlockEndTimeSyncEventQueue.removeAll(removeEveneList);
-       }
-
-       private boolean isRequireOnlyEventTimeLog(int apiType) {
-               if (apiType == LogCenterConstants.SYNC_API_TYPE_NEW
-                               || apiType == LogCenterConstants.SYNC_API_TYPE_NOTIFY
-                               || apiType == LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL
-                               || apiType == LogCenterConstants.SYNC_API_TYPE_OTHER) {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       private boolean isMappingBlockTimeLog(int targetType, int refAPIType) {
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END) {
-                       return true;
-               }
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_RELEASE) {
-                       return true;
-               }
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_RELEASE
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START) {
-                       return true;
-               }
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END) {
-                       return true;
-               }
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_RELEASE) {
-                       return true;
-               }
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_RELEASE
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START) {
-                       return true;
-               }
-               if (targetType == LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE
-                               && refAPIType == LogCenterConstants.SYNC_API_TYPE_RELEASE) {
-                       return true;
-               }
-               return false;
-       }
-
-       public void setChartRowData(ThreadPageSyncData data) {
-               chartRowData.add(data);
-       }
-
-       public List<ThreadPageSyncData> getChartRowData() {
-               List<ThreadPageSyncData> returnList = new ArrayList<ThreadPageSyncData>();
-               for(ThreadPageSyncData data : chartRowData){
-                       returnList.add(data);
-               }
-               return returnList;
-       }
-
-       public List<ThreadPageSyncDataEvent> getNotInsertSyncEventList() {
-               return noBlockEndTimeSyncEventQueue;
-       }
-
-       public void clear() {
-               noBlockEndTimeSyncEventQueue.clear();
-               chartRowData.clear();
-               syncEventQueue.clear();
-               syncEventQueueOfThread.clear();
-               syncAttrMap.clear();
-               ThreadPageSyncData.clear(); // reset internal seq number
-       }
-
-}
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadThreadDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadThreadDataMaker.java
deleted file mode 100644 (file)
index 018d5b2..0000000
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com> 
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-package org.tizen.dynamicanalyzer.ui.thread.data;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.common.SymbolManager;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;
-import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
-import org.tizen.dynamicanalyzer.ui.summary.warning.WarningCase;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadThreadDataMaker {
-       private List<ThreadPageThreadDataEvent> eventQueue = new ArrayList<ThreadPageThreadDataEvent>();
-       private HashMap<String, Integer> joinableThreadMap = new HashMap<String, Integer>();
-       private List<ThreadPageThreadData> chartRowData = new ArrayList<ThreadPageThreadData>();
-       private HashMap<String, Long> threadFuncMap = new HashMap<String, Long>();
-       private HashMap<String, Integer> threadAttrMap = new HashMap<String, Integer>();
-       private List<ThreadPageThreadDataEvent> callEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
-
-       public static final int PTHREAD_CREATE_JOINABLE = 0;
-       public static final int PTHREAD_CREATE_DETACHED = 1;
-
-       public void makeThreadData(List<LogData> threadInputs) {
-               int logSize = threadInputs.size();
-               for (int i = 0; i < logSize; i++) {
-                       parseAPI(threadInputs.get(i));
-               }
-               int size = eventQueue.size();
-               if (size == 0) {
-                       return;
-               }
-
-               List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
-               for (ThreadPageThreadDataEvent event : eventQueue) {
-                       if (true == checkPairEvent(event)) {
-                               event.setThreadDataID(getThreadDataID(event.getTid()));
-                               insertThreadEvent.add(event);
-                       }
-               }
-
-               eventQueue.removeAll(insertThreadEvent);
-               ThreadDataManager.getInstance().getThreadEventDBTable()
-                               .insertThreadEventData(insertThreadEvent);
-               ThreadDataManager.getInstance().getThreadAPIDBTable()
-                               .insertThreadAPIData(insertThreadEvent);
-       }
-
-       public void parseAPI(LogData input) {
-               if (null == input) {
-                       return;
-               }
-               if (!(input instanceof ThreadData)) {
-                       return;
-               }
-               ThreadData log = (ThreadData) input;
-               int threadType = log.getThreadType();
-               switch (threadType) {
-               case LogCenterConstants.THREAD_TYPE_PTHREAD:
-                       parsePthread(log);
-                       break;
-               case LogCenterConstants.THREAD_TYPE_TIZEN:
-                       // parseOSP(log);
-                       break;
-               default:
-                       Logger.error("thread page err: unknown thread type");
-               }
-       }
-
-       private void parsePthread(ThreadData input) {
-               long time = input.getTime();
-               String pid = Integer.toString(input.getPid());
-               int apiType = input.getApiType();
-               String apiName = input.getApiName();
-               long errorNum = input.getErrno();
-               ThreadPageThreadDataEvent event;
-               int tID = input.getTid();
-               String pthreadId = Long.toString(input.getPThreadId());
-               if (errorNum != 0) {
-                       SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
-               }
-               switch (apiType) {
-               case LogCenterConstants.THREAD_API_TYPE_NEW:
-               case LogCenterConstants.THREAD_API_TYPE_STOP:
-               case LogCenterConstants.THREAD_API_TYPE_EXIT:
-               case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
-               case LogCenterConstants.THREAD_API_TYPE_OTHER:
-                       if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_INIT)) {
-                               threadAttrMap.put(input.getArgs(), PTHREAD_CREATE_JOINABLE);
-                       } else if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_SETDETACHSTATE)) {
-                               checkThreadAttrType(input.getArgs());
-                       }
-                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
-                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID, apiName, errorNum,
-                                       input);
-                       eventQueue.add(event);
-                       break;
-               case LogCenterConstants.THREAD_API_TYPE_START:
-                       if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_CREATE)) {
-                               checkThreadType(input.getArgs(), pthreadId);
-                               checkThreadFunc(input.getArgs(), pthreadId);
-                       }
-                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
-                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID, apiName, errorNum,
-                                       input);
-                       event.setCallID(pthreadId);
-                       callEventQueue.add(event);
-                       break;
-               case LogCenterConstants.THREAD_API_TYPE_WAIT_END: {
-                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
-                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID, apiName, errorNum,
-                                       input);
-                       eventQueue.add(event);
-                       Integer joninTID = joinableThreadMap.get(pthreadId);
-                       if (null != joninTID
-                                       && input.getApiName().equals(ThreadPageLabels.THREAD_API_PTHREAD_JOIN)) {
-                               SummaryDataManager
-                                               .getInstance()
-                                               .getWarningDataMaker()
-                                               .removeData(event.getContents(),
-                                                               ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(pthreadId),
-                                                               WarningCase.JOINABLE_LEAK.getType());
-                               joinableThreadMap.remove(pthreadId);
-                       }
-               }
-                       break;
-               case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP: {
-                       threadAttrMap.remove(pthreadId);
-                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
-                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID,
-                                       ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
-                       event.setCallID(pthreadId);
-                       Integer joninTID = joinableThreadMap.get(pthreadId);
-                       if (null != joninTID && joninTID == tID) {
-                               SummaryDataManager
-                                               .getInstance()
-                                               .getWarningDataMaker()
-                                               .add(input, ThreadPageLabels.THREAD_CHART_NAME_TID + tID,
-                                                               WarningCase.JOINABLE_LEAK.getType());
-                       }
-                       callEventQueue.add(event);
-                       setEndTime(tID, time);
-               }
-                       break;
-               case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
-                       Integer threadAttrTypeInt = threadAttrMap.get(pthreadId);
-                       String threadAttrType;
-                       int funcID;
-                       if (null != threadAttrTypeInt) {
-                               threadAttrType = getAttrTypeByTypeInt(threadAttrTypeInt);
-                       } else {
-                               threadAttrType = ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
-                       }
-                       if (threadAttrType == ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE) {
-                               joinableThreadMap.put(pthreadId, tID);
-                       }
-
-                       funcID = SymbolManager.getFuncId(null, threadFuncMap.get(pthreadId), input.getPid(),
-                                       input.getTime());
-                       ThreadPageThreadData data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_PTHREAD,
-                                       pid, tID, threadAttrType, funcID);
-                       data.setStartTime(time);
-                       chartRowData.add(data);
-                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
-                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID,
-                                       ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
-                       eventQueue.add(event);
-
-                       List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
-                       for (int i = 0; i < callEventQueue.size(); i++) {
-                               ThreadPageThreadDataEvent callEvent = callEventQueue.get(i);
-                               if (callEvent.getCallID().equals(pthreadId)
-                                               && callEvent.getApiType() == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
-                                       callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
-                                       insertThreadEvent.add(callEvent);
-                               }
-                       }
-                       callEventQueue.removeAll(insertThreadEvent);
-                       ThreadDataManager.getInstance().getThreadEventDBTable()
-                                       .insertThreadEventData(insertThreadEvent);
-                       ThreadDataManager.getInstance().getThreadAPIDBTable()
-                                       .insertThreadAPIData(insertThreadEvent);
-
-                       break;
-               default:
-                       Logger.error("thread page err: unknown thread api type");
-               }
-       }
-
-       public void insertRemainingCallEvent() {
-               List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
-               for (int i = 0; i < callEventQueue.size(); i++) {
-                       ThreadPageThreadDataEvent callEvent = callEventQueue.get(i);
-                       callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
-                       insertThreadEvent.add(callEvent);
-               }
-               ThreadDataManager.getInstance().getThreadEventDBTable()
-                               .insertThreadEventData(insertThreadEvent);
-               ThreadDataManager.getInstance().getThreadAPIDBTable()
-                               .insertThreadAPIData(insertThreadEvent);
-               callEventQueue.clear();
-       }
-
-       private boolean checkPairEvent(ThreadPageThreadDataEvent event) {
-               if (event.getEventType() != ThreadPageThreadDataEvent.TYPE_EVENT) {
-                       return true;
-               }
-
-               int apiType = event.getApiType();
-               int threadType = event.getThreadType();
-               ThreadData tData = (ThreadData) event.getContents();
-               if (LogCenterConstants.THREAD_API_TYPE_INTERNAL_START == apiType) {
-                       int callEventQueueSize = callEventQueue.size();
-                       ThreadPageThreadDataEvent callEvent;
-                       for (int i = 0; i < callEventQueueSize; i++) {
-                               callEvent = callEventQueue.get(i);
-                               if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
-                                       continue;
-                               } else if (callEvent.getThreadType() != threadType) {
-                                       continue;
-                               } else {
-                                       if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
-                                               String callerTizenID = callEvent.getCallID();
-                                               String eventTizenID = Long.toString(tData.getOspThreadId());
-                                               if (eventTizenID.equals(callerTizenID)) {
-                                                       event.setCallerTid(callEvent.getTid());
-                                                       callEventQueue.remove(i);
-                                                       return true;
-                                               }
-                                       } else {
-                                               String callerPthreadID = callEvent.getCallID();
-                                               String eventPthreadID = Long.toString(tData.getPThreadId());
-                                               if (eventPthreadID.equals(callerPthreadID)) {
-                                                       event.setCallerTid(callEvent.getTid());
-                                                       callEventQueue.remove(i);
-
-                                                       callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
-
-                                                       List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
-                                                       insertThreadEvent.add(callEvent);
-                                                       ThreadDataManager.getInstance().getThreadEventDBTable()
-                                                                       .insertThreadEventData(insertThreadEvent);
-                                                       ThreadDataManager.getInstance().getThreadAPIDBTable()
-                                                                       .insertThreadAPIData(insertThreadEvent);
-
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       }
-                       return false;
-               } else if (LogCenterConstants.THREAD_API_TYPE_WAIT_END == apiType) {
-                       if (!event.isJoinAPI()) {
-                               return true;
-                       }
-
-                       int callEventQueueSize = callEventQueue.size();
-                       ThreadPageThreadDataEvent callEvent;
-                       for (int i = 0; i < callEventQueueSize; i++) {
-                               callEvent = callEventQueue.get(i);
-                               if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
-                                       continue;
-                               } else if (callEvent.getThreadType() != threadType) {
-                                       continue;
-                               } else {
-                                       if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
-                                               String callerTizenID = callEvent.getCallID();
-                                               String eventTizenID = Long.toString(tData.getOspThreadId());
-                                               if (eventTizenID.equals(callerTizenID)) {
-                                                       event.setCallerTid(callEvent.getTid());
-                                                       callEvent.setCallerTid(event.getTid());
-                                                       // join, delete warning
-                                                       SummaryDataManager
-                                                                       .getInstance()
-                                                                       .getWarningDataMaker()
-                                                                       .removeData(
-                                                                                       event.getContents(),
-                                                                                       ThreadPageLabels.THREAD_CHART_NAME_TID
-                                                                                                       + callEvent.getTid(),
-                                                                                       WarningCase.JOINABLE_LEAK.getType());
-                                                       callEventQueue.remove(i);
-                                                       return true;
-                                               }
-                                       } else {
-                                               String callerPthreadID = callEvent.getCallID();
-                                               String eventPthreadID = Long.toString(tData.getPThreadId());
-                                               if (eventPthreadID.equals(callerPthreadID)) {
-                                                       event.setCallerTid(callEvent.getTid());
-                                                       callEvent.setCallerTid(event.getTid());
-                                                       callEventQueue.remove(i);
-                                                       callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
-
-                                                       List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
-                                                       insertThreadEvent.add(callEvent);
-                                                       ThreadDataManager.getInstance().getThreadEventDBTable()
-                                                                       .insertThreadEventData(insertThreadEvent);
-                                                       ThreadDataManager.getInstance().getThreadAPIDBTable()
-                                                                       .insertThreadAPIData(insertThreadEvent);
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       }
-                       return false;
-               } else {
-                       return true;
-               }
-       }
-
-       private int findCallerTid(String id) {
-               int callEventQueueSize = callEventQueue.size();
-               ThreadPageThreadDataEvent callEvent;
-               for (int i = 0; i < callEventQueueSize; i++) {
-                       callEvent = callEventQueue.get(i);
-                       if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
-                               continue;
-                       }
-                       String callerTID = callEvent.getCallID();
-
-                       if (callerTID != null && callerTID.equals(id)) {
-                               return callEvent.getTid();
-                       }
-               }
-               return -1;
-       }
-
-       public void setChartRowData(ThreadPageThreadData data) {
-               chartRowData.add(data);
-       }
-
-       public List<ThreadPageThreadData> getChartRowData() {
-               List<ThreadPageThreadData> returnList = new ArrayList<ThreadPageThreadData>();
-               for (ThreadPageThreadData data : chartRowData) {
-                       returnList.add(data);
-               }
-               return returnList;
-       }
-
-       private void setEndTime(int tID, long endTime) {
-               for (ThreadPageThreadData threadData : chartRowData) {
-                       if (threadData.getTid() == tID) {
-                               threadData.setEndTime(endTime);
-                       }
-               }
-       }
-
-       public int getThreadDataID(int tID) {
-               for (ThreadPageThreadData threadData : chartRowData) {
-                       if (threadData.getTid() == tID) {
-                               return threadData.getThreadDataID();
-                       }
-               }
-               return 0;
-       }
-
-       public void createMainThreadItem(int tid) {
-               int funcID = Global.getFunctionID("main");
-               ThreadPageThreadData mainData = new ThreadPageThreadData(ThreadPageThreadData.TYPE_MAIN,
-                               Integer.toString(tid), tid, CommonConstants.EMPTY, funcID);
-               chartRowData.add(mainData);
-       }
-
-       public static String getAttrTypeByTypeInt(int typeInt) {
-               if (typeInt == PTHREAD_CREATE_JOINABLE) {
-                       return ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
-               } else if (typeInt == PTHREAD_CREATE_DETACHED) {
-                       return ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED;
-               } else {
-                       return CommonConstants.EMPTY;
-               }
-       }
-
-       private void checkThreadAttrType(String input) {
-               String[] temp = input.split(",");
-               if (temp.length != 2) {
-                       return;
-               }
-               String obj = temp[0];
-               String type = temp[1].trim();
-               if (null != threadAttrMap.get(obj)) {
-                       threadAttrMap.put(obj, Integer.valueOf(type));
-               }
-       }
-
-       private void checkThreadType(String args, String pthreadId) {
-               String[] temp = args.split(",");
-               if (temp.length != 4) {
-                       return;
-               }
-               String attrObj = temp[1].trim();
-
-               Integer attrType = threadAttrMap.get(attrObj);
-               if (attrType != null) {
-                       threadAttrMap.put(pthreadId, attrType);
-               }
-       }
-
-       private void checkThreadFunc(String args, String pthreadId) {
-               String[] temp = args.split(",");
-               if (temp.length != 4) {
-                       return;
-               }
-               // 3rd argument is function address
-               String strFuncAddr = temp[2].trim();
-               Long funcAddr = Long.decode(strFuncAddr);
-               threadFuncMap.put(pthreadId, funcAddr);
-       }
-
-       public ThreadPageThreadData findParentDataOfThread(int tID) {
-               for (ThreadPageThreadData threadData : chartRowData) {
-                       if (threadData.getTid() == tID) {
-                               return threadData;
-                       }
-               }
-               return null;
-       }
-
-       public void clear() {
-               callEventQueue.clear();
-               eventQueue.clear();
-               joinableThreadMap.clear();
-               chartRowData.clear();
-               threadFuncMap.clear();
-               threadAttrMap.clear();
-               ThreadPageThreadData.clear(); // reset internal seq number
-       }
-
-       /*
-        * private void parseOSP(ThreadData input) { long time = input.getTime();
-        * String pid = Integer.toString(input.getPid()); int tID = input.getTid();
-        * String tid = Integer.toString(input.getTid()); int apiType =
-        * input.getApiType(); String apiName = input.getApiName(); String callID =
-        * Long.toString(input.getOspThreadId()); String className = null;
-        * ThreadPageThreadData data; ThreadPageThreadDataEvent event; long errorNum
-        * = input.getErrno();
-        * 
-        * if (errorNum != 0) {
-        * SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
-        * }
-        * 
-        * switch (apiType) { case LogCenterConstants.THREAD_API_TYPE_NEW: case
-        * LogCenterConstants.THREAD_API_TYPE_STOP: case
-        * LogCenterConstants.THREAD_API_TYPE_EXIT: case
-        * LogCenterConstants.THREAD_API_TYPE_WAIT_START: case
-        * LogCenterConstants.THREAD_API_TYPE_OTHER: event = new
-        * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
-        * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID, apiName,
-        * errorNum, input); pushEvent(event); break; case
-        * LogCenterConstants.THREAD_API_TYPE_START: event = new
-        * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
-        * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID, apiName,
-        * errorNum, input);
-        * 
-        * event.setCallID(callID); data = findCallQueue(callID); if (null != data)
-        * { data.setThreadClassName(input.getClassName()); chartRowData.add(data);
-        * } pushEvent(event); pushCallEvent(event); break; case
-        * LogCenterConstants.THREAD_API_TYPE_WAIT_END: if
-        * (input.getApiName().equals(ThreadPageLabels.THREAD_API_TIZEN_JOIN)) {
-        * event = new
-        * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
-        * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID, apiName,
-        * errorNum, input); pushEvent(event); // join, delete warning //
-        * AnalyzerManager.getWarningChecker().removeData( //
-        * ThreadPageLabels.THREAD_CHART_NAME_TID // +
-        * findCallerTid(Long.toString(input // .getOspThreadId())), //
-        * WarningCase.JOINABLE_LEAK.getType()); SummaryDataManager .getInstance()
-        * .getWarningDataMaker() .removeData(event.getContents(),
-        * ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(callID),
-        * WarningCase.JOINABLE_LEAK.getType()); } // FIXME : do not shows sleep's
-        * wait end
-        * 
-        * break; case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP: event = new
-        * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
-        * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID,
-        * ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
-        * event.setCallID(Long.toString(input.getOspThreadId())); pushEvent(event);
-        * pushCallEvent(event); String joinableThread = joinableThreadMap.get(tID);
-        * if (null != joinableThread &&
-        * joinableThread.equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) { //
-        * warningData // WarningData wData = new WarningData( //
-        * WarningCase.JOINABLE_LEAK.getType(), // event.getContents(), //
-        * ThreadPageLabels.THREAD_CHART_NAME_TID + tid); //
-        * AnalyzerManager.getWarningChecker().getWarningData().add(wData);
-        * SummaryDataManager .getInstance() .getWarningDataMaker()
-        * .add(event.getContents(), ThreadPageLabels.THREAD_CHART_NAME_TID + tid,
-        * WarningCase.JOINABLE_LEAK.getType()); } break; case
-        * LogCenterConstants.THREAD_API_TYPE_INTERNAL_START: Integer
-        * threadAttrTypeInt = threadAttrMap.get(tID); String threadAttrType; if
-        * (null != threadAttrTypeInt) { threadAttrType =
-        * getAttrTypeByTypeInt(threadAttrTypeInt); } else { threadAttrType =
-        * ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE; } joinableThreadMap.put(tID,
-        * threadAttrType);
-        * 
-        * data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_TIZEN, pid,
-        * tID, ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE, -1); // TIZEN thread
-        * includes the internal thread if ((className = checkCalledThread(callID))
-        * != null) { data.setThreadClassName(className); } chartRowData.add(data);
-        * event = new
-        * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
-        * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID,
-        * ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
-        * pushEvent(event); break; default:
-        * Logger.error("thread page err: unknown thread api type"); } }
-        * 
-        * private ThreadPageThreadData findCallQueue(String callID) { int tid =
-        * findCallerTid(callID); int size; size = chartRowData.size();
-        * ThreadPageThreadData ret; for (int i = 0; i < size; i++) { ret =
-        * chartRowData.get(i); if (ret.getTid() == tid) { chartRowData.remove(i);
-        * return ret; } } return null; }
-        * 
-        * private String checkCalledThread(String callId) { if (null == callId) {
-        * return null; } int callEventQueueSize = callEventQueue.size();
-        * ThreadPageThreadDataEvent callEvent; for (int i = 0; i <
-        * callEventQueueSize; i++) { callEvent = callEventQueue.get(i); if
-        * (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
-        * continue; } if (callId.equals(callEvent.getCallID())) { ThreadData
-        * threadData = (ThreadData) callEvent.getContents(); return
-        * threadData.getClassName(); } } return null; }
-        */
-}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncDataDBTable.java
deleted file mode 100644 (file)
index bcba12f..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.db;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.DBColumn;
-import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
-import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadSyncDataMaker;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-
-public class SyncDataDBTable extends DBTable {
-       public static final String TABLENAME = "SYNCDATA";
-
-       public static final String QUERY_OPTION = "order by " + COLUMN.SYNCDATAID.name;
-
-       private DBInserter dbInserter = null;
-
-       private static final String SELECT_COLUMN = COLUMN.SYNCDATAID.name + CommonConstants.COMMA
-                       + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name + CommonConstants.COMMA
-                       + COLUMN.SYNCTYPE.name + CommonConstants.COMMA + COLUMN.SYNCVALUE.name
-                       + CommonConstants.COMMA + COLUMN.ATTRIBUTETYPE.name + CommonConstants.COMMA
-                       + COLUMN.SYNCDATATYPE.name + CommonConstants.COMMA + COLUMN.PARENTID.name;
-       public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from " + TABLENAME
-                       + "  order by " + COLUMN.SYNCDATAID.name;
-
-       public enum COLUMN {
-               SYNCDATAID(0, "SyncDataID"), PID(1, "PID"), TID(2, "TID"), SYNCTYPE(3, "SyncType"), SYNCVALUE(
-                               4, "SyncValue"), ATTRIBUTETYPE(5, "AttributeType"), SYNCDATATYPE(6, "SyncDataType"), PARENTID(
-                               7, "ParentId");
-
-               public final int index;
-               public final String name;
-
-               COLUMN(int index, String name) {
-                       this.index = index;
-                       this.name = name;
-               }
-       }
-
-       @Override
-       public String getTableName() {
-               return TABLENAME;
-       }
-
-       public SyncDataDBTable() {
-               addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.PRIMARY_KEY,
-                               DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.SYNCTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.SYNCDATATYPE.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.PARENTID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
-               dbInserter = DBInsertManager.makeInserter(this);
-       }
-
-       public List<List<Object>> getSyncDataFromDB() {
-               return selectAllColumnData(QUERY_OPTION);
-       }
-
-       public void insertSyncData(List<ThreadPageSyncData> insertSyncDataQueue) {
-               if (insertSyncDataQueue.size() == 0) {
-                       return;
-               }
-               ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();
-               for (ThreadPageSyncData syncData : insertSyncDataQueue) {
-                       List<Object> insertRowData = new ArrayList<Object>();
-                       try {
-                               insertRowData.add(new Integer(syncData.getSyncDataID()));
-                               insertRowData.add(new Integer(syncData.getPid()));
-                               insertRowData.add(new Integer(syncData.getTid()));
-                               Integer type = new Integer(syncData.getType());
-                               byte syncType = type.byteValue();
-                               insertRowData.add(new Byte(syncType));
-                               insertRowData.add(new Long(syncData.getKey()));
-                               String attrTypeStr = syncData.getAttrType();
-                               byte attrType = -1;
-                               if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL)) {
-                                       attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_NORMAL;
-                               } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE)) {
-                                       attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_RECURSIVE;
-                               } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK)) {
-                                       attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_ERRORCHECK;
-                               } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT)) {
-                                       attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_DEFAULT;
-                               } else {
-                                       attrType = -1;
-                               }
-                               insertRowData.add(new Byte(attrType));
-                               insertRowData.add(new Byte(syncData.getSyncDataType()));
-                               insertRowData.add(new Integer(syncData.getParentID()));
-                               insertData.add(insertRowData);
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
-                       }
-               }
-               if (insertData.size() > 0) {
-                       dbInserter.pushData(insertData);
-               }
-       }
-
-       @Override
-       public boolean prepare(PreparedStatement prep, List<Object> rowData) {
-               boolean isPrepared = true;
-               int columnsize = getColumnSize();
-               if (columnsize != rowData.size()) {
-                       isPrepared = false;
-               } else {
-                       try {
-                               prep.setInt(COLUMN.SYNCDATAID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
-                               prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
-                               prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
-                               prep.setByte(COLUMN.SYNCTYPE.index + 1, (Byte) (rowData.get(COLUMN.SYNCTYPE.index)));
-                               prep.setLong(COLUMN.SYNCVALUE.index + 1,
-                                               (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
-                               prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1,
-                                               (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
-                               prep.setByte(COLUMN.SYNCDATATYPE.index + 1,
-                                               (Byte) (rowData.get(COLUMN.SYNCDATATYPE.index)));
-                               prep.setInt(COLUMN.PARENTID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.PARENTID.index)));
-
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                               isPrepared = false;
-                       }
-               }
-               return isPrepared;
-       }
-
-       @Override
-       public List<Object> extractDataFromResultSet(ResultSet rs) {
-               List<Object> row = new ArrayList<Object>();
-               try {
-                       row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
-                       row.add(Integer.valueOf(rs.getInt(COLUMN.PID.index + 1)));
-                       row.add(Integer.valueOf(rs.getInt(COLUMN.TID.index + 1)));
-                       row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCTYPE.index + 1)));
-                       row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
-                       row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
-                       row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCDATATYPE.index + 1)));
-                       row.add(Integer.valueOf(rs.getInt(COLUMN.PARENTID.index + 1)));
-               } catch (SQLException e) {
-                       e.printStackTrace();
-                       return null;
-               }
-
-               return row;
-       }
-}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncEventDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncEventDBTable.java
deleted file mode 100644 (file)
index 5a4bc2f..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@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
- * 
- */
-
-package org.tizen.dynamicanalyzer.ui.thread.db;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.communicator.DACommunicator;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.DBColumn;
-import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
-import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-
-public class SyncEventDBTable extends DBTable {
-       public static final String TABLENAME = "SYNCEVENT";
-       private DBInserter dbInserter = null;
-
-       private static final String SELECT_COLUMN = COLUMN.API_SEQNUMBER.name + CommonConstants.COMMA
-                       + COLUMN.SYNCDATAID.name + CommonConstants.COMMA + COLUMN.EVENTTIME.name
-                       + CommonConstants.COMMA + COLUMN.APITYPE.name + CommonConstants.COMMA
-                       + COLUMN.TOOLTIP.name + CommonConstants.COMMA + COLUMN.ERRORNO.name
-                       + CommonConstants.COMMA + COLUMN.SYNCVALUE.name + CommonConstants.COMMA
-                       + COLUMN.RELEASETIME.name;
-
-       public static final String SELECT_QUERY = "select " + SELECT_COLUMN + 
-                       " from " + TABLENAME
-                       + " where ((" + COLUMN.APITYPE.name + " =  " + LogCenterConstants.SYNC_API_TYPE_NEW
-                       + " OR " + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_NOTIFY
-                       + " OR " + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL
-                       + " OR " + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_OTHER
-                       + " ) and " + COLUMN.EVENTTIME.name + " between %s and %s)" + 
-                       " OR " + " (("
-                       + COLUMN.APITYPE.name + " =  " + LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START + " OR "
-                       + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END + " OR "
-                       + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_RELEASE + " OR "
-                       + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE + " OR "
-                       + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START + " OR "
-                       + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END + ") AND ("
-                       + COLUMN.EVENTTIME.name + " >= %s AND " + COLUMN.EVENTTIME.name + " <= %s))";
-
-       public enum COLUMN {
-               API_SEQNUMBER(0, "APISEQNUMBER"), SYNCDATAID(1, "SyncDataID"), EVENTTIME(2, "EventTime"), APITYPE(
-                               3, "APIType"), TOOLTIP(4, "Tooltip"), ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER), SYNCVALUE(
-                               6, "SyncValue"), RELEASETIME(7, "ReleaseTime");
-
-               public final int index;
-               public final String name;
-
-               COLUMN(int index, String name) {
-                       this.index = index;
-                       this.name = name;
-               }
-       }
-
-       @Override
-       public String getTableName() {
-               return TABLENAME;
-       }
-
-       public SyncEventDBTable() {
-               addColumn(new DBColumn(COLUMN.API_SEQNUMBER.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_INT4));
-               addColumn(new DBColumn(COLUMN.EVENTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.APITYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
-               addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, DBConstants.VARCHAR,
-                               DALimit.TOOLTIP_LENGTH));
-               addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-               addColumn(new DBColumn(COLUMN.RELEASETIME.name, DBConstants.NOT_NULL,
-                               DBConstants.DBTYPE_LONG));
-               setIndexColumn(COLUMN.SYNCDATAID.index);
-
-               dbInserter = DBInsertManager.makeInserter(this);
-       }
-
-       public List<List<Object>> getSyncEventFromDB() {
-               return selectAllColumnData(null);
-       }
-
-       public List<List<Object>> getInsertDBData(ThreadPageSyncDataEvent syncEvent) {
-               List<List<Object>> insertData = new ArrayList<List<Object>>();
-               List<Object> insertRowData = new ArrayList<Object>();
-               try {
-                       insertRowData.add(new Long(syncEvent.getContents().getSeq()));
-                       insertRowData.add(new Integer(syncEvent.getSyncDataID()));
-                       insertRowData.add(new Long(syncEvent.getTime()));
-                       Integer apiType = new Integer(syncEvent.getApiType());
-                       insertRowData.add(new Byte(apiType.byteValue()));
-                       insertRowData.add(new String(syncEvent.getTooltipContent()));
-                       insertRowData.add(new Long(syncEvent.getErrorNum()));
-                       insertRowData.add(new Long(syncEvent.getSyncVal()));
-                       insertRowData.add(new Long(syncEvent.getBlockEndTime()));
-               } catch (ArrayIndexOutOfBoundsException e) {
-                       e.printStackTrace();
-               }
-               return insertData;
-       }
-
-       public void insertSyncEventData(List<ThreadPageSyncDataEvent> syncEventQueue) {
-               if (syncEventQueue.size() == 0) {
-                       return;
-               }
-               List<List<Object>> insertData = new ArrayList<List<Object>>();
-               for (ThreadPageSyncDataEvent syncEvent : syncEventQueue) {
-                       List<Object> insertRowData = new ArrayList<Object>();
-                       try {
-                               insertRowData.add(new Long(syncEvent.getContents().getSeq()));
-                               insertRowData.add(new Integer(syncEvent.getSyncDataID()));
-                               insertRowData.add(new Long(syncEvent.getTime()));
-                               Integer apiType = new Integer(syncEvent.getApiType());
-                               insertRowData.add(new Byte(apiType.byteValue()));
-                               insertRowData.add(new String(syncEvent.getTooltipContent()));
-                               insertRowData.add(new Long(syncEvent.getErrorNum()));
-                               insertRowData.add(new Long(syncEvent.getSyncVal()));
-                               insertRowData.add(new Long(syncEvent.getBlockEndTime()));
-                       } catch (ArrayIndexOutOfBoundsException e) {
-                               e.printStackTrace();
-                       }
-                       insertData.add(insertRowData);
-               }
-               if (DACommunicator.isRunning()) {
-                       dbInserter.pushData(insertData);
-               } else {
-                       insertData(insertData);
-               }
-       }
-
-       @Override
-       public boolean prepare(PreparedStatement prep, List<Object> rowData) {
-               boolean isPrepared = true;
-
-               int columnsize = getColumnSize();
-               if (columnsize != rowData.size()) {
-                       isPrepared = false;
-               } else {
-                       try {
-                               prep.setLong(COLUMN.API_SEQNUMBER.index + 1,
-                                               (Long) (rowData.get(COLUMN.API_SEQNUMBER.index)));
-                               prep.setInt(COLUMN.SYNCDATAID.index + 1,
-                                               (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
-                               prep.setLong(COLUMN.EVENTTIME.index + 1,
-                                               (Long) (rowData.get(COLUMN.EVENTTIME.index)));
-                               prep.setByte(COLUMN.APITYPE.index + 1, (Byte) (rowData.get(COLUMN.APITYPE.index)));
-                               String tooltipStr = clipString((String) (rowData.get(COLUMN.TOOLTIP.index)),
-                                               DALimit.TOOLTIP_LENGTH, rowData.get(COLUMN.EVENTTIME.index).toString());
-                               prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);
-                               prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
-                               prep.setLong(COLUMN.SYNCVALUE.index + 1,
-                                               (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
-                               prep.setLong(COLUMN.RELEASETIME.index + 1,
-                                               (Long) (rowData.get(COLUMN.RELEASETIME.index)));
-                       } catch (SQLException e) {
-                               e.printStackTrace();
-                               isPrepared = false;
-                       }
-               }
-
-               return isPrepared;
-       }
-
-       @Override
-       public List<Object> extractDataFromResultSet(ResultSet rs) {
-               List<Object> row = new ArrayList<Object>();
-               try {
-                       row.add(Long.valueOf(rs.getLong(COLUMN.API_SEQNUMBER.index + 1)));
-                       row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
-                       row.add(Long.valueOf(rs.getLong(COLUMN.EVENTTIME.index + 1)));
-                       row.add(Byte.valueOf(rs.getByte(COLUMN.APITYPE.index + 1)));
-                       row.add(rs.getString(COLUMN.TOOLTIP.index + 1));
-                       row.add(Long.valueOf(rs.getLong(COLUMN.ERRORNO.index + 1)));
-                       row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
-                       row.add(Long.valueOf(rs.getLong(COLUMN.RELEASETIME.index + 1)));
-               } catch (SQLException e) {
-                       e.printStackTrace();
-                       return null;
-               }
-
-               return row;
-       }
-}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncData.java
new file mode 100644 (file)
index 0000000..9a4599e
--- /dev/null
@@ -0,0 +1,287 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@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
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread.sync;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+
+public class ThreadPageSyncData extends ThreadPageData {
+       private List<ThreadPageSyncData> children = new ArrayList<ThreadPageSyncData>();
+       private DAChartSeries apiSeries;
+       private DAChartSeries stateSeries;
+       
+       public static final byte SYNC_PARENT = 0;
+       public static final byte SYNC_CHILD = 1;
+       public static final byte THREAD_CHILD = 2;
+       
+       private static int internalSeq = 0;
+       private int syncDataID = -1;
+       private byte syncDataType = -1;
+       private int parentID = -1;
+
+       public ThreadPageSyncData(int type, String name, String pid, String tid,
+                       String attrType, byte syncDataType) {
+               super(type, name, pid, tid, attrType);
+               this.syncDataType = syncDataType;
+               syncDataID = internalSeq++;
+       }
+       
+       // using open trace
+       public ThreadPageSyncData(int id, int pid, int tid, int type, long syncValue, 
+                       String attrType, byte syncDataType, int parentID) {
+               super(type, String.valueOf(syncValue), String.valueOf(pid), String.valueOf(tid), attrType);
+               this.syncDataID = id;
+               this.syncDataType = syncDataType;
+               this.parentID = parentID;
+       }
+
+       protected void pushSync(ThreadPageSyncData sync) {
+               children.add(sync);
+               hasUpdate = true;
+       }
+
+       protected ThreadPageSyncData findChildData(String tId) {
+               int size = children.size();
+               ThreadPageSyncData ret;
+               for (int i = 0; i < size; i++) {
+                       ret = children.get(i);
+                       if (ret.getTid().equals(tId)) {
+                               return ret;
+                       }
+               }
+               return null;
+       }
+
+       public List<ThreadPageSyncData> getChildren() {
+               return children;
+       }
+
+       public void setItem(DAChartBoardItem item) {
+               this.item = item;
+               setChart(item.getChart());
+               stateSeries = chart
+                               .getSeries(ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE);
+               apiSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_API);
+       }
+
+       public static boolean isSyncApi(int apiType) {
+               if (apiType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START) {
+                       return false;
+               }
+               if (apiType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START) {
+                       return false;
+               }
+               return true;
+       }
+
+       public void checkUpdate() {
+               if (false == hasUpdate) {
+                       return;
+               } else {
+                       hasUpdate = false;
+               }
+               int size = contentsQueue.size();
+               if (size > 0) {
+                       ThreadPageDataEvent event;
+                       for (int i = 0; i < size; i++) {
+                               event = contentsQueue.get(0);
+                               if (true == (isSyncApi(createChartItem(event)))) {
+                                       contents.add(event);
+                               }
+
+                               contentsQueue.remove(0);
+                       }
+                       chart.redraw();
+               }
+
+               size = children.size();
+               if (size > 0) {
+                       ThreadPageSyncData sync;
+                       for (int i = 0; i < size; i++) {
+                               sync = children.get(i);
+                               sync.checkUpdate();
+                       }
+               }
+       }
+
+       protected int createChartItem(ThreadPageDataEvent event) {
+               DAChartSeriesItem stateItem = null;
+               DAChartSeriesItem apiItem = null;
+               if (!(event instanceof ThreadPageSyncDataEvent)) {
+                       Logger.error("createChartItem");
+                       return -1;
+               }
+               ThreadPageSyncDataEvent syncEvent = (ThreadPageSyncDataEvent) event;
+
+               int apiType = syncEvent.getApiType();
+               long errorNum = syncEvent.getErrorNum();
+               switch (apiType) {
+               case LogCenterConstants.SYNC_API_TYPE_NEW:
+               case LogCenterConstants.SYNC_API_TYPE_NOTIFY:
+               case LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL:
+               case LogCenterConstants.SYNC_API_TYPE_OTHER:
+                       if(((DAChartBoardItem)item).getChartBoard() != null){
+                               stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                               "");
+                       } else {
+                       stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                       ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                       ThreadPageLabels.SYNC_CHART_ITEM_UNUSED);
+                       }
+                       apiItem = createApiItem(syncEvent, errorNum);
+                       stateSeries.addSeriesItem(stateItem);
+                       apiSeries.addSeriesItem(apiItem);
+                       break;
+               case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START:
+               case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START:
+                       if(((DAChartBoardItem)item).getChartBoard() != null){
+                               stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                               "");
+                       } else{
+                       stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_CONTINUE,
+                                       ColorResources.THREAD_GRAPH_LOCK_WAIT_COLOR,
+                                       ThreadPageLabels.SYNC_CHART_ITEM_WAITED);
+                       }
+                       apiItem = createApiItem(syncEvent, errorNum);
+                       stateSeries.addSeriesItem(stateItem);
+                       apiSeries.addSeriesItem(apiItem);
+                       break;
+               case LogCenterConstants.SYNC_API_TYPE_RELEASE:
+                       if(((DAChartBoardItem)item).getChartBoard() != null){
+                               stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                               "");
+                       } else{
+                       stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                       ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                       ThreadPageLabels.SYNC_CHART_ITEM_UNUSED);
+                       }
+                       apiItem = createApiItem(syncEvent, errorNum);
+                       stateSeries.addSeriesItem(stateItem);
+                       apiSeries.addSeriesItem(apiItem);
+                       break;
+               case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END:
+               case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END:
+                       if(((DAChartBoardItem)item).getChartBoard() != null){
+                               stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                               "");
+                       } else{
+                       stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_CONTINUE,
+                                       ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
+                                       ThreadPageLabels.SYNC_CHART_ITEM_USED);
+                       }
+                       stateSeries.addSeriesItem(stateItem);
+                       break;
+               case LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE:
+                       if(((DAChartBoardItem)item).getChartBoard() != null){
+                               stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_STATE_CONNECTION,
+                                               ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+                                               "");
+                       } else{
+                       stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+                                       DAChartSeriesItem.SERIES_STATE_CONTINUE,
+                                       ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
+                                       ThreadPageLabels.SYNC_CHART_ITEM_USED);
+                       }
+                       apiItem = createApiItem(syncEvent, errorNum);
+                       stateSeries.addSeriesItem(stateItem);
+                       apiSeries.addSeriesItem(apiItem);
+                       break;
+               default:
+                       return -1;
+               }
+
+               return apiType;
+       }
+       
+       public String getTypeString() {
+               switch (getType()) {
+               case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+                       return ThreadPageLabels.SYNC_TYPE_TIZEN_MUTEX;
+               case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+                       return ThreadPageLabels.SYNC_TYPE_TIZEN_MONITOR;
+               case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+                       return ThreadPageLabels.SYNC_TYPE_TIZEN_SEMAPHORE;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_MUTEX;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_COND_VARIABLE;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_RWLOCK;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_SPINLOCK;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_BARRIER;
+               default:
+                       Logger.error("unknown sync type!!");
+                       return CommonConstants.EMPTY;
+               }
+       }
+       
+       public int getSyncDataID() {
+               return syncDataID;
+       }
+       
+       public byte getSyncDataType() {
+               return syncDataType;
+       }
+       
+       public int getParentID() {
+               return parentID;
+       }
+       
+       public void setParentID(int parentID) {
+               this.parentID = parentID;
+       }
+       
+       public static void clear() {
+               internalSeq = 0;
+       }
+}
\ No newline at end of file
@@ -4,7 +4,6 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.ui.thread.type;
+package org.tizen.dynamicanalyzer.ui.thread.sync;
 
 import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
 
 public class ThreadPageSyncDataEvent extends ThreadPageDataEvent {
        private String syncVal;
        private int type = -1;
        private int syncDataID = -1;
-       private long blockEndTime = -1;
 
-       public ThreadPageSyncDataEvent(String syncVal, int type, int apiType, long time, int tid,
-                       String tooltip, long errorNum, LogData contents) {
+       public ThreadPageSyncDataEvent(String syncVal, int type, int apiType,
+                       long time, String tid, String tooltip, long errorNum,
+                       LogData contents) {
                super(time, tid, apiType, tooltip, errorNum, contents);
                this.syncVal = syncVal;
                this.type = type;
        }
-
-       public ThreadPageSyncDataEvent(long time, int apiType, String tooltip, long errorNum,
-                       String syncVal) {
-               super(time, -1, apiType, tooltip, errorNum, null);
+       
+       // using open trace
+       public ThreadPageSyncDataEvent(long time, int apiType, String tooltip, 
+                       long errorNum, String syncVal) {
+               super(time, null, apiType, tooltip, errorNum, null);
                this.syncVal = syncVal;
        }
-
+       
        public ThreadPageSyncDataEvent clone() throws CloneNotSupportedException {
                ThreadPageSyncDataEvent syncDataEvent = (ThreadPageSyncDataEvent) super.clone();
                syncDataEvent.setSyncVal(syncVal);
                syncDataEvent.setType(type);
                syncDataEvent.setSyncDataID(syncDataID);
+               
                return syncDataEvent;
        }
 
        public String getSyncVal() {
                return syncVal;
        }
-
+       
        public void setSyncVal(String syncVal) {
                this.syncVal = syncVal;
        }
@@ -67,24 +69,16 @@ public class ThreadPageSyncDataEvent extends ThreadPageDataEvent {
        public int getType() {
                return type;
        }
-
+       
        public void setType(int type) {
                this.type = type;
        }
-
+       
        public int getSyncDataID() {
                return syncDataID;
        }
-
+       
        public void setSyncDataID(int syncDataID) {
                this.syncDataID = syncDataID;
        }
-
-       public long getBlockEndTime() {
-               return blockEndTime;
-       }
-
-       public void setBlockEndTime(long blockEndTime) {
-               this.blockEndTime = blockEndTime;
-       }
 }
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataManager.java
new file mode 100644 (file)
index 0000000..03d3a36
--- /dev/null
@@ -0,0 +1,653 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@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
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread.sync;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Comparator;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.resources.FontResources;
+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.LogData;
+import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
+import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupClearMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupEndMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncDataInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncEventInserter;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
+
+public class ThreadPageSyncDataManager {
+       private DAChartBoard board;
+       private List<ThreadPageSyncData> rows = new ArrayList<ThreadPageSyncData>();
+       private List<ThreadPageSyncData> rowsQueue = new ArrayList<ThreadPageSyncData>();
+       private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
+       private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
+       public static final int PTHREAD_MUTEX_NORMAL = 0;
+       public static final int PTHREAD_MUTEX_RECURSIVE = 1;
+       public static final int PTHREAD_MUTEX_ERRORCHECK = 2;
+       public static final int PTHREAD_MUTEX_DEFAULT = 3;
+       private int preSelectionPid = -1;
+
+       public ThreadPageSyncDataManager(DAChartBoard board) {
+               this.setBoard(board);
+       }
+
+       protected DAChartBoard getBoard() {
+               return board;
+       }
+
+       public void setBoard(DAChartBoard board) {
+               this.board = board;
+       }
+
+       public void pushRow(ThreadPageSyncData data) {
+               rowsQueue.add(data);
+       }
+       
+       private void pushEvent(ThreadPageSyncDataEvent event) {
+               syncEventQueue.add(event);
+       }
+
+       private ThreadPageSyncData findParentData(String name) {
+               int size = rows.size();
+               ThreadPageSyncData ret;
+               for (int i = 0; i < size; i++) {
+                       ret = rows.get(i);
+                       if (ret.getKey().equals(name)) {
+                               return ret;
+                       }
+               }
+               return null;
+       }
+
+       public static String getAttrTypeByTypeInt(int typeInt) {
+               if (typeInt == PTHREAD_MUTEX_NORMAL) {
+                       return ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL;
+               } else if (typeInt == PTHREAD_MUTEX_RECURSIVE) {
+                       return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
+               } else if (typeInt == PTHREAD_MUTEX_ERRORCHECK) {
+                       return ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK;
+               } else if (typeInt == PTHREAD_MUTEX_DEFAULT) { // for open trace
+                       return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;         
+               } else {
+                       return CommonConstants.EMPTY;
+               }
+       }
+
+       public static String getAttrTypeString(ThreadPageSyncDataEvent event) {
+               int type = event.getType();
+
+               if (type == LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX) {
+                       return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
+               } else if (type == LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX) {
+                       return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
+               }
+               return CommonConstants.EMPTY;
+       }
+
+       public void parseSync(LogData input) {
+
+               if (null == input || !(input instanceof SyncData)) {
+                       return;
+               }
+               SyncData syncData = (SyncData) input;
+               // System.out.println("input : " + input);
+               long time = syncData.getTime();
+               String tid = Integer.toString(syncData.getTid());
+
+               int type = syncData.getSyncType();
+               int apiType = syncData.getApiType();
+               String apiName = syncData.getApiName();
+
+               String name = Long.toString(syncData.getSyncValue());
+
+               long errorNum = syncData.getErrno();
+               if (errorNum != 0) {
+                       SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(syncData);
+               }
+
+               ThreadPageSyncDataEvent event;
+               switch (type) {
+               case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+               case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+               case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid,
+                                       apiName, errorNum, input);
+                       pushEvent(event);
+                       // parseTIZENSync(input, type);
+                       break;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                       if (apiName
+                                       .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+                               syncAttrMap.put(syncData.getArgs(), PTHREAD_MUTEX_NORMAL);
+                       } else if (apiName
+                                       .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+                               checkMutexAttrType(syncData.getArgs());
+                       } else {
+                               if (apiName
+                                               .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+                                       checkMutexType(syncData.getArgs());
+                               }
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+                                               tid, apiName, errorNum, input);
+                               pushEvent(event);
+                       }
+                       break;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid,
+                                       apiName, errorNum, input);
+                       pushEvent(event);
+                       Logger.error("sync parse - type = " + type);
+                       break;
+               default:
+                       Logger.error("sync parse unknown - type = " + type);
+
+               }
+       }
+
+       private void parseSyncs(List<LogData> inputs) {
+               if (null == inputs || inputs.isEmpty()) {
+                       return;
+               }
+
+               int size = inputs.size();
+               SyncData input;
+
+               for (int i = 0; i < size; i++) {
+                       input = (SyncData) inputs.get(i);
+                       // System.out.println("input : " + input);
+                       long time = input.getTime();
+                       String tid = Integer.toString(input.getTid());
+
+                       int type = input.getSyncType();
+                       int apiType = input.getApiType();
+                       String apiName = input.getApiName();
+
+                       String name = Long.toString(input.getSyncValue());
+
+                       long errorNum = input.getErrno();
+
+                       ThreadPageSyncDataEvent event;
+                       switch (type) {
+                       case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+                       case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+                       case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+                                               tid, apiName, errorNum, input);
+                               pushEvent(event);
+                               // parseTIZENSync(input, type);
+                               break;
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                               if (apiName
+                                               .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+                                       syncAttrMap.put(input.getArgs(), PTHREAD_MUTEX_NORMAL);
+                               } else if (apiName
+                                               .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+                                       checkMutexAttrType(input.getArgs());
+                               } else {
+                                       if (apiName
+                                                       .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+                                               checkMutexType(input.getArgs());
+                                       }
+                                       event = new ThreadPageSyncDataEvent(name, type, apiType,
+                                                       time, tid, apiName, errorNum, input);
+                                       pushEvent(event);
+                               }
+                               break;
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+                                               tid, apiName, errorNum, input);
+                               pushEvent(event);
+                               Logger.error("sync parse - type = " + type);
+                               break;
+                       default:
+                               Logger.error("sync parse unknown - type = "
+                                               + type);
+                       }
+               }
+       }
+
+       private void checkMutexAttrType(String input) {
+               String[] temp = input.split(",");
+               if (temp.length != 2) {
+                       return;
+               }
+               String obj = temp[0];
+               String type = temp[1].trim();
+
+               if (null != syncAttrMap.get(obj)) {
+                       syncAttrMap.put(obj, Integer.valueOf(type));
+               }
+       }
+
+       private void checkMutexType(String input) {
+               String[] temp = input.split(",");
+               if (temp.length != 2) {
+                       return;
+               }
+               String obj = temp[0];
+               String attrObj = temp[1].trim();
+
+               Integer attrType = syncAttrMap.get(attrObj);
+               if (attrType != null) {
+                       syncAttrMap.put(obj, attrType);
+               }
+       }
+
+       public List<LogData> getLogsFromLogPackage(LogPackage logPack,
+                       int logCenterConstants) {
+               Logs logs = logPack.getLogs(logCenterConstants);
+               if (null == logs || null == logs.getRawLogs() || logs.getRawLogs().isEmpty()) {
+                       return null;
+               }
+               List<LogData> ret = logs.getRawLogs();
+               return ret;
+       }
+
+       public void parsePageData(LogPackage logPack) {
+               List<LogData> inputs = getLogsFromLogPackage(logPack,
+                               DataChannelConstants.MSG_PROBE_SYNC);
+               parseSyncs(inputs);
+       }
+
+       private void initSyncChart(DAChart chart, boolean isParent) {
+               if (null == chart) {
+                       return;
+               }
+
+               DAChartSeries apiSeries = new DAChartSeries(
+                               ThreadPageLabels.THREAD_CHART_SERIES_API,
+                               DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
+
+               DAChartSeries stateSeries = new DAChartSeries(
+                               ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE,
+                               DAChartSeries.SERIES_STYLE_STATE, ColorResources.WHITE,
+                               isParent);
+
+               apiSeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
+
+               chart.addSeries(stateSeries);
+               chart.addSeries(apiSeries);
+
+               DAChartPlot plot = chart.getPlot();
+               if (null == plot) {
+                       return;
+               }
+               if (true == isParent) {
+                       plot.setBackgroundImage(ImageResources.BG_GRADIENT);
+               } else {
+                       plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
+               }
+               plot.setAutoHeightRange(AutoRangeType.MANUAL);
+               plot.setAxisFont(FontResources.CHART_AXIS_FONT);
+               plot.setAxisRangeY(0, 101);
+               plot.setAxisRangeX(board.getVisibleStartTime(),
+                               board.getVisibleEndTime());
+               DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
+               tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
+               plot.setTooltip(tooltip);
+
+               DAPopupMenu popupMenu = new DAPopupMenu(chart);
+               popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
+               DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu);
+               startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
+               startItem.addListener(new PopupStartMenuItemClickListener(startItem,
+                               board));
+
+               DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu);
+               endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
+               endItem.addListener(new PopupEndMenuItemClickListener(endItem, board));
+
+               DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu);
+               fromSelectionItem
+                               .setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
+               fromSelectionItem
+                               .addListener(new PopupFromSelectionMenuItemClickListener(
+                                               fromSelectionItem, board));
+
+               DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu);
+               analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
+               analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
+
+               DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu);
+               clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
+               clearItem.addListener(new PopupClearMenuItemClickListener());
+
+               TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
+                               popupMenu, board.getTimeline());
+               chart.addMouseListener(timelineChartMouseEventListener);
+               chart.addMouseMoveListener(timelineChartMouseEventListener);
+               chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(board
+                               .getTimeline()));
+               plot.setMarkers(board.getMarkers());
+       }
+
+       private boolean createSyncBoardItem(ThreadPageSyncData parent,
+                       ThreadPageSyncData sync) {
+               DAChartBoardItem item;
+               DAChart chart;
+
+               if (null == parent) {
+                       item = new DAChartBoardItem(board, sync.getTypeString()
+                                       + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+                                       + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
+                                       + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+                       item.useExpand(true);
+                       chart = item.getChart();
+                       initSyncChart(chart, true);
+               } else {
+                       DAChartBoardItem parentItem = parent.getItem();
+                       item = new DAChartBoardItem(parentItem,
+                                       ThreadPageLabels.THREAD_CHART_NAME_TID + sync.getTid());
+                       item.useExpand(true);
+                       chart = item.getChart();
+                       initSyncChart(chart, false);
+               }
+
+               sync.setItem(item);
+               item.setData(sync);
+               chart.setData(sync);
+               chart.redraw();
+               return true;
+       }
+       // for sorting of child item of sync chart
+       private boolean createSyncBoardItem(ThreadPageSyncData parent,
+                       ThreadPageSyncData sync, Comparator<DAChartBoardItem> c) {
+               DAChartBoardItem item;
+               DAChart chart;
+               Integer tid = Integer.valueOf(sync.getTid());
+
+               if (null == parent) {
+                       item = new DAChartBoardItem(board, sync.getTypeString()
+                                       + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+                                       + ThreadPageLabels.THREAD_CHART_NAME_OBJ + sync.getKey()
+                                       + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+                       item.useExpand(true);
+                       chart = item.getChart();
+                       initSyncChart(chart, true);
+               } else {
+                       DAChartBoardItem parentItem = parent.getItem();
+                       item = new DAChartBoardItem(parentItem,
+                                       ThreadPageLabels.THREAD_CHART_NAME_TID
+                                       + sync.getTid(), tid, c);
+                       item.useExpand(true);
+                       chart = item.getChart();
+                       initSyncChart(chart, false);
+               }
+
+               sync.setItem(item);
+               item.setData(sync);
+               chart.setData(sync);
+               chart.redraw();
+               return true;
+       }
+
+       private void chartFilteringByPid() {
+               if(null == board || null == board.getItemList()){
+                       return;
+               }
+               int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+               boolean isCheck = false;
+
+               if (syncEventQueue.size() > 0) {
+                       isCheck = true;
+               }
+
+               if (preSelectionPid != -1 && preSelectionPid != selectedPid) {
+                       isCheck = true;
+               }
+
+               if (isCheck) {
+                       int parentSize = board.getItemList().getItemSize();
+                       for (int i = 0; i < parentSize; i++) {
+                               DAChartBoardItem parentItem = board.getItemList().get(i);
+/*
+                               int childSize = parentItem.getChildItemList().getItemSize();
+                               int hidedCount = 0;
+                               for (int j = 0; j < childSize; j++) {
+                                       DAChartBoardItem childItem = parentItem.getChildItemList()
+                                                       .get(j);
+                                       int itemPid = getItemPid(childItem);
+                                       if (itemPid == selectedPid) {
+                                               parentItem.getChildItemList().showItem(j);
+                                               board.showItem(i);
+                                       } else if (selectedPid == 0) {
+                                               parentItem.getChildItemList().showItem(j);
+                                               board.showItem(i);
+                                       } else if (itemPid == -1) {
+                                               board.showItem(i);
+                                       } else {
+                                               parentItem.getChildItemList().hideItem(j);
+                                               hidedCount++;
+                                       }
+                               }
+                               if (childSize == 0) {
+                                       int itemPid = getItemPid(parentItem);
+                                       if (itemPid == selectedPid) {
+                                               board.showItem(i);
+                                       } else if (selectedPid == 0) {
+                                               board.showItem(i);
+                                       } else if (itemPid == -1) {
+                                               board.showItem(i);
+                                       } else {
+                                               board.hideItem(i);
+                                               hidedCount++;
+                                       }
+                               } else {
+                                       if (childSize == hidedCount) {
+                                               board.hideItem(i);
+                                       }
+                               }
+*/                             
+                               int itemPid = getItemPid(parentItem);
+                               if (itemPid == selectedPid) {
+                                       board.showItem(i);
+//                                     for(int j = 0; j < parentItem.getChildItemList().getItemSize(); j++) {
+//                                             parentItem.getChildItemList().showItem(j);
+//                                     }
+                               } else if (selectedPid == 0) {
+                                       board.showItem(i);
+                               } else if (itemPid == -1) {
+                                       board.showItem(i);
+                               } else {
+                                       board.hideItem(i);
+                               }                               
+                       }
+               }
+               preSelectionPid = selectedPid;
+       }
+
+       private int getItemPid(DAChartBoardItem item) {
+               int pid = -1;
+               if (item.getData() instanceof ThreadPageData) {
+                       ThreadPageData threadPageData = (ThreadPageData) item.getData();
+                       pid = Integer.parseInt(threadPageData.getPid());
+               }
+               return pid;
+       }
+
+       private int getSortObject(DAChartBoardItem item) {
+               Object sortObj = item.getSortObject();
+               if (sortObj instanceof Integer) {
+                       return (Integer) sortObj;
+               } else { // should never go here
+                       return -1;                      
+               }
+       }
+       
+       public void checkUpdate() {
+               chartFilteringByPid();
+               
+               /* load ThreadPgeSyncData when open trace */
+               int size = rowsQueue.size();
+               if (size > 0) {
+                       ThreadPageSyncData sync;
+                       ThreadPageSyncData parent;
+                       for (int i = 0; i < size; i++) {
+                               sync = rowsQueue.get(0);
+                               if (sync.getSyncDataType() == ThreadPageSyncData.SYNC_PARENT) {
+                                       rows.add(sync);
+                                       createSyncBoardItem(null, sync);                                        
+                               } else if (sync.getSyncDataType() == ThreadPageSyncData.SYNC_CHILD) {
+                                       parent = findParentData(sync.getKey());
+                                       if (null != parent) {
+                                               parent.pushSync(sync);
+                                               createSyncBoardItem(parent, sync,
+                                                               new Comparator<DAChartBoardItem>() {
+                                                                       public int compare(DAChartBoardItem item1,
+                                                                                       DAChartBoardItem item2) {
+                                                                               return getSortObject(item1) - getSortObject(item2);
+                                                                       }
+                                               });
+                                       } else {
+                                               Logger.error("cannot find parent sync data");
+                                       }
+                               } else {
+                                       Logger.error("unknown sync data type");
+                               }
+                               rowsQueue.remove(0);
+                       }
+               }
+               
+               size = syncEventQueue.size();
+               if (size > 0) {
+                       ThreadPageSyncData parent;
+                       ThreadPageSyncData data;
+                       ThreadPageSyncDataEvent event;
+                       for (int i = 0; i < size; i++) {
+                               event = syncEventQueue.get(0);
+                               String syncVal = event.getSyncVal();
+                               String pid = Integer.toString(event.getContents().getPid());
+                               parent = findParentData(syncVal);
+                               // parent
+                               if (null == parent) {
+                                       Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
+                                       String syncAttrType;
+
+                                       if (null != syncAttrTypeInt) {
+                                               syncAttrType = getAttrTypeByTypeInt(syncAttrTypeInt);
+                                       } else {
+                                               syncAttrType = getAttrTypeString(event);
+                                       }
+
+                                       parent = new ThreadPageSyncData(event.getType(), syncVal, pid, 
+                                                       event.getTid(), syncAttrType, ThreadPageSyncData.SYNC_PARENT);
+                                       // save to DB
+                                       SyncDataInserter.pushSyncData(parent);
+                                       SyncDataInserter.startThread();
+                                       rows.add(parent);
+                                       createSyncBoardItem(null, parent);
+                               }
+                               parent.pushEvent(event);
+                               event.setSyncDataID(parent.getSyncDataID());
+                               // save to DB
+                               SyncEventInserter.pushSyncEvent(event);
+                               SyncEventInserter.startThread();
+                               // child
+                               data = parent.findChildData(event.getTid());
+
+                               if (null == data) {
+                                       String attrType = parent.getAttrType();
+                                       data = new ThreadPageSyncData(event.getType(), syncVal, pid, 
+                                                       event.getTid(), attrType, ThreadPageSyncData.SYNC_CHILD);
+                                       data.setParentID(parent.getSyncDataID());
+                                       // save to DB
+                                       SyncDataInserter.pushSyncData(data);
+                                       SyncDataInserter.startThread();
+                                       parent.pushSync(data);
+                                       createSyncBoardItem(parent, data,
+                                                       new Comparator<DAChartBoardItem>() {
+                                                               public int compare(DAChartBoardItem item1,
+                                                                               DAChartBoardItem item2) {
+                                                                       return getSortObject(item1) - getSortObject(item2);
+                                                               }
+                                       });
+                               }
+                               data.pushEvent(event);
+                               try {
+                                       ThreadPageSyncDataEvent cloneEvent = (ThreadPageSyncDataEvent) event.clone();
+                                       cloneEvent.setSyncDataID(data.getSyncDataID());
+                                       // save to DB
+                                       SyncEventInserter.pushSyncEvent(cloneEvent);
+                               } catch (CloneNotSupportedException e) {
+                                       e.printStackTrace();
+                                       continue;
+                               } finally {
+                                       syncEventQueue.remove(0);
+                               }
+                       }
+               }
+               size = rows.size();
+               if (size > 0) {
+                       ThreadPageSyncData data;
+                       for (int i = 0; i < size; i++) {
+                               data = rows.get(i);
+                               data.checkUpdate();
+                       }
+               }
+       }
+
+       public void clear() {
+               rows.clear(); // FIXME : clear chart
+               syncEventQueue.clear();
+               syncAttrMap.clear();
+               ThreadPageSyncData.clear(); // reset internal seq number
+       }
+}
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadData.java
new file mode 100644 (file)
index 0000000..61009a4
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@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
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.utils.Formatter;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+
+public class ThreadPageThreadData extends ThreadPageData {
+       private List<ThreadPageSyncData> syncs = new ArrayList<ThreadPageSyncData>();
+       private long StartTime = -1;
+       private long EndTime = -1;
+       private int threadFuncID;
+       private String threadClassName = CommonConstants.EMPTY;
+       private DAChartSeries loadSeries;
+       private DAChartSeries eventSeries;
+       private DAChartSeries apiSeries;
+
+       public static final byte TYPE_MAIN = 0;
+       public static final byte TYPE_PTHREAD = 1;
+       public static final byte TYPE_TIZEN = 2;
+
+       private static int internalSeq = 0;
+       private int threadDataID = -1;
+
+       public ThreadPageThreadData(int type, String pid, String tid,
+                       String attrType, int funcID) {
+               super(type, String.valueOf(tid), pid, tid, attrType);
+               this.threadFuncID = funcID;
+               threadDataID = internalSeq++;
+       }
+
+       // using open trace
+       public ThreadPageThreadData(int id, int pid, int tid, int threadType,
+                       String attrType, long startTime, long endTime, int functionID,
+                       String className) {
+               super(threadType, String.valueOf(tid), String.valueOf(pid), String
+                               .valueOf(tid), attrType);
+               this.threadDataID = id;
+               this.threadFuncID = functionID;
+               this.StartTime = startTime;
+               this.EndTime = endTime;
+               this.threadClassName = className;
+       }
+
+       public void addDataEvent(ThreadPageThreadDataEvent dataEvent) {
+               contentsQueue.add(dataEvent);
+       }
+
+       public int getThreadFuncID() {
+               return threadFuncID;
+       }
+
+       public String getThreadFuncName() {
+               if (threadFuncID == -1) {
+                       return CommonConstants.EMPTY;
+               } else {
+                       return Global.getFunctionName(threadFuncID);
+               }
+       }
+
+       public String getThreadClassName() {
+               return threadClassName;
+       }
+
+       public void setThreadClassName(String className) {
+               threadClassName = className;
+       }
+
+       public void setItem(DAChartBoardItem item) {
+               this.item = item;
+               chart = item.getChart();
+               loadSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_LOAD);
+               eventSeries = chart
+                               .getSeries(ThreadPageLabels.THREAD_CHART_SERIES_EVENT);
+               apiSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_API);
+       }
+
+       protected int createChartItem(ThreadPageDataEvent event) {
+               int ret = -1;
+               if (!(event instanceof ThreadPageThreadDataEvent)) {
+                       Logger.error("createChartItem");
+                       return ret;
+               }
+
+               ThreadPageThreadDataEvent threadEvent = (ThreadPageThreadDataEvent) event;
+               DAChartSeriesItem seriesItem;
+
+               switch (threadEvent.getEventType()) {
+               case ThreadPageThreadDataEvent.TYPE_LOAD:
+                       ret = ThreadPageThreadDataEvent.TYPE_LOAD;
+                       if (null == loadSeries) {
+                               return ret;
+                       }
+
+                       seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
+                                       (double) (threadEvent.getThreadType() * 2.55),
+                                       threadEvent.getTooltipContent());
+
+                       loadSeries.addSeriesItem(seriesItem);
+                       break;
+               case ThreadPageThreadDataEvent.TYPE_EVENT:
+                       ret = ThreadPageThreadDataEvent.TYPE_EVENT;
+                       if (null == eventSeries) {
+                               return ret;
+                       }
+
+                       int eventApiType = threadEvent.getApiType();
+                       if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
+                               seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_ARROW_LEFT,
+                                               threadEvent.getTooltipContent());
+                               seriesItem.setBarWidth(Double.parseDouble(threadEvent
+                                               .getCallerTid()));
+                               setStartTime(threadEvent.getTime());
+                       } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_WAIT_END) {
+                               if (threadEvent.isJoinAPI()) {
+                                       seriesItem = new DAChartSeriesItem(
+                                                       threadEvent.getDoubleTime(),
+                                                       DAChartSeriesItem.SERIES_ARROW_LEFT,
+                                                       ThreadPageLabels.THREAD_CHART_ITEM_JOINED);
+                                       seriesItem.setBarWidth(Double.parseDouble(threadEvent
+                                                       .getCallerTid()));
+                               } else {
+                                       seriesItem = new DAChartSeriesItem(
+                                                       threadEvent.getDoubleTime(),
+                                                       DAChartSeriesItem.SERIES_ARROW_NONE,
+                                                       threadEvent.getTooltipContent());
+                               }
+                       } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
+                               if (null != threadEvent.getCallerTid()) {
+                                       seriesItem = new DAChartSeriesItem(
+                                                       threadEvent.getDoubleTime(),
+                                                       DAChartSeriesItem.SERIES_ARROW_LEFT,
+                                                       threadEvent.getTooltipContent());
+                                       seriesItem.setBarWidth(Double.parseDouble(threadEvent
+                                                       .getCallerTid()));
+                               } else {
+                                       seriesItem = new DAChartSeriesItem(
+                                                       threadEvent.getDoubleTime(),
+                                                       DAChartSeriesItem.SERIES_ARROW_NONE,
+                                                       threadEvent.getTooltipContent());
+                               }
+                               setEndTime(threadEvent.getTime());
+                               // save ThreadData when endtime is set
+                               if (AnalyzerManager.isRunning()) {
+                                       ThreadChartManager.getInstance().saveThreadPageThreadData(
+                                                       this);
+                               }
+                       } else {
+                               seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
+                                               DAChartSeriesItem.SERIES_ARROW_NONE,
+                                               threadEvent.getTooltipContent());
+                       }
+
+                       eventSeries.addSeriesItem(seriesItem);
+                       break;
+               case ThreadPageThreadDataEvent.TYPE_API:
+                       ret = ThreadPageThreadDataEvent.TYPE_API;
+                       if (null == apiSeries) {
+                               return ret;
+                       }
+
+                       long errorNum = threadEvent.getErrorNum();
+                       seriesItem = createApiItem(threadEvent, errorNum);
+
+                       apiSeries.addSeriesItem(seriesItem);
+                       break;
+               default:
+                       return ret;
+               }
+               threadEvent.setChartItem(seriesItem);
+               return ret;
+       }
+
+       protected void checkUpdate() {
+               if (false == hasUpdate) {
+                       return;
+               } else {
+                       hasUpdate = false;
+               }
+
+               int size = contentsQueue.size();
+               if (size > 0) {
+                       ThreadPageDataEvent temp;
+                       ThreadPageThreadDataEvent event;
+                       for (int i = 0; i < size; i++) {
+                               temp = contentsQueue.get(0);
+                               if ((temp instanceof ThreadPageThreadDataEvent)) {
+                                       event = (ThreadPageThreadDataEvent) temp;
+                                       if (ThreadPageThreadDataEvent.TYPE_API == createChartItem(event)) {
+                                               contents.add(event);
+                                       }
+                               }
+                               contentsQueue.remove(0);
+                       }
+                       chart.redraw();
+               }
+
+               size = syncs.size();
+               if (size > 0) {
+                       ThreadPageSyncData sync;
+                       for (int i = 0; i < size; i++) {
+                               sync = syncs.get(i);
+                               sync.checkUpdate();
+                       }
+               }
+       }
+
+       public void pushSync(ThreadPageSyncData sync) {
+               syncs.add(sync);
+               hasUpdate = true;
+       }
+
+       protected ThreadPageSyncData findSyncData(String syncVal) {
+               int size = syncs.size();
+               ThreadPageSyncData sync;
+               for (int i = 0; i < size; i++) {
+                       sync = syncs.get(i);
+                       if (sync.getKey().equals(syncVal)) {
+                               return sync;
+                       }
+               }
+               return null;
+       }
+
+       public String getTypeString() {
+               switch (getType()) {
+               case TYPE_MAIN:
+                       return ThreadPageLabels.THREAD_ITEM_TYPE_MAIN;
+               case TYPE_PTHREAD:
+                       return ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD;
+               case TYPE_TIZEN:
+                       return ThreadPageLabels.THREAD_ITEM_TYPE_TIZEN;
+               default:
+                       Logger.error("unknown thread type!!");
+                       return CommonConstants.EMPTY;
+               }
+       }
+
+       public long getStartTime() {
+               return StartTime;
+       }
+
+       public void setStartTime(long startTime) {
+               StartTime = startTime;
+       }
+
+       public String getStartTimeString() { // to show in details view
+               if (StartTime == -1) {
+                       return null;
+               } else {
+                       double startTime = Formatter.longTimeToDoubleTime(StartTime);
+                       return String.valueOf(startTime);
+               }
+       }
+
+       public long getEndTime() {
+               return EndTime;
+       }
+
+       public void setEndTime(long endTime) {
+               EndTime = endTime;
+       }
+
+       public String getEndTimeString() { // to show in details view
+               if (EndTime == -1) {
+                       return null;
+               } else {
+                       double endTime = Formatter.longTimeToDoubleTime(EndTime);
+                       return String.valueOf(endTime);
+               }
+       }
+
+       public int getThreadDataID() {
+               return threadDataID;
+       }
+
+       public static void clear() {
+               internalSeq = 0;
+       }
+}
\ No newline at end of file
@@ -4,7 +4,6 @@
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
  * WooJin Jung <woojin2.jung@samsung.com>
  * yeongtaik byeon <yeongtaik.byeon@samsung.com>
  * Juyoung Kim <j0.kim@samsung.com>
  * - S-Core Co., Ltd
  * 
  */
-package org.tizen.dynamicanalyzer.ui.thread.type;
+package org.tizen.dynamicanalyzer.ui.thread.thread;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 
 import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
 import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
 
 public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
        public static final int TYPE_API = 0;
@@ -39,8 +40,9 @@ public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
        public static final int TYPE_LOAD = 2;
        private int eventType = -1;
        private int threadType = -1;
+       private DAChartSeriesItem chartItem;
        private String callID = null;
-       private int callerTid = -1;
+       private String callerTid = null;
        private int threadDataID = -1;
 
        ArrayList<String> joinAPIs = new ArrayList<String>(Arrays.asList(
@@ -48,7 +50,7 @@ public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
                        ThreadPageLabels.THREAD_API_TIZEN_JOIN));
 
        public ThreadPageThreadDataEvent(int eventType, int threadType,
-                       int apiType, long time, int tid, String tooltip, long errorNum,
+                       int apiType, long time, String tid, String tooltip, long errorNum,
                        LogData contents) {
                super(time, tid, apiType, tooltip, errorNum, contents);
                setEventType(eventType);
@@ -63,6 +65,14 @@ public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
                this.eventType = eventType;
        }
 
+       public DAChartSeriesItem getChartItem() {
+               return chartItem;
+       }
+
+       public void setChartItem(DAChartSeriesItem chartItem) {
+               this.chartItem = chartItem;
+       }
+
        public int getThreadType() {
                return threadType;
        }
@@ -79,11 +89,11 @@ public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
                this.callID = callID;
        }
 
-       public int getCallerTid() {
+       public String getCallerTid() {
                return callerTid;
        }
 
-       public void setCallerTid(int callerTid) {
+       public void setCallerTid(String callerTid) {
                this.callerTid = callerTid;
        }
 
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataManager.java
new file mode 100644 (file)
index 0000000..024a3b6
--- /dev/null
@@ -0,0 +1,1392 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * WooJin Jung <woojin2.jung@samsung.com> 
+ * yeongtaik byeon <yeongtaik.byeon@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
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread.thread;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.common.SymbolManager;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.resources.FontResources;
+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.LogData;
+import org.tizen.dynamicanalyzer.swap.model.data.ProcessProfileData;
+import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
+import org.tizen.dynamicanalyzer.swap.model.data.SystemData;
+import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;
+import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupClearMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupEndMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
+import org.tizen.dynamicanalyzer.ui.summary.warning.WarningCase;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncAPIInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncDataInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncEventInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadEventInserter;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
+
+public class ThreadPageThreadDataManager {
+       private DAChartBoard board;
+       // ThreadChartView view;
+       private boolean hasUpdate = false;
+       private List<ThreadPageThreadData> rows = new ArrayList<ThreadPageThreadData>();
+       private List<ThreadPageThreadData> rowsQueue = new ArrayList<ThreadPageThreadData>();
+       private List<ThreadPageThreadData> callRowsQueue = new ArrayList<ThreadPageThreadData>();
+       private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
+       private List<ThreadPageThreadDataEvent> eventQueue = new ArrayList<ThreadPageThreadDataEvent>();
+       private List<ThreadPageThreadDataEvent> callEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
+       // load from database
+       private List<ThreadPageSyncData> syncQueue = new ArrayList<ThreadPageSyncData>();
+
+       private HashMap<String, Integer> threadAttrMap = new HashMap<String, Integer>();
+       private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
+       // threadFuncMap : (pthreadId, function address)
+       private HashMap<String, Long> threadFuncMap = new HashMap<String, Long>();
+       private int preSelectionPid = -1;
+
+       public static final int PTHREAD_CREATE_JOINABLE = 0;
+       public static final int PTHREAD_CREATE_DETACHED = 1;
+
+       public ThreadPageThreadDataManager(DAChartBoard board) {
+               this.setBoard(board);
+       }
+
+       public List<ThreadPageThreadData> getRows() {
+               return rows;
+       }
+
+       public void pushRow(ThreadPageThreadData data) {
+               rowsQueue.add(data);
+               hasUpdate = true;
+       }
+
+       private void pushCallRow(ThreadPageThreadData data) { // FIXME
+               callRowsQueue.add(data);
+       }
+
+       private void pushEvent(ThreadPageThreadDataEvent event) {
+               eventQueue.add(event);
+               hasUpdate = true;
+       }
+
+       private void pushCallEvent(ThreadPageThreadDataEvent event) {
+               callEventQueue.add(event);
+       }
+
+       private void pushSyncEvent(ThreadPageSyncDataEvent syncEvent) {
+               syncEventQueue.add(syncEvent);
+               hasUpdate = true;
+       }
+
+       public void pushSyncData(ThreadPageSyncData syncData) {
+               syncQueue.add(syncData);
+       }
+
+       private void createBoardItem(ThreadPageThreadData data) {
+               // DACustomChartBoardItem item = new DACustomChartBoardItem(board,
+               // data.getName());
+
+               DAChartBoardItem item = new DAChartBoardItem(board, data.getTypeString()
+                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+                               + ThreadPageLabels.THREAD_CHART_NAME_PID + data.getPid()
+                               + ThreadPageLabels.THREAD_CHART_NAME_COMMA + ThreadPageLabels.THREAD_CHART_NAME_TID
+                               + data.getKey() + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+
+               item.useExpand(true);
+               DAChart chart = item.getChart();
+               setChartSeries(chart);
+
+               setChartStyle(chart);
+
+               data.setItem(item);
+               item.setData(data);
+               chart.setData(data);
+               chart.redraw();
+       }
+
+       // for sorting of thread chart item
+       private void createBoardItem(ThreadPageThreadData data, Comparator<DAChartBoardItem> c) {
+               // DACustomChartBoardItem item = new DACustomChartBoardItem(board,
+               // data.getName());
+               Integer tid = Integer.valueOf(data.getTid());
+
+               DAChartBoardItem item = new DAChartBoardItem(board, data.getTypeString()
+                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+                               + ThreadPageLabels.THREAD_CHART_NAME_PID + data.getPid()
+                               + ThreadPageLabels.THREAD_CHART_NAME_COMMA + ThreadPageLabels.THREAD_CHART_NAME_TID
+                               + data.getKey() + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX, tid, c);
+
+               item.useExpand(true);
+               DAChart chart = item.getChart();
+               setChartSeries(chart);
+
+               setChartStyle(chart);
+
+               data.setItem(item);
+               item.setData(data);
+               chart.setData(data);
+               chart.redraw();
+       }
+
+       private void initSyncChart(DAChart chart) {
+               if (null == chart) {
+                       return;
+               }
+
+               DAChartSeries apiSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
+                               DAChartSeries.SERIES_STYLE_STATE, ColorResources.YELLOW);
+               DAChartSeries stateSeries = new DAChartSeries(
+                               ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE, DAChartSeries.SERIES_STYLE_STATE,
+                               ColorResources.WHITE);
+
+               chart.addSeries(stateSeries);
+               chart.addSeries(apiSeries);
+
+               DAChartPlot plot = chart.getPlot();
+               if (null == plot) {
+                       return;
+               }
+               plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
+               plot.setAutoHeightRange(AutoRangeType.MANUAL);
+               plot.setAxisFont(FontResources.CHART_AXIS_FONT);
+               plot.setAxisRangeY(0, 101);
+               plot.setAxisRangeX(board.getVisibleStartTime(), board.getVisibleEndTime());
+               DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
+               tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
+               plot.setTooltip(tooltip);
+
+               DAPopupMenu popupMenu = new DAPopupMenu(chart);
+               popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
+               DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu);
+               startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
+               startItem.addListener(new PopupStartMenuItemClickListener(startItem, board));
+
+               DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu);
+               endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
+               endItem.addListener(new PopupEndMenuItemClickListener(endItem, board));
+
+               DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu);
+               fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
+               fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(
+                               fromSelectionItem, board));
+
+               DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu);
+               analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
+               analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
+
+               DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu);
+               clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
+               clearItem.addListener(new PopupClearMenuItemClickListener());
+
+               TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
+                               popupMenu, board.getTimeline());
+               chart.addMouseListener(timelineChartMouseEventListener);
+               chart.addMouseMoveListener(timelineChartMouseEventListener);
+               chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(board.getTimeline()));
+
+               plot.setMarkers(board.getMarkers());
+       }
+
+       private boolean createSyncBoardItem(ThreadPageThreadData data, ThreadPageSyncData sync) {
+               DAChartBoardItem parent = data.getItem();
+               if (null == parent) {
+                       return false;
+               }
+
+               DAChartBoardItem item = new DAChartBoardItem(parent, sync.getTypeString()
+                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+                               + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
+                               + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+
+               item.useExpand(true);
+               DAChart chart = item.getChart();
+               initSyncChart(chart);
+
+               sync.setItem(item);
+               item.setData(sync);
+               chart.setData(sync);
+               chart.redraw();
+               return true;
+       }
+
+       protected void setChartStyle(DAChart chart) {
+               if (null == chart) {
+                       return;
+               }
+
+               DAChartPlot plot = chart.getPlot();
+               if (null == plot) {
+                       return;
+               }
+               plot.setBackgroundImage(ImageResources.BG_GRADIENT);
+               plot.setAutoHeightRange(AutoRangeType.MANUAL);
+               DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
+               tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
+               plot.setTooltip(tooltip);
+               plot.setAxisFont(FontResources.CHART_AXIS_FONT);
+               plot.setAxisRangeY(0, 101);
+               plot.setAxisRangeX(board.getVisibleStartTime(), board.getVisibleEndTime());
+
+               DAPopupMenu popupMenu = new DAPopupMenu(chart);
+
+               popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
+               DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu);
+               startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
+               startItem.addListener(new PopupStartMenuItemClickListener(startItem, board));
+
+               DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu);
+               endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
+               endItem.addListener(new PopupEndMenuItemClickListener(endItem, board));
+
+               DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu);
+               fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
+               fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(
+                               fromSelectionItem, board));
+
+               DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu);
+               analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
+               analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
+
+               DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu);
+               clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
+               clearItem.addListener(new PopupClearMenuItemClickListener());
+
+               TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
+                               popupMenu, board.getTimeline());
+               chart.addMouseListener(timelineChartMouseEventListener);
+               chart.addMouseMoveListener(timelineChartMouseEventListener);
+               chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(board.getTimeline()));
+               plot.setMarkers(board.getMarkers());
+       }
+
+       private void setChartSeries(DAChart chart) {
+               DAChartSeries loadSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_LOAD,
+                               DAChartSeries.SERIES_STYLE_LOAD, ColorResources.THREAD_GRAPH_MIN_CPU_LOAD_COLOR,
+                               ColorResources.THREAD_GRAPH_MAX_CPU_LOAD_COLOR);
+               loadSeries.setBarWidth(1);
+
+               DAChartSeries apiSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
+                               DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
+
+               DAChartSeries eventSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_EVENT,
+                               DAChartSeries.SERIES_STYLE_ARROW, ColorResources.THREAD_GRAPH_CALLEE_COLOR);
+
+               apiSeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
+               eventSeries.setFont(FontResources.CHART_ARROW_TID_FONT);
+
+               chart.addSeries(loadSeries);
+               chart.addSeries(apiSeries);
+               chart.addSeries(eventSeries);
+
+               chart.redraw();
+       }
+
+       public void createMainThreadItem(int tid) {
+               int funcID = Global.getFunctionID("main");
+               ThreadPageThreadData mainData = new ThreadPageThreadData(ThreadPageThreadData.TYPE_MAIN,
+                               String.valueOf(tid), String.valueOf(tid), CommonConstants.EMPTY, funcID);
+               pushRow(mainData);
+       }
+
+       public static String getAttrTypeByTypeInt(int typeInt) {
+               if (typeInt == PTHREAD_CREATE_JOINABLE) {
+                       return ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
+               } else if (typeInt == PTHREAD_CREATE_DETACHED) {
+                       return ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED;
+               } else {
+                       return CommonConstants.EMPTY;
+               }
+       }
+
+       public List<LogData> getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) {
+               Logs logs = logPack.getLogs(logCenterConstants);
+               if (null == logs || logs.getRawLogs().size() == 0) {
+                       return null;
+               }
+               List<LogData> ret = logs.getRawLogs();
+               return ret;
+       }
+
+       public void parseLoad(LogData input) {
+               if (null == input) {
+                       return;
+               }
+
+               if (!(input instanceof SystemData)) {
+                       return;
+               }
+               SystemData sysLog = (SystemData) input;
+
+               String loads;
+               String tid;
+               int load;
+
+               ProcessProfileData[] processDataList = sysLog.getProcessProfileDataList();
+
+               for (int i = 0; i < processDataList.length; i++) {
+                       loads = processDataList[i].getThreadLoad();
+                       String[] temp = loads.split(",");
+                       int tempSize = temp.length;
+                       long time;
+                       for (int j = 0; j + 1 < tempSize; j += 2) {
+                               try {
+                                       tid = temp[j];
+                               } catch (NumberFormatException nfe) {
+                                       Logger.error("parseLoad - tid parsing");
+                                       break;
+                               }
+                               // if (null == findParentData(tid)) {
+                               // continue;
+                               // }
+                               load = (int) (Double.parseDouble(temp[j + 1]));
+                               time = input.getTime();
+                               ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+                                               ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, tid,
+                                               String.valueOf(load) + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1, null);
+                               pushEvent(event);
+
+                       }
+               }
+               hasUpdate = true;
+               // loads = sysLog.getThreadLoad(); // TODO SystemData interface changed.
+               // // loads = input.get(LogCenterConstants.DEVICE_THREAD_LOAD_INDEX);
+               // String[] temp = loads.split(",");
+               // int tempSize = temp.length;
+               // double time;
+               // for (int j = 0; j + 1 < tempSize; j += 2) {
+               // try {
+               // tid = temp[j];
+               // } catch (NumberFormatException nfe) {
+               // Logger.error("parseLoad - tid parsing");
+               // break;
+               // }
+               // // if (null == findParentData(tid)) {
+               // // continue;
+               // // }
+               // load = (int) (Double.parseDouble(temp[j + 1]));
+               // time = Double.parseDouble(Long.toString(input.getTime()))
+               // / TimelineConstants.MEGA_DOUBLE;
+               // ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+               // ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, tid,
+               // String.valueOf(load)
+               // + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1,
+               // null);
+               // pushEvent(event);
+               //
+               // }
+               // hasUpdate = true;
+       }
+
+       private void parseLoad(LogPackage logPack) {
+               List<LogData> inputs = getLogsFromLogPackage(logPack, DataChannelConstants.MSG_DATA_SYSTEM);
+               int size;
+               if (null == inputs || 0 == (size = inputs.size())) {
+                       return;
+               }
+               SystemData input;
+
+               String loads;
+               String tid;
+               int load;
+               for (int i = 0; i < size; i++) {
+                       input = (SystemData) inputs.get(i);
+                       ProcessProfileData[] processDataList = input.getProcessProfileDataList();
+
+                       for (int j = 0; j < processDataList.length; j++) {
+                               loads = processDataList[j].getThreadLoad();
+                               String[] temp = loads.split(",");
+                               int tempSize = temp.length;
+                               long time;
+                               for (int k = 0; k + 1 < tempSize; k += 2) {
+                                       try {
+                                               tid = temp[k];
+                                       } catch (NumberFormatException nfe) {
+                                               Logger.error("parseLoad - tid parsing");
+                                               break;
+                                       }
+                                       // if (null == findParentData(tid)) {
+                                       // continue;
+                                       // }
+                                       load = (int) (Double.parseDouble(temp[k + 1]));
+                                       time = input.getTime();
+                                       ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+                                                       ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, tid,
+                                                       String.valueOf(load) + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1,
+                                                       null);
+                                       pushEvent(event);
+
+                               }
+                       }
+                       // loads = input.getThreadLoad(); // TODO SystemData interface
+                       // changed.
+                       // String[] temp = loads.split(",");
+                       // int tempSize = temp.length;
+                       // double time;
+                       // for (int j = 0; j + 1 < tempSize; j += 2) {
+                       // try {
+                       // tid = temp[j];
+                       // } catch (NumberFormatException nfe) {
+                       // Logger.error("parseLoad - tid parsing");
+                       // break;
+                       // }
+                       // // if (null == findParentData(tid)) {
+                       // // continue;
+                       // // }
+                       //
+                       // load = (int) (Double.parseDouble(temp[j + 1]));
+                       // time = Double.parseDouble(Long.toString(input.getTime()))
+                       // / TimelineConstants.MEGA_DOUBLE;
+                       // ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+                       // ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time,
+                       // tid, String.valueOf(load)
+                       // + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT,
+                       // -1, null);
+                       // pushEvent(event);
+                       // }
+               }
+       }
+
+       private void parsePthread(ThreadData input) {
+               long time = input.getTime();
+               String pid = Integer.toString(input.getPid());
+               String tid = Integer.toString(input.getTid());
+               int apiType = input.getApiType();
+               String apiName = input.getApiName();
+               long errorNum = input.getErrno();
+               ThreadPageThreadDataEvent event;
+               String pthreadId = Long.toString(input.getPThreadId());
+
+               if (errorNum != 0) {
+                       SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
+               }
+
+               switch (apiType) {
+               case LogCenterConstants.THREAD_API_TYPE_NEW:
+               case LogCenterConstants.THREAD_API_TYPE_STOP:
+               case LogCenterConstants.THREAD_API_TYPE_EXIT:
+               case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
+               case LogCenterConstants.THREAD_API_TYPE_OTHER:
+                       if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_INIT)) {
+                               threadAttrMap.put(input.getArgs(), PTHREAD_CREATE_JOINABLE);
+                       } else if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_SETDETACHSTATE)) {
+                               checkThreadAttrType(input.getArgs());
+                       }
+
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid, apiName, errorNum,
+                                       input);
+                       pushEvent(event);
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_START:
+                       if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_CREATE)) {
+                               checkThreadType(input.getArgs(), pthreadId);
+                               checkThreadFunc(input.getArgs(), pthreadId);
+                       }
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid, apiName, errorNum,
+                                       input);
+                       event.setCallID(pthreadId);
+
+                       pushEvent(event);
+                       pushCallEvent(event);
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_WAIT_END:
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid, apiName, errorNum,
+                                       input);
+                       pushEvent(event);
+                       if (input.getApiName().equals(ThreadPageLabels.THREAD_API_PTHREAD_JOIN)) {
+                               // join, delete warning
+                               SummaryDataManager.getInstance().getWarningDataMaker()
+                                               .removeData(event.getContents(),
+                                                               ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(pthreadId),
+                                                               WarningCase.JOINABLE_LEAK.getType());
+                               // AnalyzerManager.getWarningChecker().removeData(
+                               // ThreadPageLabels.THREAD_CHART_NAME_TID
+                               // + (Long.toString(input
+                               // .getOspThreadId())),
+                               // WarningCase.JOINABLE_LEAK.getType());
+                       }
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP:
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
+                                       ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
+                       event.setCallID(pthreadId);
+                       pushEvent(event);
+                       pushCallEvent(event);
+
+                       if (true == isJoinableThread(tid)) {
+                               // warningData
+                               // WarningData wData = new WarningData(
+                               // WarningCase.JOINABLE_LEAK.getType(), input,
+                               // ThreadPageLabels.THREAD_CHART_NAME_TID + tid);
+                               // AnalyzerManager.getWarningChecker().getWarningData().add(wData);
+                               SummaryDataManager
+                                               .getInstance()
+                                               .getWarningDataMaker()
+                                               .add(input, ThreadPageLabels.THREAD_CHART_NAME_TID + tid,
+                                                               WarningCase.JOINABLE_LEAK.getType());
+                       }
+                       // FIXME add code for remove waning case
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
+                       Integer threadAttrTypeInt = threadAttrMap.get(pthreadId);
+                       String threadAttrType;
+                       int funcID;
+
+                       if (null != threadAttrTypeInt) {
+                               threadAttrType = getAttrTypeByTypeInt(threadAttrTypeInt);
+                       } else {
+                               threadAttrType = ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
+                       }
+                       // get thread function id for this pthread
+                       funcID = SymbolManager.getFuncId(null, threadFuncMap.get(pthreadId), input.getPid(),
+                                       input.getTime());
+
+                       ThreadPageThreadData data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_PTHREAD,
+                                       pid, tid, threadAttrType, funcID);
+                       pushRow(data);
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+                                       LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
+                                       ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
+                       pushEvent(event);
+                       break;
+               default:
+                       Logger.error("thread page err: unknown thread api type");
+               }
+       }
+
+       private void parseTIZEN(ThreadData input) {
+               long time = input.getTime();
+               String pid = Integer.toString(input.getPid());
+               String tid = Integer.toString(input.getTid());
+               int apiType = input.getApiType();
+               String apiName = input.getApiName();
+               String callID = Long.toString(input.getOspThreadId());
+               String className = null;
+               ThreadPageThreadData data;
+               ThreadPageThreadDataEvent event;
+               long errorNum = input.getErrno();
+
+               if (errorNum != 0) {
+                       SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
+               }
+
+               switch (apiType) {
+               case LogCenterConstants.THREAD_API_TYPE_NEW:
+               case LogCenterConstants.THREAD_API_TYPE_STOP:
+               case LogCenterConstants.THREAD_API_TYPE_EXIT:
+               case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
+               case LogCenterConstants.THREAD_API_TYPE_OTHER:
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+                                       LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid, apiName, errorNum,
+                                       input);
+                       pushEvent(event);
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_START:
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+                                       LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid, apiName, errorNum,
+                                       input);
+
+                       event.setCallID(callID);
+                       data = findCallQueue(callID);
+                       if (null != data) {
+                               data.setThreadClassName(input.getClassName());
+                               pushRow(data);
+                       }
+                       pushEvent(event);
+                       pushCallEvent(event);
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_WAIT_END:
+                       if (input.getApiName().equals(ThreadPageLabels.THREAD_API_TIZEN_JOIN)) {
+                               event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+                                               LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid, apiName,
+                                               errorNum, input);
+                               pushEvent(event);
+                               // join, delete warning
+                               // AnalyzerManager.getWarningChecker().removeData(
+                               // ThreadPageLabels.THREAD_CHART_NAME_TID
+                               // + findCallerTid(Long.toString(input
+                               // .getOspThreadId())),
+                               // WarningCase.JOINABLE_LEAK.getType());
+                               SummaryDataManager
+                                               .getInstance()
+                                               .getWarningDataMaker()
+                                               .removeData(event.getContents(),
+                                                               ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(callID),
+                                                               WarningCase.JOINABLE_LEAK.getType());
+                       } // FIXME : do not shows sleep's wait end
+
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP:
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+                                       LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid,
+                                       ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
+                       event.setCallID(Long.toString(input.getOspThreadId()));
+                       pushEvent(event);
+                       pushCallEvent(event);
+                       if (true == isJoinableThread(tid)) {
+                               // warningData
+                               // WarningData wData = new WarningData(
+                               // WarningCase.JOINABLE_LEAK.getType(),
+                               // event.getContents(),
+                               // ThreadPageLabels.THREAD_CHART_NAME_TID + tid);
+                               // AnalyzerManager.getWarningChecker().getWarningData().add(wData);
+                               SummaryDataManager
+                                               .getInstance()
+                                               .getWarningDataMaker()
+                                               .add(event.getContents(), ThreadPageLabels.THREAD_CHART_NAME_TID + tid,
+                                                               WarningCase.JOINABLE_LEAK.getType());
+                       }
+                       break;
+               case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
+                       data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_TIZEN, pid, tid,
+                                       ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE, -1);
+                       // TIZEN thread includes the internal thread
+                       if ((className = checkCalledThread(callID)) != null) {
+                               data.setThreadClassName(className);
+                               pushRow(data);
+                       } else {
+                               pushCallRow(data);
+                       }
+                       event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+                                       LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid,
+                                       ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
+                       pushEvent(event);
+                       break;
+               default:
+                       Logger.error("thread page err: unknown thread api type");
+               }
+       }
+
+       public void parseAPI(LogData input) {
+               if (null == input) {
+                       return;
+               }
+
+               if (!(input instanceof ThreadData)) {
+                       return;
+               }
+               ThreadData log = (ThreadData) input;
+               // System.out.println("input : " + input);
+               int threadType = log.getThreadType();
+
+               switch (threadType) {
+               case LogCenterConstants.THREAD_TYPE_PTHREAD:
+                       parsePthread(log);
+                       break;
+               case LogCenterConstants.THREAD_TYPE_TIZEN:
+                       parseTIZEN(log);
+                       break;
+               default:
+                       Logger.error("thread page err: unknown thread type");
+
+               }
+               hasUpdate = true;
+       }
+
+       private void parseAPI(LogPackage logPack) {
+               List<LogData> inputs = getLogsFromLogPackage(logPack, DataChannelConstants.MSG_PROBE_THREAD);
+               int size;
+               if (null == inputs || 0 == (size = inputs.size())) {
+                       return;
+               }
+               ThreadData input;
+               for (int i = 0; i < size; i++) {
+                       input = (ThreadData) inputs.get(i);
+                       // System.out.println("input : " + input);
+                       int threadType = input.getThreadType();
+
+                       switch (threadType) {
+                       case LogCenterConstants.THREAD_TYPE_PTHREAD:
+                               parsePthread(input);
+                               break;
+                       case LogCenterConstants.THREAD_TYPE_TIZEN:
+                               parseTIZEN(input);
+                               break;
+                       default:
+                               Logger.error("thread page err: unknown thread type");
+                       }
+               }
+       }
+
+       public void parseSync(LogData input) {
+               if (null == input || !(input instanceof SyncData)) {
+                       return;
+               }
+               SyncData syncData = (SyncData) input;
+               long time = input.getTime();
+               String tid = Integer.toString(syncData.getTid());
+
+               // FIXME
+               int type = syncData.getSyncType();
+               int apiType = syncData.getApiType();
+               String apiName = syncData.getApiName();
+
+               String name = Long.toString(syncData.getSyncValue());
+               long errorNum = syncData.getErrno();
+               ThreadPageSyncDataEvent event;
+               switch (type) {
+               case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+               case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+               case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName, errorNum,
+                                       input);
+                       pushSyncEvent(event);
+                       // parseTIZENSync(input, type);
+                       break;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                       if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+                               syncAttrMap.put(syncData.getArgs(), ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL);
+                       } else if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+                               checkMutexAttrType(syncData.getArgs());
+                       } else {
+                               if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+                                       checkMutexType(syncData.getArgs());
+                               }
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+                                               errorNum, input);
+                               pushSyncEvent(event);
+                       }
+                       break;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName, errorNum,
+                                       input);
+                       pushSyncEvent(event);
+                       Logger.error("error : sync parse - type = " + type);
+                       break;
+               default:
+                       Logger.error("error : sync parse unknown - type = " + type);
+               }
+               hasUpdate = true;
+       }
+
+       private void parseSync(LogPackage logPack) {
+               List<LogData> inputs = getLogsFromLogPackage(logPack, DataChannelConstants.MSG_PROBE_SYNC);
+               int size;
+               if (null == inputs || 0 == (size = inputs.size())) {
+                       return;
+               }
+               SyncData input;
+               for (int i = 0; i < size; i++) {
+                       input = (SyncData) inputs.get(i);
+                       long time = input.getTime();
+                       String tid = Integer.toString(input.getTid());
+
+                       // FIXME
+                       int type = input.getSyncType();
+                       int apiType = input.getApiType();
+                       String apiName = input.getApiName();
+
+                       String name = Long.toString(input.getSyncValue());
+                       long errorNum = input.getErrno();
+                       ThreadPageSyncDataEvent event;
+                       switch (type) {
+                       case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+                       case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+                       case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+                                               errorNum, input);
+                               pushSyncEvent(event);
+                               // parseTIZENSync(input, type);
+                               break;
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                               if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+                                       syncAttrMap
+                                                       .put(input.getArgs(), ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL);
+                               } else if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+                                       checkMutexAttrType(input.getArgs());
+                               } else {
+                                       if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+                                               checkMutexType(input.getArgs());
+                                       }
+                                       event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+                                                       errorNum, input);
+                                       pushSyncEvent(event);
+                               }
+                               break;
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+                                               errorNum, input);
+                               pushSyncEvent(event);
+                               Logger.debug("sync parse - type = " + type);
+                               break;
+                       default:
+                               Logger.error("sync parse unknown - type = " + type);
+                       }
+               }
+       }
+
+       public void parsePageData(LogPackage logPack) {
+               parseLoad(logPack);
+               parseAPI(logPack);
+               parseSync(logPack);
+               hasUpdate = true;
+       }
+
+       // when INTERNAL_START log comes after START log,
+       // this method finds matching START log (for TIZEN thread only)
+       // return class name from the START log
+       private String checkCalledThread(String callId) {
+               if (null == callId) {
+                       return null;
+               }
+               int callEventQueueSize = callEventQueue.size();
+               ThreadPageThreadDataEvent callEvent;
+               for (int i = 0; i < callEventQueueSize; i++) {
+                       callEvent = callEventQueue.get(i);
+                       if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
+                               continue;
+                       }
+                       if (callId.equals(callEvent.getCallID())) {
+                               ThreadData threadData = (ThreadData) callEvent.getContents();
+                               return threadData.getClassName();
+                       }
+               }
+               return null;
+       }
+
+       private String getCallEventID(String callID) {
+               if (null == callID) {
+                       return null;
+               }
+               int eventQueueSize = eventQueue.size();
+               ThreadPageThreadDataEvent event;
+               for (int i = 0; i < eventQueueSize; i++) {
+                       event = eventQueue.get(i);
+                       if (event.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
+                               continue;
+                       }
+                       if (callID.equals(event.getCallID())) {
+                               return event.getTid();
+                       }
+               }
+               return null;
+       }
+
+       private ThreadPageThreadData findCallQueue(String callID) {
+               String tid = getCallEventID(callID);
+
+               int size;
+               size = callRowsQueue.size();
+               ThreadPageThreadData ret;
+               for (int i = 0; i < size; i++) {
+                       ret = callRowsQueue.get(i);
+
+                       if (ret.getTid().equals(tid)) {
+                               callRowsQueue.remove(i);
+                               return ret;
+                       }
+               }
+               return null;
+       }
+
+       private boolean isJoinableThreadFromQueue(List<ThreadPageThreadData> queue, String tid) {
+               int size;
+               size = queue.size();
+               for (int i = 0; i < size; i++) {
+                       if (true == queue.get(i).getTid().equals(tid)) {
+                               if (true == queue.get(i).getAttrType()
+                                               .equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+
+       private boolean isJoinableThread(String tid) {
+               boolean ret;
+
+               ret = isJoinableThreadFromQueue(rows, tid);
+               if (ret == false) {
+                       ret = isJoinableThreadFromQueue(rowsQueue, tid);
+               }
+               return ret;
+       }
+
+       private void checkThreadAttrType(String input) {
+               String[] temp = input.split(",");
+               if (temp.length != 2) {
+                       return;
+               }
+               String obj = temp[0];
+               String type = temp[1].trim();
+
+               if (null != threadAttrMap.get(obj)) {
+                       threadAttrMap.put(obj, Integer.valueOf(type));
+               }
+       }
+
+       private void checkThreadType(String args, String pthreadId) {
+               String[] temp = args.split(",");
+               if (temp.length != 4) {
+                       return;
+               }
+               String attrObj = temp[1].trim();
+
+               Integer attrType = threadAttrMap.get(attrObj);
+               if (attrType != null) {
+                       threadAttrMap.put(pthreadId, attrType);
+               }
+       }
+
+       // extract function address from arguments of thread create function,
+       // (e.g. int pthread_create(pthread_t *, const pthread_attr_t *, void
+       // *(*)(void *), void *); )
+       // put (pthreadId, function address) in the map
+       private void checkThreadFunc(String args, String pthreadId) {
+               String[] temp = args.split(",");
+               if (temp.length != 4) {
+                       return;
+               }
+               // 3rd argument is function address
+               String strFuncAddr = temp[2].trim();
+               Long funcAddr = Long.decode(strFuncAddr);
+
+               threadFuncMap.put(pthreadId, funcAddr);
+       }
+
+       private void checkMutexAttrType(String input) {
+               String[] temp = input.split(",");
+               if (temp.length != 2) {
+                       return;
+               }
+               String obj = temp[0];
+               String type = temp[1].trim();
+
+               if (null != syncAttrMap.get(obj)) {
+                       syncAttrMap.put(obj, Integer.valueOf(type));
+               }
+       }
+
+       private void checkMutexType(String input) {
+               String[] temp = input.split(",");
+               if (temp.length != 2) {
+                       return;
+               }
+               String obj = temp[0];
+               String attrObj = temp[1].trim();
+
+               Integer attrType = syncAttrMap.get(attrObj);
+               if (attrType != null) {
+                       syncAttrMap.put(obj, attrType);
+               }
+       }
+
+       protected DAChartBoard getBoard() {
+               return board;
+       }
+
+       public void setBoard(DAChartBoard board) {
+               this.board = board;
+       }
+
+       private String findCallerTid(String id) {
+               int callEventQueueSize = callEventQueue.size();
+               ThreadPageThreadDataEvent callEvent;
+               for (int i = 0; i < callEventQueueSize; i++) {
+                       callEvent = callEventQueue.get(i);
+                       if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
+                               continue;
+                       }
+                       String callerTID = callEvent.getCallID();
+
+                       if (callerTID != null && callerTID.equals(id)) {
+                               return callEvent.getTid();
+                       }
+               }
+               return null;
+       }
+
+       private boolean checkPairEvent(ThreadPageThreadDataEvent event) {
+               if (event.getEventType() != ThreadPageThreadDataEvent.TYPE_EVENT) {
+                       return true;
+               }
+               int apiType = event.getApiType();
+               int threadType = event.getThreadType();
+               ThreadData tData = (ThreadData) event.getContents();
+               if (LogCenterConstants.THREAD_API_TYPE_INTERNAL_START == apiType) {
+                       int callEventQueueSize = callEventQueue.size();
+                       ThreadPageThreadDataEvent callEvent;
+                       for (int i = 0; i < callEventQueueSize; i++) {
+                               callEvent = callEventQueue.get(i);
+                               if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
+                                       continue;
+                               } else if (callEvent.getThreadType() != threadType) {
+                                       continue;
+                               } else {
+                                       if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
+                                               String callerTizenID = callEvent.getCallID();
+                                               String eventTizenID = Long.toString(tData.getOspThreadId());
+                                               if (eventTizenID.equals(callerTizenID)) {
+                                                       event.setCallerTid(callEvent.getTid());
+                                                       callEventQueue.remove(i);
+                                                       return true;
+                                               }
+                                       } else {
+                                               String callerPthreadID = callEvent.getCallID();
+                                               String eventPthreadID = Long.toString(tData.getPThreadId());
+                                               if (eventPthreadID.equals(callerPthreadID)) {
+                                                       event.setCallerTid(callEvent.getTid());
+                                                       callEventQueue.remove(i);
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       }
+                       return false;
+               } else if (LogCenterConstants.THREAD_API_TYPE_WAIT_END == apiType) {
+                       if (!event.isJoinAPI()) {
+                               return true;
+                       }
+
+                       int callEventQueueSize = callEventQueue.size();
+                       ThreadPageThreadDataEvent callEvent;
+                       for (int i = 0; i < callEventQueueSize; i++) {
+                               callEvent = callEventQueue.get(i);
+                               if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
+                                       continue;
+                               } else if (callEvent.getThreadType() != threadType) {
+                                       continue;
+                               } else {
+                                       if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
+                                               String callerTizenID = callEvent.getCallID();
+                                               String eventTizenID = Long.toString(tData.getOspThreadId());
+                                               if (eventTizenID.equals(callerTizenID)) {
+                                                       event.setCallerTid(callEvent.getTid());
+                                                       if (null == callEvent.getChartItem()) {
+                                                               callEvent.setCallerTid(event.getTid());
+                                                       } else {
+                                                               // join, delete warning
+                                                               SummaryDataManager
+                                                                               .getInstance()
+                                                                               .getWarningDataMaker()
+                                                                               .removeData(
+                                                                                               event.getContents(),
+                                                                                               ThreadPageLabels.THREAD_CHART_NAME_TID
+                                                                                                               + callEvent.getTid(),
+                                                                                               WarningCase.JOINABLE_LEAK.getType());
+                                                               // AnalyzerManager.getWarningChecker().removeData(
+                                                               // ThreadPageLabels.THREAD_CHART_NAME_TID
+                                                               // + callEvent.getTid(),
+                                                               // WarningCase.JOINABLE_LEAK.getType());
+                                                               callEvent.getChartItem().setY(DAChartSeriesItem.SERIES_ARROW_RIGHT);
+                                                               callEvent.getChartItem().setBarWidth(
+                                                                               Double.parseDouble(event.getTid()));
+                                                       }
+                                                       callEventQueue.remove(i);
+                                                       return true;
+                                               }
+                                       } else {
+                                               String callerPthreadID = callEvent.getCallID();
+                                               String eventPthreadID = Long.toString(tData.getPThreadId());
+                                               if (eventPthreadID.equals(callerPthreadID)) {
+                                                       event.setCallerTid(callEvent.getTid());
+                                                       if (null == callEvent.getChartItem()) {
+                                                               callEvent.setCallerTid(event.getTid());
+                                                       } else {
+                                                               callEvent.getChartItem().setY(DAChartSeriesItem.SERIES_ARROW_RIGHT);
+                                                               callEvent.getChartItem().setBarWidth(
+                                                                               Double.parseDouble(event.getTid()));
+                                                       }
+                                                       callEventQueue.remove(i);
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       }
+                       return false;
+               } else {
+                       return true;
+               }
+       }
+
+       private ThreadPageThreadData findParentData(String tid) {
+               int size = rows.size();
+               ThreadPageThreadData ret;
+               for (int i = 0; i < size; i++) {
+                       ret = rows.get(i);
+                       if (ret.getTid().equals(tid)) {
+                               return ret;
+                       }
+               }
+               return null;
+       }
+
+       private void chartFilteringByPid() {
+               if (null == board || null == board.getItemList()) {
+                       return;
+               }
+               int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+               boolean isCheck = false;
+
+               if (eventQueue.size() > 0) {
+                       isCheck = true;
+               }
+
+               if (preSelectionPid != -1 && preSelectionPid != selectedPid) {
+                       isCheck = true;
+               }
+
+               if (isCheck) {
+                       int parentSize = board.getItemList().getItemSize();
+                       for (int i = 0; i < parentSize; i++) {
+                               DAChartBoardItem parentItem = board.getItemList().get(i);
+                               /*
+                                * int childSize = parentItem.getChildItemList().getItemSize(); int hidedCount = 0;
+                                * for (int j = 0; j < childSize; j++) { DAChartBoardItem childItem =
+                                * parentItem.getChildItemList() .get(j); int itemPid = getItemPid(childItem); if
+                                * (itemPid == selectedPid) { parentItem.getChildItemList().showItem(j);
+                                * board.showItem(i); } else if (selectedPid == 0) {
+                                * parentItem.getChildItemList().showItem(j); board.showItem(i); } else if (itemPid
+                                * == -1) { board.showItem(i); } else { parentItem.getChildItemList().hideItem(j);
+                                * hidedCount++; } } if (childSize == 0) { int itemPid = getItemPid(parentItem); if
+                                * (itemPid == selectedPid) { board.showItem(i); } else if (selectedPid == 0) {
+                                * board.showItem(i); } else if (itemPid == -1) { board.showItem(i); } else {
+                                * board.hideItem(i); hidedCount++; } } else { if (childSize == hidedCount) {
+                                * board.hideItem(i); } }
+                                */
+                               int itemPid = getItemPid(parentItem);
+                               if (itemPid == selectedPid) {
+                                       board.showItem(i);
+                               } else if (selectedPid == 0) {
+                                       board.showItem(i);
+                               } else if (itemPid == -1) {
+                                       board.showItem(i);
+                               } else {
+                                       board.hideItem(i);
+                               }
+                       }
+               }
+               preSelectionPid = selectedPid;
+       }
+
+       private int getItemPid(DAChartBoardItem item) {
+               int pid = -1;
+               if (item.getData() instanceof ThreadPageData) {
+                       ThreadPageData threadPageData = (ThreadPageData) item.getData();
+                       pid = Integer.parseInt(threadPageData.getPid());
+               }
+               return pid;
+       }
+
+       // TODO: syncDataManager has same method : move this method to proper class
+       private int getSortObject(DAChartBoardItem item) {
+               Object sortObj = item.getSortObject();
+               if (sortObj instanceof Integer) {
+                       return (Integer) sortObj;
+               } else { // should never go here
+                       return -1;
+               }
+       }
+
+       public void checkUpdate() {
+               if (false == hasUpdate && preSelectionPid == ToolbarArea.getInstance().getSelectedPid()) {
+                       return;
+               } else {
+                       hasUpdate = false;
+               }
+
+               int size = rowsQueue.size();
+               if (size > 0) {
+                       ThreadPageThreadData data;
+                       for (int i = 0; i < size; i++) {
+                               data = rowsQueue.get(0);
+                               // sort chart items at each insertion
+                               createBoardItem(data, new Comparator<DAChartBoardItem>() {
+                                       public int compare(DAChartBoardItem item1, DAChartBoardItem item2) {
+                                               return getSortObject(item1) - getSortObject(item2);
+                                       }
+                               });
+                               rows.add(data);
+                               rowsQueue.remove(0);
+                       }
+               }
+
+               chartFilteringByPid();
+
+               size = eventQueue.size();
+               if (size > 0) {
+                       ThreadPageThreadData data;
+                       ThreadPageThreadDataEvent event;
+                       int remainCalleeEventCount = 0;
+                       for (int i = 0; i < size; i++) {
+                               event = eventQueue.get(remainCalleeEventCount);
+                               if (false == checkPairEvent(event)) {
+                                       remainCalleeEventCount++;
+                               } else {
+                                       data = findParentData(event.getTid());
+                                       if (null != data) {
+                                               data.pushEvent(event);
+                                               event.setThreadDataID(data.getThreadDataID());
+                                               // save to DB
+                                               ThreadEventInserter.pushThreadEvent(event);
+                                               ThreadEventInserter.startThread();
+                                               eventQueue.remove(remainCalleeEventCount);
+                                       } else {
+                                               remainCalleeEventCount++;
+                                       }
+                               }
+                       }
+               }
+
+               /* load ThreadPageSyncData when open trace */
+               size = syncQueue.size();
+               if (size > 0) {
+                       ThreadPageThreadData data;
+                       ThreadPageSyncData sync;
+                       for (int i = 0; i < size; i++) {
+                               sync = syncQueue.get(0);
+                               data = findParentData(sync.getTid());
+                               if (null != data) {
+                                       createSyncBoardItem(data, sync);
+                                       data.pushSync(sync);
+                                       data.setHasUpdate();
+                               }
+                               syncQueue.remove(0);
+                       }
+               }
+
+               size = syncEventQueue.size();
+               if (size > 0) {
+                       ThreadPageThreadData data;
+                       ThreadPageSyncDataEvent event;
+                       ThreadPageSyncData sync;
+                       for (int i = 0; i < size; i++) {
+                               event = syncEventQueue.get(0);
+                               String pid = Integer.toString(event.getContents().getPid());
+                               data = findParentData(event.getTid());
+                               if (null != data) {
+                                       String syncVal = event.getSyncVal();
+                                       sync = data.findSyncData(syncVal);
+                                       if (null == sync) {
+                                               Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
+                                               String syncAttrType;
+                                               if (null != syncAttrTypeInt) {
+                                                       syncAttrType = ThreadPageSyncDataManager
+                                                                       .getAttrTypeByTypeInt(syncAttrTypeInt);
+                                               } else {
+                                                       syncAttrType = ThreadPageSyncDataManager.getAttrTypeString(event);
+                                               }
+
+                                               sync = new ThreadPageSyncData(event.getType(), syncVal, pid,
+                                                               event.getTid(), syncAttrType, ThreadPageSyncData.THREAD_CHILD);
+                                               sync.setParentID(data.getThreadDataID());
+                                               // save to DB
+                                               SyncDataInserter.pushSyncData(sync);
+                                               SyncDataInserter.startThread();
+                                               createSyncBoardItem(data, sync);
+                                               data.pushSync(sync);
+                                       }
+                                       sync.pushEvent(event);
+                                       event.setSyncDataID(sync.getSyncDataID());
+                                       // save to DB
+                                       SyncEventInserter.pushSyncEvent(event);
+                                       SyncEventInserter.startThread();
+                                       // save syncAPI to DB
+                                       if (ThreadPageSyncData.isSyncApi(event.getApiType())) {
+                                               SyncAPIInserter.pushSyncEvent((SyncData) event.getContents());
+                                               SyncAPIInserter.startThread();
+                                       }
+                                       data.setHasUpdate();
+                               }
+                               syncEventQueue.remove(0);
+                       }
+               }
+
+               size = rows.size();
+               if (size > 0) {
+                       ThreadPageThreadData data;
+                       for (int i = 0; i < size; i++) {
+                               data = rows.get(i);
+                               data.checkUpdate();
+                       }
+               }
+       }
+
+       public int getItemIndexByTid(String tid) {
+               int itemSize = rows.size();
+               for (int i = 0; i < itemSize; i++) {
+                       if (rows.get(i).getTid().equals(tid)) {
+                               return i;
+                       }
+               }
+               return -1;
+       }
+
+       public void clear() {
+               rows.clear(); // FIXME : clear chart
+               rowsQueue.clear();
+               eventQueue.clear();
+               callEventQueue.clear();
+               threadAttrMap.clear();
+               syncAttrMap.clear();
+               callRowsQueue.clear();
+               syncEventQueue.clear();
+               threadFuncMap.clear();
+               hasUpdate = false;
+               ThreadPageThreadData.clear(); // reset internal seq number
+       }
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageData.java
deleted file mode 100644 (file)
index d6da578..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-package org.tizen.dynamicanalyzer.ui.thread.type;
-
-public abstract class ThreadPageData {
-       private String pid;
-       private int tid;
-       private int type;
-       private String key;
-       private String attrType;
-
-       public ThreadPageData(int type, String name, String pid, int tid, String attrType) {
-               setType(type);
-               setKey(name);
-               setPid(pid);
-               setTid(tid);
-               setAttrType(attrType);
-       }
-
-       public int getTid() {
-               return tid;
-       }
-
-       public void setTid(int tid) {
-               this.tid = tid;
-       }
-
-       public String getPid() {
-               return pid;
-       }
-
-       public void setPid(String pid) {
-               this.pid = pid;
-       }
-
-       public int getType() {
-               return type;
-       }
-
-       public void setType(int type) {
-               this.type = type;
-       }
-
-       public String getKey() {
-               return key;
-       }
-
-       public void setKey(String name) {
-               this.key = name;
-       }
-
-       public String getAttrType() {
-               return attrType;
-       }
-
-       public void setAttrType(String attrType) {
-               this.attrType = attrType;
-       }
-
-}
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncData.java
deleted file mode 100644 (file)
index 31cc95c..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-package org.tizen.dynamicanalyzer.ui.thread.type;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadPageSyncData extends ThreadPageData {
-       private List<ThreadPageSyncData> children = new ArrayList<ThreadPageSyncData>();
-
-       public static final byte SYNC_PARENT = 0;
-       public static final byte SYNC_CHILD = 1;
-       public static final byte THREAD_CHILD = 2;
-
-       private static int internalSeq = 0;
-       private int syncDataID = -1;
-       private byte syncDataType = -1;
-       private int parentID = -1;
-
-       public ThreadPageSyncData(int type, String name, String pid, int tid, String attrType,
-                       byte syncDataType) {
-               super(type, name, pid, tid, attrType);
-               this.syncDataType = syncDataType;
-               syncDataID = internalSeq++;
-       }
-
-       public ThreadPageSyncData(int id, int pid, int tid, int type, long syncValue, String attrType,
-                       byte syncDataType, int parentID) {
-               super(type, String.valueOf(syncValue), String.valueOf(pid), tid, attrType);
-               this.syncDataID = id;
-               this.syncDataType = syncDataType;
-               this.parentID = parentID;
-       }
-
-       public void pushSync(ThreadPageSyncData sync) {
-               children.add(sync);
-       }
-
-       public ThreadPageSyncData findChildData(int tId) {
-               int size = children.size();
-               ThreadPageSyncData ret;
-               for (int i = 0; i < size; i++) {
-                       ret = children.get(i);
-                       if (ret.getTid() == tId) {
-                               return ret;
-                       }
-               }
-               return null;
-       }
-
-       public List<ThreadPageSyncData> getChildren() {
-               return children;
-       }
-
-       public static boolean isSyncApi(int apiType) {
-               if (apiType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START) {
-                       return false;
-               }
-               if (apiType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START) {
-                       return false;
-               }
-               return true;
-       }
-
-       public String getTypeString() {
-               switch (getType()) {
-               case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
-                       return ThreadPageLabels.SYNC_TYPE_TIZEN_MUTEX;
-               case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
-                       return ThreadPageLabels.SYNC_TYPE_TIZEN_MONITOR;
-               case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
-                       return ThreadPageLabels.SYNC_TYPE_TIZEN_SEMAPHORE;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
-                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_MUTEX;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
-                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_COND_VARIABLE;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
-                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_RWLOCK;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
-                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_SPINLOCK;
-               case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
-                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_BARRIER;
-               default:
-                       Logger.error("unknown sync type!!");
-                       return CommonConstants.EMPTY;
-               }
-       }
-
-       public int getSyncDataID() {
-               return syncDataID;
-       }
-
-       public byte getSyncDataType() {
-               return syncDataType;
-       }
-
-       public int getParentID() {
-               return parentID;
-       }
-
-       public void setParentID(int parentID) {
-               this.parentID = parentID;
-       }
-
-       public static void clear() {
-               internalSeq = 0;
-       }
-}
\ No newline at end of file
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadData.java
deleted file mode 100644 (file)
index 28802b7..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *  Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: 
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@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
- * 
- */
-package org.tizen.dynamicanalyzer.ui.thread.type;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.util.Logger;
-import org.tizen.dynamicanalyzer.utils.Formatter;
-
-public class ThreadPageThreadData extends ThreadPageData {
-       private List<ThreadPageSyncData> syncs = new ArrayList<ThreadPageSyncData>();
-       private long StartTime = -1;
-       private long EndTime = -1;
-       private int threadFuncID;
-       private String threadClassName = CommonConstants.EMPTY;
-
-       public static final byte TYPE_MAIN = 0;
-       public static final byte TYPE_PTHREAD = 1;
-       public static final byte TYPE_TIZEN = 2;
-
-       private static int internalSeq = 0;
-       private int threadDataID = -1;
-
-       public ThreadPageThreadData(int type, String pid, int tid, String attrType, int funcID) {
-               super(type, String.valueOf(tid), pid, tid, attrType);
-               this.threadFuncID = funcID;
-               threadDataID = internalSeq++;
-       }
-
-       public ThreadPageThreadData(int id, int pid, int tid, int threadType, String attrType,
-                       long startTime, long endTime, int functionID, String className) {
-               super(threadType, String.valueOf(tid), String.valueOf(pid), tid, attrType);
-               this.threadDataID = id;
-               this.threadFuncID = functionID;
-               this.StartTime = startTime;
-               this.EndTime = endTime;
-               this.threadClassName = className;
-       }
-
-       public int getThreadFuncID() {
-               return threadFuncID;
-       }
-
-       public String getThreadFuncName() {
-               if (threadFuncID == -1) {
-                       return CommonConstants.EMPTY;
-               } else {
-                       return Global.getFunctionName(threadFuncID);
-               }
-       }
-
-       public String getThreadClassName() {
-               return threadClassName;
-       }
-
-       public void setThreadClassName(String className) {
-               threadClassName = className;
-       }
-
-       public void pushSync(ThreadPageSyncData sync) {
-               syncs.add(sync);
-       }
-
-       public ThreadPageSyncData findSyncData(String syncVal) {
-               int size = syncs.size();
-               ThreadPageSyncData sync;
-               for (int i = 0; i < size; i++) {
-                       sync = syncs.get(i);
-                       if (sync.getKey().equals(syncVal)) {
-                               return sync;
-                       }
-               }
-               return null;
-       }
-
-       public String getTypeString() {
-               switch (getType()) {
-               case TYPE_MAIN:
-                       return ThreadPageLabels.THREAD_ITEM_TYPE_MAIN;
-               case TYPE_PTHREAD:
-                       return ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD;
-               case TYPE_TIZEN:
-                       return ThreadPageLabels.THREAD_ITEM_TYPE_TIZEN;
-               default:
-                       Logger.error("unknown thread type!!");
-                       return CommonConstants.EMPTY;
-               }
-       }
-
-       public long getStartTime() {
-               return StartTime;
-       }
-
-       public void setStartTime(long startTime) {
-               StartTime = startTime;
-       }
-
-       public String getStartTimeString() {
-               if (StartTime == -1) {
-                       return null;
-               } else {
-                       double startTime = Formatter.longTimeToDoubleTime(StartTime);
-                       return String.valueOf(startTime);
-               }
-       }
-
-       public long getEndTime() {
-               return EndTime;
-       }
-
-       public void setEndTime(long endTime) {
-               EndTime = endTime;
-       }
-
-       public String getEndTimeString() {
-               if (EndTime == -1) {
-                       return null;
-               } else {
-                       double endTime = Formatter.longTimeToDoubleTime(EndTime);
-                       return String.valueOf(endTime);
-               }
-       }
-
-       public int getThreadDataID() {
-               return threadDataID;
-       }
-
-       public static void clear() {
-               internalSeq = 0;
-       }
-}
\ No newline at end of file
index 9810000..92b9873 100644 (file)
@@ -53,11 +53,6 @@ public class FunctionEntryDBTable extends DBTable {
        public static final String SELECT_QUERY = 
                        "select " + SELECT_COLUMN + " from " + TABLENAME + 
                        "  where " + COLUMN.STARTTIME.name + " >= %s and " + COLUMN.STARTTIME.name + " <= %s";
-       // to make callstack for sample, probe
-       public static final String USERCALLSTACK_QUERY =
-                       "select " + COLUMN.SEQ.name + " from " + TABLENAME + 
-                       " where " + COLUMN.STARTTIME.name + " = (select max( " + COLUMN.STARTTIME.name +
-                       ") from " + TABLENAME + " where " + COLUMN.STARTTIME.name + " <= %s )";
        
        public enum COLUMN {
                SEQ(0, "SEQNUMBER"),
index 2eef100..4407dd2 100644 (file)
@@ -56,11 +56,6 @@ public class FunctionExitDBTable extends DBTable {
                        CommonConstants.COMMA + FunctionEntryDBTable.TABLENAME + " where " + 
                        COLUMN.ENTRYSEQ.name + CommonConstants.EQUAL + FunctionEntryDBTable.COLUMN.SEQ.name +
                        " and " + COLUMN.ENDTIME.name + " >= %s and " + COLUMN.ENDTIME.name + " <= %s";
-       // to make callstack for sample, probe
-       public static final String USERCALLSTACK_QUERY =
-                       "select " + COLUMN.EXITSEQ.name + " from " + TABLENAME + 
-                       " where " + COLUMN.ENDTIME.name + " = (select max( " + COLUMN.ENDTIME.name +
-                       ") from " + TABLENAME + " where " + COLUMN.ENDTIME.name + " <= %s )";
        
        public enum COLUMN {
                ENTRYSEQ(0, "EntrySEQNUMBER"),
index ad58cc1..06440a2 100644 (file)
@@ -29,8 +29,6 @@ package org.tizen.dynamicanalyzer.ui.timeline.chart;
 
 import java.io.File;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.eclipse.swt.SWTException;
 import org.eclipse.swt.graphics.Image;
@@ -52,8 +50,7 @@ public class ScreenshotChart extends TimelineChart {
        public static ScreenshotChart instance = null;
 
        private DAChartSeries screenshotSeries;
-       private Map<String, Image> imageMap = new ConcurrentHashMap<String, Image>();
-       
+
        public static ScreenshotChart getInstance() {
                if (instance == null) {
                        instance = new ScreenshotChart();
@@ -91,7 +88,7 @@ public class ScreenshotChart extends TimelineChart {
        public DAChart getChart() {
                return chart;
        }
-       
+
        @Override
        public void inputChartSeries(List<Object> dataList) {
                screenshotSeries.clear();
@@ -105,44 +102,29 @@ public class ScreenshotChart extends TimelineChart {
                                / TimelineConstants.MEGA_DOUBLE;
                        String fileName = (String)row.get(ScreenShotDBTable.COLUMN.IMAGE_FILE_PATH.ordinal());
                        int orientation = (Integer)row.get(ScreenShotDBTable.COLUMN.IMAGE_ORIENTATION.ordinal());
-                               if (Global.getProject() == null) {
-                                       return;
-                               }
-                                       String imagePath = Global.getProject().getSavePath()
-                                               + File.separator + AnalyzerConstants.IMAGE_FOLDER_NAME
-                                               + File.separator
-                                               + AnalyzerConstants.SMALL_IMAGE_FOLDER_NAME
-                                               + File.separator 
-                                               + fileName;
-                                       int yPosition;
-                                       if (orientation == 0 || orientation == 180) { //$NON-NLS-1$ //$NON-NLS-2$
-                                               yPosition = 10;
-                                       } else {
-                                               yPosition = 23;
-                                       }
-                                       
-                                       /*
-                                        * 1 image need 1 thread.
-                                        */
-                                       if (imageMap.containsKey(imagePath)) {
-                                               Image image = imageMap.get(imagePath);
-                                               screenshotSeries.addSeriesItem(new DAChartSeriesItem(time,
-                                                               yPosition, image));
-                                       } else {
-                                               Thread createImageThread = new Thread(null, new CreateImageThread(
-                                                               imagePath, time, yPosition), "small image getter thread");
-                                               createImageThread.start();
-                                       }
+               if (Global.getProject() == null) {
+                       return;
+               }
+                       String imagePath = Global.getProject().getSavePath()
+                               + File.separator + AnalyzerConstants.IMAGE_FOLDER_NAME
+                               + File.separator
+                               + AnalyzerConstants.SMALL_IMAGE_FOLDER_NAME
+                               + File.separator 
+                               + fileName;
+                       int yPostion;
+                       if (orientation == 0 || orientation == 180) { //$NON-NLS-1$ //$NON-NLS-2$
+                               yPostion = 10;
+                       } else {
+                               yPostion = 23;
+                       }
+                       
+                       Thread createImageThread = new Thread(null, new CreateImageThread(
+                               imagePath, time, yPostion), "small image getter thread");
+                       createImageThread.start();
                    }
                } catch (NumberFormatException ne) {
-                       ne.printStackTrace();
-               }
-       }
-
-       @Override
-       public void clear() {
-               super.clear();
-               imageMap.clear();
+                       ne.printStackTrace();
+               }
        }
        
        private class CreateImageThread extends Thread {
@@ -159,10 +141,10 @@ public class ScreenshotChart extends TimelineChart {
                public void run() {
                        Image image = null;
                        int count = 0;
+
                        while (true && count < 5) {
                                try {
                                        image = new Image(Display.getDefault(), imagePath);
-                                       imageMap.put(imagePath, image);
                                        break;
                                } catch (SWTException se) {
                                        count++;
@@ -178,7 +160,6 @@ public class ScreenshotChart extends TimelineChart {
                                screenshotSeries.addSeriesItem(new DAChartSeriesItem(time,
                                                yPosition, image));
                        } else {
-                               imageMap.put(imagePath, ImageResources.NO_IMAGE_SMALL);
                                screenshotSeries.addSeriesItem(new DAChartSeriesItem(time,
                                                yPosition, ImageResources.NO_IMAGE_SMALL));
                        }
index ad5c4bb..12923cb 100644 (file)
@@ -52,10 +52,7 @@ public class UIEventChart extends TimelineChart {
        private static UIEventChart instance = null;
 
        private DAChartSeries touchEventSeries;
-       /*
-        * TODO code about Gesture is commented. it will be reopen when it implemented.
-        */
-//     private DAChartSeries gestureEventSeries;
+       private DAChartSeries gestureEventSeries;
        private DAChartSeries orientationEventSeries;
 
        private static final int TYPE_TOUCH = 2;
@@ -95,17 +92,17 @@ public class UIEventChart extends TimelineChart {
                                TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_TOUCH,
                                DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
                                ColorResources.SERIES_COLOR_UI_EVENT_TOUCH);
-//             gestureEventSeries = new DAChartSeries(
-//                             TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_GESTURE,
-//                             DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
-//                             ColorResources.SERIES_COLOR_UI_EVENT_GESTURE);
+               gestureEventSeries = new DAChartSeries(
+                               TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_GESTURE,
+                               DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
+                               ColorResources.SERIES_COLOR_UI_EVENT_GESTURE);
                orientationEventSeries = new DAChartSeries(
                                TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_ORIENTATION,
                                DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
                                ColorResources.SERIES_COLOR_UI_EVENT_ORIENTATION);
 
                touchEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
-//             gestureEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
+               gestureEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
                orientationEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
        }
 
@@ -133,7 +130,7 @@ public class UIEventChart extends TimelineChart {
                item.useExpand(false);
 
                chart.addSeries(touchEventSeries);
-//             chart.addSeries(gestureEventSeries);
+               chart.addSeries(gestureEventSeries);
                chart.addSeries(orientationEventSeries);
 
                setChartStyle();
@@ -144,7 +141,7 @@ public class UIEventChart extends TimelineChart {
        @Override
        public void inputChartSeries(List<Object> dataList) {
                touchEventSeries.clear();
-//             gestureEventSeries.clear();
+               gestureEventSeries.clear();
                orientationEventSeries.clear();
                
                @SuppressWarnings("unchecked")
@@ -170,10 +167,10 @@ public class UIEventChart extends TimelineChart {
                                touchEventSeries.addSeriesItem(new DAChartSeriesItem(time, 0,
                                                info));
                                break;
-//                     case TYPE_GESTURE:
-//                             gestureEventSeries.addSeriesItem(new DAChartSeriesItem(time, 0,
-//                                             getGestureInfo(detailType, pointX, pointY, info1, info2)));
-//                             break;
+                       case TYPE_GESTURE:
+                               gestureEventSeries.addSeriesItem(new DAChartSeriesItem(time, 0,
+                                               getGestureInfo(detailType, pointX, pointY, info1, info2)));
+                               break;
                        case TYPE_ORIENTATION:
                                orientationEventSeries.addSeriesItem(new DAChartSeriesItem(
                                                time, 0, TimelineChartLabels.UIEVENT_ORIENTATION
index d0884f3..a62167d 100755 (executable)
@@ -63,7 +63,6 @@ import org.tizen.dynamicanalyzer.resources.ColorResources;
 import org.tizen.dynamicanalyzer.resources.FontResources;
 import org.tizen.dynamicanalyzer.resources.ImageResources;
 import org.tizen.dynamicanalyzer.shortcut.ShortCutManager;
-import org.tizen.dynamicanalyzer.ui.common.explorer.DeviceExplorerDialog;
 import org.tizen.dynamicanalyzer.ui.page.BaseView;
 import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
 import org.tizen.dynamicanalyzer.ui.toolbar.opentrace.OpenTraceDialog;
@@ -82,7 +81,6 @@ import org.tizen.dynamicanalyzer.widgets.combo.DACustomComboSelectionListener;
 import org.tizen.dynamicanalyzer.widgets.da.base.DADialog;
 import org.tizen.dynamicanalyzer.widgets.timer.TimerClock;
 import org.tizen.sdblib.IDevice;
-import org.tizen.sdblib.service.FileEntry;
 
 public class ToolbarArea {
        public static final int START_BUTTON = 0;
@@ -125,6 +123,9 @@ public class ToolbarArea {
 
        private static final int TIMER_WIDTH = 122;
 
+       public static boolean bThreadPageWork = false; // FIXME
+       public static boolean bUIPageWork = false; // FIXME
+
        public static final int TOOLBAR_STATE_RECORDING = 0;
        public static final int TOOLBAR_STATE_READY = 1;
 
@@ -281,7 +282,7 @@ public class ToolbarArea {
 
                        @Override
                        public void selectionEvent(DACustomCombo combo) {
-                               final String appName = combo.getText();
+                               String appName = combo.getText();
                                if (null != appName && !appName.isEmpty()) {
                                        boolean enablestart = true;
 
@@ -302,23 +303,7 @@ public class ToolbarArea {
                                                                enablestart = false;
                                                        }
                                                } else if (appName.equals(AnalyzerConstants.COMMON_EXECUTABLE_LABEL)) {
-                                                       Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                                                       DeviceExplorerDialog dialog = new DeviceExplorerDialog(shell, false);
-                                                       dialog.setPermissionFilter("111");
-                                                       Object result = dialog.open();
-                                                       if (result != null) {
-                                                               @SuppressWarnings("unchecked")
-                                                               List<FileEntry> files = (List<FileEntry>) result;
-                                                               if (files.size() > 0) {
-                                                                       String execpath = files.get(0).getFullPath();
-                                                                       selectedPkg.getMainApp().setInfo(AppInfo.PROPERTY.EXEC.index,
-                                                                                       execpath);
-                                                               } else {
-                                                                       enablestart = false;
-                                                               }
-                                                       } else {
-                                                               enablestart = false;
-                                                       }
+                                                       // TODO : implement to select common executable
                                                }
 
                                                Global.setCurrentApplication(selectedPkg);
@@ -330,7 +315,10 @@ public class ToolbarArea {
                                        }
 
                                        if (enablestart && null != Global.getCurrentDeviceInfo()) {
+                                               // AnalyzerUtil
+                                               // .setRecordState(RecordStateSourceProvider.RECORD_READY);
                                                AnalyzerManager.setRunningState(false);
+                                               // startButton.setButtonEnabled(true);
                                                setStartButtonState(true);
                                                setRepalyButtonEnable(true);
                                        }
index 25697eb..1454d27 100644 (file)
@@ -56,8 +56,8 @@ import org.tizen.dynamicanalyzer.swap.platform.ui.BinarySettingProgressManager;
 import org.tizen.dynamicanalyzer.swap.platform.ui.InputRow;
 import org.tizen.dynamicanalyzer.swap.platform.ui.LoadSettingDialog;
 import org.tizen.dynamicanalyzer.swap.platform.ui.SaveSettingDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.DeviceExplorerDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.FileExplorerDialog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer.DeviceExplorerDilaog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog;
 import org.tizen.dynamicanalyzer.ui.toolbar.ConfigureManager;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.util.Logger;
@@ -93,7 +93,7 @@ public class BinarySettingsPage extends DAPageComposite {
 
                @Override
                public void handleClickEvent(DACustomButton button) {
-                       DeviceExplorerDialog dialog = new DeviceExplorerDialog(getShell(), true);
+                       DeviceExplorerDilaog dialog = new DeviceExplorerDilaog(getShell());
                        // dialog.setFilter(".so");
                        Object result = dialog.open();
                        if (result != null) {
index b39590e..dc2528e 100644 (file)
@@ -41,7 +41,6 @@ import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
-import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.communicator.DACommunicator;
 import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
 import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
@@ -329,41 +328,6 @@ public class SettingDialog extends DAMessageBox {
                shell.open();
                return true;
        }
-       
-       private void createBinarySettingPage() {
-               DABaseComposite binarySettings = new SettingDialogBinarySettingsPage(
-                               tabView.getContentComposite(), SWT.NONE);
-               tabView.addView(binarySettings, false);
-
-               
-               // binarySettings tab is selected, the close button will be shown.
-               // ok and cancel button is hidden
-               binarySettings.addListener(SWT.Show, new Listener() {
-
-                       @Override
-                       public void handleEvent(Event event) {
-                               Logger.debug("binary settings show");
-                               cancelButton.setText(WidgetLabels.CLOSE);
-                               FormData data = (FormData) okButton.getLayoutData();
-                               data.width = 0;
-
-                               buttonContentsComp.layout();
-                       }
-               });
-
-               binarySettings.addListener(SWT.Hide, new Listener() {
-
-                       @Override
-                       public void handleEvent(Event event) {
-                               Logger.debug("binary settings hide");
-                               cancelButton.setText(WidgetLabels.CANCEL);
-                               FormData data = (FormData) okButton.getLayoutData();
-                               data.width = 100;
-
-                               buttonContentsComp.layout();
-                       }
-               });
-       }
 
        private ShellListener shellListener = new ShellListener() {
 
index 32e13f1..6a33708 100644 (file)
@@ -57,8 +57,8 @@ import org.tizen.dynamicanalyzer.swap.platform.ui.BinarySettingProgressManager;
 import org.tizen.dynamicanalyzer.swap.platform.ui.InputRow;
 import org.tizen.dynamicanalyzer.swap.platform.ui.LoadSettingDialog;
 import org.tizen.dynamicanalyzer.swap.platform.ui.SaveSettingDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.DeviceExplorerDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.FileExplorerDialog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer.DeviceExplorerDilaog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
@@ -93,7 +93,7 @@ public class SettingDialogBinarySettingsPage extends DAPageComposite {
 
                @Override
                public void handleClickEvent(DACustomButton button) {
-                       DeviceExplorerDialog dialog = new DeviceExplorerDialog(getShell(), true);
+                       DeviceExplorerDilaog dialog = new DeviceExplorerDilaog(getShell());
 //                     dialog.setFilter(".so");
                        Object result = dialog.open();
                        if (result != null) {
index df495da..919035b 100755 (executable)
@@ -360,6 +360,11 @@ public class AnalyzerUtil {
                return num;
        }
 
+       public static void printHexdecimal(long value) {
+               String output = String.format("%x", value);
+               System.out.print(output);
+       }
+
        public static String toHexdecimal(Object value) {
                String retStr = null;
                if (value instanceof Long) {
index 82ab6ec..32c68f7 100644 (file)
@@ -1,11 +1,4 @@
 * 2.1.58
-- Optimize the thread analysis
-- Optimize the function profiling
-- Optimize the file analysis
-- Update the UX of setting dialog
-- Fix Bug : Some apps are not launched 
-== JuYoung Kim <j0.kim@samsung.com> 2014-11-03
-* 2.1.58
 - Fix Bug : screenshot periodically in Setting Dialog
 == Heeyoung Hwang <heeyoung1008.hwang@samsung.com> 2014-10-28
 * 2.1.57
index 3884138..da80f7a 100644 (file)
@@ -1,5 +1,5 @@
 Source:dynamic-analyzer
-Version:2.1.59
+Version:2.1.58
 Maintainer:Jaewon Lim <jaewon81.lim@samsung.com>, Juyoung Kim <j0.kim@samsung.com>
 
 Package:dynamic-analyzer-product