From 67d7e2f95c572262aff384a3a1dd77cebc689519 Mon Sep 17 00:00:00 2001 From: juyoung kim Date: Mon, 3 Nov 2014 01:08:59 -0800 Subject: [PATCH] Revert "Merge branch 'tizen' into mw and update package version" This reverts commit f14930a50fc589b801415d5c0957ea2f813994e2. Change-Id: I6443c27f0df1d1ebb1852fdffa65ac54e1fee298 --- .../dynamicanalyzer/resources/ColorResources.java | 3 +- .../tizen/dynamicanalyzer/theme/DAThemeWhite.java | 3 +- .../dynamicanalyzer/constant/CommonConstants.java | 2 - .../widgets/chart/DAChartRenderer.java | 28 +- .../widgets/chartBoard/DAChartBoardItem.java | 43 +- .../widgets/chartBoard/DAChartBoardItemCell.java | 25 - .../dynamicanalyzer.product | 4 +- .../dynamicanalyzer/common/path/PathConstants.java | 1 - .../dynamicanalyzer/common/path/PathManager.java | 88 +- .../dynamicanalyzer/collection/IndexedHashMap.java | 2 +- .../dynamicanalyzer/common/AnalyzerPlugin.java | 3 - .../common/AnalyzerShellCommands.java | 11 +- .../org/tizen/dynamicanalyzer/common/DALimit.java | 3 - .../SwapErrorCode.java => common/ErrorCode.java} | 28 +- .../org/tizen/dynamicanalyzer/common/Global.java | 24 +- .../tizen/dynamicanalyzer/common/HostResult.java | 6 +- .../communicator/CommunicatorUtils.java | 6 +- .../communicator/DACommunicator.java | 140 +- .../dynamicanalyzer/control/ApplistManager.java | 13 +- .../dynamicanalyzer/database/DBConstants.java | 4 - .../dynamicanalyzer/handlers/OpenTraceHandler.java | 12 +- .../logparser/LogCenterConstants.java | 4 +- .../tizen/dynamicanalyzer/nl/FilePageLabels.java | 5 - .../dynamicanalyzer/nl/FilePageLabels.properties | 6 +- .../tizen/dynamicanalyzer/nl/ThreadPageLabels.java | 1 - .../dynamicanalyzer/nl/ThreadPageLabels.properties | 1 - .../dynamicanalyzer/nl/UserErrorWarningLabels.java | 2 - .../nl/UserErrorWarningLabels.properties | 2 - .../org/tizen/dynamicanalyzer/project/AppInfo.java | 19 +- .../tizen/dynamicanalyzer/project/PackageInfo.java | 10 - .../swap/callstack/BaseCallstackManager.java | 23 +- .../swap/callstack/SWAPCallStackManager.java | 115 +- .../swap/channel/control/FunctionInst.java | 14 - .../swap/communicator/AckMessage.java | 71 - .../swap/communicator/Communicator30.java | 397 +++--- .../swap/logparser/MessageParser.java | 7 +- .../swap/model/data/ProfileData.java | 1 - .../platform/ui}/DAFileTreeExplorer.java | 2 +- .../platform/ui}/DAFileTreeExplorerRenderer.java | 2 +- .../ui}/DAFileTreeExplorerToggleRenderer.java | 2 +- .../ui/DeviceExplorer/DADeviceExplorer.java | 115 ++ .../ui/DeviceExplorer}/DeviceExplorer.java | 194 +-- .../ui/DeviceExplorer/DeviceExplorerDilaog.java} | 19 +- .../platform/ui}/ExplorerUtil.java | 2 +- .../platform/ui/FileExplorer}/DAFileExplorer.java | 3 +- .../DAFileExplorerEmptyCellRenderer.java | 2 +- .../FileExplorer}/DAFileExplorerTableRenderer.java | 3 +- .../ui/FileExplorer}/FileExplorerDialog.java | 3 +- .../platform/ui/FileExplorerDialog.java} | 6 +- .../dynamicanalyzer/swap/platform/ui/InputRow.java | 2 +- .../explorer/DeviceExplorerTableRenderer.java | 174 --- .../dynamicanalyzer/ui/file/FileApiListTable.java | 238 ++-- .../dynamicanalyzer/ui/file/FileApiListView.java | 27 +- .../tizen/dynamicanalyzer/ui/file/FileChart.java | 177 ++- .../dynamicanalyzer/ui/file/FileChartBoard.java | 241 ++-- .../dynamicanalyzer/ui/file/FileChartRenderer.java | 299 ----- .../dynamicanalyzer/ui/file/FileChartView.java | 56 +- .../ui/file/FileDetailInfoView.java | 247 ++-- .../dynamicanalyzer/ui/file/data/FileAccessDB.java | 134 +- .../ui/file/data/FileAccessorDB.java | 181 --- .../dynamicanalyzer/ui/file/data/FileApiDB.java | 351 ++--- .../dynamicanalyzer/ui/file/data/FileStatusDB.java | 106 +- .../ui/file/manager/FileDataMaker.java | 483 +++---- .../ui/file/manager/FileDataManager.java | 30 +- .../dynamicanalyzer/ui/file/model/FileAccess.java | 118 +- .../ui/file/model/FileAccessor.java | 109 -- .../dynamicanalyzer/ui/file/model/FileEvent.java | 87 +- .../ui/file/model/FileSelectedData.java | 57 +- .../dynamicanalyzer/ui/file/model/FileStatus.java | 79 +- .../ui/info/callstack/CallStackDataDBTable.java | 22 +- .../ui/info/callstack/CallStackInserter.java | 71 +- .../ui/info/callstack/CallstackTable.java | 31 +- .../ui/summary/SummaryDataManager.java | 1 - .../summary/profiling/FunctionUsageProfiler.java | 75 +- .../ui/summary/profiling/ProfileDataMaker.java | 31 +- .../profiling/ProfilingChildDataDBTable.java | 12 +- .../ui/thread/ThreadAPIListTable.java | 254 ++-- .../ui/thread/ThreadAPIListView.java | 88 +- .../ui/thread/ThreadChartManager.java | 385 ++++++ .../ui/thread/{chart => }/ThreadChartView.java | 436 +++--- .../ui/thread/ThreadDetailInfoView.java | 85 +- .../dynamicanalyzer/ui/thread/ThreadPage.java | 27 +- .../dynamicanalyzer/ui/thread/ThreadPageData.java | 144 ++ .../ui/thread/{type => }/ThreadPageDataEvent.java | 20 +- .../dynamicanalyzer/ui/thread/chart/SyncChart.java | 261 ---- .../ui/thread/chart/SyncChartBoard.java | 366 ----- .../ui/thread/chart/ThreadChart.java | 170 --- .../ui/thread/chart/ThreadChartBoard.java | 293 ---- .../ui/thread/{db => data}/SyncAPIDBTable.java | 123 +- .../ui/thread/data/SyncAPIInserter.java | 106 ++ .../ui/thread/data/SyncDataDBTable.java | 144 ++ .../ui/thread/data/SyncDataInserter.java | 122 ++ .../ui/thread/data/SyncEventDBTable.java | 139 ++ .../ui/thread/data/SyncEventInserter.java | 105 ++ .../ui/thread/{db => data}/ThreadAPIDBTable.java | 129 +- .../ui/thread/{db => data}/ThreadDataDBTable.java | 123 +- .../ui/thread/data/ThreadDataManager.java | 230 ---- .../ui/thread/{db => data}/ThreadEventDBTable.java | 129 +- .../ui/thread/data/ThreadEventInserter.java | 136 ++ .../ui/thread/data/ThreadLoadDataMaker.java | 84 -- .../ui/thread/data/ThreadSyncDataMaker.java | 471 ------- .../ui/thread/data/ThreadThreadDataMaker.java | 554 -------- .../ui/thread/db/SyncDataDBTable.java | 189 --- .../ui/thread/db/SyncEventDBTable.java | 215 --- .../ui/thread/sync/ThreadPageSyncData.java | 287 ++++ .../{type => sync}/ThreadPageSyncDataEvent.java | 38 +- .../ui/thread/sync/ThreadPageSyncDataManager.java | 653 +++++++++ .../ui/thread/thread/ThreadPageThreadData.java | 320 +++++ .../ThreadPageThreadDataEvent.java | 22 +- .../thread/thread/ThreadPageThreadDataManager.java | 1392 ++++++++++++++++++++ .../ui/thread/type/ThreadPageData.java | 84 -- .../ui/thread/type/ThreadPageSyncData.java | 138 -- .../ui/thread/type/ThreadPageThreadData.java | 160 --- .../timeline/calltrace/FunctionEntryDBTable.java | 5 - .../ui/timeline/calltrace/FunctionExitDBTable.java | 5 - .../ui/timeline/chart/ScreenshotChart.java | 67 +- .../ui/timeline/chart/UIEventChart.java | 27 +- .../dynamicanalyzer/ui/toolbar/ToolbarArea.java | 28 +- .../toolbar/configuration/BinarySettingsPage.java | 6 +- .../ui/toolbar/setting/SettingDialog.java | 36 - .../setting/SettingDialogBinarySettingsPage.java | 6 +- .../tizen/dynamicanalyzer/utils/AnalyzerUtil.java | 5 + package/changelog | 7 - package/pkginfo.manifest | 2 +- 124 files changed, 6550 insertions(+), 7185 deletions(-) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{swap/communicator/SwapErrorCode.java => common/ErrorCode.java} (73%) delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/AckMessage.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui}/DAFileTreeExplorer.java (98%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui}/DAFileTreeExplorerRenderer.java (97%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui}/DAFileTreeExplorerToggleRenderer.java (98%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui/DeviceExplorer}/DeviceExplorer.java (67%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer/DeviceExplorerDialog.java => swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java} (92%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui}/ExplorerUtil.java (96%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui/FileExplorer}/DAFileExplorer.java (98%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui/FileExplorer}/DAFileExplorerEmptyCellRenderer.java (96%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui/FileExplorer}/DAFileExplorerTableRenderer.java (97%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer => swap/platform/ui/FileExplorer}/FileExplorerDialog.java (97%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{ui/common/explorer/FileTreeExplorerDialog.java => swap/platform/ui/FileExplorerDialog.java} (96%) delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerTableRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessorDB.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccessor.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartManager.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{chart => }/ThreadChartView.java (50%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{type => }/ThreadPageDataEvent.java (90%) delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChartBoard.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartBoard.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{db => data}/SyncAPIDBTable.java (58%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIInserter.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataDBTable.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataInserter.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventDBTable.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventInserter.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{db => data}/ThreadAPIDBTable.java (56%) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{db => data}/ThreadDataDBTable.java (54%) delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataManager.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{db => data}/ThreadEventDBTable.java (53%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventInserter.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadLoadDataMaker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadSyncDataMaker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadThreadDataMaker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncDataDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncEventDBTable.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncData.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{type => sync}/ThreadPageSyncDataEvent.java (80%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataManager.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadData.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/{type => thread}/ThreadPageThreadDataEvent.java (81%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadData.java diff --git a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java index 4029264..6065aa2 100755 --- a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java +++ b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ColorResources.java @@ -329,8 +329,7 @@ public class ColorResources { public static Color FILE_ACCESS_WRITE = getColor("file_access_write"); //$NON-NLS-1$ public static Color FILE_ACCESS_CONCURRENT_READ = getColor("file_access_concurrent_read"); //$NON-NLS-1$ public static Color FILE_ACCESS_CONCURRENT_WRITE = getColor("file_access_concurrent_write"); //$NON-NLS-1$ - public static Color FILE_LOCK = getColor("file_lock"); //$NON-NLS-1$ - public static Color FILE_UNLOCK = getColor("file_unlock"); //$NON-NLS-1$file_unlock + public static Color FILE_LOCK_ACQUIRED = getColor("file_lock_acquired"); //$NON-NLS-1$ public static Color FILE_LOCK_WAITING = getColor("file_lock_waiting"); //$NON-NLS-1$ public static Color FILE_OTHER_OPERATION = getColor("file_other_operation"); //$NON-NLS-1$ public static Color FILE_OPENED = getColor("file_opened"); //$NON-NLS-1$ diff --git a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeWhite.java b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeWhite.java index 3759fb8..c8c24f0 100644 --- a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeWhite.java +++ b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/theme/DAThemeWhite.java @@ -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$ diff --git a/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/constant/CommonConstants.java b/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/constant/CommonConstants.java index 00cbfc4..00a2ecd 100644 --- a/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/constant/CommonConstants.java +++ b/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/constant/CommonConstants.java @@ -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$ diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java index 2a4a327..f4107d9 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java @@ -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); } diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItem.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItem.java index 09c72b7..d42b279 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItem.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItem.java @@ -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); diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItemCell.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItemCell.java index f7e9454..cebbf75 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItemCell.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoardItemCell.java @@ -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; - } } diff --git a/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product b/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product index 99af921..2ed5668 100755 --- a/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product +++ b/org.tizen.dynamicanalyzer.workbench/dynamicanalyzer.product @@ -16,8 +16,8 @@ -data @noDefault -XX:MaxPermSize=64m --Xms256m --Xmx1024m +-Xms512m +-Xmx512m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathConstants.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathConstants.java index 77b0199..20c8c17 100644 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathConstants.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathConstants.java @@ -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$ diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathManager.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathManager.java index 9ddbb50..75b15b3 100755 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathManager.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/common/path/PathManager.java @@ -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; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java index 2ad90b5..de4f317 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java @@ -55,7 +55,7 @@ public class IndexedHashMap { } public V getByIndex(int index) { - if (index >= 0 && index < dataList.size()) { + if (index < dataList.size()) { return dataList.get(index); } else { return null; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java index c6f7336..e567a98 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java @@ -51,9 +51,6 @@ public class AnalyzerPlugin extends AbstractUIPlugin { public void start(BundleContext context) throws Exception { super.start(context); plugin = this; - - // check for platform sdk - Global.setPlatformSDK(PathManager.checkPlatformPlugin()); // Adds workbench listener. IWorkbench workbench = PlatformUI.getWorkbench(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerShellCommands.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerShellCommands.java index 0f94308..6e6395f 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerShellCommands.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerShellCommands.java @@ -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"; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java index 62a3469..711ad81 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DALimit.java @@ -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() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/SwapErrorCode.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ErrorCode.java similarity index 73% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/SwapErrorCode.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ErrorCode.java index bab0fd2..dec3bc0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/SwapErrorCode.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ErrorCode.java @@ -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; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java index c6892d3..ad5368c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java @@ -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) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/HostResult.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/HostResult.java index b74bfbe..ba6331e 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/HostResult.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/HostResult.java @@ -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"), diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java index 4dcd0f7..68ef308 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java index 73931df..2fe8184 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java @@ -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() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ApplistManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ApplistManager.java index 00821bc..5906aa2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ApplistManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ApplistManager.java @@ -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; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java index 26d49c1..11519d7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java @@ -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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java index 597d073..c2f095d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java @@ -250,25 +250,21 @@ public class OpenTraceHandler extends AbstractHandler { boolean isSuccess = true; List> 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 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 childSeqList = - (List) 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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogCenterConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogCenterConstants.java index b7f7d03..b9be2b1 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogCenterConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogCenterConstants.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.java index 8dc1fe0..0bbaf13 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties index 00b6894..7981169 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties @@ -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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.java index 4745350..29201d5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.properties index 8e20410..bf4da2e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.properties @@ -1,5 +1,4 @@ THREAD_CHART_THREAD=Thread -THREAD_CHART_SYNC=Sync THREAD_CHART_TITLE=Thread Chart THREAD_DETAILS_TITLE=Thread Details SYNC_CHART_TITLE=Sync Chart diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java index fbd56c4..39e285a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties index 3fe3a57..f608c90 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties @@ -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. diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java index 86b1347..4124449 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java @@ -104,12 +104,10 @@ public class AppInfo { private ElfSymbolExtractor symbolExtractor = new ElfSymbolExtractor(); - // temporary information - private String execPath = null; private String execFileName = null; - private List localPackagePath = null; private Map runningProcesses = null; + private String execPath = null; private static List readlinkResult = new ArrayList(); private List properties = new ArrayList(); @@ -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); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java index 4c15f86..94758aa 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java @@ -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 appInfos = new ArrayList(); @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java index cba3a3c..a646dd6 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/BaseCallstackManager.java @@ -85,7 +85,7 @@ public abstract class BaseCallstackManager { } protected ConcurrentHashMap> callstackApiAddrByPidMap = new ConcurrentHashMap>(); - protected ConcurrentSkipListMap callstackDataBySeqMap = new ConcurrentSkipListMap(); + protected ConcurrentHashMap callstackDataBySeqMap = new ConcurrentHashMap(); protected String userFunctionBin = null; protected HashMap> userCallstackByTidMap = new HashMap>(); protected HashMap dupUserCallByTidMap = new HashMap(); @@ -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 getCallstackAddrListFromSeq(long seq); - abstract public List> getArrayOfAddrListFromSeq(List seqs); public void offerCallStackUnit(CallStackUnit csu) { if (callstackInserter != null) { @@ -117,6 +114,13 @@ public abstract class BaseCallstackManager { return; } + public List getPidsOfCallstackApiAddrMap() { + ArrayList pids = new ArrayList(); + pids.addAll(callstackApiAddrByPidMap.keySet()); + + return pids; + } + public Map getCallStackApiAddrByPidMap(int pid) { if (null == callstackApiAddrByPidMap) { callstackApiAddrByPidMap = new ConcurrentHashMap>(); @@ -130,9 +134,9 @@ public abstract class BaseCallstackManager { return callstackApiByAddrMap; } - public NavigableMap getCallStackDataBySeqMap() { + public Map getCallStackDataBySeqMap() { if (null == callstackDataBySeqMap) { - callstackDataBySeqMap = new ConcurrentSkipListMap(); + callstackDataBySeqMap = new ConcurrentHashMap(); } return callstackDataBySeqMap; } @@ -155,13 +159,6 @@ public abstract class BaseCallstackManager { } return seqByTimeMap; } - - public List getTidsOfSeqTimeMap() { - ArrayList tids = new ArrayList(); - tids.addAll(seqTimeByTidMap.keySet()); - - return tids; - } public String getUserFunctionPosition() { if (userFunctionBin == null || userFunctionBin.isEmpty()) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java index 32d1b22..e920416 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java @@ -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 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 probeCallstack = new ArrayList(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(); - } - 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 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 getCallstackAddrListFromSeq(long seq) { - List addrs = null; - CallStackData csd = getCallStackDataBySeqMap().get(seq); - - if (null == csd) { // callstackdata is not in memory, find from DB - List> 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 addressList = (List) callStackAddrs.get(0).get(0); - - addrs = new ArrayList(); - addrs.addAll(addressList); - } else { // callstackdata is in memory - addrs = csd.getAddrs(); - } - return addrs; - } -//TODO: 1. execute select query once 2. change return type - > -//TODO: 3. additional discussion with leak analysis implementer if needed - public List> getArrayOfAddrListFromSeq(List seqs) { - List> addrsList = null; - if (null == seqs) { - return null; - } - - addrsList = new ArrayList>(); - int size = seqs.size(); - for (int i = 0; i < size; i++) { - List addrs = getCallstackAddrListFromSeq(seqs.get(i)); - if (null != addrs) { - addrsList.add(addrs); - } - } - - return addrsList; - } - public void clear() { callstackApiAddrByPidMap.clear(); callstackDataBySeqMap.clear(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/control/FunctionInst.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/control/FunctionInst.java index 5406bd9..d212bdb 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/control/FunctionInst.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/control/FunctionInst.java @@ -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 index 50744cf..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/AckMessage.java +++ /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); - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java index 04c88dd..7d80f24 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java @@ -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 bininfos = new ArrayList(); - 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 bininfos = new ArrayList(); + + 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 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 sendProcessAddInfoMessage(List 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(); + if (count > 0) { + infoMap = new HashMap(); - 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 bininfos = new ArrayList(); - 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 bininfos = new ArrayList(); + + parseBinaryInfo(payload, binPaths, bininfos); + + return result; } private void parseBinaryInfo(byte[] payload, List targetPaths, List 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"); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java index 7201225..3ec8eb0 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java @@ -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) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java index 6067dd4..e4a47d3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java @@ -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/ui/common/explorer/DAFileTreeExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorer.java similarity index 98% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorer.java index 777940a..639c73c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorer.java @@ -24,7 +24,7 @@ * - S-Core Co., Ltd * */ -package org.tizen.dynamicanalyzer.ui.common.explorer; +package org.tizen.dynamicanalyzer.swap.platform.ui; import java.util.HashMap; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerRenderer.java similarity index 97% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerRenderer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerRenderer.java index 1fd2133..a255b85 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerRenderer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerRenderer.java @@ -25,7 +25,7 @@ * */ -package org.tizen.dynamicanalyzer.ui.common.explorer; +package org.tizen.dynamicanalyzer.swap.platform.ui; import org.eclipse.nebula.widgets.grid.GridItem; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerToggleRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerToggleRenderer.java similarity index 98% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerToggleRenderer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerToggleRenderer.java index 18a5dea..04f2d64 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileTreeExplorerToggleRenderer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DAFileTreeExplorerToggleRenderer.java @@ -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.GridItem; import org.eclipse.swt.graphics.Font; 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 index 0000000..bac36d4 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java @@ -0,0 +1,115 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Jaewon Lim + * Juyoung Kim + * + * 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(); + } + +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java similarity index 67% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java index 5a17d19..a719123 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java @@ -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 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; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java similarity index 92% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerDialog.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java index b1ea206..5031526 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java @@ -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); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/ExplorerUtil.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/ExplorerUtil.java similarity index 96% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/ExplorerUtil.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/ExplorerUtil.java index 6bb91a6..617441d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/ExplorerUtil.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/ExplorerUtil.java @@ -25,7 +25,7 @@ * */ -package org.tizen.dynamicanalyzer.ui.common.explorer; +package org.tizen.dynamicanalyzer.swap.platform.ui; import java.io.File; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java similarity index 98% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java index 764cf60..6e6f9c0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerEmptyCellRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerEmptyCellRenderer.java similarity index 96% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerEmptyCellRenderer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerEmptyCellRenderer.java index 6fbe32b..d703c61 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerEmptyCellRenderer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerEmptyCellRenderer.java @@ -25,7 +25,7 @@ * */ -package org.tizen.dynamicanalyzer.ui.common.explorer; +package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer; import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.swt.SWT; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerTableRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerTableRenderer.java similarity index 97% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerTableRenderer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerTableRenderer.java index 0780165..994afdf 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DAFileExplorerTableRenderer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorerTableRenderer.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileExplorerDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java similarity index 97% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileExplorerDialog.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java index 7bdcf6f..2bda2ee 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileExplorerDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java @@ -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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileTreeExplorerDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorerDialog.java similarity index 96% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileTreeExplorerDialog.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorerDialog.java index face04b..ca5857a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/FileTreeExplorerDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorerDialog.java @@ -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); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java index 2f62cfe..0f5d68c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java @@ -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 index a636d08..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/explorer/DeviceExplorerTableRenderer.java +++ /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); - } - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListTable.java index f3c6369..b16cc9d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListTable.java @@ -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 findStartAPITableIndexHashMap = new HashMap(); - HashMap findStartTimeHashMap = new HashMap(); List removeTableIndex = new ArrayList(); List input = new ArrayList(); - 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 contentText = new ArrayList(); - List contentData = new ArrayList(); - Integer startLogIndex = 0; + List contents = FileDataManager.getInstance().getSelectedTableAPIList(); + if(contents == null) { + return null; + } + for (int i = 0; i < contents.size(); i++) { + FileEvent contentTemp = contents.get(i); + List contentText = new ArrayList(); + List contentData = new ArrayList(); - 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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListView.java index 485e8a0..5722dd9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileApiListView.java @@ -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 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, diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChart.java index 3ad7b18..a101c2c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChart.java @@ -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 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 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartBoard.java index c50b42d..0ceb3f3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartBoard.java @@ -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 chartList = new ArrayList(); private FileDataManager fileChartManager = FileDataManager.getInstance(); private FileDataMaker dataMaker; + private FileApiDB apiDB; private int parentChartIndex = -1; - private int preSelectionPId = -1; - private Map chartIndexMap = new HashMap(); - 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, int[]> chartIndexMap = new HashMap, 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 accessorList = dataMaker.getFileAccessor(); - if (accessorList == null) { - if(dataMaker.getFileAccessorList() != null) { - accessorList = dataMaker.getFileAccessorList(); + + List 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 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 apiList = apiDB.selectAPISeries( + getVisibleStartTime(), getVisibleEndTime());*/ + List 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 set = new HashSet(); + 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 set = new HashSet(); + 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 index 89490f3..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartRenderer.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyeran kim - * Jungwook Ryu - * Juyoung Kim - * - * 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 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 barSeriesItems = new ArrayList(); - /* - * 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 tooltipTexts = new ArrayList(); - List tooltipTimes = new ArrayList(); - List tooltipColor = new ArrayList(); - - // 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); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartView.java index 9e7f52a..a61c7f1 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileChartView.java @@ -26,15 +26,12 @@ 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(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileDetailInfoView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileDetailInfoView.java index 44980d5..342f38c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileDetailInfoView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FileDetailInfoView.java @@ -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 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(); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessDB.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessDB.java index 4ea9582..a67867d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessDB.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessDB.java @@ -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 executeQueryRS(String query) { - List resultData = new ArrayList(); - 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> insertDataList = new ArrayList>(); insertDataList.add(insertData.getDBData()); insertData(insertDataList); } - + public List select() { String query = String.format(SELECT_QUERY); List accessList = new ArrayList(); - accessList = executeQueryRS(query); + + List> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { + return accessList; + } + + for (List 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 index b75f87d..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileAccessorDB.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyeran Kim - * Juyoung Kim - * - * 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 executeQueryRS(String query) { - List resultData = new ArrayList(); - 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> insertDataList = new ArrayList>(); - insertDataList.add(insertData.getDBData()); - insertData(insertDataList); - } - - public List select() { - String query = String.format(SELECT_QUERY); - - List accessorList = new ArrayList(); - 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 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; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileApiDB.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileApiDB.java index d72e7f7..9ba6b7a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileApiDB.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileApiDB.java @@ -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> insertData) { + insertData(insertData); } - public List executeQueryRS(String query) { - List resultData = new ArrayList(); - 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 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> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { + return null; } - return resultData; + List apiList = new ArrayList(); + for (List 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 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> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { return null; } - return event; - } - - public void insert(List> insertData) { - insertData(insertData); + List apiList = new ArrayList(); + for (List 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 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> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { + return null; } - return SqlConnectionManager.executeQueryRS(query); + List apiList = new ArrayList(); + for (List 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> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { + return null; } - return totalCount; + List 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 select() { String query = String.format(SELECT_ALL); - List apiList = executeQueryRS(query); - + + List apiList = new ArrayList(); + + List> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { + return apiList; + } + + for (List 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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileStatusDB.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileStatusDB.java index 1670c9b..a215358 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileStatusDB.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/data/FileStatusDB.java @@ -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 executeQueryRS(String query) { - List resultData = new ArrayList(); - 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> insertDataList = new ArrayList>(); @@ -125,17 +97,33 @@ public class FileStatusDB extends DBTable { String query = String.format(SELECT_QUERY); List statusList = new ArrayList(); - statusList = executeQueryRS(query); + + List> result = SqlConnectionManager.executeQuery(query); + if (null == result || result.size() == 0 || result.get(0).size() == 0) { + return statusList; + } + + for (List 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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java index c18a904..29eb87a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataMaker.java @@ -27,16 +27,13 @@ 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 fileStatusList = new ArrayList(); private List fileAccessList = new ArrayList(); private List fileApiList = new ArrayList(); - private List fileAccessorList = new ArrayList(); + + + // to find file path, (key(PID, TID, FD), value (file_path)) + private Map fileAccessorMap = new HashMap(); + + // temporary, file log list for 1second + private Queue> fileLogsQueue = new ConcurrentLinkedQueue>(); + + // (key(file path), value (read_count or write_count)) + private Map concurrentAccessNumMap = new HashMap(); + private Map lockNumMap = new HashMap(); - private Map entryMap = new HashMap(); // to match entry and exit message - private Map> fileAccessorMap= new HashMap>(); - private Map> filePathMap= new HashMap>(); // to find file path - private Queue> fileAccessorQueue = new ConcurrentLinkedQueue>(); - private Map, List> accessorHasLockMap = new HashMap, List>(); //to auto release - private Map concurrentAccessNumMap = new HashMap(); // to check concurrent access + // for filtering out non-target file from syscall messages + List accessedFilePathList = new ArrayList(); - AtomicInteger idGenerator = new AtomicInteger(); + // temporary, to check if open event has been sent before the event has been sent + private Map sysCallMap = new HashMap(); + // for searching entry message from exit message + Map entryMap = new HashMap(); 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 fileEventList = new ArrayList(); - List fileAccessorList = new ArrayList(); // 1. In case of target process that the user is interested to analyze ArrayList> fileApiList = new ArrayList>(); @@ -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>)fileApiList); } - - Set kyeSet = fileAccessorMap.keySet(); - for (Iterator iterator = kyeSet.iterator(); iterator.hasNext();) { - String key = (String) iterator.next(); - List values= fileAccessorMap.get(key); - Object[] list = values.toArray(); - List accessor = (ArrayList)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 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 getFileEventList() { + return fileLogsQueue.poll(); + } + + public List getFileAccessList() { + return fileAccessList; + } + + public List getFileStatusList() { + return fileStatusList; + } + + public List 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 set = fileAccessorMap.get(filePath); - Object[] list = set.toArray(); - fileId = (Integer) list[0]; - List accessorList = (ArrayList) 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 accessorList = new ArrayList(); - FileAccessor newAccessor = new FileAccessor(accessorId, - fileId, filePath, pid, tid, isTarget); - accessorList.add(newAccessor); - List set = new ArrayList(); - 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 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 set = new ArrayList(); - 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 key = Arrays.asList(fileId, pid); - List tids = new ArrayList(); - 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 getTidsHasLock(int fileId, int pid) { - List tids = null; - List 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 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 getFileAccessor() { - return fileAccessorQueue.poll(); - } - - public List getFileAccessList() { - return fileAccessList; - } - - public List getFileStatusList() { - return fileStatusList; - } - - public List getFileApiList() { - return fileApiList; - } - - public List getFileAccessorList() { - return fileAccessorList; - } - public void setFileAccessList(List fileAccessList) { this.fileAccessList = fileAccessList; } @@ -747,9 +644,5 @@ public class FileDataMaker { public void setFileApiList(List fileApiList) { this.fileApiList = fileApiList; } - - public void setFileAccessorList(List fileAccessorList) { - this.fileAccessorList = fileAccessorList; - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataManager.java index b9fa88e..b835d88 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/manager/FileDataManager.java @@ -26,17 +26,17 @@ 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 selectedTableAPIList = new ArrayList(); 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(); } public FileAccessDB getAccessDB(){ @@ -90,10 +87,6 @@ public class FileDataManager extends PageDataManager { return statusDB; } - public FileAccessorDB getAccessorDB() { - return accessorDB; - } - public void saveData(Map dataMap) { List 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 getSelectedTableAPIList() { + return selectedTableAPIList; } - - public FileSelectedData getSelectedData() { - return selectedData; + + public void setSelectedTableAPIList( + List selectedTableAPIList) { + this.selectedTableAPIList = selectedTableAPIList; } /** diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccess.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccess.java index 3c26c20..55ff42c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccess.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccess.java @@ -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 getDBData() { List data = new ArrayList(); - 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 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 index e38ea1c..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileAccessor.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyeran Kim - * Juyoung Kim - * - * 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 getDBData() { - List data = new ArrayList(); - 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; - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileEvent.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileEvent.java index 9ab496e..9198953 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileEvent.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileEvent.java @@ -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 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 getDBData() { List data = new ArrayList(); 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; - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileSelectedData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileSelectedData.java index fefef98..dc89dc4 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileSelectedData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileSelectedData.java @@ -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; + } + } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileStatus.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileStatus.java index 450a4d4..04af3c7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileStatus.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/model/FileStatus.java @@ -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 getDBData() { List data = new ArrayList(); - 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 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; - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java index 955df9c..c210b77 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java @@ -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> getCallStackAddrsFromDB(long seq) { @@ -69,13 +71,19 @@ public class CallStackDataDBTable extends DBTable { COLUMN.SEQ.name, seq); List selectColumn = new ArrayList(); - selectColumn.add(COLUMN.ADDRESS_ARRAY.name); + selectColumn.add(COLUMN.PCADDR.name); return selectData(selectColumn, where, new IResultSet() { @Override public List extractDataFromResultSet(ResultSet rs) { List row = new ArrayList(); - 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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java index 5bab326..4db3cd8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java @@ -27,22 +27,12 @@ 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 addrs = csd.getAddrs(); - - List insertRowData = new ArrayList(); - 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 insertRowData = new ArrayList(); + 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 tids = AnalyzerManager.getCallstackManager().getTidsOfSeqTimeMap(); - int size = tids.size(); - for (int i = 0; i < size; i++) { - NavigableMap 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 callstackDataMap = AnalyzerManager - .getCallstackManager().getCallStackDataBySeqMap(); - SortedMap headMap = callstackDataMap.headMap(seq); - Iterator> itr = headMap.entrySet().iterator(); - while (itr.hasNext()) { - itr.next(); - itr.remove(); - } - } @Override public void run() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java index d7e9b89..6e5a9a2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackTable.java @@ -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 cdMap = AnalyzerManager + .getCallstackManager().getCallStackDataBySeqMap(); Map addrMap = AnalyzerManager .getCallstackManager().getCallStackApiAddrByPidMap(pid); - if (null == addrMap) { + if (null == cdMap || null == addrMap) { return; } - + CallStackData csd = cdMap.get(seqNum); List addrs = null; - addrs = AnalyzerManager.getCallstackManager().getCallstackAddrListFromSeq(seqNum); - if (null == addrs) { - return; + if (null == csd) { // callstackdata is not in memory, find from DB + List> 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(); + 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; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/SummaryDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/SummaryDataManager.java index 706d896..91da69d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/SummaryDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/SummaryDataManager.java @@ -115,7 +115,6 @@ public class SummaryDataManager extends PageDataManager { public void clear() { leakDataMaker.clear(); - warningDataMaker.clear(); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java index 5f1f1c0..86b9c2b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfiler.java @@ -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 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 childList = data.getChildren(); + int childCount = childList.size(); try { - List insertRowData = new ArrayList(); - 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 insertRowData = new ArrayList(); + 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 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 callstackDataMap = AnalyzerManager.getCallstackManager() + .getCallStackDataBySeqMap(); + if (callstackDataMap.size() > CALLSTACKDATA_MAX) { + // remove unnecessary callstackdata from memory + NavigableMap 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 headMap = + seqByTimeMap.headMap(lastTime); + Iterator> itr = headMap + .entrySet().iterator(); + while (itr.hasNext()) { + Map.Entry 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 callstackDataMap = AnalyzerManager.getCallstackManager() + .getCallStackDataBySeqMap(); + if (callstackDataMap.size() > CALLSTACKDATA_MAX) { + callstackDataMap.clear(); + } } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfileDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfileDataMaker.java index 935d47d..bb2d9ab 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfileDataMaker.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfileDataMaker.java @@ -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 seqByTimeMap = callstackManager.getSeqTimeByTidMap(tid); Map 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(); - addrs.add(selfAddr); - } else { - addrs = new ArrayList(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(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(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingChildDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingChildDataDBTable.java index f222537..96090c2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingChildDataDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingChildDataDBTable.java @@ -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> 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; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListTable.java index 419a8a3..bb44904 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListTable.java @@ -4,7 +4,6 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * yeongtaik byeon * Juyoung Kim @@ -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 makeTableInput() { - List input = new ArrayList(); - 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 syncAPIList = new ArrayList(); - 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 contentText = new ArrayList(); - List contentData = new ArrayList(); - - 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 selectAPIListFromDB(ThreadPageData data, int selectID) { - List returnList = new ArrayList(); - if(null == data){ - return returnList; - } + List input = new ArrayList(); 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 contentText = new ArrayList(); + List contentData = new ArrayList(); + + 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 getSyncAPIOfNotInsert(int selectID) { - List returnList = new ArrayList(); - List 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 list) { - Comparator comparator = new Comparator() { - @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(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListView.java index 134eb8c..a94fb02 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListView.java @@ -4,7 +4,6 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * yeongtaik byeon * Jooyoul Lee @@ -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 index 0000000..8f28182 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartManager.java @@ -0,0 +1,385 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * yeongtaik byeon + * Juyoung Kim + * + * 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 getLogsFromLogPackage(LogPackage logPack, + int logCenterConstants) { + Logs logs = logPack.getLogs(logCenterConstants); + if (null == logs || logs.getRawLogs().size() == 0) { + return null; + } + List 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 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 dataMap) { + openThreadData(); + } + + private void openThreadData() { + //TODO: use ResultSet + // load ThreadPageThreadData + List> threadDatas = threadDataTable.getThreadDataFromDB(); + int size = threadDatas.size(); + for (int i = 0; i < size; i++) { + ListrowData = 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> 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> syncDatas = SqlConnectionManager.executeQuery(SyncDataDBTable.SELECT_QUERY); + List> 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> 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 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 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 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 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 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 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> insertData = new ArrayList>(); + List insertRowData = new ArrayList(); + + 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartView.java similarity index 50% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartView.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartView.java index 0b7d428..0df80d9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadChartView.java @@ -4,7 +4,8 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park + * WooJin Jung + * yeongtaik byeon * Juyoung Kim * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,28 +24,25 @@ * - 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)); - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadDetailInfoView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadDetailInfoView.java index 8fd4cfe..225cafe 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadDetailInfoView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadDetailInfoView.java @@ -4,7 +4,6 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * yeongtaik byeon * Jooyoul Lee @@ -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 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPage.java index d147e4e..b3b7434 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPage.java @@ -4,7 +4,6 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * yeongtaik byeon * Jooyoul Lee @@ -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 index 0000000..1ed1ee7 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java @@ -0,0 +1,144 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * yeongtaik byeon + * Juyoung Kim + * + * 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 contents = new ArrayList(); + protected List contentsQueue = new ArrayList(); + 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 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageDataEvent.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java similarity index 90% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageDataEvent.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java index 3b505e2..e8a95ab 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageDataEvent.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java @@ -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 index 000c89d..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChart.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * Juyoung Kim - * - * 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 children = new ArrayList(); - 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 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 index d691f34..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/SyncChartBoard.java +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * Juyoung Kim - * - * 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 syncChartItemList = new ArrayList(); - 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 seriesList = getSyncEventList(); - if (null == seriesList) { - return; - } - for (SyncChart chart : syncChartItemList) { - chart.updateSyncSeries(seriesList); - } - } - - private List getSyncEventList() { - List returnList = new ArrayList(); - returnList.addAll(selectSyncEventFromDB()); - returnList.addAll(ThreadDataManager.getInstance().getSyncDataMaker() - .getNotInsertSyncEventList()); - return returnList; - } - - private List selectSyncEventFromDB() { - List returnList = new ArrayList(); - 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 index 089a2e9..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChart.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * Juyoung Kim - * - * 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 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 index 524d217..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartBoard.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * Juyoung Kim - * - * 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 threadChartItemList = new ArrayList(); - - 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 sortList = sortThreadChartByTID(ThreadDataManager.getInstance() - .getThreadDataMaker().getChartRowData()); - for (ThreadPageThreadData data : sortList) { - if (isExistThreadChartRow(data)) { - continue; - } - addThreadParentChartItemList(data); - } - threadListCount = ThreadDataManager.getInstance().getThreadDataMaker().getChartRowData() - .size(); - } - - private List sortThreadChartByTID(List list) { - Comparator comparator = new Comparator() { - @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 seriesList = selectThreadEventSeriesListFromDB(); - if (null == seriesList) { - return; - } - for (ThreadChart chart : threadChartItemList) { - chart.updateThreadSeries(seriesList); - } - } - - private List selectThreadEventSeriesListFromDB() { - List returnValue = new ArrayList(); - 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; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncAPIDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIDBTable.java similarity index 58% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncAPIDBTable.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIDBTable.java index 0e48c67..d2b2839 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncAPIDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIDBTable.java @@ -3,8 +3,7 @@ * * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * - * Contact: - * Hyunjong Park + * Contact: * WooJin Jung * Juyoung Kim * @@ -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 insertSyncAPIList) { - if (insertSyncAPIList.size() == 0) { - return; - } - ArrayList> insertData = new ArrayList>(); - for (SyncData syncAPI : insertSyncAPIList) { - List insertRowData = new ArrayList(); - 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> getSyncAPIFromDB() { return selectAllColumnData(null); } - + @Override public boolean prepare(PreparedStatement prep, List 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 extractDataFromResultSet(ResultSet rs) { List row = new ArrayList(); @@ -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 index 0000000..948e37d --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncAPIInserter.java @@ -0,0 +1,106 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * Juyoung Kim + * + * 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 java.util.concurrent.LinkedBlockingQueue; + +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.swap.model.data.SyncData; +import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; +//TODO: use DBInserter +public class SyncAPIInserter implements Runnable { + private static LinkedBlockingQueue syncAPIQueue = new LinkedBlockingQueue(); + + private static volatile Thread inserterThread = null; + + public static void startThread() { + if (inserterThread == null || !inserterThread.isAlive()) { + synchronized (SyncAPIInserter.class) { + if (inserterThread == null || !inserterThread.isAlive()) { + inserterThread = new Thread(null, + new SyncAPIInserter()); + inserterThread.start(); + } + } + } + } + + public static void stopThread() { + if (inserterThread != null && inserterThread.isAlive()) { + try { + sendNotify(); + inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public static void pushSyncEvent(SyncData syncAPI) { + syncAPIQueue.offer(syncAPI); + } + + public static void clear() { + stopThread(); + } + + @Override + public void run() { + while (!AnalyzerManager.isExit()) { + SyncData syncAPI = syncAPIQueue.poll(); + + if (syncAPI != null) { + ArrayList> insertData = new ArrayList>(); + List insertRowData = new ArrayList(); + 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) { + ThreadChartManager.getInstance().getSyncAPIDBTable().insertData(insertData); + } + } + } + } + + public static void sendNotify() { +// syncAPIQueue.wake(); + } +} 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 index 0000000..32d359d --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataDBTable.java @@ -0,0 +1,144 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * Juyoung Kim + * + * 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> getSyncDataFromDB() { + return selectAllColumnData(QUERY_OPTION); + } + + @Override + public boolean prepare(PreparedStatement prep, List 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 extractDataFromResultSet(ResultSet rs) { + List row = new ArrayList(); + 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 index 0000000..7872def --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncDataInserter.java @@ -0,0 +1,122 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * Juyoung Kim + * + * 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 java.util.concurrent.LinkedBlockingQueue; + +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.nl.ThreadPageLabels; +import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; +import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData; +import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager; +//TODO: use DBInserter +public class SyncDataInserter implements Runnable { + private static LinkedBlockingQueue syncDataQueue = new LinkedBlockingQueue(); + + private static volatile Thread inserterThread = null; + + public static void startThread() { + if (inserterThread == null || !inserterThread.isAlive()) { + synchronized (SyncDataInserter.class) { + if (inserterThread == null || !inserterThread.isAlive()) { + inserterThread = new Thread(null, + new SyncDataInserter()); + inserterThread.start(); + } + } + } + } + + public static void stopThread() { + if (inserterThread != null && inserterThread.isAlive()) { + try { + sendNotify(); + inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public static void pushSyncData(ThreadPageSyncData syncData) { + syncDataQueue.offer(syncData); + } + + public static void clear() { + stopThread(); + } + + @Override + public void run() { + while (!AnalyzerManager.isExit()) { + ThreadPageSyncData syncData = syncDataQueue.poll(); + + if (syncData != null) { + ArrayList> insertData = new ArrayList>(); + List insertRowData = new ArrayList(); + 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 = ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL; + } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE)) { + attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_RECURSIVE; + } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK)) { + attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_ERRORCHECK; + } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT)) { + attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_DEFAULT; + } else { + attrType = -1; + } + insertRowData.add(new Byte(attrType)); + insertRowData.add(new Byte(syncData.getSyncDataType())); + insertRowData.add(new Integer(syncData.getParentID())); + } catch (ArrayIndexOutOfBoundsException e) { + e.printStackTrace(); + } + insertData.add(insertRowData); + if (insertData.size() > 0) { + ThreadChartManager.getInstance().getSyncDataDBTable().insertData(insertData); + } + } + } + } + + public static void sendNotify() { +// syncDataQueue.wake(); + } +} 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 index 0000000..e79de6a --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventDBTable.java @@ -0,0 +1,139 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * Juyoung Kim + * + * 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> getSyncEventFromDB() { + return selectAllColumnData(null); + } + + @Override + public boolean prepare(PreparedStatement prep, List 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 extractDataFromResultSet(ResultSet rs) { + List row = new ArrayList(); + 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 index 0000000..233a247 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/SyncEventInserter.java @@ -0,0 +1,105 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * Juyoung Kim + * + * 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 java.util.concurrent.LinkedBlockingQueue; + +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; +import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent; +//TODO: use DBInserter +public class SyncEventInserter implements Runnable { + private static LinkedBlockingQueue syncEventQueue = new LinkedBlockingQueue(); + + private static volatile Thread inserterThread = null; + + public static void startThread() { + if (inserterThread == null || !inserterThread.isAlive()) { + synchronized (SyncEventInserter.class) { + if (inserterThread == null || !inserterThread.isAlive()) { + inserterThread = new Thread(null, + new SyncEventInserter()); + inserterThread.start(); + } + } + } + } + + public static void stopThread() { + if (inserterThread != null && inserterThread.isAlive()) { + try { + sendNotify(); + inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public static void pushSyncEvent(ThreadPageSyncDataEvent syncEvent) { + syncEventQueue.offer(syncEvent); + } + + public static void clear() { + stopThread(); + } + + @Override + public void run() { + while (!AnalyzerManager.isExit()) { + ThreadPageSyncDataEvent syncEvent = syncEventQueue.poll(); + + if (syncEvent != null) { + ArrayList> insertData = new ArrayList>(); + List insertRowData = new ArrayList(); + 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())); + } catch (ArrayIndexOutOfBoundsException e) { + e.printStackTrace(); + } + insertData.add(insertRowData); + if (insertData.size() > 0) { + ThreadChartManager.getInstance().getSyncEventDBTable().insertData(insertData); + } + } + } + } + + public static void sendNotify() { +// syncEventQueue.wake(); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadAPIDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadAPIDBTable.java similarity index 56% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadAPIDBTable.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadAPIDBTable.java index fb82204..3ae85ae 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadAPIDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadAPIDBTable.java @@ -4,7 +4,6 @@ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * Juyoung Kim * @@ -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> getThreadAPIFromDB() { return selectAllColumnData(null); } - - public void insertThreadAPIData(List insertThreadEventList) { - ArrayList> apiData = new ArrayList>(); - for (ThreadPageThreadDataEvent threadEvent : insertThreadEventList) { - if (threadEvent.getEventType() != ThreadPageThreadDataEvent.TYPE_API) { - continue; - } - List apiRowData = new ArrayList(); - 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 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 extractDataFromResultSet(ResultSet rs) { List row = new ArrayList(); @@ -181,7 +148,7 @@ public class ThreadAPIDBTable extends DBTable { e.printStackTrace(); return null; } - + return row; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataDBTable.java similarity index 54% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadDataDBTable.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataDBTable.java index a3726b2..88bbe08 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadDataDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataDBTable.java @@ -4,7 +4,6 @@ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * Juyoung Kim * @@ -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> getThreadDataFromDB() { return selectAllColumnData(null); } - - public void inserthreadPageThreadData(List remainedThreadData) { - List> insertData = new ArrayList>(); - for (ThreadPageThreadData threadPageData : remainedThreadData) { - if (threadPageData instanceof ThreadPageThreadData == false) { - continue; - } - List insertRowData = new ArrayList(); - 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 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 extractDataFromResultSet(ResultSet rs) { List row = new ArrayList(); @@ -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 index a86b1a6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadDataManager.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 dataMap) { - threadDataTable.inserthreadPageThreadData(tManager.getChartRowData()); - sManager.insertNoBlockEndTimeSyncEvent(); - sManager.getNotInsertSyncEventList().clear(); - } - - public void openData(Map 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> threadDatas = threadDataTable.getThreadDataFromDB(); - int size = threadDatas.size(); - for (int i = 0; i < size; i++) { - List 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> 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 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 loadInputs = getLogsFromLogPackage(pack, DataChannelConstants.MSG_DATA_SYSTEM); - if (null != loadInputs) { - loadManager.makeLoadData(loadInputs); - } - List threadInputs = getLogsFromLogPackage(pack, - DataChannelConstants.MSG_PROBE_THREAD); - if (null != threadInputs) { - tManager.makeThreadData(threadInputs); - checkHeapMemory(); - } - List syncInputs = getLogsFromLogPackage(pack, DataChannelConstants.MSG_PROBE_SYNC); - if (null != syncInputs) { - sManager.makeSyncData(syncInputs); - checkHeapMemory(); - } - } - - private List getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) { - Logs logs = logPack.getLogs(logCenterConstants); - if (null == logs || logs.getRawLogs().size() == 0) { - return null; - } - List ret = logs.getLogs(); - return ret; - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadEventDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventDBTable.java similarity index 53% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadEventDBTable.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventDBTable.java index 74cd895..18d35b3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadEventDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventDBTable.java @@ -4,7 +4,6 @@ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * Juyoung Kim * @@ -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> getThreadEventFromDB() { return selectAllColumnData(null); } - - public void insertThreadEventData(List insertThreadEventList) { - ArrayList> insertData = new ArrayList>(); - for (ThreadPageThreadDataEvent threadEvent : insertThreadEventList) { - List insertRowData = new ArrayList(); - 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 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 extractDataFromResultSet(ResultSet rs) { List row = new ArrayList(); 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 index 0000000..33b0e7c --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadEventInserter.java @@ -0,0 +1,136 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * Juyoung Kim + * + * 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 java.util.concurrent.LinkedBlockingQueue; + +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.swap.model.data.ThreadData; +import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; +import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataEvent; +// TODO: use DBInserter +public class ThreadEventInserter implements Runnable { + private static LinkedBlockingQueue threadEventQueue = new LinkedBlockingQueue(); + + private static volatile Thread inserterThread = null; + + public static void startThread() { + if (inserterThread == null || !inserterThread.isAlive()) { + synchronized (ThreadEventInserter.class) { + if (inserterThread == null || !inserterThread.isAlive()) { + inserterThread = new Thread(null, + new ThreadEventInserter()); + inserterThread.start(); + } + } + } + } + + public static void stopThread() { + if (inserterThread != null && inserterThread.isAlive()) { + try { + sendNotify(); + inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public static void pushThreadEvent(ThreadPageThreadDataEvent threadEvent) { + threadEventQueue.offer(threadEvent); + } + + public static void clear() { + stopThread(); + } + + @Override + public void run() { + while (!AnalyzerManager.isExit()) { + ThreadPageThreadDataEvent threadEvent = threadEventQueue.poll(); + + if (threadEvent != null) { + ArrayList> insertData = new ArrayList>(); + List insertRowData = new ArrayList(); + 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())); + Integer callerTid = -1; + if (threadEvent.getCallerTid() != null) { + callerTid = new Integer(threadEvent.getCallerTid()); + } + insertRowData.add(callerTid); + } catch (ArrayIndexOutOfBoundsException e) { + e.printStackTrace(); + } + insertData.add(insertRowData); + if (insertData.size() > 0) { + ThreadChartManager.getInstance().getThreadEventDBTable().insertData(insertData); + } + // save ThreadAPI + if (threadEvent.getEventType() == ThreadPageThreadDataEvent.TYPE_API) { + ArrayList> apiData = new ArrayList>(); + List apiRowData = new ArrayList(); + 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) { + ThreadChartManager.getInstance().getThreadAPIDBTable().insertData(apiData); + } + } + } + } + } + + public static void sendNotify() { +// threadEventQueue.wake(); + } +} 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 index 61ca23c..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadLoadDataMaker.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 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 insertThreadEventList = new ArrayList(); - 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 index 2df1243..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadSyncDataMaker.java +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 chartRowData = new ArrayList(); - private List noBlockEndTimeSyncEventQueue = new ArrayList(); - private List syncEventQueue = new ArrayList(); - private List syncEventQueueOfThread = new ArrayList(); - private HashMap syncAttrMap = new HashMap(); - - 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 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 insertSyncEventQueue = new ArrayList(); - List insertSyncDataQueue = new ArrayList(); - 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 insertSyncEventQueue = new ArrayList(); - List insertSyncDataQueue = new ArrayList(); - List insertSyncAPIQueue = new ArrayList(); - 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 insertSyncEventQueue) { - makeBlockEndTime(insertSyncEventQueue); - ThreadDataManager.getInstance().getSyncEventDBTable() - .insertSyncEventData(insertSyncEventQueue); - } - - private void makeBlockEndTime(List insertSyncEventQueue) { - setBlockEndTimeOfInsertList(insertSyncEventQueue); - updateNoBlockEndTimeList(insertSyncEventQueue); - addInsertListFromNoBlockEndTimeList(insertSyncEventQueue); - } - - private void setBlockEndTimeOfInsertList(List list) { - setBlockEndTime(list, list); - setBlockEndTime(noBlockEndTimeSyncEventQueue, list); - } - - private void setBlockEndTimeOfNoBlockEndTimeList(List insertSyncEventQueue) { - for (ThreadPageSyncDataEvent event : insertSyncEventQueue) { - updateBlockEndTimeOfNotReleaseSyncEventQueue(event); - } - } - - private void setBlockEndTime(List targetList, - List refList) { - sortListByTime(targetList); - for (ThreadPageSyncDataEvent targerEvent : targetList) { - setBlockEndTime(targerEvent, refList); - } - } - - private void updateBlockEndTimeOfNotReleaseSyncEventQueue(ThreadPageSyncDataEvent event) { - setBlockEndTime(event, noBlockEndTimeSyncEventQueue); - } - - private void setBlockEndTime(ThreadPageSyncDataEvent targetEvent, - List 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 list) { - Comparator comparator = new Comparator() { - @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 insertSyncEventQueue) { - List removeEveneList = new ArrayList(); - 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 insertSyncEventQueue) { - List removeEveneList = new ArrayList(); - 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 getChartRowData() { - List returnList = new ArrayList(); - for(ThreadPageSyncData data : chartRowData){ - returnList.add(data); - } - return returnList; - } - - public List 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 index 018d5b2..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/data/ThreadThreadDataMaker.java +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 eventQueue = new ArrayList(); - private HashMap joinableThreadMap = new HashMap(); - private List chartRowData = new ArrayList(); - private HashMap threadFuncMap = new HashMap(); - private HashMap threadAttrMap = new HashMap(); - private List callEventQueue = new ArrayList(); - - public static final int PTHREAD_CREATE_JOINABLE = 0; - public static final int PTHREAD_CREATE_DETACHED = 1; - - public void makeThreadData(List 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 insertThreadEvent = new ArrayList(); - 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 insertThreadEvent = new ArrayList(); - 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 insertThreadEvent = new ArrayList(); - 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 insertThreadEvent = new ArrayList(); - 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 insertThreadEvent = new ArrayList(); - 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 getChartRowData() { - List returnList = new ArrayList(); - 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 index bcba12f..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncDataDBTable.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * Juyoung Kim - * - * 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> getSyncDataFromDB() { - return selectAllColumnData(QUERY_OPTION); - } - - public void insertSyncData(List insertSyncDataQueue) { - if (insertSyncDataQueue.size() == 0) { - return; - } - ArrayList> insertData = new ArrayList>(); - for (ThreadPageSyncData syncData : insertSyncDataQueue) { - List insertRowData = new ArrayList(); - 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 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 extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - 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 index 5a4bc2f..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/SyncEventDBTable.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * Juyoung Kim - * - * 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> getSyncEventFromDB() { - return selectAllColumnData(null); - } - - public List> getInsertDBData(ThreadPageSyncDataEvent syncEvent) { - List> insertData = new ArrayList>(); - List insertRowData = new ArrayList(); - 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 syncEventQueue) { - if (syncEventQueue.size() == 0) { - return; - } - List> insertData = new ArrayList>(); - for (ThreadPageSyncDataEvent syncEvent : syncEventQueue) { - List insertRowData = new ArrayList(); - 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 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 extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - 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 index 0000000..9a4599e --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncData.java @@ -0,0 +1,287 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * yeongtaik byeon + * Juyoung Kim + * + * 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 children = new ArrayList(); + 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 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncDataEvent.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataEvent.java similarity index 80% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncDataEvent.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataEvent.java index 8c66352..8d822b0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncDataEvent.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataEvent.java @@ -4,7 +4,6 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * yeongtaik byeon * Juyoung Kim @@ -25,41 +24,44 @@ * - 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 index 0000000..03d3a36 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/sync/ThreadPageSyncDataManager.java @@ -0,0 +1,653 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * yeongtaik byeon + * Juyoung Kim + * + * 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 rows = new ArrayList(); + private List rowsQueue = new ArrayList(); + private List syncEventQueue = new ArrayList(); + private HashMap syncAttrMap = new HashMap(); + 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 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 getLogsFromLogPackage(LogPackage logPack, + int logCenterConstants) { + Logs logs = logPack.getLogs(logCenterConstants); + if (null == logs || null == logs.getRawLogs() || logs.getRawLogs().isEmpty()) { + return null; + } + List ret = logs.getRawLogs(); + return ret; + } + + public void parsePageData(LogPackage logPack) { + List 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 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() { + 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() { + 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 index 0000000..61009a4 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadData.java @@ -0,0 +1,320 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * yeongtaik byeon + * Juyoung Kim + * + * 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 syncs = new ArrayList(); + 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadDataEvent.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataEvent.java similarity index 81% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadDataEvent.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataEvent.java index a9ed7ac..45d467e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadDataEvent.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataEvent.java @@ -4,7 +4,6 @@ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Hyunjong Park * WooJin Jung * yeongtaik byeon * Juyoung Kim @@ -25,13 +24,15 @@ * - 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 joinAPIs = new ArrayList(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 index 0000000..024a3b6 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/thread/ThreadPageThreadDataManager.java @@ -0,0 +1,1392 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * WooJin Jung + * yeongtaik byeon + * Juyoung Kim + * + * 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 rows = new ArrayList(); + private List rowsQueue = new ArrayList(); + private List callRowsQueue = new ArrayList(); + private List syncEventQueue = new ArrayList(); + private List eventQueue = new ArrayList(); + private List callEventQueue = new ArrayList(); + // load from database + private List syncQueue = new ArrayList(); + + private HashMap threadAttrMap = new HashMap(); + private HashMap syncAttrMap = new HashMap(); + // threadFuncMap : (pthreadId, function address) + private HashMap threadFuncMap = new HashMap(); + 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 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 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 getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) { + Logs logs = logPack.getLogs(logCenterConstants); + if (null == logs || logs.getRawLogs().size() == 0) { + return null; + } + List 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 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 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 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 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() { + 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 index d6da578..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageData.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 index 31cc95c..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageSyncData.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 children = new ArrayList(); - - 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 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 index 28802b7..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/type/ThreadPageThreadData.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * WooJin Jung - * yeongtaik byeon - * Juyoung Kim - * - * 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 syncs = new ArrayList(); - 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java index 9810000..92b9873 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java @@ -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"), diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java index 2eef100..4407dd2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java @@ -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"), diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ScreenshotChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ScreenshotChart.java index ad58cc1..06440a2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ScreenshotChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ScreenshotChart.java @@ -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 imageMap = new ConcurrentHashMap(); - + 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 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)); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/UIEventChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/UIEventChart.java index ad5c4bb..12923cb 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/UIEventChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/UIEventChart.java @@ -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 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java index d0884f3..a62167d 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java @@ -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 files = (List) 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); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java index 25697eb..1454d27 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java @@ -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) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialog.java index b39590e..dc2528e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialog.java @@ -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() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java index 32e13f1..6a33708 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java @@ -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) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java index df495da..919035b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java @@ -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) { diff --git a/package/changelog b/package/changelog index 82ab6ec..32c68f7 100644 --- a/package/changelog +++ b/package/changelog @@ -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 2014-11-03 -* 2.1.58 - Fix Bug : screenshot periodically in Setting Dialog == Heeyoung Hwang 2014-10-28 * 2.1.57 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index 3884138..da80f7a 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,5 +1,5 @@ Source:dynamic-analyzer -Version:2.1.59 +Version:2.1.58 Maintainer:Jaewon Lim , Juyoung Kim Package:dynamic-analyzer-product -- 2.7.4