From 060d61f2d65da44271b8db2b0372b061f5227160 Mon Sep 17 00:00:00 2001 From: Dmitriy Nikiforov Date: Thu, 2 Mar 2017 18:45:28 +0300 Subject: [PATCH] [RELEASE] DA 2.5.1 - Fix a regression of hidden in tracing time Call Trace table (regression in DA 2.5.0) - Show filter icon after filtering above sorting (SRADA-1364) - Fix a regression of inserting an "unknown" API item into callstack (SRADA-1362) - Disable sorting in Memory Details table (SRADA-1366) - Fix popup menu behavior broken with previous redesign of callstack (regression in DA 2.5.0) - Improve memory usage and performance for HeapAllocation profiling (SRADA-1231) - Add primary keys and indexes for database tables - Update HSQLDB to 2.3.4 version - Heavy queries to database are executed in separate threads - All data calculation for Statistics and Persistent Allocations tables is moved to database - Increase max memory available to DA from 512MB to 1GB - Fix incorrect memory map building (SRADA-1327) - Add device serial number to pop-up notifications (SRADA-1255) - Removed redundant double updates in left table views (SRADA-1374) - Remove deprecated logic related to Interactive, Kernel, Range Analysis and User Interface pages - Replace 'Analyze range' pop-up menu item for charts with 'Select range' - Fix synchronization issues in DeviceManager and NotificationManager (regression in DA 2.5.0) - Fix NullPointerException in TableTooltipListener (SRADA-1390) - Fix JIRA defects: SPTSDKUX-3428: Tracing data is not being saved in given path but no failure message shown Change-Id: I5195b44905e38ae6179739814675e732ac5134cc --- .../dynamicanalyzer/resources/FontResources.java | 17 +- .../dynamicanalyzer/resources/ImageResources.java | 30 + .../flat/img/configurable_feature_area_nor.png | Bin 0 -> 3538 bytes .../flat/img/configurable_feature_area_over.png | Bin 0 -> 3532 bytes .../flat/img/configurable_feature_area_sel.png | Bin 0 -> 3451 bytes .../theme/flat/img/da_column_filtered.png | Bin 0 -> 2979 bytes .../theme/flat/img/da_column_filtered_Mover.png | Bin 0 -> 2949 bytes .../theme/flat/img/da_column_filtered_Mpressed.png | Bin 0 -> 2960 bytes .../theme/flat/img/noti_icon_info.png | Bin 0 -> 2045 bytes .../theme/flat/img/noti_pop_bg.png | Bin 0 -> 1497 bytes .../theme/flat/img/sorted_desc.png | Bin 0 -> 3014 bytes .../theme/flat/img/sorted_desc_over.png | Bin 0 -> 2916 bytes .../theme/flat/img/sorted_desc_sel.png | Bin 0 -> 2916 bytes .../theme/flat/img/sorted_inc.png | Bin 0 -> 3009 bytes .../theme/flat/img/sorted_inc_over.png | Bin 0 -> 2932 bytes .../theme/flat/img/sorted_inc_sel.png | Bin 0 -> 2927 bytes .../theme/flat/img/target_connected.png | Bin 0 -> 2899 bytes .../theme/flat/img/target_disconnected.png | Bin 0 -> 2878 bytes .../tizen/dynamicanalyzer/cli/CliInternals.java | 2 +- org.tizen.dynamicanalyzer.common.test/pom.xml | 2 +- org.tizen.dynamicanalyzer.test/pom.xml | 2 +- .../callstack/BaseCallstackManagerTest.java | 257 ----- .../project/ProcessMemoryMapTest.java | 190 ++++ .../swap/logparser/MessageParserTest.java | 4 +- .../ui/memory/data/HeapDataManagerTest.java | 123 --- .../ui/memory/data/LeakDataManagerTest.java | 148 +++ .../data/util/StatisticsQuerySerializerTest.java | 56 ++ .../ui/memory/table/MemoryCallStackTableTest.java | 4 +- .../ui/page/PageInfoRegistryTest.java | 9 - org.tizen.dynamicanalyzer.widgets/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- .../META-INF/MANIFEST.MF | 1 + .../chart/DANotificationOnChartRenderer.java | 44 + .../widgets/chartBoard/DAChartBoard.java | 38 +- .../widgets/da/base/ProgressDialog.java | 35 +- .../widgets/notification/DAPopupNotification.java | 330 +++++++ .../notification/DAPopupNotificationRenderer.java | 200 ++++ .../notification/IPopupNotificationRenderer.java | 29 + .../widgets/popupMenu/DAPopupMenu.java | 18 +- .../dynamicanalyzer.product | 7 +- .../pom.xml | 4 +- .../resources/config/setting | 2 +- org.tizen.dynamicanalyzer/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- org.tizen.dynamicanalyzer/lib/hsqldb.jar | Bin 1467326 -> 1515894 bytes .../dynamicanalyzer/common/AnalyzerConstants.java | 2 +- .../dynamicanalyzer/common/AnalyzerManager.java | 5 - .../common/AnalyzerShellCommands.java | 3 + .../dynamicanalyzer/common/AutoStartManager.java | 2 +- .../org/tizen/dynamicanalyzer/common/DAResult.java | 1 + .../org/tizen/dynamicanalyzer/common/DAState.java | 4 + .../org/tizen/dynamicanalyzer/common/Global.java | 12 - .../dynamicanalyzer/common/SymbolManager.java | 83 +- .../communicator/DACommunicator.java | 85 +- .../communicator/DeviceManager.java | 237 ++--- .../communicator/IDECommunicator.java | 51 - .../communicator/IDeviceStatusListener.java | 19 + .../communicator/SubCommunicator.java | 43 +- .../tizen/dynamicanalyzer/control/DataThread.java | 13 +- .../tizen/dynamicanalyzer/control/IProgress.java | 9 +- .../dynamicanalyzer/control/ProgressTable.java | 32 +- .../dynamicanalyzer/control/StartTraceManager.java | 471 ++++----- .../dynamicanalyzer/control/StopTraceManager.java | 45 +- .../tizen/dynamicanalyzer/database/DBColumn.java | 11 - .../dynamicanalyzer/database/DBConstants.java | 2 + .../tizen/dynamicanalyzer/database/DBTable.java | 112 ++- .../dynamicanalyzer/database/DBTableRegistry.java | 4 +- .../database/SqlConnectionManager.java | 20 +- .../compatible/SubConverter10to20Earlier.java | 2 +- .../compatible/SubConverter10to20Later.java | 28 +- .../tizen/dynamicanalyzer/handlers/CLIAction.java | 9 - .../dynamicanalyzer/handlers/CommandAction.java | 28 +- .../tizen/dynamicanalyzer/handlers/GUIAction.java | 7 +- .../dynamicanalyzer/handlers/OpenTraceHandler.java | 20 - .../listeners/TableTooltipListener.java | 13 +- .../tizen/dynamicanalyzer/nl/AnalyzerLabels.java | 13 + .../dynamicanalyzer/nl/AnalyzerLabels.properties | 12 +- .../tizen/dynamicanalyzer/nl/ConfigureLabels.java | 3 + .../dynamicanalyzer/nl/ConfigureLabels.properties | 3 + .../dynamicanalyzer/nl/InteractivePageLabels.java | 51 - .../nl/InteractivePageLabels.properties | 9 - .../tizen/dynamicanalyzer/nl/KernelPageLabels.java | 92 -- .../dynamicanalyzer/nl/KernelPageLabels.properties | 50 - .../dynamicanalyzer/nl/TimelineChartLabels.java | 10 +- .../nl/TimelineChartLabels.properties | 6 - .../dynamicanalyzer/nl/UserErrorWarningLabels.java | 7 + .../nl/UserErrorWarningLabels.properties | 4 + .../nl/UserInterfacePageLabels.java | 76 -- .../nl/UserInterfacePageLabels.properties | 36 - .../org/tizen/dynamicanalyzer/project/AppInfo.java | 9 +- .../dynamicanalyzer/project/LibraryObject.java | 55 +- .../project/ProcessInformation.java | 18 - .../dynamicanalyzer/project/ProcessMemoryMap.java | 207 +++- .../org/tizen/dynamicanalyzer/project/Project.java | 46 +- .../project/callstack/BaseCallstackManager.java | 244 ----- .../project/callstack/RangeCallstackManager.java | 148 --- .../project/callstack/RuntimeCallstackManager.java | 501 ---------- .../project/data/MemoryMapDBTable.java | 3 + .../protocol/p30/Communicator30.java | 15 +- .../protocol/p30/ProtocolConfig30.java | 1 + .../protocol/p30_uihv/Communicator30_UIHV.java | 8 +- .../protocol/p30_uihv/ProtocolConfig30_UIHV.java | 1 + .../protocol/p40/Communicator40.java | 121 +-- .../protocol/p40/ProtocolConfig40.java | 1 + .../protocol/p41/Communicator41.java | 8 +- .../protocol/p41/ProtocolConfig41.java | 1 + .../tizen/dynamicanalyzer/setting/FlatFeature.java | 37 +- .../setting/SettingDataManager.java | 32 + .../dynamicanalyzer/swap/logparser/LogParser.java | 70 +- .../swap/logparser/MessageParser.java | 87 +- .../swap/model/data/ProfileData.java | 13 +- .../dynamicanalyzer/ui/common/ChartPopupMenu.java | 88 ++ .../common/PopupAnalysisMenuItemClickListener.java | 42 - .../ui/common/PopupClearMenuItemClickListener.java | 42 - .../ui/common/PopupEndMenuItemClickListener.java | 62 -- .../PopupFromSelectionMenuItemClickListener.java | 70 -- .../common/PopupRangeAnalysisMenuItemListener.java | 16 - .../PopupRangeAnalysisMenuItemOnChartListener.java | 47 - .../ui/common/PopupStartMenuItemClickListener.java | 62 -- .../ui/common/TimelineChartMouseEventListener.java | 9 +- .../ui/common/UICommonConstants.java | 2 - .../dynamicanalyzer/ui/file/FileApiListTable.java | 28 - .../dynamicanalyzer/ui/file/FileApiListView.java | 30 - .../dynamicanalyzer/ui/file/FileChartBoard.java | 10 +- .../dynamicanalyzer/ui/file/FileChartView.java | 35 - .../tizen/dynamicanalyzer/ui/file/FilePage.java | 11 +- .../ui/info/appStartup/AppStartupTable.java | 13 +- .../ui/info/appStartup/WebAppStartupDBTable.java | 2 +- .../ui/info/appStartup/WebAppStartupTable.java | 17 +- .../ui/info/callstack/CallStackData.java | 85 -- .../ui/info/callstack/CallStackDataDBTable.java | 126 --- .../ui/info/callstack/CallStackInserter.java | 197 ---- .../ui/info/callstack/CallStackItem.java | 51 - .../ui/info/callstack/CallStackUnit.java | 175 ++-- .../ui/info/callstack/CallStackUnitDBTable.java | 108 -- .../ui/info/callstack/CallstackTable.java | 143 ++- .../ui/info/callstack/CallstackView.java | 4 - .../ui/info/screenshot/ScreenShotDBTable.java | 2 +- .../ui/interactive/InteractivePage.java | 115 --- .../ui/interactive/chart/InteractiveChart.java | 168 ---- .../chart/InteractiveChartMouseEventListener.java | 268 ----- .../chart/InteractiveChartRenderer.java | 246 ----- .../ui/interactive/chart/InteractiveChartView.java | 343 ------- .../chart/InteractiveEditItemsDialog.java | 104 -- .../interactive/data/InteractiveDataManager.java | 473 --------- .../ui/interactive/data/InteractiveUIData.java | 168 ---- .../ui/interactive/data/InteractiveValue.java | 41 - .../interactive/data/InteractiveValueDBTable.java | 112 --- .../data/InteractiveVariableDBTable.java | 186 ---- .../interactive/model/InteractiveIDGenerator.java | 35 - .../ui/interactive/model/InteractiveInfo.java | 374 ------- .../ui/interactive/model/InteractiveParser.java | 605 ------------ .../ui/interactive/model/VAR_TYPE.java | 60 -- .../ui/interactive/table/InteractiveTable.java | 306 ------ .../table/InteractiveTableCellRenderer.java | 169 ---- .../table/InteractiveTableToggleRenderer.java | 109 -- .../ui/interactive/table/InteractiveTableView.java | 114 --- .../dynamicanalyzer/ui/kernel/CallFlowChart.java | 281 ------ .../ui/kernel/CallFlowChartRenderer.java | 49 - .../ui/kernel/CallFlowChartView.java | 260 ----- .../ui/kernel/ContextSwitchingChart.java | 380 ------- .../ui/kernel/ContextSwitchingChartRenderer.java | 251 ----- .../ui/kernel/ContextSwitchingChartSeriesItem.java | 143 --- .../ui/kernel/ContextSwitchingChartView.java | 272 ----- .../dynamicanalyzer/ui/kernel/KernelListTable.java | 259 ----- .../dynamicanalyzer/ui/kernel/KernelListView.java | 135 --- .../dynamicanalyzer/ui/kernel/KernelPage.java | 121 --- .../ui/kernel/KernelStatisticInfoView.java | 127 --- .../ui/kernel/data/ContextDataDBTable.java | 126 --- .../ui/kernel/data/FunctionDataDBTable.java | 140 --- .../ui/kernel/data/KernelDataMaker.java | 369 ------- .../ui/kernel/data/KernelDataManager.java | 241 ----- .../ui/kernel/data/KernelDataPerThread.java | 128 --- .../kernel/data/KernelDataPerThreadComparator.java | 49 - .../ui/kernel/data/KernelSelectionData.java | 50 - .../ui/memory/MemoryCallStackView.java | 5 - .../dynamicanalyzer/ui/memory/MemoryChartView.java | 21 - .../dynamicanalyzer/ui/memory/MemoryMapView.java | 31 +- .../dynamicanalyzer/ui/memory/MemoryPage.java | 57 +- .../MemoryPersistentAllocationsTableView.java | 7 +- .../ui/memory/MemoryStatisticsTableView.java | 4 +- .../ui/memory/chart/MemoryChart.java | 14 +- .../ui/memory/chart/MemoryChartBoard.java | 36 +- .../chart/MemoryChartMouseEventListener.java | 193 ---- .../ui/memory/data/HeapDataManager.java | 1040 ++------------------ .../ui/memory/data/HeapDataProcessor.java | 455 +++++++++ .../ui/memory/data/LsanDataManager.java | 158 +++ .../ui/memory/data/MemAllocDBTable.java | 13 +- .../ui/memory/data/MemFreeDBTable.java | 11 +- .../ui/memory/data/MemHeapDBTable.java | 5 +- .../ui/memory/data/MemLSanTable.java | 2 +- .../ui/memory/data/ProcessMemoryDBTable.java | 5 +- .../ui/memory/data/SystemMemoryDBTable.java | 2 +- .../util/PersistentAllocationsQuerySerializer.java | 79 ++ .../dynamicanalyzer/ui/memory/data/util/Query.java | 140 +++ .../ui/memory/data/util/QuerySerializer.java | 17 + .../data/util/StatisticsQuerySerializer.java | 87 ++ .../ui/memory/table/MemoryCallStackTable.java | 144 +-- .../ui/memory/table/MemoryDetailsTable.java | 5 - .../ui/memory/table/MemoryMapTable.java | 43 +- .../table/MemoryPersistentAllocationsTable.java | 177 +++- .../ui/memory/table/MemoryStatisticsTable.java | 157 ++- .../ui/network/NetworkAPIListView.java | 17 - .../ui/network/NetworkChartBoard.java | 24 +- .../ui/network/NetworkChartView.java | 24 - .../dynamicanalyzer/ui/network/NetworkPage.java | 9 +- .../ui/network/NetworkTableView.java | 17 - .../ui/network/data/NetworkAPIDBManager.java | 2 +- .../ui/notification/NotificationManager.java | 140 +++ .../tizen/dynamicanalyzer/ui/opengl/GLPage.java | 18 +- .../dynamicanalyzer/ui/opengl/chart/GLChart.java | 17 +- .../ui/opengl/chart/GLChartBoard.java | 14 - .../ui/opengl/chart/GLFrameRateChart.java | 4 +- .../ui/opengl/chart/GLFrameRateChartBoard.java | 25 +- .../ui/opengl/chart/GLFrameTimeChart.java | 4 +- .../ui/opengl/chart/GLFrameTimeChartBoard.java | 34 +- .../chart/listener/GLFrameRateMouseListener.java | 9 +- .../ui/opengl/data/DB/GLAPIDBTableManager.java | 2 +- .../opengl/data/DB/GLBufferSizeDBTableManager.java | 2 +- .../data/DB/GLCommonStateDBTableManager.java | 2 +- .../opengl/data/DB/GLFrameTimeDBTableManager.java | 2 +- .../data/DB/GLStateHistoryDBTableManager.java | 4 +- .../ui/opengl/table/api/GLAPITable.java | 17 - .../tizen/dynamicanalyzer/ui/page/BaseView.java | 2 +- .../org/tizen/dynamicanalyzer/ui/page/MenuBar.java | 4 +- .../dynamicanalyzer/ui/page/PageInfoRegistry.java | 34 +- .../dynamicanalyzer/ui/range/RangeDataManager.java | 568 ----------- .../ui/range/RangeFailedApiListView.java | 43 - .../tizen/dynamicanalyzer/ui/range/RangePage.java | 125 --- .../ui/range/RangeProfilingView.java | 51 - .../ui/range/RangeWarningDetailView.java | 40 - .../ui/range/RangeWarningListView.java | 43 - .../ui/summary/failed/FailedApiTable.java | 142 +-- .../summary/profiling/FunctionSampleDBTable.java | 2 +- .../summary/profiling/FunctionUsageProfiler.java | 48 +- .../profiling/FunctionUsageProfilingView.java | 8 - .../ui/summary/profiling/ProfileDataMaker.java | 374 +++++-- .../ui/summary/profiling/ProfilingData.java | 29 +- .../ui/summary/profiling/ProfilingTable.java | 27 +- .../summary/profiling/RangeProfileDataMaker.java | 169 ---- .../summary/profiling/RuntimeProfileDataMaker.java | 189 ---- .../ui/summary/profiling/WebProfilingTable.java | 23 +- .../ui/summary/warning/WarningTable.java | 67 +- .../ui/thread/ThreadAPIListView.java | 20 - .../dynamicanalyzer/ui/thread/ThreadPage.java | 7 +- .../ui/thread/chart/SyncChartBoard.java | 25 +- .../ui/thread/chart/ThreadChartBoard.java | 9 +- .../ui/thread/chart/ThreadChartView.java | 27 - .../ui/thread/db/SyncEventDBTable.java | 2 +- .../ui/thread/db/ThreadAPIDBTable.java | 2 +- .../ui/thread/db/ThreadEventDBTable.java | 2 +- .../ui/timeline/LifeCycleDBTable.java | 2 +- .../ui/timeline/SystemDataDBTable.java | 2 +- .../ui/timeline/TargetProcessDBTable.java | 2 +- .../dynamicanalyzer/ui/timeline/TimelinePage.java | 8 +- .../ui/timeline/UIEventDBTable.java | 2 +- .../timeline/calltrace/CallTraceDataManager.java | 375 +++++-- .../ui/timeline/calltrace/CallTraceTable.java | 13 +- .../timeline/calltrace/FunctionEntryDBTable.java | 94 +- .../timeline/calltrace/FunctionEntryIndexer.java | 171 ++++ .../ui/timeline/calltrace/FunctionExitDBTable.java | 139 --- .../calltrace/FunctionProfilingDataUpdater.java | 125 +++ .../ui/timeline/calltrace/WebCallTraceTable.java | 11 - .../calltrace/WebFunctionEntryDBTable.java | 2 +- .../timeline/calltrace/WebFunctionExitDBTable.java | 2 +- .../ui/timeline/chart/CPUChart.java | 4 +- .../ui/timeline/chart/EnergyChart.java | 4 +- .../ui/timeline/chart/HeapChart.java | 12 +- .../ui/timeline/chart/ProcessMemoryChart.java | 6 +- .../ui/timeline/chart/TimelineChart.java | 15 +- .../ui/timeline/common/TimelineChartView.java | 43 - .../ui/timeline/common/TimelineTableView.java | 6 +- .../ui/timeline/dlog/DlogTable.java | 4 - .../ui/timeline/uievent/UIEventListDialog.java | 43 - .../tizen/dynamicanalyzer/ui/toolbar/Toolbar.java | 30 +- .../opentrace/OpenTraceProgressManager.java | 3 + .../ui/toolbar/setting/FlatFeatureDialog.java | 7 +- .../FlatFeatureDialogSelectedFeaturePage.java | 168 ++-- .../setting/FlatFeatureDialogTargetPage.java | 198 +++- .../ui/toolbar/setting/PreferencesDialog.java | 224 +++-- .../ui/userinterface/UIDataManager.java | 128 --- .../dynamicanalyzer/ui/userinterface/UIPage.java | 116 --- .../userinterface/control/UIControlListData.java | 206 ---- .../control/UIControlListDataChecker.java | 241 ----- .../userinterface/control/UIControlListTable.java | 293 ------ .../userinterface/control/UIControlListView.java | 118 --- .../UIFunctionProfilingColumnGroupRenderer.java | 71 -- .../profiling/UIFunctionProfilingData.java | 263 ----- .../profiling/UIFunctionProfilingDataChecker.java | 448 --------- .../profiling/UIFunctionProfilingTable.java | 301 ------ .../profiling/UIFunctionProfilingTreeSetData.java | 75 -- .../profiling/UIFunctionProfilingView.java | 170 ---- .../ui/userinterface/scene/UISceneData.java | 158 --- .../ui/userinterface/scene/UISceneDataChecker.java | 91 -- .../ui/userinterface/scene/UISceneListTable.java | 154 --- .../ui/userinterface/scene/UISceneListView.java | 119 --- .../ui/widgets/DADefaultChartBoard.java | 23 +- .../ui/widgets/table/DATableComposite.java | 240 +++-- .../ui/widgets/table/DATableHeaderRenderer.java | 91 +- .../ui/widgets/table/DATableRegistry.java | 15 + .../ui/widgets/table/DATreeComposite.java | 3 +- .../widgets/table/DAWindowingTableComposite.java | 16 - .../org/tizen/dynamicanalyzer/utils/ZipUtils.java | 306 +++--- package/changelog | 52 +- package/pkginfo.manifest | 2 +- pom.xml | 6 +- 306 files changed, 6035 insertions(+), 18556 deletions(-) create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/configurable_feature_area_nor.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/configurable_feature_area_over.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/configurable_feature_area_sel.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered_Mover.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered_Mpressed.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/noti_icon_info.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/noti_pop_bg.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_desc.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_desc_over.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_desc_sel.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_inc.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_inc_over.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_inc_sel.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/target_connected.png create mode 100644 org.tizen.dynamicanalyzer.appearance/theme/flat/img/target_disconnected.png delete mode 100644 org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanakyzer/project/callstack/BaseCallstackManagerTest.java create mode 100644 org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMapTest.java create mode 100644 org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/LeakDataManagerTest.java create mode 100644 org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializerTest.java create mode 100644 org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DANotificationOnChartRenderer.java create mode 100644 org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotification.java create mode 100644 org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotificationRenderer.java create mode 100644 org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/IPopupNotificationRenderer.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDeviceStatusListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.properties delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.properties delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.properties delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/BaseCallstackManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RangeCallstackManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RuntimeCallstackManager.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/ChartPopupMenu.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupAnalysisMenuItemClickListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupClearMenuItemClickListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupEndMenuItemClickListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupFromSelectionMenuItemClickListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemOnChartListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupStartMenuItemClickListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackItem.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnitDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/InteractivePage.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartMouseEventListener.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveEditItemsDialog.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveDataManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveUIData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValue.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValueDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveVariableDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveIDGenerator.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveInfo.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveParser.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/VAR_TYPE.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableCellRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableToggleRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartSeriesItem.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelPage.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelStatisticInfoView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/ContextDataDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/FunctionDataDBTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataMaker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThread.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThreadComparator.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelSelectionData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartMouseEventListener.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataProcessor.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/LsanDataManager.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/PersistentAllocationsQuerySerializer.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/Query.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/QuerySerializer.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializer.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/notification/NotificationManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeFailedApiListView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangePage.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeProfilingView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningDetailView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningListView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RangeProfileDataMaker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RuntimeProfileDataMaker.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryIndexer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionProfilingDataUpdater.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIDataManager.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIPage.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListDataChecker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingColumnGroupRenderer.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingDataChecker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTreeSetData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingView.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneData.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneDataChecker.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListTable.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListView.java diff --git a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/FontResources.java b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/FontResources.java index 9e04799..0220f90 100644 --- a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/FontResources.java +++ b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/FontResources.java @@ -220,7 +220,7 @@ public class FontResources { // * seting public static final Font SETTING_BUTTON_FONT = getFont( - "setting_button_font", resizeDefaultFont(8, 3));//$NON-NLS-1$ + "setting_button_font", resizeDefaultFont(6, 3));//$NON-NLS-1$ public static final Font SETTING_TITLE_FONT = getFont( "setting_title_font", resizeDefaultFont(10, -1));//$NON-NLS-1$ @@ -266,6 +266,12 @@ public class FontResources { public static final Font ABOUT_DIALOG_TITLE_SMALL_FONT = getFont( "about_dialog_title_small_font", new FontData[] { new FontData("Arial", 10, SWT.BOLD) });//$NON-NLS-1$ + public static final Font NOTIFICATION_TITLE_FONT = getFont("notification_title_font", + resizeSystemFont(13, SWT.BOLD)); + + public static final Font NOTIFICATION_MESSAGE_FONT = getFont("notification_message_font", + resizeSystemFont(10)); + private static Font getFont(String fontName, FontData[] fontData) { if (!fontRegistry.hasValueFor(fontName)) { fontRegistry.put(fontName, fontData); @@ -322,6 +328,15 @@ public class FontResources { return fontData; } + public static FontData[] resizeSystemFont(int size, int style) { + FontData[] fontData = systemFont.getFontData(); + for (int i = 0; i < fontData.length; i++) { + fontData[i].setHeight(size); + fontData[i].setStyle(style); + } + return fontData; + } + public static Font getDADefaultFont() { String fontName = null; if (CommonUtil.isLinux()) { diff --git a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ImageResources.java b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ImageResources.java index a544c22..492f5e7 100644 --- a/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ImageResources.java +++ b/org.tizen.dynamicanalyzer.appearance/src/org/tizen/dynamicanalyzer/resources/ImageResources.java @@ -26,6 +26,11 @@ */ package org.tizen.dynamicanalyzer.resources; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; @@ -197,6 +202,8 @@ public class ImageResources { public static final Image TARGET_NAME_FLAT_TV_NORMAL = getPngImage("device_tv_nor"); //$NON-NLS-1$ public static final Image TARGET_NAME_FLAT_TV_OVER = getPngImage("device_tv_over"); //$NON-NLS-1$ public static final Image TARGET_NAME_FLAT_TV_SEL = getPngImage("device_tv_sel"); //$NON-NLS-1$ + public static final Image TARGET_CONNECTED = getPngImage("target_connected"); //$NON-NLS-1$ + public static final Image TARGET_DISCONNECTED = getPngImage("target_disconnected"); //$NON-NLS-1$ public static final Image TEMPLATE_BOTTLENECK_ANALYSIS = getPngImage("feature_template_bottleneck"); //$NON-NLS-1$ public static final Image TEMPLATE_MEMORY_LEAK = getPngImage("feature_template_memoryleaks"); //$NON-NLS-1$ @@ -378,6 +385,11 @@ public class ImageResources { public static final Image TOOLTIP_INFO_FEATURELIST_NORMAL = getPngImage("tooltip_icon-nor"); public static final Image TOOLTIP_INFO_FEATURELIST_HOVER = getPngImage("tooltip_icon-hov"); + /** configurable features **/ + public static final Image CONFIG_FEATURE_NORMAL = getPngImage("configurable_feature_area_nor"); + public static final Image CONFIG_FEATURE_HOVER = getPngImage("configurable_feature_area_over"); + public static final Image CONFIG_FEATURE_PUSH = getPngImage("configurable_feature_area_sel"); + /** etc **/ public static final Image DELETE = getPngImage("delete"); @@ -422,6 +434,20 @@ public class ImageResources { public static final Image CONNECT_BTN_OVER = getPngImage("btn_connect_over"); public static final Image CONNECT_BTN_SEL = getPngImage("btn_connect_sel"); + /** Filtered table */ + public static final Image DA_IC_FILTER = getPngImage("da_column_filtered"); + public static final Image DA_IC_FILTER_OVER = getPngImage("da_column_filtered_Mover"); + public static final Image DA_IC_FILTER_PRESSED = getPngImage("da_column_filtered_Mpressed"); + public static final Set FILTER_IMAGES = Collections.unmodifiableSet(new HashSet( + Arrays.asList(DA_IC_FILTER, DA_IC_FILTER_OVER, DA_IC_FILTER_PRESSED))); + + /** Sorted table */ + public static final Image SORTED_INC = getPngImage("sorted_inc"); + public static final Image SORTED_INC_OVER = getPngImage("sorted_inc_over"); + public static final Image SORTED_INC_SELECTED = getPngImage("sorted_inc_sel"); + public static final Image SORTED_DESC = getPngImage("sorted_desc"); + public static final Image SORTED_DESC_OVER = getPngImage("sorted_desc_over"); + public static final Image SORTED_DESC_SELECTED = getPngImage("sorted_desc_sel"); /** * Next resources migrated from org.tizen.dynamicanalyzer.widgets plugin. @@ -470,6 +496,10 @@ public class ImageResources { public static final Image CHILD_CHART_UNFOLD = getPngImage("child_chart_unfold"); public static final Image CHILD_CHART_UNFOLD_HOVER = getPngImage("child_chart_unfold_hover"); + // notification pop-up + public static final Image NOTIFICATION_BG = getPngImage("noti_pop_bg"); + public static final Image NOTIFICATION_ICON = getPngImage("noti_icon_info"); + private static Image getImage(String pluginId, String folderName, String imageName, String extension) { if (null == imageRegistry.get(imageName) diff --git a/org.tizen.dynamicanalyzer.appearance/theme/flat/img/configurable_feature_area_nor.png b/org.tizen.dynamicanalyzer.appearance/theme/flat/img/configurable_feature_area_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3630a948402c814ff3f74e9afc2a5d095fb37a GIT binary patch literal 3538 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered.png b/org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..88ba11c1f3f8ee4f0250ffdaae385ac5eb4edc82 GIT binary patch literal 2979 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered_Mpressed.png b/org.tizen.dynamicanalyzer.appearance/theme/flat/img/da_column_filtered_Mpressed.png new file mode 100644 index 0000000000000000000000000000000000000000..95b5a460ba2b7551726aa54fc2512cbd9631ae5f GIT binary patch literal 2960 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 IM6N<$f)K2mkpKVy literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_desc_over.png b/org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_desc_over.png new file mode 100644 index 0000000000000000000000000000000000000000..669dbe5b195ad2dca7e0e408d30024f7fd9a7d9c GIT binary patch literal 2916 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_inc_over.png b/org.tizen.dynamicanalyzer.appearance/theme/flat/img/sorted_inc_over.png new file mode 100644 index 0000000000000000000000000000000000000000..5873af607579a18e5c6342580e38959a82eda39e GIT binary patch literal 2932 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.appearance/theme/flat/img/target_disconnected.png b/org.tizen.dynamicanalyzer.appearance/theme/flat/img/target_disconnected.png new file mode 100644 index 0000000000000000000000000000000000000000..488834ce4e693e8fb8bdc5cefbe3e9d8d05ac148 GIT binary patch literal 2878 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 dynamic-analyzer org.tizen.dynamicanalyzer - 2.4.5-SNAPSHOT + 2.5.1-SNAPSHOT .. org.tizen.dynamicanalyzer diff --git a/org.tizen.dynamicanalyzer.test/pom.xml b/org.tizen.dynamicanalyzer.test/pom.xml index cd977bb..a29ef01 100644 --- a/org.tizen.dynamicanalyzer.test/pom.xml +++ b/org.tizen.dynamicanalyzer.test/pom.xml @@ -6,7 +6,7 @@ dynamic-analyzer org.tizen.dynamicanalyzer - 2.4.5-SNAPSHOT + 2.5.1-SNAPSHOT .. org.tizen.dynamicanalyzer diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanakyzer/project/callstack/BaseCallstackManagerTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanakyzer/project/callstack/BaseCallstackManagerTest.java deleted file mode 100644 index 8480794..0000000 --- a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanakyzer/project/callstack/BaseCallstackManagerTest.java +++ /dev/null @@ -1,257 +0,0 @@ -package org.tizen.dynamicanakyzer.project.callstack; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.mock; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Matchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.common.UIMode; -import org.tizen.dynamicanalyzer.project.AppInfo; -import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.project.DeviceStatusInfo; -import org.tizen.dynamicanalyzer.project.ProcessInformation; -import org.tizen.dynamicanalyzer.project.Project; -import org.tizen.dynamicanalyzer.project.callstack.RuntimeCallstackManager; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.setting.PrimitiveFeature; -import org.tizen.dynamicanalyzer.setting.SettingConstants; -import org.tizen.dynamicanalyzer.setting.SettingDataManager; -import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker; -import org.tizen.dynamicanalyzer.ui.summary.profiling.RuntimeProfileDataMaker; -import org.tizen.dynamicanalyzer.util.InternalLogger; -import org.tizen.dynamicanalyzer.util.Logger; - -/** - * Class introduced to test that Map callstackDataBySeqMap corresponds to really - * occurred callstacks. - */ -@RunWith(PowerMockRunner.class) -public class BaseCallstackManagerTest { - static RuntimeCallstackManager callstackManager; - - static CallStackData csd; - int pid = 3045; - - @BeforeClass - public static void setUp() throws Exception { - SettingConstants.SettingFilePath = System.getProperty("user.dir") - + "/resources/"; - callstackManager = new RuntimeCallstackManager(); - List addrs = new ArrayList(); - addrs.add(100000L); - csd = new CallStackData(3L, addrs); - callstackManager.getCallStackDataBySeqMap().put(3L, csd); - - AppInfo aInfo = mock(AppInfo.class); - BinaryInfo bInfo = mock(BinaryInfo.class); - DeviceStatusInfo dsi = mock(DeviceStatusInfo.class); - ProcessInformation process = mock(ProcessInformation.class); - PowerMockito.when(dsi, "getBinaryInfo", Matchers.any(String.class)) - .thenReturn(bInfo); - PowerMockito.when(dsi, "getBinaryInfo", Matchers.anyInt()).thenReturn(bInfo); - Project project = mock(Project.class); - PowerMockito.when(project, "getRuntimeCallstackManager").thenReturn(callstackManager); - PowerMockito.when(project, "getDeviceStatusInfo").thenReturn(dsi); - PowerMockito.when(project, "getProcessInformation", Matchers.anyInt()) - .thenReturn(process); - PowerMockito.when(project, "getApplicationInfo").thenReturn(aInfo); - Global.setProject(project); - } - - // ==================RuntimeCallstackDataManager================== - /** - * Test that RuntimeCallstackDataManager.getCallstackAddrListFromSeq() does - * not change callstackDataBySeqMap. - */ - @Test - public void testGetCallstackAddrListFromSeq() { - Map initialMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - - assertEquals(csd.getAddrs(), - callstackManager.getCallstackAddrListFromSeq(3L)); - - Map newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size(), newMapState.size()); - for (Map.Entry entry : initialMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - } - - /** - * Test that RuntimeCallstackDataManager.makeCallstackWithoutBacktrace() - * simply adds one entry to callstackDataBySeqMap and does nothing more with - * this map. - */ - @Test - public void testMakeCallstackWithoutBacktrace() { - Map initialMapState = new HashMap(); - initialMapState.putAll(((Map) Whitebox - .getInternalState(callstackManager, "callstackDataBySeqMap"))); - - // add log data with caller address - ProbeCommonData inputData = new ProbeCommonData(6L, 12134L, 3, pid, - pid, "", "", 0); - - callstackManager.makeCallstackWithoutBacktrace(inputData); - - Map newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size() + 1, newMapState.size()); - for (Map.Entry entry : initialMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - assertNotNull(newMapState.get(6L)); - initialMapState.clear(); - initialMapState.putAll(newMapState); - - // add log data without caller address - inputData = new ProbeCommonData(9L, 12134L, 3, pid, pid, "", "", 0); - inputData.setCallerAddress(-1L); - callstackManager.makeCallstackWithoutBacktrace(inputData); - - newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size() + 1, newMapState.size()); - for (Map.Entry entry : newMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - assertNotNull(newMapState.get(9L)); - } - - /** - * Test that RuntimeCallstackDataManager.proceedEntry() simply adds one - * entry to callstackDataBySeqMap and does nothing more with this map. - */ - @Test - public void testProceedEntry() throws Exception { - Map initialMapState = new HashMap(); - initialMapState.putAll(((Map) Whitebox - .getInternalState(callstackManager, "callstackDataBySeqMap"))); - - RuntimeProfileDataMaker profileDataMaker = mock(RuntimeProfileDataMaker.class); - profileDataMaker.setPid(pid); - ProfileData inputData = new ProfileData( - ProtocolConstants.MSG_FUNCTION_ENTRY, 8L, pid, pid, 0, 0, - 12167L, 100000L, 300100L); - Method proceedEntry = Whitebox.getMethod(RuntimeCallstackManager.class, - "proceedEntry", ProfileData.class, CallStackUnit.class, - Map.class); - proceedEntry.invoke(callstackManager, inputData, - mock(CallStackUnit.class), new HashMap()); - - Map newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size() + 1, newMapState.size()); - for (Map.Entry entry : initialMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - assertNotNull(newMapState.get(8L)); - } - - /** - * Test that RuntimeCallstackDataManager.proceedExit() simply adds one entry - * to callstackDataBySeqMap and does nothing more with this map. - */ - @Test - public void testProceedExit() throws Exception { - Map initialMapState = new HashMap(); - initialMapState.putAll(((Map) Whitebox - .getInternalState(callstackManager, "callstackDataBySeqMap"))); - - RuntimeProfileDataMaker profileDataMaker = mock(RuntimeProfileDataMaker.class); - profileDataMaker.setPid(pid); - ProfileData inputData = new ProfileData( - ProtocolConstants.MSG_FUNCTION_EXIT, 12L, pid, pid, 0, 0, - 12169L, 300100L, 500100L); - Method proceedExit = Whitebox.getMethod(RuntimeCallstackManager.class, - "proceedExit", ProfileData.class, CallStackUnit.class, - Map.class); - proceedExit.invoke(callstackManager, inputData, - mock(CallStackUnit.class), new HashMap()); - - Map newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size() + 1, newMapState.size()); - for (Map.Entry entry : initialMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - assertNotNull(newMapState.get(12L)); - } - - // ==================RuntimeProfileDataMaker====================== - /** - * Test that RuntimeProfileDataMaker.makeFunctionUsageProfileData() does not - * change callstackDataBySeqMap. - */ - @Test - public void testMakeFunctionUsageProfileData() { - // Test that it does not change map - Map initialMapState = new HashMap(); - initialMapState.putAll(((Map) Whitebox - .getInternalState(callstackManager, "callstackDataBySeqMap"))); - - Logger.init(InternalLogger.ERROR); - ProfileDataMaker maker = new RuntimeProfileDataMaker(); - maker.makeFunctionUsageProfileData(new ProfileData( - ProtocolConstants.MSG_FUNCTION_EXIT, 12L, pid, pid, 0, 0, - 12169L, 300100L, 500100L)); - - Map newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size(), newMapState.size()); - for (Map.Entry entry : initialMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - } - - // ==================CallStackInserter============================ - /** - * Test that CallStackInserter.saveCallStackData() does not change - * callstackDataBySeqMap if Persistent Allocations feature selected. - * - * @throws Exception - */ - @Test - public void testSaveCallStackData() throws Exception { - Map initialMapState = new HashMap(); - initialMapState.putAll(((Map) Whitebox - .getInternalState(callstackManager, "callstackDataBySeqMap"))); - - Global.setCurrentUIMode(UIMode.CLI); - SettingDataManager.INSTANCE.getConnectedTargetOrSelected() - .addSelectedFlatFeature(PrimitiveFeature.MEMORY_ALLOC.getName()); - CallStackInserter csi = CallStackInserter.getInstance(); - Method save = Whitebox.getMethod(CallStackInserter.class, - "saveCallStackData", List.class); - List csdList = new ArrayList(); - csdList.add(new CallStackData(3L)); - save.invoke(csi, csdList); - - Map newMapState = Whitebox.getInternalState( - callstackManager, "callstackDataBySeqMap"); - assertEquals(initialMapState.size(), newMapState.size()); - for (Map.Entry entry : initialMapState.entrySet()) { - assertEquals(entry.getValue(), newMapState.get(entry.getKey())); - } - } -} diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMapTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMapTest.java new file mode 100644 index 0000000..a2edcb1 --- /dev/null +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMapTest.java @@ -0,0 +1,190 @@ +package org.tizen.dynamicanalyzer.project; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.util.InternalLogger; +import org.tizen.dynamicanalyzer.util.Logger; + +/** + * Suite for testing building of process memory map. + */ +@RunWith(MockitoJUnitRunner.class) +public class ProcessMemoryMapTest { + @Mock + Project project; + + @Mock + DeviceStatusInfo deviceStatusInfo; + + @Mock + BinaryInfo binaryInfo; + + ProcessMemoryMap pMap; // CUT instance + + static long A = 1000, B = 2000, C = 3000, D = 4000, E = 5000, F = 6000; + static int ID1 = 1, ID2 = 2, ID3 = 3, ID4 = 4, ID5 = 5; + + @BeforeClass + static public void setUpSuite() { + Logger.init(InternalLogger.DEBUG); + } + + @Before + public void setUpTest() { + when(project.getDeviceStatusInfo()).thenReturn(deviceStatusInfo); + when(deviceStatusInfo.getBinaryInfo(anyInt())).thenReturn(binaryInfo); + Global.setProject(project); + + pMap = new ProcessMemoryMap(0, 0); + } + + /** + * Test handling of one library object. + */ + @Test + public void test_add_one() { + LibraryObject lo = new LibraryObject(ID1, A, B); + assertTrue(pMap.addLibraryMap(lo)); + + assertEquals(1, pMap.getAllMappings().size()); + assertEquals(1, pMap.getLibraryMappingByBinaryID(ID1).size()); + assertEquals(lo, pMap.getLibraryByAddress((A + B) / 2)); + } + + /** + * Test overlapped library objects not added. + */ + @Test + public void test_add_overlap() { + LibraryObject lo1 = new LibraryObject(ID1, A, C), lo2 = new LibraryObject(ID2, B, D); + assertTrue(pMap.addLibraryMap(lo1)); + assertFalse(pMap.addLibraryMap(lo2)); + + assertEquals(1, pMap.getAllMappings().size()); + assertEquals(lo1, pMap.getLibraryByAddress(B)); + } + + /** + * Test overlapped library objects not added. One inside another. + */ + @Test + public void test_add_overlap2() { + LibraryObject lo1 = new LibraryObject(ID1, A, D), lo2 = new LibraryObject(ID2, B, C); + assertTrue(pMap.addLibraryMap(lo1)); + assertFalse(pMap.addLibraryMap(lo2)); + + assertEquals(1, pMap.getAllMappings().size()); + assertEquals(lo1, pMap.getLibraryByAddress(B)); + } + + /** + * Test multiple mappings for the same library id. + */ + @Test + public void test_add_single_id() { + LibraryObject lo1 = new LibraryObject(ID1, A, B), lo2 = new LibraryObject(ID1, C, D); + assertTrue(pMap.addLibraryMap(lo1)); + assertTrue(pMap.addLibraryMap(lo2)); + + assertEquals(2, pMap.getAllMappings().size()); + assertEquals(2, pMap.getLibraryMappingByBinaryID(ID1).size()); + assertEquals(lo1, pMap.getLibraryByAddress(A)); + assertEquals(lo2, pMap.getLibraryByAddress(C)); + } + + /** + * Test main binary processed in the same way as others library objects. + */ + @Test + public void test_add_main_binary() { + LibraryObject main = new LibraryObject(ID1, A, C); + LibraryObject lo = new LibraryObject(ID2, B, D); + pMap.setMainBinary(main); + + assertFalse(pMap.addLibraryMap(lo)); + assertEquals(1, pMap.getAllMappings().size()); + assertEquals(main, pMap.getLibraryByAddress(A)); + } + + /** + * Test existing mapping will be shrinked. + */ + @Test + public void test_remove_shrink() { + LibraryObject lo = new LibraryObject(ID1, A, C); + pMap.addLibraryMap(lo); + assertNotNull(pMap.getLibraryByAddress(B)); + pMap.removeMapping(B, C); + + assertEquals(1, pMap.getAllMappings().size()); + assertNull(pMap.getLibraryByAddress(B)); + assertNotSame(lo, pMap.getLibraryByAddress(A)); + assertEquals(B, pMap.getLibraryByAddress(A).getHighestAddress()); + } + + /** + * Test existing mapping will be completely removed. + */ + @Test + public void test_remove_complete() { + LibraryObject lo = new LibraryObject(ID1, A, B); + pMap.addLibraryMap(lo); + + pMap.removeMapping(A, B); + + assertEquals(0, pMap.getAllMappings().size()); + assertNull(pMap.getLibraryByAddress(A)); + } + + /** + * Test existing mapping will be splitted. + */ + @Test + public void test_remove_split() { + LibraryObject lo = new LibraryObject(ID1, A, D); + pMap.addLibraryMap(lo); + + pMap.removeMapping(B, C); + + assertEquals(2, pMap.getAllMappings().size()); + assertEquals(2, pMap.getLibraryMappingByBinaryID(ID1).size()); + assertEquals(B, pMap.getLibraryByAddress(A).getHighestAddress()); + assertEquals(C, pMap.getLibraryByAddress(C).getLowestAddress()); + } + + /** + * Test complex removal with one call. + */ + @Test + public void test_remove_complex() { + pMap.addLibraryMap(new LibraryObject(ID1, A, B)); + pMap.addLibraryMap(new LibraryObject(ID2, B, C)); + pMap.addLibraryMap(new LibraryObject(ID3, C, D)); + pMap.addLibraryMap(new LibraryObject(ID4, D, E)); + pMap.addLibraryMap(new LibraryObject(ID5, E, F)); + + assertEquals(5, pMap.getAllMappings().size()); + + long low = (B + C) / 2, high = (E + F) / 2; + pMap.removeMapping(low, high); + assertEquals(3, pMap.getAllMappings().size()); + assertEquals(low, pMap.getLibraryByAddress(B).getHighestAddress()); + assertEquals(high, pMap.getLibraryByAddress(F - 1).getLowestAddress()); + assertNull(pMap.getLibraryByAddress(C)); + assertNull(pMap.getLibraryByAddress(D)); + } +} diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParserTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParserTest.java index cb6d8df..8a392e1 100644 --- a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParserTest.java +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParserTest.java @@ -37,7 +37,7 @@ public class MessageParserTest { } @Before - public void setUp() { + public void setUp() throws Exception { Global.setLSanInitialized(false); parser = new MessageParser(); parser.start(); @@ -122,7 +122,7 @@ public class MessageParserTest { } @After - public void tearDown() { + public void tearDown() throws Exception { parser.stopForced(); } } diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManagerTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManagerTest.java index 0361467..0ef4eb3 100644 --- a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManagerTest.java +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManagerTest.java @@ -1,28 +1,14 @@ package org.tizen.dynamicanalyzer.ui.memory.data; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import java.io.File; -import java.io.PrintWriter; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; - -import org.junit.After; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.Spy; -import org.mockito.internal.util.reflection.Whitebox; import org.mockito.runners.MockitoJUnitRunner; import org.powermock.reflect.internal.WhiteboxImpl; import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.database.DBInserter; import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.swap.model.data.MemoryData; import org.tizen.dynamicanalyzer.util.InternalLogger; @@ -34,12 +20,6 @@ import org.tizen.dynamicanalyzer.util.Logger; @RunWith(MockitoJUnitRunner.class) public class HeapDataManagerTest { - private final static String lsanReport = "lsan.test.log"; - private final static String lsanReportFormat = "%d %d %d\n"; - - @Mock - private DBInserter lsanDBInserter; - @Spy private HeapDataManager manager = HeapDataManager.getInstance(); @@ -48,101 +28,6 @@ public class HeapDataManagerTest { Logger.init(InternalLogger.DEBUG); } - @Before - public void setUp() { - Whitebox.setInternalState(manager, "lsanDBInserter", lsanDBInserter); - } - - /** - * Helper method for writing LSan report file and parsing it by - * {@link HeapDataManager#parseLSanReportFile(String)}. - * - * @param content content of report file - * @throws Exception - */ - private void parseLSanReport(String content) throws Exception { - PrintWriter lsanReportWriter = new PrintWriter(lsanReport, - StandardCharsets.US_ASCII.name()); - lsanReportWriter.write(content); - lsanReportWriter.flush(); - lsanReportWriter.close(); - - manager.parseLSanReportFile(lsanReport); - } - - @Test - public void parseLSanReportFile_correctFormat() throws Exception { - List> expected = new ArrayList>(); - StringBuffer report = new StringBuffer(); - - List row = new ArrayList(); - expected.add(row); - row.add(0L); - row.add(1L); - row.add(2L); - report.append(String.format(lsanReportFormat, (Long) row.get(0), (Long) row.get(1), (Long) row.get(2))); - - row = new ArrayList(); - expected.add(row); - row.add(3L); - row.add(4L); - row.add(5L); - report.append(String.format(lsanReportFormat, (Long) row.get(0), (Long) row.get(1), (Long) row.get(2))); - - parseLSanReport(report.toString()); - verify(lsanDBInserter).pushData(eq(expected)); - } - - @Test - public void parseLSanReportFile_partlyCorrectFormat() throws Exception { - List> expected = new ArrayList>(); - StringBuffer report = new StringBuffer(); - - // correct line - List row = new ArrayList(); - expected.add(row); - row.add(0L); - row.add(1L); - row.add(2L); - report.append(String.format(lsanReportFormat, (Long) row.get(0), (Long) row.get(1), (Long) row.get(2))); - - // incorrect line - report.append("test"); - - parseLSanReport(report.toString()); - verifyZeroInteractions(lsanDBInserter); - } - - @Test - public void parseLSanReportFile_nonExistentReport() { - manager.parseLSanReportFile("non-existent/report.file"); - verifyZeroInteractions(lsanDBInserter); - } - - @Test - public void parseLSanReportFile_nonDigits() throws Exception { - parseLSanReport("a b c"); - verifyZeroInteractions(lsanDBInserter); - } - - @Test - public void parseLSanReportFile_tooFewFields() throws Exception { - parseLSanReport("0 1"); - verifyZeroInteractions(lsanDBInserter); - } - - @Test - public void parseLSanReportFile_tooManyFields() throws Exception { - parseLSanReport("0 1 2 3"); - verifyZeroInteractions(lsanDBInserter); - } - - @Test - public void parseLSanReportFile_empty() throws Exception { - parseLSanReport(""); - verifyZeroInteractions(lsanDBInserter); - } - @Test public void testGetAllocatorAddress32() throws Exception { setProtocolVersion("4.2"); @@ -181,12 +66,4 @@ public class HeapDataManagerTest { p.setProtocolVersion(version); Global.setProject(p); } - - @After - public void tearDown() { - File lsanReportFile = new File(lsanReport); - if (lsanReportFile.exists()) - lsanReportFile.delete(); - } - } diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/LeakDataManagerTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/LeakDataManagerTest.java new file mode 100644 index 0000000..1772e50 --- /dev/null +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/LeakDataManagerTest.java @@ -0,0 +1,148 @@ +package org.tizen.dynamicanalyzer.ui.memory.data; + +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; + +import java.io.File; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.internal.util.reflection.Whitebox; +import org.mockito.runners.MockitoJUnitRunner; +import org.tizen.dynamicanalyzer.database.DBInserter; +import org.tizen.dynamicanalyzer.util.InternalLogger; +import org.tizen.dynamicanalyzer.util.Logger; + +/** + * Tests for {@link LeakDataManager}. + */ +@RunWith(MockitoJUnitRunner.class) +public class LeakDataManagerTest { + + private final static String lsanReport = "lsan.test.log"; + private final static String lsanReportFormat = "%d %d %d\n"; + + @Mock + private DBInserter lsanDBInserter; + + @Spy + private LsanDataManager manager = LsanDataManager.getInstance(); + + @BeforeClass + public static void init() { + Logger.init(InternalLogger.DEBUG); + } + + @Before + public void setUp() { + Whitebox.setInternalState(manager, "lsanDBInserter", lsanDBInserter); + } + + /** + * Helper method for writing LSan report file and parsing it by + * {@link HeapDataManager#parseLSanReportFile(String)}. + * + * @param content content of report file + * @throws Exception + */ + private void parseLSanReport(String content) throws Exception { + PrintWriter lsanReportWriter = new PrintWriter(lsanReport, + StandardCharsets.US_ASCII.name()); + lsanReportWriter.write(content); + lsanReportWriter.flush(); + lsanReportWriter.close(); + + manager.parseLSanReportFile(lsanReport); + } + + @Test + public void parseLSanReportFile_correctFormat() throws Exception { + List> expected = new ArrayList>(); + StringBuffer report = new StringBuffer(); + + List row = new ArrayList(); + expected.add(row); + row.add(0L); + row.add(1L); + row.add(2L); + report.append(String.format(lsanReportFormat, (Long) row.get(0), (Long) row.get(1), (Long) row.get(2))); + + row = new ArrayList(); + expected.add(row); + row.add(3L); + row.add(4L); + row.add(5L); + report.append(String.format(lsanReportFormat, (Long) row.get(0), (Long) row.get(1), (Long) row.get(2))); + + parseLSanReport(report.toString()); + verify(lsanDBInserter).pushData(eq(expected)); + } + + @Test + public void parseLSanReportFile_partlyCorrectFormat() throws Exception { + List> expected = new ArrayList>(); + StringBuffer report = new StringBuffer(); + + // correct line + List row = new ArrayList(); + expected.add(row); + row.add(0L); + row.add(1L); + row.add(2L); + report.append(String.format(lsanReportFormat, (Long) row.get(0), (Long) row.get(1), (Long) row.get(2))); + + // incorrect line + report.append("test"); + + parseLSanReport(report.toString()); + verifyZeroInteractions(lsanDBInserter); + } + + @Test + public void parseLSanReportFile_nonExistentReport() { + manager.parseLSanReportFile("non-existent/report.file"); + verifyZeroInteractions(lsanDBInserter); + } + + @Test + public void parseLSanReportFile_nonDigits() throws Exception { + parseLSanReport("a b c"); + verifyZeroInteractions(lsanDBInserter); + } + + @Test + public void parseLSanReportFile_tooFewFields() throws Exception { + parseLSanReport("0 1"); + verifyZeroInteractions(lsanDBInserter); + } + + @Test + public void parseLSanReportFile_tooManyFields() throws Exception { + parseLSanReport("0 1 2 3"); + verifyZeroInteractions(lsanDBInserter); + } + + @Test + public void parseLSanReportFile_empty() throws Exception { + parseLSanReport(""); + verifyZeroInteractions(lsanDBInserter); + } + + @After + public void tearDown() { + File lsanReportFile = new File(lsanReport); + if (lsanReportFile.exists()) + lsanReportFile.delete(); + } + +} diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializerTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializerTest.java new file mode 100644 index 0000000..d36c2c8 --- /dev/null +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializerTest.java @@ -0,0 +1,56 @@ +package org.tizen.dynamicanalyzer.ui.memory.data.util; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.tizen.dynamicanalyzer.ui.memory.data.MemAllocDBTable; +import org.tizen.dynamicanalyzer.ui.memory.data.MemFreeDBTable; + +public class StatisticsQuerySerializerTest { + + private static final String allocTimeRangeFormat = String.format("%s BETWEEN %%s AND %%s", + MemAllocDBTable.COLUMN.ALLOCATED_TIME); + private static final String freeTimeRangeFormat = String.format("%s <= %%s", + MemFreeDBTable.COLUMN.FREE_TIME); + private static final String pidRangeFormat = String.format("WHERE %s in %%s", + MemAllocDBTable.COLUMN.PID.name); + + private StatisticsQuerySerializer serializer = new StatisticsQuerySerializer(); + + @Test + public void toSqlString_pidString() { + Query q = new Query(); + q.pidString = "(1,2,3)"; + + String pidRange = String.format(pidRangeFormat, q.pidString); + + assertTrue(serializer.toSqlString(q).contains(pidRange)); + } + + @Test + public void toSqlString_allRange() { + Query q = new Query(); + + String allocTimeRange = String.format(allocTimeRangeFormat, q.startTime, q.endTime); + String freeTimeRange = String.format(freeTimeRangeFormat, q.endTime); + String serializedStr = serializer.toSqlString(q); + + assertFalse(serializedStr.contains(allocTimeRange)); + assertFalse(serializedStr.contains(freeTimeRange)); + } + + @Test + public void toSqlString_selectedRange() { + Query q = new Query(); + q.startTime = 10; + q.endTime = 20; + + String allocTimeRange = String.format(allocTimeRangeFormat, q.startTime, q.endTime); + String freeTimeRange = String.format(freeTimeRangeFormat, q.endTime); + String serializedStr = serializer.toSqlString(q); + + assertTrue(serializedStr.contains(allocTimeRange)); + assertTrue(serializedStr.contains(freeTimeRange)); + } +} diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTableTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTableTest.java index 35fcc08..e75038e 100644 --- a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTableTest.java +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTableTest.java @@ -28,7 +28,7 @@ import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.setting.SettingConstants; import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataProcessor; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; @RunWith(PowerMockRunner.class) @@ -63,7 +63,7 @@ public class MemoryCallStackTableTest { memAllocationData.add(3); // CALLER LIBRARY ID memAllocationData.add(128L); // ALLOCATED SIZE - TableInput input = HeapDataManager.getInstance() + TableInput input = HeapDataProcessor.getInstance() .makePersistentAllocsTableInput(memAllocationData, 10, false); assertNotNull(input); ((DATableDataFormat)input.getData()).setType(AnalyzerConstants.TYPE_TABLE_MEM_ALLOCATEDTRACE); diff --git a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistryTest.java b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistryTest.java index 78ae463..d4061be 100644 --- a/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistryTest.java +++ b/org.tizen.dynamicanalyzer.test/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistryTest.java @@ -11,15 +11,12 @@ import org.junit.Test; import org.tizen.dynamicanalyzer.setting.SettingConstants; import org.tizen.dynamicanalyzer.ui.file.FilePage; import org.tizen.dynamicanalyzer.ui.hierarchy.HierarchyPage; -import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage; -import org.tizen.dynamicanalyzer.ui.kernel.KernelPage; import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; import org.tizen.dynamicanalyzer.ui.network.NetworkPage; import org.tizen.dynamicanalyzer.ui.opengl.GLPage; import org.tizen.dynamicanalyzer.ui.summary.SummaryPage; import org.tizen.dynamicanalyzer.ui.thread.ThreadPage; import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; import org.tizen.dynamicanalyzer.util.InternalLogger; import org.tizen.dynamicanalyzer.util.Logger; @@ -48,12 +45,6 @@ public class PageInfoRegistryTest { expectedPageNames.add(SettingConstants.PAGE_NAME_FILE); pageIDs.add(GLPage.pageID); expectedPageNames.add(SettingConstants.PAGE_NAME_OPENGL); - pageIDs.add(UIPage.pageID); - expectedPageNames.add(SettingConstants.PAGE_NAME_UI); - pageIDs.add(KernelPage.pageID); - expectedPageNames.add(SettingConstants.PAGE_NAME_KERNEL); - pageIDs.add(InteractivePage.pageID); - expectedPageNames.add(SettingConstants.PAGE_NAME_INTERACTIVE); pageIDs.add(SummaryPage.pageID); expectedPageNames.add(SettingConstants.PAGE_NAME_SUMMARY); pageIDs.add(HierarchyPage.pageID); diff --git a/org.tizen.dynamicanalyzer.widgets/.classpath b/org.tizen.dynamicanalyzer.widgets/.classpath index 1baaec6..c4a519d 100644 --- a/org.tizen.dynamicanalyzer.widgets/.classpath +++ b/org.tizen.dynamicanalyzer.widgets/.classpath @@ -1,6 +1,6 @@ - + diff --git a/org.tizen.dynamicanalyzer.widgets/.settings/org.eclipse.jdt.core.prefs b/org.tizen.dynamicanalyzer.widgets/.settings/org.eclipse.jdt.core.prefs index f42de36..0c68a61 100644 --- a/org.tizen.dynamicanalyzer.widgets/.settings/org.eclipse.jdt.core.prefs +++ b/org.tizen.dynamicanalyzer.widgets/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,7 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/org.tizen.dynamicanalyzer.widgets/META-INF/MANIFEST.MF b/org.tizen.dynamicanalyzer.widgets/META-INF/MANIFEST.MF index e4748fd..9b373e7 100644 --- a/org.tizen.dynamicanalyzer.widgets/META-INF/MANIFEST.MF +++ b/org.tizen.dynamicanalyzer.widgets/META-INF/MANIFEST.MF @@ -27,6 +27,7 @@ Export-Package: org.tizen.dynamicanalyzer.widgets, org.tizen.dynamicanalyzer.widgets.graph.circular, org.tizen.dynamicanalyzer.widgets.helper, org.tizen.dynamicanalyzer.widgets.lifecycle, + org.tizen.dynamicanalyzer.widgets.notification, org.tizen.dynamicanalyzer.widgets.popupMenu, org.tizen.dynamicanalyzer.widgets.progress, org.tizen.dynamicanalyzer.widgets.scale, diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DANotificationOnChartRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DANotificationOnChartRenderer.java new file mode 100644 index 0000000..fb4bab8 --- /dev/null +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DANotificationOnChartRenderer.java @@ -0,0 +1,44 @@ +package org.tizen.dynamicanalyzer.widgets.chart; + +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; + +/** + * Renderer is used to show notifications on chart. + */ +public class DANotificationOnChartRenderer extends DAChartRenderer { + + /** offsets */ + private static final int LEFT_OFFSET = 5; + private static final int TOP_OFFSET = 4; + private static final int LINE_OFFSET = 2; + /** notification strings */ + private final String[] notification; + + /** + * Public constructor. + * + * @param notification Notification to be shown. + */ + public DANotificationOnChartRenderer(String notification) { + this.notification = notification.split("\n"); + } + + @Override + public void draw(GC gc, DAChart chart, Image buffer) { + super.draw(gc, chart, buffer); + Rectangle rectangle = chart.getClientArea(); + Point[] line = new Point[notification.length]; + line[0] = new Point(rectangle.x + LEFT_OFFSET, rectangle.y + TOP_OFFSET); + for (int i = 1; i < line.length; i++) { + line[i] = new Point(line[i - 1].x, + line[i - 1].y + LINE_OFFSET + gc.getFontMetrics().getHeight()); + } + for (int i = 0; i < line.length; i++) { + gc.drawString(notification[i], line[i].x, line[i].y, true); + } + + } +} diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoard.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoard.java index 5022139..62d50db 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoard.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DAChartBoard.java @@ -67,12 +67,10 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotMarker; import org.tizen.dynamicanalyzer.widgets.helper.ColorResources; import org.tizen.dynamicanalyzer.widgets.helper.FontResources; import org.tizen.dynamicanalyzer.widgets.lifecycle.LifecycleBar; -import org.tizen.dynamicanalyzer.widgets.lifecycle.LifecycleData; import org.tizen.dynamicanalyzer.widgets.scale.DAScale; import org.tizen.dynamicanalyzer.widgets.scale.DAScaleSelectionListener; import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; import org.tizen.dynamicanalyzer.widgets.timeline.DATimelineFrameRenderer; -import org.tizen.dynamicanalyzer.widgets.timeline.DATimelineMarker; import org.tizen.dynamicanalyzer.widgets.timeline.DATimelineTimeRenderer; import org.tizen.dynamicanalyzer.widgets.timeline.DATimelineTinyTimeRenderer; @@ -82,11 +80,7 @@ public class DAChartBoard extends Composite { private Composite titleComp; private DACustomToggleButton itemMinimizeButton; private DATimeline timeline; - private LifecycleBar lifecycleBar; - /** - * Default lifecycle data used to draw very first phase. - */ - private LifecycleData defaultLifecycleData = null; + protected LifecycleBar lifecycleBar; private DefaultToolTip lifecycleBarTooltip; private DefaultToolTip timelineTooltip; @@ -126,23 +120,20 @@ public class DAChartBoard extends Composite { private IDAChartSeriesMaker chartSeriesMaker; - public DAChartBoard(Composite parent, String title, LifecycleData defaultLifecycleData) { - this(parent, title, BOARD_STYLE_TIME, defaultLifecycleData); + public DAChartBoard(Composite parent, String title) { + this(parent, title, BOARD_STYLE_TIME); } - public DAChartBoard(Composite parent, String title, int[] scaleValues, - LifecycleData defaultLifecycleData) { - this(parent, title, BOARD_STYLE_KERNEL, defaultLifecycleData); + public DAChartBoard(Composite parent, String title, int[] scaleValues) { + this(parent, title, BOARD_STYLE_KERNEL); scale.setMaximum(scaleValues.length - 1); boardManager.setScaleValues(scaleValues); } - public DAChartBoard(Composite parent, String title, int boardStyle, - LifecycleData defaultLifecycleData) { + public DAChartBoard(Composite parent, String title, int boardStyle) { super(parent, SWT.NONE); this.setLayout(new FormLayout()); this.setBackground(ColorResources.WHITE); - this.defaultLifecycleData = defaultLifecycleData; titleComp = new Composite(this, SWT.NONE); titleComp.setLayout(new FillLayout()); @@ -410,13 +401,6 @@ public class DAChartBoard extends Composite { boardManager = new DAChartBoardManager(this); } - /** - * Get default {@link LifecycleData}. - */ - public LifecycleData getDefaultLifecycleData() { - return defaultLifecycleData; - } - public DAScale getScale(){ return scale; } @@ -658,15 +642,11 @@ public class DAChartBoard extends Composite { } /** - * Clear list of lifecycle phases and add first default phase. + * Clear list of lifecycle phases */ - private void reinitLifecycleData() { - if (lifecycleBar != null) { + protected void reinitLifecycleData() { + if (lifecycleBar != null) lifecycleBar.clear(); - if (defaultLifecycleData != null) { - lifecycleBar.addLifecycleData(defaultLifecycleData); - } - } } public void contentsClear() { diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/da/base/ProgressDialog.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/da/base/ProgressDialog.java index c72e13a..8d723e9 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/da/base/ProgressDialog.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/da/base/ProgressDialog.java @@ -35,6 +35,7 @@ import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; @@ -93,6 +94,12 @@ public class ProgressDialog { private SelectionListener okButtonListener = null; private SelectionListener cancelButtonListener = null; + private SelectionListener defaultCancelButtonListener = new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + close(); + } + }; // loading animation private DAAnimationIcon progressIcon = null; @@ -263,25 +270,11 @@ public class ProgressDialog { progressStyle == PROGRESS_STYLE_INDETERMINATE) { cancelButton = createButton(progressComp, "Cancel", cancelData); cancelButton.setLayoutData(cancelData); - cancelButton.addSelectionListener(new SelectionListener () { - - @Override - public void widgetDefaultSelected(SelectionEvent arg0) { - // TODO Auto-generated method stub - - } - @Override - public void widgetSelected(SelectionEvent arg0) { - close(); - } - - }); - - - if (cancelButtonListener != null) { + if (cancelButtonListener != null) cancelButton.addSelectionListener(cancelButtonListener); - } + else + cancelButton.addSelectionListener(defaultCancelButtonListener); } } @@ -524,7 +517,13 @@ public class ProgressDialog { public void setOkListener(SelectionListener listener) { okButtonListener = listener; } - + + /** + * Replace default 'Cancel' button listener with the specified listener. + * + * @param listener listener to set as {@link SelectionListener} for 'Cancel' + * button + */ public void setCancelListener(SelectionListener listener) { cancelButtonListener = listener; } diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotification.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotification.java new file mode 100644 index 0000000..da5a1f7 --- /dev/null +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotification.java @@ -0,0 +1,330 @@ +package org.tizen.dynamicanalyzer.widgets.notification; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.events.PaintEvent; +import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.tizen.dynamicanalyzer.util.Logger; + +/** + * Notification pop-up implementation. + * + * @author d.nikiforov + */ +public class DAPopupNotification { + + /** + * Sleep timeouts + */ + private static final long NOTIFICATION_TIMEOUT_MILLIS = 3000; + private static final long FADE_OUT_STEP_MILLIS = 10; + + /** + * Size constants + */ + private static final int VERTICAL_BOTTOM_OFFSET = 225; + private static final int HEIGHT = 110; + private static final int WIDTH = 320; + + /** + * Transparency constants + */ + private static final int DEFAULT_ALPHA = 230; + private static final int FADE_OUT_STEPS = 100; + + /** + * Contents + */ + private String title; + private String message; + private String details; + + /** + * Notification pop-up window + */ + private Shell shell = null; + + /** + * Contents renderer + */ + private IPopupNotificationRenderer renderer = new DAPopupNotificationRenderer(); + + /** + * Closes notification on mouse click. + */ + private MouseListener mouseListener = new MouseListener() { + + @Override + public void mouseUp(MouseEvent e) { + // Auto-generated method stub + } + + @Override + public void mouseDown(MouseEvent e) { + close(); + } + + @Override + public void mouseDoubleClick(MouseEvent e) { + // Auto-generated method stub + } + }; + + /** + * Draws all contents. + */ + private PaintListener paintListener = (PaintEvent e) -> { + // title should not be empty + if (title == null || title.isEmpty()) { + Logger.warning("There is no title for notification!"); + close(); + return; + } + + // renderer should be specified to draw anything + if (renderer == null) { + Logger.warning("There is no render for notification!"); + shell.dispose(); + return; + } + + renderer.draw(e.gc, this); + }; + + /** + * Creates a new instance of notification message with one line: + *
    + *
  • {@code title} - Notification Title
  • + *
+ * + * @param parent parent {@link Shell} + * @param title message title + */ + public DAPopupNotification(Shell parent, String title) { + this(parent, title, null, null); + } + + /** + * Creates a new instance of notification message with two lines: + *
    + *
  • {@code title} - Notification Title
  • + *
  • {@code message} - Location / Detail
  • + *
+ * + * @param parent parent {@link Shell} + * @param title message title + * @param message detailed message + */ + public DAPopupNotification(Shell parent, String title, String message) { + this(parent, title, message, null); + } + + /** + * Creates a new instance of notification message with three lines: + *
    + *
  • {@code title} - Notification Title
  • + *
  • {@code message} - Location / Detail
  • + *
  • {@code details} - Option (Guide for next action)
  • + *
+ * + * @param parent parent {@link Shell} + * @param title message title + * @param message detailed message + * @param details additional information + */ + public DAPopupNotification(Shell parent, String title, String message, String details) { + // contents + this.title = title; + this.message = message; + this.details = details; + + // shell + shell = new Shell(parent, SWT.TOOL | SWT.NO_FOCUS | SWT.NO_TRIM); + + shell.setSize(WIDTH, HEIGHT); + + Point parentSize = parent.getSize(); + Point parentLoc = parent.getLocation(); + shell.setLocation((parentLoc.x + parentSize.x - WIDTH) / 2, + parentLoc.y + parentSize.y - VERTICAL_BOTTOM_OFFSET); + + shell.addPaintListener(paintListener); + shell.addMouseListener(mouseListener); + + shell.setAlpha(DEFAULT_ALPHA); + shell.setVisible(false); + + // save reference to this object as shell's data, so that it can be + // retrieved in events listeners + shell.setData(this); + } + + /** + * Opens this notification and closes it after a few seconds. + */ + public void open() { + if (shell == null || shell.isDisposed() || renderer == null) + return; + + shell.setRegion(renderer.getVisibleRegion()); + shell.open(); + + Thread closingThread = new Thread(() -> { + try { + Thread.sleep(NOTIFICATION_TIMEOUT_MILLIS); + } catch (InterruptedException e) { + Logger.warning("Interrupted while sleeping"); + Thread.currentThread().interrupt(); + } finally { + Display.getDefault().syncExec(DAPopupNotification.this::close); + } + }, "DAPopupNotification closing thread"); + + closingThread.start(); + } + + /** + * Closes and disposes this notification with 'fade out' effect. Blocking + * method. + */ + public void close() { + if (shell == null || shell.isDisposed()) + return; + + int curAlpha = shell.getAlpha(); + int alphaStep = curAlpha / FADE_OUT_STEPS; + + // fade out loop + for (int i = 0; i < FADE_OUT_STEPS && curAlpha > 0; ++i, curAlpha -= alphaStep) { + shell.setAlpha(curAlpha); + shell.redraw(); + shell.update(); + + try { + Thread.sleep(FADE_OUT_STEP_MILLIS); + } catch (InterruptedException e) { + Logger.warning("Interrupted while fading"); + Thread.currentThread().interrupt(); + break; + } + } + + shell.close(); + shell.dispose(); + } + + /** + * Gets the notification title. + * + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * Sets the notification title. Cannot be {@code null}. + * + * @param title the title to set + */ + public void setTitle(String title) { + if (title != null) + this.title = title; + } + + /** + * Gets the notification message. + * + * @return the message + */ + public String getMessage() { + return message; + } + + /** + * Sets the notification message. + * + * @param message the message to set + */ + public void setMessage(String message) { + this.message = message; + } + + /** + * Gets the notification details. + * + * @return the details + */ + public String getDetails() { + return details; + } + + /** + * Sets the notification details. + * + * @param details the details to set + */ + public void setDetails(String details) { + this.details = details; + } + + /** + * Sets custom renderer for notification. Cannot be {@code null}. + * + * @param renderer the renderer to set + */ + public void setRenderer(IPopupNotificationRenderer renderer) { + if (renderer != null) + this.renderer = renderer; + } + + /** + * Adds specified {@code listener} to underlying shell. + * + * @param listener {@link DisposeListener} implementation + */ + public void addDisposeListener(DisposeListener listener) { + shell.addDisposeListener(listener); + } + + /** + * Removes specified {@code listener} from underlying shell. + * + * @param listener {@link DisposeListener} implementation + */ + public void removeDisposeListener(DisposeListener listener) { + shell.removeDisposeListener(listener); + } + + /** + * Gets the location of the notification. + * + * @return absolute coordinates of the top left corner + */ + public Point getLocation() { + return shell.getLocation(); + } + + /** + * Sets the location of the notification. + * + * @param location absolute coordinates of the top left corner + */ + public void setLocation(Point location) { + shell.setLocation(location); + } + + /** + * Gets the size of the notification. + * + * @return relative coordinates of the bottom right corner (width, height) + */ + public Point getSize() { + return shell.getSize(); + } +} diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotificationRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotificationRenderer.java new file mode 100644 index 0000000..e35227c --- /dev/null +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/DAPopupNotificationRenderer.java @@ -0,0 +1,200 @@ +package org.tizen.dynamicanalyzer.widgets.notification; + +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.RGBA; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.graphics.Region; +import org.tizen.dynamicanalyzer.resources.ColorResources; +import org.tizen.dynamicanalyzer.resources.FontResources; +import org.tizen.dynamicanalyzer.resources.ImageResources; + +/** + * Default implementation of {@link IPopupNotificationRenderer}. + * + * @author d.nikiforov + */ +public class DAPopupNotificationRenderer implements IPopupNotificationRenderer { + + /** + * Offsets + */ + private static final int TEXT_LEFT_MARGIN = 95; + private static final int TEXT_TOP_MARGIN_1L = 48; + private static final int TEXT_TOP_MARGIN_2L = 35; + private static final int TEXT_TOP_MARGIN_3L = 27; + private static final int TEXT_SPACING1 = 10; + private static final int TEXT_SPACING2 = 5; + private static final int TEXT_HEIGHT1 = 15; + private static final int TEXT_HEIGHT2 = 13; + private static final int ICON_LEFT_MARGIN = 25; + private static final int ICON_TOP_MARGIN = 30; + private static final int TEXT_MAX_WIDTH = 200; + private static final int UNDERLINE_OFFSET = -2; + + /** + * Transparency of 'details' text + */ + private static final double DETAILS_TEXT_ALPHA = 0.65; + + /** + * Images + */ + private static final Image BACKGROUND = ImageResources.NOTIFICATION_BG; + private static final Image ICON = ImageResources.NOTIFICATION_ICON; + + /** + * Fonts + */ + private static final Font TITLE_FONT = FontResources.NOTIFICATION_TITLE_FONT; + private static final Font MESSAGE_FONT = FontResources.NOTIFICATION_MESSAGE_FONT; + + /** + * Visible region that should be drawn upon + */ + private static final Region visibleRegion = calculateVisibleRegion(); + + @Override + public void draw(GC gc, DAPopupNotification notification) { + // draw images + gc.drawImage(BACKGROUND, 0, 0); + gc.drawImage(ICON, ICON_LEFT_MARGIN, ICON_TOP_MARGIN); + + // draw text + drawAllText(gc, + notification.getTitle(), + notification.getMessage(), + notification.getDetails()); + } + + @Override + public Region getVisibleRegion() { + return visibleRegion; + } + + /** + * Calculates visible region based on alpha channel of the background image. + * + * @return visible region (for any pixel: alpha > 0) + */ + private static Region calculateVisibleRegion() { + Region result = new Region(); + ImageData imageData = BACKGROUND.getImageData(); + + if (imageData.alphaData == null) { + // if image has no alpha channel, then the whole region is visible + result.add(BACKGROUND.getBounds()); + } else { + // if image has alpha, then cut transparent pixels from the + // resulting region, e.g. it can cut white corners from + // image with rounded corners + for (int y = 0; y < imageData.height; y++) { + for (int x = 0; x < imageData.width; x++) { + if (imageData.getAlpha(x, y) > 0) { + result.add(imageData.x + x, imageData.y + y, 1, 1); + } + } + } + } + return result; + } + + /** + * Draws all specified texts. + * + * @param gc {@link GC} instance + * @param title notification title + * @param message notification message + * @param details notification details + */ + private void drawAllText(GC gc, String title, String message, String details) { + // title cannot be empty + if (title == null || title.isEmpty()) + return; + + // set white color for text + gc.setForeground(ColorResources.WHITE); + + // text coordinates + int x = TEXT_LEFT_MARGIN, y; + + if (message != null && !message.isEmpty()) { + if (details != null && !details.isEmpty()) { + // 3 lines + y = TEXT_TOP_MARGIN_3L; + drawText(gc, title, TITLE_FONT, x, y); + + y += TEXT_HEIGHT1 + TEXT_SPACING1; + drawText(gc, message, MESSAGE_FONT, x, y); + + y += TEXT_HEIGHT2 + TEXT_SPACING2; + drawText(gc, details, MESSAGE_FONT, x, y, DETAILS_TEXT_ALPHA, true); + } else { + // 2 lines + y = TEXT_TOP_MARGIN_2L; + drawText(gc, title, TITLE_FONT, x, y); + + y += TEXT_HEIGHT1 + TEXT_SPACING1; + drawText(gc, message, MESSAGE_FONT, x, y); + } + } else { + // 1 line + y = TEXT_TOP_MARGIN_1L; + drawText(gc, title, TITLE_FONT, x, y); + } + + // revert clipping area to its original state + gc.setClipping((Rectangle) null); + } + + /** + * Draws {@code text} onto specified {@link GC}. + * + * @param gc {@link GC} instance + * @param text text to be drawn + * @param font font to use for drawing + * @param x x-axis text coordinate + * @param y y-axis text coordinate + */ + private void drawText(GC gc, String text, Font font, int x, int y) { + gc.setFont(font); + // set clipping width so that too long text would be cut out and + // set clipping height a little bigger to enable underlined text + gc.setClipping(new Rectangle(x, y, TEXT_MAX_WIDTH, gc.textExtent(text).y + 3)); + gc.drawText(text, x, y, true); + } + + /** + * Draws {@code text} onto specified {@link GC}. + * + * @param gc {@link GC} instance + * @param text text to be drawn + * @param font font to use for drawing + * @param x x-axis text coordinate + * @param y y-axis text coordinate + * @param alpha decimal opaqueness value (1.0 - opaque, 0.0 - transparent) + * @param underline whether text should be underlined + */ + private void drawText(GC gc, String text, Font font, int x, int y, double alpha, + boolean underline) { + // set alpha + Color fg = gc.getForeground(); + RGBA rgba = fg.getRGBA(); + rgba.alpha = (int) (255 * alpha); + gc.setForeground(new Color(fg.getDevice(), rgba)); + + // draw text + drawText(gc, text, font, x, y); + + // draw underline 1px below text + if (underline) { + Point textSize = gc.textExtent(text); + y = y + textSize.y + UNDERLINE_OFFSET; + gc.drawLine(x, y, x + textSize.x, y); + } + } +} diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/IPopupNotificationRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/IPopupNotificationRenderer.java new file mode 100644 index 0000000..e9ed076 --- /dev/null +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/notification/IPopupNotificationRenderer.java @@ -0,0 +1,29 @@ +package org.tizen.dynamicanalyzer.widgets.notification; + +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Region; + +/** + * Interface for {@link DAPopupNotification} renderers. + * + * @author d.nikiforov + */ +public interface IPopupNotificationRenderer { + + /** + * Draws given {@code notification} in specified {@link GC}. + * + * @param gc {@link GC} instance + * @param notification {@link DAPopupNotification} instance that needs to be + * drawn + */ + public void draw(GC gc, DAPopupNotification notification); + + /** + * Returns visible region calculated based on alpha channel of background + * image. + * + * @return visible {@link Region} + */ + public Region getVisibleRegion(); +} diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/popupMenu/DAPopupMenu.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/popupMenu/DAPopupMenu.java index 8961abc..f6f73a7 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/popupMenu/DAPopupMenu.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/popupMenu/DAPopupMenu.java @@ -64,7 +64,7 @@ public class DAPopupMenu { private static Shell topShell; private Shell shell; private DAPopupMenu childMenu; - private List children; + private List children = new ArrayList<>(); private Font itemFont; // FIXME private static final int MOUSE_LEFT = 1; @@ -126,7 +126,7 @@ public class DAPopupMenu { case 3: Point pt = Display.getCurrent().getCursorLocation(); - if (true == isInParent(pt)) { + if (isInParent(pt) && children.size() > 0) { open(topShell, pt.x - 5, pt.y - 5); } break; @@ -238,10 +238,6 @@ public class DAPopupMenu { } public boolean makeItem(Shell shell, int x, int y) { - if (null == children) { - return false; - } - shell.setLayout(new FormLayout()); int childSize = children.size(); int itemHeight = 0; @@ -477,16 +473,10 @@ public class DAPopupMenu { } protected void addChild(DAPopupMenuItem item) { - if (null == children) { - children = new ArrayList(); - } children.add(item); } protected void removeChild(DAPopupMenuItem item) { - if (null == children) { - return; - } int childSize = children.size(); for (int i = 0; i < childSize; i++) { if (item.equals(children.get(i))) { @@ -497,7 +487,7 @@ public class DAPopupMenu { } protected void removechild(int index) { - if (null == children || children.size() <= index) { + if (children.size() <= index) { return; } children.remove(index); @@ -512,7 +502,7 @@ public class DAPopupMenu { } public DAPopupMenuItem getItem(int index) { - if (children == null || children.size() <= index) { + if (children.size() <= index) { return null; } return children.get(index); diff --git a/org.tizen.dynamicanalyzer.workbench.product/dynamicanalyzer.product b/org.tizen.dynamicanalyzer.workbench.product/dynamicanalyzer.product index 6a7585d..ba0412e 100644 --- a/org.tizen.dynamicanalyzer.workbench.product/dynamicanalyzer.product +++ b/org.tizen.dynamicanalyzer.workbench.product/dynamicanalyzer.product @@ -1,7 +1,7 @@ - + @@ -16,9 +16,8 @@ -data @noDefault - -XX:MaxPermSize=64m --Xms256m --Xmx512m + -Xms256m +-Xmx1024m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC diff --git a/org.tizen.dynamicanalyzer.workbench.product/pom.xml b/org.tizen.dynamicanalyzer.workbench.product/pom.xml index a31526b..0f77661 100644 --- a/org.tizen.dynamicanalyzer.workbench.product/pom.xml +++ b/org.tizen.dynamicanalyzer.workbench.product/pom.xml @@ -8,13 +8,13 @@ dynamic-analyzer org.tizen.dynamicanalyzer - 2.4.5-SNAPSHOT + 2.5.1-SNAPSHOT .. org.tizen.dynamicanalyzer org.tizen.dynamicanalyzer.workbench.product - 2.4.5-SNAPSHOT + 2.5.1-SNAPSHOT eclipse-repository diff --git a/org.tizen.dynamicanalyzer.workbench.product/resources/config/setting b/org.tizen.dynamicanalyzer.workbench.product/resources/config/setting index def100b..549573c 100644 --- a/org.tizen.dynamicanalyzer.workbench.product/resources/config/setting +++ b/org.tizen.dynamicanalyzer.workbench.product/resources/config/setting @@ -1,6 +1,6 @@ Version|0.2 Log Level|4 -Debug Print|Y +Debug Print|N Available Target List|mobile|wearable Selected Target|mobile Total Overhead Range|1000000|3000000|7000000|15000000 diff --git a/org.tizen.dynamicanalyzer/.classpath b/org.tizen.dynamicanalyzer/.classpath index b259f841c..157b66b 100644 --- a/org.tizen.dynamicanalyzer/.classpath +++ b/org.tizen.dynamicanalyzer/.classpath @@ -4,7 +4,7 @@ - + diff --git a/org.tizen.dynamicanalyzer/.settings/org.eclipse.jdt.core.prefs b/org.tizen.dynamicanalyzer/.settings/org.eclipse.jdt.core.prefs index d17b672..a698e59 100644 --- a/org.tizen.dynamicanalyzer/.settings/org.eclipse.jdt.core.prefs +++ b/org.tizen.dynamicanalyzer/.settings/org.eclipse.jdt.core.prefs @@ -1,12 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/org.tizen.dynamicanalyzer/lib/hsqldb.jar b/org.tizen.dynamicanalyzer/lib/hsqldb.jar index 3b1e6bd2cdcf6f562f7b4760ac2d51dddf2d7ed0..71d39c3b37b9660394acde2611d8b9f726b92b29 100644 GIT binary patch delta 1202807 zcmY)UV{|24(}s)2ww;cX729^lwrv|LS+Q-~>e#kAwmUXD=x9IhKI4q@ojL!^QNQO^ zchz0hH?H$Mq>rL32ML7*2KV2!0XE1ap#Xq-PFq}9f!zDwKj82h!C4PRY<`!Wi7#Q< zMVRCAtY3=A#SX_}Xe4`H0sF;OlYLVD^g+!X98@Hnj=8-?+WnI+)%_3;E$!)>Wm<3* zdUv(%P>$($z9-#H-inQ3^iA5+>3nNUk=PBKQNo~%TE}!bkTINA0RNu1(qUE|50?RI zN#Ai#34$l_m+Q-x@XC6C^TemZ4fZyycq_GQzYQU9-}J{iGV$#56qIb?9z0uk|q{bNrb2nAWs9k1>s9<8bQX=9Bm?R z2?Z9X!Xa6>&YD$G)YF_Fk0!8RC>-WaQ%4t2fz!!#A+O%f=q&Q&b$-Bk466aTI0Vpb zdAx$a#$nQTyejc*8-rXe=3m+X%9HeudJVGv&KzYJP+C%8JeuWD^~dbE*tNb>6=5ii z(9(o+*dq8C<&IEY@F2|w3J+Yv%}sv?162+~zZJW(U|X-ROGirI!2UsEZQXt$_C+uKIM-Y=46 zNVMQ{)^B!h)JhWq@c}z<(T)<+^Xs%eoTP*#VLV*X;y;szQc9U7UsJz6Nw!RXp|w4O z<^HCuTbl1&dFfy$+JAi!)$=6csE1}I14J7w@?XHxw z_uD-ZgPN_s9;Ma%M(T_;l6inoO3`B%VKRRiP%z(jPE@ncy&5oh7zKc7KGZ$v8Y!L` zsn={FPcjs?H7vsJ%AddSOilYyC&%R2j6B>Du3*<8cgD`xCFlwKdmd(Pv<4J5e-Q!Q zOO;sm!}r;pG}BmnIW~89=`$=~)a??Ub(x#r!`267?s@^a3j)HWekQrPcr7p8AnShl zeKNiK^wu;>>%uW5s3!fi+`EAIWGe`$&O3Nj3qdpnV_Sct*QJ`{nr)`S&H|4VHm)M^ zfj_0DO6=~_sjCMzXx{D`8PKl zcItnnexk(BA-N&VjVGHMT{tXK2nDc&zL@W~fs?v-HRruONjuUS`Jm6o*N?|!k z9Ei>ZX$9XSfO8;<^V*s>Yz;L>SLOYa$UqP>0sK;hi^zPQ+O+%*9#|HB_5|CrU@bAa zn>%?G>(T|(`bEd{PKj-2)9)Ak>|=v4Cve;G^FNqK8dOb_>jAJx?cLH?Z8tK zc1=axW*{Ogw%7GK)0n#ZO9<)0m(F^=kQc))fPcmc2y&wH4${Gt-M^eCw!m_=)15 zsxJQOlwD-TQ82PJ6Sv)^L_7{jU}3?TWL{QQmg8ClKiVT`tO9pnU)PNW)-ErZ3;GR# zZ|T8ZYmLdm^t4YQyIaGR6<}q}ckmN|s8#bJONQOBg8E|-Pqa_Q{>~>ic(Hkf zIWRoFKx9h@r-b^o^OHIGJU>vLN6GyDLa1LOQ^1y)3`+^|%-oX!)MTL>0m^0^HI(4M z;07%FKH0Vx__sCG=IwP!R-mX;#o!2aLADfeU%%LF$c~`f#dT1tG^w)kS)v`(_05&I zzb}`~ufZq2VeTW$U6KXziRrARJ6tlNjazLh!pbIN*CIN6g$?5>(w8Z{elYB#wtF*VHZx2I zG~Gw-N_ZQR!b~|e{Z-Cuw)DGCyvLxMKF9UJ|3OYwng zcnk(2^<#7+CnHl5v?7eJxE-{sWc5XhOiz_}bNpJ_zC%jcyQ#~hByR;q#fQlth#dH< z@=P8KnKrYqGy3Oz1yP*jrUuNfBHm$fh>~_J4~(W+#g61J`zAER!XI|3#a9VHC;oJ2 zXAd8G>%%y%Nl!9twYp+uSHn^R8Gxg<;&H;VvP%|{1J$f^GIH2h9H{^Uw@Q7K8)?GlcoSl>NVOO~CU3ZG{l7 zARLrhB(|W;WvQx4g{E+J;OL{mDQWKdZz+z~&$-|m{q*ejL+FwpEq8McW=130oz5T? z9Hd{`-eZ2cS=n}TQq?_kY!hVHII&6|Iht(-TjuRJ^z+a=;cs5|)dX&%JOu_w6)-V3 z2nBZa{A2&|S=-cZ=Ap1#UorOtEbnGNenVH!{&f*iuX`On)u!G;b?qyzA=kU(VRz)E zsiEiYx4B+_4%yWZuII{d=j0U2(o0Ea2fTJ+{J;RMZHOt+3c4l2CMA z`-V1Eq`7!NNu|r{nXYvJlSQ@Th>_xSi+;$B#Q2sXqbO!wTw8W{{dJ~gy=b?*zCa95 ztLd53(Bxm$-uoVsnGYjRQ~ZmZlG`|E?#oC{vS1!1u4t0YSe7}$Plhg>_@P0t zvf`1V+MdvZk3`T>3a?P!k@c@LU2A8LUZCmE>-!7etwYwXMPC;wgMhCOSj*+(V-qPs z6W=esVngX=U_YUXlKRqR(7$V%sVm_p(zH)K92>;EY&H;OgX|Dq`+C@lY<#~KPZl+}Nc4D@#l z!W2eSTp%B!xBAKgyB8^UXD9rIh!{yITK;r6n#7&xZ!xifQH4TTFi61em0@z&tmF31 zkM&b0JH5JR3%i)M_0_f(&8?s-Y67Ev4V4;)>*3XEhX9Sb0PXk2R@yw?mz$mLN$UOY z&tSh3fs>h;EM6Xsd<4z8v;7b=3GGOTMOFok?XFFD0Atr(j?IB4DT)9r` zLsNX*3YRAR!6g@HT>4I*aIw)W{oJzsjgDx$S$(~_eO_;-wcTNFyN1sH7@6C0sK#dnbEjy9;2}!2*k!bLgLuwD7&1jNk8nX5hkXtPA9~*Hb4h5b7E7( z0nigV{Q!leTX`(TyeE_23($zctYQppI7C69c9F(PYZiIDf~_6bjn|YA@!rWiX{I4MGb>?6d{fre5jtUu2?PMxpDS05bx=|6a5@j?`mE- zZ@#)>xpDWo5$b7$TNB3*@y${a9z#GoJh0Muw8*LD{_$A%aBEJF`h zwKfeoLnqu z<(3P_O_jT4ux1O&5Tc4uz*g(jR-s`gv5bZ3F6^_RixIj?$tPs+B9M zr(&eBaL-@QPZHk7EX66NfB!bU2Bl;5Hpf=U29Rzz6G6C9E)@H+$kIz?nq}B}RdTPl zxERRU)r5(@&V6ZvR*#8dN1=Zwe^S!vb!f>Y`syD@cooW>1@E_Y0J(T3E;ZQjYTKiY zDQl%ua*kLDVoaOTJr zz!iN|6j1w$GQjj}a}vg8_&%&Fjat=?^v3a`YTeKGbZFGOj63_YV%{S?<|o@~_%5b9 z%I6SmfkDN-h8Sx3L2Cc*ud`PH8<9+T zjlVmoG;}x_L2HYaCL}0Z5j!F<+r4l*FPdQMHyohLhI8t+UPi;u=3usC-iSe#wxaa! z(eV#LX>lKytlcFxDBUkg)N>)n*K5gCCjK3cJt;)z0Qgr)!hEV!{=wcNRPbPi zueVgtqy{w^IxGJgN~xkv7(K?iR$vRu!~d0O+uU#fY_8K3Z}Jw|Zg^FJ$fT4*FNvDr?Yln5Yfll}_UdcWA1gJ~ZJH zyH;jr?lSa*j@o5|h*s>hhWJf_cqy-D95`kO2%#B)|k%Xn~b ziUbObpd@5c{l#&;^apUCG|JzQE@LVPP!BD2St9m(01-Yk`TL|}BuquKO(ux9y#Ix6V>d6Tl|T4+Lpp*xYNk)cSk z^9Y-%fp8hZ^*$JwG;@#n_9TQ=x!U#9n1O)gCKTPD_QuZia)dFK#oIhqme;F8fl~|^ zpPM8GVdDp~*nKcYS_hsy#bOA3MPk`8?*}m0fncy2-a&S#uJ>rDL`SAjC{y13(ZU0; z>i%em8XYOl(?yrjqv)Em7$(i%+^`sX+^pzgXDqP#v5HjqC#6O9fyXW>4+jiniu1 z08jIPF8%Ek@C8wzexLD5kKG5qcets>_N6;oanPzi^~R=*T`*{s_2Hz>1GQKF$}5Wi zj8;y;XH7N}G$+)!Z-3>de#}MK3)WNDhf`W~oZVb_u=!I(?N$U3NjAq=u0Q!*TYhDq0>Wf2Buy<%r8_#ZNR$NSr4r|QOvR`4bjm(~eA4Y^-uIKeX zppB&O@_Z#U4{VZQzNg&w2Kpyoy|BN5!Qbi!lHO5sQktN2?bspMx+4W|jZxr1zlMJd zf;Yb5;!1Yuv=8Ard3=T8E7iv@I`ILM|B#8!$vGAw6W`?b5hX9K_;Oa*X1&CyILk@&*nzlFmkGV{BKqpA?97; zFM7nXQY2in(3k8A2_XhHdH70fIaThEY@FGfw=vi_Z`a7Baeqg4&>+;UpUt!^Oa`P@ zJt=1ArAI!+rI{1-4%SoBYbtn})&Kohu^mEX9?(?4jw8${{6>cwlRdFB5w#tspBQTq z>hy5pgORB^VCs@#F17O~#->5Xf!aWB0RG_YL|T6NJin}t|wPd@>6-zv5eW~x?PkJ+kh9?!bT&I@toKP5e;k}!;FY$u9boz8BQSXdOl z(QOp4Rp=Y@8kMevi?Y$7_T2#s+({N3SE#6#XY4GKu^)x z_!WDVreEX%^F&M2oP{*bl|b&RHy$3;e<=_unR0@5gx}OW={lj)?Qv=);3w89EGiVT z_*CfPaaz_AL6OAbkci*O{ZF2|f69S!Tm?rC6&nhvL z@9sPOD|Zv9us6#*t>W6k`BuLqwYWJ`Ql}P+6A4Ry@TlKSE*=$F8G)vcis6smC-E1+ z1I7(D6bH8aVqpt}M$x^#EW~j9)!L6x=5K}T(X|dQ^P&M#?DIj8(UJx~S7rEN;0;Y; z;00Yu*b&r@c=ji!&ALL~*9J2_^V2;9J@MuZVzCz}InWIa)#nQ*)7cyJf+(<00|idX zvW1#`M=5J+r)MloM8YSrG>` z3Aq;V#4c0g=I8JeptHJg>YN`T|6xcavnjfq-iFplLtP^^JQ`A2TZ03E{r0a*GaIx< zv1%TOK!vQlwU~_`+M}3_2KsM=tYv6{awpgwlsSxqiD4it#AfOz6fXZrAkzJ#5g!9ulN&K|2Wjnpv_p?BN|K5GjWZ(XI|n4LHXh6 z+L<6pb8sgF9Kxl%k05i!0#Qa9QQg_vO^#PKJS81G*a74ZzZEiaLw~TJ0r4u<)|qL* za4I_Mrxn!@7=lhSIxpp&tZ-`6zSvP4`C%K1MgiywwfX3LR&AT-d{zjn_yHX{o~?{< zjfg_mG&dy87j<62`Ue%B@yAs=3g?^N2wAuwL=zg098Zk_)+2>=+TjMBrwT^FT5`rl z5T4l5SEjvrqJSXVM|j5v zPN0=5JO(QFpk{GvM+*-!VW(HG|pqEv&KTzc?T*Na)T=nUEI-v z2ckA84M&=LKXLGm*L&BzBOLEn-X)ZHLtc?Akg%$H__r$O^5$rNWE6TUE`!A_OIq)U za`IziAzwt*W+k)?Zw_>+S@Q|YEG=4TjtSRH8DuuA1ZxLE*9O|9f?W?Bb5?A9p)AAm zC@9!IT459D6t41)aln9(-q-*v^tFi%9!*Ii+d5% z?0)0q>PmMfhEOU=30^$2+;5b>s&&n-pP!tb^kqlwh#%IWOxjX_m@^0NX($E%(NL@H zEEfd$x6pN+zwW{6EjFeJuBtfi0VJv-ga_=Xzcevo?@yQSUKNzD-B!@nC`2sXNP`g< ze;-k-{h32xAtj=j(2@D0m^3Y%?3FfC9+JcMAxlkiF2Kg?W|16Kk(+cr|7MY_Lv1CL z^~Z~O$!OmrMLKL!{2m@?hdw!6P6Q0&md~|SyTK?3Ii_xEuP~98+Rdr^>jU>-;&PAA z5{~`_1LTg7n=z5SV#@!AdijclsQ-^```gCNtQ=15P4vX*ZIWk?DhoKQ_cqZ%uuBZg`qnnr%-$_bR(DqE zPAE_J;vje=bUVcb?_-RQ5OsH1wXWP7e5P1-T~2|)drC1ycb_^nc*$4Id{_y z{8H)Q86cw^UZ?1x?3O13Z%{NBl#4C3+TOgFY2|%eLmXLH@00>4FAmu8<@LSUtkY3S zXy)W_l^|*^5pe^Fktbsj$8xbl1GoZWqz;mUGMRO4erF<`Vta`+Ky8o5`7NT^HV zk{~uZCqo8RYKuOTFU2ttg(#yQ^ZN3`uKeS;(j6i=FXVJ`Br-fU*FNsapkxTm!r~3; z;{!+5NOeornvVE{FG`>RliWYrBgm`;(1DupsvAyeJD7l~?o-E(?9i%B>wHgA1nO)s z0fOcsU+8dN9F|bbgEpA=o;lurzr4%Nnyyi$J%K;c58U0X;gK6f*lk9W%>G!885deX z71KpJD{*CMm1|P3Jd+GL(dCH^R#SR$<(dth{845tNl1!1Qh*JU>FluD4XL92* zd0?7Hmwy2%Rd^x9DH^$<;YrBmz3_*Le!4|1%GYwxd7x3@gtt%jnKj1JUfHd3FNciCk9B3GsXR&7wU&>>D_ropDXdgQ0uD*!%$~~P*GcA2eAeJQrsoQ zw%IXcICzaxmD7*utln|Bt*bmQ%osDyalvwD6C3~`osU_QW>htwnnJMJJ9MA#e<|(L z>ZgI|QQ`Fr6x#k#w&DqPL$S^Hhn=k+p)Upyn*9aEwJ}QhcRmX@!uxMyi)PjED$V7T0j>L zFywTY94~3{;1{zQj@jQX*z5%LsK(fa6Voy3Jv>32-ciwn+4rhF3_*zZu9iS(=7vAV z8sNHyv(Jv^XPf}T>30QrKLfCaaYDRal~F>-bp*N59Ec7mC(8%D%nwauCo@8)(_>3R z#|7t_@GZO^gJEKZXO!n}MWN0ZXyD!?=+;#5*78gcsW;r(^ zShq9k^iDU#%Rykc(1a`L;qkEiXJm8=LQ8K*uXw=yU;qLr>hj6Vm!pDEZ9!#xia>1# zLDyGd*wcNOxAGK0b(jt#>V@hV8?Ox=|;B%G^R=!<#U#FOySa`@q0OP&k(tbe_-;wFP$0}$l;DE& zOQ3aD*UH7FHQh3B1)Fc&4l$8-|Fu zgNMGvabgdazN-YSkVvn_jzs`eYFF@kK z-Iv%5hHogL`y#=yjWAx>NVL%ElP4``ia(*AXLwu_EY8`*p=peqX=zl2RcrEf-rc1e zPK^H=p}zw9s9Ay=fND+Q5mJ-8+&r**BP9@fhb+*%$B9k`lUV{D1G<6*^A>7+{P>(| z@$Ow$$z4uI{L5Vy&!HUUxv>LY_kzKx36J`YfD)ATcVGd0jl>!LX7{pR+w|E=TG-5y?jLRj4MseZN^pIZV1t$3)dxn zNL$O2d8Z^B$l9}+u2_(}d>%+zxKUccwpczfyz5>wcNTjs1F$dAah^~w*55N>Q>&)8 z(aS0jw}GN&6dX0ctDn9o<2KtwvD#>{ezdwaH%%=ED^qK>p2?Ix3~0r!&60Z3O}Z>u zY@DNClTp2AtD%EmjN zsD1L!vmgVXc@JwLQb0Gcjr~VntSoXX=+bPCbqSlMwpxDB=gTCw-0KH-fq|;o^xB*Xt)=YlxjgXY-r_`_7Cz6(Rx`a}K#LkF1|j)z%SK z$BCdhFqJggw_4S@JhA`%obKTaK7~1yxo6K$y0@fMc9tWHe%;+jPxhB3Q>&JbzT{cG z&9W`TrGsL|I3cH|X;PLnpeAY!X?C!R09TkNSUhqo9s>yXET+=O6dZ>xf}Q zgUUVA6~1);)vee2y%a?&AKJ6dPPdDOdkX>}ut}Za7TIFuHUQa#Js{(zL}@~*R#Ny- zxv`)TMj+=73I_1{Z*PyhRR&w z0oH4RWHMEfr|OExd$f!+dYp#55YfOOhFVNSigA{ErI;_Mk$O{!p4I3#?xVEgFsZ#O zuxJ;Ya~18vsW>E1RCF2!mvKhMI1(46XXDnycCzQq?>TR}qOEfWdc?0Ge(LPrf zoOpzEO_#JwBV%CrWbB(`V)*Ic^%T<|goCj(;-DSL zV&&YH7}`|(+K^`slbhzqnTW3<-IJ`>M?F!5WMFhOAdgF%Q{$Kt?*14rkE#g(?|x|% zFO43r<&UbpMQYr4##AH?v9F6xptv3(;3_c(^Bd?-UU+sy&N}S4Rmm(hMEUoiC4c0M zs88;h++v+kTz6MaXr(b+F&*Md3Oph`H!h(TOM`>QKIKaq6;r5=>0ep=9&P4RTy07% z+T>WSQP`Br6|;X8{+~o^l2YP+*u#Q>F{A!pjkf%sMx)U&0%g@ORnWdH*(OEULMa)3 z!QX_!qj5VA$L)h^36!U|(8`C5;WF`SA1cl!b8t~~C0nLKga=5=Jo|kxA&_vHcRv4J zesvl3=f8cPo-%`J-SfpO%C{FoLgTPAkTiME9Lf?Yu}&Z2$ME7jGT`7DnA=6wS+wOh z{{=}VjYh|70EwBgtu^eXH50S;T6Xo`qBR&#V+?1j(r;-aeOGnE1~Tsk)FH$7_!Sp7U5O#Jf1%dtm@y*zj7edAw(@v6Ji zqFYbYN2)CHGPQ)Rl>bz{UF-7pAN1AKHXIAOcKX0n0t?nt)jWFq5Xd*s9eaOdp8gv5 z`xZt`iH~UFP;)M_ltg&r`eR4J@!#XI+Qm-_HvA*wEd7wnvTez zKPGX(=Se_>nKS+^!rX=Y)W|bhjJU&Rh(BR65;RFZeMs$yk0+Kd*&htv2D5%)R+CWI z%wx6B0fX%xHkbL2$NRPHzXIUT0#`vJ|H!H+DUcg2VoETn%r!*pMP`Sdqoaoh6|T+& zQw(+T5#OgAMb-_)fE0l#I^`$M3M){AwUuw#38Yq(DaS@F&8o5}9*4)SB|Sn^C(b^8 z5t-flCzhBJWqO31N=inUH~W>C?=;!*zv=q|=uXgJ~=9gmw1vXY8ZW8oj zDX{asvNK^_3qGgFnIp)ps1awNq{x{vXq<)V0Leg+ikSVqYORoaGbz#COlg3C=_oo> zY5J)pYbydE)tul?d>(Yp_IZ$?ImLOfMvx|TOz7!SresZ1W?N8XXH+QpEOF=I2xU7C z`EQ?Pp<_7ITrvBT)S_n_Ot=j3qBefAAJ}8a=Sa&y^QQYGC=+esGmC{wlRSZYwmneP z6$JsiGnUu5!O2z6?Cx152(J{D(AR_mS#&=6J|2X;9>JqS*!dv7H|2Fz5n0x+5fov-&p+rdon(Upiomr88Col+OXb)E5zS| zva6F1vg?ZWO_D9HG@@cOjP9rij1G&UT{3dw zIjP#68Rs?n=PYqo+aZk?$8x zNTkQdXv{B<53GhlB&EP(XTjAYIOc-=V{pUx2ewH{Xv28u`yV8#&iaECq8tYcKM3ye zAW2V;)kOUX3g8c$Uvoj2qBF?^N-%dmLjJ)SG!U<*U`D2$MwSl^EO#~X&zy#RbDn`A z=zFyl$9kgvISGXK#AAUO*B>N6!O8Vo*n7y2M9%NX3{v)crA*+T3WUJ1_j#W;Xy*Pu z$67OQcF_IsrqF@Y5qr>02>n(b!2RO{gnZM9fS!*ii?6Kyuf?GLL#Lh(gF)e}TO)+8 zx_w~?QNgs?YXb+oO~c^$OIY?X@7vH$eqOH4tpeE-wey45(EP=Jk!+565iO}qXzMZ@ z4{F3R6&@wRRawAtM}%B0rlF$E(y~^U9qqGR+1zZF1}+S`*>%4(#p=;Wk)_N&wP_l+ z%V%@s9S+Q_77@M94h#^~4AGiwL%Lk)_%uGj;|42ZMMeljc^`j6#gVzaRcA+$zpXlV zxC5op!f&q&7}7KH$0^yAsD<6xF+8$yF58ol#(atg&n+NCfPB}*CfiLAPQ}g)9>iB# zlsmas=Roy@&RcmdZ98{OPOqNzwcamw_fK05? zpP60c@btNJ-vW@Ds+UhHZikMoCH&))mFkAPuF`3wbkq`A5@iaLbC}C|JP6Tp$L{eg z&R4)HYP>zxS?1hQQO=^SQ6DJFCr=|!oMf{YHCgIKZk3@jvn(PH zY380G5r5(7Xr3Ld`%7W48KRj&tqmJz0^A)61(&{+oM5FjngFjuVg-`s^iQ}fCN2BoDK``T2Sc>3>^HqBPlc0~G%u($?G8!y7!3qA8W zPYPhtQrR(}ih=(hIR!&nEYT__g%DX089Bfy{WMW^>&!uy%?MkVCT;3+N|79TUZsTU zt60t+z9?D#CyNfVUCsNwd^2@N9c5E7X?vEM$;J4?hB>)oSkcmTWAwt3$f6eR`}vjY zWeq7%Ni5`Ye>hz#4V8X4nM)mtv1+G*_{dF6Ww=|l98oqUV6tPbq7O8LmhXUCDHN)!m z77abHUez5jl_TUT6_KNW8ys{E26Pqd_QqN~%pPQ?ibf@L1Do&4sES!@8<#i(qzn$BXH9+c91h)pOV&A#-X#RW8ewqtoR^>Kx-( zdr9-4Dwt>uBSSNYAd6bTF2~eSnX`P_ueK27a$1K0L;}^jg*Yb3^R(a?cFJ)8Lx7R`MmE*%RajCL0vmtNVPUe|Q zQ2V6p3KxxgIdD~ir@_{~#Fq4!7p9I2IyfwBVM7id-wn|hVH+RlHr7+3D!XMK9 z*4QLZQ_>9_|CKIMyiUtkL)xc^OE!(|tB!o`=emtjJNr4pyxVAYksky7MDIZX1%oER z|6%|}LbAT9n6kNP1Ju@g$MM^8|G&yccFs!SfBqL2iJuKkUJy;*gb#q@I6DWlY`jVN*?8kZ%OJPN}x7T8mutzAWwG53%P-%cM1xeRxz_nFUq@jzTflAnb3UnIESAdG$}j&v}l9EiJcLfA4Dn3-mdpLJ{i z>2U$aYV`KRBVcn*%vodHGaPI?te?X+oCPJ#t*$9@LFg^qE%cPdrs?=XN6EVj2lnqP z!EpRt2uqA@dRbir>zxE+wP|tG;%io~`hWZI`eJ+SSf9^M8%T>`<~+EP-?X5FUaXMs&8J{Hn#Q*ID-tmmAdxm}X~ zR^yYd5gC-hPt$vlYIJP(fYv!m(KD1l!=^Z|h#=IoWXrcp*O(x?U?vOT)ubZacxw>mbSGOJIvd!dd zqsQWh#(@E$o=!TDzMO_?6iQvW`h~FFafXWga@k5+d`=dpLNm$ndM&6XUwqM{&=M#f zBmjc52%fM`hE$Tbw$#x!45nZ{Tc_O+WtshC3@u^-8a z#I9vCx6Iy)K;$Danbz8}ir0iT=l)fy_4NveN?ul-VTLTz|Pu z214-JnqP%QjGBz4kEr-%&&uD{5!>`1RruLT@%gWNJ_eJ&19E!PHilKU2sJ_2jmsLp z*Zv#oa8&F`GcKZ+YY(LpkN+axo_(bjif7(C#A6~bfBA>d!9&e|Pu1gv?QAnMIf#md zd|Nb)z%Mqfr0O1THi`lmpQdig6{V{129jC+K83YYOcSEp82)Y|TPTj==`a(X6h95c zZc_%Q&(hBS_a|z&X%C?G&v#ddA=xOyZ9<%8Qg6H|ntBL31xF#0;OXM}7vi?98BAR& zz!>@SuhT^!oE@}Y4alxl-o7#R@C)Uyk52BInO=}#P ztMkvYMn(_;$}CTqr!TTV$UyU%y0h|Ngi=w=4`O5mDF5tS%mHbl7i}f{FWfsJkOiu7 zNQ#=cXWM@p4b~H_CFrO}DV5)(|Es?3P7mWa5W&Ez2>x&N{r@`CXmrFW14?i}CNp~z zH@8+kSZ}qpl~cnwn#uVw96Sbl%y96HU#$4Ejbu?x3d(n2)AALvVV{j@6Uj;DQhZB` zg2^|@9Kl=;vZ~2qrif|;XGp|k#OFV|th#dMT7pya-Sz^MZZ|Nf-`+2qZv z_1|i~-=5&XIzlS~oP!vjh6LJxk*mHQ2zMX%oK^!RUM#c`l^oTXlg)qmA2^UPe6V7ApxMitT-%M1HtYuS#j8i z1YwbVg()ZYno3i6Gz<0`CXHRy+1-%qs;p$jP*(uj(6K$So>CnNfE)q1C9*_V)f^Q) zi?DSVG95W5(3Tc01aQ0~Tb>rYlFIImiq`twRT<&%*cb@H`vJ<1aCm7HMI|gQ!b6Tq z%ERbAn&7{eGwZG=ew?GdsA%M9&ugtPZQOzETVU6*znq< z;l6Qgas9HgV|Lnbes>>e=C?s8c%@MKms{M`XJ%@6`u3t~W)qFD81+ z<_d+tj~n}zZ2x6(3!eRb310#%Ku8m6Vydh^{!(Z5WgCbAI+?MFA3ypk!0A&gk$KZM*O&`XJOr^b$> zVyolXh!u%CV}StrtnT|~SXUoNh{?5%m7KSvTQ;tDZ3kV%QWuBlR*#)gkUI$%-R!V~ zXtnX)o1QMrZM8T!gFfq!^gqRQzZsEEwC`JQNn~x#-5Ij1ap=2}v+5VTbAyG8+I3Uz z7Y-zNSPQQ$m2;!1VOrxB)ET-M+z6Q`>fep2ruH*6(EW5mBw9rJGDkI znr2pzhz2*~D)(0Zfc+wXH%ug`6X_L0yOfDt{!N>@Kt%m#G)cbYJALjfGDy-01Z!ln zr@r2fSL+X~!g?Qqc;RFY?3F|fHMtr!>-bS9@cz<2fR2)~f2M+8>vNxbDlYTW`{P>{ zo_QfOmhlD=m#r2ALo;%Z5*t5a_PKzx>Hb4o?+$B5-Y%=ksuD^1FJ>N&%w&HmY{i3g zYO1J$FQ$NuNpAyxWtnH!>AfsfM>%J9)L2T$zeQ6ZQDh+nLHtDk>T|bOQMZ}0!+3Ty zGK$4w+*;A}q;+Ua`m^o7#U#`P*c$EUdQ{S-u44)xc|f6q zeB(y%wPl@=u%hE(Kmcrrj?CN1*_^c*k%6HZWlA&^OwK(>dR+1;d;EWFj7noody z*{c^=AH8C?U}WB6Vh+;~wvR}6o&*#EFntpZxNEY{1_YXRW`kL_6Qv>W6I>i-Q}7F!}_% zzpvi5~2QZ}5k#;^50&xF7C!hh<6 zlJ%IqJniQdKDnj4dMBUpL!i+7jBL5RS(9?dv_(2Gv;H;Dfvfz~Ogz7Ep*OOilaq0L z&O%+xZx*s3&$hCjvW-1g_-2};&td{xtwW&sook7pk(2K(LR!}=BA9fiM1KVv-XN~t ziRU_%W{$`VIR;_S-`Uv``6a(5Ki(m?#R=^tZis`ploNNIWc@S8R3jhz(*>QPngx7Z z{S}W${XnRLREGhts^(6mL(4+gTv&A@VMB>!NNq#uzzFb;?}tGll=hkX3E=<~v*(3l9^V`=`DnMhmLEafGUV^()_NWq%T4 z11k;3B9U~9u<-pXMSm4E3ZkRlEu5spG%_eO3XuVSa> zFb;9ofp@Edx7gK!=TIKt#hKYr`fE!u%!tg^ z8^tGtX8#iKGRW@T+Un^g>FcLEWY7y>J_KNo0+xsf(NZ=Q|GrKw)2EO8)c8wcxcu-8DLPe%KO{w-;`*t=+Blt>iLrFzil? zz{^Q{ZBl3b@~WxJ?S4l zh5H~0XgG+`(40M~oEh!`7!74q3ryH)7)nbe#kz+qRuINyknnd1KqQ zZQHhOJLx#-(|ezpZ|2PWhPvviXH~6rKP;HemEQPc9*94Bi2NtzrETkMY8>g zu38UzO#Wc~4@+g4gnN)jfi8YJ*2@CwuH=ms_qnY}bzjn6>HS(I&m?4HOn#`UbB_x%Sf6Q zCN#lMj|SY~#W=wrk;{THlYDbGG1+3%bGbvF?vYNxgrB#t<|Kz4dS4X)oY4zd@*{Rn zzc1D8a(&oK@i0tD!yZ4|Zx?rD17VGlgwDB*(C9jhbl@1K6D&x1T*Sb9iT#|MrYxW0xKH7P>zd_xdYR-lv7DW z_otEs7GMHwY=4YEnN2F>@s1kigwXLJhWOZ}O8q{-dRE6aHfKT0Ac-nk7cGk-5;ebt zmp*zfd8tu+vv4Cxub$6d&TnKTH)`}=>H;d!ObqcvZeJ*_xV6ybN@D^Db*^l!GD2d? zG!+VK7!pQI>Nc3Y5R%9XqwZoPRJ5fU$PK?B3p6<=Kg^1Aa@Y|S~9Em zwEiZ0l$@Z~on_U{;%HFHju6~!pRrYk^1_dwpMqIfR1?^XoNDs@0hz`jvUs4Q&wc@}u?YVfjMM|*&5#f1;ggFaJAGB?XdTVFd0%P6L_EZ78R3{X$? z1CQT2xv&I!!G4pq9nU|Hx`pfQW0KJ^gK z%6!w)oo!CAj;Hu%O3v@g29KpG7DR}hD}~|lw#yno$uEYE{-{AID#>%6BlM+xIA-Wz z5`eG{A9dwY-;AbO@Ys&{<+9!MCQ5wp12~>sEIjoK>0n?OAiqB>L zjPYjeI8ZalSt&=sgVi_9sk+MukQ_evr`0@9Ohb_Rv^)H6v1GZ23>~cZr_LBb`*$b5 zT`G#y;i$f;I%!ajh2?3wPG`99v<&AzDEX}$o2*0awxCKL#VvV=4V&-~-@u!l2c31}LxPn*ILw5E2of0U2P=f+s^#Rh0{*@Q z^%D6G`dU2P?RlckLaXy4 z25d2vHA{e@^cE6|N-K8GMIV6Yq2KO|hvz!l-+oNhHqx)p33>DG2vjPw!-9$}i}g<> z*3Uh3(rk~E80m9AC`7JEy>?n{phGhkwsnHq(x%#h>S=iRO_6tWWPr)*aT87&5Ibw6 z4HM%$2VwVvKz%O=j1v8oPBbQ!ABmy=;*_jXlc*+~i_ z#!Js1+6k_Q2$L^z4=7M2Xqtaff(}Z?Rft%gq+p&Gbpb;1tXimt9hzRSj~%LAu#X?= zq_4_Kh)kBRT-z7Ei?hyY11A2f5s5^<-a18V*+{!l>3LeGCOy!`X~F<{#`%us4trvx zm+^w!w8+J9jFNdh@hw{Ss*+|53J$h>AFh!qO;hA0$0Ftlxkg?$2_Oz_<#yEeNK_8lCFkthC&Rt zlCgjBvNm+aoqDNDAt|KnuvoIGd2-euDh~X(TQXmsKEm_i_`QekB-i{%#}_g+El`Gq z`H&gFDJ8W*0h1dXblXMdB*BgAJ$b60^<(7XZVGB<0Ejo=w?4Yxq-GuNV!GulwXuPE z_lKGR@#U^A>pO&-Us3^c{t0X8AQ$vW9u<%R@gPM6exQ42Cd}pvIoG<+i*hEs^?PG; z6JYOpicmO^dYPMfCwo(R!4)(IamhQ@C87=JyJb1;o2cl_<4{Wu9+@3@s0m?iYg_6h zj40a|0D>4~w3{s&_}=Wbmx_dvM<|>-(Ka}omw1^z)s=6z=S=}YEf#+Y!YzBODK{U) zCX)`i%df~Iu!>gQ_P-qK)tha03FQQo7PAWmJshC@o^))3hv}^_?Is1EEWBxJ)l-WNn%1#!?)7c} zK5F|@{Mu6PV6wCU`Tc=+yr{baV6Pm(@KKdzl9RkY8s6XWGJcO!UInJa^)8cbS`4n_ z1TSm1F@(Pj|VdBiJS#yfVqeeqcYkYbisMI`8kAsDDZ**DIgd$YIKVf?4X9j^{oXh z*^IbfXox~C78=y%Qgg#sbw7ua*N2d25VQKuN%(BfeYNYgw(GtI6rDLjcUX4#1RA|) zt9m8^X4#%zFb6}|^>~Hl`X&*G|LQy&z)-tZi=AebSlB)9&{R-8jz&MSj1 zx_7!~_@;iqTJ+^k97Y3v;Hhe*0fc@4Kn{tPfK`q3p2a1dz-J{d#*UTUY!@kE%iT7Q zRqeMD_S)t_E!m>ANB7Gor{174b2U@$p({MLVfn+yOeNTkHpn<{fRr_WsA+>v?9qOo zLHy#iqG>^k2w3*GsW`h*_RqzX167a(y=jDYNEP?fEk<61xvQrJyTT;!2W}*z&dt6k zf{k%%nQN&qj3$jy3&tFyg zQJ>z)RbRPBg;>z~AI0ITn}#ek{RndBTV+@*BpUNkp`Lyr^5)Nl!(i3rU{T(^IoA(j zr9$jP0;r_7ZHeOo^gy)8fh#8Tre?>eN()5WC!_tzn_XUH-s$y}pp?%kW99EKbI<9& z(HtUbtguzp!GK?Z7L zC3vRBpYu-YqaqKI37J$)8CNCU?1ao?H5pgUOlziNSz+R#y{-f^0R!9K!o)d7vCp`{ zFPWK&fpc*U@_851EibxBz)4!b=e2^KMnMr+6%E5W3RRQP@f?$1JJTE5} zto4Jc(Yy#9c{>eA_fD`Im^Gh;3Xx|pF|-rY0FQVwUkMaKk%Qk<2)(W>(iuiv3SygE z7zMQ9XViDEhMvf_!b+pWnt{wgpS=+wE+Jcq*c}LZr+YYGK>V=sC&Zx$bd3R~1Y_2_ z*zCdXY@W-cMp#;YDDl6k$HN{mlWB%0>{hT8b#~M33~ueiuGL9jhYPOw?i*_J)JZXt zt}n*vSgt%ZH8aKg(-Jra-B$?|rH)PwcNbd@ed)ogN?AIFI*N{$22dr_l$17GdeqC& zdD-y{MZQDJz_`?oS&?na;+m*_8|T5d^2P;XOnD&DocP1(WIiV}3 z`STn7|19@rjYZ^k5`Pj4G?xV-%|{vwxRQ!Xz&-H;2US2_JUWlW%KH5TAzRytFbNBK zpDWj>dmU&9Xwip7hFR&8*MG$nEl}gD>hqI$_-GC?13kdOc@|5lK(pjKb~cYh+|eAk z8}3E|PkpWbV8k>6+Nuud@`@pIpqi98Qq@nwV=yN6!qwBYzf2AwFa56j_l-Rk2k%bk zy37;reZ~KVQ>N|Mvmjto1a^OU%sA%SImlPWM6 zlA7xi1Hn6H4)12@^WO{aYHAK0K2nsxdH=;CuT1ak(4P6pK7WHNxUkN)TZu({8mR5t^;Ty!kLY2CZ5Ii|K0!pkMqX!8WFXzN0AQ<;ybcqmj%hk%UL54~~Nm9w0ZAMyB$=1rl ziUz5yL;}nk_1%ze?)G9D9>E#+QFQLmK1idC^p(~h?hWnfD2tvqH;b=R!QL;#J$ybX zlIW@!cqbmYqeQB`te8hC3P(`;%cF-HogLN5kBK+%7$jiwsyII3enJen-pW054b>*4 zb?a39fMfKbDr67s)tuWU{I5)6><#&IO|iPcI0k++!LS0-Ew6jGKlx1qSWW7+6xb-fo5k#vYNna_b#4;{ z>Oa*bC0>Cw&fXHqOz=?occNf&hLHKIEKJeZ;EidgZN^3joZJGON+RipDgK*Ur){Q2 z;F)OsLO%?#)&}&!4NZ3XASkd|D2vr`dRi+JaN0s`V?H2z23GNQv0gED9ihS1wIB`p zll*a@Uqs~e;VKcVuABHa5jZz$XnjJK@+P!YotA+=g^9o)xa67QeG60wsrBF)U&zRE zMAnmP9T89x0MJf}+>Y~Wd4v1^({Zy_`l>zrq~YgF{?cuwV_I0ro( zf(q&Mlr_<3Qy_%}SXJWAPjSjg_1ZhzG4U`t(x-=qbS`S!sC9 zHEdQKhtiL#W<_%u_{3GFJc08r{Br5HRBhz&5e$stix$oaXXp_RO$wvHgL)YcFTUDx`%5GG?Qh|in+~YZ4PL6 zl(FRXNP=lD_brHX6+t3P6))W_c1q0Bo%{nQY{)10gcaGHy!1~QGB5eRGiUXGvgR6| zWf~`-Kf5U1FNEN{OwhCPW@*|7V*FwLc*L6$T6H}Xfmz$oOMC*a9 zNymH!VMi>-`M5j@lWK!bLC18}tWuw{B@m-Fc(u-5pdu1}4?f%{Cu*D1M7Hx~)K$9`;}G%#TCTxxbZ zC{@Io#d)^DWG+ul_J9~* zWn0aG4>lW{w;%3Lh~7Im1i}N-w`iF2V=@z!!t2q6OqKic2rKkf?1P>!sW$N&TPBy& z)i=`|R}WYAP9+0ObivWNeVExso8_+SH+a#vjLr=G#~$Y@rPA^7Cf;zuy|oGN!>0cG9I4C?6jU!IH_t>1+S;he z(HcqlweppSb<7K-@kfY73!|ezhmftkq_kbnO>EHxQVE;MpYFjnt8|?M_@|+nyYCNE za?{htiY@G|TP^9)-|Hk74<5grd3BH1z@c+S~6fBW!Km>%n*PL4;P*GCr8dZa@!~$K9 zWc-P69iJsdJM)b69sG_0jMqJqUQR_+D@BIOU@`iPiCJJhQ~b%2Q^@KI2_ss5_@wG` z{c`ajyu$N`M((*nc|tZ=A4qD=;a2p5w>=H{j1}c{jKU)AS!Kk*(#e}tl7~t`P8p`B zgKFw;8^IfVM@v?A73z-{JV0Hf+a-RWK8A=}EE1{7e!)eGJ#jP$?H!Q06mR1~`D2g$KZDyA_xr8rUte4P|N1&HUYiEU z4f78WwS2lG_dt=DiVO)I1RcZ=4?{%-U4TUa4nHMlLP3m-nI&gH0iKx7Bum8LI_$G6 zT&+>5W<#&VqN1uAHow&b2S7$!1ATU?)bqL28&{V zx}~1~O5oyiV&YlF(vPedW=qkC(D82vRzJ7~2f)0SI0vfwikS9yS_!{NVB%WglGhX@ zW#iWn@SDpOXcPE{%~A08z=-dtFJrynT3Bq&LeQ(8W|xCBIb#q7JN8XI>Xp>H)m?|; zcqaY`BlG=tc{h1&!pbqpT}Sp-2`KpOtpC zFrKTprvw)IQ%lH*xE?P?<3JKwOKd6W&gzddpmy z3ASYSnhJ3W5h0SQziy&u+MpX}CzWfsW2_V-i zga18qBeaF8Kyxo7h8rdx=wHN$9-ilObsqu%tkq-g? z>CRRjbg*yMyDyAgd$Y9 zQKZ}1#oLS+kX3;puj!VARE?4y9?ZWnGx4=a0Ub^ao&!jWkISW7u$ZeOBF)f*TNwK6 zBu+fSG(o)QLR4h!&wAp2FAQnsdFGRANcx#b=ctd_g{n1jCoiplv55)>=;Lm4aD ziJH2K5A>U{3f#sBIk4&%8nrH6^6x!B+xb&_KW_ZJijTx+J26lim9{W^8M0N zE~7`eWZKnVk##Y1r9wh<+-RKQJCE`{RUlwZ$3-g1RG5OnX)>w6yscWO88V$d@IBU+ z?sj=p$9aggF0(HO8Y56KJ(Zk9Iz6 zTUVKpVNNug}Z=S#Y(}A<~hn`^;64pN5(a^N9btjOe zL3BpKUbVZCJaqc@mmBB4(tN{z;9eoZbrx$x>}(|IQJ)S#p^QdE(FE1DC>40@{^=bd zds&d}`mp^;Ch54>`LO`hy9D$lWT3KMKEp}CYvePcM3N9*s@#vna<2Bo2qV3IRMqVA zcqJT_1cVUi*oQfK8Lo%3T7`glFq!2p|*_te>4IW5qbCu zr{pnNgfK;*JnTf>u^5TOKN`om*;9pUdw}m;ZOq8qH{U25wdM%&su>*a0Bc60KKvUy zRP+U;`roNOn}+-NsJ3Y|qR_~aX$Jk6?&S9IfiedYd$ARXCWrv|HR~t@RcB5c9Q-k< z$_KC^_(e}q5i#lu0Q^Hrh8xe@y$PvBeFKRYT4EefBOWWnsN6A8DvHtNc7D;)2{glK z3US0tYmTHpn_bycpWr;_vlG?`PfMn>0nIWu&F1dXKo;=$Cybq ziW@Hm$C(RfY}`nq951~n<^jdqX+0{YMw&yG%x$7_1^a=9+-hnF;H4l_GgV5Sy#f$|)e}mxAwBNTn3|U_|353lkZpxuQf-v7uU|Tg>c8{0T0@ z5}qCOmkWtIk$V)$hgoaUn48kkWp9{`6btEv;+(p57F)nh+Pi%yc6b5vi?%z`g0IPG z-`I&J-bwfoYkO*He_Jl*cYe9&k99d`%~VWafH_C@^2D9tYal#hKO9S!+#WhuEs95U z-zCHj(H(_~)vg};VzJ++#gZF?8?LbxE>3Nb z3~!zA#)yjVdp9 zA2JJ$rS>`IO=w<-{G?C-qCuafoerF4-e6`qK>i z9|j}U)6f0r1^`g6&l@LgB%v7RlX|{7I?I;%#QmgaxRp>mgzX*bG$SyPHQSMYV&Y%j zJv80Vyc52g<|An=T>r`9jj%g*XYYkFi`ooT%NhHSHud`r0~>KcD~o-ct{>x|y03K@ z)nnc>A*kdG*|Z7++@fbxHy#!!DTY>G&YKq6%W`|DYu*w@pYq1hqIK}aA{b2HpSpCR zdpUT89mzJBLu&jd?eg$msFzZXp~K{iMPI*3Mp^X|HWv2}PjW8B(sB7b-=B=xGE1O0lhhV}RHru}3#;SHxZKHI%^K1KAg?SGU|7B|S@U*ay zEhpH6_!I18=xO5Cnphaq(m-ERTYR5(X|rQ2yo-)e=|A#nfuP(xoDl*SJk6 z?1KrW9IzIGj+?3Pn`Nbg8jjaPmo?{dHfm1GdA7YQecoS-c;l zxSqjoCCxEAY9$#%Rm)MUu*4%>WL8aLH${-nv{k8}y%`j)!Bqz2Ve$s9AK>9DMQb1I zFgWd`lfEaEo&2`lH{&evIQm$Ez(mkO(X2a@rOLtb8A<~<5n%ZbtleXqG}tpJZyyw*2XlSMkgM#A#Y5dBLxs%ECzK>qB6GdGQ3g@ z?T=~zfz;{OT*zZ@R?4Y&9|~kuU%@gPfvgAH#waij2Nm)@JB~wEL}n?Zg;9BV#0xM9 zGZ@E30kkJ73*$Z}5p$>6%rLDtBVi?Llah1=&>=3DCTu^QQ>5`fGn+W237nR#U=*_W z%=}bTb%Fahvtg18{<`A=p&J#PO856=^2fxYl?`&Mpgk{SPEINKTeUL!sc%HLgO-iU1YV+s{n(iLac5p8RQGm}8D> z-s|y!Fs5&mOd5V*rqZN!>c^!U21ax-KY$|%GDcM~KSoS6jjGJ8u-_s5$`aJ~yhlbN zkzP^j46V)-hkTRsfzZ#C*zbw;g5>tTt~;OQo{y!+Q=^%KC5_lzEU3DN{a{Ux;?ply}etyA1#Qr2CQV>;3^d%|LI^+;$7bz%Iq)ZVb6EIN}MwCn;eOd)Eq(CKM zBR+o^2pSkUvJ@K0eGoj6YU!8{qX!Tl0o=UgETL~ zsV>yiksCU&M*KjfMo@PaOAtInvozz}Ovo(FQnwTIB4YuDW=XtBx*$|PAE@47k?`ph zt>~eXFheMnigVU*YqGSE)W90Cav&)}=ncdq!BD7qFdB#fOdb*)&fiRc8r(sDfO(9_ zf*=B%5~vs)%ysZ!s`|AbX^?{C8fLL^y=GHv6Jvi1(x$A<<$?nmM@sQNAY%|#>BY3J znGa!T^peWLf?gcUDgqIoVk2v$BoW%jMW|2Gtj^FS^4fd zC}I9;e8Xps%HvwT*@~;?`R5(~RUOeK!B!oF&m5ASZK`RX6G((B|lpHBGnUz`bt z)ldsJ{6R_y4IM>mL4Qm!z;4u7@w1-Q9jQ+BvqowDa6hCGx4#CMEKC(?U6c^6zZVz- zSY;z5V^BcDg31+MinccrB5>irJr92+QJy32NElH1d{5?vtdRE{-n2%PC3YR%bV8IR zcMVd_1C76gh$uw4o#y&XZsukV(y_G34NY9&p6K*J#0Qdz7si>G5r|BzG7BQMtQtXV zEh}2!s5NEx3#FDA6k4xl_*|vL6TyQ!JJTfepJXxgX5}|8e+>c%KWQ6 z+|M`Lo34_Rxb^%9eacEiK)e}wE>u36PqowATuMN_1D$M=p$=`!w2ehiAZ5SOtv-1J zjncru>Fn`j0hP}d3W&Cj>3McNJzVPWu96>Gs8VHFjvE?#E-4#H6X}MV+Z{Enp3ci< zuqf;?tQsV`P~F8dXttUb;dExV=rgloKY*k9K$qQ>;wd*K>q_dCJ{z=Ek%+6ED9p*= zQYm6tbLp1F-7Ql%s97?hem=pTY4E`6(vaJnCM_sx*uCuS3d~e6OwCtZIx`n*U1YD4 z8BFIf%xupx$?n<7vRgjKojOlYu;(mIJ$pKwK5tME?9ci~RLun_Fs`0crY}lfK1H8A zfo1zPaBmkZf}cFq^K=hp8I&yso;;Cc?^yXFwJB&$oyIPl>z_QSWD~HI#x9<3pFF{4 z6L6HquAXO30nbrg-YuNHie*~sq((&X^5;j5+5{$@;EHk2yk{hUC;4T1QO53UuWXcN z!2t*AD3|%{1=v5MGs1Y-A+sC7EfNfywjw;24azqCrFHU=wNKW`O~4pj8DMII#ZxBXew&=dKvW9stA zZLlTKz^jnO{V6#bHq;2D0YLa4nO~8(kNLIvfF)3^L5;AjF$O2nOR%Yy!;{o^wLf$I z-_FJdxQfezx-6*Pxbaepmf7>W6Dn4)<{7H@_K@H5Bfaa-lkS_fYqq^ktzQ+} z&y|g!laRqsMv#ZEfuz(crT75s2nLaN+CT>cAkLZ2ERkO5s~01K8+ZxoGrrYYJ1VQ) zeD}Pj&A&$jr)hwfGj8w%Vd;KKi_R3ao%l9q@jfN5@seJ%CvH5|c|O^hn_)l6Bp2Mw z$GI&s%FjPBl6y17!O0$7oo*l#U)U3LwF-m!&z;g<)qvJzl)>3W2SvB3Z@BEn>J{Hx zppyJdbDjRKe(3mLM#7+NS$bz$$9jI-)g;LV z)wS}B{an$_IDh-b-Bu*u<7I|B1H$7|a6p_(i7OE2*$O}Y_-kX$vu_PsjaLgSsS><* zT&2>@x?C2AU@FX)3IPe1Hx>)iN9}qEXwk|64vQ$FWKt@9_0){=@l(ASqsk$T2Lf-j zY>c1Ox!by_=m_~bTnREQWb`ciD){_@cYZOLRi1U=oac?stp&z2L_r`l+eXBoI({D} zkIMjr)>tsbTw`kfdGOZZiW(3qD02MwAG!bvnn3-JvmQDK2s88l98;nGeVO)ObpKoo z+<%TONI){?{~f6ENsyHt6ha>TyE#%+t$f({=PROxAN|LDo`(`CT66$9zek*HL(@EY zxwP7+SdKdK&wKFK{2}Q`FJ)s^*52)ZLMOco*wqE9CBYpk3~wIa?~qaz5Alct`)~Z2 z$PKoIP=|0gx*ZNHES}J_LgQMnb|l$tZ=C>{YagZXwp$=XFPbLewB3tNf8RrjcBlzh zD7Ap4BL22!c4wga4qGkGlf`sy3Dwr8{vsnyWS?D2e$&#}bwO zXk!q+Wv}-9FABT3bsywX%>*xkKRi?ok!TzcQRxy<>5XpboXaT&U|{wWu6^%;ZY2Z8 zlKf=G67)p6I2{N-ujqAVIs$TEbs2P@JkUsUE7RoOeC@Z4zWf3XisZ?Vl4tRYF(lW->_Acv&exfGk16q{4HluWtw>jN^m zjPO*L$g?dvZt3Z-@At6YI%hd31d5Y4O-wu#)2!^T@H>_V>p+kVM;T}V+UZ@5LuaSgrn)y??YAzF zuK>Kag50hivgy>~w}?1z^^97W%UZZ?&Z4&xWFW2IKXMn#d(EDYQpTyAx1vT5W8$ez z9gJYyJkoJSFVY_29jTS?uLDX7Uz#Ab>)9aEk6frZ#xF*>&%%G;f4=~9`Qj@%cb1&# z4WM>##{Twv&drm*+RO}9S((VTz;8oEKFnSG*^RGz=HQba7mFfiMK_?6hr1<9edl9| zhZ~YR2Nhi#YkZSz*d>cwi&?(gTDJJ_r_X}+t%C9``saP^obRe^Zh$3QJ!k3~Wn0Qj zVBbE+`XT79Yq%PTdv`!-wNGfkd^SM~4A6FHW*TJO*Cwfe!OG@#6IT%HmM>10jMsfl zw7m(h7JqCwRKjz+<@KgWzH@2f-4gY$h*e0!`7dFi2d0gJYhFM`lX$SugaDh7Wn;LD z4DkwvYa8WZdHjsO9z{IPx&txo{Ikivo-Z!I4EEOQw-w!F6`DS?g=ItdFNI478z9BB z6@#%QBNp~?i8Y)PXREk<4N*U%m4SF|9+Qjl!<6Tx7Efv$t1*&c81l7pbQ#3l)R$Nf zQ|GCW9hVQ4`cu*5CXGSa?mHF!+)yo=!B@e&CYUxxb~uo{kHn|j`^8|REMQwB#&>g{ z`2*?qS1q>C8Tq)2*Hhn`9&)B3{J&`CMJy81tohcLN-^ynda32wda3|mHbci*yCtK= zcdcicAm8L_$`6qpmOk0G@7O@5w}ZuJ*v3Xx#A(eqp8ek5rATZg{rOi-)T=t|a#Mt@ z0@*Js8$m<5s${<|_MFW|`sut12W{+3+uYuvtA5=YT$u|g>wWgNK(7p3Iv{-)Y$x3( zFn=yh(W)m&0 z(5_*!A}k&{^~>|VcGR+kva-K6_IqmNCC|v`gGGWvib!Y+7;>< zvc>Ik`gY|U%FDcW7_!ZgG(2V6%Qc@Ru-Y_HymaWwnpzdA`uTHe{Xh_U*W!v~RWiNk z?i8KDpLU~_^35wMn&p-B&4@^M)fVQ|T|%Dn7jj!pJyrVeW#k;=TlynZde=z+7Yd># zwGw-Me#0B8Z5D+?x_H25j@)}(k#n&4qblm~mO8NryLy;7EG^L9sJN_?Cgev7HPqoa zxWYjC>A?26S;7GCIgnk;F;O6cDy;LDKqj_+TzETWPV~C_v5Wc;vPscXkrFt1xn3P} zU!7D&=dA=3Bn{-vPEq%)LcFBtrZ)!4URQ_KL9iKx+I)j%x~LUK-oxA%V|_=tTFNVG z5|=wwHnur@{+O$_Wu?)t$%!my&eJjlrsuN6M9962=b|(gosDzXV4mlU<1gMsX-l5p#mANF3P5GuCbfF< z`gA@!PcB#K^tPr1?Z(WXW0!^>*%wEibyx!pCs1LRlt7ayg0i0=q@z4?rEej-kw zWOhTOZ1}I+p8Bo*1-Uv#ft7aAf}ItYjFr99R$|2qMdl(WNlDy84}RP1Z%ZXW9p!>sRgoF^#82%LfjuB4r8hBeNcP6hz9# zk<6Qf&W6QV#FreeM$})EiotaZyg?6Pmpa5t$=EBs$)=E)G4hNJ=eOJ=&476B0PIXY z3OqAbMwy(`MT{*-YaQOXVIRKb@^Ezx?Pm)>0+ATRp-9TeJ1gsQ=vGYwZ}7Q{Uk&<5 zpk#A0Sd&;em|+nUE%RpbtT7G*iuA(li#jUS?N#&*gx8Nz)5KIHrSy05V!5n4B1?=%XU}03J4Vm~~Nun;3kF*dUmgECd4R- z_2C$Uc9Q}4LP8|<>$ve;$}>F*vFxYmfFs!9i2DqwfCcu9YE-}$b|F_Zej>mNa#~+v zjw>2xR`u>B)>JtT2|3Ae4qDN~YKS>4OzNWD*YoupDNmrwdzxiqshfa3=kGN0^ovXt zy6wE%3dYd2|1I9}DupwbVr1!>yXui3%6xq2KAn*Ss^`Of8(E*WuT54z3H=#Aum=86 zEpl97ojKUNUW$q@7{kA}aq^>T&)}Pxo}+^u@(xm&{LFgBewj-{Ttv0)j1BCkEfnq1 z+VEi=MuqAhc~vcG)1}x;Q^F^CC9Vp0h@AD(LByYdPDSA`3!!tKt=g7k;`u{2(QSXRjsGlr z$ozKH?VM52pX0|p%Idb}xYWmQUW85PjKnjp0HL{}#X-)TzdKwy6v!73F{a}X0}Hxv z_iy5CHMAwNj2-7>pS;7;1B!X980megC7R_#6D@YvE})Kyku?X9$7nW$eudPqjFr!7K>4-bi0UYMJg@Dk}Wz ziMCoIRqXWfEJjxa&h-QSc}9%9feGSv{&x&al@A15*+m*4Lt=NNxROBFk0v78l-g4B zQkzSos#I!ieqla<>JQTlu)yDaWre5g_3qQ!wKmJC+La8=xuz<0mHkNJ;o9M*D&BIR zl-`-4I)0To!hX5pCE{Yx<-6|8w=oj33Jg2LjmXa@%(mbW4W=(^z9C;W>Rb zO=Yjf3#dQAqS}pWZ9D0dkTlxcM>GK9SG(&AX8x&{N)=}8qNpMV>Xuz|6kMki1Y3$1 z7SqGcMrfFL3oNDl^d+Fs~hz(XA+F9UKh6 z5^ugWx~7{0s+V$sZjRxdKL0*AW1kxFI;k$;I^K$wDjP7uc;|PPJlR!5;p!*$I zd+!E&;-Kir5N=ZFaO>V~?+qPk=7KU!r%{7>n1=8IpPA^fZnQ=%HJ}p51--Io&C-Fh zda)y12a?mM)j!$V$t^$x1a+i0O;m8{(}i|<@Z^ck?1 z+mMW6w&6?*AV=C&Qc>%PiM2KzOZ;xZO%#LF&1h~1WBWFO(yBE-&(9vlqmdU`Q9F;_ zrP=GdDOnYEe#t#{0{mIQQ_m(M1tEiJ6Rd7Mg0tB>hL;GhYs+xkEYn*iUoEzb~`8Sk32h;dxDy-RwZ6Zr9aFYd(vW7_MC*0ZA{kmQ6iL% zaFRZw#%L=ziUqlaYmQGm?5!rBC~B~^M*gwy7rXzZVUGxpJz)L&1TO>c|E;Y4Ye{sx zM*OcO5vbPS96d#Wgpo6vtNiRp0Y3|75rwy{1GYgpkwOj1g5D|1d|WEJMb4H=(jt@#x<8 zmq|;T$+wZMB!KYEGe$5U;LEJ=$*lO|F#m-jG>4O83H6~8l#h?{MA*G(x61(}71>7u z6|tr|BC4TL=VXZan`eu<6xcmEIO3Q+{WlG?W?7fVDsItOsK3=p@#Qqwz08u{=E0qzv_{}_z9<@%3}TfyzV@c{`vlO%1tl0czhL$CIj0nFnwDrV zT$+c3+|OGku1klYz9s0(@iW$@%SM(vPS0aBHwZkssVlOML1c^_H>$t7XqZEHElfqs zAdmOX8CX%PHbzh{*CSL?-PO0pe^&Xq(&340?m5MU0r(uTfC@OY^vYE0!HV>(Ps4v> zGq~uKM(W@#!-x$|jcO2A@kEu_BT`P(enoh98So9@MN(eq_s&x(VwDKUfTdu4-VdpU zP%O{GGEz1#W82P?$pDqzv6AHapNf7)Vg0swZO||$ciyWGS->k5FMM*?lFZ4!1|b{e zmU9}q_d6t006NO;6OWS0IlGY1h#sf)(@A0$;BANf6C?zw%%k^Mie>P$?-O}MGD>f$ z=K+C7jel6=CBN0>w_W_w)kBCrs|>kIDvRo)e6%N^}t#fP)_}<;hRY5f&*ge}X6t&^nq= zPC9H;uhcZ6lGHm*xJM#x(!uY&qBRdQp7-ow-z!X$s-EsZ_%Au$wIM=3Sj*NR&rz6&w@3ljuzFj;-(SDGxT$8_$&}|1d-ob2yFdwATykWmck22_0 zj?!$LR{03RnmR002RR$Q$V9VKsakjl^ZYJ2)=E-0tTz}6Mb$z@nj@b=lK;yfrb~R{ zX8Y&q#Q#4$o&Q}Q?xFqoZ?7c+e6=97~Eu{if()P5Ph5HC@>jG(DzDARps*Jf9Ie09Rp3x>6ij~x$D18 z9STKdl_MHq?!-M3jr9$5E@0a0bZ$AsG+_j(ywVVkBOb9D7qMI^Zjnjtc8b;0hGA?c zhxcRB4&#S>$#0O^lZ7GA3^_O4R9QFVC8<>SP2*j*hIm;m7tU<$=>EEpxjg!=GTST3eOY#_?ZQ*m&0oLrxi;4#8Lozb?}91yK+9p; z=UczR;Afc7>e3?EXtt|tnrCiu@u{hd<^W8_>^7dsBh`Zghb;l>=JPH#GwrKT9s` z|J<5g+$sgKxU>e?1Mz^@#gPzSFL@_~4*A|3^BWjF;CsJs<$lN+m6Bf*qM(cIm!J56 z@0UOGdhbKrK-?B_OUohQ2SqcBCfi(BtTnc>8`L|{4M8STYw-sJs7QVHgtkP3=L`z? z*MNTaqKVJw_*;ki@1el;aF9UuTG8)i%%{)*k+u4Ohg%as)F`O8sB(<9SyGl7V!`Ug zzHW1ra_-qjsMXXy0D=ynTKiR21i(PwSr%zx)Ai%WKG7Dw6K^3`sqKUJ{FPO0;19rE zs9`G+Zr9r?wFM&6AJ7k!L~y^pMxxJ?I_$GH2Cfe;yUmc4He=m`@{5=5Gm9BddqFQX zOx`h`R0W>v9J{AE@#Zx%IIX9#WXW@^aF(~P#TIC_D}pc;(dG)|*=i(P6NOReCR|FF zYFWjXwlBq!1hDl52ewy{|E$;;1+?x7|`kDkw zi5`0d{yb29p~EC&mOIKad|{92B?kCe4g;n=L+ScZje)+ixXT}C7jLpXcjW`1uST}iBYNc4hy{LORaN- zAyK=a%$_gYdtOoG`$*eWAtYlk*9WwN4dy0c_@)F)XhvD8e3w&xb$ofE*7Iuo^@Ms=D#oEq4DYuJ^)wQoX>mX?m) z5f;jd3JQY;!<4SkzES^ zo+nT~A$9KXi9x!{GjOWRO6d7R`QWO3$xy8;$RQ)B)YS=a{VCG^B*hu7mh1U-{@QVp zbBeq%_^S@q^6?twD+&t3fRNNc8S#{8PvhAw(eFJ7EgL8FCr2(!gt>^b$`H02>VvOr zEPC8WkM4JXuFxuC5rK}KjRgz@XVfZQml`nd8Im2gzoa$8af93)Jx_ltUHXgw3ED_G ztkx8a0Y{#;PUSS^wzGxH8%%3-pna)cr@oWw00)yqSg%m7?-pIiC|L1C&mQCpV(}Fkn05*p<`=*(le5R!I35~vKY)QFDKioc4%tZ z`zf;NnByQqQexLN%U8HIRWvtMY%N}^z}@qlbiZ$RrcHv^?mT~Y_YgQedtGxqXFFYU zopirkwRE$C|5zFa@@(33c#T2uKUqoo{vNZVdc`B_DLF()?35lO$hwrXeKLE(DF0ZB z8ly?r<)O|7_V)wk<)2a;Z>uEZ-Dq%ZR517W!G)x(AtctZ8{ij*pb{ zj=($pEa39a#4-J=jh!mC>4PtX$0KnPb&#AKF??k6=+9&$Uex!pzubtbhn%)^1e?*_z=pXNz zzAaRgMBg1=h!q7lx%G=wfH&2W_auKPhgn&z6Y2(0@+r3WWCHaq*_FCr* z*e56B+fQw!S01XKEJp8?@f-UAp)Xy@Cq$=CxuYAm0g?}}#svb>Lw-QwmP8Rk#RokH z?!MasaM~wO6qpzvqj2va$-md1^+gKbH8LeIbW`MzQ+#f0m@y;oQZxSCwrBOhpR{um zJVFWVh5zjwh;aX@PF##jT+BO&FuORT=olOOiJOG4_&Sg%u-`uh2LAMy`a2&s`zS;^ z^eLr`b!)1pzejQ`H-q3<%p8iq<*wi(HDlxz=#Z3SKM?cklbGrJx8_a>{FBN5jnifo zQOKu%Om1OLKw?UdVtKq|@IajtXAnqgF4y+T@uEZxhW#LultTnFgM7Y|Kfgfz%^sdV zOZ9<;JZ@I@fJ?Tc@al%Os)?PU%B(*HSAXF(FsDw4tA%%ZjX>Q94(8?ccb|-=tiQG% zSYB1_LkBjJZ%QpsW0qTOZOu^*V~Bit7I9S_0RZj5Lfu-O$63>EB5UvJurg9PsO}bL z#D;$iK4G$F+pg{O`5b>ziGqV+iFS-oka3~I89>;((G-6!i z?%-*xv(zZ0!Gv~Y3o()coulJ~1UYg6KDjQ!3(;k)tOxO z$;0}7{t?Q=xR%Dtp>ZWEnw#5badgv*6;egy;eO*dXYTL>I=U z<*UYXzK8cy|AAz?hP{eZdj2brLyc~um2Fib!yMt+b#8twae-5qGu?BN$+9w^J{=j> z`ciaN_aZcDaTzf(&=tJHJ`z2A`B{{>&vq~$c5W%AoNE(pbEtQXY(>H#p-_c)zZQJe z^Wu=n$M5I05G`gL{2CG|Wost~5IcXsh%q|37<%+Wr=D)Z+-h^1;B?sJ_gu8RdjrTi zGc!Y*SoDmHtN42%)_D(3mGA$i?ZVqOSR0ykk=dFJ?i&w`X+s`3q- z^BX%H`>5+v^vDH+y@@u`*vF{^Fd>F3`I?k=*=^Vj{~Yj;MMqOuaxuaG)VPD7SsR*Q zKKW2pAW1+12L`)o(oe(rV|}<5X7o+83-!7FUcGFK+8`7jL!`|?59)6a;)oxElOOla zzgMjWdHT%FNE?wXQq#b@fA`zUvY@oEVMns1YID$BO~O@*Cvy1@Lb($ju*3%vpHdM} z87y9J`g2R|xD|PmpC4ga03nNWxLbG^g3WkCT@>Fu-#iQYs!cL5wNsG9o&FA?T}`^Q z_k~~}1Z0e}NHdC>8LmocK)rGzUtaujmJG8*u8?-VITl;cOgV3zMkwv!@41i z(WZd@RqZJAD*my+kgzGj>(5v)_+6HI5T|5kX6G)(h^)0%apB;D3k+zFusIcJhi0!9 z42iDLV*OTMlZR}+^U^)M%f>>xs2AN=4uRlWR#ein)F_TK1TAI z$3=&#|H5sS@pNx25X?0+Q{LaZcksNe^5Iu=j$B6D- z-_?SD%%`GqridceAKgU}8|cy~k1@A-rzu8nLJ zMQ|9)C^|8i9#}RN2%nJ8o?va3zHZ7Ud>1Up;!Mk?HR-+YcRVTYs2B{JotC!7Ksb-> z@4f~8$n*Q!#FsgrrU-rNTqqc@clApopiDAFUgsNt?!Rb z*Q1ty)&^!`$p}%_3P5abyF+O|X&Z4UOEREO?!m_r0Vw+3F{hWAWgsJE1c0lWH``rb ztJ7ySy;Enl#w-8rW@ZOeX9UI95%R$H9>sJC%%>p%1Y?J@=f&ZmZWrxxeg0^WSr9Qx zcfq=DLz-o&lPq@Sw(Wa##y9UIgoA9+ewbB@ZtY}V`$Ho>$n)l(l_!%YyLF)WDyQNb zGQLxD56sB}U}O9=sHLsvG>3-N4ll1WpK~dM_N~5$Qugf`?1WeHOO|q`qYyxc z7VYtI`l0GC)U+m_`vFBDiLi`J$L7AHg%9iEV2CI>j5G)HK;V>n@bK}qc^rF6U< zX`$G`))3#b7jaA074o?&OL_g?QNW03kxB;1ynBv4L^l!bU@tfxVMUtDvrQwu+XK zW(wcrtTt?4QeQNZy7MnJSoGSxFj%YWs!fgN*2FXmFLp0>SgRN78yCyO!4(&ps%*)0 zlmkYUlv-`BTuE$SJeqw(!}>FrU9)wTbKxpc#H#f7%t=7KgPs$hAd8j}tOlMdu#rKF zg1lM5FnR--vgQ0s&Z{2lm)aN1 z`Mp9-{oz-fru;z-a_h>=4y!Al)!fUD1N0Zdmt5y7>lZ`xPg|3XQoFWc)mm5S7a;3$ zpQ@!bS~kHq15n4vY84*aiLqlCSWoE@?(^HogI3Q7UvjusJF2H|hN*X;Gp=e$o#SFo zJ@rv>zNGGoHouNC!onJAqv)Q4jsG8Zk;M_ttY0jQHHowFJ?D4E!jg_R=+OQs*9I%mTVHHprCE+#}iov1$JTLkLrR# zAxqh+pz?sZzWKcTGmJmrqrxlcSBy%mMkS*BNPVDEq^=^#TBMwoONEleER$9!y}W9+ zCgd!}`h;Z?UM{_qXff^#lu64=Br(!zX>uzmo>cZOol@H8it6AF@L}ppZOH{t`5I0t zYBu;IZjM|J_{gbnrYlNJ@Yhf^BvPxSRZ%%5TB@W~P^sMlEyt52;Whiy9nty~tI5?@ zHc8ZyT?&8W#1LrE3aPZlHXl#5+5>@SI zoqrY47i56t7AdH9A}x#qe`Vtv&)v-G*)`)n+|xVz@I;Mtv4JsthY@1pvop?&zly@z7KFeOIJaTXsDv?@PMk_}ChU?DFLTM~ zOOa~ix&S7J%csQwI;=ec3XK*EA0OjQePa~tHjBs^shHtVv-07q&pbT8YeFvVF?17Z z`h6mJ4w7I{?4=x*l{3?;pTSx3{PP!b`I6AidvQtFbCwUOB#%@($h*iF-zz0)5uQcO z=BGeaPt;A?ZWc;A*$$}#MFPtF!=)MACBydntIp&x{ftQVVxLKC(aZtiuES!ZmV8wI zq0f41^mBAyBqSOEVu|M;>Dg~I3`nm59W!aHm9K{ z_YTae`cX9{G3X|aW6+Yegv15#bFNsV{d_>QICm2B#KGJl5-LWZO^^0i1JCMFSx?hhqmkl{vJiNT5(ms6+tE^HW{C8^GFhvL zo2aKZ$ur@PDHRp-+0G8+tQk|cg`C7#NG(v069uef@!7`Q3nP-H-77WKRyBHxE8W2E zyt*=5l?lm4xcQe^EzmeY3Szo27sZCJyWUlK)-sGPRo;f_SYPu)MOjQd-2I%~RyM>9 z|Mn7!KmE20dhO1~iX?>kZ!akGT}xF3O$s7!LY|Qo!@e%W#n6xl}p}7*P z6+L$BGbh?cV&{oIrEL1IYCTMwzAWG)NaJh!gDRvH15eTMK9OQ>XsEms zMugnsb!N(>+9PU%*azJViE5uC)}7{I7n1^B{@DU*iH58zvEg=P)=x=qnZ-z{_`9Im z5;7|4h%{5Y6vI0c%%Yy|m1hzpKw9&f;c*eaWr+_6){=Ol9=daA2CJ2kJqmC=RVMEz zmM^u)yvzMy*-d!bW!`x3ArH-283YqN)W2pQbGGt^c}<;y&c#;yZYB?fS26`wZb461 zOZZ_>Zg`~$76f)tB!Q)tx`x9QPb>|#fIqa8Zfgk!)NhcsLdBEB2~51tt*m0_%IskYE4*Mp58EY#%%zJr9i z#`UMg>W$VKQbsyB<-2k3RC2$mC-x5+UKQcE8L&a#q%_O@BF1sv755*V=vi{9?`4qT{vlz=W0bsmzU>a-GeKd9f}3onPFQXgcKFRg$Sd(?Ra!&Ij* zuIG9qOF=6jOV(+ARjK5RdnRIdC61q$Nq7b~; zqH;8hz*GydC-5Z}r%eLIL1qeVz32VZ-xWKfq7OZc5l&@>(Q>?}jA2B{2(r=qor|HD zj+1-usf)q|0aY*KH`=+n&{Dp!8gG==QxZ8Pe$!4P2=ZwaQb+ zphjx?Rgll&u0y~Ro@kU;rrku!#8t|=_sfyqJsN(<@|&NWF@6`dUn2xR4}u-F^BZ>Eh_HBI?}{|cEJJ&Uz&Gngih;ikRLX^JG^?b_|-f=SiHG#00#aHCGx1e z-I<^Yv%`H0ZPzHVkAZ+0H3zuHf&Cc~OK|TI2=!m#Zihz6Q7o#XKrv`Db7RX@oC+D~mI&K?8fI4-dCT=+7CukVkxIePB z13X^f7#V{9MvjtDm9HgD*)X3V>B{Av^=?0`uiqs$fXD8Z*>uhxWoAPhm(=NnRLMF? zx=w|8NEKL}(tJETA#!7Sj{QebB5iPGTnH4)sQ@@Z<)uS4|9II(994`+cSt@;XPH(o_cF8=%u<`#AK;XD8wlt(`0 zfjjVuGV#@6m{jV-m>L%5&{r-mjy|SpUC(d>F@(ynGN?8OzE>rwO^Lxv(_|h?8uE(w z@BpjUDfXS5^`*XEGPp0ODNXxW5LmCsQ1k$^>1Fs3)>zdH7JE}cXnK3v!FYw4EZ+%> zaxNrv6*&aCOiARebw0rG>J#&4%XKtnzZ!^3Z14Ml_hY~1Og+>0$1svIEqeAJtoKNT z!4a+7lUTDhSN9X$lR zH*5yT>K0$1my*L+fU!@?iEo4JtWWo@8veefW}n1Re6H9BU!;|v4j5KH zDP>um*JTk@Uhm2CssqPozDo>V+`AJf|9kx*1O@qA&1cO&3aK zpV4g!A8qD@Lzm|-_rCp*Mg(d{Fu1fc8ftwNsVZ zI=LM|s~Ebb=HPTja1;gC&M^48^d9cN?pa|_-os|I-h;F&xTZfrdDz6ZV%Gg(qQM5E zlT@S8uw4&j*)oh@z#@?*P+-mI4)9yx_47y(2tE8SQ5-8nbVR68s@S8dAd%_E zt8uTk3(w8aC&-@1(S1>8-b5BF5M(hZ7&J;duxsi((vN-Y0d_g4cuVbcwuzFsd4M=x zBNK$9v}y)nmD28xQ;z^#v#lz1C-YsPVyHq#PG%VQ3?Qg#e8m&qKyI)w>!o4f>;yzs z{2HOXC8Gt2VmzW1fIE;Rq0=|e@{-pbHyMuUMK&M0gost1Ceu_K zRvd-H-w&tfO)@m=`VYN@r|U)!^z%j1_koYn)o?WV@Ze21DlRa$A*<%+(ARZboL#ohMj4kY;7l*NzG2+|B ze=g5FZmFAIix%YFSl5qP@qj*x5xT`K0K-YiQq= zIl!2Lv<9Ie{^S8HC1!hsd?h;NtVzQ8GaTMZ8`hNZ>kNbPZQ-mP183`E5^QYfAlEiz z#uY9d4(d_V=?#-Bi)MH;V|6OIO?&c@Ab@OmQwy#K#&opJSb~8oK$h54EYE|{&BC8+ zE*v-F=+XK&ws#8LIiW^xV@c&!x!=6#GF1l+DVK0@2>v1vOR`MV&oqopW%mF*U)`{4 zB2$CP48{Vdp07}@DJnCarUY`0oQsX1EZ4_AeCPvjSk_urpg$S2j*L!c0lr<>w34W9 zX=p^hoymu0BiU2hTK>tU0e{VnMN{2aOfO{Lo^PABTZks%y;54YR83k{tjyvJaq=s` zIA|YPJFNr=Yn1vpUIaS7WGBAbS`-|`Bg(L=v$9Ssy_v#nnZVho@##wSPNtXlV#s#Ox?u}-Z~!ph-aMw_wxf{q@C$IT=~lU zEENP81C|RFF`D)a)0*ovkJYN%Pv`S<{K4=HTHObGdACRN5p}b6xk42;q^U|*D`K|p^pLt z{Oe-yMWylCdr4Ywr+`RrAR7nD2~o0s#6|y2PF# z(Uj{yKo#O}`quB_DFK;BziMZHY>?WfkgRdgMtkJC+ zwiQG~Po)5np6h|ruURgDZd`c}I2e%|0-Bj#?~71sl)#h7X;IeA9P_B(FF;K9!NU{p zl3cecb>~yg2ZdEBNog&z>_gXbef+yT(MVzwfJuv@kMw5FmN9SZhzC9oNF4<@p*8K~ z)d~o_UmD(qiUpC7a#GA$T6=A zim)d!ygKibQSaK3N^)1)XP4@>YU&O@PmQu8Ii0#^ z?4xQXgz|8#jzPUvRhKYAIhKvXs>(sFu#sp3TI%ofE3KK z2e|76U@N>A*UJD}WYKm57M2fHc(f?nZ8x>xcG~M2swbo|GQD7_)HCChAEZU^=%Exs zHvO#{<@Q>WnV^HO6d1=t9Xo+Sc@tDuzc0d3B46gUXO=$C_MId*3fo-L^|ezDY<{x zi9UXM_R*vYca-TOZL46rOzW!GX%>u1l5IkFOqX8$zEkM{B{247I`At@q6i~|$I`|< zqB}$gcU#K}GOe9Tcy~#zHp5@)w1%r3o=s$roR4ywsGoMH>elOOTw>KIVBxk~6G|12 zV($|M?oXF08uiuh5QQ*XzbnK51o3>UULn*@hy;}U9R=TSWj9nFSI97_i^L_dQ zt`eaIfE)zmC7ki+c?6-wX!rsb`s;mV(e6{7^#oC)nnp`2 zNM4TA%EzCr!sLvw=MDHOxScDwWuo1XfWA$*1v>ny0##W-q!u*zP30fiH<9;uo+GeT z_&CR0#O^U+Wq-O7AKJ&IpAF-uOQ5SK(xwZ_RpyjY&A z9l(YCli3Wm6bgm>oFA2v#3*6b39ReR*sx6R(p6pY*PO%(EswIj+pO=-pifO$HT4dy zH<+7xT$JjW?N8)`!~{OOExA9T=b&-FAy&LcZ_$Bcb&ata&09bRiDtIXeJI*5$+{%`t4r_1w%-4)f?q z5k|PAfwZ?P0qPqcd-?2zs7sJ}R&mb8U+Al2NE1v{)#@I5-z3)9AJMKPmUMrfGlBjA zRz4$pPBuxBxcJ-<4J)enAt7T%K;x<$rr;(&O&(q3n4d;9%S0b~A&$8GdKIcKoz&c| zdYqtofT!2_0b|H)a+X_ET+Iv?oUB8J0vc-`P`$7LwJvsoG^K#kmHZtq%nAoie_`W& z?yyxL8z;mK0lKg~fR~6b9KUKj8W`?3G8>FRN*N`t$ZosU)hZzRXZ8B88m^z1!=wVt zkDNb7{9C8b>oJ1bfXJ8{B3ju?5^VuWZRm3zs`o$;NifS_puZkUnbRYG@o9_=LG>QE zWCzy_?J0x$Z>u@}AXnTma&Y%1z+Uj`GpVS9Pb~-xd$T{&WuG?Mm}pdD32$v#}kUA5$ftL*4$?D6!MCJnv8pEBW+T|6b~+Guwb2$}Jl z*~XjUJuf!fwOt|0ZoQ17sqg`Wr~XG|l(fC3hk=4yUYo5L*@2j_Q%>N=pyQ_cCso!T zBZ2iwjdQ<2Bov4K9d~jfe+0oXEqlCz7HU^-%;9`4eyB7rf7|E?wGR~YYE`8N90+|- z^WZOm@k3hdyq?E`^|9>zNl_FGD~c-&d9T*_Ul>nsT%+6w_?}`o!B#3yY+_`xnWgng z=2f*TLvNu+Mg_c*y!=4Po!GT!U5mO(6FUALDrvg65bDzUN4M422M7cSC9R^wqPnDD z%BU8+^2AJ$sCGCkkkuNkL~|q$##dsP@z`<;@ei)i6=;usZ=W=wV1_Nsc8ED*<{Wo7 z#IK5@vRzg$McI4I8_%P zHBgl!Si=M$R*n21kzgvF8*<3mc_~~a`Xd}`X-GBdr6PKaA4v_St=FH96YP<1^moGZ z9fL`gO90xPMq;3@^<%-^ZA7whejv1fThxxF5@)3PB%`zt|7gCNp6Is#MA(A!Sm}YY zSnr4P{xmpBp4mbFev7oP2H~qo_;jyBfZvQ@ww^ZnI_G;tTMsWtPkmsJ{hGl&^Tw^I zPr46Iq#OsHFnYbW@3*`N84m~p{CLNw#Zx41qlRve)F}{_5T<9L>Kr4b93Sj%UADgl z3peo0+@+jij|2CR?eH(RO3tEs_716CBg{!HD?Xt#Bl zbQ%%*j>%4f4i{(G&-$YQyB=z9=APS&~?8KPh8&^@K6$wuD6hd zTjnpGU`1fsF;Xx;aRSI0=SSUdU?A3?%jH3{xB$a7NOd@1eBenuJslaEL|&T+wHH1| z>SyS`)K`OKw}no^E$n!a+U-xx7g0pRF(!55aWuS;ppx5yIM+_ba?XrAtyBR60X!W) z#;1k|gx9totXpfS936oRHSf&g1RMYH3tlx zXxF|D#QRo1 z-%X&PfNd@T$7~GF=?MJ80pyzl*yn%N|MxQYn=&OU48*_Qbs10Q62J{lno{QCa}3FC zOeT}(j(}rhVR!Jr{pAP%H#+MKDWRRUcdUSg9r z`JtNS%U`!COBb~`A*f0NxaW_-uYJfZ0Zrg>$E1i%-X(88F2%0&ae=JI|IbVQsfeEYW5Isn{C30B%Tx%bZYqMS{EBZu1X!OT6KP;XpO+>9wZc+ z0*n3o-QRS0V(6#{c_2@)cC9y<CmCRvkSXVu3i0+)rQG_{kiOtWBFE&d#bm%PvfQ{wso zEV~kq2)TCJ&6 zY55Zz;OxeJ5>k=`)<#~uX!mDE;>eR78Xqde<{9V?gQA<9wo;M!AHcn9Z4b5t$Y2V z`%N38)n!KKb5b>;;rd=Y%rb@bmyivT3aklmiI)iWWRqB#WC3<)qDPDC&<0!z_#PlVITXdTsB3wy+)0MjsGS-yw@e$u@z^;tz`J zom?h-{XED$Rc^-f(igB1$<)!a?>mrRCwbom?qG0sntHaa<~IaSQ+$v(t^&U|Drpka z(E8KF?D=Y?F$oMua$`0b*SiJ~_8g-Yi8kGw&4=-_u*6kU7pfH`;#&9Lu!X(V3gh5I zpY3~rT!H@#EqyntgWQ`&*B!_m&oei^&ps17j8%Au?0bejT?}Cq2MnPo`#6Slv${@M zc+Q~e@4KV0&T9mDd)$K^^p39~Q;$T2@b1r4GdaC~J3*G_zVO6yG|f>ieFA^^qMlN| z^9tl{@P7tQi^bxza=Hp{0&s8$!}(z3K=|~4zb4`bm`yt1m*yU6+Rr$!w*O>owcxGS z+EE)C#Bo1CSH!;J>wd?Tx>P$@8c4}wu1QA6P?YEiKa)R6g}wp$cZQ)Uo@Nr6bOUP! zKIXGnYUsB@IgXz?IIyojZ6`iUOG9@!1VyaJ#b(aYQ1}-XYY4Yt4u%2Qh3{v!f zjzKFqxzG4{{Vk{PH8+SaW0diCQd%7Hgs#^6gmF6nhKrp+gZ3z4Vb9{gV#R$LXB7Y>;~;_oQ@-TZm{;Pu+u(P^DRrJyE<6y1{4(%iqcC zalz@c!gTxc4GXgndkhbfm?jK!C|r;qu>aWt8xv5N1t5O>5P|uh!TA4zvG$1mxt#v9 z15VW=0#z-XQC85thT~J~c-e)AK@2jA0(045Y$ZTY{Of{{?t+c2ttItoqk;s*g|U&u z*Nb7NmXqnvOxKYm7usbcU{NQ?ZPnWa6N+V?yDa99GP4&1KC^yH-7N5qG2<7N%(vNX z>umcxZ+Y!>-5h;)+G7dAewm7(i2?xSb?6H0z|tiE78+86A--rOU~Oj9As9c_KGp{X z`Im&aq_~8*6elea2@#D@LTrLPp#Qfj?hq6C8{@)lXrNm|)b>E|v*sP;HpTv@D(wK2 z<*g8IO<%|@=Eji&J8xfMw()=xG5_S`YbaX9odP>g-zb66x`6Ev#jON8FWtUUv6$T! zu-znxAjcG&-)M;2J9$br^aWRoc{n(Mn16;-Pd|Ns>4jL9>7FIhbv>M64=#gmz+4Yq zzRH++yza}$LPbzXjT+_e%?!RQK9^d?WXRR(1**s*3#a3(%1Tb;w3>1 zTTCYg4X5Yt#$$GY86||1MDQx@{Yp|c=`f<*Xl-su5K2-1P3Bxu$HQUxVXbM-I=90= z*mIgXP7=i3)V;EKv_l-4^3;ZzvZ4=9%FNg+;yFJ;7F7BKk+*7$Cjdv6l}Sl*?1Tk) zdMLB{qbYYTyc7pGoHPd>-U-@3doM%lu_#62(HHdTG0qrR=I*EnP}-|59n+|hpoKw=gUO_@uKp6h@)vuqm!S6iWpkQ9_p6}p`_N1H3GO3)i=<{dD z8E1oUSUghGC~+xFVN_Tth>3Tg_=PX@YRq--t`nz1HIe+6h)i?`Jnjm>-un&Y3VRt1 zQ-}gf#R#jBR5yC1)7#P9Vu5GcgK{UB=#s52brpsak$7mlY{gjVA5pV+ZHrGJ%q(_|Q+06*A_GEX z`dA_J*AE;Gp$Ub1JVmbdVJvT}E+Tqg*8F0&&)fK9>fwsukJ+MVOTHl6dGk}Su3{yc zuuC-(C>L6s`3cKJw(@YaREUH(B%CD5Fm_J(@$K8oH)f>=2wK7mn3q5CVGW`p5_6Z% zQ#QyV{CL&mN{Wm?ilA|97?ninHQ5O2aFqmjJnEvHHWB10kG4wkVD^+vfd%8*n4QqS9rv+hI&<7fs1=YTv#ZYAE0e`%zX z2Y>S&IZKlC^f{`iX_#SD`V#T4*(1>5n*d3uYWIFknW<#pbAd>(r$#p5s|JrIHsoa9 z3}62;@Tlo6HvS1i(^iikTZ+Z+4qa*?-)TOFW5GwY3GgEri3jYVAj&kK@lR_X0)5 zKIdkM{WsV;gM!GFNhU>3h@R5+Uw>?>|Dufgqtn~{i1{h$s!(lQZVaJ_z5lLj6Qb%)RAUhgo-Y5gtgRqoXk`BileSU|p#TkXd+iXRcm=6K%Lr85i>LY&6)c8ZjH5*52#&qv74JMQO zCT%2e=S_|2r6x(lmk&e)JpjA_oXh_JTn;6ZNZ-RfX;&o&|KX_p)rg;O8`o#NWF(~^ z=HhA1r@AQ+O4ENdkGLjA0P z1KDM^e~ZPV}ddsrCg*mg^PiF0A<>lXKePww?ILMRZh0|n#O zICNm+nhK$WKZOGbamS1Qo!PG#as+v3L5q_>b%qT@p-wrfM>N=CnpWjF& zaHC0*D>qWVY71^MQr~L}Z`!h*A-x9T1!Q5Jk#WM$Nk2|HFFQ9EHYUH?6@~Uqp#nrV zgNUmC8i+$+TpukT-c2Xey3csn=`XP^!%wkil22Nz#%Ph(b$5)e>Q`_@ox_^riP6bb z@UlO-*BEAn%%Ab!NYhprWcQTwQyQlJ?2vM;JTcP}#o?&sv&kwksLJjqSIsn?L1R5~ z_>RPfE)G(L*dDt5=Z&l=qhPCq4}Ei(zSFI3S)|a`?yZJBta~+{Gay?+S6*XpaIHsx z(QA&4H0qL~ru~bGGYkALGlz#=G(zh?7|B3PHHXH%yx_9B?)W|Rb(_RSvs<^gz9YTi7;-Fdr~f`_T)OcjX!;VnDD3D*_^j{ z+4XHD690Y30ZYDwjubNJl@!AY>Qnc-Q;%=X{JT@3*JIpf;ox)w{6_%(!vH~`$F0H^#>GL?ijw~!EQVT17MNfF?cseHyRY%A9j2pW z>T5%;UNC_Iwj(5y9@!;3yJreeGG=Spak?yrcz2H*IU97FTC5;-38*Nn(_xCY+Q zSu?C>E#6Odxt@WA6L(F+^8n2+ zc>18t9ydY8a@L17%NGJs**7UItgpgKkmI{y?oE%LBS|JsPv+O#jz)IB+oszNSWOg5 zko%-9zl=S3nKDMn=NG~X|T21?y_y$wr$(C)n$EU+qR7^+qUg4 z+rD+q{RbBjIm?KgyzgLV?q{z>c26!xb~k2;-A%k(P5{n)dg`v%E1JWHF*6(vV2(E} z=xt_N^4Ol8N$Sf%y+MIYaN@|xDBaqw2+0IyWOD%+amg!s%L(HE#G6%llS7VgbzuRq z=pb37e__A#_Pk!i{r`=x!cEO6(Xe)g0SYc6aj-DwZf0Kivh@dgcJ*05etnnhg}R6T zVMd5%{I~{U^)Czg7D&hg$6vewB@x~xlZU=dez ziOB2~`OzY+=~N<1sx&k`?X-b z_G7@&f3f#}t8ssNF`;72-0_ha_-2q=P+U8_MdqT5jtb%I)E)TVAHk{t?6rqr!*ory zs$-1*cn42a*Xcm^L}2C743|V`^=3t~>n!`H69YA~UKo=lmcpW@6njOw$XM#7kYWF( zr$n>u&5I;DYz$h-Rw3fS-g6X(o6Qx3H&s<6m$KE%AzzB1;ua_)pNpo-I$IkBu9k(% z8a0wNhiS9yq4H*&pz_HA9w2+jnj?HOS4+aRhy2LwjE!3kKr>r)k+}ymSvrL;76&tj za6$I|l7S8V^pyTt#PiUA5DGzoT z)(oz*Jn~ZQHI1lIsGr%Vb5e>1QO3&ZgxjzsUc%o_(i-w*%jd`d%8sfRnNpjWe-I1Q zPYVm-ZJjEI97C#{I5Q)ln-kV?UKDdhw6xSIEnZxSe95E#j4`doMMrFI=~C63c4`X# z30#upa?pCU&vYnZS2lOh@v)~$%-lpH>P!pO{Bg{ z-(Oojgm@g>Z_il<5UYeEeu`N?K2>38Mstj`36NSVGr3VzYh6cen}gD9=M*N9LSin# zNntgzbR$h7E+({%evFkH{c$};dKHM-OrIE87|Pj5n*^1QyRj?`T}dn@ABfkm09a%> z)5O|HlAT&e{Od=_r6G;nl!F*g7l~?+BwE+hqv64d7zQc?fRo1t8G}C@9nRHDgi%?y z0p0s5)o0ZAO^&s>v!zcIJ!U4*MHZwVEGm} zCMC#&?L5r^nH5wYSS{rbsK+za)S7kksInn#so42v-c&in>3H|shQa?3R0Wm45Q#j= zvSV}cCX|p7liDlSyh4Ew`hZbt_h!3)ZCL^7PRLS8OQlZ;k2&*riIG||p^us!45_j) zrbft<6V-n2CL`|6OU{@zEDWiue9AD13(bfm!jn7z`k^PFic9sW=qkGxv`G=bvZJoN zFOA2@RY0w3*}Ye+C96vs`qek{18#M?oyGi(?GF`SJnF=F^r@JO zW$w#f;Dd?%Z^Ms*4QDit=R5VMa8@L^vAs>38B4OaK?Z5GyUm(783` z@Wi(O?5Gh1rXoi6y73YP4If4D$|C!(GARj`f7X0*VsfSM%p<(t&|hD=7ufM84;Qsq*Qv2_C~UcaDbPq`gCG z_D|0;Qg7A!I)9&Ew7r(|tbq8FA1l8e>YPOZdZ(#My5$be%@RrzHg&|lcAnIeHw2sx zuggchsYKJ2*sE)2W%+xodw+;Tjxzq<;0!XZ4to%o|jQ*3lQ&`8X&CAXwX(2y?~gPH;l!2S<#cQ*l3zw z*)U>0b@)QG_~*6{5JvuLvm-Hl!w)3nL<|5VGYMlC=_FhDDZL?=OOzL@ER?bnDx`j+ zNzia)3HC|Dp0BuZmo+`;F&Gb9r>qb-1eVUyAiy;O;nPMH(F?8V0e_G@DohmcK}ViD z+Awfd-^?%Nd6Yk+HMCzzPe~s+Mb#Ia^TUCRZe&?sOzrx1Ir=nDe$G|j{_ei}icNaf zkKaaj?b#4EXEFViyLxS>HVUNW41&LLtw$YReI&AF#Vd?AB*qVnckWl)^;r%2_Y_+u z^!178>ak-*vL)ty>k^4;*Ub$eVG+BtMVWu;`|Jt%__n2sbavO#;SyhBqp*)&-VC+s z5G>8t3dIVDxD08q7+3!-{c4v2GQpoQ)S8Kn9~(L zr|SW`DbCPCrC;MH=gtGlBUZ(~Bp;pTUeOtCZQ2T2Xduz+9&xx#i=35Oej{7@bLeK$ z^;bZjmO?H2+eY4?Fcw4kZaN%mu{5x6jQyAaYD0@o?zjq_|}` z-yVzA_JD}RO6B5Ov1m!n&ZW!qcG=!5iJY7ShcN-Yy2s_(jqyc(LzeBM?bxQQ@0vRC zv)I-stVnEb&H*s|48b=YOG@fp&7&$~XZ>D0HQ8Ko2F-$3w39~-UmUZJAnrm`bB03NANzA= zaG$8~9uePcM}wtUZV|Iwiuo!VuYzu@%EL_9SG-e1?7FB8OIzf0-LTtlFM0xpX@-GK z@65=_PJqLxoQ_puN1dfM;J5}GVV^6cOmq3c*~a$dGAwgtVqjJmVQfXQOY_fs_D^DS=v^8n)RYPh>$m*Jrk-)wQb!Y z%7iJ|-nbqXB>GCLUt8AwXvHuwH-s{o`kG8A6oBT?aTuYH^3X;$WBg}liAj#ybiA8F z(Z2CP?1$xRN*5j{DPGnN*WN!#DwMia7q#jSN^C?oHHhe&Yx%63dW-CdrJ>6AN^e{w zlY?a6R_-3D+1Vu2IYh2m^g<1))gRB3RbTi%r213)9sHCk z9WX-qnD)lt^J+ErUQ?h(6MyRUKz$4X8|v8=b$(6!YMaL>TBzvLrn^&GGdjQmW-)n| z4vSM^#GJMAjqe(ZTK#^e8?*74;CvZRY|e%< zO#X(#xq25vKMh?)<@o%-zV8mJ_i(a&m0vfr(6g4_n85hE2lJ`jwZ6BxU$n#ajsIVv zwFA_nnJL__U!w&7?;SPOFc|TFzsp~YVFHd&zX6A2>_O15u>#6?#jeY70*adoec&i{ zC4~ye6hh|K1n5}O$TC8f65zb@o>p$J}vE2^efxoZ@IoUKEGf``2hD61?-0D?fQU!vUe} z6YkJ6_D%V?_Ko?V_Q!j;oj#>e8@3d^wroW1=*nAt8*bXScsV=PL+@4YJ*fC~dx0+q zfqaum$Z9wS_4s>xg>2q1;HKW2AxmkK1KAu&q4K+llb6ao-de*bGj5EJ=I*VTYg+^D zcxHp6?8Ze>yW7 z4Vk-p!@x~=M(-gp$=5a|@!)Q6;-csqE)#jY!;5()2U2Z0f)|*&`vdUm_Y`@^4k~HR zt=YVBcXpT9J=~+#d?Q2cp(W}iSm<^yqC~{c+=lHiVBwbEAs4aW-o%B4tpJSzb~3oo zBEYv2DtTr1Z@oDJpB4l>O4qUC!h48Bqwpey{yvxf?s?`rX;cdF(=>8<8a~v@3@M}4 zXWR8qLU{G&}h4Fqi8%80U~MF@Opb8Y!VWZVwd$QHp=+;-T8&Vg+Xs1agaH>QlcgnG1$L z)!m?yTCGx;OJztm0zz;VKnbd5VTX zo=guD;O-I0U5r_n_?9oWQb6P3@L*w=^+hM96==436cSNM54eFM@&Op)(SJ3+@tY)} zWv0|BsP8g72iy&k;A)*riAi=+Vq!tZmZ15_TWnyXViK`4nIdI4>%DF~T`0D78gWEW z#fC&BWgVr#m@RHpAy!ky1xqW*tkI~rf$Le6NSjYgTpKAioB|JwlcGq}`&@bG2&_w(4aado z`3GiDd7||xUPygKt^U4wSATMAvD=yS){cclcVBJOa<8{{tZR8uh-GrGcU9{G4N=xh z#{NXt0(SP@pnPNF0{C~$xD;^1Vsx5i`{<&mR-@~p_^DoyzW_7}T_pK`mwPdfU@P|A zDY|2MZ(&SR1I%x;qIxJ^sJ}{fuU|p~0Q;{)b`q?xpyoI9pvJ9&eLP|)SwqlJdLWdH z0)fB!f_lSx$4!rY;;~)OHbmh>X}sQzpb`VDXKNuO(@YH&gJ`NEMoovUnTN%>vmR0c zF!m$r>aUI6)ENc-an?mJHl)0K-C`t0O z-m{{&OI|PN{pQ4*a{xNmp|4b&MNE)LCD4cQ)DNrldeplf)7nnQY9nPT+3^l|r~?@u zUUX2%+gxhS(xO-8Qa&GdP&Or}msJ*z79*Z}gTrf6k5%@$RExd@rMs5Cf5bfW3SF#k zz4Eckji}fdn z=VAi2GH|4p*fRIbuz0Wbw+OR$7_X30pSpXu|1Cd!B$^15a%8ZsOKA{UB1ttNl`^x| zc|)Z&>^Ns#%7AhXi>+?y0L|O%s?1pCnMG9|Fb{xlh(#MBN%M9;3Ngx#7xc+Sk09+p zGuL3-yEt%CM=Mh67)mq>Vicp# zDTi9C8_pyuzEVkiPfU?nqlsGA`)&r)&?k7~SbzMTd$} z#wBGe^0S7yweqr5b@7+q=cMM-bYc1=rKX4gsnTb2qcC}XT`Lye=7e?QkDBDCwmUd; z)V)yV_AQEHCJDCWr=E9zOG+6+4M)V5sQ@c&y8~dX$OgKMIQi1^k9pU!B&b3E@?>S<56jW7Bg9quI21Y|EopGMH z6UAJY)@&zN7AZK3B82N!Ec@S|q>avo%+YMNlFTefeVV|k+T>d5wbX58vjKLA^|TcW zwhYZ=Za|fChPJwjoPzIX&Mlr)MdwImvjk7p=?!-An!#~11woTY<_aph3JP^G2oLxD zbrQuYhbB)*?2V<(^OTUvK*_QV%6y=e$~mIR3*K1cIBL%`dF^8tEFISa88{D1+o69z zD7rzl`fFTPaJzFTTY%9g}E!@n; z80lBua#`Sz2wEuw0L@wlfzcoYRSH_)@r z6|asuSx<%yD#4c*t9m99r=Ihj5pJ~r@|}^?`MY+R-ZzA7VNT6E;y6Y^mv4$pn@L`u zlaiwKMn>5^Vpu?GIszz0cBq5<%S`@KN2BPN36}{+{y28L`mDrnng7>#m*WXTi$}7r zW!5{@ObjR$mq1QjWPXaB&hbz2Z)~=PqdT&(MGM!oXlF+*QlCo(c7zt{kM}8*$I|r7 zEqU7oN>0+456hJOr1la8BNRA9w9ld+R|93p%ZRG@X#79 ztreKo%#6XR0dJs^SFSQ=B%8dxjdI1(_21oZ*Bh?e2>5@{Y6e(~lsK0vZs z22+JJ0&L495pudGgk$SO{xu~!xCz!dqHaLiF(=xAdg_4FGh!mt!^rx6C$udT`3MKe zN6pm-iH>Q4W15K8_>>$$;$R=V^OFJ_#QRnmo>(L<0J0rhLg#ENMgtX|PM ztTSfeBS%7dHz>5Si-}lFVX&or-+5G{sLBv0i}og-CnFB4`%VVRmc=ghCi9JQu-h3E z6i+*XCk<5^FXf+V1g%6okT2N(9|vKn}*(yNm2qV0U?QWQU*dq6f!J`#E1Yg4U#}3QkbdNf+?ICnb5YWNtV5%7Hjim zONq4_QOHk8aRbVwvbwr@tEt&aTl1~rObgfgyUP{Ois-ZX(pLV@EFZYU81@;>(Y_wn`j!VT=Q{5n5O+T9z8U09_&*^# zx_z^9TsQ=V)>>`c1=GIBlt%*$5L+P?>0H&h{> z^z7QIo$J4kjpH(H*)9(4Qv*TZ9qqXXE)0^gH-l{5qk-{yt!-DQ4)DOm>Q+L0U|h2! z6v0^xC&L|eW?`NuT6Pj8WcTqO7LDEZ-Z;JV_&!v`^II$JN`ii z)*tPH=e{KdaE$iiAANd99rI0(zkn3_%=@z+l(xRI(0dR2=MK%R-Q0J6)89;@+rE%u z`>uuP8Ut#cK;cgv5kBA26??} zM0~k_}u!xS+H>UDL9%++dGR-O|QCa>26qMxIT*t*K4%0&(Cgb?I3H4&CYG>#((8B z8^}ux;m>m*T%Df7-C_t@$B6s@3$F}l&>{#Y+2`A%_+XZ>qCnh&3jQd$i@0d1bF>oA zV@LiF7isr2a12urTexLj`c|ix4fOTPB7Z{wMvQycFrq>NH`;}9yH-Mo2HS4NQ>+74 zz^&T@<8fL2-G3N%eGQ= zcbSgu^|cNB@cW_wgG&@BLdqzoGc73RE0{-+@LX0hPlzj<`PBoO`WlWD`vSxYSuj!SWyEeeh%|W}B8wVc&TQ^uCM>|tH2n=Eh!wh&DlISlD z-Wgf#1)R(9ifu=TmKgDBLdE1LOwj%WQa=mE$7&8vqJ0T;3L=FOwo#sOyTv9T2M@&b z6ohFYFKBXO!^cO0d=qaSFQP$EV%wj^0~nHiw5W+|ePgGk>UA6kIiuFE2aCCs!GKIR#X^Oat*&k@D6!`Uj%6 zCzoJ?RD4HCQ4f(pGRHVO@}>)L7yHBtuFg2=V zEO8=1g^h-cHs$*(q>6}Ya6+2u{*83r9s)hLJJ^5y%DU2e?Ku)C4}-s>?Ta`Wmq_YgiuC}$cqHI0PTPTE7KGMPHf3c42d13JkO)YHlK#s6{aDE95=`fnYOz z&#E89M|QB=gZ!2+WM7&CJ-yagJis$nFKCjX_Q>!b)L*iJJN=bdJo1}2*BsJ;I|J4b zdHehQ+t zpC#-Uh`qw_gbYBr@~tItBrXG`vZO2mR&RzH?$=}QEAf(JfRDAe5`PFJ5 zp#(y2DOJy;t1OkIBzqg@n}k`Fp*~7CE(0i*5r(G9P^wWW8>f*iS2435 z=iJPyoSaK)OWIEM$Y8?PUrC}e^$#g?XB`^(GC97FPvz(-5Hyv15;nZEC zlSh-EKzLtMK#5L;ZaJ=G%63^%e>(pLON(3dET&7f}N$Qo`E_^ zTE(=uWbuF|;tx6UaPiR zZ3}b6>XW#6yNMwv*1_%K#EZDI&|DXLjDXm~0XEX7z#{MI~ZhcKOO z6iZ1#j;_(?u7FNYY*|WjT(p%8LOljqbO)FcL&)KOJR)Hv!}%kUD$;`*2^?SJD)`w@ zpdY*PJlyYyh$u((*38!8!cuLPnJSMa(o-nuC_@5=Sy;g-9WKd3p>W8rFAL0@OZNmlhw z%K5VjM#opC*EYasYQkqiI`#sE_7g2mGbUM`HjT-@mHb+8c&*tWsxb_)O;HY6&oITZ zf%lxEp^IH=$lAh-W}r7j9G2RAQ38Ozvw%&eANk-J*!t3#e++hP?M)!pqz}&-n*(ff zyDgHjEYaF4K!Uf~MTf-#huyN2&~k2XKHtKG*9SD*6!jNdVq~E?lvuYMVk>S-divj` z`S?mx0?t(*_FkU6?mKj%WUqS_{dC0|Gtbc7G7{$Q_lNU}OuC4P3a@|N)F2?4NJLz| z(tZA*{0*18fRHPVWbv#5=ap~7`HGo@KV?;w1aBR8#(fB;h}O(xM*yrOvY!qw24jHs z5|<-uD=sf{#KnQft_VB>VX%?8kb!r7E1x-C7OhCUuEx-dA_o*i>}_rA4M%h?LsXCK!8OM4PVti@2bnK6AKVV|PU+#Z<*N@^4(iVF z?)&~b&xe3FfTH_j;12qRxZuV3Y>F(y>-3rlzYc=u!jpf8Umi4khywDRv0GJPRDnok*)#*7#$Ya%G4#i@e%oPzq8i86}ADUXjC5oX)@?R07^*u1nw+i z2xKe8H4YShxCKp7A*b~kQy3`{QQazi$qOc=hJ*@rG$B*|Hl`VB}lPhCS<`KVYV>vXS%3L-Gm<<->2nWCVewASR<{C zN#8{lB3^8o7!9#xrB+|3MFwW@XisKQI}1Ab>x}Hh_47>zNQ~4P8}j9cvBAL%#q~c7 z$}GME26Kp#;%4>X$P{D9bQ_+kzgNLLZz&m8BZh#QG(&rpF-&ns7RpK}v}&3jKerdI zPQq94lZlVi^N(~JzBMzJ{0a{x_J}aIE`IGZbGF~<;#>DhG&BYoY@thU;4g(H4jNVm zaDjLB#rz#4p4B8+NGESAQULDY!M7E% z5K#bMIf0K7+^|6(BgI{@7!oOJ30z%H5VcOkzOmqU(&7SJd1+IKZ57jrSqzHTf0kXz z2MINIs{cx)f7I?g?GKG@?JPwz7bUT*`oNFXcZ$>pEe8K24KF>Dx3IvMlJ}mX*XHQ_HR0R zaEB3rh!2((2n`m5e^MJ!87Zrgmq%^`=Df{DUbfi-2OMzAh8PrTp$5>VZ=%L^0C$L* zTTcort55<7D*oE(@{ZSiVuvp?c+*$tGnUwY6*!@!SI{GSM03V*jv7(}vUs*QXJ=WU zLo=RPG)#!hxIw1E3Kn_=Qg~izl|Hj_4Pxo+6D9PtJHQ^E*ZYJVDmJ(QpCTL1Fk+k3 ztI)%H3A_wbT}n@(22F6fGjLW$fQgua3a*Y3->CWANVyuR+L4-LgEI#)F}dB*@FXne zF&3EfEm%p&k+UbApn`0g@JqO`XVx z3Q*sxB)o5YP7;6nQr5XDN2t8_h-ycy z(4MqLbL7gsW3Cx=LV88q{~SFBY{>JGlYuX}h34;LAZnQqN2m3ya88SF>7Ftf{ z4O%aO5~1_bD!2X0Y)rdy9`EQK2QY~-bTAGzt=D4nD$jY#~~ zpn{eU)FpK!%QFg?Cz}UE(4p}O$b{31DH$0mkjbLi_R!%~DE-t`zS3m-g6UyBdE`bq zFmL{zr81-JXONn+ML|*2C(@AkDFr@+{e2v5uEu_SZ07I zI3V$bB1=%S0U^ay87eHwt0`GvSB9@3;>=cZrGW{_q=szma;NBiJlXE4H85M=9~*Ul zuLv7(HKFa9G}!5A2Tt4sDh>_LyT!F!QvaUOd34$(b95Zuw##~sh8915T+Nnwy_aq9 zTTyJE9Add#W5_P!a*MxK{Rus-vc7GrIPv~Nn`efc3@CO1I^$q5%RBe4K&OiGMyRnw z6o=Mjn%4DLJ-6*OfTRNyvWl2yGmG~TwKH` zEV=>d0FZZ(DZs^@k7$vg7Sljk84pCTL{87Uuyat26f#T<`)Ywz)B9cC|KwqL)KQeo zP0&@>B{^Ips`cE(q()urqOQ^*+*xbr-n70|`RuE9d3B)YQc<;tj#uldFV5@6a(=e8 zbfvLgp^#?x7^~WGz>?t71BX8qlu9ORSUnTa1n6AfqDR$)>5aX=oPIS4!^6=r3*YT`br|w*4p_2EK zBS#%k{^Oj9g%SGf$e813Jw`tXjQyPnCi#rXD>%@#ZS26l#C|Ql3M>p+`j7!P0RGZ- z1PD?4Ms_$r(76QQ*x6K~ky{2|LwLva@~O~5)nu-2@$_tLV?%pP!2C%n;`Mo8p9MSNG@i&1-_>A;XiWaQmh05FC z6+5SctI^#=;3Nr6aC+-VE(?ye6ArcOn7d8(J~MOeq&^DuuwK9%%G1G<=QUAqGs=SfLstudJqYLK-?IQkD#>EWP2Z5TLa1#$806ub{*dJ}3 z>d?Q9K1CZ%pk;cbVgow zew?IwUyM}5au)PJ9D*4+&q8X`a5^R`?&2-UBxK?diGl}|EK5(~Uz$q>mAlj{DHR&) z{MG@=Wa$$~(tJjCH2V+WQU&MBrqn2l&WBPY#YA6=wyTAImTeNTHN@TY=*7~}S5E!=l zYN};w;kuvnF3Rz) zxV66$=U1q=@!(xi8=9m`iWEF$93GR0ml^}=Z3+UlL(1UO*fZ8PAkG=}Bkm9EPczETe zY7_d!LW)wav-@NyU=J=RGjexYFUJBQ^0=tvdEU7^Ic>{{e6kQ8Sk=Vnh?LBEwZpy( z_u?Uc!oK{`aKO-Vh94Hai~~KphOIUjP8Z)688}=$V>Uw zdf#X;L{-u}zoUHiEoLS3EywA z!AF5Kp~A+~V2Lp5E3WkPr}5M3mc^7)M?ihf&F}MHo`&M?FFweF-tUgX#1|y@FZBO3 zr;-d;v$(NPe*OBn>ikmpzj+t`NtHGBTmc3aUc7@{x*SY zG~|~=ETL(6wLEoS__Q>C!YjUQ+ncd>n5>)~H@-gMeE(MJlybI^k;7 zExo7*><;!|C!dB9wu9J19S~Y7Erzty4y&oIdN(u{H_{K$$b7-!uT2y&Q@qJ*uZ&hZ zP&TXgi8{6Wyi|0eo-0f?vM0Ua;jfi%d~^8oj5x1MH#zLDl>s+`&ELXMe3QMg6s@_B z_(pj+eB%R#!#*;7z*Osow>OS>e2UTGRyIb$aQ9z{GVkS9-Wj6&qnR@|XN^F8HQUoM zKbayTN`(bWZB6l(EMHz$s~3t*RUoVJO=BC(&N&Px5UY;MNr{Q83)%9$z7#v5zlmY2 zC8k{GAPMzGHh`5c=iyN^*$pdzIEnUa*~^TBh6e%n4Qgf)KF@G?ZJv8rYPj{WaUOQ zgg43(7NFlxjHMTO&dL*keAo~&a$^b`djJWlKX;>=wdepv&f*QLzj8w&{Q_1(F^$z7 zZcq8r9CBS(cfIe0)g6mZ;Vv}*pS~ylQXi7bup+OyKcg`+a|;dI1Cp%pvgvN|g6d0K zS2l_q8e3x;XnC3rjO`+Bo>0pA5mNk(Mh=3O0*DTmA%N`}xaNcb%-)E{4CSU7I=&Ls zi=Ut<$$Xk~g+~Mrf~+V}CX=ovm_6vbzf^_@!dSjwf6*xbY6`K%+!SvuU%kCnT-=J*W-Z!!_88k0<_}%-jCc7l zP@ivKF}B&6T+O;Y_2=U;ms>tS(jDeQfa*W&^|0~k7f#%%{G_Glz5_N^v1Q#5h9*p| zCB>2AP@Q|z(avx~o10`EPw<$QBhlSvW?M=QtfD;D>?B@X&9IZJ8yp(}m~2SOBXx3^ z(#+P{4PJ@R9(y_Lfu1QYC==@^{+eQ#46KA~tLvubA$PJZDedN^IWA@m5(dZ80Lwwt z0?l$&r8tekY$=cOwxYk4o+GIvEvc??f9ek7(n-&w^#;a&X#Qe!%L+o|;xydG&QhtL zjOm%Iq~?SSr4)%}V&Ub)+IJ>-+x)}K;IR;9$8@-XUUJ@T;L0Ja`xhx5Qq_Mf+aSnj z$47ME5I~Qu?lvY}w^*za;0B!D02i0bcoW;^wo@1b+b#-w=mk&`TN}^^o5v0_5b3oM8M*4n~uS)59 z0&3BdY!M&6&+&0(4|UXDpWu(q>vbVB;f0|&Q+wOkmpDn&=)G#(&Cni<0Qs^2T9@Kr zqTJ|*H(gPH=cW-M8zH2B<_&K5VPSVONE((nG>1dNmMVC& zFl^k47V)=isYNTCqUvN0Fc5Z&qo|fM=&?;z-^q9u3r5t3Q?UUAj>_oxRBo{whO#VP z2(^RxB67jPN&M1v7=exzQ1q)c@Gz*q`k5F-UPh3Y=uh*j8!47!UL zF|8J56lH@oK*FzD^(19LB*zg-+}-Nfd!&v7P)65hJ1iyr2r!4NYm9413>GM>>J zLBu+-=_1%?^9FQQWUZ{Z1;Q2b<`Qjqi4cG+!4|TDm(UGHS&dERz!wo)>uP}2vx5GfB+O%VnRHjJ$1f;Lml2()L;io zZz7s!S+v0W(We#_{Ya|qlnbqd6qqDzawo7?G8L5%GiP@HvYQz zHVR?POnQ&ZXKLv*$&CfqLdKRa6kV zgCQaU;8sM=GQH1(JyVdV6bO(Xf)8#}e%)_AMlMI1&J_IV3t(2cD^*0+qn|cNSFl=9 ze&z|}!opM{U!IWL^izn(KP)3GtV#Cqo-b99 z1$PN{6U7zRZt+t4yUr8s+U~dVz@m&+14};zFx>i3|EJEKK{>R1HA-%*+!(3PA2`zz z1y^GIC_hOTFZ7bc@0ji(&&+Nu$6PI~0oe zgo5+1P<<lWC3BA4C*k822~Er(kQ1nx#*hIL@*l)-n!#D10WfF+f+4iRK6OK@C#mgeJX=>H znJe6nuh!PWSc!q;FNv)7yw}E-UCVP@*M@D!mg@xS*Y(t-n?wrC;q%UCbz!=F47>ey zr^kKFE8ktRx;_W&uci-C{+HDzK7c!P$22&pO+9>$$%?Wouxjc_)igYpc15G9ivHDz z4QR66LqoE!+Kk$(!$w%BI!5dw5M}7^Qf?EO?|0ld!5C6U@zWO)AFCb5R_n_mVuR^d^RidSrnkiTe^A(>BX?I4LazmdHBm9he-#3tzForUn5 zW9ku7s~73aJ>&*&ZjHSBNO|#&#;)8@<@%(3 zlE!|Lzf=2vpql~;FRmA#c0iutGY)8yrxj0mOwr3c;~N^eyq4hg%~GA=d|#-n2cnpR z_Oh5#W34x%TU$pOoqmV$;|#lucjhGHC&|Js>1qgd3kznaJ!9o85MLm5ad{OTFX~) z$8*gRXG)(xN5cveF3)38tdUu2zQ zY%V~XhEMJG)V6Kg#;I-FZr|FrZQHhO+qO>6_S!?zIj<2!WXAUkd#7DeRj*fbJd%B>ciOM5xeRq9^t%$~Ajue@vTYmILl@mUQ zotk$ZbNZS;NX5d5of@_I1QP}V1YKFJmt9uLfavrr7fWlLL+{KZhKz%upj;W8#iiNr zi8FxZ+2y&oDeN2{1h*Tq6W0gZ({MCw* z{93EYaI4MN9gXZdBO1}HqHK4}V~&n~V{DF4;UAMKIoKkk?rchkj9)IzLyFm*)neJ$ zT(helKowXQHe0cS;5bGim0PIdRzSAF*2>ro_fqY9pvbC5tWuLZ?rJN`XI%=XqFey_ z6^~!BhUg0+E35wkAKT@=s50 zqiWCB=hsLZSmcz7rPYPC-Q+9VxZ+fg5HG_YxLLyeH^j*&JVk1y$}I&5ew$f!Zj{mH zJW6d#EE_EHN%F?4*;!-&6ytmr3`hm3VO+w7sn-2tmoyTaT-``FQajg z1qx%V&q-op?O`@L6D`;`!mqI(jxoGH(7T~u`W+=Olp=GYG~Z%oLW&b(^nrz z(jy0`HWC<@-2Qq~?r&-V809Rjo)dYkWVmQkbP<$4oE z4)=!rwY|rFM+#nhC`~C`8_M2XIMmYOl1IGSQQyA4H@SaXrl-ck8-h)VCGA=9`$=&5!N^VuGT7d@ zzPYjwQ<~$_njY8!0kx;>*xn$SRt)rym^86W{H9&mMJ0iDENPh@usu+MZ>CibtBgW$ifnMJ8CUZX=&c2X)*1w=C}Ly-KIN?Hn{$aI#?~fXdmuzh88L2;r^ZUko4DPVBwd}}1rufHOr5N{B0Y{B{WRCs3F zu-}9mjlZKQ0Q$k^mW^rB7gS7dq3_}pox6Jocd=Msg5PmJo{ZmE;(`2A_>6CbUq3rN z7&M=P`(`|NKKz1e$^Zu>@SEHXdV^M%_2-`8v%itYQGCNnjw`cG?}@*W!+ld4#v0t2 zNmfTa6oLa{02_OwWzJc#m{kEJ&SaS;b?eqK{ql1F6!LOSD1gB8q5fG0@0rVIV?O(UVQW*i@ct5a}po3Gx(_m%8-)ax?S;^1aPRMN7-ch}UxQeELvCEgX6LMiJV{ zuskg)QfhRNilEvE#Nt^}16Se|Ybj;za#LCy4kQ$Vjw92I*QbCWcMIH&UaaBF-TmW( zRJ4lH=lI?jNn=xjQ&iK-QwgJ>>_P~(baWVCBuDNL2+Y0=p@>3ITji$ark&v$k@1Jt zgk{1U3v)9vb}a@pcuQh~il^{M2{CF=Z<2je#5qPrcJ$;aY0(R%tM~r-lHFR3hIX1V zJ%_`exVGd3_PSN7Rm)IqA;6Zrp$RgR*}Jb{qGBsEk?v5V(0Z#&E(u}_0zKsZ;R6By zH5N%MsJfR;KXxuV{5tv8$@SVSk}|e|e0dw2c#Bh>623*FecGMZ42SIp}=1WplQ53f_55kDiT zk#YVF4d-z?(_>ufp>z;4>7*^UHDmGsg@4{E`;3jXvSPQ^)8Qcdcf{0LfO@31$AEod zEj>Y1GejSLIrIY>vyH2V8Z%aj0PQjvQPtaph;nLRNgI|l{*JIlMCyR@w^1+vwo3Aa zP$@!k$_NE}^Uq<+s;AFE7Dp=$3AlAAD5Vr^+ADj5furZ3DNB*or{^KEMXW55ehZI6 z{m}`ZOB^|(imQmHQiGj5zoNhT2EtQ`;iuZIz$N!M7Y0ii=X|2XJ{!BS5$Hv{yQ5hZ zvv0Z<%4AZK3fpnR#z9Ux?6@VsWDT52);q(3TEyoX1qE8y;g)0`wndk=o%5A$lB$bj zqLNWYFxBjf<1{Az4ar_yN!rLu+-K60ha4Hc?d#kXsg-hjQuT~0gQO&3=$B=b2>L!b z3{{k{DaDNddw)Bledbvl<KYQt%v9FOj>hCCFX)Mnaol$qC8C?zqB# zTjthBee|qD@M*gNP2Wn`W@On5?|d0bmX7pF`>e@^zl4`8+c4MBiDFiN$*3L59Q&*N zv0=BAIkZj0^&rBJ#NW=eNy{m8PK05xDM`TDlBZ-?KXz)c#^ zt8enMs2BG8GBG?y{lRY`P-zj76Ijd9($&yMmWY#p{JOKMWODd#6}@7O@pHKUNRBV` zOF&HE(p)H2JN6|&X8}SlFrh3Z@vp9L04Y`FoB&dF8?BJ+t(?{Rrru*iW{XXCfr*^s z!+M0PoyYW}E~Z_lk)^*_7xzwJAS$wBS)t3oxa=XXqm?j@QJuS;nf9B5kbHWp_2BlG}mTp;sipuG%bqm>FCN{y?l>e{4Mp zaLhlTqtMdqUueGYZw~gj$-5c^Yw{>-(?5ukdSm~NPEIlIdpTVzFt}mgye{R7&U@UX@8u)Y-B44EfyNWulz+Eo3RAPZx z$-D-yX8mpeoUeVOJ-6Vk>!&55oR>R{qv*n~ROsjCF=#`vVv+2SLd}9OTn{B#u2hhDgmYPxCk=C%NCHIz^YeT6r4%G}S;Rq@v6WE9l?xf`QTz+K;^wBOHIG z$pA}gs&=1u1+^AM0rX004xVZV`a|BalAt|sH^&{fJvYS#?-zj0Bugj;<>mNE(w62K zOaB4L9)W^tEfLA)eBpf){HX`dL(lmIa9r?gt!j%IH11cn{0_otSBirY_-xR*%9t6oB4`h+NBa{;}<@!wvFk{Dz23KPvGDVi4)kFMZWicViR z8CQC2v$j1A^u=3&h$7%es1_W06@Nn*KG6V-nPwO@7#m|?zH|N278w2`7@Dd}K>7Ae z!CDksgU}0nb1`o@HCQ;?&w}!|fpBb8ku?QeaCE`E?SsJu#v5j^P4Bo6O_r;T_ePQq z!SG*XuuuH}-(dK5crhDDB(^qQD+KjFD1Zuw;>A~(u%jnrQ(+D2F_~Fut}jlCM)Ct- zgE6gM9mW!2(~$;?x*`|Y&KTAdFB-I&F|GMMFEU#DBWikH$o`Y=ml67&W=S>}Nanvu z#p}qV89D@cZumyT`>O)c(7xZnR>^r&^$r$&(iX_y;DA)frgp{qc3(&6nsvpd2hb^- zlI>;lE2uPfDhpnyWT6vzD|zT63K3#J9;3A_YctV-`!AZ|G2M|T++^R-bCq9seJtpc zb|Pt?bzO*yemG`i--K8Hls&af4TaMbH15n8eQ+1`>bgM};nG|+0%WO-B%6n=>cbez zs46f5?ejLMM5`20q%-S{zRRMGjv1PC@Wi84H1$)e7&EYl8Pzr)MXyH2f}BkN{dn2# zRfSq?G%THLv30!_Et=w+@+29@hkqc@3{p6^BWOryCYfF~n(F;2Qfje-@~*V4U1J0U zTC{Ubs01(IkZZiggSuUiU+B6Ub_`!a8P(YsW#%*KVHBrQbP1P-;N1E|~ySsRHPg#6q41SsT6qjP-6tA9Yf( z`dm>^m}9zqPfjxCaqH*|KE#vm+IX)g#)Z=M2G`b1p`%5&{a6}vVZBt<~%HEfDOGU$a4b=8eCOEG4Z@WAPp}b zTvbYOXo0_&h9`ifPAmmpY*=t;0lVN}&Y+y1N(51wyD%Nv9F$EY_@sYfqil{{T@w** zi$r==48+QW5(kcDToEA3QYV)}CJs`YNE%Ac0X}V}@5(Yqq)P3fpi{EV2VPxJe5RVf z1!{$?e@V+g3!~0*tvwZJfu0XK3&suM|5(L@^C0_>4lo_(cB2c(4TYKT?D0GOWrS4? za+=0${-M@Hy%?G=y21y+j$k-f=vgu;`v^biEy}0Z*+1_Ey#Z)V%iKggm&1#a;_}82AhE!x@awGDW4i-ioxrE*{N__Ix6Olq@ zEW0jOlSnqf@H9N?J$rFXI=-7r1vdy|F@;*1?l zHdmL5Te#*h+O_V7FA)m?AMq=}7XH^x1yZwY>sE%UYH2%KXW$J5^zrjTVJ!G|^Vzu3 zZ~6QFE(3~$8=o;^O<|1D+@Q_Nra)ViRr=saG`!K}AQr%o*gP67HQT_0Sen`l6F4{c zPb4mQ_Gq5f@2}y0C33>=f-7%$*MoKj@(M-5;In~oO;M=8)dH|l)KNoXh702hBR`Fma-2Y&z!ko}6_$>=&!}**0QmK!%=+st2HT+<#34orWZoFb_}xJgWrygaq`H6Y2i|=5+3j&#LBj3hl(}Mz=E2Ox}mS#Lxhh4ACsia%u*8Ek%vv za%UVtqlE%ZnSQP>r;t*O%Bk@*5i|(aCo(wd@HWg+-uN++=M`qPZ+WUso@e%(hxjTM zz8`RfE0ww^sD8;~MSnD~!#)NdY3Tx9PoCfF6VyElWGR=gV+uW;HDDq;Pe6amgh5uC zcKWOPa$-Csm1%uE1mNIzGQ^o9=gz^N-SQzYcSN9lS_aQig6+PUH{c1as3n8j0)bdH zRv(9nOfw`{`$yRW5=+G3o57Y}`!-MiHV%-)qq3daqw+a4fG^EI2sT*aClyU$i~gb| z5z`L@1CoLey$O$nJYhPiUuyh{4Ze>?-a%x9p?iwMyPVMnJ+aFHZntqI!nHi0V8aH3 zp%tp!Kjn8zG^Iavr<$aelA@G8SZX6mDOy>R)Jx<-Mkeu5eoSF zBopGEUa}luOml_y)`}2vc4!+W?c9{_%iJ_U%-l6(qeiGJ{L8UrqjUuBinnrLy`?z* zqstUyU(j=;%`~k!vu$doS5LNRrab|!-@@`3?g8)i(sb7HnhbkFOCF(U@h9Hg&>}Vy zh~4lc`T6#iTx*Iz+7R=B7br@kssmO48MNif$Oo3Q*JpXjc*f>8YHN{j{;$Av&qPb- zQ^CD)HkOnC+!_6e$DAHSM_n95N1OPviB^Iul$lkE zcc5cgYeCsy2#CYyiO!-+e=t7=yogWAM~qlmEmfh3Tr`_Vi<)EnHeEypU;(g-oK(S$ z!T~$Xke3BZI?>PU6D_THql!aK&?+ui$+>~8_#qExPWE#^@9+UbWS~niZ7~EEm3wSq z{hLctuyc>n>bku%PgZjx3#Bhqj-}KJ=q+C(#tTo2!gUKa;nk{}J)+!Tw_5`={hUCz zmZ?0+On8jPSlyB(Lg+4>WB{5ySn)vC$i*~^^u7$Zs|nB+Y+ZjV95~14n0eR04wp#+ zu}nV<+C+?N$03e6=;6k%gcLs6PSW+7C&?>#TAvIH(ys+~o6{;BZo1JoFVbuqP_*1`Wj7j@@@OnWj#5X z@Vx62zF3-i0$6qU(b2TNM%U5mJy|K3RC*Pn-lNmanu{&IiL{a7|NyPxL{2jApyGh+Hk z9R%`F`mMiKnEH;6XKex%WoVGfYnMBSk$fiXoEqn?)mdO7+2AA5nm@DDhrBVUG8rEW z4DRL?;koNJwL6!QV51~#^ssShI}|EnMCAL%%#WPzo&W^O; zXEbMLXaKZ2p-GKY+x^me?TxDDw7^P2RtE4~^(qa`uRKpJE_|gQOK0+m;ReXV^S^{V zwxguFJhn7lADZqDd(Y?jrwihl3-^_o&^@p*BaHB>2N*KhEEsSU%FzT}+E2v!#j#(j zhON^etA_G(Mww@$`!5o6fl`hcbCH$s{ak;{Q2_Vn&^GnlR2{tPM15S@7cRP&Su5{C zeAeag=Y+QyJi@n`K?pb8XM)Qgc?WdVje4Sk!UDPC<07>-Ja1pjCGwJO+TkOzOLqOo zAK+&@Q`1feNaBvo@TN9CG**{`8d~_%8=mPpdLT}8LO{g-f*KiKMb9G;ZxX$(+7BS$ z=>VocE;x9@g96$+mkOPTgz)i+_QrEO*ePnQEAZl~VQOK=v4g;sv=q%Q+1RQ65rju# z$p%(T_YwD*>#Jx#pD>D%!`p7iMT|%ZS^pxr28r#k0O>y`&Fi#5NJj?}PjyUPz$Q@pGqr`0=TZ8L(mJmM8>$bTdcD6Y`)t`P0R7d`P=V+y@ta{$Bb z;+HH|*nB5-i}1`oDDN+9O3@f4Sm&dtoQS+?r%)a_q4LZaL1I+6MhxJii>V>dW=9JM zLl@xrG6y&*+(}|@#mMavc!Bj7acCZRa^?!B@a@Abw1FVk||1eXn-^yAhLYp1#}TQy&R5OX1!oTF*n?1Axi+FtH4>;X#!rm9pQ()mipzm0+N5N^x5c(J5O(N{El9swf0Q5!3 z|2!9MO%W?63X}{>g}TwuiGKE?{6WJ@we4SyzxWH+i-bwp&yW)oOqr(XnPq{-6WjnC z)kI!$L(@V-!qEQ>b-^wunF8KY4!(qbydRi*-Um`XOj^6rDsA!WvnlL0RKSx%o4c;U;26zykWB^j|H3>$1zU3-+`WIH60S;(Ofu>e-Nx^) zQlF!Fvt<_A^5iDr*EH&W{%Y8s=qCcc9evuom+YHkw{HERe|J>oTbD`YGM*WJB6r>- zDoru6a^oim0fgexCmi<|9n;SAJrqlPHJg}{%j(HY!F5aXM2H=Og%F&Y<@C};@T;35 z7uthUSKj=@K-ZUk%;$7GFvip6se6+~ zcgcbmu3-__+8)J=^=z{lWl*^+f2s%dA~}*Caa2ml!LAK7D_lvCZHhC)Gc_L5{>l7> z2~3ToN=;AWuOhJ}EkV%lkS=aD@?s-qA|YVGVkMs$#&`ScdgzA&NK^C`z4b z;_WJg4@kgvEY%vJ43p@5lm^^_t<7#djdrhT4i8WrXaw@)ZTbNip3{GaVAKqE_~1~5 z5cZm%80vt6R9?NLFX`rQ48F(_b>;4fpbQ{U~fl@N5mGfN6 z*xRbvZ#m;FOWb_|B4ESN1~0O>4VB_=T)LGZD;l1@`a>CE%A5!#v0 z+uiaBil-(nd=bBYoT-&s0iI*n3vzv{V{iqn7kZ_P?BKkC3Y6et*XU@PW1F@YZ?({C zh;=<_L~C&fHX}?{RqIzcm7F8sS;%|p(|jDGpp}ftylq%jZ zz`BCF7m=H805(8>`7yE*`nTjz16`!bk%GYp4C<2|>(rsG3ht=_h^_=jfpyP-L!f8z zPfCV7C5ng#ZS@iMf$Mi`OVH<;lG)76{4)RF*_@C-VU=GwtXc zr#ZCjFsYuVkX+1=8tlNA*(0w0q>m>OsaP7x^`{(;4a4pZ)Pk4lYASbo3NP^OJh=Fm z6<5vg=RMx(R+9Qsczyps{zLs^MN4D1Gm-xK<)Qb#Ij#T3{O<=q|2s=Ib%zKD2H>uB z9M8OvxRdzhJsyvH+yo_QEIkkhitLEE>3{@=-!GoE21>k19}_@>DJh3+-i}3qLUD?Q z6k}`=xw$Y{6pkc;y>L^b)X}+Z^Gf5D#Czu2x~LUZTmb)L$4CA?z$$J*cY2QRQ%f!`=!aioc zXLb*t;tt~LTNvzH!XGLm_w*S7)m_OSpYm=L`YRk5P|+8Q`o;|Qt?i#n0k~5F`wpo8 zPB8gS1_o63?J}J2Qr$6w?I`Zux*y(Z9Pv}!#eRLa1KTm*<+{I_@oi!R{tF)ePDc0# zKe)5Et#^0+Jq`7_&nos#O8+n0>|g&_?*a2yhS|UILBRdpuFR(uUe5&Vj!DG7`W;?Y z*5S_H_=f>B zo8Ty?^SHBk2fTKqQ*L`8I%Bj*_m(sh6{0qx{eAle+6q=&jBu-P5da68=pD=GfpD`I za;rG_r&S}i4Y3vC)#bpvy(7o~uw5NH|IWq*E~KK7wSq9kl|%@*trb+XbI1oV7Fb%8 z3M6$`zlMa_u|$8Qee^5SSOSE2lZXv@bO+I+Y2p6#0wL`>h7`$k>FqS(*_->YDKZZX z*Lp08>(){f!>HDF7l6KrUl|)pG}Mwi;ojcaoK}Y%8Wq$;K^k^w@UL+Eh!`jgtE4b zVVzhjW$nmIWdH~8Y56RM#R_vG1mZ-gxXR!eUIY;;cHN(0*){PD*Bns=g4L=^~bPmp6H8T2_yArhOFCHqp<{DuALHeHfS<3#;PP!usmw`kuzx z&Onovvb!)kLvbG`HKk+E2@80D$!X0sk6L~5YthFGEokdG#T47xyhi!J;ayOKO&e~0 z9uo@wMWne`!ljo=SGZsWd_-vI3lnTkP^q#zmaqJSl1$II4^z3Z*?|2i#R%W*9LcxV6zqy2L9QYPB3=6!egc(pm*)_%D;M)G&y1(#L~F6?kBoa*0bcA9ZfUz-B?c6^o}CV zzW~@q^CC=m(BhooNg#L)fsYv&!pHA_>L?$Zta#)|v!w7~(JPkM;}{*&s_G&Lg0P@;#n;;=4I>el4!1 zI%&-iY5w7RueyA^!xDtASIG|sF+yO8No4#-JuNVAC3}yPWd7^VS3iCHp$IFQk7m~DW;Sa+a7lL%S1v` zFNdw-dQQ*`%Iek&AU0Z1N4jpQwCk*EunOvY(o5uzW;oHsY@vApiVX^y7EV0uoE@zU zAMtpb#UT})v*~D^9@-Ntjo+(cL;w^Gp*xf2w#AOM_oMC}eJe91Zk4v4Y8#zvpKKc+ z+WwUqIV!hEvkUW?;vzxJ#oIDFyDiP#oz`*-Cm%ItmEDPSXHHaq$jAXGQ&tr8sxula zixtKVdR5o!mwAPthG1?ziTLn{!El_EB*}5OXJKIno3Ps!_zkAac>2=U89@6<@xF-K zk~tJaYofNJ0Z?vtesy(wc}_>7D6>Vhlu4b!V7PU4A@a}JC^*t%ULGcjJ+sX_vf;=$ zz9e-mcf%S;dLjMb~NzBQU-b`MQ?9z&JFJW z(RZZRiJ!`5*G`G5M{t%D0x(mVH?+1gmZ_B&1aU;h2UDy);4H0?j@y97_5?O=hIw9gqIGZGB9 zz4L{ZxOVjA@&N_&%WE|r<60g=!)%h=q|Qc5US2oaRX1R9$~=1L1Hie@JjsJj*eJ_x z!$L@>BW=ylMP3yjpE5;qmJuTIQ`!?DQj6>`dE$YZNm_1X7rE)eehTNQQ^Rhn{(~>G zHzVyUaKX=3HJv<)xF`r4D*Vnf)~oK^^0+Ff@fbyytlYJqz(lX|zWqM22X8=S8^*=b zkroJrSdlKeGu0l=4M^$6*(*rw*nh~3(ElD|H!Ikmlc?6cYgs&}tZT2cwy?bIjBk`ssp&rz}Xg2IM!>Kg~N0ecldn zLptWeVg&}Hetun<4uGyZ0ae!p`hGlP`Ne%kS$UredRbX~2lz<=fooxZs-9g?hfbkX z|D}ovpAY*AvgW*lfYFspGK17@humee3&MR*h^boH8>pw4M@(BEkGJAP$-BC^C^?Je z>56r!Gt#;0zB_fRX7xobzy~FTx4osGO=Kx~_QLr=o>y@BnwPIfdp>HWr>L|r4J}0m z=7Z~PUOeIk48S4pf2RuT_1Ys8jKU>IJpYBx7?BkaFqoI*9P3|gOnz^;2BpwTSGL27 zaeCOjy^{&84G%K)QlaS5F118$xQbq0kaekDMkO|g%u&5v;72TgomummYGT_6h zdnYU2Yl8K$5i5S18B+6;9NUt4H;SatvRP_wP~S*T18~g>u&j&oa$c>{^;uSd=Gc3@ ztJ}|xM&ZWc<tt`^p8w2p-fx!1mEfe{#H`pn>l@*uQKEzo`zNzT@>H@ z(?9)y<4?gwyKSa_Qo z(##5w@>#ilEG_k?ks(lF?8}Ti>L7|7_ExG3`X%zGI#AKxM004tV(GgH64`Vn#P6M4 zzrO$Hg(K|*LB4}A0(iLY9xr2pK4cB6WY2et0m>={NB7Fkm3v@&?&dt8q105*Fot|; zVC7d;$oM*BgxbbWD~dJBU6i0}(4gJ4E=gL8KEFxT&lV9Ts9T$ez*ZRs2%$zxd~c|m zR~X|tS6sA=iR{3p(u3ZaybXwlpGn$G+-0U(7N`Db+aG^iGz{YpumMPI4#3n8lqsh0 z0ionkT@PHrlweeR2~bNb0^y0vt18-eNJ*eW4$jd#tiZ^TQJ@iG0a@a+gJOR0SmE9i zkaPIh{_nPZqN9~8V7R#~dzu!%l7X#! zo@wK3W&16W%YD;wF%v2p2$SR`R0Kq-0QJsb&Tb{Cs?gb&|Awg%t} zo=jfXMiz%_2JVnQ{eUOrq_i%LTdmW^OSL3R#!9l=M+Q#y&fSY7KCQr5VAcejqRnH8cm5l8lytuV?ot)E{!F4Y~g3s?xUk6Z;6-dak zT-b3M5(JRDgD=wt_vS5zG+NWN@R*Sfih#VfD30(UJ>GI8!q9Rh!cs_$QfOHRX3YjtHDU0vur~@J0LzpwNex)Vh~!N~v(kyTVRX&>07M2qX-mt) z@GH;Dwxx6ZMN7W%zQaG_Fo2CIJ+5DFiRzbLCvb>d zfV4&4%N=%Bb(pgeca$3e*Rf$Tuc==|IR+2rL^kV;W>w%^Wr7NWIivH2+)mLvCeki{ z_1CL<|8>$q#UG^F*;-Jr2B=}!082ZKJMBE}r1dt-^*4*w^7gldck#GuIR~|6oGmkQ zZLFuRX248vv!glZ11}_FiN%bDU3F5-%V?uYZy#5k7S|6Q3#Se3w@Bkz1T$q(D#O0O zD3nPcG}*H-H?d~c14(Jl0)7#Nv8s8dDSh8}2JdebVGh}4TOcV70$}wxu_s+|ffHsl z-9t@Unz!gofGUW(W+x|up9jj_GWlzcmgtVtRCjsvQJF_PA-L*a2;13VJ+A-?R++ zGJ%%b4q50Js51Y@Z5%C!O z>7p~W6b$$K9iA3+M>RFOJ>{8cSL3eA%3ArH<|T?%_MqmeGdJWL5|4<2}L;=^6KdP3cD**b+ueaf_4MQ1?KOrJe- z$$%}x^HN=ZEYj*Pj(Fv!91ml=$PZ)YuDuG7 zi)=fJhbm(;rNppZ?!5ZtVJ_#lX(gh_Q}Mdg%cOOHGo%?a2x+t9`(w3oP?QrtI2dLw z*;@h_g%qE=VNX1)hEqF0C(vkCG`8D_87Y*$R<^KwV0DhteWzvjm&ilF`j7I3+Xrs31U5_!|2MZi366-{CvyhW{7`XRL+r zcp)$$>e9*O>hi|IPgzku&o zTV<{5Z)t==87+kWS(n83MV6m2a*&RLm$)zbkvk&D>Wksw|KWT}LX)z8CaO+9$awBU zk!J^=;EkA)n6wMP&%*DQ+DP3e{rW{kXTN%#xG#;KCnN5CMNDyWiwdkZKj8s{vxH>c zjj%wX{97X~N3w2FU3r1bN8q{;STCd&<9b%=FEY4(`!})@{l6neoEr{!x10dS`nM+a ztbl^sKC_`(<1p&y2!D4tzEJAEd+z_#z5EfT#masZzrK|Juk7_d?TM*A>8NmkXjMri zY;lxt&Ca3Ualj)qBOC(1k@A8_W&(r_gK!cd4St9CHL@xagNqS+m=eSlJKpEoQwNsp%>{rkgxd+*?^od4fiwEG z2C#T&#Z(;NQkE1AvQq9O8*&8!UhjIII_c&w38x4!2WS)pxB4KEy3a?oArZYX`otAW zi_;JYhzrpI+JZ&XEht5R)_Gzv(oV5?3P92<(bY7=?8N8X&dHeCrCYwO4?R?+q{SIJG}NeB}ICK;A! zo={t>m4o(d4_)08Y^>xL#KSDN|`T9$tYxYQyzycMc47B?}k)Zho%kXol-+)u$*nwz>qzo9^Ojl6S)}D>z z`%{^wE7O$gVkIqStf?}U?Fr!Y_N`L2*nt=UgB2cHZXMaZ!*IGq$t$9egA|zINlD6@ zYad9A#M%9i}(6LJdzIa=B|xFI!*$D|C)YfZ?0`Le8uS|TK7P=hT`S>3?k{J7Py z^a)x53w5CrSv4@kWb2S8j07i5Yt8hF&z0@9vJl~ICpMUl9gwGk z0KU|&i{*KJ6^L`}0R{}+l0U#V6}$R?DxbfM>Qj%@+T!-3@cXW#jrDJYJmPmF>xewD z`v1g!y95xUOh|kh9vxNgt1(>c87v^ZDst`0!{Z2d(QT=~-SP(XqVcVZ zry}ntl5%6#65P!>6s%4;Oe}tE6*0#ws)Gr7sSBR*3GL4ulACkJthWeLh?^G!>R%~8 zB%4+5242q~#Yt|e^R9ni%m3!{Rjz)3mPFA0i_B7zI#vD_*jTvxH(+eTs4Fc-oQvwr z8oz8$sHl=nvl_MQ4MpePEK%4war6Qt=#VvqcR^q2B0|jwmk#xbEAEzW!iap6H_|pznf%Ao&h}Kv+TXnY&zGY4pfaI!A_=f+VXG2~ZcUu|s z*RQf4L-_y6$hqePVg_g{ucCg}JeuxI*(Vz~gCf}zmcxS($BS6^mHCNC8YqJ|TVnYz z$m8Iej=HBW;#o5I*;0x+X!zu1HllFbgfppSu+!J&+^Wk~oNiora@V6pEw^X~G8Kpg9bKDaLRBif}E zxs7+IP21fo*pD`JPmJ?wjN`r-(YjOZ_sqq9J+z_Q=-Cc;gH*ajNrK37Pt9!GrESCi z?Rbm02{C-9yAL?{3>y2~e*48o5rWWuZvZ>ap&AssSIERib`m@J7PRLx7A$|z7A4_UrmYh{>*y^_2W zm@T!?a2i!su1mWiJZTAN`K~MO;*G_czyu+G3}5rx;7wCjf~9_tLcdezxFVA8TvFyL zVctqoYval+!>n>C0o5sz2qTBLQ!_jd=ux|!dGK+X1!`84;F4TG(sENNb#dtAau_YS z@SgYr;{nVLYGOv0Do?XyTgG07+jpEQXfA_SE3@b4 zbSsTW#z18mQe>i9PLzkSjTUlD->YQpb3{5Z%{Y0(#r{EQB(aqr^>Tqm0_x%Ai{mI0 z&0f$;WNoVds38NS!qKYhLPiNW6s#gRW0N8yY4v8v(l z4+Cb6zp@U|-$+N9-Ba@2u_nd(IDLcloOnX3ooCOPV|Mo#V}7h@INWvFMzI(|Yg6}L zU;YV$_u|GJ-$DG7Z!n{J_dJ7NJbA@W4qtEpv$RwfC}`AC{=3;N2HS%2Yl+&7B{+nR zIod<87{ES8pjnA&4B(I-cJ-K62`06t3lQ2a=2VfmKT=iL#`ODI39@uxx2__T>=kxr z-QBFLgKMw6^Lj>WBcWGkDS%h5JI+&4BR@tmPBlT270;k;XP2vUFujhfMf2a)%`4ND z9F=7t5msdZHLyNxF&Gx~bD#Od0C(WDo@_V30IjmZ0;QRaaUomTsphfu)T#XUFM!Bo zsjnG}Md1mGbOsHPGVQVxK_n*s(lGI$w|6o;lj1-(8Aw)_yDZI z1M7VCq=TPUY&YmN5zxRlP|@kQ48Z$ig1rpu$DhaqMOj0Sn(HkErOl1St@-*=uhWzk zhH~W37X`P?kruiOr^aKU^KU$r#vBJc`YtwH13~om0d*LrLRZy)}BaG%VxeQ!vPgm`=^>* zHR7KtmB4BzwOtm9slz!cUNz&b;K_=AdJB+0&UI1?n%coZ*Pli*Yg5|~7NK-pZJ_cD z*K3P}E)bS^FGhvqYR&(iDl>@ZU#SfeF6yW7oGSl>4M24?LktO)7`jTpx9T`g#3A#O( z{gw2YQ?}byx}#--!mN!jk}EL7Yvl!~7KY#qUaxTs%RkFJZuMal5ps0BAOd~}X#EY5Lbxe7 zNuGL|Z!dGR()XIhI5*Fg+#qI@r#5E$>pE5mzVZVO9>H0pdVZ?}5!Fgpts@MXfLeySB#& z3+L*S`7J}%h^0;511!~e7NVr|q74f@gB#ztavO#9!dVKQ6~F~J5+6-MqFb9rWw81SgK6v?^gm zt8STTUWyEK1`w!0mNLa6$Tcq2oX@}@olg-#7epJ(O`Dt9fKoH|N20=#X4Fbp5D1ym zyz;*QUO=J09|`7B&tWUOgi;x+E*iB%&t1z*3C+T9J824zm}V$m+pXguRg);qQnMy_ zpr-aDRt&>sEb2zHFW|A0rX5qFLqv1Y9I|R9gPTIZF|2Hq%B2i{>W8pe%r`gM%k2}m zqRh;s6A6|K2L5sX+B}#?F?3h3@8T)$F&xM$@NCd zKXUd0oF~xKXb<{-q;h-MfbG*HVrvi~TtFJuG&*bzvQHK&sz{ShuBVl^+(9H-lftmn zU_UC8;IlsaF*t^?+QdEa7+&}!Y3~GX3l|E8Vf4Z2;4g>!GPsPr>=JIE%l;2VqCQ?i zFm4H`Q55mSTUT9m*V|Rs^>%e#CXH=&Ln5&5?Zpq~)>S##`m z!+(>L_uy?W*4l^AFL)bpt3*`*QXPn5BUQy4#T&z$6K|TX>bmOERX1XBx@zcZysjqb zYNA{9s9sG?(p8_EY*3SR)vu{3ZZ%aM;ZoDok#2H;I!aeZBa#lit79~EEOHs=CfVwE zq)c!tsyb0uCn0ixTb-;P=vFh-DR|37G=IybW~(`Pn~LZ(7Zgm#(t})p&Oq8sgbv2r zAy}G=w^?!Oq3U6}ny0I?b@gyfJpyYU=_V!WQCRb6mzu8@xZzf)t3_B=>?XBp36{;l z+g!YrYU;c=QUzsz9HXgaZW2_>QNaoLQZZcl2af80KfPbnB z5L$@PBD6uBn_QzVc0rXTntB}aI$l#xU@)p=_NM0uR#}P?o`@_1oKA@PnMx81j>f`e zSXhrx142QBmLt@N&{d@v z+mTrZ-a=@XPNc2E%Iz+waw=9{Eq^#E$DV`qHJW;wrk;)#Jp=vXOk{Ny-pSeP_Bw367@_rU(x{$~=miLMYU+j9&qbR0JH$bn+tiEk7DDtW-=2m~NUXBG)oVZy#YJE(XDP)w;*~GLN{ybEvU?`*!VVN9zrEw`c89nd~xB8~~7T*5iR{yHL?S@JC4nptZ?LEA`?^Zuh zKg7B4kz4(n`Z3-2`B;7 zp^56*I5dh*Jy_4H(SIbjauD@lSu)o0YcvJt*EmE{0iq+2R~n)a7O$bBtZ8^O3W*Vt zrt5T!PRAn1n~lfY1Y|kUs!S1^g!BU}lEY0W(*u!|q0=eIEE7Af!kSq~&c<5~qEm4s zzCj40XeynK&_Na-ZiyK>ovG7ESv(0xf!^ zPLD$Uk9N^~S^yqI3w2tA&tjdH=yZ-w=OR|B(|I~QMyF*uE!Sy0+HO(dltIJzl3L=ya)0Pt<8Zr^|F&uhRyd26ehz zr;R#Yq0=Uvo`0m%lXcpx(-xh!>aLUI>GV{cuGZ-qot~!C z({*}=PS4coSvoyir|0POT%De$)3rKXr_=R1Jzu96==4HteUVOor_+mddWlXi)#+tA z{k={v*Xb2H-JsJeb$XRf|De;Wb$X3Xuhr>Boo>?Ub${6OdY#^&(;IcV8L=&}{L-5g zlGe5|*gB`Zt#f5XXG^fXslKGMwLa9;*4m*E-;%PE0;>Yknggwk)2c)5O|6Zy6*9tZ zAxKh#k#$$NI6!jv`CPuEEx*t z=5s=|Rj07BqA;H`s!@n;lDKNMVVsvQup}z1s(+hbv-FtaI;1WH6LM-1Xj711U5vy< z3Q3P3E-kIDEX(KSEGu46T!xkE6p|EKsUp9eH(#ufl*p2r((>ZPl@+{ni9-C5r3;Fy zs)02Y9w&)YjAMnw<0FXGwFO8#K_P}sG%GHZD;AZOlpyg$%XUTib=)uk%N2?WWVx2v z41bH~R23KVs`U!-2wG|WoQlfon$ki}Z?IWFC&g986@{Ed&|*x<>jS(EKgEMvRN=_ zTuxR9WQ!R-riWhQUMB?f&agnXY8q2U1wdFOHMGyjNihrvX zl89mOn zWCMSxsRYkK;yD)6s^U4ti{>va&#x(*D+cV`sG_Rk`DOXSC(pB{n^^?Y2fVAaVh$Fr zRmiBAg<*NuS;GT7i$$baZ>tdQ=70P!4W~1wU0{t-Rq33$yyb;9rLtCNdXY7gIHf#) zPH7>Me`j079Pf+mmezP*VkuT#3_-A{dTDuSQH9mfrItaei;u0v=^0k&GOI_^rA;^d zy)`dv^5Cg;dALhaM~)v?SngpK%4HiYb*f9}aF4vw3eM&tbCqSjYBYlw?|(nof>u`5 zgyp~5vPAWK)ArX`LnMX|N!QxK)KxD9|E_|?aA|D~x9vu|ue$0YbH;75A`Q?`@amfU z^7&YBoh7Kb_+4*J>xf!6z?vONUAnNeX6{l;{~Im#cDWg`H(QH{U0{XnE!Gr}?Rb+V zdQGLh6y7Y+EOll2=Bm++|r<-!f`v|LOssxDp3)w;_T5ev&qW$(5eqNWP&NV&(h9a79{ z_gX$!TPwP{&yu3HqI6NDa^2Rt$BW8K%gRc5oVnk2ony-iD~mYaUVn*JTvf&AW*-=* zzOy6L)>0L0>}(FSV+L0qfHh%qSzCMKv=tqvG&d}p*4(sgT4`(OnBbaHGl82M=vV>u zAa_g>?K#zM9T!|3Y7f+hs#gYKY1UQ-LZM(gtVd}g`|J!gHBV~~HU?Kun=guhk-L6H zpuMcE?c`2i;B5__T7SqHTREjdaxw&AuyzcZ4I!}$5)2}^(TW^HGyT# zLCvunxHol3`U>teqjU-+M2Sruwko2)d3aN6Q|L%hV*zh(bOb~B?TwIKw}xO19F?&| zmZEs|%JyJK2Q;1y^(pwhzcCoH7=}y192rxFXb7_z+Hgq}GJiWmu2pSTku&+qWhVve zL$jw0CTa8*O`WHy$7%FdO|91GZ5q8@Q%}IN722h#7i#p68ofhPq1x#hy;Gxi!B!vk z@mQbUtpFjVayG22qnV3NGyg{a~EH0W+q= z+LIWfyt=7nWq&i+KaSS6nX8$+hcfp9B)q`Yt3BJVDex(0E9}&I?D3v4EiLN>sDS3<1H^a zFl!?g8jPnAl4==qxJI8d==1aim>&jx zk-h{f(|?y?^E%F;uh2gkjz=9k6*4wv`}}qo=ayiosotQk(wnj6Ylh=-#}fv9oxT9Q z7q_>!wHuBn9Z$iuGU%V_8ybDnpl>-oHRxaP_E-8g%v6KEL*F&%dw6@FzHQJC(7GQY z^buPAZ}ek>euB`a^zR1!455F}&o%mmLBFJ5fq#|D7Zk!w(8?Ep_Q$~HlbO$nlH4Jj zx9Dxb_EmxA>R^3aYXfZV0|xz?euc7sW6*DvS2YR){!jWnl79eBGp5d*dayzNMSn!C z{%z2o=+6e-jki6@t9Td?-9=g3GQoE*-3KEW_T#d))<%Q=f}93`6C+H~n8RSI`jx>b zGJhK#H84rCbyn}5PGG?r31nih+3awG z9l?&YhKH}r*pI=EVn-V+pA{Ia5T-sWLYd?-#vv(QT_0SDv(jM2EF&_MgzYL!ntu)2 zvJy7OU~|E5St*+bOOL^h0sX-UWf2M$wROT;jr4MZRj^9D&DYqm2CHJ#2CG5q)zTkh zX;;wH8fagGU21HB!4|Sb$fnLk~GU@ z%M4b}8VnX>%QXgeUcs6Sb`suB#(!Hg-dgb1inlhrt;E|Ycxz`J1`DxHgRMdn4mMF? zvpG-Lscf~u)}WnEW2bBE41=ACG4^$Kmf`r!@efqwY>l0Rlyfz9p260#bp~6{&NtWv z2wjM`i(p1V#oxv1s=)4Q4Z9evaEZY#MJuF4J5xdD^5r;PE@Qtp*yRwS*nbslgTbzZ z2*j>rSH+q_g^<5N&S$ySmFy1&yP92t(q4-aZ8X>>cAeq4-_Zk^g~6_8HyG?jwi$8^ zgKfbe_d2`DU^lZ{40bC{o7)_pYV3A{busXhJJ_8XyUSpAGpKzpyU$?V5S7{eSh0t} zTH+0>fU&I+rQgc7X{^^^eSfS!>g>}@k0MtDp$CsMLWc)2&OF4nD+i9@J*y9F!0;lqm>?wmijn1d!M;KjzD9YzVc#0;JN6~yi3a;8``%zburC!tu(N*|>_-Mm z#!u{LgY9N}47L}W>|?(eY=CVyoCHv(f*OsF-ECe;$+()ubMtBzLq4Kp7>-XIp8}8# z*A(z~r$Zr*(h68h@o*3xMa9*yq_T?IvNF(x;$fQMRO!dCO@FJZTnO96+KL*(@ptf5 zCpDbR=`@_0Q-=g3zqqurwhkxGYtXKsWc~t3cnastJLcHxMX=LwtXX3?T~0TYtqBI& zfzZ+d{j{{ThE@R5&;YqzLtqVnD*&e}+B$iiCg9xC)Y=(>CBV@E`M0x!ui#h)SX@g} zb90kLnzTPDrhnm#a~jZDegWzyj_fI(s^g<3A0CXKphH*UkQ@m75L^%zA)pl&mzI@Q z%mFsMJ=`Jb)664Uz>62nhh`;Zl~`LXtDM7glQ{=X2dumjSUToIa?a*gE-XfN=Aj!% zP$fF#$4;$_tSXp6ybukWmaY+p(mBkfvYUUzcbU@CRk$;0=Wr$89Jzo^#>T z%zn*NBcSj@A!sCyf`Cwq9U00?D6UpmTZKm?0>Vrfda};S(X9D(c!rPi=hs!1@Pkxv zM~*BkE`L78g6oP=TROM07L_h9t*Aww%&O0yf{|KL32JM{*5+5$-~c$qVI53r>(ma6 zTv%+M-9cURXb1RhIfz@dX?&xGM;x84A;?@! z^q`E=SjPcjQk7ZVN*cj1&LDKw+!1vUVSgReERM{jTLLSm@sK(AFwXFfqfo6b_ zV$bIx&w?O|tU|3Tmy6RIOih;sI?yX4PsXf***G5tlYtMkhS>)TWjsI?;Q3;dV1Fo^ zI`TV1ZG~+uElnYQT(X#-M$|%V@|6vWGpJBWei=qCeo7cNmFyMBTPwX>SzkYQH{vmARZxEGB zqxyG+R+k4_1C1Df#>#E^L0F((9DjuI3bP|Oo`Wlh(@cq82(!B#y%tOh@hSmI7q_(r z#koQU2C{jjIMgW}V%%{@7*QcLYEx-#bAeX~A_K%@+Xl&HgX8pU^p;q3l!l?@8@O!q zV7xQt$tK5R2xy%s^sr9=ASglIArGHp#FN264(zW6FpsVOk9iCgrDE;mv``!0 zy5ZEC5_7NT#=urkItKzL1b+%}zg5BZP)(aK$KqH*@>871^$! zH?>;F{o}0Ij&Hoox28+W^A{~GsS@v*q9$?Vd7e3dlVH~UN+llZ8*Fz-9nu-b4<*q2 zs^Y@ZYA#VyYw*;_BSrAOIT`bQO@^V%!v~XtL=c&5vO@XC(PW&HgiOj&#l zWcicM*LH|<_%d!D`hTzAp2QeYi(4CNTbn{dC0+9{)m+(Dze0-VF%q1Jqu|+QIwZDZ z36UlOn}yn{LjhcF8Y~qczr^%CC{o91u~WyP&QUS_Xva5Q3OO)_3Z*fFiyne>wLXCU zo`U9z+TF}4hiEs(T9;yOfH1EzEeXojw9SK>yjkII4T>=ZOn(fuiGD&soX{X=mAqmj zDaQM@;pB~(IXOdZg8Q=ldY?Bu|6g?rcRl2b?WQ|ImKn~tO_ve-c3gAATgnt`7@|`c z9Xk;(tW(XADCZ|RHErS6BVy(`^U$#qJ0K|o2}@f=Gq47%06g)c8AbSTLO#>b*1~h4 zA~AuAB98s>dw&B^OH>m`QiQljn=O2-95RjSrpDH$5= z68Sn^3p~L-p|*lGp`f{PgV6J);0D{7v7}%ziVc>PH^*b5IEk?=6c)qm)Bt|GzR)1{ z+u{NdOR!@eOE|^Axr`O8mP-m^x>97;nha=wE-hU1$p%iE)W-Q(hr_#ZN`F?hY z5LOiN9<7}3cxa$rM8qOKt^wFQ<0FKJCMqvdIqU-7!N&F=s;u%#thucbPvD@WDgX&2 zZqeh-%&(?xaj?B@2r)3T#tvp+dSAr*bv1RAwV8P)e|O)x%-ZS996pH5i@gtWf_pcj zeop)_B!537KENo9IF_;ZqOf-I4>y_`a1PCHYr@^LKcg@vXDwq%p_m%Uyc8z0k=VSQd`?X!jC!Xz|}xqjdvGp zf$N*h*VItXSF&-#8wuz5#9y@|c9gu#noc!sbAN-YtwC@GR;~=9h}p4b#2}J*|06uo zVxcwRt_L^kv1S!Nt#ZN2-C?zBVvra8TwLUm*5v>?Lke_{+t%4Ox`me|x0aY6(rO9(nc_KG*a?XvEb=9NiYSHFvhO;yFoMd#EVbQ4ax(ix!WBiq7Wd4m^E<3V#iq zE1R1z1vZ1huUXi(2t`f`DcIi=iXmPD^DvSYx$CK@ly>YMFfHGXb>KIVO}NVJ@5xH+ zq#w@|#jkFpBttU~-xM-x@W!{Ma;fzSDA{&N^Jq{?%^=W2HyGRzBpKjh~jbHh%_%Wscha!|>ABre~e7ltL``$_J(R)gflO_^D@8 zu(<)xppgk|D9kSsF@1q0GETh8Fb{j;q%FTfreqYA?(dOE#_)CJz5mETCmP@j)*HTz z!3P8ADX|VQd{U%aT2x$;Ut3mV#=nBf%Ccg7^*Sa-tQ3osc{Tuh=*ZpvsDF&1%#V}m zpor2T-YP`Bz%aXLY`41bL>s`Ax(HM&&o6`QsBNXFnGw@7W4l2|eE?SsXGW&C^zOipYT4(T9x=fVQp_y zNAYUtQQoAYxcQB+A!x)S4S!CWKGaYQeNyZgZR52JcOuhw*#B$l|xV9=s7wn)~3f!VH3qy)qgeBrPeC%31^*U zZNj0o;)*$CrPXuoqiU&iHs7(=VgM}U@1iDW46YM1Bk+h9qNRxM=F0(UL}h18vck`c^&XSOZXdrzbWBw z0sa>W|102cOZYp0zke&??*ab4gnt0|hZ6n~;D3|wj{*Ng!aoK4?-KqQ;Qx^D&jJ5J z!oLLkD+&J^@NXpiTfo1Q@P7jSy@dY&_`f9lN5KCr;XeWXvxM&ke2;|h1$>``{{r|x z720TZ?rvg4r!lwg%kc7_we5QmS4EP}uo(uRa2|pC@!z4Tp@Yxc6IN(P}_>q7g zCE-T{o-g4AfPWWCcoE>m5?%uM90{Kbc&UWX1N;~XF9W<>!Ycr;l<@h0A1mQifLBX+ z4dAsBz5wur621uVItgD4_!0>}4)Eh8`~<+4O8AL@2PAwM;Pn#T0C-Tsmjm7?;VS@d zlJJuNKUu0dNd?nzgNO(Ko9TFY_yi>wg0e^m~gs%pCjf9^D_~{aU2HU-vNHHgkJ*qr4oJ_;J=sf%K^Va z!Z!eZrG#Gv_#Y(vYQV3N@M{6zDB+s`zfQuh2mA&JzY*}w621lSnOMk-u2>2Zmekb5}N%-Al1pcfC;1T$v9!~3qa(v$J=;6-?I6aZL99tdRh~nra zM7fKoxLzu!_Yh?iP#i~$23d_BqJ}Z1bdS0VT3!ZM9MpXZo&jKZr}^9p&y(P}&3yjF zq`zlAzcA@v3tV->^9*>76m)eQ(zg>@H@c6oZhs4?$mt=@ZA8n7py(#Wg%o$iXwTR! zWG0u6kZGtT{QVG~qu{v@o(JT3$xYixTo;MY@hVd}q>k3Nkh4XjRd6|>?&I*xgXa_Q ztbpf}@LU8>)O8s=KZa)!$T|t0%{gAj4$dhLpucfwIzW$dXfi-MIW!ue$2gRf<5dsf zkbj;t3Z6MziLndd%x%QT=?0dHqYv(5NYY-CsyO$MfbR9~C7GI|-{m^W#sAPa7`O)= z4~c;zQ()i}cqYNXjl`jHY$h7*B2>NG=EsP`b2Q|Pj_t9UslU?9fxrI}&73D85uVAJ zeIz~;R7l9|A&H}UiD#49d>iqOLWdyiD}Q7J7qC*#6u5P%&qm_^txE+LRR8gR)7O6_ zp9@@S0G>Vp+m}zeTrps&9=4CZ)F$)lfa^f1A9&Jeem@IYV)C)-rVH4T*&0t?))6T$ zwxb7__5UXEI5SGGGY9jR{RH{Ol*hd2@<^E+{}LB3H~CQrifoBwu(PM|<%<)Ag4^By4DzzZTZh(9o`WB#M4t)xcpF{5el)|A`Gd-?{U3IEgEm}}V zy=uvVI_6amT~O!bu;x|IUr?vB1$7=LCwnwb_vl_VcLC>cxy|+bOdb*eI^%!LH4k{D za%g&H(g=u5wie?ulhS0|lbJM9;D4hyPBN253!Lk(e4FW%L~$@Kis(goJ(is0l2~$j z&WItVa%HB+Ggwh*)XDZI~i=+moq2;+u?)SaT&RoJUnJ(c&Xu74K&uEBo2 z>S?@ZJ{k!^%|wBD1m?BmAU9?vjrspUjugvBh~XvACXMYU;~u@=UO0+K+5j0r9I$LD zM9~~O25?2@7~FR#dmLYjwQLW`7q>+CGinbxdJk#dLoR^7E**G1>ey+fCyB5)<97b* z%&jCrtnvhxVrs52*?hSojb}QCu7k9sDLo{Uqf9i(%<3aqVT*$P)Ay1CHGjuryUBzR6Q=?B zamZ1`T3!mqK_kqRjFV{^rUtI$?IgR-g9_%TGw@Dl^pUCE(BHIh&OwP|gdYNU>ae2&kFn<>DFT!YnsU3TOM-VO*u1DZ{nGpRAxb}woaZMm3bquum76uR2 zcrUD-sYk-|7r^619Tn1awHB@%xboo|4Ry{X#0M#C@?(I1FX|=CA;j+%aOzcXJplU$ z11?C-N8CV&kqhM@Q$hp4z$XdPYTuWUS5h%t;IY1E1bAd$8F$XnV0){}8y!;5re?!JXYZVb`%5c)<3-`4+Ul324*dx&Z1x zE|3OW3HM1Rz5&Wt!u1hcp98){$m7}t@~;P*fjx|GV)z#5;rLGNC)2x=4(iU#%I+gG zy0d!8%wBS^`F}hFpSc@}tB1_$BF-LiC=w2fCd}MQ@&?g*$?QnlR&sbhIRc+Yn$M%Q zlB2_5{)41IA!6>43F3kIH-|CKjZP};PAck7Du%64NgebtXT91-<_c^pDHT``nb%K_ zITDHKf|68*0+siZ3hb%Ue9kwY$F4^pTb;3!ROQh$x_=9|erfbU{DxXQ zUb1wdsDH_LkYmWQmz8J2~6>Y9aPk(y)^Rd&%-#3KclGU>1t7lQiaOek#UJxd#036u3?Urc$SUlNQMk$~ zJawqTWU{(xs0yc9txq4SFqxduG*pGNM1`}5s9+~8kt02LOvOMlKDLc{PT^Qv$+^Ac zynl@(xreL;*XkkbddYfTPk2aVxiehuG#x@&C;7uHxFD_)h`R(={FmT@y@jH~H3hB` zxEgVgv@{JJ*{SrB^LLUG9M{@9a1T`Jf+oCQxIWNFF6thpa*I?ssjXS6kL77{t6uUu zQP@6QVQ9F*RsTUD_(Y4SaN2OKhbRP}Fn?R0HFWFn=&OA6sXhA5SwOO9Iv>XqyZ5Ko z#aN4%gJM|RLoVqdmzu_>7+Nk!CYQCi0~bQ>*X?P{rB(xE*h?QPM8yyT)S!~;=Ko#BU0|IkI^ZRBbU$$wI} zypQZKYe-24g*hv#!DO)6`-Py_m~5|wP#Q_u7-ch9FgE2;Yj&LrI%e@8f89=UeI82_ z(`!Q-?I$;M%Vxn^cB@`;V@$Suo!Ss)v6S?Ygx=37JJUr9lAAdzfQkY-! z!%}lEq#^e~%<1kUJ*M2dNFvfes|S#nt@4%CGL+?Vwoa5+P63bFD)X4!Pqv9U)r)%d zlD=6m*ZZO46s?~;2pP^p-I23v`$m!`{G^{eoJX;88nx=}B>lbQk$$qHJCAzf*Y=a0 zk6Jy&X94%e^1x|)7DHho(SQBzXbJ=#=dpAaOJSHF?Qd%{%d!gk$rFchjYoiGpA`0q zUHH^+g-;JxxGPp+B9=VUc9@gbat_!2+2IPG8?Nw~;R>H0uJ8r9PzoZ~@EGzUMna6K z(aphi@hOy|Bb@!@rI?I*$;%rdz~aEXlI4Od_fL%An8gW)5o7i0CV!CwtG(p4$j*4s z9KwT_3)x=ZNPK>}fdg(1{JGm3e>pmun#-aCa%8OMT$mJIAxc~;>xv?>?PLSQkACuo zs`ZgKAn#EkRT)#E}HH@U5`J2h4*hz3W=XKeq1a;!o z38^yoDcRzc3W5D0seeq-Qe0@QImm?% zlE1-ha-xnO4}YUa?9{__?(jT-x%>%VCtvkDSM-rjVTa{h=Ny2|Af$Of{`(m*~~Ino|C8e8!%b?1U9Ar$kWwa7cRdr<6-!^aeVx+cl;d9=Ga1fX^>MO;S1g! zIZ)t!cQ5%8DS&GD^t(Be6LVc%13NI?9!{j_iT)KD*?;9{>&=|&!YyXv(o4SH@6ZFC zJD4j?$Z+YzCAmW(*l)!WkGdvbK`FR$kgm_H_%q zm;5q#HxSOCGPaO0J!BwqhA4#h+eM~IG-V@17*nDyl5CgYil#U)PdqRxPpsdmsJ$?g zok>&jG_ehRnvApeqhLa8sG$wOb2Y4mqNFj;IDble6=o{$ck;*rK6SC>Q~ipQXUxrf zA@qu!GDt9hlN)A$y&SRdvZQG6SK99GRCM%(Ud4sog6!5Aj48YDNF5Jc+}`+OFv_jd z2Ot(fR7ztzFdAuSHk?X$&a;Wc`Carxj6FOKz0;$(Bcc#?$hIqSb$yC~J%ftzY0j-m zf`4jHCa@VJqUcGx2-5|{1D0c1+?^Egs_-16QfzCC2t_?gQWn~?SMha2 zo~I<^DqMomN%8YTwmhhkf(%ome8yr1#W={l$_U&eM(zPF2qO462QS1_+TLD5x7#c6)0ea6{H_~#(}eAB-8>bS#RuYZlU{Qs5+=BtyjW<0>Pel%Rm@i|QY6CzJrxmB@~ROv`S*ma!>Q+QN&mdd?FIDZgW z7H!HsNE+mc;tXM+SD7SH4~V2jk3!U7XKqy{i-70P6p>5>+Fs>An7ShTpr9Gy0};aF zl(^(LKe@#)jPVAfIL0Jn3V%LgykmS$9yQ)I{((>N+K8=DiuX9ar4Fa283mf-X(H~4 z(p}Ts2Ra;%_;{~F(=>e_Ng$eI*MHB%y^nYRdgf=M8~ecGO5)Fi4UjBo;ON&J&uWSW z#m{Mu=QYO*kisc@i2_%eqU|NQNc|boK;j~5xH^eb21tj@K%tuBMM7rgj)p(uMvoge zK=eT^j*e&n4S1Wehh|SRTa6yvDi!`}llGA~0y1T5j+fltlv0rDCqniSH-Aw)<3?2g z`ZLze(vstpU&w)=&db31C*m-UR`!AD%A{(|@roZbnL7Z+&}GH{#NV`yo;GHH7?CFV z6NQ2Sl1^OFROk@pe|3OpQOu~q+r&p`;ZB~KrHw7q9Ixp~+CG96U;LSjlwe&;Hvb!G zL&>nnjM2u6Io#Gi0b7t7)hN+Cx-z!mSt zm%m3d2E*u#5Nv>qmsN&-{tSN!IWR8C6&JUcH~~Y0$!+BBCP#FqIo^Q33JwfI4{|AE zb`!Q6E3ya{pxStu&0$e&UI*L0Nk~$3JGsqN;*M-%{e2Sz*h|JKyMM{V;o4`Qa(0P= z*jt+8FEFx{D)=5fvRIRgm7jp^!P=-Wzh7|oqdES%mrU0jZyUb7#0vs|4M4Hy{Lym2 zkR@=L$3j~d_-)!RU}PlhBSoP5>jUI~7$$ignY;tQJ1AeQa%z?|fPXEy2gMcr89o@j?(8ja5JR31WhR|A?!2 zSD$_s#3$JAj#{lAna&aJ&-o;Cf^5nGU8acZh`Av z*xD4rV!lzl&wuAKo==FkfDqpeaGh&D;qpTLBm>}l!C$*6k}sF%DA6aE3G_+>eG(j| zeV~t&?aZbL>^;ft)7UgkSAV($W4?40lM0?lwuqbVSI$skq5+aZLIDwCxVfK+J zu95c%d31=z2FMvdPF#b03%}9(J`;8%+eq{MnLSD-e}86W_bFLnH2lnt!c)YPEaOkM zjV!i#Sv$5}{B4N+VGU5Wk#lX>ET!T7pjm3R9VKAS)NB=o!^ixS?9J3JGGD+l!!9yg zs(<-Lk}cJ@PL;y@F(qeHn7Uoj>+AyrpE9*inHHrVRNWOm6BpZ8iGlRa6f(={M+!V0 zwr<-R&Tu0l+Y&6XX|Oi9?_RQ5(wM*c*eon-6P9j{ z6qpIi2|Y1g&ftI$SG?NC&$7Jgs_>UuU8Hc33AX=c6Kshzf#e=cat|hzvY}jSlx4oP zcB?3pf$Cykg&+PefomyT6HWXg>ltCG<2H-q2!ES!!j`b2wx0Yf!aU=_?~7NN@3JRF zUtJ_mYCLQ&UbCWA-dRNkwk%BqHXXi>qWaN4@GIE(A#CAxu zYq}VHnC?A_+nnnFRdkU`Ny8*r!>$N9XMaZX+^QT(xA2oRbedk}u$?4W5urlP)1)KE zd_QzOalxo{kr95%PbHPSTlt_PluONnO6O)CHV|Z6$Sk|+W|Eb;om^9AmWjvvX5spv zpRN!1X`eECC|_M0dnVxucs)w+6ciaEKv$_c8THT zGA@P=Dsnih?{m!M=kpx%l{)z5dpVYuzHWLcG+!i%I!4YQOop6k7dc24b)$7sY<1dY zOF=H>1c~X?99dUk25>Si*OD#a8Gm~#&@E!JymDZWo+z03Bc+h$Tjn4eNv0voglSBh zjFW7VoD)5BfzvuO?JB@Yo^Y?=vWvt6sgRSdlYAu2>SO@N*Q&85a-_pePn7(2`$jTa zLSNp*>lN{Oheo*h(`13vr4`EftQnMa9U#Yidxf(J@;WM(wyyZ+tzHg})ql&faHKIc zDvp>n+)VKo#F{q+QNdeEoUC@0zqK7-mb&6ohiex-_oDel%)MA*8U3-M)IhA@@t_@d zN<`f0GESEo$4<)=JoC3e$c)hkU%4Wd8L~10m-LH~)Q30TTiL=@=KF1YcYT@pZGYfU*JV+cOpjIn3iBF{r_G})?!d0NNmA1N8-~X8822Yb znmgLFts!-r1M0qWxGtk}4-p8=PFMa$VWqkHzU!(@xCE3!xbz$$7bGk5TKbhT-a%rl zc~Bnd@7ss(AQL+|Yb$8vnKN=iqd*yNq$E4fOq zQptsyyC2RuGa^n2WjsTsD^W3{*<6Us7p&Tw5j)t}Mjt*E`nB|CeB^2^N8Fb;Mw?fe z52>n|&5BfYLq%pzKY#gQ8~Hxdevw})y~iJGz9*jv*AeESNtZ?}%Q%0up)X-7_bbP8 z_=7IzyZ?K>)S;u^P=gWepEIKmES?q#UDP>; z&5jKdm%=NACu1{lo0hOf5jGs`OnDT86|l$fV{`nT1hTCKrhmt?1(M+M4#||cCPu2i zi;Rd`O?#EvNL6bk!!L+r5$WYU%0hFK6~hv?0omZKl^NOT)sk3)cX-kAuW>i<-iWP5$*o9du+B)9y z#{W=&<-@g$j(;Y@@C%RiqCuOtE|vU-UhJSBJ^E%U&*gT+TK|UUXtfN*YB@xT8nplo zJ|Kv(U0uR^N%$}Kasc+C{4v6Pl#Q|6XPt19wY~5OyVvA90{_;&i8LqTiJ&{sKpM zCZvx`%*5|7@U85KJ>)8f!^tZcsi|;Z$ootl+<)iCY?#8g7zjRD@y|0QrgjCztnmW$ zHVV6)2pTi!$l^9~Ft-;N3N+3+Dm69RIbnj!<%)C2O_Rnu!CvG1W2ZZk{Nu)tg4#*` zF=Giy#6i%Ns zmw)-575v2Uy1=bV-581gw=V4G|EjP5<=3fR7u4sqp$+gbInee}ha!F5Sw zKXxBii*^>y`*+3W!|Om@_IYIA>Y*lYI{3nN>W!iv>y`A`9;M6naGAy5=IavWgJh9x zL`R2Z;{9GLF5d6wrcV6;$BXt>KbD*bTYpz{KNcN%pbo4Tza37R&_}-WDaZGczl)gI ztDFF^Pg!bGs7Wc~VcU7D_*T^k8E|S=xR%qbwGe10!n2orwlE97LB>9yf&smhWex6U zVbH0;EAY#^^mJe~-mK7*<%S@#GegZq-VKy>6DQUiadOyU0miYP1;z@*$sd&pc^Z}ESnZ2og7 z%kg6|c+MH5rFz6@Gl`rq`bOdw1F(>f(`ai5);Sx5)%Nc+CuU@xw)F3 zZQ{QNS;rK=v(~R2*+r)KHBas>WQ1Q!-%LiEWtu39hq75)h!YV0ig`?S*p4~G>l}c) zQ+yuyhNAFK{U$5%&ZMMxXM8;5xo*Wb>SyBm8NX`7|0lUQwqIdF3xCgDKIIgc;_aJA zyie&s2vdCZv?IF6Jw7F57j@c2tD$IvPg!LbooW}Yf}&G>%4)l4ja}3UMaTJ+)9j+t z?V=DA<@=N~?4mR6q7EpU>{HINi_W%-+My`U>)(-uKdBuZ{JQ*w065=+w9o3zu2~IJL#Z0?zm&ywr$(an{;eD`TLx!Gsb^gH#KTstWj&P zXU*ArC(Go#tND;^*zCl^xhn_8^R565JYc8nd%EDI?9XNX<^c|=?1-fYd75L*=psJZ z=9F-@ZmRbANTMndzxrcaW3Hq8gY8QHefat*@2Tpt`U*=29I&mu7Of`~0FEXPQi_4Y40i?4z-qb2@<=iowFKcxpxkzdqsI-Ta zH<%?7-Vu!E2~Tl}DzizK*s4f9$B@`+NIeJM&u;|Z03^XTM8hvkgq-a6-@6(UVf6Ep z2d^;(duyfMqmoP^kxUhcq-Tkwj|8*F7O+d7P|MBZkW8S9BvXaZD+bUj^2sZEI4fs^ z^7-K*XVTDjzvtio5u4dGICu$xp>O;pj-_PzU6$S`1Txd?dllBK-FF5or+Qegu`Byy z7yS1AP=IrFmJ+{xI@F;yFT?H_3BP?I^s+wh&8~DK^b-5ep1a-SWS{gTh@rF#c4v>K z36#@qxf}pv8OK?%6}J4e@JE)p)?ui`M>GA$B43>UOdP)FCjkel3tq zi~cBgtG4mihvHdKF&c5_s;mh_Gy{h3{|$N}7-%tJwCvyDXS09yBCtfiyrXXh84!4& zUyj6afuIFO)~-df_wBtpjv(;;R~r^XiElEk%2e_;7Donl(T%Uin4i^feAm%yLHgO| zobQz-+kr`E0*IU+Jc_fShS&5hAZ&qXEIG#dwS=8Ku8eEU)QR+^FERUT^?O%ze?);z zAlOiniVGyPkHHM$nmv+#W>CyP{2F4LzdXg7k+MMrQM|Sw1eX`R)T^!(jGdL&a|8JON_jkvjep$l*Hr~CN^H*hy ztp8*DoxNF0ik^|?+mI|{qwHhv?#8GAjz4~Y4fe)pckKs;K;`%^#PUH|#s<_7XfAZ; z>t_p6T4ZNR5${Ac)I$o*_1_D!)%B?I5q#yB6hQ48F^FPimBK->9C5^ZOadQZ@q*!q z^CA+LC-0N3Zh090tGq-Xuo zvS~q9X5i8h{fk$hlQja`4IOvNv^~7=uGT?DU`qC~S$5cKOu%D|o~dnx5%&n!d|==E zUw{tQSAaP#+&7ImPWo||mVg04`zp{Tl(XF*&1`7BO;|D z-@Z*1{a@0U1yCcEvWo$U|34HBRA9&l)=PH?_4-^;`byg0<1hA3coups#Zhmt9_9C( z@W5CjzA*G3)XjS^z9eHL*4FS0vymd!)+8V}Nn05jL=x1z0FQMKH zMb3HpsU5W?ncAhcbrl5sK&pU-@%_`zFIJ_f{9sM|9v-c7W*qGonjNe3pdBqxUN>WX z&JrkCQ|E{0qi6cY@d!bJWObf99FOOtVj9N&m^j>>TQ`8`qhmUQ^6`5(yXZ(cTA-wk z$>v-Z@2!5gTcq{hW>4U7cR5g3V|{*x_ZB+bEq&~0eZGPB7Bk!}JNv}`=okI*pQ+H| zYOL@1$T^k4qv|7D(nlu7nk?-{Acl9GPLJAJjqmKBe^q^oZ*9a!=<9njGgC+3`-mU+ zyC>~i*ZAjd5a**Lv0JTB+4;=S=MaWy+eEi zU4IpxA|`!A2EVn$euQ;Nr?yBvn=bNJ*P{!r4lBeHIKHjYAPG)$!}eo>>8rJs-5Lp1 zs}w0841qQ!)sfVBZKhqz#_veEL!A7}Z#f)LEXq@`uSNPXl-1?bVNqqQKle-FmMLiZTTf;xDge1p+IDKJ9#&@?A-}U z9qgY-(LD)+*+9*WZP`Fa=}#{8tGrX*BtylKcao%@lxez%d+1NW=$+gfd=CGF;hmZr zWR%MwsRLq_moQwMsk3#w=1Ti31ox2jjb`@B>NBHW5d;_fP^kUzYa$ zF0<=Q)ZU$NOKcwj4zj8%&sbklRaaE?C^@EBT^>KY6ktw0B}gT0!#NIIY^_oS6{Ia@xgh9OgBrsrVaA7J*}qn{*{cUv@-WQzB#x(_}?%$cDX$| zjXg)eQ&Y0kT~=RGGV8x1=2?jL>h1)itx(+!eAsF8T)5Vv=wAMe%|>U2K2@A&dT=|d z(;rbe0f43vFVhK%%+ZE^y6*ahcna7CJEDAEveE`^KjwP70}O{p)wW7cHE55LrE`?i z`KbL>A+gIoi5WdE0vE&b&+I#S`j3>=Wv4$=OEgVYbDP`qtwlpv-IDYPG8`Rp`C6TkR~T6|ZMhuaxhl$jG| zF>Nq|ZJ@+WVY2kyt4vZBSJRstxfYvNO{W_mrHoaI^E#u&?WgQcQKveUHX!k zX;|k4H@lNl1G;DWnM@=7lC~5Zdl5@jODb=K45xrDg{-YCefcVyceuCz)_x~F2Iv^B z)GNq&kOXD+7aC6fIZua`6v0_gIO4LXsKIS&f*kB(DtsUX+HgB`q5)S@JBZ~>8 zO2@v(=cSJ>UF>_w7DgEDZ69~;ZbF}2>wswD zGz@D_)>xImGJd%D&p4W!0l`tljnJ(Q4@60&O{>j5n1NABsOrA!Z)nlUbOU_-@UH_w ze(=1?HUC6^=Y&Wjd#JKWY8}F{p9}r;WI>9#%U)%?rblYXDB$l_}E> z3*6`ztiv_h9>@jja__b@u7Y~%Wu>nemEYxu0Y=*;;ONq~-N8nB%N@IGxgV*HMUN`m+m6SbCNl zT4F~nx3Q;{DI`z%=NXcg9l$D|yFdO{>a1Wq5 zeYNX(dM@LEIc-*=zni^CDN0kkm=^Z^RRfZ`MbTOfoPGA3|R!~ z9K1!!%BesVFDO^aK#7^oyf6Gf3=p>z7@Ww6=;6gD z4el8FyN6W<;ZkrC7m4Yj+#mI=q`@ICi6D6tlRGd@tR(eUE`jVUj0!{_&q-c`YzRN8 znbbZ_t?Um-<1G8U>K9W|p3{_wMd}1LoBhgp2c;K>tSgXb*}Fs5&cJ6#9>ZPY$@x!z zCXI7HwXT)90(&zfTY$Xy?(NwC3UfYGcD7A-ww4fF9GTaQH5Jh69%$l(jZ!&#C3e;RuVTcwkQle zuKM`D!Sj2b&wqzI^K|m=+--QIcn!`gGJle9vwf4vwFsM=3iL+GbOTSU!*@dK?)=a-`xh=`!T9%BdS|5V#}@C_tbsM;|s`! z3+UR;HT1^{mj7*B(7v>rP^+pJ{ig}%>`EZNOH;AniR~Z z!yHG@PYb7|YbZ^ZUm_?!RB=ysX|B#JP&<{u4EXK=JzUT7h@Gq%DAQCusd{)e4z_5h z{aa9xN3(1$=`K-ROu$eRYr#zRce|Q)G2H~_{h+yaR+rPnu>j^I(wdyUcHSfo;2Mb- z<);apj)#nkx2u#aR>%ZZv*!zGq$gVFYZtNak0~$(Bn_X8+d!I1DIcyc#@cO2EOLww zspTc~glt7Pur3zUR<+L;H=dnye!AW|X7$tj4CcCAOllgZIQIT`>pizYGu7`}ZC_@K zlBM@>@wa>_xwu^-V0Lyz*C0uKUd&CoWT8!6QO~#< zyf|B`7WStuB_e4uMqnNPWn;{ZA1HeJU2Uhtc`DOVKh{<@-|?S1CtE68_$JcAL|q<0 zT(u-=?Wla9g^ixSNz!6Tjx}&!29SOO*b{;4@+s&$PY;|#BzmetAueLX9YP15OU_5-EG`Nssn+02d$ zL)BcsbZ#4UF9zNJ(R65pXK|T+Qw_N`E#7RW-P8(8LODidX7OPq${T>xo%~efqsjk@ zq?eV>wnc3wEP$8dihs3il~2LCnz9JGhZ&yF0&dPZ+ciygK;CxTCkd25 zf?m{@eLKM&hx~dtD1@46tA<0aL+ph3v>;(kO3fNHnIia`HO&n%PN)osrQEZyyjAgn zIX4JV*fGsN;lx`DN7ce5YKQVvG%rXU#Oz5&%Jk9wLb0c8qC&gCmR!S*ZV`X&4?jlg zW0^2n5U+>cH|54kdmo$W9=Z8b)LWRFAEaZYPvT!*43VJ`ucha{p>vicykHrhn@iZ4A~0yQ zjv!{?)Gw|;NxY)Zf&BTiWE*h&Le)GL54iQ6dyb^Tt<{G0#{O0t20!NG-~l!NwQ zTzUNKfW7=6dqGue{9#lLLJ`#`RkWrXV8&&ZT$_rA@a#qvxzE|R{>7utUz3!SKz-@( zC)7m({}>Hro_tB#{y5vgvk;9K&FivLW@i3o-JHnE{M9$px#P335|Ut|Zu!o&Woo62 zDOcJNF(=Z-P-tM_IPvgbnzUT+w6ip7Wnr?2Hft=3AT3e%KneJ_FaH6qc|#m3`%PMT~OWFxIi)il8VK$WnPri7OjBQ9~Ms;P<5 z+gK*XLQ^47Gg}p@lRuU&kV9m!;K7~nF!q9NEs$P~xG|v$II$K$GzHS{DMAVQj|;Z|6VH$rk!t4J|P8(HCc@CrNdD+vvpu z2SXKJii^I8y~|o7V&i5OnxV^PY=6j{wK%emEi32LtbyvgLUNDsqsgmvb3`p>Tm%`{dTWEaEHxLY7W&qV%&6^xrR#( zl$Iy98Sbh{SI!MeA$HjYL}We^A|X(o!KQPy|B`@;g`v^%_WF5;DCS{B!BSl{JM+uk zMQH|_|C%wJNgTd7-)S3$k4Zy#D@|TSQ0BN&vp`~BKl*T@SuNKm3Dr<2 zY$-6mG5JaoMFkSRVT1n|CpntIs^Ywh2JiZ3XSrMNA3uNkv|hWWfo&Z8L+HjYIzUNf z?q#;g<>19|^IMbihNUjnfP0=X`d-UtBZ$UF9}vn4gndPw2(+t#&ZMI{Pdv`|(>ML%S3)NpXFcu*3)eBVIeNI4o=j<<;XD&cCPla#|#)S0{ z#&wmgg*H|XQH(PZn!lr1{m-i$0{e#^b)Ps4wyYCue-WBq z=rucRcFbLptP|wCrPQ@tu%-01-MNrt;1Q{BGDJ@F$4uO=OmGD`_b(@b_d0Cde{#oew zXE)kv#-Ul-_n$`Pr-6+CQ$u!&?hL@NdW7W&V^*P(C6!Wg+_I9uTHDPe(h_u1nRhEU2BAv|G_e}tf zANHrwy71^wwf90ivpI5UwXzcpbf3@#D&C=g%we%&=5?HDlD$Uw-kx2bi4ku9EfIZ- zNgMLSQ5}Ee0iTwC^np5ki5%dsmPn&zVWj=*Km_)y{n>>LQq}pu)H??~Mf@(WfKHx5(MAh0f60U?-Z) z!C>bC)t z0W4x~N_!bWp+ICn5WppVd3nbWjPk`A99i_$h>ivOYSO}nYkC)Nt{eybQl^G@h-LvV zyPT6!nAc;&d}<9z1w@>u)HX9rIB}RGey{mcV_hG7FAxje0Fx*~s6oInXXO_%l4Ap% zfK|ib9Iy&78L3IReR}k!lFYsAfDg;zeyaDTQapYAd%~~~3lYV``mWWRN;mKX71bd3 zZ1;T!jd>b%_|_6HGU{xV)r>M0C}}fI52=H>da^l;DdX}45Yp5)!`l+WJNRu~TV`{z^pu)$@9+9> zlpylS>KYsG!NXW58iLYhGH{Ugt7?{77oE9$C`xtMYS=*DTEdjWwUj2en{QW(*5fXup9#aV4tI+1W6x(8|Eise$xSUZFw z3UW!kJIdLdG8u~=hgjcGA=do^Y64)+{+sV-Aick|QRmBv2)~KVLbG-}XpVJ3@y!wW z*Gv$kskXv4w_k}VtdVxahlAq2A5IC2F!RO?VDv(pOlqcRZGxMo3?8a#Y(sq&<3B_q8m@j~K={Z>FneFpvjqJMtSAXhBv{Iv2?- zDOf>!m@&SNANI`5EG$H?XI1@}7Xn{OJPfAz1jDR(E}o@96s_HJKuz^-SJlfc&mW^0 zv-gmmK0jgKIc;ixk8RgDo{7rTT$v0O(9OiyST>obyRMO^Ct1s|bH;v#)4z-1hvF=T_u`(@r}+D@RpQAAdmF2Hi;1e+kGq| zaa~H{#`SrXt02E)r;51^sPYMh(7%As#GJ_iM=^9WJ*DquZ1^!rhq{l`^HPWOF(J9z z`t*`R;h;u3mV$^c*S4CN503%B8&MU)O6-4+5`Iwa0*W&f2>GJV;g{WX{U-RsnJYz; zpnY{K_cAQb4^2nzCpJdBhcJeN(D^Fz3b`@WR#T>JCp;nU-ljsPCB|Ob!e)kFy3cUN zu*bi$W{YQx(%*JrEjH>89byM(b#-s+)2Df=6LZGzDx}w;$Dkfm#Ek(&#}L$Buxwwi9ehhFmWDKAiN2m0P>*vo97>T03R=o5`xg$`(X} zq55maMJKm07%kR7`Q#a2>XQsqow9Ki)Er^n@apl`+fh^2FL_Vqk~{y!ge2CJt7*_i z>f?UCH;@hwpiQJK7^DM{kfyw9`&b#VGp_nuk@|GbvMT1SSRH@OWC-T)Y4#{Ulq-IX zQ;xaOza3~`uME$nVgFXs+$Uo1f%)~aKVX#Dp=&9!wo2k`k|EwKrasd{m3XJMiQAk0 zR2i1*hyFUFsNwCJwRLC|w}Ma4GdurD2@*}v${o5CX=#&+EaCvtO{F;I6HFe^S_-Mx_#KqF;PSy;*@T-&ecvZ$o@w_M&{^ov_`z zd~(7?5;jFkF&Y6XL>i=Y0q!OQkIyO1euj}Wp|Gr9cq_0lZQEd6-x;b+cU2U7O)M}7 zf~;`{Xccw?(O8$L)$Y_E$R`W`Zrx!~-gFaq5a>9o#knB3HT{5Ay_FH4+oJkUeH%ia zLCJM#6P?@jlBJZI=ljvFoT|EqXj+Mt!?!O56Jigt&lg3Y*KIJTpFp9H?$5YGzx46f zs2{$~pK}*^p*IXUaK#A9Kf4-hZ|aZVzbmPY7y6L%`k!4;1F?Jtoo^?%Dsn>zGb=Jg;vP z7AJ+I0X*5K&KH@G7r46XU4Z_40{?^YDl8!?+hP4~body`dy}aTXuOr_m@_RJ*BUTO7ux zYJWUkhO$ayLAZid2mRrLJImB#a+B#)%HQr8$(#AWK!ZbuZ`uk}hig zINqRs(V|mgdrjI)>y*LX&|PhVOkS1yu~rJ`gde&53>P1qi0||{xH$BO5_CoRsaofo z*J@cfEK@*)+M=rox4;8;mzj0*nH)T0;nom$nDm=n{pkaka}(mHwWx{XE_~cBnC?n3 z&pgtKaOmo;e-&)RFXl~|zsq9F6d{s7LE#mc@gx1AywJ6B=g{!d<|7dPD};kM_N5;f zCwcBnZQ{#KkK~y~BMS7(;w;mYE-9e#jUFgG=W8g-+&h_8W5l?gaiZ4bjBzQ> zGgNwvgp#-6ZzD#Uiz*lwpy|Sfd{?IwntKaXyBfGwYdN#7(p7FxqyoXefocIBx3kqh z_4+#J)}~y-!=cZPw@D*kj)!!yv16K-$!5aWWZ%E!CMa*oAr&wm<1c876k?_CNBZXx z$}S!eU8^XCjAB)5@H08_VV}X%Tr|wawd=5H!9OFMO9UVkBg?S7PY~`E8-ZKd&RnkN-IBIRO^*EALI72{yQ8pq{7?! z0%^g|Oceu%L>~=}lf7^?$6TP*>2Y(vwm84I zvb8q9wbjW2@#jFhnX1XR3kDonZG}cW>eiI(1!zu&%<#%AfkED=WGLqH^Yx5X1Q%$z}8?q zDf{=$#&Qtxj({itq28f)ktNmI{`G3KYtx14Cw%Q_1bdn4e%g5%s3AyV3F2{=-wJ{< zw_yh=`t&C0&0%?gL&GslBKzk4akNWKTHn3?wEj-3;_r{b9i6{V&yS7_-`@nfZ@M%l z3!<(}FF5>vHKDNwHZLz(mKIRJ@kdFS?hJlkes>0tt$=){k4vi`(EDLpAfC^;(A*o- zJOecU`YZOl6|;k<^DK-8H7zV9TJ{#x7-alvDcj#%NKGxABO;x5PoDq|#OVovJx?O{O+Kb-{xy~YYM^1{SUEai!Og;WsSTa_owCHeuQL| z;!nXoLF)&eK$c9wleU3~J^QA1|AU;*Z_h{J6q`;#kH!Y;7+*cXQjV8-cWH1l7^mggqej^mB++=+G|6i7j?SXtEelf0T( z3W(M_)NBBzPO$Wo$9I;MzjmzA0dpz8V#|FRPrQMLr;<0XITq5pyCJIG^MPyVO+&yJ zEKx0zFjUC+Y({bRX=QTMlLEwqU;3cA>RHMX%751JnoGxdlfSKfbOxC#Gq*kQG;o$}C65#0Q5*!!nS))!ExK z>M(tm7+A+Qk2X(Zis$|cZNkKZ2npwpmxL{pmNK9{7hKJA zozAMZQ$6Hd>uVnW0hv|GXLicT<$1>GY1saj7;yf!?PHw~|0Bfr>#XBz=LU%Fa@t|} z1}`29T{CbdpcTT^3fnmsZSI90#Kq6}W{LAUd@3J|pzg6NxU-MXedP5mrn}9vlH$!9k#wjDS za08RMy-}1~+<^u3Ai?d9oTu);L*RC^EXa%lQ+5-DVYNhm4@41&EEsww8)~l4E9CAu zAY-rhxcPRGvi88?EdzILqN05epm01U6jw5^fj- z28t{rAu!;zbBn<6NLo!#)cEtL=4k?!Re(gy4pwc3lmhU67lUjmiu)lj!hq9x-WAx@ zw*_Z34g960)fi!p292%wMGStDAFk=$?0oUWODaDVas_JZBG@e!WFp;MqJyK{;nykhXRaD8=)y+IDl+8?&g61#GOk`)4*a@Zn-izb&RuIuVa{}7N zG|e8Kp-m_L%J$<3s@H@8p{VkPC6sqMj~sdKGkdW`jID* zyfd5mt;*Nr;!p?Qhf04{j2iw>igSdd#DEs#s64op);AKytdF0n3|Kc+LGf0l&yqu< zO4#|sJHBm=IO%4gwh;a19^ZJJ{vC)I|F4WwSs+6y`j7O;XjE%*q&d3oXw-DXs~D{k z+#;2WGDDmD$*7bDzOs9MGbAq;&f5gX?GrVmi-O{y6tumifqZUH8h0Jd zEg4C&;~TBvN1GmQTjY6;3X6ktV&j@nR`ln8mP@{g8;g3dv_~3a_3gqK0g8Z>FE$^= z@~#is&WKI8ElwvIIGRu|GDY>k1DrqkjVV7xT%SUKH=BdAHD|@;Vdn2anl$uRhr>tq zgRnuxYt`?Du-(()^8+WOb*MG*&$!uf&piGlEWb%0dlH{9{TXiX-!=9;pSuEuq~1|u zW%whH$p0A^Rfi|Fry_)BY;Lsk~_n_!ks?Va`9kegd{+A4YEIQiPfONR3 zm+&5Yn+yy;gE*owd`7J-2t|Pg1EdnH3m1DWLn2*UI^-Hrnvie6E@jsr4c1T*(t{B_ zStZRbJJ-*alUntglV*L0KtNTYcMVbw=SSxp{re4d>=i#P-m1-2H!qS|- z7OadDA&(Kz7Du^YqP)O}M{31pt#;==nCmpPysCS)dTx53QZ#xwlM+c8ms5a>ds1}9 z9QQ=kp-9S{NqANGs#6`NCvNEegL*$6<-!|hH1sq$5*z}a_QFmV}ZNyIf-dK zZemkEkCThiMfAmtHGcf>gY7M^a09y{&D0z^jp`6WO_`*oZ4%k{*s%;^aW!a}*+x6g ztPAbFKLmMcrXv6X3qd}e$53OGxvjoT$Jh@V&P!QYQTK~xyI0C&x5w$N|B!oG7$z>f z?0;e^!{2M(<~ft;E~R=@3rwdmN5uEOy83OYt*$$1Y<*}ml$G&RsWeiDXC5eYcha=n z9Aqt(U9!X+93*ZedM2HhPhip^NN zZ!!)D{q96(a9@oRMzh3KW8`T#iaD}yZ=F#l5&K9uZ?q=bH+g%BccoQoh_A9}Ma_gg zVX=}*M*qg%+GNtVCu!4f`aV|#;vKKhWh{oXgjHlE@j|h@jR3n!cDfT~7++2G^mlSs zZENx65(D7W$77^IC5tW}sphZg6p3)3bFf%cGDX<#s6Ua^ zO|DA^z$!soWm>dEopu+aHJcvH2T*fd90srVUFv1lBAqe#%VP;qCGcEv{Dt$!)jh()Xtj!hK<*=g^L)PO z*8qOampms)?%vW#?!sa15=n;bI1}9ZdsXKIx6FV%{{^O&jk4Xwp!e3^yo3?^cSOaFlq{Urp zU?VhAkX*mfVKT+CV6uM&5lCHGsQNf#S5ZX6+efA?kUS6Ptv(GnoVgPWRtlDMY2NT4 z6mjl^%d=bCuQnp<7q6}%_wF1uKD7H*Gt+GCdA{mBP8sLe8oR|tF8X)~;UVbcm;wy} zHt|gt;_ySFJ~_Lt3x}TK4EwKo%?2$q_H87lT9*c^M>jqq{@7D+sS8IBKCxs* zXl_vhB$Qs4uGmfn-(8>bo9j+)$WlEajuf@PMwDgS+dj6B{U`TuY5qR_aTWD<{C-#9 zvsrji6-98%Hy~K_3;y-Ia4*E)=R1HMoe;xr@NN{w!WS${`Tlq^y88Py!3sro&^j2T zQL7zLZbTu@DEd9~Kig(*ap}3p-~vtG-0sQ#_g1Nf79tp2TgEFXT?jeZFqm2Mp1TInX}Y z174c18optoutV!r>>0*@b7~aQ8EtAX>=4$j<#?lNvl=-K@1AIAf`%+oTES2sYmaCG z@${oLYW@imTyB>-x8|2Pq#n>MxQIf%8}T3kqpuvL74`wQu@}RW80QwAtt6VNoI1NE z%+i#4^0-P3lMTz^h9?QBr)|^zf$kw841TRNy|& zfu!-*8IHDt4K0$EggKqbpBvdooO_U!u^rVFjyu;qb8@t)_%R7RJ^~O*IVTijz?qP5 z{33`m4YP1XG-+zUZr=$lSdGM9#C*wQ@%()wfCk*QtzBPSxiwe@((#bRVytW3#WO|O z2u`amRDT5IqT+z;zJ|0{ZpFMP?%C6AyYB9=xTx||NorwOUR7^J+q|KL zw4j1P0)x-*@s_}>)yO8@kI+UTKdv?B?`YJ*CF6Os8M}_)!K-;rEy3$4O^T=Ph@Qbk zY%YscD^-2VaW)OE8mpfy&J%~1eUXG&i-}qzo}b9>@9RkI>#zScl_xBd81un@`}Pa_ z|NeQK|IhwFKpZrFic{-%LO^{-6<;0WlXH!D%z{SNT1Q6;QVfC4o?5&TGLExU9-cJb z2>kPylD^hn%F09eEOKAY(Dy2mcmFyRxl=8gIc9)(H)p?K8fT_$EqFRL<`9(WdiB!n zGxIXNHFgDj{X{S#7@}^EvtTRPN7&vww&%R6Z7U)R+924P8=G`(1bPqkIV0`1O&bdL z{pi`qE6BnyV+3cNG(`!GTmWSLOq(jn_BBYJlzmYXb=%c8{MLRHqc0i zWY#veu%gsq+t19$Wjio;Zpf`RrUvqnz3IBlHDQyJjS}^C%GN2iNsO$bA9+`@5Pe$y z&Ty$TR=p-cE2ITp19;$z)-C6+Y>jd;l~R8elH6%U%6OwsWfZ&@cF?qGw^rTWUo3?3 ztKBM;M4ZZU)(k2(QqLH&5~-;cqK>s5FZO~UeW+})Wn%uEFh1=46b>gfa4%2FsGccA zNKh*;ZaQS0m_Dl1W@VUf*Qe*r=3?jMl(?toI`#+6W=Rz50UqVn=>a3_h*U>(OH+%< zPqmE(Qd^{4lIfOP_LimM=|3NP>3ny;Oyl_DPE4drt#=8g@s7oF0*pKDb|LTay-iTBaL6TIXH1i(4rpsGRcu;5?X zi4b?)A7xpzz}msoq6w&5m3(SiAk1U_o|~(RTypU3*c-~g1-=Y_sr-ZbsDr&k!9RH- zsr;%kQXfy1wTm)z)6azod57^;PkyrIuZM>fQS%Y|wkY1meO+c=EK4X#Pytz``?^ZJD1Q|ze7iNMy#fhvjLRB?)0VKBOfMu_zfWQllc zXD~X5sAt$>IdJWR1+Z2FF!1Y;bZSA1KPn2c-70=Ziwh;8x`?#Ynr-L!$If;U2gF|gQtg!Nc>yB4+fI{*a~L8-jmnD4y~K!$z2YTIh~6A){u>!a!0oacS?&iGjSjx zA{DKQY$V~-w24TwXCMMo6WQ2b^(*LU|J2JQA9#Y%_eq6W9&z?Y1_yIbr;jx_44Cj$ zGen&C|G2Ibd9(&^F#IB^_Wi0Ue$8DzQMaMbe*O-CVs5EO#}hoU*H z%krEcxO8jo@yzPDY;1aHUTW8JCMFK87;92fT)dY$Gbd~n;5u+Gv>w2MZhjHvC>M67%qs=1gwE35#3RwzpS=cyJga2Cv(}wvj!dy5A z>##`fVf$ANEp@PLi_*Tmq|mzk59f)P;UEA76L3Mh9^66KO;Z048MXTzs7c{ z5I!UO05-1-%g%vaeJCOGYc{BcZ(y(6X#E)C{X=9S*0kWj6iT~vScox93yGX4##ujW zS%`t94Xi|dqNF+hZ7;a8LwsKWF-*-qT^b|pMzc7!tlT;|t=6dJZ<%b3q1^PNSKP(p zd@Q0!UVVCwvMd8n)T!zEN!HGY0|X6bt+8EJsFVTQx(G>4X00hB#ItMWf^CN72q+?s z)BLeQKUQKOe+}hqbqz~tFsZ#2?gsnJy{->Mv%%Y6RByngDs=rOxk3W*19{sxLb=rM;_ z4vEK^Ni3rS+Fv56P1JD7t8j8i?W`Lw@--~@B9%BGF*n}HjN6So`BDKP!~|7%`*I+! zATOEh#Hw=WA4x_{(2YDTYH(pg^h8RL9V^l#{}@dzJtiu;CB$UIo-mO1)*^@~JWN!2 zl8dk{O8`6&!QWUukl%YxF2Kr}mY-moP^N@z%xgJai&}7gK1V@fpA3b@T6R$NM2WwP z34;#+V}MgcRkNHZCi5)OeJwEEuY;-BjFXB9nUC3X(_oni=)x*cOD-SR6gEeDBA#%L zLJg>b^xSB z69YX7q^#!}9Z5Yk{BowUj@}nl#(vz!zWY-la;E z7p=Lgy824TPK5_6l}Rwg0y?Cx;izB z2_sY_3P%pWpEh-0E8a}xMnks5!FmO>16@seunZKJbCNwy50nBB8*qx8$h0@Iq+%MQ zOuj;qn+jv2B~=*KKEBnV=sZGkrz))8p2+=hEYI0F`)oO5L>b8oEG$CTSC|;%tXK+J z7s-2R;)Z}!FGfGcCa7{MrdmT~ST*=V&c@D;Azh?V)pIMOFr%~f5_J}4Qg01t-_sMe z97Fgm=f^IfC$G{yYMUr+MrCEIuJ}JGneh|K54xi^4*EOy<}1!g(mO}CE}^xAZ!rAC zb3GZ5*Ovzb{zvCevi_sHBqmH9zKm?P2=LT!iTo#W}A zJK$$u$wQGdAh&e2JLhxbW=+g)sDYA52=91a9MSHoCG1ZJZj}CEbjyc)#6I2S zJdsGf(S^~gC)w!Y9C{H=ZJ#~5VET8&Mx@T86^pi;$BfADRg@oJeU z7}J%%{G5!jjFH3!!1}fpx=G4J>tISoIQrF!42VJ9WEjw&m*nJ&QRYts_zCdCDg`j!6_rmaTt7q#XWoSC{1fIz(WMx zXJTdy{V#3*Gn9!)z7U28wJWkQ1LY@eKpd1%f-CwjC72y;$`4GR2eeaV{)h6rQ}F_k z-}54w(x{=IaV6RQrHTGqQIw;6^lYMU_FEzM-`@o-xT>V! zc#%9YFt^hObVRu#@vDlsCc!7v}ArF{fGYitN9kz6k zK#gNfH@!Utu&_ge+Uc6InDfpYL&$Dah6d%ydQ-Gy99T}t*kV`7shWwjcs0joFwU$d zSf*!|9;y@2pZgVwJCft!DjJGBIuEQNWkBJ@>Kfdq>P7|UFmqjWcSzif0c!_ObQ~J9 zL_d68Lt-Ea8jJ=0ViXlFS#3a+>Q@+=ZPu~7^~!?-8OtcK+YxA+iSW-(ZWAVq<^q>4 zQ!43LaF1JG4#PL{NzYp!>^(*owxNDW_G_wK$7{?dmFJH^a2yKA8>uK+uXM;T1{<<0 zlyJDC$_ToTP-?<>HyUziP%%}vFxhv2%DVT=iXC;4SH#+ICMss!3DZ`Z6cbFTcczFR z?R_MHx@;KbM*A2@hxLkKsnWPhVzWD{?M$s}g=%}1$w%2VjnbaN>HMQIx-2iN-Z+ds z1JWEypy63eoVCE<>%_{g=PT9<`A*<;J*1kW#oD;~rODI)RljDeZ39cwmgPZ5k5@Yj1pSF;DD zzQ6=JT${B5p*w3+H+R^FK?7IEl)oOZy+LS2HkhRiPeq>JW;O1HP{d|uT){Z8t=Cbp z#%+3f7GScaa>jL%4Qw-(dSHiVaTbf6^(xg{OCXMZ(&uUa_tX>uV>a0MGxZ4^8<*^O zw6M7QhP4lT$?sHS)iKQIA`MT2+w135a`@Sve^z))<|KMhH{3vDj8qap7JS^rGlOLGqEI9h| zY!{|Mx^nArOM;_5M%v8V{IdCpX51%q_)`iRog!^jcrr0*@&6pyCdYvA{m_pUVM77g z4e_iS+e!G1OZ7>~7fJSj80o)6waN4W{$DJyzK%~)OEtxU9@nq$)r4o#rrl1;7QPZ7 z`@mv+?1MwOechsSO#)aU0>26luE}2b(g&n_QPifUYObt&>Ke#+==wkaYjRgH`?@J5 z>ha5Cl{_yetmQ=J|2$-VslQ8hV!q{QkfufAJbM)(gCIa{`)3(`V8(BZ?TQ}BM)g$$ zpR9i%-^9yLNu&$)`l;%)T3sW4!f*yBOW&JWbGH!)L*l02CDFWy!I`O(nYokgcQG~& z)I&eGFJt7CF??iAMJ9FI#r&jzjBs;_;WiPJ)P`-LR{G1O=uZQT#CvQ)rNVA?#Jv4d zU*;DloNKOw3=HVom1T=EXe}lfe-Q8%6cQS4qBXVTQ%Lo`M z_l4}+U$d$1`ufVZfn_k!ZjyhVRdzA=1^@W~^H`Sh4Do^D&Go6tPaw1TrORb%iuv;| z`a~@Ar+XGd-F7H|c+HslJrP^Q?N9!qo#gT~`F8l4zc#a|(`QEC(cv+~c|8;em!_;8 zKDf^+q$X%TEK@v)=Z6`M{A1$ct;;cIKt0Jzwl^B0|i8nKFvhB25_()oy7})49qj_GF$upJAGlsvn5n^ zV6$LnpRbe=N@+SU+zh&{L z`q;QtNe)uZRH2v=;=h$I<1G60zZ%U&&nEII^8O7|IKmd|k>~m{vrnjy%_8-H^4KRX zG=5_L;7F4X{9ZfS8s3rUYcl{6HbPpLT6&*}TFu=r;b@t?nx7=Izy(DkyicH%WSjzs zvpZ$INXoeap-+rgUETbCI^-2J@y}&p9y-+>)Kd~FsSvOW+OE1|JsuQSzVkAjoC($H z-BUikwLIQ2Amj*d!|SutPZh8i7pr1;lhQDV->&)q-g#dfLj>1&7Auf@Ty<{qA~o39 zHuo}Y_;=!VVD7;hyx(U$} zv*U@PK<2BDn2!PuG~Kh(V!!T&U&7Ns^gy!*$G4sV{0$LVzw)zw-Mjo^{g5l$u1Chy zyyDG}?alJDU0t^cSD6IViQDf)>Eo_C3AeAn=~ysYro|bbUAYaO#ElfS&y(0TS+=%X z)R^@QoUrO|XMJwxEUCGqGu=1r7#PF1YPh~uPu%2ATO(HgH*PAcB$k!x_bLc-CtGKmV6Le>{YNt15p~UCVOD>;kYV?zV z8WO8Vw(9iCvc{kocu2p{uJX{=5xaz)A*d;>=3IDv$FZ+Ws_q)Hw5{-=3V0S`x_O&P zyA#>ujx4Kp@QYq5y)ngb2UKm|#Ec6A7#Hhn)tQ=X`JUL#KRKq#kDI?%Oy5@~!)tOE z=EHv|RLsU!KWsQ-dRfDB-9!FLM)s%$@{)7Ms+w0WO@1cyept)8gcGB5^>`O#^sp@> zf8)HyJ0B#JW&>dwfMc9vY+$u}=Omx>CaWJRx*7G*&4%*K3_O$UMfrVm%jorXb?EhW zXY3v0joJ3&HQ9c4b)c+y=*utO?M*j)4h;H8ZIBw&gTLsxFmbN8KC8Bx*IdR0G;S*L zWQcbluR<3Xt()R25V@nL^E%mTO8|nZ8psca!tl zZp@b{E(!=O@;lO@>1~WUl9{X{hf_L=Z#>9czyF()z)`WHwU>5NzZf`>zujYQwLR^e z&>r{+C>wz_5V3SFMDg6X)Dx2RG^SWN?*n_nJSYbmDTb~S_zDaRE~X#BMcP096iAEJZOF)ViB3!&H?t< zZQ+$=cq#T6FNCN}*YimA@Ee|q;Yt9g6ne|MU|pf=qg3hu*;&7 z{Y4j?B^ELZ3bNYgb(EXx=`0l^@32ThpzbnCf@tHX&`o|8cfzz?db!TC8w?tH9vXP*~)Z}>_HxS>?^CvJ0Pl1;@Md< zfZZ#UVlYX zoaqSf*sMz)n7aM;Ym?bCSD@E$Me}z7L3089xD8#ID!baxydX6>Q>BrFWv&{s-yAxA z0Dqy)9-iqWoIQCSHW;{oGw=DxuCdjAU@?F9P<@TMT{QKj*cT+PsZ$9aR6kG$tvTi( z`v!X9L-H+AAN{^Pd!DqI6fF6)dt@Bmn}t7dwq;LRr1Nezc^}mQG~lm4>g7-zB-uqy z?5OWY-pzfvweoYD%AE8`oy5@bHp0U=zpC-4pM}E+H@;ut_zOzk)X=kqjYKQg1=ZZWI0_fHdV)sZG%@B^6-a9>KJj3+?oviLtnoh|<0{3u4q zl0IG$Z3c^b=`+jQT?^Xp!){zn&uBLDM0@XYj3bg2+eV?_lwP z;e3fdx}(O7&!3Yv)SxFG@KnFJ;Eq1Z%^811`^rM@xg+}0%+)MIAAYcH|O_uSBR~uo~@cUY!RlMGxW+{X)ExWKPvr*Y`R2&_gs3_B`FIci`bPN1WE4b`x zb)uUQ^}K-&50oasYR;HgF2$#eDuvzzm82WB+RWoJTO4b?xsObg&5uP{o#wj!G?pS2 zlH$czM|HfW7!NRYS}67H(r!b18LO84Ocs|?HOtKRdU!CnJ*^5f|s^X?iBS2?;^fW4gFc14*Mr*G23jB ziM!N$04UjX?1B`C*1DsRT%NkdSjg@m#jG9V3@nMNkJSp)_ zA;=Hwyvl3kP$;<~xeS$IrIIVEXx-mT8Jd~fqsite&%KJj=3}c$tEBXS@V64K$Oc+ zT|4?+si3CmZMz@pJb!I;FfjfIyAeRK`?T{Uw~#Us_F#J=dRk0{e%e3B5QFhW9G-= zu``@t=qUO$B^%uhCqXn(_^BX#x%o0%Rx(R)u~+YFr+hvObdv@F7gN$p^SCg|I-sg| zX;bM35z9hUu1BfYzBR1YR_PJ{uNts~%WJg2_X>jj6a{+!F{2N$=GO48~T$%&Fa9YTZvC zHJAjX73kfcVpZ6E`M@puVjxxfMY&w!530e{V+ic>F3OREr|Rqf;PDn__;Q44<@OYy_s|A>bsSa~UfaA05x|DcnKJR}qr7~H?_KN#sh zu<3sfhJOf(We)-AKj;W8T`?CM4G33LRK`@r5~?SD+i(q1L%3Tgko<02t?}J3p3T;b za*v{HRMK0W-!^uMt_AXMserdb*LSGl4%V(mY5chhq*A$&ku8DeU+!09KG!Gp^*dk= zX7Z5|dYP8Q{EKX#LTXl$WAr5Q8I#tYhc^=Yl|jdPiuzv~-EDI9e8$}DUxB1mr;gT; zpoP;*w)dx!qjgPiRh+0En-1jb(ywdNJv7~GRY^kj+hysR!g}reo}}V~+^Ir9J%_rmq+Yef-dZDMOh(N@BtBkCUcJ4aHL@J;-MPd36Hp9s0CgfR z*y@^>VYi`2jnbIaNv-P870|NL>fh^rslo8d<54wPccjPF-P@$9Qe86h*Az*CyiQ@T zUkDFolx?69Nr8gyR>9;k0ismue!TGm`Z2q|AIXY}8)^Hud(~~b6+rYl1y^!KpkcDN zV;fvrSh7?B#TCo+yzJzMz`ED^2iEo13{jzVqu_qb_hW(OR|WANEC2z@lW#dnc#33~CFG1^zRnOf7c3m!1al@SW%?$YI(y7qXsMo#cONWPNeq@Onrrg}v0*LY3m%dL z6Sc~SU1U7>5p+2?9T3@LVjM`ycJePZFu{wgmBVJwsAIL>EuVW3+~|>Xo#;3;E1O8k zGgn))D~iF_U-vy^%>cgyK^XZIqtHUtEO>7}2xtxnDrMgK6#brO<)i4@+_{V`b^_Ty zL>5S^qHGY`B$2)AieMimz3zjIKOFck!yOiGcB9Xk9|8=F_n&tC{~o>cTRw2Ybm3ia zTmVs`4LJ^@bWMYo3&xvi^Fo_YPilnZ7Z^^!H8?!ZDiT#A02gf;XD9?7@$Jwt|S6iLl ze{bt~oFGq!b^=aE)CC1+hOGa9;It(K4*+S3JnUOt7U7e~sA@+4*~qyATb90l=e!dh zmX{kz{|V`D#>ZpzHwW6UxAwx6H{_@+ud+9u=sUZw|6tRRG@Q21iR9-aJL=By9yUo` z<1SU(BQg5Ud&_|?@|=8d0gwj{ z2-kPy70U4C8T;Ncp#Q+R%>sk_o>WzZ6?xb6kFEu~j`E_*Ps7Cm|5R`?Wvka9X|wOD zIccKPO+8613aVQWa}{e;8CDGuBhl{Te~as}1Yg?@MjNAie}0 zxM5LnwDm7aRaWWH(o;BbA(qcG4``uMq&q(J?`mNkYAM3bP0E|1X@cg`r^mt8R37&= zB}-RCB2ZUbNkx#)_tI_tE~eJsR#P+eI_OVz_)d(mEh<8j@~URUoTU*?2R@@`d#ol) zXCzEDrz877G*ijJMf=AWg?0>7L5cAwe07aL792 zW`aLV$VW1Fl?5-KVA%_0lk4Pf-yQQ?RKd3~qcDq4*q+ zoaSXX=F`jD{Qyn;iPGD43AeO)OrGy5<@XO=^jfO(Bev_(ZpdA6A>y-H>ZcS;oJCF&ws4tD@m_=#obqm%v*eWKN9N{H7+K;q zrSy&+r$ofZ5V^g)6xUO-^9Bco>140Ty0 z@8ZW#OwdMiWf*sV>4;uaj*`mSj2j;DA|!eHMaJWb5VoZmbVP2^wdMp?WZ2D@RJB24 zmjPm=wrF3O@%@M|lp1m|$G+`|j=~Tt@tLy%!e|cJ(DGC$Ea?s#gO+%mAq1jO%iHNN z;%iO**~6zbPAwK6OfAP|7hZ7?Yv2q-c|wCz7#Ky_&FgN;*)|O~t0=hggij8@P^j)P zwT$f7Ua@cR>BxJd+?P3xPVYo}hEcE1C&nZ`&$4$xELm<)Co`aJos?IMPMr$to9c}M zd0z!=f7jMfCC6o_9B3gMe4X`h2_a%#?Mtw{?Eawl=k$E|#mZnt{G7P@F#u_~wX-K| zJPK(^g!IBquiY<6V2GAAeu_DsEj6SO<@x{3-@{M(U__o~nDd%Kb7B>tSrrXT|9Zx9iFE3cL6XF=B5N|S z9GR9Aj}DL4TAPxyRg)4t;sn+hYX%1|E50TmmrM6flyFX(3|xIB=R3uhBaT72yoZuD zdq1?05#}Tx8@ls_DeJ&WW~xaFZh+Pe;Whu_HG1H-h?}ZL$2YReUJMmqtsf&F>ei&1 zU0kz&Bg5Wl7?V%{_cPob>-(`g8$q<>Vs8@`NfPY$9>f`i($W$sTr(iCBS9{bPmd@% zGTBWbq1@HytDJm5@lc0>BPVUVJRK_fJd`};5h1d)tQ_T0{5EZT(Z_v~o0Mi`k1;`X zQBM(aB8W18D^yW2-J?&}gWFk}<_!a~qKT5Kyc4vnM<6G^7y4__CBNkx(w$LOR$Uz* zmM+Xu%X!FP*|Cymoe{9!RCX-iQ_8+|Ag(Qi8G8Ox%>Zt%b(qqVdAH|83JDAbvAL9* zB2@e=#oAphrra_~Qs3|B!!4-@es1gg3~Bu3{R1WJcfkfpIppv|&Yc7K;RsCE9<42N z_ybBY61}{m!tXh9k{Gv)KdP;sE(N|sF2#t)j6cy*c=Jh z%tXsM30o_4Njo5}i-4lIkG8C7x^A!%wV8wlL7a7uFlh+(R=7za(^7X%vU@-*ch#vu z${0(gFl(=@%+SJvtNjr;AUs>%I;dU=~W010tL+SInRDbNAUOon5%RrEoohUx6 zv_+8O#yUljBMl25*?5@~mQdH4SaxE<-5y{=&otJeDJL@m!&T>Qo+&MW z|DHo5;te z9?%=;oDUdVJk|t9jMzAg|M1KfIlYg)p$0XNr}YyfA@q=;Z^K^W>QX4q6bd^#lahE# zTkqhYC)toW^(lmP@8TKhTBD74y@!sg&Tq2}3b{ZWd3nRM`$2B1T)FOJboC0n{&C`^ z9yB#$e}4-A7x5~xN@Su^9LfF=1z57y$OdU$u>c=Pfu0Yt8WrMC`<_jR3h~p+uZFn+ zA074ZmLSN0Pa})dM+U2y8(yO321{~`g{hfoOH-%B)&{La!&$+O!nsW)xmbUpV8>sg z>_=#}0%5A(i3Q2^XSJff7Z64-xMVpUV&2H2JCS>h)tJ%@np+IZCDxi%OL{?fV^GL- zW&s%~BzG;+Fan1zl+==ERktCl4b>8O)B;aKU&>^i4o$mrOCj{v^kC$f3olqR^4pP$ z#BGbblp{W-a}eZHHZ)qmK<>H+(^8Bx#k56_DztoX}shHFscg<&ulkt$~u= zEWrv;Ql4@!6rY<>+n8;lh$j2%;I1194qtT1dPetjf!EVv5cUfnD;SamEi~*AN#6@% zg%$&vyHPMa3Y#c)#^F6yq%Ddx?=X9P|46DDKo z7dtXEDjg|F+#8IwFN`iD9F4&h9YE{Rst`QE1z#r1DpGN?9rABCcaOv<;emeR!=w$>I8nF!n*mC?4&Q+#9)J+%^TV6<1mw zMqP&Ed;!E2BM&Jc!6Ce&|+Ix?|FTMk2-&GL;bEDZOyqLM`E6eOvzIgfiE^ z5HzgZV1DfnPDU5a%reu$;}D*HLOypsF)8ULT_rd2CkCaOT?r1~(i={iACffM?r!jj zG^XgE^=!SG)>VfJ5Y~&l+c533^rMw*y~Nvvv2-dUIiYW#9P#l4tL zCoO7$whHe3-Mc8M!#SW>5Kv#UOT>6pA5?5@BHQoioD(tSaN1rfu=Qk#zr}^DxHRwZ zrK>6G%GQPrO&|H?2xe6FMq%iVxWhEu(}5`K7s5c_Vt*gK{1w7%-y3hu-n6y_n}IA+ zP7`&k8}?3@7tti&5WmHm=xiWCjnlhtR^c9@(#4)8L>Zz>KJ=A=HNY}b>U}ZGKc2gi zc~leMC8l{ATXA*nO6$4FlXwYV!I?9*U3RMO`peIY#q7x|`~lc)o7r;2Y`E3@#;p%^ z^s)t$hPW%5zd1V;?CG_sX8@oQErseM{|(t!7YrF|kslD#uh1yV)lJ`@TA2Gy{?7GL zRY(kD@XVccrtLrE2$TSe1fkDv@dp)&c00eBvAkzE9r7ZWlIQXJb+x@mV@&Kv5#C!% z$}}-acDXAMVa)Y^|H|}i4=x=Fy0B_<;n4Tw!0)ZUPhm-x>XU!Ag?^?>wAXCs-d(s$ z6e4&98M(zv^$D=77bf1i=8d)N$|{lki%eMyXs!he~^``t%r>F9! z{WMXpHHmw)e-9e1B-Bu?M9*_}_5Hk`Tt+zmS~*fEFj`-!;wX_aVqXWbU3Hni&NZ=>jz4ZbBQ~XqSOfD8M1R5;nU&&S$SN+jCV;OuB+< za?)sY$gViR9RJB?Xm-q0CcE7GddrvL!6OJqgPetcrRb@SwtQNCx8$ec3m%~B_C`4y zgSKrelanYIjk))q*_=v~kWVv9;(M6M>fVFd5KQ6|6&uA;E={t}Jxq8e8404==YkPT z7V-oRzG$cpF6U3m;`y$p(!x`;sE!HMcAvSnM3Q)q{l%r(om)nZus(Mi;%HsCp{`}y z&BWv-WW}kSrEey~;!xE|bjL{)yCV~FSOj5Xar@oSc8{6{YNd1{u%*zJf)MJ-3F^_O zc(3rfVU61}ocw!p4ib8PW)#jh<}rfsNcI36gL+}>f@h-3tMXYHr4d~BuRiuByO>CY zTu=*DMj@>kwovx0aq#@CYVa^@hn>pz^EqL3b@r&&i~5F68WQ=0PMWZyi=y8> z&?t$a6dxq_wLH-&4WVRl2S|h_FH8w$T{PQG!{&dLS5k*J&~F-kR9V|mX&eel>aYR) zm710vxOJL%DVa453uwh;Vgl6trEYma5uJRw<#C^Nx}8|a0@Z{#Ws+gR+8on`_-zuZ z2GsC{**F$Q8~n*V`v?DGbMDczp> zivc|~`?BppZgQRTuAdHTyJ}0d?acQqN5eU=YkcqLTmc@#uM3BM21WEpHp7uZQvHvX( z{8I-Qc#zNmWfu(}7fW|$a|cs*cgNLd{Vi@hSQkDtD{hPLz20JCPYDg4ks(Z^X#ro; z++}I$N-e%Fmib-xK5zSd^Z2_VQlDxiC@W)KP_F{Fd-_qBTY-6p+;R1dc$Sm9_Ol z5fc5xkT$TzpHeC16fGXo6PmcEUvBj9)YQe~KOl%Mz2bI?Xg!q;n}iV@G36M|?UKcU zx0DtJu$STnjZ)WU%T1v{Shs2IWfZ4K zg!o=ZLlW1N`}PHbX;dP0yf|S2!(&`%&YzhJU`X{an=#znX}Yz=^%rP6vN@e7dT!b1(h{iAJ=X|#t-{#hDdfT<<_^=Z8BraV zhA56*lyf0&(u7_TvuLgzJ7d7ba{}}15BQfE?~cczbhr^_$EO}MC(ms+W^3+8&oxvOFHWc5yq#gj2mKEiQTewUsGjl>uyfsrOyygTUWvnGJ9ai*kOv3~lfMiW2 ziXxoHwnvK0?=Ss`5O2tntE|uV6OQS~ooWWwVl-iCJ0bgh#Kk0K^{z@wNjB#Yrye3^N#dEAa9(YL7bAnNO49z3#2Uv(NJ8+H-S=6 z9PDIR0)@p+NVN6`RDw=XB6xBXKz}_Ut57P)lY{Rlot`yiYW`3u@b5zVQ#$bEUW^+# zm*<4aGOW#l6u0k5LT^adikdD3vpKXR4rx7l;~v~??rYS0zIOmi$Iqksr+y+E+HN+8@@ClKnb5s36Q@CEEv z^abtKGy~Inkhu{Sai1uM<|>5h7QG{TEfUfUI&v7gBa%0S%N2=cSh6F%1NDkV7=e^R z7$yIUFnsxN`7Xw-?F$lcs|yPHmwovCg~(s%7R?{>merr)7S2EK1;Rh^1w&9y5XP9g z4`N5cpTj@(1?NR;e{**;`a0;EvJbH@`-SAiX#aipJ(@I#lrj)5FyjUNMRk8{cPu(T zD4#MAAu#I&|3!EIWcMW6ILMeX5I!*T1^Y#Fe|2{?dM9XyG7!-;F#Co0#c=<5_c>Z5 zNQCke?la>B^F@7sZg(#FN6-(-PlV5`7s40){p;Q9Xdnon{Dl9^d?EOQcw2wtJbcUo z|Bm|~VQlC3lM5p>7+5ya|9#>9hww^9qa#eOFM@zc@6W?V0CIKVL0GGaby@nwFf(xR zb%|e(n>druOeiqPCdQK*V5J}^UB?n(6)EB~#is{MX>QR4yqGs{nfwbVFUHq*p;(bN z8c?37vmJV5{fA|Ho}He?w`~h&qbIB;1&wK%@hLlhm8kNg8~qMQK8aTcbAxiPpOeVxy8$GD{WF$!XdR+zVK`1e&DI)dc2)>hwjeo@nFptEGk%2j zb`T;@f4mpNNl@^is}T$Lwjqu%pKz+NC~BDAr*$%V#i;}R!;AgPmLj0#1geT~2x@gQ zh>N`xgq`$<2o$|>jmEstnc#9-3z7G+!pFx?cXx&k)tksRoEq|_;qEYngJgEF*j4OV zG>`x?v~N8Sotrn1VO^2k>n+nRazMR^tFG;-s@wfDzD~l!ii8|a4LhE?A7f~noo6m) zGz?vd+3`x3VlHLUgVA9*Vzh`<>cvdvXX1_HpJ}3=UXUR|$%3>rXmasW;)2q#S2Elr zBHSfzjCiQ!i+61n{8`b|wsE3v>Wn$F4`qOw>_)*x#U2iMue9``>+wHMV44@in5aM$ zE6_+dFhcaP*Ae#x8eg8rwd9C%FecMCqnafL?%QPL(ME=bmgLee^SkkZ+R8!=j})Bl zB zk^1|4(>ha%3kxJZlmw__GNTNn#L5$AoThmE+)A)S(mH(Z#U|vb}*E_ zp_9T3Y~Tmdh)MQl>JxgAuXQD(v)2KB8nZ}tY$`@OCM3`#`x{!PM)m=ad~3;httQo| zO@RWz=@Y!j;c&~Cjw;H;h%{3AFdTGEH6fK5?F-m^YIlh?W#_`r>{`)9rTvrUO(&9GlQ4FMznVt=Hh;(B@HOr#hzsG%!9(_n6Bu!?OI!xmk>WTE%b4Roe`#1yFJyS6g3_*12Q!S~}NL@e(b z8>}=L94D7t8ZFdLW}SX5IwJx2aN?yo!Z)g+>(7e3T8N{g)|)8PQW3)%WRTjelkvU8 zOG^Bz?efYCoD{^OewP$Cy{&|^R>bso!-gobt28(4d z=c%!EbrK2|pu9+3<%%yEQI(=QlT)ZCY<2zh@{x$=gKXA06m;Ch?p6VQ#<*puZ8?^y z>{XJ){3^6Duo_+7b77Q#kqtM8n<<+p*kyk>w{;H1^gDGdX-~+br+JFuu$SXwAZM)I z(f^WHxb6{~80k)DShF4CQAH4rp(D#J8l5&+~A(rQ%J*3jibbjJkqeDUC)odwx06N4$5(aN!4cy zS;#%-By(x~Hk=YE76QBH({w$}NFhp~hCyk%6`f7VI~aiNIzi8OFp3bQUOI8 z`c2*im&e=P9hK*KkcP4cpCsu92P850<(c~chs25sX@STeJ}(_;Kz*kI#c8*T{fyqE z+)9AN5JdU*9s0yihl(gn7CzD?GE6}CmU)Y5kK|`(I@qo-Xfm2K?MCZQRM?Q9J0XuL z%rlo$*)BBvc2GOj3&Nv|$XxE>b}cWtDU>A*$#)klBbWV*FjbIVNc*lLyz^Kn#-YxO zpfk=;C{`uLC_EgHQ-%*hCUG+p8>CE-2St6$7Q3spE<>c8?r*1@UfkOg?%0Wrq!J8~ zrYp`gf}@g_1tDF30rqk+0_r?;BuLg@Twr9S7qV=)t34vI|e)p`34Jz+Cbq!8l z3(N|PU zxvs2>p+V)yQ257M zhnM14uge78dGouTz~HRkpDk{L5)5I#S^ZE4On({}`O$PR$DM9qP9*DR*J?K)>z zPu+zl+y>V$)_BCphqJW0j&R^GGfJIyHQXPsZ({@S)`M00^j771w~H?dxU`}7V=}zh zWzyuOvmoo^jTXJQB~4y2>@Ua|Slydy4^(a`B0m(!OLd~LX7*8hy#^aSOy`G(4wxoe zH_{Z;=6P*GO~m4b?_sw`Dn`nKi;S?OO05=Du;i(wphFqxnOXTJFOwq%nM6sol23uXqq*}(9rR&bmjGg8` z%RweQVZKy^{A(i10$+Ekhq6O@3-k7_YK4H_P`I>!<&+9j3)&$q74A)<9ycnhlNwx& zCCRA1tQOzV+CQK#U+TF-1^*ry$oq!APbaMjiXlpkf>z_+ID*uU8O$FSbiQ2WdqE4m zHgX>cPJ{n=1QXNzIF9J-J8TVcJD$ve_<8Ffm0{;>%EWpQ9cuptd#Xrjz z*#sJKVWZ!tzaP5ck`MK#y9pv^9;9EvEhF!2@O{hO65gQoZnN05e2N^586V=4y4kDy z&G(6>ixQncJQDP&(iSS`bGVne;ENXEG7v1KTI;AHf^uo+*RaSEFgYj z-X5AHGA*j!BQ4)nP{Uf*hm`(!WqkQ#3^j&@^~<_b(DT)LvgmgkQ3|Y^imM(U@P@f8 zXOhk=N~N{A6G~1X0+bVlOI+N?H=!vAuY3WIJ#OTK5+@T(n=6;@3a4%EP3wZUB4ZO_@o=gD_Hzq{b*f8fbqocj$Wkdgu- zUJlUOxrN_YkbQ`1U0SqjZrO+j1kw>CYo9i>HdD;}i6v9#o&;;2*6kb z(xxHWf`Wfpk5o>v%=Z60u5im?_dSAiAu9qZ(|hlT1X;dt!`Ck_)K--0H@@VU$$q*Y zo5-S^dqF#3dFzem2Fa3j8p$xLhn9=URDzd8%+M85p@vEPk>~?6#?s>l!rp&YEErZC zWEq;>An1r~IZh8O8ct%{EdP0@`k?)R_5Az23OlWGR8JUujOq8Fi?L<2-)r6t>Z}AR zT1k17np=~wBBzo^$f;M+ShN%M8`8oriF~RovNxgyf!;pSR^@?5qa6W>tlqx%=$ePO zZOW$Mi+8d_x%z7+a-;fdU`%4mXopauCUAw4q0ID1a>YeHEKw|e(C?(5W>&AA0ceyf ze8G^IC;RM$9g(+vYTt!UM*1qcP4m>F6Y`#Pk8CnM3vzB>B|{5YHa;n?MVpCbTh zo*0w82%R%mQ%_6CMdd6H)M1maXu~!tguf)w4X5#u1v)a1L354;7_Ne9cWJSS#`w04 zvLjZ)?Rq7YW<2j;)G7V%mbzqw3|W~Xt0&I)Fs;-|C1y|6YQ?IUS-2{HcTvOITRS^I z%5#;Ur$3%lM|<1==DK7aFUtL5e>n|SaSI~v-v)n8Mdz&4wp&HCQ}K^N;UgURGy zDcch=&hr543#p1@EbH$mb*;i^xT}LfFJ4pL_@!JMqqE>0uxq_Z-PzJ^Hfi_~h-<_) zoH2rC{wYfzCo}A|Xu^a(jr-7i;m3`TGT9kRc(QY!E!L%asq6GTk9DUlZd?+i373YL z?Hb-tn2WMr*DGIt*1C>~HH-8+s@3oZ7|%kX!|$5>_}}?KR;D-2^Lv$9VI$`a_nIAS zu!K_u7qSiyiNnT~t_0jK!3EVXa zW#IYu_Ujk!L!LI}kiSR|F^cXDwjouT`;4L4#`HnjmV#+~8}Wv5ZOoe^2eO zfjLCa0cAxG$87QR*5p--`608$LR`&^FkAF_n=ni-WbyS8TcOnia>S0Whe%#6Tat!*C~9-tNbIf z8WY$=36y7kW$CbViev3*wYS;|j@dH_Ara9VI%=Ndczid1ACJVaeiD}ZY+iJoFyu_; z?yP+_&+WCg=3uubgw2y=+WaC&BHr`)rd})_ex`_-s_r3I=bp31 zG705$Q%Zdf(p2P;I;OzkDeCY!e9oHtYo}pv-jqwA_%f^m2iXewA3)V2N3Gws$nieZ zBU;E(KY$;9>aT`cfmfY@ebts6e7N0DTS>Z~{KjGiFF^&TjyK>D%hZT>y@TGWvH3oD_!2soxfd z`La0m1IELY(qYhGf?4=OX81#9_(Nv+LwWq6+1A!E*A!s>k&ZbnFz-}#$hucE9wM~P5EpFvuryrV}-nRty|#Mh{EApif2{_Lthowx(yr;`IJ zj|+Z(s#Q-|r*P1NT?V7m5OvdE4sL%LdN07iJ)RZkA@(xtqnP*N7d-Vji0|UQwS&LA zM1P~FN$+=h8uWgbr&;fJdsd0QXT9fUZ5m$kY}Wf{JVC9G*LZHx*u9=DS~uzmX zPiOWR`hHKp-mmd&)%(4kZF+x`XS=4R$TOfhO1~Z4cwFS?ZTw;ycL~9wRJ2pkLB(1sf7Vg4o{CN? zx~S-;VgnT$sn|rtrBrODVha^pskn@a%c;16iXJN7L`95>UMl*i=%*r1#WpGi=m^{C zEkVVVM1!m7ZIFr~Duzv-H2Fw?UCghhc8ZEL(IgY#qkMPe^P!Ut#lJjy_x38HQyfKxA0r(?HzvpPW~<`ZlmVywAQ=n z?LAbyH^4UWI|5khee`yx$?poVEBX7W?*mlaO~nVP_z)Glsn|oshpD(H0IWX};2-7p zQgd&Be~f>ePV$KWHoPyuKgmBu9b;5{nu^cRt$mi>?x*5&0seXZe+7E`BF)%m^8Ez) zipjG9c8lVyg9JH5=ld!(AE4qvqQ=)~A{xcu{xsU(C z$Dj7`U;6m3eEb<7e}C4;pQ8<)r$N8=^WX5_22lKt-hNMSe;^G1NJIYQJ)wUB{LlOa zAO8zM|LVsz{f&wjsrWm={z1h*>HhvjZ~vwC-ftS>e^98Wbb*vOgDn(U8rR@#>w z8c7VsyE3s%d?-Gg;Ve|&w!k&Z?rP?28XA39wZ}%fW4(iMQD9eE1F1WnxU?sn(&XaV!hY8 zSPF&YC1@1PYeW}Dq#uUN)3av@dr7z<+OgytPzAXmqIGZ)a zs;$YPq1bRgs8W`nwJwz$iKjBVpe#5GgLiYm@d9Z4noaPi%#*l;@5mjMH`ZjYt#7Eghci9Xy-W&MJ! zj@wz=dnHcZoF@+*E0J+*mjSUI3+8Vjn(VtOe|T!O0`da7~+kgN?lWWZSI{51lCrQ@y(=}rvAw}&S{F}kOQweM9MQTx-glKoWadCTvwSp@%)=bw6LE>5eVNTu zij=*<%0#-)WY>7H?iX~==*`_$v5_70ASIo1-d~q6QwXY|nSX7*DiF&cX5)Go! z6k$t51SEEbV;0R=wX-iiLTqG-MPi{P&Jbr>;w*8tDbBIPxniLy7F%M8IL{L2izZVv ze_NtOEH%Y4OI#o>w8V0;!V;}wr6pF;?A27P5pAZpgf<5TQG&FK4oj>Rr<-D(CDw~h zOLU2DOKcDuO|i)mml9;N*kXyT;xbEIF0Qad4;62sA|`q*(Z~K~iGC5c*h}=b4KQAW zH}0jPmo&gWmp5Z)H@JQ&CAph-M54kRvHZ zEcRD|RS@iIQA-^uOQc1{5~E@Vq@_@7IjfoMsRNOT1gW#}e-qcbMXRmbg>gWr_FGrIlIY1LAH=e2|I{(e}H=9!q>!++&H4 z5L13s+-r%wgw4l@$EqB=t{xqhTB>V()Dj=3A)gTUS>lu8Qx-2J;+9Y`oeB>(EHNfN zZLy>5-_FLl1;(*0YU;-Pb;y*O? zD-hWXny&bB~5|4tBvc$KEe|Fyyhb?i0 zDDhns>|ccN_XzfVaSJpe7F#%&*b(nZYK{sLBt8u7*B9>@1}bR{OT`C9VP|bvsdHQ^ zzO4|HPP{o@uv%u<2+gc=!TS4p`l0GG@ku&HNBU#bG2_bq-oAwyGD3p@^g!|3i^)Cv zVB~rR6R>izK^v4D?u%u5e}+c~2h;kP^1WwUB9+d#AW5R4o;Et1xOy~hPYddmcEHZ| zWK!TQSPX*2b`12S`(k8krc=8=ISS1S(vY5(Bux$v>;O`UbkAV2S8taX7*3|*J$Q&OahBL99J^j6Bp}W1S%MBh%rwP2d5WI`Pe``CJyTQp+4B&NZ z3Pz6%fR`R6ZulXw_+ys%k$Bt^Plz8|;z@dYir#)AuD8Tb#f7H$8FBE>IrDDnZ0lY{ zrr;Nrcv}3@62Bsq@C@F#kEF>@8tysqEXlxgmUy0|=-1*mmiVpsoh5!xGyXuuAH|<6 z@n=Hd1@RY4{FU_5f8WH5miRk~_dmoxE%7h$Z&Uoo68{x1S>k2VgRc-Hze<|N)3LUj zbb2MctJaHFwO+DrZCgh-8Y|nnTGw`TtZGH0d=dx85=Uu~W5o1MqXbtn4KY)CkF$yi zT`N~c-C&2UpSjg(YFm?oqeH`8ecR(hv1XUHRxU93DGyqae}tz(>{422zg@%HhBNU2 z;?C1tTTP`wux*8$oJb-9NF`!}i8re?t0ytvWVvy*ndDV*;#-#|L9pfm?9@2F9N!J` z;|x(Dn+9)49a<@_)7}2^>!50;ZNpJ9S?B_kCPHz0*spaol_EnYx6SL!U^+elR$qTo z*icMVGCCaJe>nnfiTCTX)=oT2&VvDdo_d<*g`JCokP9Xcz$QdOG{+CUo>`SjC2_Sg zUvCR1ue!n}5DkP_wKLu~nz3Vr1ZhMdg8ZLMi+P+r-s5z zx5qOv@=`gQ=RT}!H+vK?n*By&pmFGmq%^c9N2TlTf0z@eQ!mnI_r_ISR}gd-lEK%n z9ciFHsecWrp9DMgZA~_d_=R+DjpxJF;Ck{}&w+0G5Hi)=tcpy&EMLH838j)nb z7)Ye)9 zM7+bQfM;%LkR z@u88-E*UC-fG#zbAJ&`?fg#)JWU32tnAnzp4VPOjsh?_M+m^}Wo%N&f)UIZ-eo7E? z$Euk`N^R2j=BsXN-^sR1Y4p0HB7Z;p;L{zn8z&Dp^% zIa%)QD{Q`q4GucM=T5oF6bzw{S+18`6L-=qm;C@QlgD|=6iJ_)b+`0{<%1bg40cXr zeLhsa;9JqA&z1pH)d0KEYaWRzy~9eY8MxIE;yrk=ml7 ze$wfuxYK0OB>YzCXsk_jz|EaH!Iiheb4bGFM4R>1VvqnC?=C=Dae=RMM$!T+!;q7wv6&T(w_q-Z1Zz|Qbe7JuF z?2M#mhYF193+V7V4p85uG&#B1CpU`d>my2ZZ%00~5W%^CuIflf1PcomxBQb{?kEC40KFfQyD= zBa37%WF35eh&9k^lX}!G_xZ^)^=(1HCWa8*_P6ze!C@kZ361W~4XdEeq7z~Y%=E5a z9_?C1T1u@Tw}mN|SFIamlVySHe=eoN$q_DdWQ$|Stt%XqhI*r^&PagN8+l@i3ks$> z?ocwAiw6)JV6J*YpTx&b?cf;l0=6lZCMN`}Sdrgc9Y�TWCZbBj|c^3G-2?!_~3D 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

|D|5cq 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

a{r_X3o~D%IcBU!{@$ES1FU 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 jJw7 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 z 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⁢4N>wAo9yc7_rRR#Bjg0@M9*QKN{a82ky+4(NC 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˨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 $h5=pQw-mdga~gtzEa=>j(E7gZ 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

flJIiL|Ef{~7{XnYIJ1N=(NIjXgo(>Icbi(# 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 delta 1155177 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

tlgF+r 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�%#W- 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
#J%}$PROoEC{;d$Y?CT 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 z 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�SA;-bo)KD2d25hB{gXWPFcUG+A;7V=lup!~ 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

6uW9{Oc7jDIn!c%6h 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℘qi%b$n{U{26#O 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

<(d{3y>-Vq$ zo0q4PKdGaN*6A(Heg3^o&w{?wYnE{zPani}5bel)Q2;VXrdamw6U2Yb@s;5>3hL$` z+2QvLUI?y*0*rfdq`4@!#o_RzxoEfMs6SC}HBf(|-!_NWMR`dMaf$QO?PZbnQtWL| z_M%IH@5F$7gJy<1Ht!1!qW2-Ysb9Ovfjiij(4>Y~w}Uu_EY4#?aTu9lKqX>aA{Awx z&{hbC3c%h5#b>%fIWMX=3#2RUPp8;+%uE7JX4=rrHWZn?Zx)ScXP!sdyhC$B&Y$}*`S=IrA}mYD`BspE0-J!s-Ar}2PX@AMaz zQC5yU-`Dx(fl{-X-?)FXb7)pePUT}R7p}yXL;)n>o}%c`7IsP`IRs8$f&B7^cE&FJ z`>rvvlA33FY>AlFn$7T`eq&lE+6{)a2Yd^$QcapH3t~AYoI-@{cG@7;T}CRe#Rhng z)`@4;X1vc(faRAqE1LY2?zH;LhFe=sc(Q|bu-n<#Mc0HR-K9Qb!v3>(Y&wgnKC?`! z4{*8h2(yT5yuu)9q=7lXE3YSz@XKs~Rq$$cJ74e4((GrCYa^nsgKA6B-1c<-Ue^Lcx{gs9lGLvn8e{|@-Kbc-j12eO>Ah0(Ef}vx2e(F6G7c8XxdjJ*` zvlWP1lAfSn3`iXP`cGpW7J3-fPuA(jE#cuZuG%17GH(3VL$dAJe=K zl^IRq_oS`fk2;n;tjuenQ}lFf3(eba3|*<88DOfP8De61hr7oLV6gsx;$wKn(xUHX z9OOFqS3Lql9}V1k-n{qbYH|ti1q}L;2<7sKYqYYKr~Hn!=Jil9HjU?jH~^-tHxHyj z0dDQn*V`?4+^cnv_*rll1<9v8IxdnaOSUziPnT-+uJa$TmPg_Z+|Kf%)32A8rVuB1 zbB}#8f=Nrxwd4dh5{S05CjDA7#~2kepZK|s;qst<0?Dbju~bYTx6K(dmpGko>W0x+}h zwr;yhZgdk^`aD-DFJJZSBt`up&k&$STty-pUDdxxs%t2sZlKT?`hqF>N+r;GAGhbb z2yM$z@dOPjcnh8f(n39|iv_>bCnvO8ZjX~>;+f(xTmtZKiHF?rHX`a!`6A-buE~4F zp@Bi4HqU%<2O5jH%_ z76XyEC_FhlgBbG|OIs^`(QekbHnmfUW~Ax;=S`g`ZY4XiUfJ%L7glG&TOJm>vb*Rn zwZ%^}4n^BbjbAYt*%&e2PEDvDyWq=qOR{%4MBohXEYtum_t-4t=~NL>62{BdEIqYf|Eak13#;J2!;IZS)kuH`vqujRhu z?)}!1wJwrOxixUPHA|+4o6deUr^7jGZu%%P^77xllnb2xYYP+@STfT8RRh8Pd)wgr zpAz_0^Dxp3L8!0*FZHitw=*ecc<1%i4M;>B5FGn1sV8p_L6Z@(DuW&rk}sxvNP(Le zIM(fU6k1|a1J|-{LsvUo5)N-u0rj1dGZ`zb(tXGCyjQ(OZwsa0b-Rl#W6YOE`Q>PG z)A#d!=X2Zliib-{-|Ge8S5=80rhU88u%1&sN{v^Q?2$ddZhLylv);Qb(i0Sb34QB8 z~in_e*W#lJ$&kKhqrb=w0iQcASAK63K04BPnh?CG>KqPT;r=Y3DJ-WByvUh z&?u&#s07Ez8iA>+em@mvwz5i85}aa%c2IHnDKZ|yEVTrW)lH!lVkS_0?R;tCa-Bq@!^I&HsgbOsuhCtgIsZ>PKERU^O; zv?mKM5z<0r zhiyJtM#G;5(m|a8Gs0$z(RjDTL5?a}-vlg3@rV>Qjh;DS6A?`t z(j`RUsn1v*19J@CPAqzauuy+38w-&1=aEeoXC!^g?HfzcX|f=mGi|WSZY}1w{7~ME zMvy=Qe9szYp2J8Co+FtkVIM77NJs0YDI6_js+htd>$e_h{UhuaA`&PUPBb?K0-K^H z_|rE#Z-mqRroW_FM&zh^bNTQjB?Z&sbHtPV@1S2K$q?=zCGfm9p2Yf$tSG3InqlaS zd}OnjWl`G8K7QM@hYT2-#z?vyabW+U$FtN3Pj?26ktkyj>6S#7OGPDfz%o-#B z>#$t^^0BN&XyOg~K|v-3Goj19m_dp|D9^=%Tow;<<<9p91sD4;(+G%)A`HU}5h03f z?33;9g2%ELeo~tV>#!m}{+_*w!u9fDqI8C&^!C!_V~U_`+DbM`2Nz~JI%;}W1zqa^ zTq(#X4>7M0oCU}3-9uQtOW5$r>gnaLqGMTY=OtAVX$T_I`x`DdhV3bk*3$xW(lQ83 zk&>-^3ftxgULS0W5}NOn!hlGd#k+s;w!`_pR_o${#Jgd50U-{ELL*A-?-)w7FB!nR zeQdaZ3Xs-I3vg$*4Ue-xYVi8T7f}fSGDHOYCgymDRkHQsxXS-C-f@)?&9=e-Umq=G z`vU(_335Cs`CALR_L3YFx`_?~*t}rpCM&b-A6k3@~~vsSD0@9Ej#rVBG?X>$CyoQz<{# zDrFK63I=!ublJP%o~>4+4G}NBP`Mme$eHqf`Fp7ouXwguMiRp(aL^$C9h+sk*hdTy zfF3pQ3I=v{yi&%NaqVw!K3YcFQ|DH+bnpox7EqCOjHdEA*uQ!B{}ML0t|+*QR)wXA z-4m5wfxkM1Z?H~L_N`b6{G$XA7?d1nuGNT>&L^p@eEqlgy$wL-XIO4n5hMl~EKCew1Bt$yx^4KRlf)SKgU-K@fr& z1G!Zhye;9qAIURzXigtOF0d*3U)AIa=q}wz=BX=C&OhwjwQzprG?fRCS*@=#w8oso zNnU-|(MN0HXE!;{&-rq4IF;qIlBAu+1$}t@lsZj>$Ka{Z)a>A}s`SV2C$-sWlC_Fn z`<8KA+6%7*7lwTvS_7w?Wf^pzR z@*=nvRpC_idwH@M6=DRSy%}rAsHcfKK<1yl=l(4tiy_U3<;q{BezAC;PZ_U;cEpoXm64QR_k{6U0Ju99TQ4$y zvok*y|8hK7BQV1^WO@>#?aViH_Ip@r4Rq=gn{;7gE&uea4MkCaHIC=3@;W-Z`=W_~ zYq+F=nmbCQ-}lDnatd4cHE^%#B57SJ^Dhb~tYId_D%tm$Ou?jR=2o~}{f0(x!?o}1 zRIM|ZS;vt*xNTPAh*`YefVnvl zZhKeb1HGKO_Z8(xv5PwQwsUnG@~Vdok0xMxb-=nGdA8`ZhR)@phLbs*NEyk8cF&A4~;Se7j@I=U(> z8S6`2+9HYCmxBVY{0&I~mBx{NoZZ;WQGb5Yq~rp~Lf0-HG|?{v6Er8NUu#Ow4~4|m zM|q(8eo&o7y1bvB=C0Mb=~AMW!Si~T(7jKGyyA6hdTom7di8ne5_#vaJCj*%i+pAb zk_TrcyHYvZbBAIJo*C#({o~Sp&0xFJ%uu`IplJ850VQ-0I2LfQRNrjJ52+nMR1HPRCG{5Tsc7-JQ{dbhd{wI2zKemyed{6B zcH%}Y~@g2Hp3GK`fhxL@LjgFpW} zvvK<5a}5g%1_qA#|EQ?{q|W|FMG*p0)Xo*rMKC^q4qa|d`m_?l7;v~3)oy$v?4qHe+9CuA$VAAtB5?{asBb1E!n|g#X*c}>oCNo_BT1@lo00RC& z86l(s$=@{emu7$2IyZxS2q4-E=B8(v!<$1$Fb7paejbDYxgBKxF;uW>L|Xx@`pZLD zVB0jJtJ()==`Tc`1G}Q0Gx474BXwRTh;g;Z{I#=GzPcML+zoZYJK`jj|LpFK(yORVUi2w~$l2R#!87 zM^zCawuby!`hWo8Lb{6c&ry1!lXNj)!TDyD%%?XYy!K)Pxq|Pwm$LG^{XclWb0b{x7ZGu%CL1*ZREf0{itq+$1&Q_%x z#IZ9G7N7%+RST$U{&T0EnQuG#{B$8)%~yM#oC?vW?5hM+{DS0;kN=A3W*~YK2~0{d zxTG3}(O?;Dq?gf5p{G|0A^%GIrX?ix=QK~U5KF_UX%-PLPP`6TI5MGs- z#}v0}{w3~Hj*u!SISA0iO;A!61l||#qIHf5X9`M0n;AKrz|1Wl6EnwuL~B#}f2Vka zv;pR`xJJKd(!$o<2%^!52_>^;a4ZFQW6gKamtoqa+caN92eqDC33Hz{F_ zFxM8LQ`%5c!lwK$_zwqdF7PwTBrMlMcXQx9?O3u8tRRdZ5!UxBVgn$`{tY7m}-@V zHLe}0E-zpIkk?2a>WHBE7HItqUI3ge9W#BL)u6=dL5HV zN0p7?HNNP>9vxqnW5dFJ^f!!+(+Oy#?V~mpR+^|D($7z8h^tX)Mcnq?Jk*Qta*LU# zP$s{DbW)CLRT0qvz(2#4K(BV=?rh>Gue1bfr9H{>*{F7j9InQM!ft>wPtI&F z7Th?iB98_KmYRE(y~pse0f-={BU|szuT*R9HVK-k_~-Jcl;>#BGpH5bisMn4R9`{0 zlXs7Iv2@c;rih)au-P(iy!eQO5-t@O1TSbtDsTUKNY zm7G&6{s(D~tFZJb_I2bu|DPlOuTTEp-Y`;{@+}q|pyg}1PJIdUwXSfpW*> z&Yp6|_|AZG$MnvhQi<&~5L#%64dIQ9Qpn;C9Z_iMh7D2Z*$6fOBtrNfTQd1-i=4Wr zgADrt9CMWqn9%Q|>%YzbAv?UI0`?At*j@oqz+>Dyou}(M`H!Riom=FOw=(F@fj*Az z-F{gMr#&J0kBNg2Ahx%k%%F@yzBr61DrZ|gJTy9$JzScURiQY#1Caoceyo&thdO#E zbe4Dq<+#8JiaEs|JzR6Sk?L4+qzp%rj(oSg1zX0TSuLdvJBt$fy^J$pHTuCla}WTo zaoH8!BdInNj>PUxxeq$|jrVQEkc`n&AVJ&h2OG_lbW4`XH&isIvbKY6yGV`crp=l; z!M*K-!_<2M2cDJ0qmSZb*Bfla1gAv|Cs~Y4$-~NxaPeA#2nq!(nFqYNa$M~6C88)~ zc0|f2@i(7L-i4}zFD%e%9|u-c`qu*gC``Z)9_j5GM5)2CNAN2D(CNJC@z}RZvpJwP zF|PJ<2D^`^C(fXOq|(p<&c1gen=vJyDcP;zUb<;P3BwQy1%!o*>AFxJq?(nKKZumj zL{{$n!_bu*H&z0jJt7Nu7cUBGiYKAVu;dHXYtXps&QXnTI!fgZZr~nXy8={Q7sK4k zQfKC>b;_}-x)dldxDn!TE*&2wNQ+-xD#PPLA&x5rGjWN?>?yG~EaJ)Oxm%B-nDb6n z_IMK|a2)-bbf{pBEu)3$zxjnxF^+B=yh82UnjvZC6R&GRmfV40619d;WKvp6Dv69c z)=xQK{+$)Cb3hCu=8z2@yB3fn9+kk(3iF@B=7Nr$ zox#C9OdI16JBm1ulFp*c2cJ{Wt=eN%*4XZCRvzZhsBnRVjGX0v*{D9>Qk1zDou%%} z>Z#$-p26Vt!&s0VW0il zb@@zkXPWI!m287|kP8qGVtiZ2lRH@@!#WH9Jv&5dun4js9Q?so2{$2lyC+DfGITO^ zdt%a{U08%%$~aBQ;vB18S(I0bW5haifaz5dYn!1zdfy!R~hI)LbmCgm_?UQ?R zx;kvzwU+H;@FEe+2wtdyeY`Jez#akry|Qd`T+=2n@^o62kP%RBcX7dLpdXIU#thO{ zvy#J-#Kw*|oOEl5g=iNU#pfodGhU(_qEHv0(J45&k#3A4k~gTvsA6x>#kO5NSV6;f zFgb`kb=ShS9p*Kt#!j=@V>Mup%4g&Z$5LoMGbw7%zDm=WTNuV9Eso-Bkiot*K_~pc zz2>6Q$0jss`VC0j8oA{t)P*`7GYIVY2r*T~p;vW;!j zlE8LKz#Pk1JCM%U3h#4&G~+cT#z62?RihoGgZ1sCJ#XI+1NnqovK>cCcJzA^^esw~ z3?Z`XGEqOnD@oMolS->An^)z(`~>FvqKrN!h-F77WL1EUvIxW0pH$IWFuq{@Z%0Q? zh`56a8!>;v#|$tHggSExM?T(c{n;jAWCdB}bpYgq=vq&@ z+a-BVe8U0NmnB4{JQ<8R`1252BWCmq+}_+s7No`q@i~tNVG=q`Zd0tn(E@fu=oZvl z|Fr8v+GX$}C{IJR9GLDy>0ew@TWOxMQM?$USbZhMIy(+6N%s#sG*h)dZiPkXpVoTg z-On|1cd`?RPMzL1=J#74n&OYjpIUStJTVvec+miB6JaSy`janq$mJ4K{-;>AW2y)0 zTlf>DS#5`9Oj#Rkr?MS38?x5COX@AU{~BDzU2MPD!0En{(bA;sC^5rRh>aoYdhFV6 zDV&^bo~>}%5{DjjxJn+wtTA(q3$9FcO_dYpxV)#Gvow>M)EUMfuF@?uKCz14kLzb` zrYwMehdmJBd@8W`LK|Q)E0wpr9P@t}Mu|9{Dibonc%G`9g=2zUcKRK=2|O!a9XKQx zxyfG%H+7{uj5`dKo-RbPt%5A#7J8FL!~*^fQqaKk`6FF(L6vKfN*TndyLD&w$d^zdBk++KXT213S;rX?FS*B9vd4g0Pz!DoMu0xfK9Tl zMN=vdoNsNP0|JLNc2}Hn?*1FgCj=0HK=M+mqCb0IFH75kY<%OC)u6;lx_V+KHa zZ;Na~Q8(v!l|%j0iH|>JuLG8zTanHcuXqJBVB26;suO82Z7ub$;W4+(XmR_L2ed2& z)l`q7VF$iLNu1Y$90nU}(BcMGypLXtDFOUg0VZSJIm)Klt}*>{r&q@VT@Ya(I{VAouy&88{(}s%JQO-ig zI!8pw7Uts<-pcoB1yJ`sN30551EJDB?qWsqq||AY)dByc^HOS_a8Y@s-?tJG#5$Xy zDsySb)cLse9ycQux)os^suawJs?t15f?k!3U>Xv9Pk^Rq%0re!AFEtJRy82B^5nSW zXGduK@ADfU3UvuKESJ|&6~K7{xT1|A<}q#Nnw7qE_Qw;DYPXrVV3W!2c+f+7nsU~O z+}CfbK1Y~lxRM_ECZ=8Dn~$~G(v>W~4raRW{w?^W{X&jr*2}GH;}itI&)Ab$MR_77Rh{E7jt}gO*wLIQ+YmGlqc{| ztvz+lZ8zr=deRfLr6aHBJQ+n*Ur2rAd$WxjmjHQ0A@R*|*dER)XB=S5>$t|xZ~27*^7rP0zPtv8nh+v}vMMSl0F0PlZI(kq1UZ-IWW6vy?1lt#z0gD#U^5FG zt#=?eCmt-3Xb_5y>z2Qmh&0)WjibHra5sWrBd)DHa{i7y;E#ciH0X}OpmuZUME&AY zdE$9++K%pN?#^BOuLHolYN9%~j*7CsdeW;v*fr5LRz{}^b9koAnEjg`k$7UknM<(N zO+P=8w@X<{Ps#|c<~wOjYS?|mLccXbtSe5QI=4tBj}`xQa%jFcT2|+|sufdagA!=L zGIF#3PgWG^PB7US!%bxq^QAXxdm2#+yIhG6WBYl!r?@=;>KRaR$%DbS&6snRd!;2` zq*MCKr1DZNMqcw&$W?#DE(gxFRs;`_gbUIoFosHSe9EWH~46>BH*h!;c4%uWr($$yb zco0iR8gxb`dq_{VNNLt;zjkSRmBRf({GU0GGhZ)D&#yU;af1KbF8wd>hYO$s>!mh| zn%fXdH8C@S#d(B)0)yHZ@e2i<8-;%3SGZlU`43>oO?{qyAU&?k(YT1B%T8H=f(%pU z7kexC5=b83Y8`9XAy(TeQ}>{FO+bD+*_(1;Ic7Be-0;`K^?{d z>7@zcWA9fV@2;bw>gzAd&*|~c-8z8FJrm@|WystOG33Vt8*$^F6rA71FQsfJ0>P=! znO#>jQtEK_-vp2hW`UYSs~F96<=p+jNK{9KNul0I>ah6tI{HSR?+^eKz=c#IF`p_i zF&^1qT8cTkopq!e!fniR{E6;*71!zN6qGhD6(TRlBS z$S`+q3MIEQY3{TF3s(|G_T)znD8wgwK-aP{Rj+=VFRb5ub*1Gc@LMBG#!cy`ubbFVVV00Ozm$d`zF8WAG;WtQ0^?6PZ*I5yTf@g%Nwd)R*TaL*!kNd{=?DtLC0m&TV-}uQzV)?NoBIR z{OyY2W^r~bDe52f)3glwHElKqpzppk!kuUZ^=St_#S*4Wm&c)`1w-K9qkPX~zuRgw zhvL*+E%A@XoJRnRn(3D13(-7}@U*Ff(q}WdmThuky7hSnVM6WAEDVtf7J}3>t>mRj zRs}fp^zYWXe_FYib}lzk7l-Mg0B=1Fv_^ddC@G4z{tf2+Xl+m98RO|Rm=`@^j5@6; zsKM||#j#^AUt6#Cq@<2_hQue=sTaVLgDDGco}<5&vbq55)(Iz1S=m%z;J~}##D)%< zIJ97>x7fM~k3+e$Y}{#pM8dF;!qS_EFv#!39MMPVlsbpSIw*gZE2Ou}Q(icQK9q^9 z3_$D~5?&S(R^3Zv$PV;cu|RalrlE?mVJM(LJ;_2j z$|VKg%8vyo!Y1XpiNnxD@;l78XxpI9bKavJ=YdPj%L+^9q781@i}di|SBtvj+0F@F$BwjWuuoLYB}pZZ zbL8$MGS=sm%RTEe@9o#{x7GkTo70z~ioNEO=q3R=&}0wC{$fWuDTX^DxWBbhJaALd z2~nl#%i{OeE^EdDmjv8nl&Zs7ac;RBi|x(~&yGV5Q3ik~sSm~rKrbmZ&0r4gCRE$P*0i6k zdOHBGRt03yE-@_Gt`&L?g2L2_hpi3S5hiR&iIzFHN}W?5XT+UEYy? zrPUUz5zuZaE^So}4O^{;&D8`+w#y7J&DQMUb%*OuYBwZ=dvDPiM%$uFKB?)58qjuB zI?;7N{|wpx$MeR`HWDFysZ zH6E=dh)^1s@`8uhtlYD2XUkGx{f5igwoeFCmdF2>L>^C+wy0}$wZ2etn2)D= z;fAp@Jc<@VBvJlYL`Bj>?bcznY)`;XeZ-QPp2B@!7xyG1j5TLLy&Kz5a*Uauc&dIO9^ z-VLSoxX;Bznnb3(8fc;I2J6!BLN!zcncv|VhOVf4AW83_oUvdyq307Bv0?GweJD|Ba zdG96~*_;2^tt;Z^V|3*?We1GA6ILZzOzq*(N=2O#sT3&PCWLke>X`e~1o>nGV2ht> zO~U7#SW{;Dv|m#2OZjO%ivf7ov%Ec`-O;sWw~4qEH%`y<^ya0%t80IP;Ahd*2Excz zWoWeF|LUEL3YT*X&A2Y_pt(`s>599g7%CGgXf2fD>#@cfzWz3vfd>dR?2W4W(-mo1 zRybBrVz9E_<6)i^+ZleBm%TgXe2{~#r&41eRPB&!A)#I0k20ByJy=j^aI^diYDoqN zVxYPiuuIOUQP)m1uAO12d9>{?Rbo;UIud?AFyt84t0?E0^;fI2%+d`e_9RZ@ z1nG!*mI8FHSS7TUj{sLm*TJ*Z%#D&cSP`lw4RdRId+pST5AG`Rwu+QAeblg*>UR;; zm8_A8EOEe7-5yH#&s~kTT?ylYg!^~r37XX%W0I3}fr4}3-EG>GE z*r6O8^Pl3H+9kD56d?p>Wr(Q#Y)2^ENzBi`d(e&u!5fqTi}%zA zsgJ_BqdqX|M1Tk3-Z{+0)GpwourXJ%_XPyiy?|=O8seDY39Tn4Z15P-Mg+ps0OTQK z+U(>#b#VvwQA!sOz8|6DiZ=C4l$R1>XphFM3@O}wOUj-|`zr?${8@=1TcHp-UyrdR z+$Xjp#%{@<6|Kw2Gxaq4pUWG(P8q{Ub4rvek3huUAHYIME)g{gAI~02GEqE~dZAqK zC58vxBjP_qajwQcF3Uv9)xP~U8A7f2*%?mcgmhs=u>)3bw3px3cU2oJ_=FK$^RZI< zwQ&={>thVUM@f+NFjofy_>*1ya^2n$z;WB)DT@tM?0xh9bbFpsFWlzH=lv{wIe^Jd zU=^gTIR>zMoKQz|4Lo2rxP;Wr@6`3LlmtW^Ofdu<>!ZIJ?Ij=__B6YTX?{TQ^Sd27 zmd3*uZ}6o0Lo`?4FsxDqvnx-)#rohtB zCK)#NG{Cd}Uspb(1g}31V$Lx0U?29hl3WzXPAmXvY({>@B(D*F)wdKK@={gY7->KKpgqZ$;5I9~M!G)o- zjjTuCvx|P4{3f7mzMlP_L3uZL(@y>q*#jU#^heY%m$XhXaYg!0LcF)#+JuGv^dz*z z;s}0n(h&U~o#v=!$gV8F0P84}=14fPBQ>L$n7a(+fZr ziubauuWuPKM4Mqd5M*ABP~VH4IYndI9Puc1 z6K!Un{OT;?v7Cxw%T8Bi#*ezvBnCL-U4skz{Yb#i)NwQ)o-}e`_qr@y1&@;u!-1 zJhCPvdi=rC)4^GhVXNX;xk=~LHO*Tn@nL+U9r$gu^I&GtKfE%_$SIp^>@xsP`{WvE zld9U5z3rL2M{SrOqU0C!_;kx0&hd2!gDOd#g$aUhNdXVG_eQqXrdkMH?ttxlt!RGy`*)lE!_JH zKwMrBvpPCmG3tnS)RKUUTTlySNCA=xlD%jbs}XJ>{qT?T0q)}K-rlCXF+<%kToZ!4 zC3iwgO{uN+Riuhzh9Mj@0@bl=$6Cwg`^EZzi!%+C@(6P>6XUZO5!7pftwRSw?q40K zoySZKS4U>E<^i#NJu(fhYMaUfUXChWz&}9z(hFR0atj@$SiW^9Mc1L-te4rZZ9;?i ze;Nx@E0aE&*BLF^z>L;7PRG zgA#@1FW{Y#_wD(6NQJc9VWoR=;<&j{Am4r^W$Z;@ewBMpq(lt@VWN^0W>0Eu6{ z34jl{`%PCLVCA4}CVdxhrRI@@TFG>_#=cdo45GpIt??(q}|n&ghXC44Oz4t-5rDw)U<;Of?0 znJ{$ECNcxB)4_DDYL|J%KhVzx*eqDGYC-l%KCGNEBgm_5eTeTOvSDCk8 zSC{UuD$-KvvgV9iP1|wC&}!)EFFgJYEi#lx#)w6L5$FwqcaxGj0ZMa6sfeFS=3qWU znl8pYPnj{;?OttL(sF5^Rj2d?>0_**a#Gf`wd8bO6Z4{ zyYnkE{hqr_o+y9*Y&Xwj9pyF)J-K?OBw|dovLrt}pZ-G!^|?P2iCrJB;n&UI2mg?K zS3<#hyW>8cP+eaciSt(h@QVn`-gEZGjsHF2TW>42v&jve8WO!uc z%Wvq%P*NWabzKJh;&shA(idUBd{V&q=UX1~9*?W#{U-SoQ^xgV2Akz{HqZUmSX7;m z?-vZI8*7B2T_~h&4}xCc_Y^c>@C8MXfO0F?*zY^>(hbWMKZYa)SadCJ> z@66xWk6c@MCEj-7^^U&yBPy}vE;!}hLgNMe@e0f;hPjr|*(ZsrG|ln?wDUSc`e z9!_lg5&@LMV}xHE?%MbD^;LX$CKPDsan1TA4YN4Hrnt>P@EmT8Jt;emcBHf29n&Hz zJQJt078ucOTZ%r&{+AGZsf&Kp#S>m#GAj<|`(B1|(vQqtLk&0P5gdXUo!YhY+3a`> z=<2SiL_aT5xkkprko_kBPHjIM`n*_-)+ba5M;y{v5^;PZZMmbEb(+@gM8ajX+8m`qKai4~aYF5*tpJH?I zZLSn?qm{tZup1igl!T4yvXsj1l9PhViy;e|cA;sWr_@m5oj7h?3_7bH)88$X zAYeEya##=3PaH^%G%Zco$aCJruw?hlWNYl2gey_8?%Y&GwAn$2uwdOsnDOehhn?xY zbg3PjchAe(YuW+mk8I_*q4|qZO%-<|7_f0sTd4T6r(~cu5s-1Q*c;GNYbs(l=it)j zc@uTCE<`b$k$E5rzWaL~yFfuM5fNrhrnSfVo^-=*SUdyxgQXHJ2a8CZ|0*btF z8ZJM5!rZj$r$}UpVdt|lM1hNFfKBONTQ*3}1&J=VCf;Q_WbkpM;kL16Qvf2Xmr%*9 zJx;@mq@=h^=(nb)2=M|6_Gxoh5~Kn-i}usJM2xoR0k_cx(tHqO$r+q(4-HY+xA=%m zr!Rzt%MAcxXs@Rp-Zy9IQ4xZ|i<1`t4^)*IOEp3WZhoojh2q$@{qWeL&CO6US9(99 zMQ4PEe>!@xFK!5XIp9@T%9*kIUTMF9CD!tzu-$q;8mXmDnVE~p#x%21k8ueH^Ibb` z@w~)FVNS%_oN*Or6M{4t2j&G96GU3GMf}!(AnpPFahTWsidFkzq1*R;;-sFXbf0{r zobxEpy4q-MaMGTxEQ-tZ2#{=@*fjS$|Q) zkxLPP|MOQr@%)eDe(cAP{q&A@`-6LnfN!wL7f<-HB95_BB>`!`zN!C1)>}r!6>eR+ z34!1c+}+*Xg1Z*3!QEXexVyW%yA#~q9SV0SoFHk=`9_cKzPEnu8ufR-d(WD4t!K)w z8Kn$*xd@*en)6zLm*96K&{2*@fRO6Wq|Z|;`d4c$Ka0mhd=@L-lXHBn3*oB|Rnim0 z2dWU$+I1;c<|Y_SDKs2(JDMvx1u`^wll)BmC@szO==NuUtkIEFRI_5&*E%QdU1-T+ zdGMW5J;~eS7_0K{8)gqr#JzH|x0LfJV3iHo?(ev0L7)`ru$1vqWk|hy-3R!_|WHd>3Cn?L#d)hw0Y*gKCJ}w_O%$9cED@pi0@UiiGn;66}Qm% zv02`Vj$##lA|Aw)R|3;bp@IgBrTqF+$pdgaJ>j4L*a)AE5ZL=OJ46T;;zg=2(dmk* z78z&@VFRF>C=EcmUN6sq zWUoL5008i>#1a~GT(BWzJV$npwnx}66a2MbxS!V4K;9!l34pCyR{7$35MWZJ)Ru6M zj4A;m3B&cHM+TeXt@BL?e=j$vb2R74sZvB6z%L>tPDV(^uOJ0>29JKgE|nUgBnFYe zm0Jut2hjwl^e4iNBxP6swG58wkLs`L2LJ`X$DsBcfD9OHHR>WzJJtt;H1z?4+Q_vu z_1gmzGB!63$wRKinO+0bhE1 z(iaJ2#)(X6zrs-T342UQx*3KLq{dO9aaQ{nr0a7W3u*`cQuP zk}C9$f{~hYhxt7<_ZAc36N>}?OUD%Bq?Lwg(&7 zAFeQY-B2*u4Ww#y<&ItIXGQRJJ;U{k*AD1!hIgj;-1<*@!Ik7>x`C6HvyYgF2rHg#^aG#WH&~!Nh_b znR0$@qS0ITChAx90s(S4CTcrO!^k%-EPi37-9@{S^xh$3vFUGOLyA1VbIYIGBg{RQ znN;6YhH5pJYI&ZI)A(l&xa9mQ_uTpKp5AUD63x@P%Jz^UC_s-jw%K~;eCoF62=@9E z#QhL#+LIov#UlW`ht)h#Q4t-)(B~^*);oIo#5CkL-CE%YFpTcq%c=DDYm^0lh83wN zF@DXO)Ga1ke_d~inctEdRRIkdzGCwkO*Vo{$$d`t`Mp15cV;uX*1)4C^{g4C*ZJRs z)IriMSAwIfVTSgA#hkBXS}WpB@fhA!>6LpZU(J6*wa{)zQ~V%A1EWXu6Dm*?fc5<& zer_Q7rs`uY0Qb9HTW04g9&u@OhN@t<7nK5JJovc?Y{Cyy9+#BKFzctL;N?J_mm06X z=umgPMg@7mSNL>g zc;4)C8Jwpag~E|2$zk?fj$ku9zHF=7VlUr{*vMbfUtO&&rI+2WnZ2r}G8!i`3RS7$ z;U+C&fWr@iIrO{$E&54yx5*2}EKfpD_sSLi@|Yv{{DBy6Q_}oIzyySjlgvzvTg8}5 zOz?oOd{(!fEq=@#K<2atnG>V#5exJ*>CjAu;>MBL*R{f~ z_IeBVEuQ-{c~QoWIk>#KPPF|!Ia?UHj2KJIF()y_$2oDFJ9{|n>0q*AFPK$Q} zBY>9ATpxv?Pc%=&3dbAK2uGK{F>cEqFJflB_)sS9w$a!I_R@(8Mume#KMlHkTTrGi zUrGFAVFanXhj@KRWu3nQzr2M}2(1h|3tC|XwW-1=>m!IlJ_&$egxMXomQmJ=tEOsY zgd~sU92}d4d8eve9B!3!zB1_J2q6i4)gsjD-S*YZb9q}T2oE-j@4XN)Z~wW3o|)}L z=HnucsY&6FR>GsfUY~a7EKvIV-NwX7z&4M}?3TAV`Yxiy`k7sD0JKHU42;0>N~ri_ z(=U*i3cJD3@dB4ZVp~S&9A_`Bcm!9B#tUslj%rq5hXLr=M};ir6Y0r8g~0-zusDek zp!!+HvcyGXIF4seuqN^}@V-t$;<$`NdDvIXoH_TuklYE@aRByPCZvjbHiOYv9rp7D}!!5X3Z)T%cNf$lUq)LFgAN)aaw%eO;&VvcJe}7oHk+g4FG^f?~ zeQ-00CE!(Lj3L4MJDo-e6b=FP8|T4OKibigs~HI5S=hGea%t+V+1%wb$KLZ%H7BT4 zPoLewuG+#Lm^mAhf3;Li9E`bWQECa(ooBINxBfj08+0bUeayTV#~ryIsJCMWjFgB7(#|-Quc?U_6 z$T?#Iwm*wcR69)qB4-7^`n(ipYPgwn3~^4C7hjqI(a_)8;)sydqug9HrFP6JpYh-Y ztA=r5vPA8Xg2Lw+#G8Og*Q}APT3sp3E)b}CiuUlkkifzzB=zW@kd?>-C{^mDF?7fS zo)`a~U~G9B#H-z_0E!d_tyt&AROeyQQw`8`~RQk_tZ z30tc`D{~EImX*-O)@qd-rQ9nahFD4Fnb~B8Mx)M(aYBN>&=muLGX%5aHzuBQC>~s< zCa=o)E+xwR{D0Tec%Wj|4)42Qk7f0orLdqi@vC^{w(Bc#0+L&ueFU}QKQ*L9arI8?HSCmms793WcuM9S@ObnoHm$)SqR z!;*@Xx9#q<9wLCaRnhUr)!xS1C)U6LV5j!L+s-q=Q+h<_;VAieXau_@<<1 zjLcV)F?1)w5kv9Cctn!f5JxS8l?fVd^CgE{`ZGJvp(1MEhndb7Oawx zI8%rjhh4)Q9p<@_QYs7gw}sD8DXF2wpM4*ajDN+`70w0HMZX9GW4^tIO?V>CkFYNL z^$V7bGbhPOTtF2;SOE-UZYfn+^7c@VD6>1Hh||%+*w97;@UZ~cNpTpgg^}0|%(muk zDByKbO;UmniZVUP>1%QtWmtgHYRLT%b=Q+xfR}Y ze0gInv+>YIz-`m=kwrHI(U_g>hGfKxU)CocY&7}Vf<#G=&;rJr;zZ7CU(^-_hu2e& zS&XqgTmEBq?mg-EdK}Obw-kYA=;oxpz6rArObIj#+jq%=Re4}3KSQvz&tG&hE!7n;ZcFf=}vP6Qd87G`lW3^OI8SRoBgQzF}2T z6O|P3U0Vni1d#vYAdscCr!w!}t8!Ost9V*S`An?s9Wl{Vs^VX&XY;7hHi|4 zoq)u6!B{b^yO`+15Ue6ZSS<=890%E<9*OhlURhUR-*hY7bxH_i!|4eK2m};lIQ!g6 zm*!#mxbS%B3e;gYvX-TEr8X(RO^4#h(B$osPV&=CBp;CG61OUQ-t9;fc7ovJFlcfE zg*PZ`6cQvISHnAo!CJDOR?EdU*;%a;I!TlS{`j@cAV$%}zsB@n}Qpy>XN$)if*XV-1qJ2vu>%^n8@yV=L zpC$Cm_2VdCZ}sD3Z$;E%C_geJXT7RN1(|lIlKzXB2H*GI3bpG?shov_h@cHo{vdl)sl4aK7hK zFv4=}I-VMeu4`~IPSl5!-t8pX0)#G45(wkshUfs7e-4kMpD;+wvLiJaLWJ>FHQxT@ z+5_ZaGW*J9S_^1( zRkrG@ST_|MI>r^QyhPgm`kz^;e}iOc@}IL($~gb8K8KJLP5rdj$^Wa!TkXkE{U9L! zquN`+6sV05{{zYS-@ju3qZ4F5SBTJqXX1XN<#jF0LxT`w%1p|2YH=e}HOkAh7o#;2 zP4=*HHlnD+K&7sI$h(qi-E3~?t!1e2=beJi=F?yTp^uM;FT39q81S{YTO9h8@FtYP zBim+_>UD&0&Lo~uw&6o6E~knrrDf(-da6vYp%D-}ou{tb(7@b42dBC0OAE!MwB=(_ zMjXt$tpTx$@@6bRJ3oVv;}Fh~ZLP_sbd%cB2W#SO3tMO6XfKXgtMZ?7AI0Gs159+N zX?%hWlfP!(|8yQ@4IJ0HF$E4&_zLUJeU8>{=oA5S*Fot{zKJt%LE}`-FXS>4#+q~I zwDJ7Zh)MTq^GuRJT7tO>^tTXD_m_J3Rya{1TZ|i0>X@;GZx00ukLQ_(djOP z6!p7XQuNHslXHN4V4ZUD?=yYzR=FLI%z7UXX z7whJ*^#GTL^)nJ*$W;Fyt*n*78W7;&H2A;mQB;MV0?_EXnJ;Yw$vjIlW!8&nqX4NRTR8!dE#60B!B%XD7~{mK)`98Ig`6HIsJAwlgVYj?ak{B z%4hqs99b7J)y5Rmy7CKcJ3qn09OhaDY}XYEl#Fq_?xx=!$-Opr6pGxZ7wp{&q!%3A zgN#g^1ph=7i~?+C{!;$sn4v|9!C$sV!e3>CBG^wxWU8#>5VFyT@P-{3%eF$L>VulQ zH=|hjj6etrYV3NR!_68v_ISRd@9Eu(r0*%(n|O|hsBPd5tu24%ed+;${QyJ8o8Ab( z9iwggl|8=anuu%AYxDEhCr(f(y6g^+|H*DHi{d?e}5fLONp;fL>rs_H;=H)DZ!@jl24k=9((Fu%*q)nUjY2 z5pK}~aOJLtbLK~jn?$RaHbYJAA<>9W5VXjDW}E9O`O8d>wU2pyD&jf(rdNsy=(zA*3!})NP$b z&$M!2Qh6T?gNA;X03?glO}2Q)lVV$k>mrf^G3j%2%mhiF~uN5|#Ksxu~@8 zZvyI%d6s-beU(gOJWh(o%m&)oq+amHB92N-y^8`xMdA)!W9 zJ!b??gALgQ!FyU~Rzr+kVktWMlmMYCq$_nyq8oN&`TTtbK!R48#~Z?4-xP zphtN!W6nC{Hxp(EFZOQ3!X^*QE`6lt(aTuMcH(<~nKN8)b1XJaqgi0ox1`T@!t#8* zW{#d@50F>S;V%jJm6$FS%X$F^i^q`_&$t(l)>wYVGDuHnjJsyJLLo^ip&{H*nS1Fb$)#C^!nlT-$9FbzBaf zZdR-0e|pYKuWJ}%y?bb6_Fio-6F4Sxka)h*c$u{=%*4jtwx`tPa$gB5ii`u&-)W)9 znj?C51u^oXBd6f=8Y8~yoyJAAOv`Vi;t!1j+A9*JY&dMD zCYw9mC6|3DCx9`H=wSvhf?QCE%{oT)^3g;|D_TobAW+ESUy zvuF_B9Lhu8RwzIvF(tISpaRgBM_SUNa9rIyYW-Vi1yF{Pcr_`z{9^d;5SGmvklFSt z4!vD5Tez1t^$}fxFj{nhGzvWWT$LfDrFfG?fg1hdAn9C5*ieQAmMpp>&OVdIpo%>G zfIRNw&D8`)y-1bnAgz2ArZsyPh9t-4=u=&uP0Fp~pf<4OUnUq+q9=N&8zOb)V%;Z6 z>njT_01~&Pl+V8+KTU^^!kMciJ03>{sbc!bbkZi`tLpGg<-}pAb3#G#U6VmyUJBe7 zS{!wCYA&;N9;ai4I2xK2PV6=}S*0JV%pPQ2WElcJZPb7p0Vk+N@?<;oD_$ZvOn<^c$p(#v@C8UP&)>i(CqV zc?!hRZ2i-80N|MT1tPr&|DLa9jwdt{?7L4+d7q|I7Txnyr*xdxcG3m zq+h-+QhZjdJUpJ%lFoK2cvdRmT>F?JM1v_WuX;r-WM5$Si1(yo9-BNCYqo~vq|4ww znFJ&{VK|`fHsX1|*pT~^tOm(_17PZ{-?81d(-}(dxAivNpxW@`5!&^G<_5IwY-~9a z1oXcWk7eICL)@JpTP!Jxp2(}Al`WIaO{e_SxnYN(`s#jIgZja^XZ-dd1*rS&DLGpO zO_?WFK?W5BF$Q7fRhZ0X)x@ivb$VWvRSvwYx}u-HKaYpC@N$80^*V+;d%%R4T-gXf zv-m{->6VC4;N_@;=c}}vawaCtGhVD&mMgN4vUs+rjx}2(^c!k1X+>RhvXqhHTe}lV zbyb0SVrWgy&q8-y|9sSnX#v4#j8bZzv2wx&F^=Z*dl=gajM+^*&mg%HNrl2<#ZsVi zE=`=4XUt2v+5sj8E)@6N3+nQeh$a=Rnoz%vIdN5PaGgHt@?R7c782Oj*&k?b;<$?t znCe@h9a5qMPca2xL;Cdv>S@J-OLolM=-KMl1qY?9u&lDKz9ZgbdYNYF@WzNoVrX>V zDpS#~vVUXZCF6wjwy^|+%V-x12vdR55$dV}3b{*g32<^yuf*s@0fWL6{s+2}20qqw z_oL~%QeR~sAW~3XZb!+ZFF{DrJDmQ9L)Kdc9bn2+th@V12zAV3})TUVoP91qNLR)Qta1L_{a(HVuso!*@us8{L_OyRJ4$zmkuls>@%f0JO5-A*DhK=Iram+kEnB1g@gWb`WwnbOprmCN9&k85Na8(ni+H3AH z6?apUvlii=CVnLKwBIyV*tmzuPRF9oqDV7{I3ompano?4Y+!m=%jB4vGv)rO%3glF z8F1lg#qZ7V<7sJUtQ;s45B(V3?j$ji9F||K(?a0D=5dP`~f4VwwI2=q@KKLg$#L*)?b>xJm5^t zqnYSxY{9X%&-&QQsdnI;qDWCioQ7MsdLhs&f{^6Bh9hcOW5p*;~w7f9fq zf?wMFwJAQ*J}#yz@5~I!9%l9!&oQ>B#=Y><#(La$+Ta371)J@WPT_Li)*`}M7Nw8~ zkB=z|kd&Ufhh^y#V`xw-=ME1iQuKBgFCHDb$lJ%dwX~=6t4k0(6rX}^!v4ppSBlb@ z+Wcf%6k`2H5F-5VE%W~>LgB~HKG9F81?>MA^z!$Zh`?kG*k9=8pNV~E=9]B5G& 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

6^Hr(u%b`C^2K2j|{d1q^1!D$!Pr& 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≀PBC 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 j);Lj1&AfC~N#zBQ/dev/null"; // via da_command public static final String DACOMMAND_KILL_MANAGER = "/usr/bin/profile_command killmanager"; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AutoStartManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AutoStartManager.java index fdebe0a..dca4934 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AutoStartManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AutoStartManager.java @@ -142,7 +142,7 @@ public class AutoStartManager implements Runnable { public void run() { if (Toolbar.INSTANCE.setDevice(deviceName)) { if (Toolbar.INSTANCE.setApplicationByID(appid)) { - CommandAction.startTrace(false); + CommandAction.startTrace(); } else { Logger.warning("Failed to set application to toolbar"); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java index d1cf58a..587bf73 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java @@ -88,6 +88,7 @@ public class DAResult implements Serializable { ERR_DATA_SOCKET_CLOSED(-2012, UserErrorWarningLabels.ERROR_CONNECTION_CLOSED), ERR_DOWNLOAD_FILE_FAILED(-2013, UserErrorWarningLabels.ERROR_DOWNLOAD_FILE_FAILED), ERR_DOWNLOAD_FILE_FAILED_DUETO_SECURITY(-2014, UserErrorWarningLabels.ERROR_DOWNLOAD_FILE_FAILED_DUETO_SECURITY), + ERR_CANCEL_FAILED(-2015, UserErrorWarningLabels.ERROR_CANCEL_FAILED), ERR_MSG_START_FAIL(-2101, UserErrorWarningLabels.ERROR_START_TRACE_FAILED), ERR_MSG_SEND_FAIL(-2102, UserErrorWarningLabels.ERR_MSG_SEND_FAIL), diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAState.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAState.java index 5432a55..66206cf 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAState.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAState.java @@ -159,4 +159,8 @@ public enum DAState { public static boolean isStartable() { return (currentState == INIT || currentState == DONE); } + + public static boolean isDone() { + return (currentState == DONE); + } } 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 084b258..f5dccea 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/Global.java @@ -33,9 +33,7 @@ import org.tizen.dynamicanalyzer.communicator.DeviceInfo; import org.tizen.dynamicanalyzer.project.AppInfo; import org.tizen.dynamicanalyzer.project.ImageInfo; import org.tizen.dynamicanalyzer.project.Project; -import org.tizen.dynamicanalyzer.project.callstack.RuntimeCallstackManager; import org.tizen.dynamicanalyzer.protocol.Protocol; -import org.tizen.dynamicanalyzer.util.Logger; // 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. @@ -45,7 +43,6 @@ public class Global { private static DeviceInfo currentDevice = null; private static AppInfo currentApplication = null; private static Project currentProject = null; - private static RuntimeCallstackManager temporaryCallstackManager = new RuntimeCallstackManager(); private static boolean lsanInitSucceeded = false; public static boolean isLSanInitialized() { @@ -182,13 +179,4 @@ public class Global { return AnalyzerConstants.UNKNOWN_LIB; } } - - public static RuntimeCallstackManager getRuntimeCallstackManager() { - if (currentProject != null) { - return currentProject.getRuntimeCallstackManager(); - } else { - Logger.error("should not be happened"); - return temporaryCallstackManager; - } - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/SymbolManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/SymbolManager.java index 3abdc90..fe9cbc8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/SymbolManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/SymbolManager.java @@ -30,9 +30,7 @@ import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.lang.ref.WeakReference; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfDebugInfoProviderFactory; @@ -61,8 +59,6 @@ import org.tizen.dynamicanalyzer.project.ProcessInformation; import org.tizen.dynamicanalyzer.project.ProcessMemoryMap; import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; -import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; import org.tizen.dynamicanalyzer.util.Logger; public class SymbolManager { @@ -323,18 +319,14 @@ public class SymbolManager { } /** - * getFuncName : returns function id from pc address, pid, time and set build type and binary - * path for ProfileData - * - * @param input - * : can be null. If not null, set build type and binary path for ProfileData - * @param address - * : pc address - * @param pid - * : process id - * @param time - * : time stamp of the function call - * @return : function id + * Returns function id from pc address, pid, time and sets build type and binary + * path for ProfileData. + * + * @param input set build type and binary path for input ProfileData, can be null + * @param address pc address + * @param pid process id + * @param time time stamp of the function call + * @return function identifier */ // TODO: remove unnecessary code public static int getFuncId(ProfileData input, long address, int pid, long time) { @@ -349,66 +341,23 @@ public class SymbolManager { ProcessMemoryMap pmap = process.getProcessMemoryMap(time); if (pmap != null) { - if (address >= pmap.getMainbinary().getLowestAddress() - && address <= pmap.getMainbinary().getHighestAddress()) { - // if address is in main executable binary of process - String baseAddr = Long.toString(pmap.getMainbinary().getLowestAddress()); - String pcStr = Long.toString(address); - - BinaryInfo binInfo = project.getDeviceStatusInfo().getBinaryInfo( - pmap.getMainbinary().getBinaryID()); + LibraryObject libraryObject = pmap.getLibraryByAddress(address); + + String baseAddr = Long.toString(libraryObject.getLowestAddress()); + String pcStr = Long.toString(address); + + BinaryInfo binInfo = project.getDeviceStatusInfo().getBinaryInfo(libraryObject.getBinaryID()); + if (binInfo != null) { String localPath = binInfo.getTempBinaryPath(); if (null != input) { input.setBuildType(binInfo.getType()); } + boolean isPieBuild = true; if (binInfo.getType() != 1) { isPieBuild = false; } functionName = addr2func(localPath, pcStr, isPieBuild, baseAddr); - } else { - // if address is not in main executable binary of process - // search address in binary of "binary setting configuration" - List binDataList = BinarySettingManager.getInstance() - .getBinarySettingList(); - List binPaths = new ArrayList(); - for (BinarySettingData binData : binDataList) { - binPaths.add(binData.getBinaryPath()); - } - - LibraryObject libraryObject = null; - int size = binPaths.size(); - for (int i = 0; i < size; i++) { - String binPath = binPaths.get(i); - BinaryInfo bininfo = project.getDeviceStatusInfo().getBinaryInfo(binPath); - LibraryObject libObj = pmap.getLibraryByBinaryID(bininfo.getID()); - if (null == libObj) { - continue; - } - long lowAddr = libObj.getLowestAddress(); - long highAddr = libObj.getHighestAddress(); - - if (address >= lowAddr && address <= highAddr) { - libraryObject = libObj; - break; - } - } - - // if found binary of address in "binary setting configuration" - if (null != libraryObject) { - int binaryID = libraryObject.getBinaryID(); - BinaryInfo binInfo = project.getDeviceStatusInfo().getBinaryInfo(binaryID); - if (binInfo != null) { - String localPath = binInfo.getTempBinaryPath(); - String baseAddr = Long.toString(libraryObject.getLowestAddress()); - String pcStr = Long.toString(address); - boolean isPieBuild = true; - if (binInfo.getType() != 1) { - isPieBuild = false; - } - functionName = addr2func(localPath, pcStr, isPieBuild, baseAddr); - } - } } } 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 1979d04..c7ff570 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java @@ -146,8 +146,6 @@ public class DACommunicator { } else { Logger.warning("unable to get real path of %s", path); } - } catch (InterruptedException e) { - Logger.exception(e); } catch (UnsupportedProtocolException e) { Logger.exception(e); } @@ -330,34 +328,47 @@ public class DACommunicator { return curDev.getPackageInfoMap(); } - public static DAResult startTrace(IProgress progress) throws InterruptedException { + public static DAResult startTrace(IProgress progress) { DeviceInfo curDev = Global.getCurrentDeviceInfo(); - if (curDev != null) { - try { - return curDev.getCommunicator().getSubCommunicator() - .sendTraceStartMessage(progress); - } catch (UnsupportedProtocolException e) { - // never happened currently - Logger.error("It is not supported to send start trace message by communicator"); - return new DAResult(ErrorCode.ERR_PROTOCOL_NOT_SUPPORTED); - } - } else { + if (curDev == null) return new DAResult(ErrorCode.ERR_NO_DEVICE); + + SubCommunicator subComm = curDev.getCommunicator().getSubCommunicator(); + + try { + // inform SWAP that all library binaries should be instrumented + AppInfo curApp = Global.getCurrentApplication(); + List binPaths = curApp.getProcessInformation(); + binPaths.remove(curApp.getExecBinaryPath()); + DAResult ret = addInstrumentation(binPaths); + + return ret.isSuccess() ? subComm.sendTraceStartMessage(progress) : ret; + } catch (UnsupportedProtocolException e) { + // never happened currently + Logger.error("It is not supported to send start trace message by communicator"); + return new DAResult(ErrorCode.ERR_PROTOCOL_NOT_SUPPORTED); } } - public static DAResult stopTrace() throws InterruptedException { + public static DAResult stopTrace() { DeviceInfo curDev = Global.getCurrentDeviceInfo(); - if (curDev != null) { - try { - return curDev.getCommunicator().getSubCommunicator().sendTraceStopMessage(null); - } catch (UnsupportedProtocolException e) { - // never happened currently - Logger.error("It is not supported to send stop trace message by communicator"); - return new DAResult(ErrorCode.ERR_PROTOCOL_NOT_SUPPORTED); - } - } else { + if (curDev == null) return new DAResult(ErrorCode.ERR_NO_DEVICE); + + SubCommunicator subComm = curDev.getCommunicator().getSubCommunicator(); + + try { + // inform SWAP that all library binaries should not be instrumented + // anymore + AppInfo curApp = Global.getCurrentApplication(); + List binPaths = curApp.getProcessInformation(); + binPaths.remove(curApp.getExecBinaryPath()); + DAResult ret = removeInstrumentation(binPaths); + + return ret.isSuccess() ? subComm.sendTraceStopMessage(null) : ret; + } catch (UnsupportedProtocolException e) { + Logger.error("It is not supported to send stop trace message by communicator"); + return new DAResult(ErrorCode.ERR_PROTOCOL_NOT_SUPPORTED); } } @@ -386,8 +397,8 @@ public class DACommunicator { } } - public static DAResult addInstrumentation(List paths) throws InterruptedException, - UnsupportedProtocolException { + public static DAResult addInstrumentation(List paths) + throws UnsupportedProtocolException { DeviceInfo curDev = Global.getCurrentDeviceInfo(); if (curDev != null) { return curDev.getCommunicator().getSubCommunicator() @@ -397,8 +408,8 @@ public class DACommunicator { } } - public static DAResult removeInstrumentation(List paths) throws InterruptedException, - UnsupportedProtocolException { + public static DAResult removeInstrumentation(List paths) + throws UnsupportedProtocolException { DeviceInfo curDev = Global.getCurrentDeviceInfo(); if (curDev != null) { return curDev.getCommunicator().getSubCommunicator() @@ -540,4 +551,24 @@ public class DACommunicator { Logger.debug("daemon log file is too large or does not exist"); } } + + /** + * Retrieves list of shared libraries from specified package. + * + * @param packageId package ID + * @return list of absolute paths to application libraries + */ + public static List getApplicationLibs(String packageId) { + final List libPaths = new ArrayList<>(); + CommunicatorUtils.execShellCommand(Global.getCurrentDeviceInfo().getIDevice(), + String.format(AnalyzerShellCommands.CMD_GET_APPLICATION_LIBS, packageId), + new MultiLineReceiver() { + @Override + public void processNewLines(String[] lines) { + for (String line : lines) + libPaths.add(line); + } + }); + return libPaths; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DeviceManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DeviceManager.java index 0ad8e43..5a6ecc7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DeviceManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DeviceManager.java @@ -29,7 +29,9 @@ import static org.tizen.sdblib.util.DeviceUtil.isOnline; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.common.DAResult; @@ -37,8 +39,10 @@ import org.tizen.dynamicanalyzer.common.DAResult.ErrorCode; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.common.path.PathManager; import org.tizen.dynamicanalyzer.handlers.UIActionHolder; +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; import org.tizen.dynamicanalyzer.protocol.Protocol; import org.tizen.dynamicanalyzer.setting.SettingDataManager; +import org.tizen.dynamicanalyzer.ui.notification.NotificationManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.sdblib.IDevice; @@ -47,7 +51,9 @@ import org.tizen.sdblib.SmartDevelopmentBridge; public class DeviceManager { private static SmartDevelopmentBridge sdbBridge = null; - private static List devices = new ArrayList(); + private static List devices = Collections + .synchronizedList(new ArrayList()); + private static Set listeners = new HashSet<>(); public static void init() { if (null != PathManager.SDB_PATH) { @@ -55,52 +61,45 @@ public class DeviceManager { sdbBridge.startBridge(); sdbBridge.waitforStart(); } + + /** + * Updates UI on any connected or disconnected device. + */ + if (Global.isGUIMode()) + listeners.add(DeviceManager::updateUIByDevice); } private static IDeviceChangeListener deviceChanged = new IDeviceChangeListener() { @Override public void onDisconnected(IDevice device) { Logger.debug("device disconnected : " + device.getSerialNumber()); - synchronized (devices) { - // called : each device disconnected time - if (onDisconnectedInternal(device)) { - updateToolbarByDevice(); - } - } + if (onDisconnectedInternal(device)) + notifyListeners(false, device); } @Override public void onConnected(IDevice device) { Logger.debug("device connected : " + device.getSerialNumber()); - synchronized (devices) { - // It is called when dynamic-analyzer start, only once - if (onConnectedInternal(device)) { - updateToolbarByDevice(); - } - } + if (onConnectedInternal(device)) + notifyListeners(true, device); } @Override public void onChanged(IDevice device, int changeMask) { Logger.debug("device changed : " + device.getSerialNumber() + " : " + changeMask); - synchronized (devices) { - // called : device added - already dynamic-analyzer running (not tracing) - if (changeMask == IDevice.CHANGE_STATE - || changeMask == IDevice.CHANGE_STATE_TO_ONLINE) { - // state changed (offline -> online or suspended -> online) - boolean bRemoved = onDisconnectedInternal(device); - boolean bAdded = onConnectedInternal(device); - if (bRemoved || bAdded) { - updateToolbarByDevice(); - } - } else { - // do nothing - } + if (changeMask == IDevice.CHANGE_STATE + || changeMask == IDevice.CHANGE_STATE_TO_ONLINE) { + // state changed (offline -> online or suspended -> online) + boolean bRemoved = onDisconnectedInternal(device); + boolean bAdded = onConnectedInternal(device); + if (bRemoved) + notifyListeners(false, device); + else if (bAdded) + notifyListeners(true, device); } } }; - // this method should be called inside synchronized(devices) block private static boolean onDisconnectedInternal(IDevice device) { boolean bRemoved = false; DeviceInfo deviceInfo = getDeviceByName(device.getSerialNumber()); @@ -112,66 +111,66 @@ public class DeviceManager { return bRemoved; } - // this method should be called inside synchronized(devices) block private static boolean onConnectedInternal(IDevice device) { - boolean bAdded = false; DeviceInfo devInfo = new DeviceInfo(device); for(DeviceInfo dinfo : devices) { - if(dinfo.isSameDevice(devInfo)) + if (dinfo.isSameDevice(devInfo)) return true; } // set availability of root - if(SettingDataManager.INSTANCE.isPlatformDA() == true) + if (SettingDataManager.INSTANCE.isPlatformDA()) devInfo.setAvailabilityOfRoot(CommunicatorUtils.enableRoot(device)); - + // connect with swap of device DAResult result = devInfo.getCommunicator().connect(); if (result.isSuccess()) { String devProtocol = devInfo.getCommunicator().getProtocolVersion(); if (devProtocol != null) { - try { - double versionNum = Double.parseDouble(devProtocol); - - if (versionNum >= Protocol.VERSION_42.getVersionNum()) { - Logger.debug("set Memps Available"); - devInfo.setMempAvailable(true); - } - } catch (Exception ex) { - Logger.debug("protocol version - " + devProtocol); + double versionNum = Protocol.getVersion(devProtocol).getVersionNum(); + + if (versionNum >= Protocol.VERSION_42.getVersionNum()) { + Logger.debug("set Memps Available"); + devInfo.setMempAvailable(true); } } devices.add(devInfo); - bAdded = true; - } - else if (result.equals(new DAResult(ErrorCode.ERR_NOT_SUPPORTED))){ - Logger.warning("Cannot found some components: " + result.getMessage()); - result.setDetailMessage(devInfo.getIDevice().getDeviceName() + ", " + - devInfo.getIDevice().getSerialNumber()); - UIActionHolder.getUIAction().showWarning(result); - } - else { - Logger.warning("Cannot connect with swap manager : " + result.getMessage()); - result.setDetailMessage(devInfo.getIDevice().getDeviceName() + ", " + - devInfo.getIDevice().getSerialNumber()); - UIActionHolder.getUIAction().showWarning(result); + return true; } - return bAdded; + String errMsg = result.equals(new DAResult(ErrorCode.ERR_NOT_SUPPORTED)) + ? "Cannot found some components: " + : "Cannot connect with swap manager: "; + Logger.warning(errMsg + result.getMessage()); + + result.setDetailMessage(devInfo.getIDevice().getDeviceName() + ", " + + devInfo.getIDevice().getSerialNumber()); + UIActionHolder.getUIAction().showWarning(result); + + return false; } - private static void updateToolbarByDevice() { - // this should be asyncExec - // think about this happened while device combo is middle of selection - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - if (!Toolbar.INSTANCE.updateDeviceCombo(null)) { - Toolbar.INSTANCE.updateAppCombo(true); - } - } + /** + * Updates toolbar devices combobox and creates pop-up notifications to + * alert user if some device was connected or disconnected. + * + * @param connected device status, {@code true} if device was connected and + * {@code false} if disconnected + * @param device corresponding device + */ + private static void updateUIByDevice(final boolean connected, final IDevice device) { + Display.getDefault().asyncExec(() -> { + if (!Toolbar.INSTANCE.updateDeviceCombo(null)) + Toolbar.INSTANCE.updateAppCombo(true); }); + + String title = connected + ? AnalyzerLabels.NOTIFICATION_DEVICE_CONNECTED + : AnalyzerLabels.NOTIFICATION_DEVICE_DISCONNECTED; + String message = device.getDeviceName(); + String details = device.getSerialNumber(); + NotificationManager.showNotification(title, message, details); } public static void addDeviceListener() { @@ -183,18 +182,14 @@ public class DeviceManager { } public static void loadDevices() { - if (null != sdbBridge) { - synchronized (devices) { - IDevice[] devices = sdbBridge.getDevices(); - int size = devices.length; - for (int i = 0; i < size; i++) { - if (isOnline(devices[i])) { - onConnectedInternal(devices[i]); - } - } - } - } else { - Logger.debug("sdbbridge is null!"); + if (null == sdbBridge) { + Logger.warning("sdbbridge is null!"); + return; + } + + for (IDevice device : sdbBridge.getDevices()) { + if (isOnline(device)) + onConnectedInternal(device); } } @@ -204,17 +199,16 @@ public class DeviceManager { */ public static List getDevicesOnSdb() { List sdbDevices = new ArrayList(); - if (null != sdbBridge) { - IDevice[] devices = sdbBridge.getDevices(); - int size = devices.length; - for (int i = 0; i < size; i++) { - if (isOnline(devices[i])) { - sdbDevices.add(new DeviceInfo(devices[i])); - } - } - } else { - Logger.debug("sdbbridge is null!"); + if (null == sdbBridge) { + Logger.warning("sdbbridge is null!"); + return sdbDevices; + } + + for (IDevice device : sdbBridge.getDevices()) { + if (isOnline(device)) + sdbDevices.add(new DeviceInfo(device)); } + return sdbDevices; } @@ -223,11 +217,9 @@ public class DeviceManager { } public static DeviceInfo getDeviceByName(String name) { - synchronized (devices) { - for (DeviceInfo device : devices) { - if (device.getIDevice().getSerialNumber().equals(name)) { - return device; - } + for (DeviceInfo device : devices) { + if (device.getIDevice().getSerialNumber().equals(name)) { + return device; } } @@ -239,36 +231,53 @@ public class DeviceManager { } public static boolean onDeviceSelected(String serial) { - boolean bret = true; if (null == serial || serial.isEmpty()) { Global.setCurrentDeviceInfo(null); - } else { - boolean bFound = false; - synchronized (devices) { - for (DeviceInfo device : devices) { - if (serial.equals(device.getIDevice().getSerialNumber())) { - Global.setCurrentDeviceInfo(device); - bFound = true; - break; - } - } - } + return true; + } - if (!bFound) { - // there is no matching device - // so, do not change current device - bret = false; + for (DeviceInfo device : devices) { + if (serial.equals(device.getIDevice().getSerialNumber())) { + Global.setCurrentDeviceInfo(device); + return true; } } - return bret; + return false; } public static void closeAll() { - synchronized (devices) { - for (DeviceInfo device : devices) { - device.getCommunicator().disconnect(); - } - } + for (DeviceInfo device : devices) + device.getCommunicator().disconnect(); + } + + /** + * Adds specified device status listener. + * + * @param listener {@link IDeviceStatusListener} implementation + */ + public static void addDeviceStatusListener(IDeviceStatusListener listener) { + listeners.add(listener); + } + + /** + * Removes specified device status listener. + * + * @param listener {@link IDeviceStatusListener} implementation + */ + public static void removeDeviceStatusListener(IDeviceStatusListener listener) { + listeners.remove(listener); + } + + /** + * Notifies all listeners about new {@code device} status. + * + * @param connected {@code true} if device was connected and {@code false} + * if device was disconnected + * @param device device which status was changed + */ + private static void notifyListeners(boolean connected, IDevice device) { + for (IDeviceStatusListener listener : listeners) + listener.onStatusChanged(connected, device); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDECommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDECommunicator.java index 80c66ed..6988372 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDECommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDECommunicator.java @@ -59,9 +59,6 @@ import org.tizen.dynamicanalyzer.nl.UserErrorWarningLabels; import org.tizen.dynamicanalyzer.project.AppInfo; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveParser; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.CommonUtil; import org.tizen.dynamicanalyzer.util.Logger; @@ -376,25 +373,6 @@ public class IDECommunicator implements Runnable { } localPackagePathList.add(new String(strMsg[msgIndex].trim())); } - /* - * make interactiveInfo, FunctionBodyInstrument - */ - parseCheckpoints(strMsg, msgIndex); - - // remove waiting dialog close - /* - if (isOpenWelcomeDlg()) { - Logger.debug("Start -AutoRun Waiting..."); - synchronized (getWaitingWelcomeDlg()) { - try { - getWaitingWelcomeDlg().wait(); - } catch (InterruptedException e) { - Logger.exception(e); - } - } - Logger.debug("End - AutoRun Waiting"); - } - */ // change the pages by whether interactive data exist or not UIActionHolder.getUIAction().setPageBySetting(); @@ -528,35 +506,6 @@ public class IDECommunicator implements Runnable { Toolbar.INSTANCE.setAllControlState(true); } - private void parseCheckpoints(String[] strMsg, int msg_index_interactive) { - InteractiveDataManager.getInstance().getVariableInfoList().clear(); - List interactiveInfoList = new ArrayList(); - for (int i = msg_index_interactive; i < strMsg.length; i++) { - interactiveInfoList.add(new String(strMsg[i].trim())); - } - if (interactiveInfoList.isEmpty() == false) { - int msg_index = 0; - int variableCount = Integer.parseInt(interactiveInfoList.get(msg_index++)); - String debugBinaryPath = interactiveInfoList.get(msg_index++); - for (int i = 0; i < variableCount; i++) { - String sourcePath = interactiveInfoList.get(msg_index++); - String variableName = interactiveInfoList.get(msg_index++); - int lineNum = Integer.parseInt(interactiveInfoList.get(msg_index++)); - int arrayCount = Integer.parseInt(interactiveInfoList.get(msg_index++)); - int checkLocation = Integer.parseInt(interactiveInfoList.get(msg_index++)); - InteractiveInfo interactiveInfo = InteractiveParser.getInteractiveInfo( - debugBinaryPath, sourcePath, lineNum, variableName, arrayCount, - checkLocation); - if (interactiveInfo == null) { - Logger.warning("Invalid Interactive Info : " + sourcePath + ", " + lineNum - + ", " + variableName + ", " + arrayCount); - continue; - } - InteractiveDataManager.getInstance().addVariableInfo(interactiveInfo); - } - } - } - private void popupMessageWithAppname(final String appName, final String postfix) { String name = appName; if (name.length() > APPNAME_LENGTH) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDeviceStatusListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDeviceStatusListener.java new file mode 100644 index 0000000..267dddc --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/IDeviceStatusListener.java @@ -0,0 +1,19 @@ +package org.tizen.dynamicanalyzer.communicator; + +import org.tizen.sdblib.IDevice; + +/** + * Listener used by {@link DeviceManager}. + * + * @author d.nikiforov + */ +@FunctionalInterface +public interface IDeviceStatusListener { + /** + * Called when {@code device} is connected or disconnected. + * + * @param connected whether device was connected ({@code true} if connected) + * @param device {@link IDevice} instance + */ + public void onStatusChanged(boolean connected, IDevice device); +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java index 8bf4b88..74e9cfb 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java @@ -49,49 +49,48 @@ public abstract class SubCommunicator { * send messages *******************************************************/ - public abstract DAResult sendTraceStartMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException; + public abstract DAResult sendTraceStartMessage(IProgress progress) + throws UnsupportedProtocolException; - public abstract DAResult sendTraceStopMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException; + public abstract DAResult sendTraceStopMessage(IProgress progress) + throws UnsupportedProtocolException; public abstract DAResult sendConfigurationMessage(IProgress progress) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; public abstract DAResult sendBinaryInfoMessage(IProgress progress, List paths) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; - public abstract DAResult sendTargetInfoMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException; + public abstract DAResult sendTargetInfoMessage(IProgress progress) + throws UnsupportedProtocolException; public abstract DAResult sendInstrumentAddMessage(IProgress progress, List paths) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; public abstract DAResult sendInstrumentRemoveMessage(IProgress progress, List paths) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; - public abstract DAResult sendProbeMapMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException; + public abstract DAResult sendProbeMapMessage(IProgress progress) + throws UnsupportedProtocolException; - public abstract DAResult sendKeepAliveMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException; + public abstract DAResult sendKeepAliveMessage(IProgress progress) + throws UnsupportedProtocolException; - public abstract DAResult sendScreenshotMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException; + public abstract DAResult sendScreenshotMessage(IProgress progress) + throws UnsupportedProtocolException; public abstract DAResult sendProcessAddInfoMessage(IProgress progress, List pids, - Map infoMap) throws InterruptedException, - UnsupportedProtocolException; + Map infoMap) throws UnsupportedProtocolException; public abstract DAResult sendUIHierarchyMessage(IProgress progress, int requestOption) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; public abstract DAResult sendUIScreenshotMessage(IProgress progress, long uiObjectAddress) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; public abstract DAResult sendUIHierarchyCancelMessage(IProgress progress) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; public abstract DAResult sendRealPathMessage(IProgress progress, String path) - throws InterruptedException, UnsupportedProtocolException; + throws UnsupportedProtocolException; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/DataThread.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/DataThread.java index b35f75f..5829d75 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/DataThread.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/DataThread.java @@ -61,7 +61,9 @@ public abstract class DataThread implements Runnable { thread.join(); thread = null; } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug("Interrupted while joining previously started thread: " + + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); return false; } } @@ -84,7 +86,9 @@ public abstract class DataThread implements Runnable { thread = null; Logger.debug(getThreadName() + " thread joined!"); //$NON-NLS-1$ } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug("Interrupted while stopping working thread: " + + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); return false; } } @@ -105,7 +109,9 @@ public abstract class DataThread implements Runnable { thread = null; Logger.debug(getThreadName() + " thread joined!"); //$NON-NLS-1$ } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug("Interrupted while force-stopping working thread: " + + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); return false; } } @@ -141,6 +147,7 @@ public abstract class DataThread implements Runnable { data = dataQueue.take(); // wait if empty } catch (InterruptedException e) { Logger.debug(getThreadName() + " is interrupted while taking from queue"); + Thread.currentThread().interrupt(); } return data; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/IProgress.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/IProgress.java index 3bcb971..89bac91 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/IProgress.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/IProgress.java @@ -33,8 +33,13 @@ public interface IProgress { public void setStageComplete(STAGE stage); public boolean isCanceled(); - - public void testCancel() throws InterruptedException; + + /** + * Checks whether operation was canceled. + * + * @return {@code true} if operation was canceled + */ + public boolean testCancel(); public void run(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ProgressTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ProgressTable.java index 1924014..2a1de7e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ProgressTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/ProgressTable.java @@ -29,25 +29,28 @@ package org.tizen.dynamicanalyzer.control; import java.util.EnumMap; import java.util.Map; +import org.tizen.dynamicanalyzer.common.DAResult.ErrorCode; + public class ProgressTable { public enum STAGE { + // @formatter:off NONE(0), - CHECK_DEV(3), - CHECK_APP(3), - CHECK_CONFIG(5), + CHECK_DEV(3, ErrorCode.ERR_DISCONNECTED), + CHECK_APP(3, ErrorCode.ERR_INVALID_APP), + CHECK_CONFIG(5, ErrorCode.ERR_CONFIG_FAILED), CREATE_PROJECT(2), ESTABLISH_DB(5), CREATE_DBTABLE(20), RESET_UI(3), - CREATE_DATATHREAD(3), - CREATE_MESSAGEPARSER(3), - CREATE_LOGPARSER(3), + CREATE_DATATHREAD(3, ErrorCode.ERR_START_DATA_CHANNEL), + CREATE_MESSAGEPARSER(3, ErrorCode.ERR_START_MESSAGE_PARSER), + CREATE_LOGPARSER(3, ErrorCode.ERR_START_LOG_PARSER), CREATE_PAGEMANAGER(10), CREATE_CALLSTACK_INSERTER(3), START_RESOURCE_MONITOR(2), SEND_STARTMSG(15), - WAIT_PROCINFO(20), + WAIT_PROCINFO(20, ErrorCode.ERR_NO_PROCINFO), START_CLOCK(2), CREATE_SCREENSHOT_TIMER(2), CREATE_UPDATE_TIMER(2), @@ -56,21 +59,22 @@ public class ProgressTable { STOP_SCREENSHOT_TIMER(2), STOP_UPDATE_TIMER(2), SEND_STOPMSG(15), - /* - STOP_DATATHREAD(10), - STOP_MESSAGEPARSER(8), - STOP_LOGPARSER(8), - STOP_PAGEMANAGER(17), - STOP_CALLSTACK_INSERTER(5), - */ STOP_DATATHREADS(48), SUMMARIZE_UI(5), FINAL(0); + // @formatter:on protected int weight; + protected ErrorCode errCode; private STAGE(int weight) { this.weight = weight; + this.errCode = ErrorCode.ERR_UNKNOWN; + } + + private STAGE(int weight, ErrorCode errCode) { + this.weight = weight; + this.errCode = errCode; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java index 01193cd..d56436c 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java @@ -26,6 +26,9 @@ package org.tizen.dynamicanalyzer.control; +import java.util.Arrays; +import java.util.List; + import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Display; @@ -53,7 +56,6 @@ import org.tizen.dynamicanalyzer.swap.communicator.DataChannelThread; import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; import org.tizen.dynamicanalyzer.swap.logparser.LogParser; import org.tizen.dynamicanalyzer.swap.logparser.MessageParser; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotTimer; import org.tizen.dynamicanalyzer.ui.page.MenuBar; import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; @@ -86,8 +88,8 @@ public class StartTraceManager implements Runnable { } @Override - public void testCancel() throws InterruptedException { - StartTraceManager.this.testCancel(); + public boolean testCancel() { + return StartTraceManager.this.testCancel(); } @Override @@ -110,8 +112,8 @@ public class StartTraceManager implements Runnable { } @Override - public void testCancel() throws InterruptedException { - StartTraceManager.this.testCancel(); + public boolean testCancel() { + return StartTraceManager.this.testCancel(); } @Override @@ -164,237 +166,238 @@ public class StartTraceManager implements Runnable { @Override public void run() { - DAResult result = new DAResult(ErrorCode.SUCCESS); - - try { - startThread = Thread.currentThread(); - - if (!CommonAction.checkDeviceValidness()) { - result = new DAResult(ErrorCode.ERR_DISCONNECTED); - return; - } - - setStageComplete(STAGE.CHECK_DEV); - - if (!CommonAction.checkApplicationValidness()) { - result = new DAResult(ErrorCode.ERR_INVALID_APP); - return; - } - setStageComplete(STAGE.CHECK_APP); - - if (!CommonAction.checkConfiguration()) { - result = new DAResult(ErrorCode.ERR_CONFIG_FAILED); - return; - } - setStageComplete(STAGE.CHECK_CONFIG); - - CommonAction.clear(); + startThread = Thread.currentThread(); + DAResult result = setup(); + + if (lastStage == STAGE.FINAL && result.isSuccess()) + DAState.changeCurrentState(DAState.RUNNING); + else { + DAState.changeCurrentState(DAState.PREPARE_CANCEL); + if (!cleanup()) + /** + * You really don't want to be here. Some threads might still be + * working and some not. Application state becomes inconsistent. + */ + result = new DAResult(ErrorCode.ERR_CANCEL_FAILED); + } - // make and initialize new project - Project project = new Project(); - Global.setProject(project); - project.init(initProgress); - project.setMempsAvailable(Global.getCurrentDeviceInfo().getMempAvailable()); + // close progress dialog + if (progressDlg != null) { + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + progressDlg.close(); + } + }); + } - // reset UI - if (UILayoutDataManager.INSTANCE.isDirty()) { - UIActionHolder.getUIAction().setUIElementsBySetting(); - } - UIActionHolder.getUIAction().applyStartTraceUI(); - UIActionHolder.getUIAction().applyWebProfilingUI(project.isWebApplication()); - setStageComplete(STAGE.RESET_UI); - - // start data receive thread - if (!DataChannelThread.getInstance().start()) { - // failed to start data channel thread - result = new DAResult(ErrorCode.ERR_START_DATA_CHANNEL); - return; - } - setStageComplete(STAGE.CREATE_DATATHREAD); + // if error occurred and it was not caused by cancel, show the error dialog + if (!result.isSuccess() && result.getErrorCode() != ErrorCode.ERR_BY_USER_CANCEL) { + UIActionHolder.getUIAction().showWarning(result); + } - // start message parser thread - if (!MessageParser.getInstance().start()) { - // failed to start message parser - result = new DAResult(ErrorCode.ERR_START_MESSAGE_PARSER); - return; - } - setStageComplete(STAGE.CREATE_MESSAGEPARSER); + if (Global.isGUIMode()) { + // set shortcut and toolbar UI as DA state + ShortCutManager.getInstance().setEnabled(true); + Toolbar.INSTANCE.changeUIState(DAState.getCurrentState()); + } + } - // start log parser thread - if (!LogParser.getInstance().start()) { - // failed to start log parser - result = new DAResult(ErrorCode.ERR_START_LOG_PARSER); - return; - } - setStageComplete(STAGE.CREATE_LOGPARSER); + /** + * Executes all necessary setup routines for stages from + * {@link PHASE#TRACE_START}. + * + * @return {@link DAResult} object + */ + private DAResult setup() { + for (STAGE stage : PHASE.TRACE_START.stageArray) { + DAResult result = setupStage(stage); + if (!result.isSuccess()) + return result; + if (!setStageComplete(stage)) + return new DAResult(ErrorCode.ERR_BY_USER_CANCEL); + } - // start registered data manager thread and db inserters - DataManagerRegistry.startThreads(); - setStageComplete(STAGE.CREATE_PAGEMANAGER); + return DAResult.SUCCESS; + } - // start callstack inserter - CallStackInserter.getInstance().start(); - setStageComplete(STAGE.CREATE_CALLSTACK_INSERTER); + /** + * Sets up specified {@link STAGE}. + * + * @param stage stage to setup + * @return {@link DAResult} object + */ + private DAResult setupStage(STAGE stage) { + boolean result = true; + switch (stage) { + case CHECK_DEV: + result = CommonAction.checkDeviceValidness(); + break; + case CHECK_APP: + result = CommonAction.checkApplicationValidness(); + break; + case CHECK_CONFIG: + result = CommonAction.checkConfiguration(); + break; + case RESET_UI: + CommonAction.clear(); + Project project = createProject(); + Global.setProject(project); + resetUI(project); + break; + case CREATE_DATATHREAD: + result = DataChannelThread.getInstance().start(); + break; + case CREATE_MESSAGEPARSER: + result = MessageParser.getInstance().start(); + break; + case CREATE_LOGPARSER: + result = LogParser.getInstance().start(); + break; + case CREATE_PAGEMANAGER: + DataManagerRegistry.startThreads(); + break; + case START_RESOURCE_MONITOR: + ResourceMonitor.start(); + break; + case SEND_STARTMSG: + DAResult ret = DACommunicator.startTrace(startProgress); + if (!ret.isSuccess() && testCancel()) + ret = new DAResult(ErrorCode.ERR_BY_USER_CANCEL); + return ret; + case WAIT_PROCINFO: + try { + result = waitProcInfo(PROCINFO_WAIT_TIME); + } catch (InterruptedException e) { + return new DAResult(ErrorCode.ERR_BY_USER_CANCEL); + } + break; + case CREATE_SCREENSHOT_TIMER: + FlatPreferences pref = FlatPreferences.SCREENSHOT_PERIODICALLY; + int value = SettingDataManager.INSTANCE.getPreferenceValue(pref); + if (value > 0 && SettingDataManager.INSTANCE.isFlatFeatureSelected(FlatFeature.SCREENSHOT)) + ScreenshotTimer.start(value); + break; + default: + return DAResult.SUCCESS; + } - // start resource monitor timer - ResourceMonitor.start(); - setStageComplete(STAGE.START_RESOURCE_MONITOR); + return result ? DAResult.SUCCESS : new DAResult(stage.errCode); + } - // send start message to target - result = DACommunicator.startTrace(startProgress); - if (!result.isSuccess()) { - // failed to start trace (error from target) - return; - } - setStageComplete(STAGE.SEND_STARTMSG); - - if (Global.isGUIMode()) { - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_NEW, false); - MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_LOAD, false); - } - }); - } + /** + * Creates new {@link Project} and initializes it. + */ + private Project createProject() { + Project project = new Project(); + project.init(initProgress); + project.setMempsAvailable(Global.getCurrentDeviceInfo().getMempAvailable()); + return project; + } - // wait until process info message is arrived (for a few seconds) - int waittime = 0; - while (waittime <= PROCINFO_WAIT_TIME) { - if (AnalyzerManager.isProcessInfoArrived()) { - break; - } + /** + * Resets UI before tracing. + * + * @param project created {@link Project} + */ + private void resetUI(Project project) { + if (UILayoutDataManager.INSTANCE.isDirty()) { + UIActionHolder.getUIAction().setUIElementsBySetting(); + } + UIActionHolder.getUIAction().applyStartTraceUI(); + UIActionHolder.getUIAction().applyWebProfilingUI(project.isWebApplication()); + } - Thread.sleep(AnalyzerConstants.THREAD_SLEEP_INTERVAL); - waittime += AnalyzerConstants.THREAD_SLEEP_INTERVAL; - testCancel(); - } - if (waittime > PROCINFO_WAIT_TIME) { - result = new DAResult(ErrorCode.ERR_NO_PROCINFO); - return; + /** + * Disables 'New' and 'Load' menu items. + */ + private void disableMenuItems() { + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_NEW, false); + MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_LOAD, false); } - - // Call Start Dlog - //startDlog(); + }); + } - setStageComplete(STAGE.WAIT_PROCINFO); + /** + * Waits for message with information about traced process and disables + * 'New' and 'Load' menu items if DA is in GUI mode. + * + * @param millis timeout in milliseconds + * @return {@code true} if information was received, {@code false} if + * timeout was reached + * @throws InterruptedException if operation was interrupted + */ + private boolean waitProcInfo(int millis) throws InterruptedException { + if (Global.isGUIMode()) + disableMenuItems(); + + int waittime = 0; + while (waittime <= millis && !AnalyzerManager.isProcessInfoArrived()) { + Thread.sleep(AnalyzerConstants.THREAD_SLEEP_INTERVAL); + waittime += AnalyzerConstants.THREAD_SLEEP_INTERVAL; + } + return waittime <= millis; + } - // start toolbar clock - setStageComplete(STAGE.START_CLOCK); + /** + * Clean-up routines necessary in case of failed or canceled start. + * + * @return {@code true} on success + */ + private boolean cleanup() { + DAState.changeCurrentState(DAState.PREPARE_CANCEL); - // start screenshot timer - FlatPreferences feature = FlatPreferences.SCREENSHOT_PERIODICALLY; - int value = SettingDataManager.INSTANCE.getPreferenceValue(feature); - if (SettingDataManager.INSTANCE.getSelectedFlatFeatureSet().contains(FlatFeature.SCREENSHOT) - && value > 0) { - ScreenshotTimer.start(value); - } - setStageComplete(STAGE.CREATE_SCREENSHOT_TIMER); - - // start update view timer - setStageComplete(STAGE.CREATE_UPDATE_TIMER); - - setStageComplete(STAGE.FINAL); - } catch (InterruptedException e) { - // operation is canceled - - // swallow exception and proceed to 'finally' - // raised interruption flag may cause failed joins - // and other cleanup operations - - // set DA state to canceling - result = new DAResult(ErrorCode.ERR_BY_USER_CANCEL); - } finally { - // set DA state as result of start progress - if (lastStage != STAGE.FINAL) { - /********************************************************************* - * canceled or failed to start tracing - *********************************************************************/ - - DAState.changeCurrentState(DAState.PREPARE_CANCEL); - - // unwind operations - switch (lastStage) { - case FINAL: - case CREATE_UPDATE_TIMER: - setCancelProgress(STAGE.CREATE_UPDATE_TIMER); - case CREATE_SCREENSHOT_TIMER: - ScreenshotTimer.stop(); - setCancelProgress(STAGE.CREATE_SCREENSHOT_TIMER); - case START_CLOCK: - setCancelProgress(STAGE.START_CLOCK); - case WAIT_PROCINFO: - case SEND_STARTMSG: - try { - DACommunicator.stopTrace(); - } catch (Exception e) { - // never happened currently - Logger.error("Interrupted during stop trace"); - } - setCancelProgress(STAGE.SEND_STARTMSG); - case START_RESOURCE_MONITOR: - if (Global.isGUIMode()) { - Toolbar.INSTANCE.stopTimer(); - } - UpdateViewTimer.stop(); - ResourceMonitor.stop(); - setCancelProgress(STAGE.START_RESOURCE_MONITOR); - case CREATE_CALLSTACK_INSERTER: - CallStackInserter.getInstance().stopForced(); - setCancelProgress(STAGE.CREATE_CALLSTACK_INSERTER); - case CREATE_PAGEMANAGER: - DataManagerRegistry.stopThreadsForced(); - setCancelProgress(STAGE.CREATE_PAGEMANAGER); - case CREATE_LOGPARSER: - LogParser.getInstance().stopForced(); - setCancelProgress(STAGE.CREATE_LOGPARSER); - case CREATE_MESSAGEPARSER: - MessageParser.getInstance().stopForced(); - setCancelProgress(STAGE.CREATE_MESSAGEPARSER); - case CREATE_DATATHREAD: - DataChannelThread.getInstance().stopForced(); - setCancelProgress(STAGE.CREATE_DATATHREAD); - case RESET_UI: - case CREATE_DBTABLE: - case ESTABLISH_DB: - case CREATE_PROJECT: - // clear including project - CommonAction.clear(); - setCancelProgress(STAGE.CREATE_PROJECT); - case CHECK_CONFIG: - case CHECK_APP: - case CHECK_DEV: - break; - default: - break; - } + // unwind operations + List stages = Arrays.asList(PHASE.TRACE_START.stageArray); + for (int i = stages.indexOf(lastStage); i >= 0; --i) + unwind(stages.get(i)); - DAState.changeCurrentState(DAState.INIT); - } else { - DAState.changeCurrentState(DAState.RUNNING); - } + CommonAction.clear(); - // close progress dialog - if (progressDlg != null) { - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - progressDlg.close(); - } - }); - } + DAState.changeCurrentState(DAState.INIT); - // if error occurred, show the error dialog - if (!result.isSuccess()) { - UIActionHolder.getUIAction().showWarning(result); - } + return !Thread.interrupted(); + } - if (Global.isGUIMode()) { - // set shortcut and toolbar UI as DA state - ShortCutManager.getInstance().setEnabled(true); - Toolbar.INSTANCE.changeUIState(DAState.getCurrentState()); - } + /** + * Unwinds specified stage of trace start process. + * + * @param stage stage to unwind + */ + private void unwind(STAGE stage) { + switch (stage) { + case CREATE_SCREENSHOT_TIMER: + ScreenshotTimer.stop(); + break; + case SEND_STARTMSG: + DACommunicator.stopTrace(); + break; + case START_RESOURCE_MONITOR: + if (Global.isGUIMode()) + Toolbar.INSTANCE.stopTimer(); + UpdateViewTimer.stop(); + ResourceMonitor.stop(); + break; + case CREATE_PAGEMANAGER: + DataManagerRegistry.stopThreadsForced(); + break; + case CREATE_LOGPARSER: + LogParser.getInstance().stopForced(); + break; + case CREATE_MESSAGEPARSER: + MessageParser.getInstance().stopForced(); + break; + case CREATE_DATATHREAD: + DataChannelThread.getInstance().stopForced(); + break; + default: + break; } + + setCancelProgress(stage); } private void setProgressPercent(int percent) { @@ -409,30 +412,40 @@ public class StartTraceManager implements Runnable { } } - private void setStageComplete(STAGE st) throws InterruptedException { + /** + * Checks on cancellation and sets specified {@link STAGE} as completed. + * + * @param st {@link STAGE} instance + * @return {@code true} if stage was completed or {@code false} if it was + * cancelled + */ + private boolean setStageComplete(STAGE st) { Logger.debug("done stage: " + st); lastStage = st; int percent = ProgressTable.getPercent(PHASE.TRACE_START, lastStage); - if (percent != 100) { - testCancel(); - } + if (percent != 100 && testCancel()) + return false; setProgressPercent(percent); + return true; } private void setCancelProgress(STAGE st) { - int percent = ProgressTable.getPercent(PHASE.CANCEL_TRACE_START, st); + if (st == lastStage) + return; + + int percent = ProgressTable.getPercent(PHASE.TRACE_START, st); setProgressPercent(percent); } - private void testCancel() throws InterruptedException { - if (startThread.isInterrupted() || AnalyzerManager.isExit()) { - // reset interruption flag - Thread.interrupted(); - - throw new InterruptedException(); - } + /** + * Checks whether operation was cancelled. + * + * @return {@code true} if operation was cancelled + */ + private boolean testCancel() { + return Thread.interrupted() || AnalyzerManager.isExit(); } private void startDlog(){ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java index 043efec..4f7f17e 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java @@ -37,20 +37,16 @@ import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.handlers.UIActionHolder; import org.tizen.dynamicanalyzer.nl.MenuBarLabels; import org.tizen.dynamicanalyzer.project.Project; -import org.tizen.dynamicanalyzer.setting.FlatFeature; -import org.tizen.dynamicanalyzer.setting.FlatPreferences; -import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; import org.tizen.dynamicanalyzer.swap.communicator.DataChannelThread; import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; import org.tizen.dynamicanalyzer.swap.logparser.LogParser; import org.tizen.dynamicanalyzer.swap.logparser.MessageParser; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotTimer; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; import org.tizen.dynamicanalyzer.ui.page.BaseView; import org.tizen.dynamicanalyzer.ui.page.MenuBar; import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceDataManager; import org.tizen.dynamicanalyzer.ui.timeline.dlog.DLogDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.Logger; @@ -83,8 +79,8 @@ public class StopTraceManager implements Runnable { LogParser.getInstance().stopForced(); // stop page data manager DataManagerRegistry.stopThreadsForced(); - // stop other db inserters - CallStackInserter.getInstance().stopForced(); + // add indexes to function entries + CallTraceDataManager.getInstance().addCallStackIndexes(); } } @@ -102,8 +98,8 @@ public class StopTraceManager implements Runnable { LogParser.getInstance().stopNormal(); // stop page data manager DataManagerRegistry.stopThreadsNormal(); - // stop other db inserters - CallStackInserter.getInstance().stopNormal(); + // add indexes to function entries + CallTraceDataManager.getInstance().addCallStackIndexes(); } } @@ -194,38 +190,7 @@ public class StopTraceManager implements Runnable { } } finally { - updateDAState(); - // we must wait for all data threads to join before updating heap tables. - if (Global.isGUIMode()) { - startUpdateHeapDataManager(); - } - } - } - - /** - * Calculate allocation data in HeapDataManager. - */ - private void startUpdateHeapDataManager() { - if(SettingDataManager.INSTANCE.getSelectedFlatFeatureSet().contains(FlatFeature.MEMORY_ALLOC)) { - Display.getDefault().asyncExec(new Runnable() { - - @Override - public void run() { - Logger.info("Calculating allocation data in HeapDataManager"); - if (SettingDataManager.INSTANCE - .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)) - HeapDataManager.getInstance().makeWholePersistentAllocsData(true); - - if (MenuBar.getInstance().getPersistentAllocationsSelection()) - HeapDataManager.getInstance().makeWholePersistentAllocsData(false); - - HeapDataManager.getInstance().makeStatisticsData(0, 0); - - BaseView baseView = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID); - baseView.getTopComposite().updateView(); - } - }); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBColumn.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBColumn.java index 22e99c5..3f92c8c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBColumn.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBColumn.java @@ -32,14 +32,12 @@ public class DBColumn { private String option; private String type; private int string_size; - private boolean isIndex; public DBColumn(String name, String option, String type) { this.name = name; this.option = option; this.type = type; this.string_size = 0; - this.isIndex = false; } public DBColumn(String name, String option, String type, int size) { @@ -47,7 +45,6 @@ public class DBColumn { this.option = option; this.type = type; this.string_size = size; - this.isIndex = false; } public String getName() { @@ -66,14 +63,6 @@ public class DBColumn { return string_size; } - public boolean isIndex() { - return isIndex; - } - - public void setIndex(boolean isIndex) { - this.isIndex = isIndex; - } - public String getColumnString() { if (DBConstants.DBTYPE_VARCHAR.equals(type) || DBConstants.DBTYPE_VARBINARY.equals(type)) { return name + CommonConstants.SPACE + type + "(" + string_size + ")" + CommonConstants.SPACE + option; 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 f650149..eb0e7b0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBConstants.java @@ -59,6 +59,7 @@ public class DBConstants { public static final String DBTYPE_VARBINARY = "VARBINARY";//$NON-NLS-1$ // shared column name + public static final String DBCOLUMN_IS_ENTRY = "IS_ENTRY";//$NON-NLS-1$ public static final String DBCOLUMN_RID = "RID";//$NON-NLS-1$ public static final String DBCOLUMN_SEQUENCE_NUMBER = "SEQUENCE_NUMBER";//$NON-NLS-1$ public static final String DBCOLUMN_START_TIME = "START_TIME";//$NON-NLS-1$ @@ -71,6 +72,7 @@ public class DBConstants { public static final String DBCOLUMN_RETURN_VALUE = "RETURN_VALUE";//$NON-NLS-1$ public static final String DBCOLUMN_ERROR_NUMBER = "ERROR_NUMBER";//$NON-NLS-1$ public static final String DBCOLUMN_CALLER_PC_ADDRESS = "CALLER_PC_ADDRESS";//$NON-NLS-1$ + public static final String DBCOLUMN_START_PC_ADDRESS = "START_PC_ADDRESS";//$NON-NLS-1$ public static final String DBCOLUMN_CALLER_LIBRARY_NAME = "CALLER_LIBRARY_NAME";//$NON-NLS-1$ public static final String DBCOLUMN_FD = "FD";//$NON-NLS-1$ public static final String DBCOLUMN_API_ID = "API_ID";//$NON-NLS-1$ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTable.java index 10dfaa3..1c012c9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTable.java @@ -30,7 +30,10 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.StringJoiner; +import java.util.stream.Collectors; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.util.Logger; @@ -41,7 +44,19 @@ public abstract class DBTable implements IPreparedStatement, IResultSet { */ protected static final String SELECT_ALL_QUERY = "select * from %s"; - private List columns = new ArrayList(); + protected static final String SELECT = " select "; + protected static final String FROM = " from "; + public static final String UPDATE = " update "; + public static final String WHERE = " where "; + public static final String AND = " and "; + public static final String OR = " or "; + public static final String ORDER_BY = " order by "; + public static final String DESC = " DESC "; + + private List columns = new ArrayList<>(); + private List primaryKey = null; + private List> indexes = new ArrayList<>(); + protected DBInserter dbInserter = null; // instance initializing block @@ -68,12 +83,26 @@ public abstract class DBTable implements IPreparedStatement, IResultSet { dbInserter = inserter; } - protected final void addColumn(DBColumn col) { - columns.add(col); + /** + * Set specified columns set as compound primary key. + * + * @param primaryKey set of columns indexes + */ + public final void setPrimaryKey(Integer... primaryKey) { + this.primaryKey = Arrays.asList(primaryKey); + } + + /** + * Add set of columns as index columns. + * + * @param index set of columns indexes + */ + public final void addIndex(Integer... indexes) { + this.indexes.add(Arrays.asList(indexes)); } - protected final void setIndexColumn(int index) { - columns.get(index).setIndex(true); + protected final void addColumn(DBColumn col) { + columns.add(col); } protected final String clipString(String colstr, int str_len, String key) { @@ -88,24 +117,17 @@ public abstract class DBTable implements IPreparedStatement, IResultSet { } public final boolean createTable() { - StringBuffer query = new StringBuffer(); - query.append("create table "); - query.append(getTableName()); - query.append(CommonConstants.SPACE + CommonConstants.OPEN_BRACKET); - - int size = columns.size(); - for (int i = 0; i < size; i++) { - query.append(columns.get(i).getColumnString()); - if (i == size - 1) { - query.append(CommonConstants.CLOSE_BRACKET); - } else { - query.append(CommonConstants.COMMA); - } - } - query.append(CommonConstants.SEMICOLON); + StringJoiner tableDesc = new StringJoiner(", "); + + columns.forEach((column) -> { + tableDesc.add(column.getColumnString()); + }); + + if (primaryKey != null && !primaryKey.isEmpty()) + tableDesc.add(String.format("primary key (%s)", getColumnListString(primaryKey))); - String queryString = query.toString(); - return SqlConnectionManager.executeUpdate(queryString); + String query = String.format("create table %s (%s);", getTableName(), tableDesc.toString()); + return SqlConnectionManager.executeUpdate(query); } public final void insertData(List> data) { @@ -138,28 +160,38 @@ public abstract class DBTable implements IPreparedStatement, IResultSet { // do nothing by default } - public final boolean createIndexTable() { - int size = columns.size(); - StringBuffer indexColumns = new StringBuffer(); + /** + * Get string representation of columns names separated by comma. + * + * @param index set of columns indexes + */ + private String getColumnListString(List index) { + return index.stream().map((colIdx) -> columns.get(colIdx).getName()) + .collect(Collectors.joining(", ")); + } - for (int i = 0; i < size; i++) { - if (columns.get(i).isIndex()) { - if (indexColumns.length() > 0) { - indexColumns.append(", "); - } - indexColumns.append(columns.get(i).getName()); + /** + * Create indexes for table. + * + * @return true if all indexes created successfully, false otherwise. + */ + public final boolean createIndexes() { + String createQueryFormat = "create index %s_index_%s on %s (%s)"; + boolean ret = true; + + for (List index : indexes) { + String columnsString = getColumnListString(index); + String indexId = index.stream().map(Object::toString).collect(Collectors.joining()); + String query = String.format(createQueryFormat, + getTableName(), indexId, getTableName(), columnsString); + + if (!SqlConnectionManager.executeUpdate(query)) { + Logger.warning("Failed to create index [%s]", query); + ret = false; } } - if (indexColumns.length() > 0) { - String queryString = "create index " + getTableName() + "_index on "//$NON-NLS-1$//$NON-NLS-2$ - + getTableName() + CommonConstants.OPEN_BRACKET + indexColumns.toString() - + CommonConstants.CLOSE_BRACKET; - - return SqlConnectionManager.executeUpdate(queryString); - } else { - return true; - } + return ret; } /** diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTableRegistry.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTableRegistry.java index 9b0458f..28041d3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTableRegistry.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTableRegistry.java @@ -57,7 +57,7 @@ public class DBTableRegistry { for (Map.Entry entry : tables.entrySet()) { DBTable table = entry.getValue(); table.createTable(); - table.createIndexTable(); + table.createIndexes(); } } else { for (Map.Entry entry : tables.entrySet()) { @@ -65,7 +65,7 @@ public class DBTableRegistry { if (tableNames.contains(tableName)) { DBTable table = entry.getValue(); table.createTable(); - table.createIndexTable(); + table.createIndexes(); } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/SqlConnectionManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/SqlConnectionManager.java index f304dfd..141e18c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/SqlConnectionManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/SqlConnectionManager.java @@ -133,7 +133,9 @@ public class SqlConnectionManager { try { updateConnectionLock.wait(); } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug("Interrupted while closing update connection: " + + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); } } } @@ -157,7 +159,9 @@ public class SqlConnectionManager { try { queryConnectionLock.wait(); } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug("Interrupted while closing query connection: " + + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); } } } @@ -195,20 +199,22 @@ public class SqlConnectionManager { } } - private static Connection getUpdateConnection() { + public static Connection getUpdateConnection() { Connection retConn = null; if (state == State.CONNECTED) { try { retConn = updateConnections.take(); } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug( + "Interrupted while getting update connection: " + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); } } return retConn; } - private static void putUpdateConnection(Connection conn) { + public static void putUpdateConnection(Connection conn) { if (conn != null) { synchronized (updateConnectionLock) { updateConnections.offer(conn); @@ -223,7 +229,9 @@ public class SqlConnectionManager { try { retConn = queryConnections.take(); } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug( + "Interrupted while getting query connection: " + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Earlier.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Earlier.java index 0079f32..db577b3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Earlier.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Earlier.java @@ -95,7 +95,7 @@ class SubConverter10to20Earlier { DBTableRegistry.registerEnabled(false); DBTable lifecycleTable = (DBTable) new LifeCycleDBTable(); DBTableRegistry.registerEnabled(true); - if (!lifecycleTable.createTable() || !lifecycleTable.createIndexTable()) { + if (!lifecycleTable.createTable() || !lifecycleTable.createIndexes()) { return false; } } else { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Later.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Later.java index 253a4ac..f050843 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Later.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/compatible/SubConverter10to20Later.java @@ -31,8 +31,6 @@ import org.tizen.dynamicanalyzer.database.DBTable; import org.tizen.dynamicanalyzer.database.DBTableRegistry; import org.tizen.dynamicanalyzer.ui.info.appStartup.AppStartupDBTable; import org.tizen.dynamicanalyzer.ui.info.appStartup.WebAppStartupDBTable; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveValueDBTable; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveVariableDBTable; import org.tizen.dynamicanalyzer.ui.opengl.data.DB.GLBufferSizeDBTableManager; import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfilingDataDBTable; import org.tizen.dynamicanalyzer.ui.timeline.calltrace.WebFunctionEntryDBTable; @@ -291,8 +289,6 @@ class SubConverter10to20Later { DBTableRegistry.registerEnabled(false); DBTable appStartup = (DBTable) new AppStartupDBTable(); DBTable glBufferSize = (DBTable) new GLBufferSizeDBTableManager(); - DBTable interValue = (DBTable) new InteractiveValueDBTable(); - DBTable interVariable = (DBTable) new InteractiveVariableDBTable(); DBTable webStartup = (DBTable) new WebAppStartupDBTable(); DBTable webFuncEntry = (DBTable) new WebFunctionEntryDBTable(); DBTable webFuncExit = (DBTable) new WebFunctionExitDBTable(); @@ -300,49 +296,37 @@ class SubConverter10to20Later { DBTableRegistry.registerEnabled(true); if (!tables.contains(appStartup.getTableName())) { - if (!appStartup.createTable() || !appStartup.createIndexTable()) { + if (!appStartup.createTable() || !appStartup.createIndexes()) { return false; } } if (!tables.contains(glBufferSize.getTableName())) { - if (!glBufferSize.createTable() || !glBufferSize.createIndexTable()) { - return false; - } - } - - if (!tables.contains(interValue.getTableName())) { - if (!interValue.createTable() || !interValue.createIndexTable()) { - return false; - } - } - - if (!tables.contains(interVariable.getTableName())) { - if (!interVariable.createTable() || !interVariable.createIndexTable()) { + if (!glBufferSize.createTable() || !glBufferSize.createIndexes()) { return false; } } if (!tables.contains(webStartup.getTableName())) { - if (!webStartup.createTable() || !webStartup.createIndexTable()) { + if (!webStartup.createTable() || !webStartup.createIndexes()) { return false; } } if (!tables.contains(webFuncEntry.getTableName())) { - if (!webFuncEntry.createTable() || !webFuncEntry.createIndexTable()) { + if (!webFuncEntry.createTable() || !webFuncEntry.createIndexes()) { return false; } } if (!tables.contains(webFuncExit.getTableName())) { - if (!webFuncExit.createTable() || !webFuncExit.createIndexTable()) { + if (!webFuncExit.createTable() || !webFuncExit.createIndexes()) { return false; } } if (!tables.contains(webProfiling.getTableName())) { - if (!webProfiling.createTable() || !webProfiling.createIndexTable()) { + if (!webProfiling.createTable() || !webProfiling.createIndexes()) { return false; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CLIAction.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CLIAction.java index 55d1563..8e2dd3b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CLIAction.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CLIAction.java @@ -13,9 +13,7 @@ import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.setting.TargetData; import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; import org.tizen.dynamicanalyzer.ui.info.appStartup.AppStartupDataManager; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.page.PageInfoRegistry; -import org.tizen.dynamicanalyzer.util.Logger; public class CLIAction implements UIAction { @@ -99,13 +97,6 @@ public class CLIAction implements UIAction { // Register a manager to collect startup data DataManagerRegistry.registerPageDataManager(AppStartupDataManager.getInstance()); - - // In case of GUI CallStackInserter is created in CallstackView class. - // TODO Generalize this step for GUI and CLI - CallStackInserter inserter = CallStackInserter.getInstance(); - if (inserter == null) { - Logger.warning("Could not create CallStackInserter"); - } } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CommandAction.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CommandAction.java index 7af0269..2694db0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CommandAction.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/CommandAction.java @@ -27,6 +27,7 @@ package org.tizen.dynamicanalyzer.handlers; import java.io.File; +import java.io.IOException; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.DAResult; @@ -39,7 +40,6 @@ import org.tizen.dynamicanalyzer.database.SqlConnectionManager; import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; @@ -92,6 +92,14 @@ public class CommandAction { return success; } + /** + * Save collected trace of the current {@link Project} to the specified zip + * archive. + * + * @param saveFileName path to zip archive, where trace should be saved. + * @return {@code true} if trace saved correctly and {@code false} + * otherwise. + */ public static boolean saveToZip(String saveFileName) { Project project = Global.getProject(); String sourcePath = project.getSavePath(); @@ -106,17 +114,18 @@ public class CommandAction { return false; } + boolean res = true; try { - ZipUtils.zip(sourcePath, saveFileName); + res = ZipUtils.zip(sourcePath, saveFileName); } - catch(Exception ex) { + catch (IOException ex) { return false; } SqlConnectionManager.establishConnection(sourcePath + File.separator + AnalyzerConstants.DATABASE_NAME); - return true; + return res; } public static String loadFromZip(String zipfile) { @@ -152,7 +161,7 @@ public class CommandAction { return output; } - public static void startTrace(boolean bFromIDE) { + public static void startTrace() { // only when trace is not running, trace can be started boolean stateChange = DAState.changeCurrentState(DAState.PREPARE_START); if (!stateChange) { @@ -162,7 +171,7 @@ public class CommandAction { // change UI state if (Global.isGUIMode()) { - updateUiOnStartTrace(bFromIDE); + updateUiOnStartTrace(); } // make thread to prepare start @@ -171,15 +180,10 @@ public class CommandAction { thread.start(); } - private static void updateUiOnStartTrace(boolean bFromIDE) { + private static void updateUiOnStartTrace() { Toolbar.INSTANCE.resetProcessCombo(); Toolbar.INSTANCE.changeUIState(DAState.PREPARE_START); ShortCutManager.getInstance().setEnabled(false); - if (bFromIDE == false) { - InteractiveDataManager.getInstance().clear(); - } else { - // When DA is profiled from IDE, Do nothing. - } } // stop trace with result diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/GUIAction.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/GUIAction.java index acddc75..33c0c05 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/GUIAction.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/GUIAction.java @@ -59,7 +59,6 @@ import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; import org.tizen.dynamicanalyzer.widgets.da.base.DADialog; -import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite; public class GUIAction implements UIAction { public static final int DEFAULT_WARNING_WIDTH = 446; @@ -94,10 +93,8 @@ public class GUIAction implements UIAction { @Override public void run() { // change startup table in timeline page - DATabComposite timelineTabComp = (DATabComposite) AnalyzerUtil.getView( - TimelinePage.pageID, TimelineTableView.tabID); - AppStartupView appStartup = (AppStartupView) timelineTabComp - .getView(TimelineTableView.appStartupViewID); + AppStartupView appStartup = (AppStartupView) AnalyzerUtil + .getView(TimelinePage.pageID, TimelineTableView.appStartupViewID); appStartup.changeTable(isWeb); // change call trace table in timeline page 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 eeac1d3..d889ab0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/OpenTraceHandler.java @@ -34,9 +34,7 @@ import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.communicator.DeviceManager; import org.tizen.dynamicanalyzer.database.SqlConnectionManager; import org.tizen.dynamicanalyzer.database.compatible.DBConverter; import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; @@ -44,8 +42,6 @@ import org.tizen.dynamicanalyzer.project.BinaryInfo; import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.setting.UILayoutDataManager; import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.range.RangePage; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker; import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingChildData; @@ -55,15 +51,9 @@ import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingDataDBTable; import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfileDataMaker; import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfilingData; import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfilingDataDBTable; -import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; -import org.tizen.dynamicanalyzer.ui.toolbar.DAToolBarCustomCombo; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.toolbar.opentrace.OpenTraceProgressManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; import org.tizen.dynamicanalyzer.util.Logger; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo; -import org.tizen.dynamicanalyzer.widgets.da.view.DAContainerComposite; public class OpenTraceHandler extends AbstractHandler { public static final String ID = OpenTraceHandler.class.getName(); @@ -151,14 +141,6 @@ public class OpenTraceHandler extends AbstractHandler { // change tab list and page to be shown and chart list in timeline page UIActionHolder.getUIAction().setUIElements(project); - // change page - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - DAContainerComposite page = AnalyzerManager.getCurrentPage(); - if (page instanceof RangePage) { - AnalyzerUtil.changePage(TimelinePage.pageID); - } - } - // set dirty of UI layout UILayoutDataManager.INSTANCE.setDirty(true); @@ -236,8 +218,6 @@ public class OpenTraceHandler extends AbstractHandler { } profiler.getProfilingDataMap().put(profilingDataID, fupData); - UIDataManager.getInstance().getfunctionProfilingDataChecker() - .addProfilingData(fupData); // restore total sample count profiler.setTotalSampleCount(profiler.getTotalSampleCount() + fupData.getExCount()); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java index 8a9e731..569b9d7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java @@ -89,6 +89,10 @@ public class TableTooltipListener implements Listener { private static final int TOOLTIP_OFFSET = 5; private static final Cursor sourceCursor = new Cursor(null, ImageResources.VIEW_SOURCE_CURSOR.getImageData(), 0, 0); + private static final SourceLine errorNoSourceLineData = new SourceLine(); + static { + errorNoSourceLineData.setError(AnalyzerConstants.SOURCELINE_NO_SOURCELINE_DATA); + } private static Cursor defaultCursor = null; public TableTooltipListener(Grid table) { @@ -284,7 +288,7 @@ public class TableTooltipListener implements Listener { break; case AnalyzerConstants.TYPE_TABLE_MEM_CALLSTACK: addr = (Long) item - .getData(AnalyzerConstants.MEM_CALLSTACK_KEY_FUNCTION_START_ADDRESS); + .getData(AnalyzerConstants.CALLSTACK_KEY_ADDR); pid = (Integer) item.getData(AnalyzerConstants.CALLSTACK_KEY_PID); time = (Long) item.getData(AnalyzerConstants.CALLSTACK_KEY_TIME); break; @@ -582,13 +586,14 @@ public class TableTooltipListener implements Listener { private SourceLine getSourceLine(long addr, int pid, long time) { Project project = Global.getProject(); ProcessInformation process = project.getProcessInformation(pid); + if (process == null) { + return errorNoSourceLineData; + } ProcessMemoryMap pmap = process.getProcessMemoryMap(time); LibraryObject libobj = null; if (pmap == null || (libobj = pmap.getLibraryByAddress(addr)) == null) { - SourceLine sl = new SourceLine(); - sl.setError(AnalyzerConstants.SOURCELINE_NO_SOURCELINE_DATA); - return sl; + return errorNoSourceLineData; } BinaryInfo binInfo = project.getDeviceStatusInfo().getBinaryInfo(libobj.getBinaryID()); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java index 16ce70a..231db52 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java @@ -211,6 +211,19 @@ public class AnalyzerLabels extends NLS { public static String HOWTO_LINK; public static String BUGREPORT_LINK; + // popup notifications + public static String NOTIFICATION_DEVICE_CONNECTED; + public static String NOTIFICATION_DEVICE_DISCONNECTED; + + // table view ID's + public static String LEFT_TABLE_VIEW_ID; + public static String RIGHT_TABLE_VIEW_ID; + + public static String TABLE_PROCESSING_DATA; + + // charts popup menu items + public static String SELECT_RANGE; + static { NLS.initializeMessages(BUNDLE_NAME, AnalyzerLabels.class); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties index 864aaf2..13b774b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties @@ -169,4 +169,14 @@ TIZEN_SITE_LINK=http://www.tizen.org TIZEN_DEVELOP_SITE_LINK=http://developer.tizen.org RELEASE_NOTE_LINK=https://developer.tizen.org/development/tizen-studio/download/release-notes HOWTO_LINK=https://developer.tizen.org/development/tizen-studio/native-tools/debugging-your-app/dynamic-analyzer -BUGREPORT_LINK=https://developer.tizen.org/forums/sdk-ide/active \ No newline at end of file +BUGREPORT_LINK=https://developer.tizen.org/forums/sdk-ide/active + +NOTIFICATION_DEVICE_CONNECTED=Connected +NOTIFICATION_DEVICE_DISCONNECTED=Disconnected + +LEFT_TABLE_VIEW_ID=Left table view +RIGHT_TABLE_VIEW_ID=Right table view + +TABLE_PROCESSING_DATA=Processing... + +SELECT_RANGE=Select range diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java index a38843d..9ef97a5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java @@ -69,6 +69,9 @@ public class ConfigureLabels extends NLS { public static String TARGET_NAME_TV; public static String TARGET_NAME_WEARABLE; + public static String TARGET_CONNECTED; + public static String TARGET_DISCONNECTED; + public static String TARGET_NAME_FLAT_MOBILE_FOCUS; public static String TARGET_NAME_FLAT_TV_FOCUS; public static String TARGET_NAME_FLAT_WEARABLE_FOCUS; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties index f4030d3..b45756e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties @@ -35,6 +35,9 @@ TARGET_NAME_MOBILE=Mobile TARGET_NAME_TV=TV TARGET_NAME_WEARABLE=Wearable +TARGET_CONNECTED=Connected +TARGET_DISCONNECTED=Not Connected + TARGET_NAME_FLAT_MOBILE_FOCUS=mobile TARGET_NAME_FLAT_TV_FOCUS=tv TARGET_NAME_FLAT_WEARABLE_FOCUS=wearable diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.java deleted file mode 100644 index 7e30bb0..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.nl; - -import org.eclipse.osgi.util.NLS; - -public class InteractivePageLabels extends NLS { - private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.InteractivePageLabels"; //$NON-NLS-1$ - - public static String INTERACTIVE_CHART; - public static String INTERACTIVE_CHART_VALUE; - public static String INTERACTIVE_CHART_INVALID_CHECK_LOCATION; - public static String CHART_TITLE; - - public static String INTERACTIVE_TABLE_VIEW_TITLE; - public static String INTERACTIVE_TABLE_TIME; - public static String INTERACTIVE_TABLE_TYPE; - public static String INTERACTIVE_TABLE_VALUE; - - static { - // initialize resource bundle - NLS.initializeMessages(BUNDLE_NAME, InteractivePageLabels.class); - } - - private InteractivePageLabels() { - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.properties deleted file mode 100644 index 596ccab..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InteractivePageLabels.properties +++ /dev/null @@ -1,9 +0,0 @@ -INTERACTIVE_CHART=Interactive -INTERACTIVE_CHART_VALUE=Value -INTERACTIVE_CHART_INVALID_CHECK_LOCATION=Cannot get the variable value. See Tizen documentation for help. -CHART_TITLE=Variable - -INTERACTIVE_TABLE_VIEW_TITLE=Interactive Profiling -INTERACTIVE_TABLE_TIME=Time / name -INTERACTIVE_TABLE_TYPE=Type -INTERACTIVE_TABLE_VALUE=Value \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.java deleted file mode 100644 index b009e92..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.nl; - -import org.eclipse.osgi.util.NLS; - -public class KernelPageLabels extends NLS { - private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.KernelPageLabels"; - - public static String CONTEXT_SWITCH_CHART_TITLE; - public static String CONTEXT_SWITCH_BOARD_NAME_PID; - public static String CONTEXT_SWITCH_BOARD_NAME_TID; - public static String CONTEXT_SWITCH_BOARD_NAME_FUNC_CHILD; - public static String CONTEXT_SWITCH_SERIES_NAME; - public static String CONTEXT_SWITCH_SERIES_NAME_CHILD; - public static String CONTEXT_SWITCH_SERIES_ITEM_NAME; - - public static String CALL_FLOW_CHART_TITLE; - public static String CALL_FLOW_BOARD_NAME_TID; - - public static String UNKNOWN_FUNCTION_NAME; - public static String CORE_NAME_PREFIX; - public static String CORE_NAME_POSTFIX; - public static String THREAD_NAME_PREFIX; - public static String THREAD_NAME_POSTFIX; - public static String FUNCTION_NAME_POSTFIX; - - public static String KERNEL_CHART_ITEM_START; - public static String KERNEL_CHART_ITEM_END; - public static String KERNEL_CHART_ITEM_SWITCHED; - - public static String KERNEL_LIST_VIEW_NAME; - public static String KERNEL_LIST_VIEW_TITLE_CORE; - public static String KERNEL_LIST_VIEW_TITLE_FUNCTION; - public static String KERNEL_LIST_VIEW_INDEX; - public static String KERNEL_LIST_VIEW_PID; - public static String KERNEL_LIST_VIEW_TID; - public static String KERNEL_LIST_VIEW_START_TIME; - public static String KERNEL_LIST_VIEW_END_TIME; - public static String KERNEL_LIST_VIEW_EXECUTION_TIME; - public static String KERNEL_LIST_VIEW_START_PC; - public static String KERNEL_LIST_VIEW_END_PC; - public static String KERNEL_LIST_VIEW_ENTRY; - public static String KERNEL_LIST_VIEW_EXIT; - public static String KERNEL_LIST_VIEW_CORE; - public static String KERNEL_LIST_VIEW_FUNCTION; - - public static String KERNEL_STATISTIC_TITLE; - public static String KERNEL_STATISTIC_CS_COUNT; - public static String KERNEL_STATISTIC_CS_AVGTIME; - public static String KERNEL_STATISTIC_CS_OVERHEAD; - public static String KERNEL_STATISTIC_KERNEL_MODE_TIME; - public static String KERNEL_STATISTIC_CORE_AVGLOAD; - public static String KERNEL_STATISTIC_THREAD_STARVING_AVGTIME; - public static String KERNEL_STATISTIC_THREAD_STARVING_MAXTIME; - public static String KERNEL_STATISTIC_THREAD_CORE_COUNT; - public static String KERNEL_STATISTIC_THREAD_PARALLELISM_LEVEL; - public static String KERNEL_STATISTIC_LONGEST_FUNCTION_TIME; - public static String KERNEL_STATISTIC_LONGEST_FUNCTION_NAME; - - static { - // initialize resource bundle - NLS.initializeMessages(BUNDLE_NAME, KernelPageLabels.class); - } - - private KernelPageLabels() { - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.properties deleted file mode 100644 index 0003c63..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/KernelPageLabels.properties +++ /dev/null @@ -1,50 +0,0 @@ -CONTEXT_SWITCH_CHART_TITLE=Context Switch -CONTEXT_SWITCH_BOARD_NAME_PID=PID : -CONTEXT_SWITCH_BOARD_NAME_TID=TID : -CONTEXT_SWITCH_BOARD_NAME_FUNC_CHILD=Functions -CONTEXT_SWITCH_SERIES_NAME=core number -CONTEXT_SWITCH_SERIES_NAME_CHILD=function name -CONTEXT_SWITCH_SERIES_ITEM_NAME=Core - -CALL_FLOW_CHART_TITLE=Call Flow -CALL_FLOW_BOARD_NAME_TID=TID : - -UNKNOWN_FUNCTION_NAME=unknown -CORE_NAME_PREFIX=core< -CORE_NAME_POSTFIX=> -THREAD_NAME_PREFIX=thread< -THREAD_NAME_POSTFIX=> -FUNCTION_NAME_POSTFIX=() - -KERNEL_CHART_ITEM_START=Start -KERNEL_CHART_ITEM_END=End -KERNEL_CHART_ITEM_SWITCHED=Switched - -KERNEL_LIST_VIEW_NAME=Contexts -KERNEL_LIST_VIEW_TITLE_CORE=Context List for Thread -KERNEL_LIST_VIEW_TITLE_FUNCTION=Function Fragment List for Thread -KERNEL_LIST_VIEW_INDEX=# -KERNEL_LIST_VIEW_PID=PID -KERNEL_LIST_VIEW_TID=TID -KERNEL_LIST_VIEW_START_TIME=Start time -KERNEL_LIST_VIEW_END_TIME=End time -KERNEL_LIST_VIEW_EXECUTION_TIME=Execution time -KERNEL_LIST_VIEW_START_PC=Start PC address -KERNEL_LIST_VIEW_END_PC=End PC address -KERNEL_LIST_VIEW_ENTRY=Function entry -KERNEL_LIST_VIEW_EXIT=Function exit -KERNEL_LIST_VIEW_CORE=CPU Core -KERNEL_LIST_VIEW_FUNCTION=Function name - -KERNEL_STATISTIC_TITLE=Kernel Statistics -KERNEL_STATISTIC_CS_COUNT=Number of context switch : -KERNEL_STATISTIC_CS_AVGTIME=Average execution time of contexts : -KERNEL_STATISTIC_CS_OVERHEAD=Overhead time of context switch : -KERNEL_STATISTIC_KERNEL_MODE_TIME=Average kernel mode time : -KERNEL_STATISTIC_CORE_AVGLOAD=Average core load -KERNEL_STATISTIC_THREAD_STARVING_AVGTIME=Average thread starving time : -KERNEL_STATISTIC_THREAD_STARVING_MAXTIME=Max thread starving time : -KERNEL_STATISTIC_THREAD_CORE_COUNT=Core count for thread per second : -KERNEL_STATISTIC_THREAD_PARALLELISM_LEVEL=Average count of busy thread : -KERNEL_STATISTIC_LONGEST_FUNCTION_TIME=Longest function execution time : -KERNEL_STATISTIC_LONGEST_FUNCTION_NAME=Longest function name : diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.java index 41b1313..243a08d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.java @@ -108,15 +108,9 @@ public class TimelineChartLabels extends NLS { public static String TIMELINE_TICK_ADD; public static String EDIT_CHART_DLG_TITLE; - - public static String RANGE_CONTEXT_TITLE; - public static String RANGE_CONTEXT_SET_START; - public static String RANGE_CONTEXT_SET_END; - public static String RANGE_CONTEXT_SET_FROM_SELECTION; - public static String RANGE_CONTEXT_ANALYSIS; - public static String RANGE_CONTEXT_CLEAR; + public static String RANGE_CONTEXT_EVENT_LIST; - + public static String UIEVENT_ORIENTATION; public static String UIEVENT_ORIENTATION_NONE; public static String UIEVENT_ORIENTATION_PORTRAIT; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties index 841952a..1eb67be 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties @@ -75,12 +75,6 @@ TIMELINE_TICK_ADD=Add EDIT_CHART_DLG_TITLE=Chart configuration -RANGE_CONTEXT_TITLE=Range setting -RANGE_CONTEXT_SET_START=Set the range start -RANGE_CONTEXT_SET_END=Set the range end -RANGE_CONTEXT_SET_FROM_SELECTION=Set the selection as a range -RANGE_CONTEXT_ANALYSIS=Analyze the range -RANGE_CONTEXT_CLEAR=Clear the range RANGE_CONTEXT_EVENT_LIST=Event list UIEVENT_ORIENTATION=Orientation 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 d9c2b2b..427b6e2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.java @@ -54,6 +54,7 @@ public class UserErrorWarningLabels extends NLS { public static String ERROR_CONNECTION_CLOSED; public static String ERROR_DOWNLOAD_FILE_FAILED; public static String ERROR_DOWNLOAD_FILE_FAILED_DUETO_SECURITY; + public static String ERROR_CANCEL_FAILED; public static String ERROR_FAILED_OPERATION; public static String ERROR_INTERNAL_REASON; @@ -92,6 +93,12 @@ public class UserErrorWarningLabels extends NLS { public static String ERR_NO_PROCINFO; public static String ERR_WRONG_MESSAGE_FORMAT; public static String ERR_MSG_SEND_FAIL; + + public static String ERR_FAILED_TO_WRITE_TO_FILE; + public static String ERR_FAILED_TO_DELETE_FILE; + + public static String ERR_GUIDE_SELECT_ANOTHER_DEVICE; + static { NLS.initializeMessages(BUNDLE_NAME, UserErrorWarningLabels.class); } 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 944e409..47bb8f5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties @@ -17,6 +17,7 @@ ERROR_CONFIGURATION_FAILED=Configuration cannot be retrieved from the device. \n ERROR_CONNECTION_CLOSED=Socket seems to be closed. \nReconnect the device. ERROR_DOWNLOAD_FILE_FAILED=Download failed. ERROR_DOWNLOAD_FILE_FAILED_DUETO_SECURITY=Download failed due to security reason. \nEnable root mode on device to proceed. +ERROR_CANCEL_FAILED=Failed to cancel operation.\nPlease, restart Dynamic Analyzer. ERROR_FAILED_OPERATION=Binary information cannot be retrieved from the device. \nReconnect the device. ERROR_INTERNAL_REASON=Failed for an internal reason.\nTry again or restart the dynamic analyzer. ERROR_BY_UNKNOWN_REASON=Failed for some reason. @@ -44,3 +45,6 @@ ERR_START_LOG_PARSER=Failed to start the LogParser. \nTry again or restart the d ERR_NO_PROCINFO=Process cannot be traced. \nSelect another process. ERR_WRONG_MESSAGE_FORMAT=AckMessage payload is null or exceeds the maximum size. \nRe-connect the device. ERR_MSG_SEND_FAIL=No acknowledgement from the device. \nRe-connect the device. +ERR_FAILED_TO_WRITE_TO_FILE=Failed to write to file. +ERR_FAILED_TO_DELETE_FILE=Failed to delete existing file +ERR_GUIDE_SELECT_ANOTHER_DEVICE=Selected features are not supported for the current device or emulator.\nPlease check the target connection status.\nOr select other target and features with File>New dialog. \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.java deleted file mode 100644 index 7fa4249..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.java +++ /dev/null @@ -1,76 +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.nl; - -import org.eclipse.osgi.util.NLS; - -public class UserInterfacePageLabels extends NLS { - - private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.UserInterfacePageLabels"; //$NON-NLS-1$ - public static String USERINTERFACE_SNAPSHOT_VIEW_NAME; - - public static String USERINTERFACE_CONTROL_LIST_VIEW_NAME; - public static String USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_0; - public static String USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_1; - public static String USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_2; - public static String USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_3; - public static String USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_4; - - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_NAME; - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_0; - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_1; - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_2; - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_3; - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_4; - public static String USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_5; - - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_NAME; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_0; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_1; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_2; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_3; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_4; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_5; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_6; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_7; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_8; - - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_INCLUSIVE_ELAPSED_TIME; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_EXCLUSIVE_ELAPSED_TIME; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_INCLUSIVE_CPU_TIME; - public static String USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_EXCLUSIVE_CPU_TIME; - - public static String PID; - - static { - // initialize resource bundle - NLS.initializeMessages(BUNDLE_NAME, UserInterfacePageLabels.class); - } - - private UserInterfacePageLabels() { - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.properties deleted file mode 100644 index 00543c6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserInterfacePageLabels.properties +++ /dev/null @@ -1,36 +0,0 @@ - -USERINTERFACE_CONTROL_LIST_VIEW_NAME = Controls -USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_0 = Class name -USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_1 = Initializing time -USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_2 = Terminating time -USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_3 = Control type -USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_4 = PID - - -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_NAME = Scene Transition -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_0 = Time -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_1 = PID -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_2 = Scene name -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_3 = Form name -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_4 = Panel name -USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_5 = Transition time - -USERINTERFACE_SNAPSHOT_VIEW_NAME = Snapshot - -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_NAME = Function Profiling of Tizen UI -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_0 = Library/function name -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_1 = Sum -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_2 = Average -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_3 = Sum -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_4 = Average -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_5 = Sum -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_6 = Average -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_7 = Sum -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_8 = Average -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_INCLUSIVE_ELAPSED_TIME = Inclusive elapsed time -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_EXCLUSIVE_ELAPSED_TIME = Exclusive elapsed time -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_INCLUSIVE_CPU_TIME = Inclusive CPU time -USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_EXCLUSIVE_CPU_TIME = Exclusive CPU time - -PID=PID : - 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 f037f22..20b5362 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java @@ -112,6 +112,7 @@ public class AppInfo { private String execPath = null; private String execFileName = null; + private List binPaths = new ArrayList(); private List localPackagePath = null; private Map runningProcesses = null; @@ -524,7 +525,9 @@ public class AppInfo { * @return list of paths to binaries for running processes */ public List getProcessInformation() { - List binPaths = new ArrayList<>(); + if (!binPaths.isEmpty()) + return binPaths; + String appID = getAppID(); if (AnalyzerConstants.RUNNING_PROCESS.equals(appID)) { Map selProcess = getRunningProcesses(); @@ -555,6 +558,10 @@ public class AppInfo { if (execpath != null) binPaths.add(execpath); + + if (!getAppType().equals(APPTYPE_WEB)) + // Get paths to application libraries + binPaths.addAll(0, DACommunicator.getApplicationLibs(getPackageID())); } return binPaths; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/LibraryObject.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/LibraryObject.java index 8ccbbe5..050a590 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/LibraryObject.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/LibraryObject.java @@ -3,10 +3,11 @@ * * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. * - * Contact: + * Contact: * Jaewon Lim * Jooyoul Lee * Juyoung Kim + * Vladislav Eliseev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,10 +20,10 @@ * 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.project; @@ -36,7 +37,7 @@ public class LibraryObject { this.lowestAddress = low; this.highestAddress = high; } - + public long getLowestAddress() { return lowestAddress; } @@ -48,4 +49,50 @@ public class LibraryObject { public int getBinaryID() { return binaryID; } + + /** + * Tell whether specified address belongs to the specified range. + * + * @param addr address to check + * @param low range low address + * @param high range high address + */ + private static boolean isAddrInRange(long addr, long low, long high) { + return low <= addr && addr < high; + } + + /** + * Return whether specified address belongs to this library object. + * + * @param addr address to check + */ + public boolean isAddrInRange(long addr) { + return isAddrInRange(addr, lowestAddress, highestAddress); + } + + /** + * Return whether specified address range overlaps with this library object. + * Range low address should be lesser than range high address, + * otherwise range will be considered as empty. + * + * @param low range low address + * @param high range high address + */ + public boolean isOverlapped(long low, long high) { + if (low >= high) + return false; + else + return isAddrInRange(lowestAddress, low, high) + || isAddrInRange(highestAddress, low + 1, high + 1) + || (lowestAddress <= low && high <= highestAddress); + } + + /** + * Return whether specified library object overlaps with this library object. + * + * @param other other library object + */ + public boolean isOverlapped(LibraryObject other) { + return isOverlapped(other.lowestAddress, other.highestAddress); + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java index f7f44e7..b7084ef 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java @@ -66,7 +66,6 @@ public class ProcessInformation { private boolean dropLog = false; private NavigableMap processMemSnapshots = new TreeMap(); - private boolean isMapping = true; // not saved data // temporary function address-id map @@ -197,15 +196,6 @@ public class ProcessInformation { } } - public void updateProcessMemoryMap(ProcessMemoryMap pmap, long newtime) { - long prevtime = pmap.getCapturedTime(); - synchronized (processMemSnapshots) { - processMemSnapshots.remove(Long.valueOf(prevtime)); - pmap.setCapturedTime(newtime); - processMemSnapshots.put(Long.valueOf(newtime), pmap); - } - } - public void setDropLog(boolean droplog) { this.dropLog = droplog; } @@ -214,14 +204,6 @@ public class ProcessInformation { return dropLog; } - public void setMappingState(boolean mapping) { - isMapping = mapping; - } - - public boolean isMapping() { - return isMapping; - } - public int getFunctionID(long address) { Integer ret = funcIDMap.get(Long.valueOf(address)); if (ret == null) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMap.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMap.java index 521ba27..cca1ad6 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMap.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessMemoryMap.java @@ -3,9 +3,10 @@ * * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * - * Contact: + * Contact: * Jaewon Lim * Juyoung Kim + * Vladislav Eliseev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +19,10 @@ * 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.project; @@ -29,11 +30,14 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.NavigableMap; import java.util.TreeMap; +import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.database.DBTable; import org.tizen.dynamicanalyzer.project.data.MemoryMapDBTable; +import org.tizen.dynamicanalyzer.util.Logger; public class ProcessMemoryMap { private static final String WHERE_PID_TIME = "where " + MemoryMapDBTable.COLUMN.PID.name @@ -43,8 +47,8 @@ public class ProcessMemoryMap { private long capturedTime = -1; protected LibraryObject mainBinary = null; - protected NavigableMap binaryByAddress = new TreeMap(); - protected Map binaryByBinaryID = new HashMap(); + protected NavigableMap binaryByAddress = new TreeMap<>(); + protected Map> binaryByBinaryID = new HashMap<>(); public ProcessMemoryMap(int pid, long time) { this.pid = pid; @@ -68,82 +72,183 @@ public class ProcessMemoryMap { return mainBinary; } - // return false if given library already exist in memory map - // return true otherwise + /** + * Return false if given library can't be added to memory map because of overlap + * return true otherwise. + */ public boolean addLibraryMap(LibraryObject libobj) { long lowaddr = libobj.getLowestAddress(); int binid = libobj.getBinaryID(); - LibraryObject objByID = null; + // update address -> library map + synchronized (binaryByAddress) { + Entry leftEntry; + Entry rightEntry; - synchronized (binaryByBinaryID) { - objByID = binaryByBinaryID.put(Integer.valueOf(binid), libobj); - } + leftEntry = binaryByAddress.floorEntry(lowaddr); + rightEntry = binaryByAddress.ceilingEntry(lowaddr); - synchronized (binaryByAddress) { - if (objByID != null) { - binaryByAddress.remove(Long.valueOf(objByID.getLowestAddress())); + // check left entry overlap + if (leftEntry != null && leftEntry.getValue().isOverlapped(libobj)) { + return false; } - binaryByAddress.put(Long.valueOf(lowaddr), libobj); - } + // check right entry overlap + if (rightEntry != null && rightEntry.getValue().isOverlapped(libobj)) { + return false; + } - if (objByID != null) { - return false; - } else { - return true; + // if ok then add new library object + binaryByAddress.put(lowaddr, libobj); + + // update binid -> (address -> library) map + NavigableMap libMap = binaryByBinaryID.get(binid); + if (libMap == null) { + libMap = new TreeMap<>(); + binaryByBinaryID.put(binid, libMap); + } + + libMap.put(lowaddr, libobj); } + + return true; } + /** + * Returns library object to which specified address belongs. + * + * @param address address to check + * @return library object or null if no library owns this address + */ public LibraryObject getLibraryByAddress(long address) { Map.Entry entry = binaryByAddress.floorEntry(Long.valueOf(address)); - if (entry == null) { - return null; - } else { + if (entry != null) { LibraryObject libobj = entry.getValue(); - if (libobj != null && address <= libobj.getHighestAddress()) { - return libobj; - } else { - return null; - } + return libobj.isAddrInRange(address) ? libobj : null; + } else { + return null; } } - public LibraryObject getLibraryByBinaryID(int binaryID) { - return binaryByBinaryID.get(Integer.valueOf(binaryID)); + /** + * Get all mapping which belongs to the specified binary. + * + * @param binaryID binary to get mappings for + * @return map where key is low address and value is libobject mapping that start in + * corresponding low address (lowaddress -> libobject), all libobjects correspond to + * the specified binary + */ + public NavigableMap getLibraryMappingByBinaryID(int binaryID) { + return binaryByBinaryID.get(binaryID); } - public boolean removeLibrary(long lowaddr, long highaddr) { - LibraryObject libobj = binaryByAddress.floorEntry(Long.valueOf(lowaddr)).getValue(); - if (libobj != null && highaddr <= libobj.getHighestAddress()) { - synchronized (binaryByAddress) { - binaryByAddress.remove(Long.valueOf(libobj.getLowestAddress())); - } - synchronized (binaryByBinaryID) { - binaryByBinaryID.remove(Integer.valueOf(libobj.getBinaryID())); + /** + * Tell whether specified address belongs to the specified range. + * + * @param addr address to check + * @param low range low address + * @param high range high address + */ + private static boolean isAddrInRange(long addr, long low, long high) { + return low <= addr && addr < high; + } + + /** + * Get target path of binary with specified binary id. + */ + private static String getLibraryPath(int binID) { + return Global.getProject().getDeviceStatusInfo().getBinaryInfo(binID).getTargetBinaryPath(); + } + + /** + * Remove memory mapping on specified address range, this may affect multiple library mappings: + * they may be shrinked, splitted or completely removed. + * + * @param lowaddr range low address + * @param highaddr range high address + * @return true if memory map changed, false otherwise + */ + public boolean removeMapping(long lowaddr, long highaddr) { + boolean changed = false; + synchronized (binaryByAddress) { + Entry curEntry = binaryByAddress.floorEntry(lowaddr); + + // check if there is no lib object before range + // or nearest lib object (from left) is not overlapped with range + if (curEntry == null || !curEntry.getValue().isOverlapped(lowaddr, highaddr)) { + // take nearest lib object from right + curEntry = binaryByAddress.ceilingEntry(lowaddr); } - return true; - } else { - return false; + // while we have overlapped lib object + while (curEntry != null && curEntry.getValue().isOverlapped(lowaddr, highaddr)) { + LibraryObject curLib = curEntry.getValue(); + int binid = curLib.getBinaryID(); + long curLow = curLib.getLowestAddress(); + long curHigh = curLib.getHighestAddress(); + boolean leftTouched = isAddrInRange(curLow, lowaddr, highaddr); + boolean rightTouched = isAddrInRange(curHigh, lowaddr, highaddr + 1); + + binaryByAddress.remove(curLow); + binaryByBinaryID.get(binid).remove(curLow); + changed = true; + + if (leftTouched && rightTouched) { + // completely remove mapping + if (binaryByBinaryID.get(binid).size() == 0) { + binaryByBinaryID.remove(binid); + } + Logger.info("Removed mapping for %s", getLibraryPath(binid)); + } else if (!leftTouched && !rightTouched) { + // split mapping + LibraryObject leftLib = new LibraryObject(binid, curLow, lowaddr); + LibraryObject rightLib = new LibraryObject(binid, highaddr, curHigh); + + binaryByAddress.put(curLow, leftLib); + binaryByAddress.put(highaddr, rightLib); + + binaryByBinaryID.get(binid).put(curLow, leftLib); + binaryByBinaryID.get(binid).put(highaddr, rightLib); + Logger.info("Splitted mapping for %s", getLibraryPath(binid)); + } else { + // shrink mapping : (leftTouched ^ rightTouched) + // either right or left border is touched (but not both) + if (rightTouched) { + curHigh = lowaddr; + } else { + curLow = highaddr; + } + + LibraryObject newLib = new LibraryObject(binid, curLow, curHigh); + binaryByAddress.put(curLow, newLib); + binaryByBinaryID.get(binid).put(curLow, newLib); + Logger.info("Shrinked mapping for %s", getLibraryPath(binid)); + } + + curEntry = binaryByAddress.ceilingEntry(curHigh); + } } + return changed; } + /** + * Copy all library objects from specified map to this map. + * + * @param srcMap source map to copy from + */ public void copy(ProcessMemoryMap srcMap) { this.mainBinary = srcMap.mainBinary; synchronized (binaryByAddress) { this.binaryByAddress.putAll(srcMap.binaryByAddress); - } - synchronized (binaryByBinaryID) { this.binaryByBinaryID.putAll(srcMap.binaryByBinaryID); } } public void saveMemoryMap(DBTable table) { - List> datas = new ArrayList>(); + List> datas = new ArrayList<>(); for (Map.Entry entry : binaryByAddress.entrySet()) { - List data = new ArrayList(); + List data = new ArrayList<>(); LibraryObject lib = entry.getValue(); data.add(Integer.valueOf(pid)); data.add(Long.valueOf(capturedTime)); @@ -186,8 +291,14 @@ public class ProcessMemoryMap { } } } - - public Map getAllLibraryID() { - return binaryByBinaryID; + + /** + * Get all known memory mappings. + * + * @return map where key is some low address and value is libobject mapping that start in + * corresponding low address (lowaddress -> libobject) + */ + public Map getAllMappings() { + return binaryByAddress; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java index 12bcb4e..cf3cd2a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java @@ -61,7 +61,6 @@ import org.tizen.dynamicanalyzer.database.SqlConnectionManager; import org.tizen.dynamicanalyzer.handlers.UIActionHolder; import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; -import org.tizen.dynamicanalyzer.project.callstack.RuntimeCallstackManager; import org.tizen.dynamicanalyzer.project.data.BinaryInfoDBTable; import org.tizen.dynamicanalyzer.project.data.FunctionNameDBTable; import org.tizen.dynamicanalyzer.project.data.MemoryMapDBTable; @@ -72,7 +71,6 @@ import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.setting.UILayoutDataManager; import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenShotDBTable; -import org.tizen.dynamicanalyzer.ui.kernel.data.ContextDataDBTable; import org.tizen.dynamicanalyzer.ui.network.data.NetworkAPIDBManager; import org.tizen.dynamicanalyzer.ui.opengl.data.DB.GLAPIDBTableManager; import org.tizen.dynamicanalyzer.ui.page.PageInfoRegistry; @@ -92,7 +90,6 @@ public class Project { private static final String QUERY_TABLE_ROW_COUNT = "select table_name, cardinality from information_schema.system_tablestats where table_schema='PUBLIC' order by table_name"; private static final String TABLE_FOR_FILE_PAGE = FileApiDB.TABLENAME; private static final String TABLE_FOR_THREAD_PAGE = ThreadDataDBTable.TABLENAME; - private static final String TABLE_FOR_KERNEL_PAGE = ContextDataDBTable.TABLENAME; private static final String TABLE_FOR_NETWORK_PAGE = NetworkAPIDBManager.TABLENAME; private static final String TABLE_FOR_OPENGL_PAGE = GLAPIDBTableManager.TABLENAME; private static final String TABLE_FOR_SCREENSHOT_CHART = ScreenShotDBTable.TABLENAME; @@ -142,8 +139,6 @@ public class Project { private DeviceStatusInfo targetDeviceStatusInfo = null; private AppInfo targetApplicationInfo = null; - private RuntimeCallstackManager runtimeCallstackManager = new RuntimeCallstackManager(); - // following data will not be saved // lock object @@ -405,7 +400,6 @@ public class Project { public String getFunctionName(int id) { FunctionInfo finfo = functionInfos.getByIndex(id); if (finfo == null) { - Logger.error("Invalid index for function name\n"); return AnalyzerConstants.UNKNOWN_API; } else { return finfo.getFunctionName(); @@ -424,10 +418,6 @@ public class Project { return finfo.getID(); } - public RuntimeCallstackManager getRuntimeCallstackManager() { - return runtimeCallstackManager; - } - public void addImageInfo(ImageInfo info) { if (info != null) { long time = info.getTime(); @@ -526,9 +516,15 @@ public class Project { return timelineChartList; } - // this init() function called only when trace is started. - // current device and application should be validated before calling this method. - public void init(IProgress progress) throws InterruptedException { + /** + * Initializes created project. Should be called only when trace is started. + * Current device and application should be validated before calling this + * method. + * + * @param progress {@link IProgress} implementation + * @return {@code true} on success + */ + public boolean init(IProgress progress) { AppInfo curApp = Global.getCurrentApplication(); DeviceInfo curDev = Global.getCurrentDeviceInfo(); @@ -568,7 +564,10 @@ public class Project { } } } - progress.testCancel(); + + if (progress.testCancel()) + return false; + progress.setStageComplete(STAGE.CREATE_PROJECT); // make sure previous database connection is closed @@ -578,14 +577,20 @@ public class Project { SqlConnectionManager.establishConnection(getSavePath() + File.separator + AnalyzerConstants.DATABASE_NAME); - progress.testCancel(); + if (progress.testCancel()) + return false; + progress.setStageComplete(STAGE.ESTABLISH_DB); // create table DBTableRegistry.createDBTables(null); - progress.testCancel(); + if (progress.testCancel()) + return false; + progress.setStageComplete(STAGE.CREATE_DBTABLE); + + return true; } /** @@ -630,8 +635,6 @@ public class Project { profilingStartTime = null; } savePath = null; - - runtimeCallstackManager.clear(); } public boolean isValid() { @@ -665,7 +668,6 @@ public class Project { saveFunctionInfo(); saveBinaryInfo(); saveProcessInfo(); - runtimeCallstackManager.save(); } catch (IOException e) { Logger.exception(e); bret = false; @@ -787,7 +789,6 @@ public class Project { openFunctionInfo(); openBinaryInfo(); openProcessInfo(); - runtimeCallstackManager.open(); } catch (IOException e) { Logger.exception(e); bret = false; @@ -1172,11 +1173,6 @@ public class Project { pageList.add(SettingConstants.PAGE_NAME_OPENGL); } - val = tableRowCount.get(TABLE_FOR_KERNEL_PAGE); - if (val != null && val.longValue() > 0) { - pageList.add(SettingConstants.PAGE_NAME_KERNEL); - } - pageList.add(SettingConstants.PAGE_NAME_SUMMARY); pageTabList = pageList.toArray(new String[0]); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/BaseCallstackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/BaseCallstackManager.java deleted file mode 100644 index a282d7d..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/BaseCallstackManager.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * Jooyoul Lee - * 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.project.callstack; - -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 java.util.concurrent.ConcurrentSkipListMap; - -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.common.SymbolManager; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.nl.InformationViewLabels; -import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.project.LibraryObject; -import org.tizen.dynamicanalyzer.project.ProcessInformation; -import org.tizen.dynamicanalyzer.project.ProcessMemoryMap; -import org.tizen.dynamicanalyzer.project.Project; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; -import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackData; -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.util.Logger; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; - -public abstract class BaseCallstackManager { - protected Map> callstackApiAddrByPidMap = new ConcurrentHashMap>(); - protected NavigableMap callstackDataBySeqMap = new ConcurrentSkipListMap(); - protected Map> userCallstackByTidMap = new HashMap>(); - - /** - * Method to create callstack for current state of program executing. - * - * @param log data that includes information about last function entry or - * exit - * @param profiler profiler that encapsulates data preparations - */ - abstract public void makeUserCallstack(LogData log, ProfileDataMaker profiler); - - abstract public long getSeqOfUserCallstackForTime(int tid, long time); - - public Map getCallStackApiAddrByPidMap(int pid) { - Map callstackApiByAddrMap = callstackApiAddrByPidMap.get(pid); - if (null == callstackApiByAddrMap) { - callstackApiByAddrMap = new ConcurrentHashMap(); - callstackApiAddrByPidMap.put(pid, callstackApiByAddrMap); - } - return callstackApiByAddrMap; - } - - public NavigableMap getCallStackDataBySeqMap() { - return callstackDataBySeqMap; - } - - public List getUserCallstack(int tid) { - List userCallstack = userCallstackByTidMap.get(tid); - if (null == userCallstack) { - userCallstack = new ArrayList(); - userCallstackByTidMap.put(tid, userCallstack); - } - return userCallstack; - } - - public void clear() { - callstackApiAddrByPidMap.clear(); - callstackDataBySeqMap.clear(); - userCallstackByTidMap.clear(); - } - - private String getUserFunctionPosition(int pid, long time) { - Project project = Global.getProject(); - ProcessInformation process = project.getProcessInformation(pid); - ProcessMemoryMap pmap = process.getProcessMemoryMap(time); - - if (pmap != null) { - int binaryID = pmap.getMainbinary().getBinaryID(); - return project.getDeviceStatusInfo().getBinaryInfo(binaryID).getTargetBinaryPath(); - } else { - return CommonConstants.EMPTY; - } - } - - // callstack symbol format : path(functionName - // ex. /usr/lib/libpthread.so(pthread_create - public String getCallStackSymbol(long addr, int pid, long time) { - String functionName = null; - String symbol = null; - - Project project = Global.getProject(); - ProcessInformation process = project.getProcessInformation(pid); - ProcessMemoryMap pmap = process.getProcessMemoryMap(time); - - if (pmap != null) { - if (addr >= pmap.getMainbinary().getLowestAddress() - && addr <= pmap.getMainbinary().getHighestAddress()) { // application - // binary - String baseAddr = Long.toString(pmap.getMainbinary().getLowestAddress()); - String pcStr = Long.toString(addr); - - LibraryObject libobj = pmap.getLibraryByAddress(addr); - if (libobj != null) { - BinaryInfo binInfo = project.getDeviceStatusInfo().getBinaryInfo( - libobj.getBinaryID()); - String localPath = binInfo.getTempBinaryPath(); - boolean isPieBuild = true; - if (binInfo.getType() != 1) { - isPieBuild = false; - } - functionName = SymbolManager.addr2func(localPath, pcStr, isPieBuild, baseAddr); - } - - if (null == functionName || functionName.isEmpty() || functionName.equals("_end")) { //$NON-NLS-1$ - functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - } else { - String prevFunctionName = functionName; - functionName = SymbolManager.demanglingFunctionName(prevFunctionName); - } - // need to be checked again - in case pid is not main - // application - symbol = getUserFunctionPosition(pid, time) - + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + functionName; - } else { - List binDataList = BinarySettingManager.getInstance() - .getBinarySettingList(); - - LibraryObject libraryObject = pmap.getLibraryByAddress(addr); - if (null != libraryObject) { - int binaryID = libraryObject.getBinaryID(); - BinaryInfo binfo = Global.getProject().getDeviceStatusInfo() - .getBinaryInfo(binaryID); - String path = binfo.getTargetBinaryPath(); - - boolean isInBinarySetting = false; - for (BinarySettingData binData : binDataList) { - if (path.equals(binData.getBinaryPath())) { - isInBinarySetting = true; - break; - } - } - - if (isInBinarySetting) { - String localPath = binfo.getTempBinaryPath(); - String baseAddr = Long.toString(libraryObject.getLowestAddress()); - String pcStr = Long.toString(addr); - boolean isPieBuild = true; - if (binfo.getType() != 1) { - isPieBuild = false; - } - functionName = SymbolManager.addr2func(localPath, pcStr, isPieBuild, - baseAddr); - if (null == functionName || functionName.isEmpty() - || functionName.equals("_end")) { //$NON-NLS-1$ - functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - } else { - String prevFunctionName = functionName; - functionName = SymbolManager.demanglingFunctionName(prevFunctionName); - } - // need to be checked again - in case pid is not main - // application - } else { - functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - } - symbol = path + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + functionName; - } - } - } - - if (symbol == null) { - Logger.debug("binary for the sample pc is not found :" + AnalyzerUtil.toHexdecimal(addr)); //$NON-NLS-1$ - symbol = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_LIBRARY - + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING - + AnalyzerUtil.toHexdecimal(addr); - // + InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - } - - return symbol; - } - - protected boolean isAddrInBinaryRange(int pid, long time, long addr) { - ProcessMemoryMap pmap = Global.getProject().getProcessInformation(pid) - .getProcessMemoryMap(time); - if (null == pmap) { - return false; - } - // return true when addr is within memory range of main executable - // or library which is set in the binary setting - if (addr >= pmap.getMainbinary().getLowestAddress() - && addr <= pmap.getMainbinary().getHighestAddress()) { - return true; - } - - List binDataList = BinarySettingManager.getInstance() - .getBinarySettingList(); - List binPaths = new ArrayList(); - for (BinarySettingData binData : binDataList) { - binPaths.add(binData.getBinaryPath()); - } - // TODO: performance improvement - int size = binPaths.size(); - for (int i = 0; i < size; i++) { - String binPath = binPaths.get(i); - BinaryInfo bininfo = Global.getProject().getDeviceStatusInfo().getBinaryInfo(binPath); - LibraryObject libObj = pmap.getLibraryByBinaryID(bininfo.getID()); - if (null == libObj) { - continue; - } - if (addr >= libObj.getLowestAddress() && addr <= libObj.getHighestAddress()) { - return true; - } - } - return false; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RangeCallstackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RangeCallstackManager.java deleted file mode 100644 index b48b7c9..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RangeCallstackManager.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * Jooyoul Lee - * 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.project.callstack; - -import java.util.List; -import java.util.Map; - -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -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.util.Logger; - -public class RangeCallstackManager extends BaseCallstackManager { - - @Override - public void makeUserCallstack(LogData log, ProfileDataMaker profiler) { - if (!(log instanceof ProfileData)) { - Logger.warning("failed to make user callstack : log is not profile log"); - return; - } - - ProfileData pData = (ProfileData) log; - int pid = pData.getPid(); - long time = pData.getTime(); - - Map addrMap = getCallStackApiAddrByPidMap(pid); - - int tid = pData.getTid(); - long selfAddr = pData.getPcAddr(); - long callerAddr = pData.getCallerPcAddr(); - - CallStackUnit selfCallstackUnit = addrMap.get(selfAddr); - // TODO: use callstackunit made during trace time - if (null == selfCallstackUnit) { - String strSelfFuncName = Global.getFunctionName(pData.getApiId()); - BinaryInfo binInfo = Global.getProject().getDeviceStatusInfo() - .getBinaryInfo(pData.getBinaryId()); - String strSelfSymbol = binInfo.getTargetBinaryPath() - + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + strSelfFuncName; - selfCallstackUnit = new CallStackUnit(selfAddr, strSelfSymbol, pData.getApiId(), pData); - addrMap.put(selfAddr, selfCallstackUnit); - } - - // make ProfilingData - profiler.makeFupDataForCallTrace(selfCallstackUnit, pData); - - List userCallstack = getUserCallstack(tid); - int size = userCallstack.size(); - - CallStackUnit callerCallstackUnit = addrMap.get(callerAddr); - if (null == callerCallstackUnit) { - String strCallerSymbol = getCallStackSymbol(callerAddr, pid, time); - callerCallstackUnit = new CallStackUnit(callerAddr, strCallerSymbol, pData); - addrMap.put(callerAddr, callerCallstackUnit); - } - - int eventType = pData.getMsgID(); - if (eventType == ProtocolConstants.MSG_FUNCTION_ENTRY) { - if (size == 0) { - userCallstack.add(new CallStackItem(selfCallstackUnit, time)); - } else { - if (isAddrInBinaryRange(pid, time, callerAddr)) { - // change previous top callstackunit's address to caller address of this - // callstackunit - CallStackUnit callerCsa = addrMap.get(callerAddr); - if (null == callerCsa) { - callerCsa = userCallstack.get(size - 1).getCallStackUnit(); - callerCsa.setFunctionStartAddr(callerCsa.getAddr()); - callerCsa.setAddr(callerAddr); - } else { - CallStackItem topCallstackItem = userCallstack.get(size - 1); - callerCsa.setFunctionStartAddr(topCallstackItem.getCallStackUnit() - .getAddr()); - userCallstack.set(size - 1, - new CallStackItem(callerCsa, topCallstackItem.getStartTime())); - } - } // do nothing when call is from library - // in range analysis, user callstack is only used to make callstack of sample - // and callstack of sample does not include "~~ internal library~~" - userCallstack.add(new CallStackItem(selfCallstackUnit, time)); - } - } else if (eventType == ProtocolConstants.MSG_FUNCTION_EXIT) { - if (size == 0) { - return; - } - CallStackUnit removeCallStackUnit = userCallstack.get(size - 1).getCallStackUnit(); - if (selfCallstackUnit.getFunctionId() == removeCallStackUnit.getFunctionId()) { - userCallstack.remove(size - 1); - size = userCallstack.size(); - if (size > 0) { - // restore start address of previous top callstackunit - CallStackItem prevCallstackItem = userCallstack.get(size - 1); - long prevSelfAddr = prevCallstackItem.getCallStackUnit().getFunctionStartAddr(); - CallStackUnit callerCsa = addrMap.get(prevSelfAddr); - if (null == callerCsa) { - prevCallstackItem.getCallStackUnit().setAddr(prevSelfAddr); - } else { - userCallstack.set(size - 1, - new CallStackItem(callerCsa, prevCallstackItem.getStartTime())); - } - } - } else { - Logger.debug("exit self function : %s, user callstack function : %s", - Global.getFunctionName(selfCallstackUnit.getFunctionId()), - Global.getFunctionName(removeCallStackUnit.getFunctionId())); - } - } - } - - @Override - public long getSeqOfUserCallstackForTime(int tid, long time) { - // do nothing, never been called - Logger.error("Should not be called in range callstack manager"); - return 0; - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RuntimeCallstackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RuntimeCallstackManager.java deleted file mode 100644 index cb911cf..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/callstack/RuntimeCallstackManager.java +++ /dev/null @@ -1,501 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * Jooyoul Lee - * 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.project.callstack; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.NavigableMap; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentSkipListMap; - -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.logparser.LogCenterConstants; -import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.project.LibraryObject; -import org.tizen.dynamicanalyzer.project.ProcessInformation; -import org.tizen.dynamicanalyzer.project.ProcessMemoryMap; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackDataDBTable; -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.info.callstack.CallStackUnitDBTable; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker; -import org.tizen.dynamicanalyzer.util.Logger; - -public class RuntimeCallstackManager extends BaseCallstackManager { - - protected Map> seqTimeByTidMap = new ConcurrentHashMap>(); - - // callstackdata made in range analysis should not be saved to DB - public RuntimeCallstackManager() { - } - - public void offerCallStackData(CallStackData csd) { - CallStackInserter.getInstance().pushData(csd); - } - - /** - * Get sequence time map (for each tid) - * - * @param tid thread id - * @param isCreate whether sequence time map create or not - * (true : if the map does not exist for thread, create and return) - */ - public NavigableMap getSeqTimeByTidMap(int tid, boolean isCreate) { - NavigableMap seqByTimeMap = seqTimeByTidMap.get(tid); - if (isCreate && null == seqByTimeMap) { - seqByTimeMap = new ConcurrentSkipListMap(); - seqTimeByTidMap.put(tid, seqByTimeMap); - } - return seqByTimeMap; - } - - public List getTidsOfSeqTimeMap() { - ArrayList tids = new ArrayList(); - tids.addAll(seqTimeByTidMap.keySet()); - - return tids; - } - - @Override - public void clear() { - super.clear(); - seqTimeByTidMap.clear(); - } - - @Override - public void makeUserCallstack(LogData input, ProfileDataMaker profiler) { - if (!(input instanceof ProfileData)) { - Logger.warning("failed to make user callstack : log is not profile log"); - return; - } - - ProfileData log = (ProfileData) input; - int pid = log.getPid(); - long time = log.getTime(); - - Map addrMap = getCallStackApiAddrByPidMap(pid); - - long selfAddr = log.getPcAddr(); - long callerAddr = log.getCallerPcAddr(); - - CallStackUnit selfCallstackUnit = addrMap.get(selfAddr); - - if (null == selfCallstackUnit) { - String strSelfFuncName = Global.getFunctionName(log.getApiId()); - BinaryInfo binInfo = Global.getProject().getDeviceStatusInfo() - .getBinaryInfo(log.getBinaryId()); - String strSelfSymbol = binInfo.getTargetBinaryPath() - + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + strSelfFuncName; - selfCallstackUnit = new CallStackUnit(selfAddr, strSelfSymbol, log.getApiId(), log); - addrMap.put(selfAddr, selfCallstackUnit); - } - - // insert call count - profiler.makeFupDataForCallTrace(selfCallstackUnit, log); - - - - CallStackUnit callerCallstackUnit = addrMap.get(callerAddr); - if (null == callerCallstackUnit) { - String strCallerSymbol = getCallStackSymbol(callerAddr, pid, time); - callerCallstackUnit = new CallStackUnit(callerAddr, strCallerSymbol, log); - addrMap.put(callerAddr, callerCallstackUnit); - } - - int eventType = log.getMsgID(); - if (eventType == ProtocolConstants.MSG_FUNCTION_ENTRY) { - proceedEntry(log, selfCallstackUnit, addrMap); - } else if (eventType == ProtocolConstants.MSG_FUNCTION_EXIT) { - proceedExit(log, selfCallstackUnit, addrMap); - - } - } - - /** - * Method calculates new callstack value on function entry. - * - * @param log data that includes information about current state of - * execution - * @param selfCallstackUnit description of function execution enter to - * @param addrMap map with functions assigned to caller addresses - */ - private void proceedEntry(ProfileData log, CallStackUnit selfCallstackUnit, - Map addrMap) { - int pid = log.getPid(); - int tid = log.getTid(); - - long time = log.getTime(); - long callerAddr = log.getCallerPcAddr(); - long seq = log.getSeq(); - - List userCallstack = getUserCallstack(tid); - int size = userCallstack.size(); - CallStackData callstackData = new CallStackData(seq); - - NavigableMap seqByTimeMap = getSeqTimeByTidMap(tid, true); - if (size == 0) { - userCallstack.add(new CallStackItem(selfCallstackUnit, time)); - } else { - if (!isAddrInBinaryRange(pid, time, callerAddr)) { - CallStackUnit callbackApi = addrMap - .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR); - if (null == callbackApi) { - callbackApi = new CallStackUnit( - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, - log); - addrMap.put( - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, - callbackApi); - } - userCallstack.add(new CallStackItem(callbackApi)); - } else { - CallStackUnit callerCsa = addrMap.get(callerAddr); - if (null == callerCsa) { - callerCsa = userCallstack.get(size - 1).getCallStackUnit(); - callerCsa.setFunctionStartAddr(callerCsa.getAddr()); - callerCsa.setAddr(callerAddr); - } else { - CallStackItem topCallstackItem = userCallstack - .get(size - 1); - callerCsa.setFunctionStartAddr(topCallstackItem - .getCallStackUnit().getAddr()); - userCallstack.set(size - 1, new CallStackItem(callerCsa, - topCallstackItem.getStartTime())); - } - } - userCallstack.add(new CallStackItem(selfCallstackUnit, time)); - } - size = userCallstack.size(); - for (int i = size - 1; i >= 0; i--) { - callstackData.addAddr(userCallstack.get(i).getCallStackUnit() - .getAddr()); - } - offerCallStackData(callstackData); - getCallStackDataBySeqMap().put(seq, callstackData); - seqByTimeMap.put(time, seq); - } - - /** - * Method calculates new callstack value on function exit. - * - * @param log data that includes information about current state of - * execution - * @param selfCallstackUnit description of function execution exit from - * @param addrMap map with functions assigned to caller addresses - */ - private void proceedExit(ProfileData log, CallStackUnit selfCallstackUnit, - Map addrMap) { - int tid = log.getTid(); - long time = log.getTime(); - long seq = log.getSeq(); - List userCallstack = getUserCallstack(tid); - int size = userCallstack.size(); - CallStackData callstackData = new CallStackData(seq); - - NavigableMap seqByTimeMap = getSeqTimeByTidMap(tid, true); - if (size == 0) { - // if not in range profiling, this should not be reached - return; - } - CallStackUnit removeCallStackUnit = userCallstack.get(size - 1) - .getCallStackUnit(); - if (selfCallstackUnit.getFunctionId() == removeCallStackUnit - .getFunctionId()) { - userCallstack.remove(size - 1); - size = userCallstack.size(); - if (size - 1 > 0) { - CallStackUnit checkCallStackUnit = userCallstack.get(size - 1) - .getCallStackUnit(); - if (checkCallStackUnit.getFunctionName().equals( - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC)) { - userCallstack.remove(size - 1); - } - } - size = userCallstack.size(); - if (size > 0) { - CallStackItem prevCallstackItem = userCallstack.get(size - 1); - long prevSelfAddr = prevCallstackItem.getCallStackUnit() - .getFunctionStartAddr(); - CallStackUnit callerCsa = addrMap.get(prevSelfAddr); - if (null == callerCsa) { - prevCallstackItem.getCallStackUnit().setAddr(prevSelfAddr); - } else { - userCallstack.set(size - 1, new CallStackItem(callerCsa, - prevCallstackItem.getStartTime())); - } - } - for (int i = size - 1; i >= 0; i--) { - callstackData.addAddr(userCallstack.get(i).getCallStackUnit() - .getAddr()); - } - offerCallStackData(callstackData); - getCallStackDataBySeqMap().put(seq, callstackData); - seqByTimeMap.put(time, seq); - } else { - Logger.debug("makeUserCallstack : EXIT self is not the same as top of user callstack"); - } - - String apiName = Global.getFunctionName(log.getApiId()); - if ((null != apiName) && (apiName.equals("main"))) { //$NON-NLS-1$ - ProcessInformation process = Global.getProject() - .getProcessInformation(log.getPid()); - process.setDropLog(true); - } - } - - /** - * Method to update callstack for current state of execution, if it is not - * function entry or exit. - * - * @param inputData data that includes information about current state of - * execution - */ - public void makeCallstackWithoutBacktrace(LogData inputData) { - if (!(inputData instanceof ProbeCommonData)) { - Logger.warning("failed to make callstack : log is not probe log"); - return; - } - - ProbeCommonData log = (ProbeCommonData) inputData; - - int pid = log.getPid(); - long time = log.getTime(); - - Map addrMap = getCallStackApiAddrByPidMap(pid); - - long seq = log.getSeq(); - int tid = log.getTid(); - long callerAddr = log.getCallerPcAddr(); - - if (callerAddr < 0) { // TODO: verify which case this is - CallStackData callstackData = new CallStackData(seq); - offerCallStackData(callstackData); - getCallStackDataBySeqMap().put(seq, callstackData); - return; - } - - long userCallstackSeq = getSeqOfUserCallstackForTime(tid, time); - List addrs = new ArrayList(); - int size = 0; - - if (-1 != userCallstackSeq) { // seq for usercallstack is found - List addrsFromUserCallStack = getCallstackAddrListFromSeq(userCallstackSeq); - if (null != addrsFromUserCallStack) { // callstack data for seq is found - addrs.addAll(addrsFromUserCallStack); - size = addrs.size(); - } - } - - CallStackData callstackData = new CallStackData(seq); - - if ((size == 0) || (!isAddrInBinaryRange(pid, time, callerAddr))) { - CallStackUnit callbackApi = addrMap - .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR); - if (null == callbackApi) { - callbackApi = new CallStackUnit( - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, log); - addrMap.put(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, callbackApi); - } - addrs.add(0, LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR); - } else { - CallStackUnit callerCallstackUnit = addrMap.get(callerAddr); - if (null == callerCallstackUnit) { - String strCallerSymbol = getCallStackSymbol(callerAddr, pid, time); - if(strCallerSymbol != null) { - callerCallstackUnit = new CallStackUnit(callerAddr, strCallerSymbol, inputData); - - CallStackUnit topUserCallstack = addrMap.get(addrs.get(0)); - if (callerCallstackUnit.getFunctionId() == topUserCallstack.getFunctionId()) - callerCallstackUnit.setFunctionStartAddr(topUserCallstack.getFunctionStartAddr()); - - addrMap.put(callerAddr, callerCallstackUnit); - } - } - - CallStackUnit topUserCallstack = addrMap.get(addrs.get(0)); - if (callerCallstackUnit.getFunctionId() == topUserCallstack.getFunctionId()) { - addrs.set(0, callerAddr); - } 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.addAddr(addrs.get(i)); - } - offerCallStackData(callstackData); - getCallStackDataBySeqMap().put(seq, callstackData); - } - - // to make callstack for sample, probe - @Override - public long getSeqOfUserCallstackForTime(int tid, long time) { - NavigableMap seqByTimeMap = getSeqTimeByTidMap(tid, false); - if (null != seqByTimeMap) { - Long callstackTime = seqByTimeMap.floorKey(time); - if (null != callstackTime) { // found from memory - return seqByTimeMap.get(callstackTime); - } - } - - return -1; - } - - public List getCallstackAddrListFromSeq(long seq) { - List addrs = new ArrayList(); - 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.addAll(addressList); - } else { // callstackdata is in memory - addrs.addAll(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 boolean isPieBuild(int pid, long time) { - ProcessMemoryMap pmap = Global.getProject().getProcessInformation(pid) - .getProcessMemoryMap(time); - if (null == pmap) { - return false; - } - - LibraryObject obj = pmap.getMainbinary(); - BinaryInfo binInfo = Global.getProject().getDeviceStatusInfo() - .getBinaryInfo(obj.getBinaryID()); - - if (null == binInfo || binInfo.getType() != 1) { - return false; - } else { - return true; - } - } - - /** - * Prepare callstack data to be saved into {@link CallStackUnitDBTable}. - */ - public void save() { - // save callstack unit - List> insertData = new ArrayList>(); - Collection> mapset = callstackApiAddrByPidMap.values(); - for (Map map : mapset) { - Collection units = map.values(); - for (CallStackUnit unit : units) { - List data = new ArrayList(); - data.add(Integer.valueOf(unit.getPid())); - data.add(Integer.valueOf(unit.getFunctionId())); - data.add(Integer.valueOf(unit.getBinaryID())); - data.add(Long.valueOf(unit.getAddr())); - - insertData.add(data); - } - } - - if (insertData.size() > 0) { - CallStackInserter.getInstance().getCallStackUnitTable().insertData(insertData); - } - } - - /** - * Restore callstack data maps from {@link CallStackDataDBTable} and - * {@link CallStackUnitDBTable}. - */ - public void open() { - // open callstack unit - List> callStackUnits = CallStackInserter.getInstance().getCallStackUnitTable() - .selectAllColumnData(null); - int size = callStackUnits.size(); - for (int i = 0; i < size; i++) { - List callStackUnit = callStackUnits.get(i); - int pid = (Integer) callStackUnit.get(CallStackUnitDBTable.COLUMN.PID.index); - int functionId = (Integer) callStackUnit - .get(CallStackUnitDBTable.COLUMN.FUNCTION_ID.index); - int binaryId = (Integer) callStackUnit.get(CallStackUnitDBTable.COLUMN.BINARY_ID.index); - long addr = (Long) callStackUnit.get(CallStackUnitDBTable.COLUMN.PC_ADDRESS.index); - CallStackUnit csa = new CallStackUnit(addr, pid, functionId, binaryId); - getCallStackApiAddrByPidMap(pid).put(addr, csa); - } - - // open callstack data - List> callStackData = CallStackInserter.getInstance() - .getCallStackDataTable().selectAllColumnData(null); - for (int i = 0; i < callStackData.size(); i++) { - List csdata = callStackData.get(i); - long seq = (Long) csdata - .get(CallStackDataDBTable.COLUMN.SEQUENCE_NUMBER.index); - List addrs = (List) csdata - .get(CallStackDataDBTable.COLUMN.ADDRESS_ARRAY.index); - CallStackData csd = new CallStackData(seq, addrs); - getCallStackDataBySeqMap().put(seq, csd); - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/data/MemoryMapDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/data/MemoryMapDBTable.java index 0ccaa91..d640101 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/data/MemoryMapDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/data/MemoryMapDBTable.java @@ -69,6 +69,9 @@ public class MemoryMapDBTable extends DBTable { DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(COLUMN.MAINTAG.name, DBConstants.EMPTY, DBConstants.DBTYPE_BOOLEAN)); + + setPrimaryKey(COLUMN.CAPTIME.index, COLUMN.PID.index, COLUMN.BINARYID.index, + COLUMN.LOWADDR.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java index b6419dd..eb48a58 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java @@ -289,7 +289,7 @@ public class Communicator30 extends SubCommunicator { } @Override - public DAResult sendTraceStartMessage(IProgress progress) throws InterruptedException { + public DAResult sendTraceStartMessage(IProgress progress) { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant30.MSG_START_SWAP); @@ -490,6 +490,9 @@ public class Communicator30 extends SubCommunicator { } protected DAResult sendIntrumentMessage(boolean isAdd, List paths) { + if (paths.isEmpty()) + return DAResult.SUCCESS; + ProtocolSerializer ps = new ProtocolSerializer(); if (isAdd) { @@ -928,24 +931,24 @@ public class Communicator30 extends SubCommunicator { @Override public DAResult sendUIHierarchyMessage(IProgress progress, int requestOption) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { throw new UnsupportedProtocolException(); } @Override public DAResult sendUIScreenshotMessage(IProgress progress, long uiObjectAddress) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { throw new UnsupportedProtocolException(); } @Override - public DAResult sendUIHierarchyCancelMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException { + public DAResult sendUIHierarchyCancelMessage(IProgress progress) + throws UnsupportedProtocolException { throw new UnsupportedProtocolException(); } public DAResult sendRealPathMessage(IProgress progress, String path) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { String command = AnalyzerShellCommands.DACOMMAND_READLINK + path; final List readlinkResult = new ArrayList(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java index 29bce1b..be18bb0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java @@ -81,6 +81,7 @@ public enum ProtocolConfig30 implements IProtocolConfig { Map tempMap = new EnumMap( FlatFeature.class); tempMap.put(FlatFeature.CPU_USAGE, new ProtocolConfig30[] { SYSTEM_CPU }); + tempMap.put(FlatFeature.CPU_USAGE_PER_CORE, new ProtocolConfig30[] { SYSTEM_CPU }); tempMap.put(FlatFeature.SYSTEM_MEMORY, new ProtocolConfig30[] { SYSTEM_MEMORY }); tempMap.put(FlatFeature.PROCESS_MEMORY, new ProtocolConfig30[] { SYSTEM_PROCESS }); tempMap.put(FlatFeature.MEMORY_ALLOC, new ProtocolConfig30[] { INTERNAL_MEMORY_ALLOC }); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/Communicator30_UIHV.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/Communicator30_UIHV.java index 51673a9..97bc034 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/Communicator30_UIHV.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/Communicator30_UIHV.java @@ -91,7 +91,7 @@ public class Communicator30_UIHV extends Communicator30 { @Override public DAResult sendUIHierarchyMessage(IProgress progress, int requestOption) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant30_UIHV.MSG_GET_UI_HIERARCHY); ps.putByte((byte)requestOption); @@ -109,7 +109,7 @@ public class Communicator30_UIHV extends Communicator30 { @Override public DAResult sendUIScreenshotMessage(IProgress progress, long uiObjectAddress) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant30_UIHV.MSG_GET_UI_SCREENSHOT); ps.putLong(uiObjectAddress); @@ -138,8 +138,8 @@ public class Communicator30_UIHV extends Communicator30 { } @Override - public DAResult sendUIHierarchyCancelMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException { + public DAResult sendUIHierarchyCancelMessage(IProgress progress) + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant30_UIHV.MSG_GET_UI_HIERARCHY_CANCEL); byte[] msg = ps.toByteArray(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/ProtocolConfig30_UIHV.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/ProtocolConfig30_UIHV.java index d2f1f8b..f96b9f4 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/ProtocolConfig30_UIHV.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30_uihv/ProtocolConfig30_UIHV.java @@ -84,6 +84,7 @@ public enum ProtocolConfig30_UIHV implements IProtocolConfig { Map tempMap = new EnumMap( FlatFeature.class); tempMap.put(FlatFeature.CPU_USAGE, new ProtocolConfig30_UIHV[] { SYSTEM_CPU }); + tempMap.put(FlatFeature.CPU_USAGE_PER_CORE, new ProtocolConfig30_UIHV[] { SYSTEM_CPU }); tempMap.put(FlatFeature.SYSTEM_MEMORY, new ProtocolConfig30_UIHV[] { SYSTEM_MEMORY }); tempMap.put(FlatFeature.PROCESS_MEMORY, new ProtocolConfig30_UIHV[] { SYSTEM_PROCESS }); tempMap.put(FlatFeature.MEMORY_ALLOC, new ProtocolConfig30_UIHV[] { INTERNAL_MEMORY_ALLOC }); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java index 42029c9..e84b217 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java @@ -30,7 +30,6 @@ import static org.tizen.dynamicanalyzer.constant.CommonConstants.INT_SIZE; import java.util.ArrayList; import java.util.Collections; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -62,9 +61,6 @@ import org.tizen.dynamicanalyzer.setting.FlatFeature; import org.tizen.dynamicanalyzer.setting.FlatPreferences; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.swap.communicator.SwapErrorCode; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.interactive.model.VAR_TYPE; import org.tizen.dynamicanalyzer.util.Logger; public class Communicator40 extends Communicator30 { @@ -286,11 +282,6 @@ public class Communicator40 extends Communicator30 { continue; } - if (Global.isGUIMode()) { - // checkpoints are not supported in CLI mode yet - addCheckpointsToInstList(functionInstList); - } - // TODO : make sure that first app of package is main app if (app.equals(curApp)) { String appType = app.getInfo(AppInfo.PROPERTY.APPTYPE.index); @@ -334,26 +325,6 @@ public class Communicator40 extends Communicator30 { } } - /** - * Add checkpoints data to function instrumentation list - * - * @param functionInstList list of ISerializable objects to add new - * functions to - */ - private void addCheckpointsToInstList( - List functionInstList) { - List fbiList = getFBIList(InteractiveDataManager - .getInstance().getVariableInfoList()); - Logger.debug("fbiList.size() : " + fbiList.size()); - for (int i = 0; i < fbiList.size(); i++) { - FunctionInst40 functionInst = new FunctionInst40(); - functionInst.setAddr(fbiList.get(i).getAddress()); - functionInst.setType(ProtocolConstant40.PROBE_FBI); - functionInst.setFBI(fbiList.get(i)); - functionInstList.add(functionInst); - } - } - @Override protected List getFunctionInstList(List symbols) { List functionInstList = new ArrayList(); @@ -408,39 +379,6 @@ public class Communicator40 extends Communicator30 { return functionInstList; } - // get function body instrument list - protected List getFBIList(List iInfos) { - // LinkedHashMap maintain the insertion order - Map fbiMap = new LinkedHashMap(); - - for (InteractiveInfo info : iInfos) { - switch (info.getCheckLocation()) { - case InteractiveInfo.CHECK_BEFORE_LINE: - case InteractiveInfo.CHECK_AFTER_LINE: - FunctionBodyInstrument40 fbi = getFunctionBodyInstrument(fbiMap, - info.getSourceLineAddress(info.getCheckLocation())); - makeFBIVariables(info, info.getCheckLocation(), fbi); - break; - case InteractiveInfo.CHECK_BEFORE_AFTER_LINE: - FunctionBodyInstrument40 beforeFBI = getFunctionBodyInstrument(fbiMap, - info.getSourceLineAddress(InteractiveInfo.CHECK_BEFORE_LINE)); - FunctionBodyInstrument40 afterFBI = getFunctionBodyInstrument(fbiMap, - info.getSourceLineAddress(InteractiveInfo.CHECK_AFTER_LINE)); - makeFBIVariables(info, InteractiveInfo.CHECK_BEFORE_LINE, beforeFBI); - makeFBIVariables(info, InteractiveInfo.CHECK_AFTER_LINE, afterFBI); - break; - default: - Logger.error("Impossible case!!"); - break; - } - } - - List fbiList = new ArrayList(); - fbiList.addAll(fbiMap.values()); - - return fbiList; - } - protected FunctionBodyInstrument40 getFunctionBodyInstrument( Map map, long address) { FunctionBodyInstrument40 fbi = map.get(Long.valueOf(address)); @@ -451,63 +389,6 @@ public class Communicator40 extends Communicator30 { return fbi; } - protected void makeFBIVariables(InteractiveInfo info, int checkLocation, - FunctionBodyInstrument40 fbi) { - long registerOffset = info.getRegisterOffset(); - byte registerNum = (byte) info.getRegisterID(); - int dataSize = info.getByteSize(); - if (info.isPointerArray()) { - dataSize = info.getPointerSize() * info.getArrayCount(); - } else if (info.isArray()) { - dataSize *= info.getArrayCount(); - } else if (info.isString()) { - dataSize = 0; - } - - // make target variable - FunctionBodyInstrumentVariable40 targetVariable = new FunctionBodyInstrumentVariable40( - info.getVariableID(checkLocation), registerOffset, registerNum, dataSize); - makeFBISteps(info, targetVariable); - fbi.addVariable(targetVariable); - - // make child variable (char * member of struct) - if (info.getType() == VAR_TYPE.STRUCT) { - List children = info.getChildren(); - for (int i = 0; i < children.size(); i++) { - InteractiveInfo child = children.get(i); - if (child.isString()) { - FunctionBodyInstrumentVariable40 childVariable = new FunctionBodyInstrumentVariable40( - child.getVariableID(checkLocation), registerOffset, registerNum, 0); - makeFBISteps(child, childVariable); - fbi.addVariable(childVariable); - } - } - } - } - - protected void makeFBISteps(InteractiveInfo info, FunctionBodyInstrumentVariable40 variable) { - InteractiveInfo cursorInfo = info; - while (cursorInfo != null) { - int pointerOrder = cursorInfo.getPointerOrder(); - if (info.isPointerArray()) { - pointerOrder = 0; // just request list of pointer address, not value. - } - // Add sequence is important. Do not change sequence without consideration. - if (cursorInfo == info) { - FunctionBodyInstrumentStep40 step = new FunctionBodyInstrumentStep40( - (byte) pointerOrder, 0); - variable.addStep(step); - } - InteractiveInfo parentInfo = cursorInfo.getParent(); - if (parentInfo != null) { - FunctionBodyInstrumentStep40 step = new FunctionBodyInstrumentStep40( - (byte) parentInfo.getPointerOrder(), cursorInfo.getOffset()); - variable.addStep(step); - } - cursorInfo = parentInfo; - } - } - @Override public DAResult sendBinaryInfoMessage(IProgress progress, List binPaths) { ProtocolSerializer ps = new ProtocolSerializer(); @@ -598,7 +479,7 @@ public class Communicator40 extends Communicator30 { @Override public DAResult sendRealPathMessage(IProgress progress, String path) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant40.MSG_GET_REALPATH); ps.putString(path); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java index 1a089cb..90f0234 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java @@ -105,6 +105,7 @@ public enum ProtocolConfig40 implements IProtocolConfig { Map tempMap = new EnumMap( FlatFeature.class); tempMap.put(FlatFeature.CPU_USAGE, new ProtocolConfig40[] { SYSTEM_CPU }); + tempMap.put(FlatFeature.CPU_USAGE_PER_CORE, new ProtocolConfig40[] { SYSTEM_CPU }); tempMap.put(FlatFeature.SYSTEM_MEMORY, new ProtocolConfig40[] { SYSTEM_MEMORY }); tempMap.put(FlatFeature.PROCESS_MEMORY, new ProtocolConfig40[] { SYSTEM_PROCESS }); tempMap.put(FlatFeature.MEMORY_ALLOC, new ProtocolConfig40[] { INTERNAL_MEMORY_ALLOC }); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/Communicator41.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/Communicator41.java index dc5948e..63b2322 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/Communicator41.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/Communicator41.java @@ -92,7 +92,7 @@ public class Communicator41 extends Communicator40 { @Override public DAResult sendUIHierarchyMessage(IProgress progress, int requestOption) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant41.MSG_GET_UI_HIERARCHY); ps.putByte((byte)requestOption); @@ -110,7 +110,7 @@ public class Communicator41 extends Communicator40 { @Override public DAResult sendUIScreenshotMessage(IProgress progress, long uiObjectAddress) - throws InterruptedException, UnsupportedProtocolException { + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant41.MSG_GET_UI_SCREENSHOT); ps.putLong(uiObjectAddress); @@ -139,8 +139,8 @@ public class Communicator41 extends Communicator40 { } @Override - public DAResult sendUIHierarchyCancelMessage(IProgress progress) throws InterruptedException, - UnsupportedProtocolException { + public DAResult sendUIHierarchyCancelMessage(IProgress progress) + throws UnsupportedProtocolException { ProtocolSerializer ps = new ProtocolSerializer(); ps.setMessageID(ProtocolConstant41.MSG_GET_UI_HIERARCHY_CANCEL); byte[] msg = ps.toByteArray(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/ProtocolConfig41.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/ProtocolConfig41.java index c1c03b1..910c2f0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/ProtocolConfig41.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p41/ProtocolConfig41.java @@ -109,6 +109,7 @@ public enum ProtocolConfig41 implements IProtocolConfig { Map tempMap = new EnumMap( FlatFeature.class); tempMap.put(FlatFeature.CPU_USAGE, new ProtocolConfig41[] { SYSTEM_CPU }); + tempMap.put(FlatFeature.CPU_USAGE_PER_CORE, new ProtocolConfig41[] { SYSTEM_CPU }); tempMap.put(FlatFeature.SYSTEM_MEMORY, new ProtocolConfig41[] { SYSTEM_MEMORY }); tempMap.put(FlatFeature.PROCESS_MEMORY, new ProtocolConfig41[] { SYSTEM_PROCESS }); tempMap.put(FlatFeature.MEMORY_ALLOC, new ProtocolConfig41[] { INTERNAL_MEMORY_ALLOC }); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/FlatFeature.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/FlatFeature.java index f9b14c8..bc9f285 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/FlatFeature.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/FlatFeature.java @@ -53,7 +53,7 @@ public enum FlatFeature { PROCESS_MEMORY(PrimitiveFeature.PROCESS_MEMORY), - MEMORY_ALLOC(PrimitiveFeature.MEMORY_ALLOC), + MEMORY_ALLOC(PrimitiveFeature.MEMORY_ALLOC, true), // Group300 File system DISK_IO(PrimitiveFeature.DISK_IO), @@ -71,7 +71,7 @@ public enum FlatFeature { // Group600 UI UI_EVENT(PrimitiveFeature.UI_EVENT), - SCREENSHOT(PrimitiveFeature.SCREENSHOT), + SCREENSHOT(PrimitiveFeature.SCREENSHOT, true), UI_HIERARCHY_ANALYSIS(PrimitiveFeature.UI_HIERARCHY_ANALYSIS), // TODO: Replace constant @@ -93,11 +93,33 @@ public enum FlatFeature { private Image overImg = null; private Image smallImg = null; private int overheadRanking = 0; - + private boolean isConfigurable = false; + + /** + * Constructs new instance of this class with given {@code primitive} + * feature. + * + * @param primitive {@link PrimitiveFeature} instance that will be used for + * initialization + */ private FlatFeature(PrimitiveFeature primitive) { this.primitive = primitive; } + /** + * Constructs new instance of this class with given {@code primitive} + * feature and sets it as configurable depending on {@code configurable} + * argument. + * + * @param primitive {@link PrimitiveFeature} instance that will be used for + * initialization + * @param configurable whether this feature should be configurable + */ + private FlatFeature(PrimitiveFeature primitive, boolean configurable) { + this.primitive = primitive; + this.isConfigurable = configurable; + } + static { setResources(); @@ -224,6 +246,15 @@ public enum FlatFeature { this.smallImg = smallImg; } + /** + * Checks if feature is configurable. + * + * @return {@code true} if feature is configurable + */ + public boolean isConfigurable() { + return isConfigurable; + } + public int getIndex() { return primitive.getIndex(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/SettingDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/SettingDataManager.java index f2d9ddf..54561d7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/SettingDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/setting/SettingDataManager.java @@ -435,6 +435,25 @@ public enum SettingDataManager { } /** + * Gets value of specified {@code preference}. + * + * @param preference {@link FlatPreferences} enum value + * @param defaultValue whether default value should be returned + * @return value of {@code preference} if it is selected or its default + * value if it is not selected of {@code defaultValue} is set to + * {@code true}, if {@code preference} is {@code null} then + * {@code -1} is returned + */ + public int getPreferenceValue(FlatPreferences preference, boolean defaultValue) { + if (preference == null) + return -1; + + return !defaultValue && isPreferenceSelected(preference) + ? preference.getValue() + : preference.getDefaultValue(); + } + + /** * Adds given {@code preference} to a list of selected preferences. * * @param preference {@link FlatPreferences} enum value @@ -467,6 +486,19 @@ public enum SettingDataManager { } /** + * Checks whether given {@code preference} is selected. + * + * @param preference {@link FlatPreferences} enum value + * @param defaultValue whether default value should be returned + * @return {@code true} if {@code preference} is selected + */ + public boolean isPreferenceSelected(FlatPreferences preference, boolean defaultValue) { + return defaultValue + ? (getPreferenceValue(preference, true) != 0) + : optionsSelectedPreferenceList.contains(preference); + } + + /** * Sets specified {@code preference} as selected. * * @param preference {@link FlatPreferences} object diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogParser.java index 37ce904..7795c3c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogParser.java @@ -38,7 +38,6 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.common.SymbolManager; import org.tizen.dynamicanalyzer.communicator.DeviceInfo; -import org.tizen.dynamicanalyzer.communicator.UnsupportedProtocolException; import org.tizen.dynamicanalyzer.control.DataThread; import org.tizen.dynamicanalyzer.nl.InformationViewLabels; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; @@ -47,7 +46,6 @@ import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; import org.tizen.dynamicanalyzer.swap.model.data.ScreenShotData; import org.tizen.dynamicanalyzer.swap.model.data.WebProfileData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.info.screenshot.SocketClient; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfileDataMaker; @@ -183,7 +181,6 @@ public class LogParser extends DataThread> { } } finally { DataManagerRegistry.updateLog(LogPackage.END_OF_QUEUE); - CallStackInserter.getInstance().pushData(CallStackInserter.END_OF_QUEUE); } Logger.debug("log parsing thread end!!"); //$NON-NLS-1$ @@ -203,10 +200,8 @@ public class LogParser extends DataThread> { switch (id) { case ProtocolConstants.MSG_FUNCTION_ENTRY: case ProtocolConstants.MSG_FUNCTION_EXIT: - ret = processFunctionData((ProfileData) log); - if (ret) { - packLog(log, logPack); - } + processFunctionData((ProfileData) log); + packLog(log, logPack); break; case ProtocolConstants.MSG_SYSCALL_ENTRY: // protocol 4.0 case ProtocolConstants.MSG_SYSCALL_EXIT: // protocol 4.0 @@ -247,7 +242,6 @@ public class LogParser extends DataThread> { // Currently, an only message that got to default section is // MSG_PROBE_LIFECYCLE = 0x0105 packLog(log, logPack); - Global.getRuntimeCallstackManager().makeCallstackWithoutBacktrace(log); break; } } @@ -255,55 +249,35 @@ public class LogParser extends DataThread> { updateLog(logPack); } - private boolean processFunctionData(ProfileData pData) { - int msgID = pData.getMsgID(); - Deque functionStack = getFunctionEntryStack(pData.getTid()); - - // entry / exit pair matching - if (msgID == ProtocolConstants.MSG_FUNCTION_ENTRY) { - functionStack.addLast(pData.getSeq()); - } else { // msg_function_exit - if (!functionStack.isEmpty()) { - pData.setEntrySeq(functionStack.removeLast()); - } else { // size <= 0 : bug (exit without entry) - Logger.error("function exit log without entry log"); - } - } - + /** + * Identify function name and id and save it inside {@code pData}. It is + * identified by PC address, pid and time. Identification performed + * correctly only for functions from profiled binaries. + * + * @param pData ProfileData + */ + private void processFunctionData(ProfileData pData) { boolean bMakeCallstack = true; - try { - if (pData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_FILE) { - bMakeCallstack = false; - } else if (pData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_SYSCALL) { - // do not make callstack with system call log - bMakeCallstack = false; - } else { - bMakeCallstack = true; - } - } catch (UnsupportedProtocolException e) { - bMakeCallstack = true; + if (pData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_FILE + || pData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_SYSCALL) { + bMakeCallstack = false; } if (bMakeCallstack) { int apiID = SymbolManager.getFuncId(pData, pData.getPcAddr(), pData.getPid(), pData.getTime()); if (apiID < 0) { - return false; + return; } else { String apiName = Global.getFunctionName(apiID); - if (apiName.equals(InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION)) { - return false; - } else { + if (!apiName.equals(InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION)) { pData.setApiId(apiID); } } - - Global.getRuntimeCallstackManager().makeUserCallstack(pData, - FunctionUsageProfiler.getInstance().getProfileDataMakerByPid(pData.getPid())); } - - return true; + FunctionUsageProfiler.getInstance().getProfileDataMakerByPid(pData.getPid()) + .prepareFUPDataForCallTrace(pData); } private boolean processWebFunctionData(WebProfileData pData) { @@ -426,13 +400,9 @@ public class LogParser extends DataThread> { case ProtocolConstants.MSG_FUNCTION_ENTRY: case ProtocolConstants.MSG_FUNCTION_EXIT: ProfileData fData = (ProfileData) logData; - try { - if (fData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_FILE) { - logPack.setLogs(ProtocolConstants.MSG_FUNCTION_ENTRY_EXIT, logData); - } else { - logPack.setLogs(logData.getMsgID(), logData); - } - } catch (UnsupportedProtocolException e) { + if (fData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_FILE) { + logPack.setLogs(ProtocolConstants.MSG_FUNCTION_ENTRY_EXIT, logData); + } else { logPack.setLogs(logData.getMsgID(), logData); } break; 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 cb2bbdf..1ded3ed 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java @@ -53,7 +53,7 @@ import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.swap.model.data.MemoryMapData; import org.tizen.dynamicanalyzer.swap.model.data.ProcessAddInfoData; import org.tizen.dynamicanalyzer.swap.model.data.ProcessInfoData; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.LsanDataManager; import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; @@ -154,7 +154,9 @@ public class MessageParser extends DataThread { AnalyzerManager.waitStartAck.wait(); } } catch (InterruptedException e) { - Logger.exception(e); + Logger.debug("Interrupted while waiting for trace start aknowledge message: " + + e.getLocalizedMessage()); + Thread.currentThread().interrupt(); return; } } @@ -196,7 +198,7 @@ public class MessageParser extends DataThread { case ProtocolConstants.MSG_PROCESS_MAP: case ProtocolConstants.MSG_PROCESS_UNMAP: try { - memoryMapChanged(log); + memoryMapChanged(log); } catch (Exception ex) {} break; @@ -292,7 +294,7 @@ public class MessageParser extends DataThread { Logger.debug("Pulled LeakSanitizer report file: " + source); // Pass pulled file to HeapDataManager - HeapDataManager.getInstance().parseLSanReportFile(destination); + LsanDataManager.getInstance().parseLSanReportFile(destination); break; case ERROR: @@ -301,6 +303,9 @@ public class MessageParser extends DataThread { } } + /** + * Process process memory map message. + */ private void processProcessInfo(LogData plog) { Project project = Global.getProject(); ProcessInfoData log = (ProcessInfoData) plog; @@ -312,19 +317,18 @@ public class MessageParser extends DataThread { ProcessInformation pinfo = project.getProcessInformation(pid); if (null == pinfo) { pinfo = new ProcessInformation(); - + int ppid = log.getPpid(); - + pinfo.setPid(pid); pinfo.setPpid(ppid); pinfo.setStartTime(starttime); pinfo.setProcessName(log.getCmdname()); - + project.putProcessInformation(pinfo); pinfo.setDropLog(true); } - pinfo.setMappingState(true); // make process memory map of the moment ProcessMemoryMap pMap = new ProcessMemoryMap(pinfo.getPid(), starttime); @@ -347,6 +351,9 @@ public class MessageParser extends DataThread { ThreadDataManager.getInstance().getThreadDataMaker().createMainThreadItem(pid); } + /** + * Process memory map/unmap messages. + */ private void memoryMapChanged(LogData plog) { Project project = Global.getProject(); MemoryMapData log = (MemoryMapData) plog; @@ -354,50 +361,40 @@ public class MessageParser extends DataThread { int pid = log.getPid(); ProcessInformation pinfo = project.getProcessInformation(pid); if (null == pinfo) { - // bug!!! - Logger.error("bug occurred!!"); + // it shouldn't happen + Logger.error("Memory map changed before process memory info arrived."); return; } ProcessMemoryMap lastMap = pinfo.getLastProcessMemoryMap(); - if (lastMap != null) { - int msgID = log.getMsgID(); - long lowAddr = log.getLowAddr(); - long highAddr = log.getHighAddr(); - - if (msgID == ProtocolConstants.MSG_PROCESS_MAP) { - // update to last memory map - String libPath = log.getLibPath(); - - BinaryInfo bininfo = project.getDeviceStatusInfo().getBinaryInfo(libPath); - LibraryObject libObj = new LibraryObject(bininfo.getID(), lowAddr, highAddr); - if (!lastMap.addLibraryMap(libObj)) { - Logger.error("exist library(%d, %d, %s)", lowAddr, highAddr, libPath); - } else { - Logger.debug("map library(%d, %d, %s)", lowAddr, highAddr, libPath); - } + int msgID = log.getMsgID(); + long lowAddr = log.getLowAddr(); + long highAddr = log.getHighAddr(); - pinfo.setMappingState(true); - } else { - if (pinfo.isMapping()) { - // make new memory map - ProcessMemoryMap newMap = new ProcessMemoryMap(pinfo.getPid(), log.getTime()); - pinfo.addProcessMemoryMap(newMap); - newMap.copy(lastMap); - - // remove from new map - newMap.removeLibrary(lowAddr, highAddr); - } else { - // update captured time of last memory map - pinfo.updateProcessMemoryMap(lastMap, log.getTime()); - - // remove from map - lastMap.removeLibrary(lowAddr, highAddr); - } + // make new memory map + ProcessMemoryMap newMap = new ProcessMemoryMap(pinfo.getPid(), log.getTime()); + + newMap.copy(lastMap); - Logger.debug("unmap library(%d, %d)", lowAddr, highAddr); + if (msgID == ProtocolConstants.MSG_PROCESS_MAP) { + // update to last memory map + String libPath = log.getLibPath(); - pinfo.setMappingState(false); + BinaryInfo bininfo = project.getDeviceStatusInfo().getBinaryInfo(libPath); + LibraryObject libObj = new LibraryObject(bininfo.getID(), lowAddr, highAddr); + if (!newMap.addLibraryMap(libObj)) { + Logger.error("library mapping overlap (%d, %d, %s)", lowAddr, highAddr, libPath); + } else { + pinfo.addProcessMemoryMap(newMap); + Logger.debug("map library (%d, %d, %s)", lowAddr, highAddr, libPath); + } + } else { + // remove from new map + if (!newMap.removeMapping(lowAddr, highAddr)) { + Logger.info("nothing to unmap in range (%d, %d)", lowAddr, highAddr); + } else { + pinfo.addProcessMemoryMap(newMap); + Logger.debug("unmapped memory map (%d, %d)", lowAddr, highAddr); } } } 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 604daff..75d79c0 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 @@ -184,17 +184,8 @@ public class ProfileData extends LogData { this.callerPcAddr = callerPcAddr; } - public int getProbeType() throws UnsupportedProtocolException { - if (protocolVersion == Protocol.VERSION_30 || protocolVersion == Protocol.VERSION_30A - || protocolVersion == Protocol.VERSION_30_UIHV) { - return probeType; - } else { - throw new UnsupportedProtocolException(); - } - } - - public void setProbeType(int probeType) { - this.probeType = probeType; + public int getProbeType() { + return probeType; } public int getProbeSubType() throws UnsupportedProtocolException { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/ChartPopupMenu.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/ChartPopupMenu.java new file mode 100644 index 0000000..a318acb --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/ChartPopupMenu.java @@ -0,0 +1,88 @@ +package org.tizen.dynamicanalyzer.ui.common; + +import java.util.List; + +import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.common.DASelectionData; +import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; +import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; +import org.tizen.dynamicanalyzer.widgets.chart.DAChart; +import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; +import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; +import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; +import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; +import org.tizen.dynamicanalyzer.widgets.timeline.MarkerManager; + +/** + * Default pop-up menu for charts. Consists of one default menu item - 'Select range'. + * + * @author d.nikiforov + */ +public class ChartPopupMenu extends DAPopupMenu { + + /** + * Creates a new instance of pop-up menu given its parent chart. + * + * @param parent {@link DAChart} instance + */ + public ChartPopupMenu(DAChart parent) { + super(parent); + + DAPopupMenuItem selectRangeItem = new DAPopupMenuItem(this); + selectRangeItem.setText(AnalyzerLabels.SELECT_RANGE); + selectRangeItem.addListener(new DAPopupMenuListener() { + @Override + public void widgetSelected(DAPopupMenuItem menuItem) { + setRangeFromMarkerList(menuItem.getDoubleData()); + } + }); + } + + /** + * Selects range between range markers with specified {@code time}. If {@code time} equals to + * the time of one of the markers or if there are no markers then current selection will not be + * changed. + * + * @param time time within selected range + */ + private void setRangeFromMarkerList(double time) { + List markers = MarkerManager.INSTANCE.getMarkerTimeList(); + + if (markers.isEmpty() || markers.contains(time)) + return; + + int findIndex = -1; + + for (int i = 0; i < markers.size(); i++) { + if (markers.get(i) > time) { + findIndex = i; + break; + } + } + + double startTime; + double endTime; + DAChart parentChart = (DAChart) getParent(); + + if (findIndex == 0) { + startTime = 0; + endTime = markers.get(findIndex); + } else if (findIndex == -1) { + startTime = markers.get(markers.size() - 1); + endTime = parentChart.getPlot().getValidEndX(); + } else { + startTime = markers.get(findIndex - 1); + endTime = markers.get(findIndex); + } + + DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) parentChart.getPlot() + .getMarkers().get(0); + intervalMarker.setInterval(startTime, endTime); + + AnalyzerManager.getCurrentPage().updateView( + new DASelectionData(CommonConstants.EMPTY, + (long) (startTime * TimelineConstants.MEGA_DOUBLE), + (long) (endTime * TimelineConstants.MEGA_DOUBLE), null, null)); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupAnalysisMenuItemClickListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupAnalysisMenuItemClickListener.java deleted file mode 100644 index 750bd5a..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupAnalysisMenuItemClickListener.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Jungwook Ryu - * 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.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; - -public class PopupAnalysisMenuItemClickListener extends DAPopupMenuListener { - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - // TODO Auto-generated method stub - RangeDataManager.getInstance().startRangeAnalysis(); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupClearMenuItemClickListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupClearMenuItemClickListener.java deleted file mode 100644 index 23e14ed..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupClearMenuItemClickListener.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Jungwook Ryu - * 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.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; - -public class PopupClearMenuItemClickListener extends DAPopupMenuListener { - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - // TODO Auto-generated method stub - RangeDataManager.getInstance().initRange(); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupEndMenuItemClickListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupEndMenuItemClickListener.java deleted file mode 100644 index e106db6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupEndMenuItemClickListener.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Jungwook Ryu - * 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.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; - -public class PopupEndMenuItemClickListener extends DAPopupMenuListener { - private DAPopupMenuItem endItem; - private DAChartBoard chartBoard; - private RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - - public PopupEndMenuItemClickListener(DAPopupMenuItem item, DAChartBoard board){ - endItem = item; - chartBoard = board; - } - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - double endTime = endItem.getDoubleData(); - rangeDataManager - .setMarkerEndTime((long) (endTime * TimelineConstants.MEGA_DOUBLE)); - - double startTime = rangeDataManager.getMarkerStartTime() - / TimelineConstants.MEGA_DOUBLE; - - - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval(startTime, - endTime); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupFromSelectionMenuItemClickListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupFromSelectionMenuItemClickListener.java deleted file mode 100644 index a30e050..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupFromSelectionMenuItemClickListener.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Jungwook Ryu - * 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.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; - -public class PopupFromSelectionMenuItemClickListener extends - DAPopupMenuListener { - private DAChartBoard chartBoard; - private RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - - public PopupFromSelectionMenuItemClickListener(DAPopupMenuItem item, - DAChartBoard board) { - chartBoard = board; - } - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - // TODO Auto-generated method stub - double startTime = ((DAChartPlotIntervalMarker) chartBoard.getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)).getStartVal(); - double endTime = ((DAChartPlotIntervalMarker) chartBoard.getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)).getEndVal(); - double temp; - - if (startTime > endTime) { - temp = startTime; - startTime = endTime; - endTime = temp; - } - rangeDataManager - .setMarkerStartTime((long) (startTime * TimelineConstants.MEGA_DOUBLE)); - rangeDataManager - .setMarkerEndTime((long) (endTime * TimelineConstants.MEGA_DOUBLE)); - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval(startTime, - endTime); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemListener.java deleted file mode 100644 index 926cc97..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.tizen.dynamicanalyzer.ui.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; - -public class PopupRangeAnalysisMenuItemListener extends DAPopupMenuListener { - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - double time = menuItem.getDoubleData(); - RangeDataManager.getInstance().setRangeFromMarkerList((long) (time * TimelineConstants.MEGA_DOUBLE)); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemOnChartListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemOnChartListener.java deleted file mode 100644 index a060c0b..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupRangeAnalysisMenuItemOnChartListener.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * - */ -package org.tizen.dynamicanalyzer.ui.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -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.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; - -public class PopupRangeAnalysisMenuItemOnChartListener extends PopupRangeAnalysisMenuItemListener { - - DAChartBoard chartBoard; - DAChart chart; - - public PopupRangeAnalysisMenuItemOnChartListener(DAPopupMenuItem item, DAChartBoard chartBoard, DAChart chart) { - this.chartBoard = chartBoard; - this.chart = chart; - } - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - double time = menuItem.getDoubleData(); - RangeDataManager.getInstance().setRangeFromMarkerList((long) (time * TimelineConstants.MEGA_DOUBLE)); - - DAChartPlotMarker marker = chart.getPlot().getMarkers().get(0); - // Check type of marker before cast to prevent ClassCastException in runtime - if (marker instanceof DAChartPlotIntervalMarker) { - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) marker; - double startVal = RangeDataManager.getInstance().getMarkerStartTime(); - double endVal = RangeDataManager.getInstance().getMarkerEndTime(); - intervalMarker.setInterval(startVal / TimelineConstants.MEGA_DOUBLE, - endVal / TimelineConstants.MEGA_DOUBLE); - - AnalyzerUtil.getMainTab().getTopComposite().callUpdatePage(chartBoard.getSelectItem()); - } - else { - Logger.error( - "Chart plot marker is not of type DAChartPlotIntervalMarker but " + marker.getClass().getName()); - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupStartMenuItemClickListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupStartMenuItemClickListener.java deleted file mode 100644 index ac6a9b6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/PopupStartMenuItemClickListener.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Jungwook Ryu - * 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.common; - -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuListener; - -public class PopupStartMenuItemClickListener extends DAPopupMenuListener { - private DAPopupMenuItem startItem; - private DAChartBoard chartBoard; - private RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - - public PopupStartMenuItemClickListener(DAPopupMenuItem item, DAChartBoard board){ - startItem = item; - chartBoard = board; - } - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - // TODO Auto-generated method stub - double startTime = startItem.getDoubleData(); - rangeDataManager - .setMarkerStartTime((long) (startTime * TimelineConstants.MEGA_DOUBLE)); - - double endTime = rangeDataManager.getMarkerEndTime() - / TimelineConstants.MEGA_DOUBLE; - - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval(startTime, - endTime); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/TimelineChartMouseEventListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/TimelineChartMouseEventListener.java index bc8d067..962dc7c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/TimelineChartMouseEventListener.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/TimelineChartMouseEventListener.java @@ -41,7 +41,6 @@ import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotDialog; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; @@ -59,12 +58,10 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAScreenshotChartPlot; import org.tizen.dynamicanalyzer.widgets.chart.DAUIEventChartPlot; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; import org.tizen.dynamicanalyzer.widgets.timeline.MarkerManager; public class TimelineChartMouseEventListener extends MouseAdapter implements MouseMoveListener { - protected RangeDataManager rangeDataManager = RangeDataManager.getInstance(); protected DAPopupMenu menu; protected DATimeline timeline; protected double baseTime = TimelineConstants.NOT_INITED; @@ -93,10 +90,8 @@ public class TimelineChartMouseEventListener extends MouseAdapter implements Mou double eventTime = plot.getXFromXPixel(e.x); if (e.button == 3) { - List itemList = menu.getItems(); - for(DAPopupMenuItem item : itemList) { - item.setDoubleData(eventTime); - } + if (menu != null) + menu.getItems().forEach((item) -> item.setDoubleData(eventTime)); return; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/UICommonConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/UICommonConstants.java index 31d9280..5decf1a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/UICommonConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/common/UICommonConstants.java @@ -36,6 +36,4 @@ public class UICommonConstants { public static Color RANGE_MARKING_COLOR = ColorResources.YELLOW; public final static int SELECTION_MARKER_INDEX = 0; - public final static int RANGE_ANALYSIS_MARKER_INDEX = 1; - public final static int RANGE_MARKER_INDEX = 2; } 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 e79a37f..3b56a35 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 @@ -50,14 +50,12 @@ import org.tizen.dynamicanalyzer.error.ErrorCodeManager; import org.tizen.dynamicanalyzer.logparser.LogCenterConstants; import org.tizen.dynamicanalyzer.model.FilterProperty; import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.swap.model.data.FileData; import org.tizen.dynamicanalyzer.ui.file.data.FileAccessorDB; import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB; 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; import org.tizen.dynamicanalyzer.util.Logger; @@ -394,32 +392,6 @@ public class FileApiListTable extends DAApiListTableComposite { return errMsg; } - protected void actionSetStartEnd(int type) { - GridItem item = table.getItem(mousePoint); - if (null != item) { - FileData data = (FileData) ((DATableDataFormat) item.getData()).getLogData(); - long time = data.getTime(); - double startTime = -1; - double endTime = -1; - - if (type == START_TIME) { - rangeDataManager.setMarkerStartTime(time); - startTime = time / TimelineConstants.MEGA_DOUBLE; - endTime = rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE; - - } else if (type == END_TIME) { - rangeDataManager.setMarkerEndTime(time); - endTime = time / TimelineConstants.MEGA_DOUBLE; - startTime = rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE; - } - - FileChartView chartview = (FileChartView) (AnalyzerManager.getCurrentPage().getView(FilePage.chartViewID)); - if (chartview != null) { - chartview.setRangeMarker(startTime, endTime); - } - } - } - public boolean[] getColumnVisibility() { if (null == table) return null; 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 20e10ff..28d2325 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 @@ -36,7 +36,6 @@ 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.FileSelectedData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.DAAdvancedViewComposite; import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; @@ -45,8 +44,6 @@ public class FileApiListView extends DAAdvancedViewComposite { private long analysisStartTime = 0; private long analysisEndTime = 0; private int preSelectionPId = 1; - private long preAnalysisStartTime = 0; - private long preAnalysisEndTime = 0; private FileSelectedData selectedData = null; private String[] columnNames = { FilePageLabels.FILE_API_LIST_VIEW_INDEX, @@ -118,33 +115,6 @@ public class FileApiListView extends DAAdvancedViewComposite { isUpdate = true; } preSelectionPId = selectedPid; - - // if analyzer is changed, set the start and end time with changed - // analyzer and update table - long newAnalysisStartTime = 0; - long newAnalysisEndTime = 0; - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - newAnalysisStartTime = RangeDataManager.getInstance() - .getAnalysisStartTime(); - newAnalysisEndTime = RangeDataManager.getInstance() - .getAnalysisEndTime(); - } else { - newAnalysisStartTime = 0; - newAnalysisEndTime = 0; - } - if (newAnalysisStartTime != preAnalysisStartTime - || newAnalysisEndTime != preAnalysisEndTime) { - preAnalysisStartTime = newAnalysisStartTime; - preAnalysisEndTime = newAnalysisEndTime; - isUpdate = true; - } - - // 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; - }*/ return isUpdate; } 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 86b7b9d..824ba1a 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 @@ -35,11 +35,10 @@ import org.eclipse.swt.widgets.Composite; import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.nl.FilePageLabels; -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.PopupRangeAnalysisMenuItemOnChartListener; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; @@ -61,7 +60,6 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip; import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; public class FileChartBoard extends DADefaultChartBoard { private List chartList = new ArrayList(); @@ -439,12 +437,8 @@ public class FileChartBoard extends DADefaultChartBoard { tooltip.setFont(FontResources.CHART_TOOLTIP_FONT); plot.setTooltip(tooltip); - DAPopupMenu popupMenu = new DAPopupMenu(chart); + DAPopupMenu popupMenu = new ChartPopupMenu(chart); popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, this, chart)); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( 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 d24f67d..2b93b9e 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 @@ -58,7 +58,6 @@ import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager; import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; import org.tizen.dynamicanalyzer.ui.toolbar.DAToolBarCustomCombo; @@ -87,7 +86,6 @@ public class FileChartView extends DAViewComposite { private DAToolBarCustomCombo processCombo; - private final RangeDataManager rangeDataManager = RangeDataManager.getInstance(); private FileDataManager chartManager = FileDataManager.getInstance(); public FileChartView(Composite parent, int style) { @@ -324,20 +322,6 @@ public class FileChartView extends DAViewComposite { } else { fileChartBoard.setTotalEndTime(Toolbar.INSTANCE.getTime(), false); } - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) fileChartBoard.getMarkers().get(UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) fileChartBoard.getMarkers().get(UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) fileChartBoard.getMarkers().get(UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE); - } @Override @@ -408,25 +392,6 @@ public class FileChartView extends DAViewComposite { 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) { - ((DAChartPlotIntervalMarker) fileChartBoard.getMarkers().get(UICommonConstants.RANGE_MARKER_INDEX)) - .setInterval(starttime, endtime); } public DAChartBoard getChartBoard() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FilePage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FilePage.java index 2184bcb..d7370de 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FilePage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/file/FilePage.java @@ -52,26 +52,23 @@ public class FilePage extends DABaseDataPageComposite { this.setData(KEY_TOOLTIP, ShortCutManager.COOLBAR_AREA_FILE_TOOLTIP); this.setBackground(ColorResources.WHITE); this.setLayout(new FillLayout()); - -// ((FillLayout) getLayout()).marginHeight = 0; -// ((FillLayout) getLayout()).marginWidth = 0; FileChartView fileChartView = new FileChartView(topForm, SWT.NONE); addView(fileChartView); fileAPITableView = new DATabComposite(bottomLeftForm, SWT.NONE, false, true); { + fileAPITableView.setID(AnalyzerLabels.LEFT_TABLE_VIEW_ID); FileApiListView fileApiListView = new FileApiListView(fileAPITableView.getContentComposite(), SWT.NONE); fileAPITableView.addView(fileApiListView); - addView(fileApiListView); } addView(fileAPITableView); - + fileDetailTableView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); - { + { + fileDetailTableView.setID(AnalyzerLabels.RIGHT_TABLE_VIEW_ID); FileDetailInfoView fileDetailInfoView = new FileDetailInfoView(fileDetailTableView.getContentComposite(), SWT.NONE); fileDetailTableView.addView(fileDetailInfoView); - addView(fileDetailInfoView); } addView(fileDetailTableView); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/AppStartupTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/AppStartupTable.java index c9cb125..3497f1a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/AppStartupTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/AppStartupTable.java @@ -38,7 +38,6 @@ import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.nl.InformationViewLabels; import org.tizen.dynamicanalyzer.swap.model.data.AppStartupData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; @@ -79,7 +78,7 @@ public class AppStartupTable extends DATableComposite { @Override public void widgetSelected(SelectionEvent e) { AnalyzerManager.getCurrentPage().updateView( - new DAViewData(TimelineTableView.tabID, null)); + new DAViewData(TimelineTableView.appStartupViewID, null)); GridItem[] sels = table.getSelection(); if (sels.length > 0) { table.setFocusItem(sels[0]); @@ -137,16 +136,6 @@ public class AppStartupTable extends DATableComposite { tableInput.setText(contentText); tableInput.setData(tableData); input.add(tableInput); - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long analysisStartTime = RangeDataManager.getInstance() - .getAnalysisStartTime(); - long analysisEndTime = RangeDataManager.getInstance() - .getAnalysisEndTime(); - if (startTime >= analysisStartTime && startTime <= analysisEndTime) { - tableInput.setInRange(true); - } - } } return input; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupDBTable.java index d185d1a..c8188f2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupDBTable.java @@ -109,7 +109,7 @@ public class WebAppStartupDBTable extends DBTable { addColumn(new DBColumn(COLUMN.RESOURCE_PATH.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR, DALimit.FILEPATH_LENGTH)); addColumn(new DBColumn(COLUMN.TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.TIME.index); + addIndex(COLUMN.TIME.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupTable.java index 636d767..6827e2b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/appStartup/WebAppStartupTable.java @@ -47,7 +47,6 @@ import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.nl.InformationViewLabels; import org.tizen.dynamicanalyzer.swap.model.data.WebAppStartupData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; @@ -103,7 +102,7 @@ public class WebAppStartupTable extends DATableComposite { @Override public void widgetSelected(SelectionEvent e) { AnalyzerManager.getCurrentPage().updateView( - new DAViewData(TimelineTableView.tabID, null)); + new DAViewData(TimelineTableView.appStartupViewID, null)); GridItem[] sels = table.getSelection(); if (sels.length > 0) { table.setFocusItem(sels[0]); @@ -228,7 +227,7 @@ public class WebAppStartupTable extends DATableComposite { contentData.add(Long.toString(time)); // create table input - TableInput tableInput = createTableData(rowData, contentText, contentData, time); + TableInput tableInput = createTableData(rowData, contentText, contentData); input.add(tableInput); // set start table data @@ -276,7 +275,8 @@ public class WebAppStartupTable extends DATableComposite { contentData.add(Long.toString(endTime - startData.startTime)); } - private TableInput createTableData(List rowData, List contentText, List contentData, long time) { + private TableInput createTableData(List rowData, List contentText, + List contentData) { DATableDataFormat tableData = new DATableDataFormat( (Long) rowData.get(WebAppStartupDBTable.COLUMN.SEQUENCE_NUMBER.getIndex())); tableData.setLogData(makeWebAppStartupData(rowData)); @@ -287,15 +287,6 @@ public class WebAppStartupTable extends DATableComposite { tableInput.setText(contentText); tableInput.setData(tableData); - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long analysisStartTime = RangeDataManager.getInstance() - .getAnalysisStartTime(); - long analysisEndTime = RangeDataManager.getInstance() - .getAnalysisEndTime(); - if (time >= analysisStartTime && time <= analysisEndTime) { - tableInput.setInRange(true); - } - } return tableInput; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackData.java deleted file mode 100644 index 04264c1..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackData.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * Jooyoul Lee - * 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.info.callstack; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Class containing data about callstack state at the moment of receiving - * message with specified sequence number. - */ -public class CallStackData { - protected long seq; - protected List addrs; - - /** - * Public constructor for empty callstack data. - * - * @param seqNum sequence number of entry or exit message - */ - public CallStackData(long seqNum) { - seq = seqNum; - addrs = new ArrayList(); - } - - /** - * Public constructor for non empty callstack data. - * - * @param seqNum sequence number of entry or exit message - * @param addrs List with addresses of called functions - */ - public CallStackData(long seqNum, List addrs) { - seq = seqNum; - this.addrs = addrs; - } - - /** - * Return sequence number. - */ - public long getSeq() { - return seq; - } - - /** - * Return unmodifiable copy of list with addresses of called functions. - */ - public List getAddrs() { - return Collections.unmodifiableList(addrs); - } - - /** - * Add specified address to call stack data. - * - * @param addr specified address - */ - public void addAddr(long addr) { - this.addrs.add(addr); - } -} 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 deleted file mode 100644 index 6cdfb74..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackDataDBTable.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * 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.info.callstack; - -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.IResultSet; -import org.tizen.dynamicanalyzer.util.Logger; - -public class CallStackDataDBTable extends DBTable { - private static final String TABLENAME="CALL_STACK_DATA"; - private static final String queryto_withSeq = "where %s = %s"; - - public enum COLUMN { - SEQUENCE_NUMBER(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER), - ADDRESS_ARRAY(1, "ADDRESS_ARRAY"); - - 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 CallStackDataDBTable() { - addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(COLUMN.ADDRESS_ARRAY.name, DBConstants.NOT_NULL, DBConstants.BIGINT_ARRAY)); - } - - public List> getCallStackAddrsFromDB(long seq) { - String where = String.format(queryto_withSeq, - COLUMN.SEQUENCE_NUMBER.name, seq); - - List selectColumn = new ArrayList(); - selectColumn.add(COLUMN.ADDRESS_ARRAY.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))); - return row; - } - }); - } - - @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.SEQUENCE_NUMBER.index + 1, (Long) (rowData.get(COLUMN.SEQUENCE_NUMBER.index))); - setArrayToPreparedStatement(COLUMN.ADDRESS_ARRAY.index, DBConstants.DBTYPE_LONG, - prep, rowData); - } catch (SQLException e) { - Logger.exception(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Long.valueOf(rs.getLong(COLUMN.SEQUENCE_NUMBER.index + 1))); //because counting starts from 1 in db. - //add array - List addrs = new ArrayList(); - Object[] buf = (Object[]) rs.getArray( - COLUMN.ADDRESS_ARRAY.index + 1).getArray(); - for (Object b : buf) { - addrs.add((Long) b); - } - row.add(addrs); - } catch (SQLException e) { - Logger.exception(e); - return null; - } - - return row; - } -} 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 deleted file mode 100644 index f9567d3..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * 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.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 org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DALimit; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.control.DataThread; -import org.tizen.dynamicanalyzer.setting.FlatFeature; -import org.tizen.dynamicanalyzer.setting.FlatPreferences; -import org.tizen.dynamicanalyzer.setting.SettingDataManager; -import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; -import org.tizen.dynamicanalyzer.util.Logger; - -// inserter thread for callstackdata, callstackunit -public class CallStackInserter extends DataThread { - public static final CallStackData END_OF_QUEUE = new CallStackData(-1); - - private static final int FULL_COUNT = 5000; - private static CallStackInserter instance = new CallStackInserter(); - - private CallStackDataDBTable callStackDataTable = null; - private CallStackUnitDBTable callStackUnitTable = null; - - private CallStackInserter() { - callStackDataTable = new CallStackDataDBTable(); - callStackUnitTable = new CallStackUnitDBTable(); - } - - public static CallStackInserter getInstance() { - return instance; - } - - public CallStackDataDBTable getCallStackDataTable() { - return callStackDataTable; - } - - public CallStackUnitDBTable getCallStackUnitTable() { - return callStackUnitTable; - } - - @Override - protected String getThreadName() { - return AnalyzerConstants.CALLSTACK_INSERTER_THREAD; - } - - @Override - protected boolean workAfterStart() { - return true; - } - - @Override - protected boolean workAfterStopNormal() { - return true; - } - - @Override - protected boolean workAfterStopForced() { - return true; - } - - @Override - protected void resetBeforeStart() { - } - - @Override - protected void clearAfterStop() { - } - - @Override - public void run() { - Thread curThread = Thread.currentThread(); - - List bufferList = new ArrayList(); - while (testThread(curThread)) { - CallStackData data = pollData(); - if (data == null || data == END_OF_QUEUE) { - break; - } - - bufferList.add(data); - if (bufferList.size() >= FULL_COUNT) { - saveCallStackData(bufferList); - bufferList.clear(); - } - } - - if (!bufferList.isEmpty() && testThread(curThread)) { - saveCallStackData(bufferList); - bufferList.clear(); - } - } - - private void saveCallStackData(List dataList) { - ArrayList> insertData = new ArrayList>(); - long lastInsertSeq = -1; - - int dataSize = dataList.size(); - for (int i = 0; i < dataSize; i++) { - CallStackData csd = dataList.get(i); - List addrs = csd.getAddrs(); - - List insertRowData = new ArrayList(); - try { - insertRowData.add(Long.valueOf(csd.getSeq())); - insertRowData.add(addrs); - } catch (ArrayIndexOutOfBoundsException e) { - Logger.exception(e); - } - insertData.add(insertRowData); - - lastInsertSeq = csd.getSeq(); - } - - if (!insertData.isEmpty()) { - callStackDataTable.insertData(insertData); - - // The next step is working only if we don't have to construct call trace for memory allocations. - // FIXME: - // Another option might be to fix MemoryCallStackTable to read data from database. - // On one hand it takes additional time. On other hand keeping all calltraces in memory - // may also result in memory/performance degradation (however it is anyway done when opening a trace). - // We should consider some reasonable optimization here. - if (!SettingDataManager.INSTANCE.getSelectedFlatFeatureSet().contains(FlatFeature.MEMORY_ALLOC)) - { - // remove unnecessary callstackdata from memory - if (SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.FUNCTION_SAMPLING_RATE) > 0) { - // 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); - } - } - } - - // stop trace if number of entries over > 1M - List tids = Global.getRuntimeCallstackManager().getTidsOfSeqTimeMap(); - int size = tids.size(); - for (int i = 0; i < size; i++) { - Map seqByTimeMap = Global.getRuntimeCallstackManager().getSeqTimeByTidMap( - tids.get(i), false); - if (null != seqByTimeMap && seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) { - DALimit.stopTraceAndOpenWarningDialog(); - } - } - } - - private void removeCallstackData(long seq) { - NavigableMap callstackDataMap = Global.getRuntimeCallstackManager() - .getCallStackDataBySeqMap(); - SortedMap headMap = callstackDataMap.headMap(seq); - Iterator> itr = headMap.entrySet().iterator(); - while (itr.hasNext()) { - itr.next(); - itr.remove(); - } - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackItem.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackItem.java deleted file mode 100644 index d969c80..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackItem.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2013 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.info.callstack; - -public class CallStackItem { - protected long startTime; - protected CallStackUnit callstackUnit; - - public CallStackItem(CallStackUnit CallstackUnit) { - callstackUnit = CallstackUnit; - startTime = -1; - } - - public CallStackItem(CallStackUnit CallstackUnit, long time) { - callstackUnit = CallstackUnit; - startTime = time; - } - - public long getStartTime() { - return startTime; - } - - public CallStackUnit getCallStackUnit() { - return callstackUnit; - } - -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnit.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnit.java index 3089808..1ee6167 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnit.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnit.java @@ -7,6 +7,7 @@ * WooJin Jung * Jooyoul Lee * Juyoung Kim + * Petr Privalov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,124 +20,122 @@ * 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.info.callstack; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.nl.InformationViewLabels; -import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; -import org.tizen.dynamicanalyzer.util.Logger; +import org.tizen.dynamicanalyzer.logparser.LogCenterConstants; public class CallStackUnit { private long address; - private long functionStartAddress; - private String path; - private String functionName; - private String offset = CommonConstants.EMPTY; - private String etc = CommonConstants.EMPTY; + private long callerAddress; private int pid; + private int tid; private long time; private int functionID; - private int binaryID; - // TODO: get path and function name as parameter, not symbol - public CallStackUnit(long addr, String symbol, LogData log) { - this.address = addr; - this.functionStartAddress = addr; - this.time = log.getTime(); - this.pid = log.getPid(); - this.functionID = AnalyzerConstants.INVALID_ID; - this.functionName = CommonConstants.EMPTY; - makeCallstackData(symbol); - } + private int binaryID; + private String path; + private String functionName; - public CallStackUnit(long addr, String symbol, int functionId, LogData log) { + /** + * Public constructor, got {@code binaryID}, {@code path}, + * {@code functionName} from {@link Global}. + * + * @param addr PC address of function start + * @param callerAddr PC address of caller instruction + * @param pid pid + * @param tid tid + * @param time time in microseconds + * @param functionID function id + */ + public CallStackUnit(long addr, long callerAddr, int pid, int tid, long time, int functionID) { this.address = addr; - this.functionStartAddress = addr; - this.time = log.getTime(); - this.pid = log.getPid(); - this.functionID = functionId; - this.functionName = CommonConstants.EMPTY; - makeCallstackData(symbol); - } - - /** using open trace **/ - public CallStackUnit(long addr, int pid, int functionId, int binaryID) { + this.callerAddress = callerAddr; + this.pid = pid; + this.tid = tid; + this.time = time; + this.functionID = functionID; + + this.binaryID = Global.getBinaryID(pid, time, addr); + if (functionID > 0) + this.functionName = Global.getFunctionName(functionID); + else + this.functionName = LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC; + this.path = Global.getLibraryName(binaryID); + } + + /** + * Public constructor. + * + * @param addr PC address of function start + * @param callerAddr PC address of caller instruction + * @param pid pid + * @param tid tid + * @param time time in microseconds + * @param functionID function id + * @param binaryID binary id + * @param functionName function name + * @param path absolute path to binary on target device + */ + public CallStackUnit(long addr, long callerAddr, int pid, int tid, long time, int functionID, + int binaryID, String functionName, String path) { this.address = addr; - this.functionStartAddress = addr; - this.time = -1; + this.callerAddress = callerAddr; this.pid = pid; - this.functionID = functionId; - this.functionName = Global.getFunctionName(functionId); + this.tid = tid; + this.time = time; + this.functionID = functionID; this.binaryID = binaryID; + this.functionName = functionName; + this.path = path; + } + + /** + * Public constructor for entries and exits in not profiled binaries. + */ + public CallStackUnit() { + this.functionName = LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC; + this.path = LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC; + } - BinaryInfo bInfo = Global.getProject().getDeviceStatusInfo().getBinaryInfo(binaryID); - this.path = bInfo.getTargetBinaryPath(); - } - - private void makeCallstackData(String symbol) { - // callstack symbol format : path(functionName - // ex. /usr/lib/libpthread.so(pthread_create - String[] splitPath = symbol.split("\\(", 2); //$NON-NLS-1$ - path = splitPath[0]; - if (!path.startsWith("/") && !path.contains(FunctionUsageProfiler.APPLICATION) - && !path.contains(FunctionUsageProfiler.DEPENDENT_LIB)) { - path = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_LIBRARY; - } - - BinaryInfo bInfo = Global.getProject().getDeviceStatusInfo().getBinaryInfo(path); - binaryID = bInfo.getID(); - - if (splitPath.length < 2) { - if (!splitPath[0].equals(FunctionUsageProfiler.APPLICATION) - && !splitPath[0].equals(FunctionUsageProfiler.DEPENDENT_LIB)) { - Logger.error("Invalid function name for calltrace unit\n"); - } - functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - } else { - String[] splitFunc = splitPath[1].split("\\+"); //$NON-NLS-1$ - if (splitFunc.length != 0) { - if (splitFunc[0].isEmpty()) { - functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - } else { - functionName = splitFunc[0]; - } - if (functionID == AnalyzerConstants.INVALID_ID) { - functionID = Global.getFunctionID(functionName); - } - } - } + /** + * Public constructor for units "Application" and "Dependent Libraries" + * + * @param symbol text to represent + */ + public CallStackUnit(String symbol) { + this.functionName = ""; + this.path = symbol; } public long getAddr() { return address; } - public long getFunctionStartAddr() { - return functionStartAddress; + public long getCallerAddress() { + return callerAddress; } public String getSymbol() { - return path + CommonConstants.OPEN_BRACKET + functionName; + return functionName.isEmpty() ? path : path + CommonConstants.OPEN_BRACKET + functionName; } public void setAddr(long addr) { address = addr; } - public void setFunctionStartAddr(long addr) { - functionStartAddress = addr; + public void setCallerAddress(long addr) { + callerAddress = addr; } + public String getFunctionName() { return functionName; } @@ -145,14 +144,6 @@ public class CallStackUnit { return functionID; } - public String getOffset() { - return offset; - } - - public String getEtc() { - return etc; - } - public String getPath() { return path; } @@ -176,4 +167,12 @@ public class CallStackUnit { public int getBinaryID() { return binaryID; } + + public int getTid() { + return tid; + } + + public void setTid(int tid) { + this.tid = tid; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnitDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnitDBTable.java deleted file mode 100644 index ad2a33e..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackUnitDBTable.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.info.callstack; - -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.IResultSet; -import org.tizen.dynamicanalyzer.util.Logger; - -public class CallStackUnitDBTable extends DBTable implements IResultSet { - private static final String TABLENAME="CALL_STACK_UNIT"; - - public enum COLUMN { - PID(0, DBConstants.DBCOLUMN_PID), - FUNCTION_ID(1, DBConstants.DBCOLUMN_FUNCTION_ID), - BINARY_ID(2, "BINARY_ID"), - PC_ADDRESS(3, "PC_ADDRESS"); - - 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 CallStackUnitDBTable() { - addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.FUNCTION_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.BINARY_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.PC_ADDRESS.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - } - - @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.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index))); - prep.setInt(COLUMN.FUNCTION_ID.index + 1, (Integer) (rowData.get(COLUMN.FUNCTION_ID.index))); - prep.setInt(COLUMN.BINARY_ID.index + 1, (Integer) (rowData.get(COLUMN.BINARY_ID.index))); - prep.setLong(COLUMN.PC_ADDRESS.index + 1, (Long) (rowData.get(COLUMN.PC_ADDRESS.index))); - } catch (SQLException e) { - Logger.exception(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Integer.valueOf(rs.getInt(1))); - row.add(Integer.valueOf(rs.getInt(2))); - row.add(Integer.valueOf(rs.getInt(3))); - row.add(Long.valueOf(rs.getLong(4))); - } catch (SQLException e) { - Logger.exception(e); - return null; - } - - return row; - } -} 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 83451eb..3ddf901 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,8 +27,10 @@ package org.tizen.dynamicanalyzer.ui.info.callstack; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; -import java.util.Map; import org.eclipse.nebula.widgets.grid.GridItem; import org.eclipse.swt.SWT; @@ -38,17 +40,15 @@ import org.eclipse.swt.widgets.Composite; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.common.DAState; import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.project.callstack.RuntimeCallstackManager; import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.ui.file.FilePage; import org.tizen.dynamicanalyzer.ui.opengl.GLPage; -import org.tizen.dynamicanalyzer.ui.range.RangePage; import org.tizen.dynamicanalyzer.ui.summary.SummaryPage; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceDataManager; import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.util.Logger; @@ -56,6 +56,16 @@ import org.tizen.dynamicanalyzer.utils.Formatter; import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; public class CallstackTable extends DATableComposite { + + /** + * List of view Id which selection data should not trigger table update. + */ + static final List forbiddenViewId = new ArrayList<>( + Arrays.asList(FilePage.chartViewID, GLPage.chartViewID, + GLPage.contextViewID, GLPage.contextHistoryID, GLPage.programViewID, + GLPage.statisticsViewID, GLPage.redundantViewID, GLPage.textureViewID, + SummaryPage.profilingViewID)); + public CallstackTable(Composite parent, int compStyle, int tableStyle) { super(parent, compStyle, tableStyle); @@ -64,7 +74,7 @@ public class CallstackTable extends DATableComposite { @Override public void widgetSelected(SelectionEvent e) { AnalyzerManager.getCurrentPage().updateView( - new DAViewData(TimelineTableView.tabID, null)); + new DAViewData(TimelineTableView.callstackViewID, null)); GridItem[] sels = table.getSelection(); if (sels.length <= 0) { return; @@ -90,14 +100,7 @@ public class CallstackTable extends DATableComposite { return; } String viewId = selData.getViewID(); - if (null == viewId || viewId.isEmpty() || viewId.equals(FilePage.chartViewID) - || viewId.equals(UIPage.profilingViewID) || viewId.equals(GLPage.chartViewID) - || viewId.equals(GLPage.contextViewID) || viewId.equals(GLPage.contextHistoryID) - || viewId.equals(GLPage.programViewID) || viewId.equals(GLPage.statisticsViewID) - || viewId.equals(GLPage.redundantViewID) || viewId.equals(GLPage.textureViewID) - || viewId.equals(UIPage.profilingViewID) - || viewId.equals(RangePage.profilingViewID) - || viewId.equals(SummaryPage.profilingViewID)) { + if (null == viewId || viewId.isEmpty() || forbiddenViewId.contains(viewId)) { return; } Object obj = selData.getData(); @@ -108,80 +111,38 @@ public class CallstackTable extends DATableComposite { } DATableDataFormat tableData = (DATableDataFormat) items[0].getData(); - long seqNum = -1; - int pid = -1; - long time = -1; - if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { - List failedData = tableData.getData(); - seqNum = (Long) failedData.get(0); - pid = (Integer) failedData.get(7); - time = (Long) failedData.get(1); - } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { - List leakData = tableData.getData(); - seqNum = (Long) leakData.get(0); - pid = (Integer) leakData.get(2); - time = (Long) leakData.get(4); - } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_CALLTRACE) { - List calltraceData = tableData.getData(); - seqNum = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.SEQUENCE_NUMBER.index); - pid = (Integer) calltraceData.get(FunctionEntryDBTable.COLUMN.PID.index); - time = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.START_TIME.index); - } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_INTERACTIVE) { - return; // TODO - } else { // in case table has LogData - LogData logData = tableData.getLogData(); - seqNum = logData.getSeq(); - pid = logData.getPid(); - time = logData.getTime(); - } - - RuntimeCallstackManager callstackManager = Global.getRuntimeCallstackManager(); - Map addrMap = callstackManager.getCallStackApiAddrByPidMap(pid); - if (null == addrMap) { + List callStack = getCallStack(tableData); + if (callStack.isEmpty()) { return; } - List addrs = null; - addrs = callstackManager.getCallstackAddrListFromSeq(seqNum); - if (null == addrs) { - return; - } - - 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)); + for (int i = 0; i < callStack.size(); i++) { + String hexAddr = Formatter.toHexString(Long.toString(callStack.get(i).getAddr())); + CallStackUnit api = callStack.get(i); - if (null == api) { + if (null == api || api.getPath() == null) { Logger.debug("callstackunit for addr : " + hexAddr + " not found"); return; } - String path = api.getPath(); - if (null == path) { - Logger.debug("callstackunit for addr : " + hexAddr + " not found"); - return; - } // TODO : make GridItem using filter property data GridItem gridItem = new GridItem(table, SWT.NONE); // setData block - { - long address = addrs.get(i); - DATableDataFormat callstackTableData = new DATableDataFormat(address); - // 99 means "table type callstack" - callstackTableData.setType(AnalyzerConstants.TYPE_TABLE_CALLSTACK); - callstackTableData.setObject(address); - gridItem.setData(callstackTableData); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, address); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_PID, pid); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_TIME, time); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_LIBNAME, path); - } - - String addrInput = (addrs.get(i) == 0) ? "" : hexAddr; //$NON-NLS-1$ + long address = api.getAddr(); + DATableDataFormat callstackTableData = new DATableDataFormat(address); + + callstackTableData.setType(AnalyzerConstants.TYPE_TABLE_CALLSTACK); + callstackTableData.setObject(address); + gridItem.setData(callstackTableData); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, address); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_PID, api.getPid()); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_TIME, api.getTime()); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_LIBNAME, path); + + String addrInput = (api.getAddr() == 0) ? "" : hexAddr; //$NON-NLS-1$ gridItem.setText(1, addrInput.toLowerCase()); String fName = api.getFunctionName(); @@ -193,6 +154,40 @@ public class CallstackTable extends DATableComposite { } + private List getCallStack(DATableDataFormat tableData) { + if (!DAState.isStartable()) + return Collections.emptyList(); + + int pid; + int tid = -1; + long time; + if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_FAILED) { + List failedData = tableData.getData(); + pid = (Integer) failedData.get(7); + time = (Long) failedData.get(1); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_LEAK) { + List leakData = tableData.getData(); + pid = (Integer) leakData.get(2); + time = (Long) leakData.get(4); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_CALLTRACE) { + List calltraceData = tableData.getData(); + pid = (Integer) calltraceData.get(FunctionEntryDBTable.COLUMN.PID.index); + time = (Long) calltraceData.get(FunctionEntryDBTable.COLUMN.START_TIME.index); + tid = (Integer) calltraceData.get(FunctionEntryDBTable.COLUMN.TID.index); + } else if (tableData.getType() == AnalyzerConstants.TYPE_TABLE_INTERACTIVE) { + return Collections.emptyList(); + } else { // in case table has LogData + LogData logData = tableData.getLogData(); + pid = logData.getPid(); + time = logData.getTime(); + } + if (tid == -1) { + tid = pid; + } + + return CallTraceDataManager.getInstance().getCallstackForTable(pid, tid, time); + } + @Override protected List makeTableInput() { return null; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java index 88929e2..31046ea 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallstackView.java @@ -47,10 +47,6 @@ public class CallstackView extends DAViewComposite { private boolean[] columnVisibility = { true, true, true }; Composite contents = null; - // this definition should be here for creation of instance (register db table) - @SuppressWarnings("unused") - private static CallStackInserter inserter = CallStackInserter.getInstance(); - public CallstackView(Composite parent, int style) { super(parent, style, false); this.setLayout(new FillLayout()); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/screenshot/ScreenShotDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/screenshot/ScreenShotDBTable.java index 815e5db..802c2f5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/screenshot/ScreenShotDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/screenshot/ScreenShotDBTable.java @@ -61,7 +61,7 @@ public class ScreenShotDBTable extends DBTable { addColumn(new DBColumn(CAPTURE_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(IMAGE_FILE_PATH, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR, MAX_IMAGEPATH_LEN)); addColumn(new DBColumn(IMAGE_ORIENTATION, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(COLUMN.CAPTURE_TIME.ordinal()); + addIndex(COLUMN.CAPTURE_TIME.ordinal()); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/InteractivePage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/InteractivePage.java deleted file mode 100644 index 6e4d549..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/InteractivePage.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; -import org.tizen.dynamicanalyzer.ui.interactive.chart.InteractiveChartView; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.table.InteractiveTableView; -import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceView; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; -import org.tizen.dynamicanalyzer.widgets.da.view.DAContainerComposite; - -public class InteractivePage extends DAContainerComposite { - public static final String pageID = InteractivePage.class.getName(); - public static final String chartViewID = InteractiveChartView.class.getName(); - public static final String listViewID = InteractiveTableView.class.getName(); - - SashForm baseForm; - SashForm leftForm; - SashForm rightForm; - - public InteractivePage(Composite parent, int style) { - super(parent, style); - setTitle(AnalyzerLabels.COOLBAR_AREA_INTERACTIVE); - this.setBackground(ColorResources.CONFIGURATION_TABLE_COVER_BACKGROUND_COLOR); - this.setLayout(new FillLayout()); - - baseForm = new SashForm(this, SWT.HORIZONTAL); - baseForm.setLayout(new FillLayout()); - baseForm.setForeground(ColorResources.TAB_SELECTED_COLOR_START); - ((FillLayout) getLayout()).marginHeight = 15; - ((FillLayout) getLayout()).marginWidth = 5; - - leftForm = new SashForm(baseForm, SWT.VERTICAL); - InteractiveChartView chartView = new InteractiveChartView(leftForm, SWT.NONE); - addView(chartView); - InteractiveTableView tableView = new InteractiveTableView(leftForm, SWT.NONE); - addView(tableView); - - leftForm.setWeights(new int[] { 60, 40 }); - - rightForm = new SashForm(baseForm, SWT.VERTICAL); - - CallTraceView apiListView = new CallTraceView(rightForm, SWT.NONE); - addView(apiListView); - - TimelineTableView tabView = new TimelineTableView(rightForm, - SWT.NONE); -// tabView.setObservingViews(TimelineTableView.screenshotViewID, -// new String[] { InteractivePage.chartViewID }); -// tabView.setObservingViews(TimelineTableView.screenshotViewID, -// new String[] { InteractivePage.listViewID }); - addView(tabView); - - rightForm.setWeights(new int[] { 50, 50 }); - baseForm.setWeights(new int[] { 75, 25 }); - - baseForm.setSashWidth(SASH_WIDTH); - leftForm.setSashWidth(SASH_WIDTH); - rightForm.setSashWidth(SASH_WIDTH); - - DataManagerRegistry.registerPageDataManager(InteractiveDataManager.getInstance()); - } - - @Override - protected void onResized(int width, int height) { - int wrate = (int) (TimelineTableView.DEFAULT_WIDTH * 100 / width); - int hrate = (int) (TimelineTableView.DEFAULT_TABLE_VIEW_HEIGHT * 100 / height); - wrate = (wrate > 100) ? 100 : wrate; - hrate = (hrate > 100) ? 100 : hrate; - - if ((wrate > (100 - 37)) || hrate > 100) { - return; - } - - baseForm.setWeights(new int[] { 100 - wrate, wrate }); - rightForm.setWeights(new int[] { 100 - hrate, hrate }); - } - - @Override - public void clear() { - super.clear(); - InteractiveDataManager.getInstance().clear(); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChart.java deleted file mode 100644 index 1147966..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChart.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.chart; - -import java.util.List; - -import org.tizen.dynamicanalyzer.nl.InteractivePageLabels; -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.interactive.data.InteractiveUIData; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.utils.Formatter; -import org.tizen.dynamicanalyzer.widgets.chart.DAChart; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot; -import org.tizen.dynamicanalyzer.widgets.chart.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 InteractiveChart { - private InteractiveInfo interactiveInfo; - private DAChart chartWidget; - private DAPopupMenu popupMenu; - DAChartSeries beforeCheckPointSeries; - DAChartSeries afterCheckPointSeries; - - public InteractiveChart(InteractiveInfo interactiveInfo) { - this.interactiveInfo = interactiveInfo; - if (interactiveInfo.hasCheckLocation(InteractiveInfo.CHECK_BEFORE_LINE)) { - beforeCheckPointSeries = new DAChartSeries(interactiveInfo.getDescription() + " Before", - DAChartSeries.SERIES_STYLE_BAR, ColorResources.SERIES_COLOR_INTERACTIVE_BEFORE); - } - if (interactiveInfo.hasCheckLocation(InteractiveInfo.CHECK_AFTER_LINE)) { - afterCheckPointSeries = new DAChartSeries(interactiveInfo.getDescription() + " After", - DAChartSeries.SERIES_STYLE_BAR, ColorResources.SERIES_COLOR_INTERACTIVE_AFTER); - } - } - - public DAChartBoardItem createBoardItem(final DAChartBoard chartBoard) { - DAChartBoardItem item = new DAChartBoardItem(chartBoard, InteractivePageLabels.CHART_TITLE); - item.setData(interactiveInfo); - chartWidget = item.getChart(); - - setChartStyle(); - popupMenu = new DAPopupMenu(chartWidget); - initPopupMenu(chartBoard, popupMenu); - - if (beforeCheckPointSeries != null) { - chartWidget.addSeries(beforeCheckPointSeries); - } - if (afterCheckPointSeries != null) { - chartWidget.addSeries(afterCheckPointSeries); - } - return item; - } - - public InteractiveInfo getInteractiveInfo() { - return interactiveInfo; - } - - public DAChart getChartWidget() { - return chartWidget; - } - - private void initPopupMenu(DAChartBoard chartBoard, DAPopupMenu popupMenu) { - popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu); - startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START); - startItem.addListener(new PopupStartMenuItemClickListener(startItem, chartBoard)); - - DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu); - endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END); - endItem.addListener(new PopupEndMenuItemClickListener(endItem, chartBoard)); - - DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu); - fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION); - fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(fromSelectionItem, chartBoard)); - - 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()); - } - - private void setChartStyle() { - DAChartPlot plot = chartWidget.getPlot(); - if (null == plot) { - return; - } - plot.setBackgroundImage(ImageResources.BG_GRADIENT); - plot.setAutoHeightRange(AutoRangeType.SEMI_AUTO); - DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1); - tooltip.setFont(FontResources.CHART_TOOLTIP_FONT); - plot.setTooltip(tooltip); - plot.setAxisFont(FontResources.CHART_AXIS_FONT); - } - - public DAPopupMenu getPopupMenu() { - return popupMenu; - } - - public void clear() { - List seriesList = chartWidget.getSeriesList(); - for (DAChartSeries series : seriesList) { - series.clear(); - } - } - - public void inputChartSeries(List parsedBeforeDataList, - List parsedAfterDataList) { - if (beforeCheckPointSeries != null) { - beforeCheckPointSeries.clear(); - for (int i = 0; i < parsedBeforeDataList.size(); i++) { - InteractiveUIData valueData = parsedBeforeDataList.get(i); - double chartTime = Formatter.longTimeToDoubleTime(valueData.getTime()); - String tooltipText = valueData.getChartTooltipString(); - beforeCheckPointSeries.addSeriesItem(new DAChartSeriesItem(chartTime, 0, tooltipText)); - } - } - if (afterCheckPointSeries != null) { - afterCheckPointSeries.clear(); - for (int i = 0; i < parsedAfterDataList.size(); i++) { - InteractiveUIData valueData = parsedAfterDataList.get(i); - double chartTime = Formatter.longTimeToDoubleTime(valueData.getTime()); - String tooltipText = valueData.getChartTooltipString(); - afterCheckPointSeries.addSeriesItem(new DAChartSeriesItem(chartTime, 0, tooltipText)); - } - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartMouseEventListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartMouseEventListener.java deleted file mode 100644 index 0d98432..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartMouseEventListener.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.chart; - -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseMoveListener; -import org.eclipse.swt.widgets.Canvas; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -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.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotMarker; -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; -import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; - -public class InteractiveChartMouseEventListener extends MouseAdapter implements MouseMoveListener { - private RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - private DAPopupMenu menu; - private DATimeline timeline; - private DAChartBoard chartBoard; - private double baseTime = TimelineConstants.NOT_INITED; - - private static final int SELECTION_MARKER_INDEX = 0; - - public InteractiveChartMouseEventListener(DAPopupMenu menu, DATimeline timeline, DAChartBoard chartBoard) { - this.menu = menu; - this.timeline = timeline; - this.chartBoard = chartBoard; - } - - @Override - public void mouseDown(MouseEvent e) { - DAChart chart = (DAChart) e.widget; - DAChartPlot plot = chart.getPlot(); - DAChartPlotMarker marker = plot.getMarkers().get(SELECTION_MARKER_INDEX); - if (!(marker instanceof DAChartPlotIntervalMarker)) { - return; - } - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) marker; - - double eventTime = plot.getXFromXPixel(e.x); - - if (e.button == 3) { // mouse right click - List itemList = menu.getItems(); - DAPopupMenuItem startItem = itemList.get(0); - DAPopupMenuItem endItem = itemList.get(1); - DAPopupMenuItem fromSelectionItem = itemList.get(2); - DAPopupMenuItem analysisItem = itemList.get(3); - DAPopupMenuItem clearItem = itemList.get(4); - - if (eventTime * TimelineConstants.MEGA_DOUBLE <= Toolbar.INSTANCE.getTime()) { - startItem.setEnabled(true); - endItem.setEnabled(true); - analysisItem.setEnabled(rangeDataManager.isAnalyzable()); - clearItem.setEnabled(rangeDataManager.isBeingAnalyzed()); - - startItem.setDoubleData(eventTime); - endItem.setDoubleData(eventTime); - } else { - startItem.setEnabled(false); - endItem.setEnabled(false); - analysisItem.setEnabled(rangeDataManager.isAnalyzable()); - clearItem.setEnabled(rangeDataManager.isBeingAnalyzed()); - } - - if (intervalMarker.getStartVal() != intervalMarker.getEndVal()) { - fromSelectionItem.setEnabled(true); - } else { - fromSelectionItem.setEnabled(false); - } - return; - } - - AnalyzerUtil.setLatestTraceMode(InteractivePage.pageID, false); - - boolean bShift = false; - if ((e.stateMask & SWT.SHIFT) != 0) { - bShift = true; - } - - if (bShift == true && intervalMarker.getStartVal() != -1) { - if (baseTime > eventTime) { - intervalMarker.setInterval(eventTime, baseTime); - } else { - intervalMarker.setInterval(baseTime, eventTime); - } - } else { - intervalMarker.setInterval(eventTime, eventTime); - baseTime = eventTime; - } - - chart.redraw(); - } - - @Override - public void mouseUp(MouseEvent e) { - if (e.button == 3) { // mouse right click - return; - } - - DAChart chart = (DAChart) e.widget; - DAChartPlot plot = chart.getPlot(); - DAChartPlotMarker marker = plot.getMarkers().get(SELECTION_MARKER_INDEX); - if (!(marker instanceof DAChartPlotIntervalMarker)) { - return; - } - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) marker; - - double eventTime = plot.getXFromXPixel(e.x); - double markerStartTime; - double markerEndTime; - - if (intervalMarker.getStartVal() >= eventTime) { - markerStartTime = eventTime; - markerEndTime = intervalMarker.getEndVal(); - } else { - markerStartTime = intervalMarker.getStartVal(); - markerEndTime = eventTime; - } - - double toolbarTime = Toolbar.INSTANCE.getTime() / TimelineConstants.MEGA_DOUBLE; - - if (markerStartTime < 0) { - markerStartTime = 0; - } else if (markerStartTime > toolbarTime) { - markerStartTime = toolbarTime; - } - - if (markerEndTime > toolbarTime) { - markerEndTime = toolbarTime; - } else if (markerEndTime < 0) { - markerEndTime = 0; - } - - if (markerEndTime <= plot.getVisibleEndX()) { - intervalMarker.setInterval(markerStartTime, markerEndTime); - } else { - intervalMarker.setInterval(markerStartTime, plot.getVisibleEndX()); - } - - sendSelectionTimes(intervalMarker.getStartVal(), intervalMarker.getEndVal()); - } - - @Override - public void mouseMove(MouseEvent e) { - DAChart chart = (DAChart) e.widget; - DAChartPlot plot = chart.getPlot(); - DAChartPlotMarker marker = plot.getMarkers().get(SELECTION_MARKER_INDEX); - if (!(marker instanceof DAChartPlotIntervalMarker)) { - Logger.debug("mouseMove !IntervalMarker"); - return; - } - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) marker; - DAChartPlotTooltip tooltip; - - if ((e.stateMask & SWT.BUTTON1) != 0) { - double eventTime = plot.getXFromXPixel(e.x); - - if (baseTime > eventTime) { - intervalMarker.setInterval(eventTime, baseTime); - } else { - intervalMarker.setInterval(baseTime, eventTime); - } - } - tooltip = plot.getTooltip(); - if (null == tooltip) { - return; - } - - double oldYPosRatio = tooltip.getYPosRatio(); - double newYPosRatio = (double) e.y / ((Canvas) e.widget).getSize().y; - - if (Double.compare(oldYPosRatio, newYPosRatio) != 0) { - if (newYPosRatio < 0) { - newYPosRatio = 0.01; - } else if (newYPosRatio >= 1) { - newYPosRatio = 0.99; - } - - tooltip.setYPosRatio(newYPosRatio); - } - - double oldStartVal = tooltip.getStartVal(); - double newStartVal = getTooltipStartX(plot, chart.getSeriesList(), e.x, newYPosRatio); - - if (oldStartVal != newStartVal) { - tooltip.setStartVal(newStartVal); - } - - timeline.setDetailTime(plot.getXFromXPixel(e.x)); - timeline.setDetailTimePosition(e.x); - timeline.setDrawDetailTime(true); - timeline.redraw(); - } - - private void sendSelectionTimes(double start, double end) { - long startTime = (long) (start * TimelineConstants.MEGA_DOUBLE); - long endTime = (long) (end * TimelineConstants.MEGA_DOUBLE); - if (endTime < startTime) { // user mouse drag right->left on chart - long temp = startTime; - startTime = endTime; - endTime = temp; - } - if (startTime < 0) { - startTime = 0; - } - DAChartBoardItem selectedItem = chartBoard.getSelectItem(); - Object data = selectedItem.getData(); - AnalyzerManager.getCurrentPage().updateView( - new DASelectionData(InteractivePage.chartViewID, startTime, endTime, data, null)); - } - - private double getTooltipStartX(DAChartPlot plot, List seriesList, int x, double yPosRatio) { - double ret = -1; - for (int i = 0; i < seriesList.size(); i++) { - DAChartSeries series = seriesList.get(i); - int index = series.getPrevIndexByXvalue(plot.getXFromXPixel(x)); - if (-1 == index) { - continue; - } - double startVal = series.getSeriesItemList().get(index).getX(); - if (ret < startVal) { - ret = startVal; - } - } - return ret; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartRenderer.java deleted file mode 100644 index 5189a00..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartRenderer.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.chart; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Rectangle; -import org.tizen.dynamicanalyzer.nl.InteractivePageLabels; -import org.tizen.dynamicanalyzer.resources.ImageResources; -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; -import org.tizen.dynamicanalyzer.widgets.helper.FontResources; - -public class InteractiveChartRenderer extends DAChartRenderer { - private final int SERIES_DISTANCE_MARGIN = 20; - - @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); - } - } - - private void drawSeries(GC gc, DAChartSeries series, int seriesIndex) { - int seriesSize = seriesList.size(); - Rectangle rect = new Rectangle(r.x, r.y + r.height * seriesIndex / seriesSize, r.width, r.height / seriesSize); - - if (seriesIndex != 0) { - gc.setForeground(ColorResources.CHART_SEPERATE_LINE); - gc.drawLine(rect.x, r.height * seriesIndex / seriesSize, rect.width, r.height * seriesIndex / seriesSize); - } - - Font oriFont = gc.getFont(); - gc.setForeground(ColorResources.CHART_INFO); - gc.setFont(FontResources.CHART_INFO_FONT); - gc.drawImage(ImageResources.CHART_INFO, rect.x + 3, rect.y + rect.height / 2 - gc.stringExtent(series.getName()).y / 2); - gc.drawText(series.getName(), rect.x + 18, - rect.y + rect.height / 2 - gc.stringExtent(series.getName()).y / 2, true); - - gc.setFont(oriFont); - - List seriesItems = series.getSeriesItemList(); - if (seriesItems == null) { - return; - } - int seriesItemSize = seriesItems.size(); - if (seriesItemSize < 1) { - return; - } - - int index = series.getPrevIndexByXvalue(plot.getVisibleStartX()); - if (index < 0) { - index = 0; - } - - gc.setLineStyle(SWT.LINE_SOLID); - gc.setAntialias(SWT.ON); - for (int i = index; i < seriesItemSize; i++) { - double currentX = seriesItems.get(i).getX(); - int pixcelStartX = plot.getXPixelFromX(currentX, r); - int pixcelStartY = rect.y + 4; - - gc.setBackground(series.getColor()); - gc.fillRectangle(pixcelStartX, pixcelStartY, 2, rect.height - 4); - if (currentX > plot.getVisibleEndX()) { - return; - } - } - } - - @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; - int textHeightMax = 0; - double realXVal = tooltip.getStartVal(); - int tooltipSize = 0; - for (int i = 0; i < seriesList.size(); i++) { - DAChartSeries series = seriesList.get(i); - tooltipSize++; - - int index = series.getPrevIndexByXvalue(realXVal); - String text = ""; - String time = ""; - Color color; - if (index >= 0) { - double xVal = series.getSeriesItemList().get(index).getX(); - - time += toTimeFormat(xVal); - - if (series.isSummarizeTooltip() && 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.getXPixelFromX(xVal), 0, plot.getXPixelFromX(xVal), r.height); - gc.setLineStyle(SWT.LINE_CUSTOM); - - // event color - color = series.getSeriesItemList().get(index).getColor(); - } else { // Case : There is no series item to draw. - text = InteractivePageLabels.INTERACTIVE_CHART_INVALID_CHECK_LOCATION; - color = null; - } - - tooltipTexts.add(text); - tooltipTimes.add(time); - tooltipColor.add(color); - - int textWidth = gc.textExtent(text).x + DAChartPlotTooltip.TOOLTIP_TIME_MARGIN + gc.textExtent(time).x; - int textHeight = gc.textExtent(text).y; - if (textWidthMax < textWidth) { - textWidthMax = textWidth; - } - if (textHeightMax < textHeight) { - textHeightMax = textHeight; - } - } - - int preTextWidthMargin = DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH - + DAChartPlotTooltip.TOOLTIP_MARGIN; - int startX = getTooltipStartX(realXVal, textWidthMax + preTextWidthMargin, DAChartPlotTooltip.TOOLTIP_MARGIN); - - int totalHeight = tooltipSize * textHeightMax + DAChartPlotTooltip.TOOLTIP_MARGIN - + DAChartPlotTooltip.TOOLTIP_MARGIN + (tooltipSize - 1) * SERIES_DISTANCE_MARGIN; - - int startY = (r.y + r.height / 2) - (totalHeight / 2); - - gc.setAlpha(180); - 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()); - - String timeStr; - tooltipSize = -1; - for (int i = 0; i < seriesList.size(); i++) { - DAChartSeries series = seriesList.get(i); - if (series.isDisableTooltip()) { - continue; - } else { - tooltipSize++; - } - - int yPosition = r.y + r.height * i / seriesList.size() + r.height / seriesList.size() / 2 - textHeightMax - / 2; - - Color col = tooltipColor.get(i); - if (col == null) { - gc.setBackground(series.getColor()); - } else { - gc.setBackground(col); - } - gc.fillRectangle(startX + DAChartPlotTooltip.TOOLTIP_MARGIN, yPosition + textHeightMax / 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(i), startX + DAChartPlotTooltip.TOOLTIP_MARGIN - + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + DAChartPlotTooltip.TOOLTIP_MARGIN, yPosition, - SWT.DRAW_DELIMITER | SWT.DRAW_TRANSPARENT); - - gc.setForeground(tooltip.getTimeColor()); - timeStr = tooltipTimes.get(i); - gc.drawText(tooltipTimes.get(i), startX + DAChartPlotTooltip.TOOLTIP_MARGIN - + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + DAChartPlotTooltip.TOOLTIP_MARGIN + textWidthMax - - DAChartPlotTooltip.TOOLTIP_MARGIN - gc.textExtent(timeStr).x, yPosition, SWT.DRAW_DELIMITER - | SWT.DRAW_TRANSPARENT); - } - } - - @Override - protected int getTooltipStartX(double startVal, int width, int margin) { - int ret = plot.getXPixelFromX(startVal); - if (ret + width > r.x + r.width) { - ret = ret - width - margin; - if (ret < 0) { - ret = 50; - } - } else if (ret < r.x) { - ret = r.x + margin; - } else { - ret += margin; - } - - return ret; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartView.java deleted file mode 100644 index 25ca9cd..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveChartView.java +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.chart; - -import java.sql.ResultSet; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.eclipse.swt.custom.StackLayout; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.ScrollBar; -import org.eclipse.swt.widgets.Shell; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.nl.InteractivePageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; -import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; -import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; -import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; -import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveUIData; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveValue; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.chart.TimelineChart; -import org.tizen.dynamicanalyzer.ui.timeline.common.AddChartMenuComposite; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.widgets.DADefaultChartBoard; -import org.tizen.dynamicanalyzer.util.WorkbenchUtil; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.utils.Formatter; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; -import org.tizen.dynamicanalyzer.widgets.chart.DAChart; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; -import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; - -public class InteractiveChartView extends DAViewComposite { - private DAChartBoard chartBoard; - - private final RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - private final LifecycleLogParser lifecycleLogParser = LifecycleLogParser.getInstance(); - private List chartList = new ArrayList(); - - public InteractiveChartView(Composite parent, int style) { - super(parent, style, false); - this.setLayout(new FillLayout()); - - Composite contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - - chartBoard = new DADefaultChartBoard(contents, InteractivePageLabels.INTERACTIVE_CHART); - chartBoard.setItemHeight(65); - chartBoard.setNameFont(FontResources.CHART_NAME_FONT); - - ScrollBar hScrollBar = chartBoard.getHScrollBar(); - hScrollBar.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (chartBoard.isMaximumScrolled()) { - AnalyzerUtil.setLatestTraceMode(InteractivePage.pageID, true); - } else { - AnalyzerUtil.setLatestTraceMode(InteractivePage.pageID, false); - } - } - }); - - StackLayout stackLayout = new StackLayout(); - stackLayout.topControl = chartBoard; - contents.setLayout(stackLayout); - - initializeCharts(); - - AddChartMenuComposite addChartComposite = new AddChartMenuComposite(chartBoard.getTitleComp()); - addChartComposite.setAddItemListButtonListener(new DACustomButtonClickEventListener() { - @Override - public void handleClickEvent(DACustomButton button) { - Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell(); - InteractiveEditItemsDialog dialog = new InteractiveEditItemsDialog(shell, InteractiveChartView.this); - if (dialog.isRunningDialog() == false) { - dialog.open(); - } - } - }); - addChartComposite.createAddMenuComp(); - - setBackground(ColorResources.VIEW_BG_COLOR); - - final DATimeline timeline = chartBoard.getTimeline(); - - timeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT); - timeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT); - - lifecycleLogParser.registerLifecycleBar(chartBoard.getLifecycleBar()); - lifecycleLogParser.registerTimeline(timeline); - - timeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT); - timeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT); - - InteractiveDataManager.getInstance().setChartView(this); - } - - private void initializeCharts() { - initIntervalMarkers(chartBoard); - - List timelineChartList = InteractiveDataManager.getInstance().getTimelineChartList(); - for (int i = 0; i < timelineChartList.size(); i++) { - TimelineChart timelineChart = timelineChartList.get(i); - - DAChartBoardItem item = timelineChart.createBoardItem(chartBoard); - item.setHeight(DAChartBoard.DEFAULT_ITEM_HEIGHT); - DAChart chartWidget = item.getChart(); - - chartWidget.getPlot().setAxisRangeX(chartBoard.getVisibleStartTime(), chartBoard.getVisibleEndTime()); - - chartWidget.getPlot().setMarkers(chartBoard.getMarkers()); - InteractiveChartMouseEventListener chartMouseEventListener = new InteractiveChartMouseEventListener( - timelineChart.getPopupMenu(), chartBoard.getTimeline(), chartBoard); - chartWidget.addMouseListener(chartMouseEventListener); - chartWidget.addMouseMoveListener(chartMouseEventListener); - chartWidget.addMouseTrackListener(new TimelineChartMouseTrackAdapter(chartBoard.getTimeline())); - - ///Add KeyListener 0215 - TimeLineChartKeyListener timelineKeyListener = new TimeLineChartKeyListener(chartBoard); - chartWidget.addKeyListener(timelineKeyListener); - - List showChartList = InteractiveDataManager.getInstance().getShowTimelineChartList(); - chartBoard.hideItem(i); - for (int ii = 0; ii < showChartList.size(); ii++) { - if (showChartList.get(ii).getChartType() == timelineChart.getChartType()) { - chartBoard.showItem(i); - } - } - } - - /* - * Interactive Chart - */ - List interactiveList = InteractiveDataManager.getInstance().getVariableInfoList(); - for (int i = 0; i < interactiveList.size(); i++) { - InteractiveChart chart = new InteractiveChart(interactiveList.get(i)); - chartList.add(chart); - DAChartBoardItem boardItem = chart.createBoardItem(chartBoard); - DAChart chartWidget = boardItem.getChart(); - chartWidget.setChartRenderer(new InteractiveChartRenderer()); - - String chartInfo = interactiveList.get(i).getDescription(); - chartWidget.setInformation(chartInfo); - - chartWidget.getPlot().setMarkers(chartBoard.getMarkers()); - InteractiveChartMouseEventListener chartMouseEventListener = new InteractiveChartMouseEventListener( - chart.getPopupMenu(), chartBoard.getTimeline(), chartBoard); - chartWidget.addMouseListener(chartMouseEventListener); - chartWidget.addMouseMoveListener(chartMouseEventListener); - chartWidget.addMouseTrackListener(new TimelineChartMouseTrackAdapter(chartBoard.getTimeline())); - } - } - - 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.SELECTION_LINE); - rangeMarker.setAlpha((int) (255 * 0.25)); - board.addIntervalMarker(rangeMarker); - } - - @Override - public void updateView() { - InteractiveDataManager.getInstance().makeChartSeries( - AnalyzerUtil.translateSecToMicroSec(chartBoard.getVisibleStartTime()), - AnalyzerUtil.translateSecToMicroSec(chartBoard.getVisibleEndTime())); - - long time = Toolbar.INSTANCE.getTime(); - if (AnalyzerUtil.isLatestTraceMode(InteractivePage.pageID)) { - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.SELECTION_MARKER_INDEX); - intervalMarker.setInterval(time / TimelineConstants.MEGA_DOUBLE, time / TimelineConstants.MEGA_DOUBLE); - chartBoard.updateVisibleStartTime(); - chartBoard.setTotalEndTime(time, true); - } else { - chartBoard.setTotalEndTime(time, false); - } - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) chartBoard.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) { - DASelectionData selData = (DASelectionData) data; - - long start = selData.getStartTime(); - long end = selData.getEndTime(); - Double startTime = Formatter.longTimeToDoubleTime(start); - Double endTime = Formatter.longTimeToDoubleTime(end); - double middleTime = (startTime + endTime) / 2.0; - if (startTime.equals(endTime)) { - middleTime = startTime; - } - - chartBoard.setVisibleMiddleTime(middleTime); - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.SELECTION_MARKER_INDEX); - intervalMarker.setInterval(startTime, endTime); - - InteractiveDataManager.getInstance().makeChartSeries( - AnalyzerUtil.translateSecToMicroSec(chartBoard.getVisibleStartTime()), - AnalyzerUtil.translateSecToMicroSec(chartBoard.getVisibleEndTime())); - } - } - - @Override - public void clear() { - chartBoard.contentsClear(); - chartBoard.clear(); - chartList.clear(); - for (TimelineChart timelineChart : InteractiveDataManager.getInstance().getTimelineChartList()) { - timelineChart.clear(); - } - initializeCharts(); - } - - @Override - public Control getControl() { - return chartBoard; - } - - public void setRangeMarker(double starttime, double endtime) { - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - starttime, endtime); - } - - public void inputChartSeries(ResultSet rs) { - // Key : variableID - Map> valueInfoMap = InteractiveDataManager.getInstance().makeInteractiveValueMap( - rs); - if (valueInfoMap == null) { - return; - } - /* - * Make Chart series - */ - for (int i = 0; i < chartList.size(); i++) { - InteractiveInfo rootInteractiveInfo = chartList.get(i).getInteractiveInfo(); - - List beforeUIDataList = new ArrayList(); - List afterUIDataList = new ArrayList(); - boolean result = InteractiveDataManager.getInstance().makeInteractiveUIData(rootInteractiveInfo, - valueInfoMap, beforeUIDataList, afterUIDataList); - if (result) { - chartList.get(i).inputChartSeries(beforeUIDataList, afterUIDataList); - } else { - /* - * Nothing to draw Chart. There is no series in visible range of Chart. - */ - } - } - } - - /* - * User can add Timeline chart on Chart Edit dialog and rearrange added - * charts. but only Timeline charts can be rearranged. Value charts is not - * rearranged. - */ - public void reArrangeChart(List order, List showInfo) { - if (order != null) { - int lastIndex = order.size(); - for (int i = 0; i < chartList.size(); i++) { - order.add(lastIndex++); - } - chartBoard.reArrangeItem(order.toArray(new Integer[order.size()])); - } - for (int i = 0; i < showInfo.size(); i++) { - if (showInfo.get(i)) { - chartBoard.showItem(i); - } else { - chartBoard.hideItem(i); - } - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveEditItemsDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveEditItemsDialog.java deleted file mode 100644 index dd62370..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/chart/InteractiveEditItemsDialog.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.chart; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.TableItem; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.chart.TimelineChart; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineEditItemsDialog; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; - -public class InteractiveEditItemsDialog extends TimelineEditItemsDialog { - private InteractiveChartView chartView; - - public InteractiveEditItemsDialog(Shell parent, InteractiveChartView chartView_) { - super(parent); - this.chartView = chartView_; - this.chartList = InteractiveDataManager.getInstance().getTimelineChartList(); - setOkButtonListener(okButtonListener); - } - - @Override - protected Set getSelectedChartSet() { - Set chartNameList = new HashSet(); - List selectedChartList = InteractiveDataManager.getInstance().getShowTimelineChartList(); - for (int i = 0; i < selectedChartList.size(); i++) { - chartNameList.add(selectedChartList.get(i).getChartName()); - } - return chartNameList; - } - - private DACustomButtonClickEventListener okButtonListener = new DACustomButtonClickEventListener() { - @Override - public void handleClickEvent(DACustomButton button) { - TableItem[] tableitems = chartTableViewer.getTable().getItems(); - ArrayList order = new ArrayList(); - ArrayList showInfo = new ArrayList(); - List selectedChartList = new ArrayList(); - - List tempChartList = new ArrayList(chartList); - chartList.clear(); - for (TableItem item : tableitems) { // Rearrange chart order - TableItemData itemData = (TableItemData) item.getData(); - TimelineChart chart = findChart(tempChartList, itemData.chartType); - chartList.add(chart); - - if (itemData.isEnabled) { - selectedChartList.add(chart); - showInfo.add(true); - } else { - showInfo.add(false); - } - - order.add(itemData.index); - } - - InteractiveDataManager.getInstance().setShowTimelineChartList(selectedChartList); - chartView.reArrangeChart(order, showInfo); - shell.dispose(); - RunningDialog = false; - } - }; - - private TimelineChart findChart(List chartList, int chartType) { - if (chartList != null) { - for (int i = 0; i < chartList.size(); i++) { - if (chartType == chartList.get(i).getChartType()) { - return chartList.get(i); - } - } - } - return null; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveDataManager.java deleted file mode 100644 index 2f9bec0..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveDataManager.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.data; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.swt.widgets.Display; -import org.tizen.dynamicanalyzer.communicator.UnsupportedProtocolException; -import org.tizen.dynamicanalyzer.database.DBInserter; -import org.tizen.dynamicanalyzer.database.SqlConnectionManager; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -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.FunctionBodyInstrumentData; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage; -import org.tizen.dynamicanalyzer.ui.interactive.chart.InteractiveChartView; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveParser; -import org.tizen.dynamicanalyzer.ui.interactive.model.VAR_TYPE; -import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.timeline.chart.CPUChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.CPUCoreChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.CPUFrequencyChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.DeviceChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.DiskIOChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.EnergyChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.HeapChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.NetworkIOChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.ProcessMemoryChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.ScreenshotChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.SystemMemoryChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.TimelineChart; -import org.tizen.dynamicanalyzer.ui.timeline.chart.UIEventChart; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineDataManager; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.util.Logger; -import org.tizen.dynamicanalyzer.util.WorkbenchUtil; -import org.tizen.dynamicanalyzer.widgets.chartBoard.IDAChartSeriesMaker; - -public class InteractiveDataManager extends PageDataManager implements IDAChartSeriesMaker { - private static InteractiveDataManager instance = null; - - private InteractiveVariableDBTable variableDBTable = null; - private InteractiveValueDBTable valueDBTable = null; - private DBInserter valueDBInserter = null; - // Only contain target variables - private List variableInfoList = new ArrayList(); - private InteractiveChartView chartView; - private List timelineChartList = new ArrayList(); - private List showTimelineChartList = new ArrayList(); - - private InteractiveDataManager() { - variableDBTable = new InteractiveVariableDBTable(); - valueDBTable = new InteractiveValueDBTable(); - valueDBInserter = makeInserter(valueDBTable); - - timelineChartList.add(new CPUChart(InteractivePage.pageID)); - timelineChartList.add(new CPUCoreChart(InteractivePage.pageID)); - timelineChartList.add(new CPUFrequencyChart(InteractivePage.pageID)); - timelineChartList.add(new HeapChart(InteractivePage.pageID)); - timelineChartList.add(new ProcessMemoryChart(InteractivePage.pageID)); - timelineChartList.add(new SystemMemoryChart(InteractivePage.pageID)); - timelineChartList.add(new ScreenshotChart(InteractivePage.pageID)); - timelineChartList.add(new UIEventChart(InteractivePage.pageID)); - timelineChartList.add(new DiskIOChart(InteractivePage.pageID)); - timelineChartList.add(new NetworkIOChart(InteractivePage.pageID)); - timelineChartList.add(new DeviceChart(InteractivePage.pageID)); - timelineChartList.add(new EnergyChart(InteractivePage.pageID)); - } - - public synchronized static InteractiveDataManager getInstance() { - if (null == instance) { - instance = new InteractiveDataManager(); - } - return instance; - } - - public List getVariableInfoList() { - return variableInfoList; - } - - public void setChartView(InteractiveChartView chartView) { - this.chartView = chartView; - } - - public List getTimelineChartList() { - return timelineChartList; - } - - public List getShowTimelineChartList() { - return showTimelineChartList; - } - - public void setShowTimelineChartList(List chartList) { - showTimelineChartList.clear(); - showTimelineChartList.addAll(chartList); - } - - public void addVariableInfo(InteractiveInfo info) { - variableInfoList.add(info); - } - - public static ResultSet getValueDataFromDB(long start, long end) { - String query = "SELECT SEQUENCE_NUMBER, SAMPLING_TIME, VARIABLE_ID, VALUE_SIZE, VALUE FROM CHECKPOINT_VALUE " - + "WHERE SAMPLING_TIME BETWEEN " + start + " AND " + end + " ORDER BY SAMPLING_TIME"; - ResultSet rs = SqlConnectionManager.executeQueryRS(query); - - return rs; - } - - public ResultSet getValueDataFromDB(InteractiveInfo interactiveInfo) { - String query = "SELECT SEQUENCE_NUMBER, SAMPLING_TIME, VARIABLE_ID, VALUE_SIZE, VALUE FROM CHECKPOINT_VALUE " - + "WHERE VARIABLE_ID IN ("; - List variableIDList = new ArrayList(); - interactiveInfo.getAllRelatedVariableIDs(variableIDList, interactiveInfo.getCheckLocation()); - for (int i = 0; i < variableIDList.size(); i++) { - query += variableIDList.get(i); - if (i + 1 < variableIDList.size()) { - query += ","; - } - } - query += ")"; - ResultSet rs = SqlConnectionManager.executeQueryRS(query); - return rs; - } - - @Override - public void saveData(Map dataMap) { - List> list = new ArrayList>(); - insertVariableInfo(variableInfoList, list); - variableDBTable.insertData(list); - } - - private void insertVariableInfo(List infoList, List> list) { - for (int i = 0; i < infoList.size(); i++) { - ArrayList dbVariableData = new ArrayList(); - InteractiveInfo info = infoList.get(i); - dbVariableData.add(info.getVariableID(InteractiveInfo.CHECK_BEFORE_LINE)); - dbVariableData.add(info.getVariableID(InteractiveInfo.CHECK_AFTER_LINE)); - dbVariableData.add(info.getCheckLocation()); - dbVariableData.add(info.getType().ordinal()); - dbVariableData.add(info.getTypeName()); - dbVariableData.add(info.getVariableName()); - dbVariableData.add(info.getFunctionID()); - dbVariableData.add(info.getSourceLineNum()); - dbVariableData.add(info.getSourceFileName()); - dbVariableData.add(info.getPointerOrder()); - dbVariableData.add(info.getPointerSize()); - dbVariableData.add(info.getArrayCount()); - dbVariableData.add(info.getByteSize()); - dbVariableData.add(info.getOffset()); - dbVariableData.add(info.isTarget()); - dbVariableData.add(info.getChildrenIDs()); - list.add(dbVariableData); - if (info.getChildren() != null) { - insertVariableInfo(info.getChildren(), list); - } - } - } - - @Override - public void openData(Map dataMap) { - variableInfoList.clear(); - List> datas = variableDBTable.selectAllColumnData(null); - if (datas == null) { - return; - } - - Map> relationMap = new HashMap>(); - for (int i = 0; i < datas.size(); i++) { - List row = datas.get(i); - long beforeVariableID = ((Long) row.get(InteractiveVariableDBTable.COLUMN.BEFORE_VARIABLE_ID.ordinal())) - .longValue(); - long afterVariableID = ((Long) row.get(InteractiveVariableDBTable.COLUMN.AFTER_VARIABLE_ID.ordinal())) - .longValue(); - int checkLocation = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.CHECK_LOCATION.ordinal())) - .intValue(); - VAR_TYPE variableType = VAR_TYPE.values()[((Integer) row - .get(InteractiveVariableDBTable.COLUMN.VARIABLE_TYPE.ordinal())).intValue()]; - String typeName = (String) row.get(InteractiveVariableDBTable.COLUMN.VARIABLE_TYPE_NAME.ordinal()); - String variableName = (String) row.get(InteractiveVariableDBTable.COLUMN.VARIABLE_NAME.ordinal()); - int functionID = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.FUNCTION_ID.ordinal())) - .intValue(); - int sourceLineNum = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.SOURCE_LINE_NUMBER.ordinal())) - .intValue(); - String sourceFileName = (String) row.get(InteractiveVariableDBTable.COLUMN.SOURCE_FILE_NAME.ordinal()); - int pointerOrder = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.POINTER_ORDER.ordinal())) - .intValue(); - int pointerSize = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.POINTER_SIZE.ordinal())).intValue(); - int arrayCount = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.ARRAY_COUNT.ordinal())).intValue(); - int byteSize = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.BYTE_SIZE.ordinal())).intValue(); - boolean isTarget = ((Boolean) row.get(InteractiveVariableDBTable.COLUMN.IS_TARGET.ordinal())) - .booleanValue(); - int offset = ((Integer) row.get(InteractiveVariableDBTable.COLUMN.OFFSET.ordinal())).intValue(); - @SuppressWarnings("unchecked") - List childrenID = (List) row.get(InteractiveVariableDBTable.COLUMN.CHILDREN_VARIABLE_ID - .ordinal()); - - InteractiveInfo valueInfo = new InteractiveInfo(); - valueInfo.setVariableID(InteractiveInfo.CHECK_BEFORE_LINE, beforeVariableID); - valueInfo.setVariableID(InteractiveInfo.CHECK_AFTER_LINE, afterVariableID); - valueInfo.setCheckLocation(checkLocation); - valueInfo.setType(variableType); - valueInfo.setTypeName(typeName); - valueInfo.setVariableName(variableName); - valueInfo.setFunctionID(functionID); - valueInfo.setSourceLineNum(sourceLineNum); - valueInfo.setSourceFileName(sourceFileName); - valueInfo.setPointerOrder(pointerOrder); - valueInfo.setPointerSize(pointerSize); - valueInfo.setArrayCount(arrayCount); - valueInfo.setByteSize(byteSize); - valueInfo.setOffset(offset); - valueInfo.setTarget(isTarget); - if (isTarget) { // target variable, only this info show in chart. - variableInfoList.add(valueInfo); - } - relationMap.put(valueInfo, childrenID); - } - makeRelation(relationMap); - - /* - * Refresh InteractiveChartView - * because this method is called after InteractiveChartView creation. - */ - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - if (chartView != null) { - chartView.clear(); - } - } - }); - } - - private void makeRelation(Map> relationMap) { - Iterator iter = relationMap.keySet().iterator(); - while (iter.hasNext()) { - InteractiveInfo parent = iter.next(); - List childrenIDs = relationMap.get(parent); - if (childrenIDs != null) { - List children = new ArrayList(); - for (int i = 0; i < childrenIDs.size(); i++) { - InteractiveInfo child = findInfo(relationMap.keySet(), childrenIDs.get(i)); - if (child == null) { - Logger.error("Child does not exist."); - continue; - } - if (children.contains(child) == false) { - child.setParent(parent); - children.add(child); - } - parent.setChildren(children); - } - } - } - } - - private InteractiveInfo findInfo(Set infoSet, long variableID) { - Iterator iter = infoSet.iterator(); - while (iter.hasNext()) { - InteractiveInfo target = iter.next(); - if (target.hasVariableID(variableID)) { - return target; - } - } - return null; - } - - @Override - protected void makeData(LogPackage pack) { - Logs fbiLogs = pack.getLogs(ProtocolConstants.MSG_FUNCTION_BODY); - List fbiLogList = fbiLogs == null ? null : fbiLogs.getRawLogs(); - - if (fbiLogList != null) { - List> valueDataList = new ArrayList>(); - for (int i = 0; i < fbiLogList.size(); i++) { - FunctionBodyInstrumentData log = (FunctionBodyInstrumentData) fbiLogList.get(i); - try { - long variableID = log.getVariableID().getValue(); - long size = log.getSize().getValue(); - byte[] data = log.getData(); - - ArrayList dbValueData = new ArrayList(); - dbValueData.add(new Long(log.getSeq())); - dbValueData.add(new Long(log.getTime())); - dbValueData.add(new Long(variableID)); - dbValueData.add(new Long(size)); - dbValueData.add(data); - - valueDataList.add(dbValueData); - } catch (UnsupportedProtocolException ex) { - // TODO need to policy of exception handling - Logger.exception(ex); - } - } - valueDBInserter.pushData(valueDataList); - } - } - - @Override - public void makeChartSeries(long startTime, long endTime) { - chartView.inputChartSeries(getValueDataFromDB(startTime, endTime)); - - List> systemDBData = TimelineDataManager.getInstance().getSystemDataFromDB(startTime, endTime); - List> uiEventDBData = TimelineDataManager.getInstance().getUIEventDataFromDB(startTime, endTime); - List> screenShotDBData = TimelineDataManager.getInstance().getScreenShotDataFromDB(startTime, - endTime); - - int selectedPID = 0; - if (Toolbar.INSTANCE != null) { - selectedPID = Toolbar.INSTANCE.getSelectedPid(); - } - Map>> targetProcessDBData = TimelineDataManager.getInstance() - .getTargetProcessDataFromDB(startTime, endTime, selectedPID); - - /* - * 2. Make series of chart - */ - for (TimelineChart chart : timelineChartList) { - if (chart.getProbeType() == ProtocolConstants.MSG_DATA_SYSTEM) { - List dataList = new ArrayList(); - dataList.add(systemDBData); - dataList.add(targetProcessDBData); - chart.inputChartSeries(dataList); - } else if (chart.getProbeType() == ProtocolConstants.MSG_PROBE_UIEVENT) { - List dataList = new ArrayList(); - dataList.add(uiEventDBData); - chart.inputChartSeries(dataList); - } else if (chart.getProbeType() == ProtocolConstants.MSG_PROBE_SCREENSHOT) { - List dataList = new ArrayList(); - dataList.add(screenShotDBData); - chart.inputChartSeries(dataList); - } - } - } - - public Map> makeInteractiveValueMap(ResultSet rs) { - if (rs == null) { - return null; - } - // Key : variableID - Map> valueInfoMap = new HashMap>(); - try { - while (rs.next()) { - long seq = rs.getLong(1); - long time = rs.getLong(2); - long id = rs.getLong(3); - byte[] value = rs.getBytes(5); - List valueInfoList = valueInfoMap.get(id); - if (valueInfoList == null) { - valueInfoList = new ArrayList(); - valueInfoMap.put(id, valueInfoList); - } - valueInfoList.add(new InteractiveValue(seq, time, id, value)); - } - } catch (SQLException e) { - Logger.error(e); - return null; - } finally { - SqlConnectionManager.releaseResultSet(rs); - } - if (valueInfoMap.isEmpty()) { - return null; - } - return valueInfoMap; - } - - /* - * Object of this method is to make data for UI (chart, table) - * If you want to understand this logic, refer to the document (Interactive profiling_Analysis_Design.pptx) - */ - public boolean makeInteractiveUIData(InteractiveInfo interactiveInfo, Map> valueInfoMap, - List beforeUIDataList, List afterUIDataList) { - List rootBeforeValueInfoList = valueInfoMap.get(interactiveInfo - .getVariableID(InteractiveInfo.CHECK_BEFORE_LINE)); - List rootAfterValueInfoList = valueInfoMap.get(interactiveInfo - .getVariableID(InteractiveInfo.CHECK_AFTER_LINE)); - if (rootBeforeValueInfoList == null && rootAfterValueInfoList == null) { - return false; - } - - List> childrenBeforeValueInfoList = new ArrayList>(); - List> childrenAfterValueInfoList = new ArrayList>(); - Iterator variableIDIter = valueInfoMap.keySet().iterator(); - while (variableIDIter.hasNext()) { - long variableID = variableIDIter.next(); - if (interactiveInfo.hasChild(variableID, InteractiveInfo.CHECK_BEFORE_LINE)) { - childrenBeforeValueInfoList.add(valueInfoMap.get(variableID)); - } else if (interactiveInfo.hasChild(variableID, InteractiveInfo.CHECK_AFTER_LINE)) { - childrenAfterValueInfoList.add(valueInfoMap.get(variableID)); - } else { - // Do nothing - } - } - parseValue(interactiveInfo, InteractiveInfo.CHECK_BEFORE_LINE, - rootBeforeValueInfoList, childrenBeforeValueInfoList, beforeUIDataList); - parseValue(interactiveInfo, InteractiveInfo.CHECK_AFTER_LINE, - rootAfterValueInfoList, childrenAfterValueInfoList, afterUIDataList); - return true; - } - - private void parseValue(InteractiveInfo interactiveInfo, int checkLocation, - List rootValueInfoList, List> childrenValueInfoList, - List parsedUIDataList) { - if (rootValueInfoList == null) { - return; - } - for (int i = 0; i < rootValueInfoList.size(); i++) { - Map valueMap = new HashMap(); // Map - valueMap.put(interactiveInfo.getVariableID(checkLocation), rootValueInfoList.get(i).value); - for (int k = 0; k < childrenValueInfoList.size(); k++) { - if (childrenValueInfoList.get(k).size() > i) { // Child is in root's range - InteractiveValue valueInfo = childrenValueInfoList.get(k).get(i); - valueMap.put(valueInfo.variableID, valueInfo.value); - } else { - // FBI probe of root is sent more than FBI probe of children. - Logger.error("rootValueInfo size is larger than childrenValueInfo size."); - } - } - InteractiveUIData uiData = InteractiveParser.parseValue(interactiveInfo, checkLocation, valueMap); - if (uiData != null) { - uiData.setSeq(rootValueInfoList.get(i).seq); - uiData.setTime(rootValueInfoList.get(i).time); - parsedUIDataList.add(uiData); - } - } - } - - public void clear() { - // Remove a CheckPoint tab - BaseView baseView = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID); - if (baseView != null) { - baseView.removeTabViewPage(InteractivePage.pageID, true); - } else { - Logger.error("BaseView is null!!"); - } - variableInfoList.clear(); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveUIData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveUIData.java deleted file mode 100644 index 3ea5b56..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveUIData.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.data; - -import java.util.List; - -import org.tizen.dynamicanalyzer.nl.InteractivePageLabels; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; - -public class InteractiveUIData implements Comparable { - private final static long UNSET_SEQ = -1; - - private long tableRowID; /* need for table row identity */ - private long seq = UNSET_SEQ; // sequence number from SWAP - private long time; - private String type; - private String name; - private Object value; - private boolean array = false; - private int checkLocation; - private InteractiveInfo interactiveInfo; - private List children; - - public InteractiveUIData(InteractiveInfo interactiveInfo, int checkLocation) { - this.interactiveInfo = interactiveInfo; - this.type = interactiveInfo.getTypeNameWithPointer(); - this.name = interactiveInfo.getVariableName(); - this.checkLocation = checkLocation; - } - - public long getTableRowID() { - return tableRowID; - } - - public void setTableRowID(long tableRowID) { - this.tableRowID = tableRowID; - } - - public long getSeq() { - return seq; - } - - public void setSeq(long seq) { - this.seq = seq; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public boolean isArray() { - return array; - } - - public void setArray(boolean array) { - this.array = array; - } - - public String getType() { - if (array) { - type += " [" + children.size() + "]"; - } - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Object getValue() { - if (array || children != null) { - return getComplexValue(); - } - if (value == null) { - return "This variable type is not supported."; - } - return value; - } - - public void setValue(Object value) { - this.value = value; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public InteractiveInfo getVariableInfo() { - return interactiveInfo; - } - - public int getCheckLocation() { - return checkLocation; - } - - private String getComplexValue() { - String complexValue = "["; - for (int i = 0; i < children.size(); i++) { - InteractiveUIData child = children.get(i); - if (child == null) { - complexValue += InteractivePageLabels.INTERACTIVE_CHART_INVALID_CHECK_LOCATION; - } else if (child.isArray() || child.getChildren() != null) { - complexValue += child.getComplexValue(); - } else { - complexValue += child.getValue(); - } - if (i != children.size() - 1) { // is not last index - complexValue += ", "; - } - } - return complexValue + "]"; - } - - public String getChartTooltipString() { - if (array || children != null) { - return getComplexValue(); - } - return getType() + " " + name + " : " + getValue(); - } - - @Override - public int compareTo(Object arg0) { - if (arg0 instanceof InteractiveUIData) { - return (int) (time - ((InteractiveUIData) arg0).time); - } - return 0; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValue.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValue.java deleted file mode 100644 index 96d7322..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValue.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.data; - -public class InteractiveValue { - long seq; - long time; - long variableID; - byte[] value; - - public InteractiveValue(long seq, long time, long variableID, byte[] value) { - this.seq = seq; - this.time = time; - this.variableID = variableID; - this.value = value; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValueDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValueDBTable.java deleted file mode 100644 index a2ca7b5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveValueDBTable.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.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.util.Logger; - -public class InteractiveValueDBTable extends DBTable { - private static final String TABLENAME = "CHECKPOINT_VALUE"; - - private final static int MAX_BYTES_LEN = 1024; - - public static enum COLUMN { - SEQUENCE_NUMBER, - SAMPLING_TIME, - VARIABLE_ID, - VALUE_SIZE, - VALUE - } - - public static final String SEQUENCE_NUMBER = "SEQUENCE_NUMBER"; - public static final String SAMPLING_TIME = "SAMPLING_TIME"; - public static final String VARIABLE_ID = "VARIABLE_ID"; - public static final String VALUE_SIZE = "VALUE_SIZE"; - public static final String VALUE = "VALUE"; - - @Override - public String getTableName() { - return TABLENAME; - } - - public InteractiveValueDBTable() { - addColumn(new DBColumn(SEQUENCE_NUMBER, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(SAMPLING_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(VARIABLE_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(VALUE_SIZE, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(VALUE, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARBINARY, MAX_BYTES_LEN)); - } - - @Override - public boolean prepare(PreparedStatement prep, List rowData) { - boolean isPrepared = true; - - int columnsize = getColumnSize(); - if (columnsize != rowData.size()) { - isPrepared = false; - } else { - try { - int index = 1; - prep.setLong(index++, (Long) (rowData.get(COLUMN.SEQUENCE_NUMBER.ordinal()))); - prep.setLong(index++, (Long) (rowData.get(COLUMN.SAMPLING_TIME.ordinal()))); - prep.setLong(index++, (Long) (rowData.get(COLUMN.VARIABLE_ID.ordinal()))); - prep.setLong(index++, (Long) (rowData.get(COLUMN.VALUE_SIZE.ordinal()))); - prep.setBytes(index++, (byte[]) (rowData.get(COLUMN.VALUE.ordinal()))); - } catch (SQLException e) { - Logger.error(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Long.valueOf(rs.getLong(1))); - row.add(Long.valueOf(rs.getLong(2))); - row.add(Long.valueOf(rs.getLong(3))); - row.add(Long.valueOf(rs.getLong(4))); - row.add(rs.getBytes(5)); -// row.add(getArrayFromResultSet(rs, 3, String.valueOf(0))); - } catch (SQLException e) { - Logger.error(e); - return null; - } - return row; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveVariableDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveVariableDBTable.java deleted file mode 100644 index 95eb57a..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/data/InteractiveVariableDBTable.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.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.util.Logger; - -public class InteractiveVariableDBTable extends DBTable { - private static final String TABLENAME = "CHECKPOINT_VARIABLE"; - - private final static int MAX_NAME_LEN = 128; - private final static int MAX_TYPE_LEN = 64; - - public static enum COLUMN { - BEFORE_VARIABLE_ID, - AFTER_VARIABLE_ID, - CHECK_LOCATION, - VARIABLE_TYPE, - VARIABLE_TYPE_NAME, - VARIABLE_NAME, - FUNCTION_ID, - SOURCE_LINE_NUMBER, - SOURCE_FILE_NAME, - POINTER_ORDER, - POINTER_SIZE, - ARRAY_COUNT, - BYTE_SIZE, - OFFSET, - IS_TARGET, - CHILDREN_VARIABLE_ID - } - - public static final String BEFORE_VARIABLE_ID = "BEFORE_VARIABLE_ID"; - public static final String AFTER_VARIABLE_ID = "AFTER_VARIABLE_ID"; - public static final String CHECK_LOCATION = "CHECK_LOCATION"; - public static final String VARIABLE_TYPE = "VARIABLE_TYPE"; - public static final String VARIABLE_TYPE_NAME = "VARIABLE_TYPE_NAME"; - public static final String VARIABLE_NAME = "VARIABLE_NAME"; - public static final String FUNCTION_ID = "FUNCTION_ID"; - public static final String SOURCE_LINE_NUMBER = "SOURCE_LINE_NUMBER"; - public static final String SOURCE_FILE_NAME = "SOURCE_FILE_NAME"; - public static final String POINTER_ORDER = "POINTER_ORDER"; - public static final String POINTER_SIZE = "POINTER_SIZE"; - public static final String ARRAY_COUNT = "ARRAY_COUNT"; - public static final String BYTE_SIZE = "BYTE_SIZE"; - public static final String OFFSET = "OFFSET"; - public static final String IS_TARGET = "IS_TARGET"; - public static final String CHILDREN_VARIABLE_ID = "CHILDREN_VARIABLE_ID"; - - @Override - public String getTableName() { - return TABLENAME; - } - - public InteractiveVariableDBTable() { - addColumn(new DBColumn(BEFORE_VARIABLE_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(AFTER_VARIABLE_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(CHECK_LOCATION, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(VARIABLE_TYPE, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(VARIABLE_TYPE_NAME, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR, MAX_TYPE_LEN)); - addColumn(new DBColumn(VARIABLE_NAME, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, MAX_NAME_LEN)); - addColumn(new DBColumn(FUNCTION_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(SOURCE_LINE_NUMBER, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(SOURCE_FILE_NAME, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, MAX_NAME_LEN)); - addColumn(new DBColumn(POINTER_ORDER, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(POINTER_SIZE, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(ARRAY_COUNT, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(BYTE_SIZE, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(OFFSET, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(IS_TARGET, DBConstants.NOT_NULL, DBConstants.DBTYPE_BOOLEAN)); - addColumn(new DBColumn(CHILDREN_VARIABLE_ID, DBConstants.EMPTY, DBConstants.BIGINT_ARRAY)); - } - - @Override - public boolean prepare(PreparedStatement prep, List rowData) { - boolean isPrepared = true; - - int columnsize = getColumnSize(); - if (columnsize != rowData.size()) { - isPrepared = false; - } else { - try { - int index = 1; - prep.setLong(index++, (Long) (rowData.get(COLUMN.BEFORE_VARIABLE_ID.ordinal()))); - prep.setLong(index++, (Long) (rowData.get(COLUMN.AFTER_VARIABLE_ID.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.CHECK_LOCATION.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.VARIABLE_TYPE.ordinal()))); - // Check string overflow - String name = (String) (rowData.get(COLUMN.VARIABLE_TYPE_NAME.ordinal())); - if (name != null && name.length() > MAX_TYPE_LEN) { - Logger.warning("Overflow occurs VARIABLE_TYPE_NAME in InteractiveVariableDBTable : " + name); - name = name.substring(0, MAX_NAME_LEN); - } - prep.setString(index++, name); - // Check string overflow - name = (String) (rowData.get(COLUMN.VARIABLE_NAME.ordinal())); - if (name != null && name.length() > MAX_NAME_LEN) { - Logger.warning("Overflow occurs VARIABLE_NAME in InteractiveVariableDBTable : " + name); - name = name.substring(0, MAX_NAME_LEN); - } - prep.setString(index++, name); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.FUNCTION_ID.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.SOURCE_LINE_NUMBER.ordinal()))); - // Check string overflow - name = (String) (rowData.get(COLUMN.SOURCE_FILE_NAME.ordinal())); - if (name != null && name.length() > MAX_NAME_LEN) { - Logger.warning("Overflow occurs SOURCE_FILE_NAME in InteractiveVariableDBTable : " + name); - name = name.substring(0, MAX_NAME_LEN); - } - prep.setString(index++, name); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.POINTER_ORDER.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.POINTER_SIZE.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.ARRAY_COUNT.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.BYTE_SIZE.ordinal()))); - prep.setInt(index++, (Integer) (rowData.get(COLUMN.OFFSET.ordinal()))); - prep.setBoolean(index++, (Boolean) (rowData.get(COLUMN.IS_TARGET.ordinal()))); - setArrayToPreparedStatement(COLUMN.CHILDREN_VARIABLE_ID.ordinal(), DBConstants.DBTYPE_LONG, prep, rowData); - } catch (SQLException e) { - Logger.error(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - int index = 1; - row.add(Long.valueOf(rs.getLong(index++))); - row.add(Long.valueOf(rs.getLong(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(rs.getString(index++)); - row.add(rs.getString(index++)); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(rs.getString(index++)); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Integer.valueOf(rs.getInt(index++))); - row.add(Boolean.valueOf(rs.getBoolean(index++))); - row.add(getArrayFromResultSet(rs, index++, Long.valueOf(0))); - } catch (SQLException e) { - Logger.error(e); - return null; - } - return row; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveIDGenerator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveIDGenerator.java deleted file mode 100644 index 4772513..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveIDGenerator.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.model; - -public class InteractiveIDGenerator { - private static int id = 0; - - public static synchronized int generateID() { - return ++id; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveInfo.java deleted file mode 100644 index b1a715b..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveInfo.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.model; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.util.Logger; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; - -public class InteractiveInfo { - public final static int NO_SET_VARIABLE_ID = -1; - public final static int CHECK_BEFORE_LINE = 1; - public final static int CHECK_AFTER_LINE = 2; - public final static int CHECK_BEFORE_AFTER_LINE = 3; - public final static int UNSET_FUNC_ID = -1; - - private long beforeVariableID = NO_SET_VARIABLE_ID; - private long afterVariableID = NO_SET_VARIABLE_ID; - private VAR_TYPE type; - private String typeName; - private String variableName = ""; - private int sourceLineNum = 0; - private int checkLocation = CHECK_BEFORE_LINE; - private long sourceLineLowAddress = 0; - private long sourceLineHighAddress = 0; - private String sourceFileName = ""; - private int pointerOrder = 0; - private int pointerSize = 4; - private int arrayCount = 0; - private int byteSize = 0; - private int offset = 0; - private int registerID; - private long registerOffset; - private String functionName; - private int functionID = UNSET_FUNC_ID; - private InteractiveInfo parent; - private List children; - private boolean isTarget = false; - - public int getCheckLocation() { - return checkLocation; - } - - public void setCheckLocation(int checkLocation) { - this.checkLocation = checkLocation; - } - - public boolean hasCheckLocation(int checkLocation) { - int result = this.checkLocation & checkLocation; - return result != 0; - } - - public boolean isTarget() { - return isTarget; - } - - public void setTarget(boolean isTarget) { - this.isTarget = isTarget; - } - - public void setTypeName(String typeName) { - this.typeName = typeName; - } - - public void increasePointerOrder() { - pointerOrder++; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public boolean isString() { - return type == VAR_TYPE.CHAR && pointerOrder > 0; - } - - public int getRegisterID() { - return registerID; - } - - public void setRegisterID(int registerID) { - this.registerID = registerID; - } - - public long getRegisterOffset() { - return registerOffset; - } - - public void setRegisterOffset(long registerOffset) { - this.registerOffset = registerOffset; - } - - public int getFunctionID() { - if (functionID == UNSET_FUNC_ID) { - functionID = Global.getFunctionID(this.functionName); - } - return functionID; - } - - public void setFunctionID(int functionID) { - this.functionID = functionID; - } - - public void setFunctionName(String functionName) { - this.functionName = functionName; - } - - public long getVariableID(int checkLocation) { - switch (checkLocation) { - case CHECK_BEFORE_LINE: - return beforeVariableID; - case CHECK_AFTER_LINE: - return afterVariableID; - default: - Logger.error("Impossible case!!"); - return -1; - } - } - - public void setVariableID(int checkLocation, long variableID) { - switch (checkLocation) { - case CHECK_BEFORE_LINE: - this.beforeVariableID = variableID; - break; - case CHECK_AFTER_LINE: - this.afterVariableID = variableID; - break; - default: - Logger.error("Impossible case!!"); - break; - } - } - - public VAR_TYPE getType() { - return type; - } - - public void setType(VAR_TYPE type) { - this.type = type; - } - - public String getVariableName() { - return variableName; - } - - public void setVariableName(String variableName) { - this.variableName = variableName; - } - - public int getSourceLineNum() { - return sourceLineNum; - } - - public void setSourceLineNum(int sourceLineNum) { - this.sourceLineNum = sourceLineNum; - } - - public long getSourceLineAddress(int checkLocation) { - switch (checkLocation) { - case CHECK_BEFORE_LINE: - return sourceLineLowAddress; - case CHECK_AFTER_LINE: - return sourceLineHighAddress; - default: - Logger.error("Impossible case!!"); - return -1; - } - } - - public void setSourceLineAddress(int checkLocation, long sourceLineAddress) { - switch (checkLocation) { - case CHECK_BEFORE_LINE: - this.sourceLineLowAddress = sourceLineAddress; - break; - case CHECK_AFTER_LINE: - this.sourceLineHighAddress = sourceLineAddress; - break; - default: - Logger.error("Impossible case!!"); - break; - } - } - - public String getSourceFileName() { - return sourceFileName; - } - - public void setSourceFileName(String sourceFileName) { - this.sourceFileName = sourceFileName; - } - - public int getPointerOrder() { - return pointerOrder; - } - - public void setPointerOrder(int pointerOrder) { - this.pointerOrder = pointerOrder; - } - - public int getPointerSize() { - return pointerSize; - } - - public void setPointerSize(int pointerSize) { - this.pointerSize = pointerSize; - } - - public int getArrayCount() { - return arrayCount; - } - - public void setArrayCount(int arrayCount) { - this.arrayCount = arrayCount; - } - - public InteractiveInfo getParent() { - return parent; - } - - public void setParent(InteractiveInfo parent) { - this.parent = parent; - } - - public int getByteSize() { - return byteSize; - } - - public void setByteSize(int byteSize) { - this.byteSize = byteSize; - } - - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - - public String getTypeName() { - return typeName; - } - - public String getTypeNameWithPointer() { - String string = typeName; - if (string == null) { - string = type.getName(); - } - for (int i = 0; i < pointerOrder; i++) { - string += "*"; - } - return string; - } - - /* - * type + variable name ( source file name : source line number) - * ex) char* name (test.c : 123) - */ - public String getDescription() { - String[] splitedSourcePath = AnalyzerUtil.splitFilePath(sourceFileName, File.separator); - String fileName = splitedSourcePath[splitedSourcePath.length - 1]; - if (arrayCount > 0) { - return getTypeNameWithPointer() + " " + getVariableName() + " [" + arrayCount + "] (" + fileName + " : " - + sourceLineNum + ")"; - } else { - return getTypeNameWithPointer() + " " + getVariableName() + " (" + fileName + " : " + sourceLineNum + ")"; - } - } - - public boolean isStructType() { - return (type == VAR_TYPE.STRUCT); - } - - public boolean isArray() { - return (arrayCount > 0); - } - - public boolean isPointerType() { - return (pointerOrder > 0); - } - - public boolean isPointerArray() { - return (isArray() && isPointerType()); - } - - public void getAllRelatedVariableIDs(List variableIDList, int checkLocation) { - switch (checkLocation) { - case CHECK_BEFORE_LINE: - variableIDList.add(beforeVariableID); - break; - case CHECK_AFTER_LINE: - variableIDList.add(afterVariableID); - break; - case CHECK_BEFORE_AFTER_LINE: - variableIDList.add(beforeVariableID); - variableIDList.add(afterVariableID); - break; - default: - Logger.error("Impossible case!!"); - break; - } - if (children != null) { - for (int i = 0; i < children.size(); i++) { - children.get(i).getAllRelatedVariableIDs(variableIDList, checkLocation); - } - } - } - - public boolean hasVariableID(long variableID) { - if (variableID == NO_SET_VARIABLE_ID) { - return false; - } - return (beforeVariableID == variableID) || (afterVariableID == variableID); - } - - public List getChildrenIDs() { - List variableIDList = new ArrayList(); - if (children != null) { - for (int i = 0; i < children.size(); i++) { - long beforeVariableID = children.get(i).getVariableID(CHECK_BEFORE_LINE); - long afterVariableID = children.get(i).getVariableID(CHECK_AFTER_LINE); - if (beforeVariableID != NO_SET_VARIABLE_ID) { - variableIDList.add(beforeVariableID); - } - if (afterVariableID != NO_SET_VARIABLE_ID) { - variableIDList.add(afterVariableID); - } - } - } - return variableIDList; - } - - public boolean hasChild(long variableID, int checkLocation) { - if (children != null) { - for (int i = 0; i < children.size(); i++) { - if (variableID == children.get(i).getVariableID(checkLocation)) { - return true; - } - } - } - return false; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveParser.java deleted file mode 100644 index c209a06..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/InteractiveParser.java +++ /dev/null @@ -1,605 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.model; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.cdt.debug.edc.internal.symbols.IArrayType; -import org.eclipse.cdt.debug.edc.internal.symbols.IConstType; -import org.eclipse.cdt.debug.edc.internal.symbols.IField; -import org.eclipse.cdt.debug.edc.internal.symbols.ILexicalBlockScope; -import org.eclipse.cdt.debug.edc.internal.symbols.IPointerType; -import org.eclipse.cdt.debug.edc.internal.symbols.ITypedef; -import org.eclipse.cdt.debug.edc.internal.symbols.LexicalBlockScope; -import org.eclipse.cdt.debug.edc.internal.symbols.StructType; -import org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfCompileUnit; -import org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfDebugInfoProvider; -import org.eclipse.cdt.debug.edc.internal.symbols.dwarf.DwarfInfoReader; -import org.eclipse.cdt.debug.edc.internal.symbols.dwarf.LocationExpression; -import org.eclipse.cdt.debug.edc.internal.symbols.files.ElfExecutableSymbolicsReaderFactory; -import org.eclipse.cdt.debug.edc.symbols.ICompileUnitScope; -import org.eclipse.cdt.debug.edc.symbols.IExecutableSymbolicsReader; -import org.eclipse.cdt.debug.edc.symbols.IFunctionScope; -import org.eclipse.cdt.debug.edc.symbols.ILineEntry; -import org.eclipse.cdt.debug.edc.symbols.ILocationProvider; -import org.eclipse.cdt.debug.edc.symbols.IScope; -import org.eclipse.cdt.debug.edc.symbols.IType; -import org.eclipse.cdt.debug.edc.symbols.IVariable; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveUIData; -import org.tizen.dynamicanalyzer.util.ByteUtil; -import org.tizen.dynamicanalyzer.util.Logger; - -public class InteractiveParser { - // If Global variable, Register ID will be 0xFF. It's Protocol with SWAP. - private static int GLOBAL_VARIABLE_ID = 0xFF; - - public static InteractiveUIData parseValue(InteractiveInfo interactiveInfo, int checkLocation, - Map valueMap) { - InteractiveUIData uiData = null; - byte[] value = valueMap.get(interactiveInfo.getVariableID(checkLocation)); - if (value != null && value.length > 0) { - if (interactiveInfo.isStructType() == false && interactiveInfo.isArray() == false) { - uiData = parseScalar(interactiveInfo, checkLocation, value); - } else if (interactiveInfo.isArray()) { - uiData = parseArray(interactiveInfo, checkLocation, value, valueMap); - } else if (interactiveInfo.isStructType()) { - uiData = parseStruct(interactiveInfo, checkLocation, value, valueMap); - } else { - Logger.warning("value is not scalar, array, struct."); - } - } - return uiData; - } - - /* - * TODO Detail variable type parsing, because some C data type is not - * supported by Java's primitive. - */ - private static InteractiveUIData parseScalar(InteractiveInfo info, int checkLocation, byte[] data) { - InteractiveUIData uiData = new InteractiveUIData(info, checkLocation); - Object value = null; - switch (info.getType()) { - case CHAR: - case UNSIGNED_CHAR: - case SIGNED_CHAR: { - if (info.getPointerOrder() > 0) { - value = ByteUtil.getString(data, 0); - } else { - value = new Character((char) data[0]); - } - } - break; - case INT: - value = ByteUtil.toInt(data); - break; - case UNSIGNED_INT: - value = ByteUtil.toUnsignedInt(data, 0); - break; - case SHORT: - value = ByteUtil.toShort(data, 0); - break; - case UNSIGNED_SHORT: - value = ByteUtil.toUnsignedShort(data, 0); - break; - case LONG: - if (info.getByteSize() == 4) { - value = ByteUtil.toInt(data); - } else if (info.getByteSize() == 8) { - value = ByteUtil.toLong(data); - } - break; - case UNSIGNED_LONG: - if (info.getByteSize() == 4) { - value = ByteUtil.toUnsignedInt(data, 0); - } else if (info.getByteSize() == 8) { - value = toUnsignedLong(ByteUtil.toLong(data)); - } - break; - case FLOAT: - value = ByteUtil.toFloat(data, 0); - break; - case DOUBLE: - case LONG_DOUBLE: - if (info.getByteSize() == 8) { - value = ByteUtil.toDouble(data, 0); - } else { - Logger.warning("Long double is not 8bytes : " + info.getByteSize()); - } - break; - default: - Logger.warning("undefined variable type!!"); - break; - } - uiData.setValue(value); - return uiData; - } - - /* - * TODO Add a unit test for this method - * This method is from "UnsignedLongs.java" of Google guava-libraries - * (apache 2.0 license) - */ - private static String toUnsignedLong(long x) { - int radix = 10; - if (x == 0) { - return "0"; - } else { - char[] buf = new char[64]; - int i = buf.length; - if (x < 0) { - // Split x into high-order and low-order halves. - // Individual digits are generated from the bottom half into - // which - // bits are moved continously from the top half. - long top = x >>> 32; - long bot = (x & 0xffffffffl) + ((top % radix) << 32); - top /= radix; - while ((bot > 0) || (top > 0)) { - buf[--i] = Character.forDigit((int) (bot % radix), radix); - bot = (bot / radix) + ((top % radix) << 32); - top /= radix; - } - } else { - // Simple modulo/division approach - while (x > 0) { - buf[--i] = Character.forDigit((int) (x % radix), radix); - x /= radix; - } - } - // Generate string - return new String(buf, i, buf.length - i); - } - } - - private static InteractiveUIData parseStruct(InteractiveInfo info, int checkLocation, byte[] data, - Map valueMap) { - InteractiveUIData uiData = new InteractiveUIData(info, checkLocation); - List children = new ArrayList(); - if (info.getChildren() != null) { - for (int i = 0; i < info.getChildren().size(); i++) { - InteractiveInfo memberInfo = info.getChildren().get(i); - int offset = memberInfo.getOffset(); - int byteSize = memberInfo.getByteSize(); - InteractiveUIData memberUiData = null; - /* - * Note : The sequence of "if/else if" is significant. Do not - * change sequence without consideration. It's possible 8cases : - * (single, array) * (scalar, scalar+pointer, struct, - * struct+pointer) "scalar" means "not Struct" like - * "int, double, ...". - */ - /* - * Case : member is scalar of value. 1case is covered. (single) - * * (scalar) - */ - if (memberInfo.isStructType() == false && memberInfo.isPointerType() == false - && memberInfo.isArray() == false) { - memberUiData = parseScalar(memberInfo, checkLocation, - Arrays.copyOfRange(data, offset, offset + byteSize)); - } - /* - * Case : member is Array of value. 2cases is covered. (array) * - * (scalar, struct) - */ - else if (memberInfo.isArray() && memberInfo.isPointerType() == false) { - int lastIndex = offset + (memberInfo.getArrayCount() * byteSize); - memberUiData = parseArray(memberInfo, checkLocation, Arrays.copyOfRange(data, offset, lastIndex), valueMap); - } - /* - * Case : member is Array of pointer. 2cases is covered. (array) - * * (scalar+pointer, struct+pointer) - */ - else if (memberInfo.isArray() && memberInfo.isPointerType() == true) { - int lastIndex = offset + (memberInfo.getArrayCount() * memberInfo.getPointerSize()); - memberUiData = parseArray(memberInfo, checkLocation, Arrays.copyOfRange(data, offset, lastIndex), valueMap); - } - /* - * Case : member is Pointer regardless of scalar, struct. 2cases - * is covered. (single) * (scalar+pointer, struct+pointer) - */ - else if (memberInfo.isPointerType()) { - memberUiData = new InteractiveUIData(memberInfo, checkLocation); - byte[] stream = valueMap.get(memberInfo.getVariableID(checkLocation)); - if (stream != null) { - memberUiData = parseValue(memberInfo, checkLocation, valueMap); - } else { - int pointerSize = memberInfo.getPointerSize(); - byte[] address = ByteUtil.toBytesN(data, offset, pointerSize); - if (pointerSize == 4) { // 4byte - memberUiData.setValue("0x" + Integer.toHexString(ByteUtil.toInt(address))); - } else if (pointerSize == 8) { // 8byte - memberUiData.setValue("0x" + Long.toHexString(ByteUtil.toLong(address))); - } - } - } - /* - * Case : member is Struct (not Pointer, Array). 1case is - * covered. (single) * (struct) - */ - else if (memberInfo.isStructType()) { - memberUiData = parseStruct(memberInfo, checkLocation, - Arrays.copyOfRange(data, offset, offset + byteSize), valueMap); - } - /* - * Error Case. This case is impossible. - */ - else { - Logger.warning("Unhandled case!!"); - } - children.add(memberUiData); - } - } - uiData.setChildren(children); - return uiData; - } - - private static InteractiveUIData parseArray(InteractiveInfo info, int checkLocation, byte[] data, Map valueMap) { - InteractiveUIData uiData = new InteractiveUIData(info, checkLocation); - uiData.setArray(true); - String arrayValue = "[ "; - List children = new ArrayList(); - int index = 0; - int byteSize = (info.getPointerOrder() > 0) ? info.getPointerSize() : info.getByteSize(); - for (int i = 0; i < info.getArrayCount(); i++) { - InteractiveUIData elementUiData = null; - /* - * Note : The sequence of "if/else if" is significant. Do not change - * sequence without consideration. It's possible 4cases : (scalar, - * scalar+pointer, struct, struct+pointer) "scalar" means - * "not Struct" like "int, double, ...". - */ - /* - * Case : Array of simple primitive type (not struct, not pointer). - * 1case is covered. (scalar) - */ - if (info.isStructType() == false && info.isPointerType() == false) { - elementUiData = parseScalar(info, checkLocation, Arrays.copyOfRange(data, index, index + byteSize)); - } - /* - * Case : Array of pointer (regardless of struct). 2case is covered. - * (scalar+pointer, struct+pointer) - */ - else if (info.isPointerType() == true) { - int pointerSize = info.getPointerSize(); - byte[] address = ByteUtil.toBytesN(data, index, pointerSize); - elementUiData = new InteractiveUIData(info, checkLocation); - if (pointerSize == 4) { // 4byte - elementUiData.setValue("0x" + Integer.toHexString(ByteUtil.toInt(address))); - } else if (pointerSize == 8) { // 8byte - elementUiData.setValue("0x" + Long.toHexString(ByteUtil.toLong(address))); - } - } - /* - * Case : Array of Struct (not pointer). 1case is covered. (struct) - */ - else if (info.isStructType()) { - elementUiData = parseStruct(info, checkLocation, Arrays.copyOfRange(data, index, index + byteSize), - valueMap); - } - /* - * Error Case. This case is impossible. - */ - else { - Logger.warning("Unhandled case!!"); - } - index += byteSize; - if (elementUiData != null) { - children.add(elementUiData); - arrayValue += elementUiData.getValue() + " , "; - } - } - arrayValue += " ]"; - uiData.setValue(arrayValue); - uiData.setChildren(children); - return uiData; - } - - public static InteractiveInfo getInteractiveInfo(String binaryPath, String sourcePath, int lineNum, String varStr, - int arrayCount, int checkLocation) { - // parse structure member (ex.structVal->mem1 => [structVal,mem1]) - String[] parsedVar = parseVariableString(varStr); - InteractiveInfo rootInteractiveInfo = parseDwarf(binaryPath, sourcePath, lineNum, parsedVar[0]); - if (rootInteractiveInfo != null) { - InteractiveInfo targetInteractiveInfo = findTargetInteractiveInfo(rootInteractiveInfo, parsedVar); - targetInteractiveInfo.setVariableName(varStr); - targetInteractiveInfo.setSourceFileName(sourcePath); - targetInteractiveInfo.setSourceLineNum(lineNum); - targetInteractiveInfo.setSourceLineAddress(InteractiveInfo.CHECK_BEFORE_LINE, - rootInteractiveInfo.getSourceLineAddress(InteractiveInfo.CHECK_BEFORE_LINE)); - targetInteractiveInfo.setSourceLineAddress(InteractiveInfo.CHECK_AFTER_LINE, - rootInteractiveInfo.getSourceLineAddress(InteractiveInfo.CHECK_AFTER_LINE)); - targetInteractiveInfo.setArrayCount(arrayCount); - targetInteractiveInfo.setCheckLocation(checkLocation); - return targetInteractiveInfo; - } - return rootInteractiveInfo; - } - - private static String[] parseVariableString(String varStr) { - String[] parsed = varStr.split("->|\\."); - return parsed; - } - - private static InteractiveInfo findTargetInteractiveInfo(InteractiveInfo rootInfo, String[] parsedVar) { - int depth = parsedVar.length; - InteractiveInfo cursorInfo = rootInfo; - for (int i = 1; i < depth; i++) { - List children = cursorInfo.getChildren(); - for (int ii = 0; ii < children.size(); ii++) { - if (children.get(ii).getVariableName().equals(parsedVar[i])) { - cursorInfo = children.get(ii); - } - } - } - cursorInfo.setTarget(true); - cursorInfo.setRegisterID(rootInfo.getRegisterID()); - cursorInfo.setRegisterOffset(rootInfo.getRegisterOffset()); - return cursorInfo; - } - - private static InteractiveInfo parseDwarf(String binaryPath, String sourcePath, int lineNum, String varName) { - Path _binaryPath = new Path(binaryPath); - Path _sourcePath = new Path(sourcePath); - ElfExecutableSymbolicsReaderFactory fact = new ElfExecutableSymbolicsReaderFactory(); - IExecutableSymbolicsReader exeReader = fact.createExecutableSymbolicsReader(_binaryPath); - if (exeReader == null) { - return null; - } - DwarfDebugInfoProvider dip = new DwarfDebugInfoProvider(exeReader); - DwarfInfoReader dir = new DwarfInfoReader(dip); - dir.parseInitial(); - dir.parseForAddresses(true); - - List cuList = dip.getModuleScope().getCompileUnitsForFile(_sourcePath); - ILineEntry sourceLine = null; - IFunctionScope funcScope = null; // function in lineNum - for (int i = 0; i < cuList.size(); i++) { - ICompileUnitScope cu = cuList.get(i); - if (!(cu instanceof DwarfCompileUnit)) { - continue; - } - List fileList = new ArrayList(); - Collection lines = dir.parseLineTable(cu, ((DwarfCompileUnit) cu).getAttributeList(), fileList); - Iterator iterLine = lines.iterator(); - while (iterLine.hasNext()) { - ILineEntry line = iterLine.next(); - if (line.getLineNumber() == lineNum && line.getFilePath().equals(_sourcePath)) { - sourceLine = line; - Collection cuChildren = cu.getChildren(); - Iterator iterScope = cuChildren.iterator(); - while (iterScope.hasNext()) { - IScope cuChild = iterScope.next(); - if (!(cuChild instanceof IFunctionScope)) { - continue; - } - /* - * DW_TAG_subprogram - */ - if (line.getHighAddress().compareTo(cuChild.getHighAddress()) <= 0 - && line.getLowAddress().compareTo(cuChild.getLowAddress()) >= 0) { - funcScope = (IFunctionScope) cuChild; - Collection funcChildren = cuChild.getChildren(); - Iterator iterFunc = funcChildren.iterator(); - /* - * DW_TAG_lexical_block - */ - while (iterFunc.hasNext()) { - InteractiveInfo varInfo = checkLexicalBlock(iterFunc.next(), varName, line, funcScope); - if (varInfo != null) { - return varInfo; - } - } - /* - * DW_TAG_formal_parameter - */ - Collection params = ((IFunctionScope) cuChild).getParameters(); - InteractiveInfo varInfo = getVariableInfo(params, varName, line, true, funcScope); - if (varInfo != null) { - return varInfo; - } - /* - * DW_TAG_variable - */ - varInfo = getVariableInfo(cuChild.getVariables(), varName, line, true, funcScope); - if (varInfo != null) { - return varInfo; - } - } - } - } - } - } - // Invalid line of source code (for example.. space, comment) - if (sourceLine == null) { - return null; - } - /* - * Check global variable - */ - Collection variables = dip.getModuleScope().getVariablesByName(varName, true); - return getVariableInfo(variables, varName, sourceLine, false, funcScope); - } - - private static boolean setVariableLocationInfo(ILocationProvider locationProvider, InteractiveInfo variableInfo, - boolean isLocal, IFunctionScope funcScope) { - if (!(locationProvider instanceof LocationExpression)) { - return false; - } - /* - * Case : Local variable - */ - if (isLocal) { - int registerID = ((LocationExpression) funcScope.getFrameBaseLocation()).getRegisterID(); - variableInfo.setRegisterID(registerID); - if (registerID > 0) { - Object[] offset = new Object[1]; - if (((LocationExpression) locationProvider).getRegisterOffset(offset)) { - variableInfo.setRegisterOffset((Long) offset[0]); - return true; - } - } - } - /* - * Case : Global variable - */ - else { - variableInfo.setRegisterID(GLOBAL_VARIABLE_ID); - Object[] address = new Object[1]; - if (true == ((LocationExpression) locationProvider).getGlobalVariableAddress(address)) { - variableInfo.setRegisterOffset((Long) address[0]); - return true; - } - } - return false; - } - - private static IType findTypeOfArray(IType type) { - if (!(type instanceof IArrayType) && !((type instanceof ITypedef || type instanceof IConstType))) { - return type; - } - return findTypeOfArray(type.getType()); - } - - private static void getTypeInfo(IType type, IFunctionScope funcScope, InteractiveInfo valueInfo) { - valueInfo.setByteSize(type.getByteSize()); - if (type instanceof IPointerType) { - valueInfo.increasePointerOrder(); - valueInfo.setPointerSize(type.getByteSize()); - getTypeInfo(type.getType(), funcScope, valueInfo); - } else if (type instanceof ITypedef || type instanceof IConstType) { - getTypeInfo(type.getType(), funcScope, valueInfo); - } else if (type instanceof IArrayType) { - getTypeInfo(type.getType(), funcScope, valueInfo); - } else if (type instanceof StructType) { - valueInfo.setType(VAR_TYPE.STRUCT); - valueInfo.setTypeName(type.getName()); - // If Linked List, stop parsing to prevent infinite recursive call - if (valueInfo.getParent() != null && valueInfo.getParent().getTypeName().equals(type.getName())) { - return; - } - List members = new ArrayList(); - valueInfo.setChildren(members); - IField[] fields = ((StructType) type).getFields(); - for (int i = 0; i < fields.length; i++) { - InteractiveInfo memberInfo = new InteractiveInfo(); - memberInfo.setVariableID(InteractiveInfo.CHECK_BEFORE_LINE, InteractiveIDGenerator.generateID()); - memberInfo.setVariableID(InteractiveInfo.CHECK_AFTER_LINE, InteractiveIDGenerator.generateID()); - memberInfo.setVariableName(fields[i].getName()); - memberInfo.setOffset((int) fields[i].getFieldOffset()); - memberInfo.setFunctionName(funcScope.getName()); - memberInfo.setParent(valueInfo); - // calculate count of array - int arrayCount = 0; - if (fields[i].getType() instanceof IArrayType) { - IType arrayType = findTypeOfArray(fields[i].getType()); - if (fields.length - 1 == i) { // if last member, - arrayCount = (type.getByteSize() - memberInfo.getOffset()) / arrayType.getByteSize(); - } else { - arrayCount = ((int) fields[i + 1].getFieldOffset() - memberInfo.getOffset()) - / arrayType.getByteSize(); - } - } - memberInfo.setArrayCount(arrayCount); - getTypeInfo(fields[i].getType(), funcScope, memberInfo); - members.add(memberInfo); - } - } else { - if (VAR_TYPE.CHAR.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.CHAR); - } else if (VAR_TYPE.UNSIGNED_CHAR.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.UNSIGNED_CHAR); - } else if (VAR_TYPE.SIGNED_CHAR.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.SIGNED_CHAR); - } else if (VAR_TYPE.INT.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.INT); - } else if (VAR_TYPE.UNSIGNED_INT.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.UNSIGNED_INT); - } else if (VAR_TYPE.SHORT.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.SHORT); - } else if (VAR_TYPE.UNSIGNED_SHORT.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.UNSIGNED_SHORT); - } else if (VAR_TYPE.LONG.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.LONG); - } else if (VAR_TYPE.UNSIGNED_LONG.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.UNSIGNED_LONG); - } else if (VAR_TYPE.FLOAT.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.FLOAT); - } else if (VAR_TYPE.DOUBLE.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.DOUBLE); - } else if (VAR_TYPE.LONG_DOUBLE.getName().equals(type.getName())) { - valueInfo.setType(VAR_TYPE.LONG_DOUBLE); - } else { - valueInfo.setType(VAR_TYPE.UNDEF); - } - } - } - - private static InteractiveInfo getVariableInfo(Collection variables, String varName, ILineEntry line, - boolean isLocal, IFunctionScope funcScope) { - Iterator iterVar = variables.iterator(); - while (iterVar.hasNext()) { - IVariable var = iterVar.next(); - if (var.getName().equals(varName)) { - InteractiveInfo variableInfo = new InteractiveInfo(); - variableInfo.setVariableID(InteractiveInfo.CHECK_BEFORE_LINE, InteractiveIDGenerator.generateID()); - variableInfo.setVariableID(InteractiveInfo.CHECK_AFTER_LINE, InteractiveIDGenerator.generateID()); - variableInfo.setVariableName(var.getName()); - variableInfo.setSourceLineAddress(InteractiveInfo.CHECK_BEFORE_LINE, line.getLowAddress().getValue() - .longValue()); - variableInfo.setSourceLineAddress(InteractiveInfo.CHECK_AFTER_LINE, line.getHighAddress().getValue() - .longValue()); - variableInfo.setFunctionName(funcScope.getName()); - getTypeInfo(var.getType(), funcScope, variableInfo); - if (setVariableLocationInfo(var.getLocationProvider(), variableInfo, isLocal, funcScope)) { - return variableInfo; - } else { - Logger.warning("Get Location error!!!"); - } - } - } - return null; - } - - private static InteractiveInfo checkLexicalBlock(IScope lexicalScope, String varName, ILineEntry line, - IFunctionScope funcScope) { - if (lexicalScope instanceof LexicalBlockScope) { - if (line.getLowAddress().compareTo(lexicalScope.getHighAddress()) < 0 - && line.getLowAddress().compareTo(lexicalScope.getLowAddress()) >= 0) { - Collection variables = ((ILexicalBlockScope) lexicalScope).getVariablesInTree(); - return getVariableInfo(variables, varName, line, true, funcScope); - } - } - return null; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/VAR_TYPE.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/VAR_TYPE.java deleted file mode 100644 index 9844268..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/model/VAR_TYPE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.model; - -public enum VAR_TYPE { - UNDEF, - CHAR("char"), - UNSIGNED_CHAR("unsigned char"), - SIGNED_CHAR("signed char"), - INT("int"), - UNSIGNED_INT("unsigned int"), - SHORT("short"), - UNSIGNED_SHORT("unsigned short"), - LONG("long"), - UNSIGNED_LONG("unsigned long"), - FLOAT("float"), - DOUBLE("double"), - LONG_DOUBLE("long double"), - POINTER, - ARRAY, - STRUCT("struct"); - - final private String name; - - private VAR_TYPE() { - this.name = ""; - } - - private VAR_TYPE(String name) { - this.name = name; - } - - public String getName() { - return name; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTable.java deleted file mode 100644 index dbbeca6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTable.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.table; - -import java.sql.ResultSet; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.eclipse.nebula.widgets.grid.Grid; -import org.eclipse.nebula.widgets.grid.GridColumn; -import org.eclipse.nebula.widgets.grid.GridItem; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.model.FilterProperty; -import org.tizen.dynamicanalyzer.model.TreeInput; -import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveUIData; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveValue; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; -import org.tizen.dynamicanalyzer.utils.Formatter; - -public class InteractiveTable extends DATreeComposite { - private InteractiveInfo interactiveInfo; - private Map beforeExpandMap; - - public InteractiveTable(Composite parent, int compStyle, int tableStyle) { - super(parent, compStyle, tableStyle); - - table.addSelectionListener(new SelectionListener() { - @Override - public void widgetSelected(SelectionEvent e) { - GridItem[] ti = ((Grid) e.widget).getSelection(); - if (null == ti || ti.length == 0) { - return; - } - int size = ti.length; - List startData = ((DATableDataFormat) ti[0].getData()).getData(); - List endData = ((DATableDataFormat) ti[size - 1].getData()).getData(); - long startTime = (Long) startData.get(0); - long endTime = (Long) endData.get(0); - - // Only handle Last selection item. - DASelectionData data = new DASelectionData(InteractivePage.listViewID, startTime, endTime, ti[size - 1], table); - AnalyzerManager.getCurrentPage().updateView(data); - // Relieve multi selection. - table.setSelection(((Grid) e.widget).getSelectionIndices()[((Grid) e.widget).getSelectionCount() - 1]); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - } - - @Override - public void setColumns(String[] columnNames) { - this.columnNames = columnNames; - int size = columnNames.length; - for (int i = 0; i < size; i++) { - GridColumn column = new GridColumn(table, SWT.NONE); - column.setText(columnNames[i]); - if (isTree && i == 0) { - column.setTree(true); - } - column.setCellRenderer(new InteractiveTableCellRenderer()); - column.setHeaderRenderer(new DATableHeaderRenderer()); - - if (columnAlignment != null) { - if (columnAlignment.length > i) { - column.setAlignment(columnAlignment[i]); - } - } - - column.pack(); - - if (null != comparator && null != sortTypes) { - final int type = sortTypes[i]; - // final int sourceColumn = sourceColumns[i]; - final int columnIndex = i; - - column.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - comparator.setType(type); - comparator.setColumn(columnIndex); - // comparator.setSourceColumn(sourceColumn); - comparator.reverseDirection(); - updateTable(); - } - }); - } - } - } - - public void setInteractiveInfo(InteractiveInfo interactiveInfo) { - this.interactiveInfo = interactiveInfo; - } - - public void updateTree(long startTime, long endTime) { - GridItem[] items = table.getItems(); - if (items != null) { - List selectionList = new ArrayList(); - for (int i = 0; i < items.length; i++) { - GridItem item = items[i]; - long time = (Long) ((DATableDataFormat) (item.getData())).getData().get(0); - if (startTime <= time && time <= endTime) { - selectionList.add(i); - } - } - int[] sels = new int[selectionList.size()]; - for (int i = 0; i < selectionList.size(); i++) { - sels[i] = selectionList.get(i); - } - table.setSelection(sels); - } - updateTree(); - } - - @Override - public void updateTree() { - beforeExpandMap = (Map) getExpandMap().clone(); - super.updateTree(); - } - - @Override - public List makeTreeInput() { - if (interactiveInfo == null) { - return null; - } - ResultSet rs = InteractiveDataManager.getInstance().getValueDataFromDB(interactiveInfo); - if (rs == null) { - return null; - } - // Key : variableID - Map> valueInfoMap = InteractiveDataManager.getInstance().makeInteractiveValueMap( - rs); - if (valueInfoMap == null) { - return null; - } - - List beforeUIDataList = new ArrayList(); - List afterUIDataList = new ArrayList(); - boolean result = InteractiveDataManager.getInstance().makeInteractiveUIData(interactiveInfo, valueInfoMap, - beforeUIDataList, afterUIDataList); - if (result) { - List parsedUIDataList = new ArrayList(); - parsedUIDataList.addAll(beforeUIDataList); - parsedUIDataList.addAll(afterUIDataList); - - long tableID = 0; - Collections.sort(parsedUIDataList); - List filterList = getFilterPropertyList(); - List output = new ArrayList(); - for (int i = 0; i < parsedUIDataList.size(); i++) { - InteractiveUIData valueData = parsedUIDataList.get(i); - if (valueData != null) { - tableID = setUIDataID(valueData, tableID); - TreeInput valueInput = makeInput(valueData, valueData.getTime(), false); - boolean isChildAdded = makeChildTree(valueData, valueInput, valueData.getTime(), valueData.getName(), filterList); - if (isChildAdded || checkFilter(valueInput, filterList)) { - output.add(valueInput); - } - } else { - output.add(null); - } - } - return output; - } - return null; - } - - @Override - protected GridItem checkExpand(GridItem gridItem, DATableDataFormat gridData) { - long seq = gridData.getSelectionKey(); - Object expand = beforeExpandMap.get(seq); - if (null == expand) { - if (gridItem.getParent() == null) { - gridItem.setExpanded(true); - getExpandMap().put(seq, true); - } else { - gridItem.setExpanded(false); - getExpandMap().put(seq, false); - } - } else { - gridItem.setExpanded((Boolean) expand); - } - return gridItem; - } - - private TreeInput makeInput(InteractiveUIData input, long time, boolean isChild) { - if (input == null) { - return null; - } - - // table data - DATableDataFormat tableData = new DATableDataFormat(input.getTableRowID()); - tableData.setObject(input); - - List text = new ArrayList(); - - if (isChild) { - text.add(input.getName()); - } else { - String strTime = Formatter.toTimeFormat(input.getTime()); - text.add(strTime + " / " + input.getName()); - } - text.add(input.getType()); - if (input.getValue() != null) { - text.add(input.getValue().toString()); - } - - TreeInput output = new TreeInput(); - output.setText(text); - tableData.getData().add(time); - tableData.setType(AnalyzerConstants.TYPE_TABLE_INTERACTIVE); - output.setData(tableData); - return output; - } - - private boolean checkFilter(TreeInput input, List filterList) { - if (filterList.isEmpty()) { - return true; - } - List textList = input.getText(); - for (int i = 0; i < filterList.size(); i++) { - FilterProperty prop = filterList.get(i); - if (textList.get(prop.getColumnIndex()).contains(prop.getKeyWord()) == false) { - return false; - } - } - return true; - } - - private boolean makeChildTree(InteractiveUIData parentData, TreeInput parentInput, long time, String parentName, List filterList) { - boolean isChildAdded = false; - List children = parentData.getChildren(); - if (children == null) { - return isChildAdded; - } - for (int i = 0; i < children.size(); i++) { - InteractiveUIData data = children.get(i); - if (data == null) { - continue; - } - if (parentData.isArray()) { - data.setName("[" + i + "]"); - } - TreeInput input = makeInput(data, time, true); - boolean isGrandChildAdded = makeChildTree(data, input, time, data.getName(), filterList); - if (isGrandChildAdded || checkFilter(input, filterList)) { - parentInput.getChildren().add(input); - input.setParent(parentName); - isChildAdded = true; - } - } - return isChildAdded; - } - - private long setUIDataID(InteractiveUIData uiData, long tableRowID) { - uiData.setTableRowID(tableRowID++); - if (uiData.getChildren() != null) { - for (int i = 0; i < uiData.getChildren().size(); i++) { - if (uiData.getChildren().get(i) == null) { - continue; - } - tableRowID = setUIDataID(uiData.getChildren().get(i), tableRowID); - } - } - return tableRowID; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableCellRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableCellRenderer.java deleted file mode 100644 index ec1d8b5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableCellRenderer.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.table; - -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.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveUIData; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.util.Logger; - -public class InteractiveTableCellRenderer extends DATableCellRenderer { - @Override - public void setTree(boolean tree) { - super.setTree(tree); - if (tree) { - toggleRenderer = new InteractiveTableToggleRenderer(); - toggleRenderer.setDisplay(getDisplay()); - } - } - - @Override - public void paint(GC gc, Object value) { - GridItem item = (GridItem) value; - - gc.setFont(item.getFont(getColumn())); - - boolean drawAsSelected = isSelected(); - - boolean drawBackground = true; - - if (isCellSelected()) { - drawAsSelected = true; - } - - if (drawAsSelected) { - gc.setForeground(ColorResources.TABLE_CONTENTS_SELECTED_START); - gc.setBackground(ColorResources.TABLE_CONTENTS_SELECTED_START); - } else { - if (item.getParent().isEnabled()) { - Color bg = item.getBackground(); - if (bg != null) { - gc.setBackground(bg); - } else { - drawBackground = false; - } - } 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 (isTree()) { - x += getToggleIndent(item); - - if (drawAsSelected) { - toggleRenderer.setSelected(true); - } else { - toggleRenderer.setSelected(false); - } - toggleRenderer.setExpanded(item.isExpanded()); - - toggleRenderer.setHover(getHoverDetail().equals("toggle")); //$NON-NLS-1$ - - toggleRenderer.setLocation(getBounds().x + x, - (getBounds().height - toggleRenderer.getBounds().height) - / 2 + getBounds().y); - toggleRenderer.paint(gc, item); - - x += toggleRenderer.getBounds().width + insideMargin; - } - - Image image = item.getImage(getColumn()); - if (image != null) { - int y = getBounds().y; - y += (getBounds().height - image.getBounds().height) / 2; - gc.drawImage(image, getBounds().x + x, y); - x += image.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.TABLE_CONTENTS_SELECTED_FONT_COLOR); - } else { - DATableDataFormat tableData = (DATableDataFormat) item.getData(); - InteractiveUIData uiData = (InteractiveUIData) tableData.getObject(); - Color cellColor = ColorResources.TABLE_CONTENTS_FONT_COLOR; - int checkLocation = uiData.getCheckLocation(); - if (checkLocation == InteractiveInfo.CHECK_BEFORE_LINE) { - cellColor = ColorResources.SERIES_COLOR_INTERACTIVE_BEFORE; - } else if (checkLocation == InteractiveInfo.CHECK_AFTER_LINE) { - cellColor = ColorResources.SERIES_COLOR_INTERACTIVE_AFTER; - } else { - Logger.error("Impossible case!!"); - } - gc.setForeground(cellColor); - } - gc.setFont(FontResources.TABLE_CELL_FONT); - if (isTree() && getColumn() != 0) { - gc.drawText(text, getBounds().x + x, getBounds().y + textTopMargin, - true); - } else if (!isTree() || getColumn() != 0) { - gc.drawText(text, getBounds().x + x, getBounds().y + textTopMargin, - true); - } - if (item.getParent().getLinesVisible()) { - gc.setForeground(ColorResources.TABLE_LINE); - gc.drawLine(getBounds().x, getBounds().y + getBounds().height, - getBounds().x + getBounds().width - 1, getBounds().y - + getBounds().height); - gc.drawLine(getBounds().x + getBounds().width - 1, getBounds().y, - getBounds().x + getBounds().width - 1, getBounds().y - + getBounds().height); - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableToggleRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableToggleRenderer.java deleted file mode 100644 index 56f5581..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableToggleRenderer.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.table; - -import org.eclipse.nebula.widgets.grid.GridItem; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -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.interactive.data.InteractiveUIData; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableToggleRenderer; -import org.tizen.dynamicanalyzer.util.Logger; - -public class InteractiveTableToggleRenderer extends DATableToggleRenderer { - public void paint(GC gc, Object value) { - GridItem item = (GridItem) value; - DATableDataFormat tableData = (DATableDataFormat) item.getData(); - - Font font = item.getFont(0); - if (null == font) { - gc.setFont(FontResources.TABLE_CELL_FONT); - } else { - gc.setFont(font); - } - - InteractiveUIData uiData = (InteractiveUIData) tableData.getObject(); - String text = item.getText(0); - - Color cellColor = ColorResources.TABLE_CONTENTS_FONT_COLOR; - int checkLocation = uiData.getCheckLocation(); - if (checkLocation == InteractiveInfo.CHECK_BEFORE_LINE) { - cellColor = ColorResources.SERIES_COLOR_INTERACTIVE_BEFORE; - } else if (checkLocation == InteractiveInfo.CHECK_AFTER_LINE) { - cellColor = ColorResources.SERIES_COLOR_INTERACTIVE_AFTER; - } else { - Logger.error("Impossible case!!"); - } - - if (item.hasChildren()) { - if (isExpanded()) { - Rectangle r = ImageResources.TREE_OPEN.getBounds(); - int offset = (getBounds().width - r.width) / 2; - int x = getBounds().x + offset; - gc.drawImage(ImageResources.TREE_OPEN, x, getBounds().y); - x += r.width + 5; - if (isSelected()) { - gc.setForeground(ColorResources.TABLE_CONTENTS_SELECTED_FONT_COLOR); - } else { - gc.setForeground(cellColor); - } - gc.drawText(text, x, getBounds().y, true); - } else { - Rectangle r = ImageResources.TREE_FOLD.getBounds(); - int offset = (getBounds().width - r.width) / 2; - int x = getBounds().x + offset; - gc.drawImage(ImageResources.TREE_FOLD, getBounds().x + offset, - getBounds().y); - x += r.width + 5; - if (isSelected()) { - gc.setForeground(ColorResources.TABLE_CONTENTS_SELECTED_FONT_COLOR); - } else { - gc.setForeground(cellColor); - } - gc.drawText(text, x, getBounds().y, true); - } - } else { - Rectangle r = ImageResources.TREE_OPEN.getBounds(); - int offset = (getBounds().width - r.width) / 2; - int x = getBounds().x + offset; - x += r.width; - if (isSelected()) { - gc.setForeground(ColorResources.TABLE_CONTENTS_SELECTED_FONT_COLOR); - } else { - gc.setForeground(cellColor); - } - gc.drawText(text, x, getBounds().y, true); - } - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableView.java deleted file mode 100644 index e9387da..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/interactive/table/InteractiveTableView.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * 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.interactive.table; - -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.model.ColumnData; -import org.tizen.dynamicanalyzer.nl.InteractivePageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.ui.interactive.model.InteractiveInfo; -import org.tizen.dynamicanalyzer.ui.widgets.DAAdvancedViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; - -public class InteractiveTableView extends DAAdvancedViewComposite { - public static final String ID = InteractiveTableView.class.getName(); - protected InteractiveTable treeComp = null; - protected List columnData = null; - - protected String[] columnNames = { - InteractivePageLabels.INTERACTIVE_TABLE_TIME, - InteractivePageLabels.INTERACTIVE_TABLE_TYPE, - InteractivePageLabels.INTERACTIVE_TABLE_VALUE }; - protected int[] columnSizes = { 200, 150, 0 }; - private int[] columnAlignment = { SWT.LEFT, SWT.RIGHT, SWT.LEFT}; - protected boolean[] columnVisibility = { true, true, true }; - protected int[] sortTypes = { AnalyzerConstants.SORT_TYPE_GRID, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NONE, - AnalyzerConstants.SORT_TYPE_NONE }; - - public InteractiveTableView(Composite parent, int style) { - super(parent, style, true, true); - this.setLayout(new FillLayout()); - - setTitle(InteractivePageLabels.INTERACTIVE_TABLE_VIEW_TITLE); - - Composite contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - contents.setLayout(new FillLayout()); - treeComp = new InteractiveTable(contents, SWT.NONE, SWT.MULTI - | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - /*** setTree set first!!! ***/ - treeComp.setTree(true); - treeComp.setSortTypes(sortTypes); - treeComp.setColumnAlignment(columnAlignment); - treeComp.setColumns(columnNames); - treeComp.setColumnSize(columnSizes); - treeComp.setColumnVisibility(columnVisibility); - treeComp.setTableToolTipEnable(false); - setTable(treeComp); - } - - @Override - public void updateView() { - treeComp.updateTree(); - } - - @Override - public void updateView(DAViewData data) { - if (data instanceof DASelectionData) { - DASelectionData selData = (DASelectionData) data; - - long start = selData.getStartTime(); - long end = selData.getEndTime(); - - if (data.getData() instanceof InteractiveInfo) { - setTitle(((InteractiveInfo)data.getData()).getDescription()); - treeComp.setInteractiveInfo((InteractiveInfo)data.getData()); - treeComp.updateTree(start, end); - } else { - treeComp.deselectAll(); - } - } - } - - @Override - public void clear() { - treeComp.clear(); - } - - @Override - public Control getControl() { - return treeComp; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java deleted file mode 100644 index f12c63e..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * 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.ui.kernel; - -import java.util.HashMap; -import java.util.List; - -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.nl.KernelPageLabels; -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.kernel.data.FunctionDataDBTable; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataMaker; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataManager; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.widgets.DADefaultChartBoard; -import org.tizen.dynamicanalyzer.util.Logger; -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.DAChartBoardHeightChangeableItem; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItemList; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; - -public class CallFlowChart extends DADefaultChartBoard { - private KernelDataPerThread selectedData = null; - private boolean dirty = false; - private final KernelDataMaker dataMaker = KernelDataManager.getInstance() - .getDataMaker(); - private HashMap seriesMap = null; - - public CallFlowChart(Composite parent, String title) { - super(parent, title); - } - - public CallFlowChart(Composite parent, String title, int[] scaleValues) { - super(parent, title, scaleValues); - } - - public CallFlowChart(Composite parent, String title, int boardStyle) { - super(parent, title, boardStyle); - } - - @Override - protected void callBackScaleChanged() { - updateChart(); - super.callBackScaleChanged(); - } - - @Override - protected void callBackScrollChanged() { - updateChart(); - super.callBackScrollChanged(); - } - - @Override - protected void callBackSizeChanged() { - layout(true, true); - updateChart(); - super.callBackSizeChanged(); - } - - public void itemListClear() { - DAChartBoardItemList itemList = getItemList(); - itemList.clear(); - itemList.setSize(0, 0); - - if (null != selectItem) { - selectItem = null; - } - } - - public void setSelectedData(KernelDataPerThread data) { - selectedData = data; - dirty = true; - } - - public void updateChart() { - // remove all previous items - if (dirty) { - itemListClear(); - if (seriesMap != null) { - seriesMap.clear(); - seriesMap = null; - } - } - - if (selectedData == null) { - redraw(); - update(); - return; - } - - if (dirty) { - // get data from db - List> funcnames = dataMaker - .getFuncnameFromDB(selectedData.getTid()); - int fsize = funcnames.size(); - - // create board item for these functions - DAChartBoardHeightChangeableItem funcItem = new DAChartBoardHeightChangeableItem( - this, KernelPageLabels.CALL_FLOW_BOARD_NAME_TID + " " - + selectedData.getTid()); - initCallflowChart(funcItem, fsize); - - seriesMap = new HashMap(fsize * 2); - DAChart funcChart = funcItem.getChart(); - for (int i = 0; i < fsize; i++) { - String funcname = (String) funcnames.get(i).get(0); - DAChartSeries funcseries = new DAChartSeries(funcname, -1, - ColorResources.RED, true); - funcChart.addSeries(funcseries); - funcseries.setData(new Integer(i)); - seriesMap.put(funcname, funcseries); - } - - dirty = false; - } - - drawChart(); - } - - private void drawChart() { - if (selectedData == null) { - return; - } - - // get data from database and add new item to series - long starttime = (long) (getVisibleStartTime() * TimelineConstants.MEGA_DOUBLE); - long endtime = (long) (getVisibleEndTime() * TimelineConstants.MEGA_DOUBLE); - - List> functionData = dataMaker.getFunctionDataFromDB( - starttime, endtime, selectedData.getTid()); - if (functionData == null || functionData.isEmpty()) { - return; - } - - int fsize = functionData.size(); - ContextSwitchingChartSeriesItem prevItem = null; - int prevSeriesNum = -1; - - for (int i = 0; i < fsize; i++) { - List idata = functionData.get(i); - int funcId = (Integer) idata - .get(FunctionDataDBTable.COLUMN.FUNCID.index); - String funcname = Global.getFunctionName(funcId); - double funcStart = (double) ((Long) idata - .get(FunctionDataDBTable.COLUMN.STARTTIME.index)) - / TimelineConstants.MEGA_DOUBLE; - double funcEnd = (double) ((Long) idata - .get(FunctionDataDBTable.COLUMN.ENDTIME.index)) - / TimelineConstants.MEGA_DOUBLE; - - DAChartSeries funcSeries = seriesMap.get(funcname); - if (funcSeries != null) { - int curSeriesNum = ((Integer) funcSeries.getData()).intValue(); - ContextSwitchingChartSeriesItem curItem = new ContextSwitchingChartSeriesItem( - null, funcStart, funcEnd, ColorResources.RED); - - // for previous function segment - if (prevItem != null && prevSeriesNum != curSeriesNum) { - prevItem.setArrow(curSeriesNum - prevSeriesNum); - } - funcSeries.addSeriesItem(curItem); - - prevItem = curItem; - prevSeriesNum = curSeriesNum; - } else { - Logger.error("Function series is not exist in call flow chart"); - } - } - - // redraw - redraw(); - update(); - } - - private void initCallflowChart(DAChartBoardHeightChangeableItem chartItem, - int itemsize) { - DAChart chart = chartItem.getChart(); - if (null == chart) { - return; - } - - DAChartPlot plot = chart.getPlot(); - if (null == plot) { - return; - } - - chartItem.useExpand(false); - chartItem.setHeightRatio(itemsize * 0.3); - chart.getPlot().setAutoHeightRange(AutoRangeType.MANUAL); - chart.getPlot().setShowAxis(false); - chart.setChartRenderer(new CallFlowChartRenderer()); - - plot.setBackgroundImage(ImageResources.BG_GRADIENT); - - 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(), KernelPage.pageID); - chart.addMouseListener(timelineChartMouseEventListener); - chart.addMouseMoveListener(timelineChartMouseEventListener); - chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter( - getTimeline())); - plot.setMarkers(getMarkers()); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartRenderer.java deleted file mode 100644 index 51f4dc6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartRenderer.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries; -import org.tizen.dynamicanalyzer.widgets.helper.ColorResources; - -public class CallFlowChartRenderer extends ContextSwitchingChartRenderer { - @Override - protected void drawChartSeries(GC gc, DAChartSeries series, - int seriesIndex) { - super.drawChartSeries(gc, series, seriesIndex); - Font oriFont = gc.getFont(); - Font nameAnnotationFont = series.getFont(); - gc.setFont(nameAnnotationFont); - - gc.setForeground(ColorResources.SERIES_NAME_ANNOTATION); - gc.drawText(series.getName(), rect.x + 3, rect.y + rect.height / 2 - - gc.stringExtent(series.getName()).y / 2, true); - - gc.setFont(oriFont); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartView.java deleted file mode 100644 index bfc0042..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChartView.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StackLayout; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.ScrollBar; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.nl.KernelPageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; -import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelSelectionData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardSelectionListener; -import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; -import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; - -public class CallFlowChartView extends DAViewComposite { - private final Composite contents; - private CallFlowChart callflowChart; - private DACustomCombo callflowCombo; - private final StackLayout stackLayout; - - private final RangeDataManager rangeDataManager = RangeDataManager - .getInstance(); - - public CallFlowChartView(Composite parent, int style) { - super(parent, style, false); - this.setLayout(new FillLayout()); - - setTitle(KernelPageLabels.CALL_FLOW_CHART_TITLE); - - contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - stackLayout = new StackLayout(); - contents.setLayout(stackLayout); - callflowChart = new CallFlowChart(contents, - KernelPageLabels.CALL_FLOW_CHART_TITLE, - ContextSwitchingChartView.kernelScaleValue); - callflowChart.setNameFont(FontResources.CHART_NAME_FONT); - callflowChart.addSelectionListener(new DAChartBoardSelectionListener() { - @Override - public void handleSelectionEvent(DAChartBoardItem item) { - AnalyzerManager - .getCurrentPage() - .updateView( - new DASelectionData( - KernelPage.callflowViewID, - (long) (((DAChartPlotIntervalMarker) callflowChart - .getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)) - .getStartVal() * TimelineConstants.MEGA_DOUBLE), - (long) (((DAChartPlotIntervalMarker) callflowChart - .getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)) - .getEndVal() * TimelineConstants.MEGA_DOUBLE), - new Integer(0), null)); - } - }); - - ScrollBar hScrollBar = callflowChart.getHScrollBar(); - hScrollBar.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (callflowChart.isMaximumScrolled()) { - AnalyzerUtil.setLatestTraceMode(KernelPage.pageID, true); - } else { - AnalyzerUtil.setLatestTraceMode(KernelPage.pageID, false); - } - } - }); - - initIntervalMarkers(callflowChart); - - stackLayout.topControl = callflowChart; - callflowCombo = new DACustomCombo(callflowChart.getTitleComp(), - SWT.NONE); - - callflowCombo.setComboGradation( - ColorResources.FRAME_RATE_COMBO_NORMAL_START, - ColorResources.FRAME_RATE_COMBO_NORMAL_END, - ColorResources.FRAME_RATE_COMBO_PUSH_START, - ColorResources.FRAME_RATE_COMBO_PUSH_END, - ColorResources.FRAME_RATE_COMBO_HOVER_START, - ColorResources.FRAME_RATE_COMBO_HOVER_END, - ColorResources.FRAME_RATE_COMBO_DISABLE_START, - ColorResources.FRAME_RATE_COMBO_DISABLE_END); - callflowCombo.setOutlineColors(ColorResources.FRAME_RATE_COMBO_OUTLINE_NORMAL, - ColorResources.FRAME_RATE_COMBO_OUTLINE_PUSH, - ColorResources.FRAME_RATE_COMBO_OUTLINE_HOVER, - ColorResources.FRAME_RATE_COMBO_OUTLINE_DISABLE); - - callflowCombo.add(KernelPageLabels.CALL_FLOW_CHART_TITLE); - callflowCombo.select(0); - callflowCombo.setEnabled(false); - callflowCombo.setTextAlign(DACustomCombo.TEXT_ALIGN_LEFT); - callflowCombo.setComboFont(FontResources.FRAME_RATE_COMBO); - callflowCombo.setFontColors(ColorResources.ADD_CHART_FONT_COLOR, - ColorResources.ADD_CHART_FONT_COLOR, - ColorResources.ADD_CHART_FONT_COLOR, - ColorResources.ADD_CHART_FONT_COLOR); - callflowCombo.setItemFont(FontResources.FRAME_RATE_DROPDOWN); - callflowCombo.setItemFontColor(ColorResources.ADD_CHART_FONT_COLOR); - callflowCombo.setButtonRenderer(new DACustomButtonRenderer()); - - DATimeline timeline = callflowChart.getTimeline(); - - timeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT); - timeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT); - - LifecycleLogParser.getInstance().registerLifecycleBar( - callflowChart.getLifecycleBar()); - LifecycleLogParser.getInstance().registerTimeline(timeline); - } - - @Override - public void updateView() { - callflowChart.updateChart(); - - /* - * In case of Latest status, update visibleStartTime of chartBoard. - * Because Chart should be refreshed automatically even Page change. - */ - if (AnalyzerUtil.isLatestTraceMode(KernelPage.pageID)) { - callflowChart.updateVisibleStartTime(); - callflowChart.setTotalEndTime(Toolbar.INSTANCE.getTime(), true); - } else { - // set chart end time - callflowChart.setTotalEndTime(Toolbar.INSTANCE.getTime(), false); - } - - RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - if (rangeDataManager.isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) callflowChart.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(rangeDataManager.getAnalysisStartTime() - / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() - / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) callflowChart.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) callflowChart.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) { - DASelectionData selData = (DASelectionData) data; - - Object odata = selData.getData(); - long selectionStartTime, selectionEndTime; - - if (!(odata instanceof KernelSelectionData)) { - selectionStartTime = selData.getStartTime(); - selectionEndTime = selData.getEndTime(); - - double startTime = (double) selectionStartTime - / TimelineConstants.MEGA_DOUBLE; - double endTime = (double) selectionEndTime - / TimelineConstants.MEGA_DOUBLE; - - DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl; - - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard - .getMarkers().get( - UICommonConstants.SELECTION_MARKER_INDEX); - intervalMarker.setInterval(startTime, endTime); - } else { - KernelSelectionData sdata = (KernelSelectionData) odata; - callflowChart.setSelectedData(sdata.getData()); - callflowChart.updateChart(); - } - } - } - - @Override - public void clear() { - callflowChart.clear(); - initIntervalMarkers(callflowChart); - } - - @Override - public Control getControl() { - return callflowChart; - } - - 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); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java deleted file mode 100644 index 20dd41b..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java +++ /dev/null @@ -1,380 +0,0 @@ -/* - * 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.ui.kernel; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.nl.KernelPageLabels; -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.kernel.data.ContextDataDBTable; -import org.tizen.dynamicanalyzer.ui.kernel.data.FunctionDataDBTable; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataMaker; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataManager; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThreadComparator; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelSelectionData; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.widgets.DADefaultChartBoard; -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.DAChartBoardHeightChangeableItem; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItemList; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; - -public class ContextSwitchingChart extends DADefaultChartBoard { - public static final String KERNEL_CHART_DATA_TYPE = "kernel_data_type"; - - private final KernelDataMaker dataMaker = KernelDataManager.getInstance().getDataMaker(); - - private int savedSelectedPid = 0; - - public ContextSwitchingChart(Composite parent, String title) { - super(parent, title); - } - - public ContextSwitchingChart(Composite parent, String title, int[] scaleValues) { - super(parent, title, scaleValues); - } - - public ContextSwitchingChart(Composite parent, String title, int boardStyle) { - super(parent, title, boardStyle); - } - - @Override - protected void callBackScaleChanged() { - updateChart(); - super.callBackScaleChanged(); - } - - @Override - protected void callBackScrollChanged() { - updateChart(); - super.callBackScrollChanged(); - } - - @Override - protected void callBackSizeChanged() { - layout(true, true); - updateChart(); - super.callBackSizeChanged(); - } - - public void updateChart() { - List threads = dataMaker.getThreadData(); - int thread_size = threads.size(); - boolean isDirty = false; - - for (int i = 0; i < thread_size; i++) { - KernelDataPerThread kdata = threads.get(i); - DAChartBoardItem bitem = kdata.getContextChart(); - if (bitem == null) { - // create board item for this thread context - DAChartBoardHeightChangeableItem coreItem = new DAChartBoardHeightChangeableItem( - this, getChartName(kdata)); - initContextSwitchChart(coreItem, true); - - DAChart coreChart = coreItem.getChart(); - DAChartSeries coreSeries = new DAChartSeries( - KernelPageLabels.CONTEXT_SWITCH_SERIES_NAME, -1, ColorResources.BLUE); - coreChart.addSeries(coreSeries); - - coreItem.setData(new KernelSelectionData(kdata, - KernelSelectionData.KERNEL_DATA_TYPE_CONTEXTSWITCH)); - kdata.setContextChart(coreItem); - isDirty = true; - } else { - // delete previous drawing items - DAChartSeries series = bitem.getChart().getSeries(0); - if (series != null) { - series.clear(); - } - } - - bitem = kdata.getFunctionChart(); - if (kdata.getFunclog() != null && bitem == null) { - // create board item for function - DAChartBoardHeightChangeableItem functionItem = new DAChartBoardHeightChangeableItem( - kdata.getContextChart(), - KernelPageLabels.CONTEXT_SWITCH_BOARD_NAME_FUNC_CHILD); - initContextSwitchChart(functionItem, false); - - DAChart functionChart = functionItem.getChart(); - DAChartSeries functionSeries = new DAChartSeries( - KernelPageLabels.CONTEXT_SWITCH_SERIES_NAME_CHILD, -1, ColorResources.RED); - functionChart.addSeries(functionSeries); - - functionItem.setData(new KernelSelectionData(kdata, - KernelSelectionData.KERNEL_DATA_TYPE_FUNCTIONCALL)); - kdata.setFunctionChart(functionItem); - } else if (bitem != null) { - // delete previous drawing items - DAChartSeries series = bitem.getChart().getSeries(0); - if (series != null) { - series.clear(); - } - } - } - - // rearrange items - if (isDirty) { - rearrangeChart(); - } - - // filtering by pid - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (isDirty || savedSelectedPid != selectedPid) { - DAChartBoardItemList itemlist = getItemList(); - thread_size = itemlist.getItemSize(); - for (int i = 0; i < thread_size; i++) { - if (selectedPid != 0) { - DAChartBoardItem item = itemlist.get(i); - KernelSelectionData seldata = (KernelSelectionData) item.getData(); - if (seldata.getData().getPid() == selectedPid) { - showItem(i); - } else { - hideItem(i); - } - } else { - showItem(i); - } - } - savedSelectedPid = selectedPid; - } - - // get data from database and add new item to series - long starttime = (long) (getVisibleStartTime() * TimelineConstants.MEGA_DOUBLE); - long endtime = (long) (getVisibleEndTime() * TimelineConstants.MEGA_DOUBLE); - - List> contextData = dataMaker.getContextDataFromDB(starttime, endtime); - List> functionData = dataMaker.getFunctionDataFromDB(starttime, endtime, -1); - if (contextData != null) { - int csize = contextData.size(); - for (int i = 0; i < csize; i++) { - List idata = contextData.get(i); - int tid = (Integer) idata.get(ContextDataDBTable.COLUMN.TID.index); - int cpunum = (Integer) idata.get(ContextDataDBTable.COLUMN.CPUNUM.index); - double contextStart = (double) ((Long) idata - .get(ContextDataDBTable.COLUMN.STARTTIME.index)) - / TimelineConstants.MEGA_DOUBLE; - double contextEnd = (double) ((Long) idata - .get(ContextDataDBTable.COLUMN.ENDTIME.index)) - / TimelineConstants.MEGA_DOUBLE; - - DAChartBoardItem coreItem = findCoreBoardItem(threads, tid); - assert (coreItem != null); - DAChartSeries coreSeries = coreItem.getChart().getSeries(0); - - if (coreSeries != null) { - coreSeries.addSeriesItem(new ContextSwitchingChartSeriesItem( - KernelPageLabels.CONTEXT_SWITCH_SERIES_ITEM_NAME + " " - + Integer.toString(cpunum), contextStart, contextEnd)); - } - } - } - - if (functionData != null) { - int fsize = functionData.size(); - for (int i = 0; i < fsize; i++) { - List idata = functionData.get(i); - int tid = (Integer) idata.get(FunctionDataDBTable.COLUMN.TID.index); - int funcId = (Integer) idata.get(FunctionDataDBTable.COLUMN.FUNCID.index); - String funcname = Global.getFunctionName(funcId); - double funcStart = (double) ((Long) idata - .get(FunctionDataDBTable.COLUMN.STARTTIME.index)) - / TimelineConstants.MEGA_DOUBLE; - double funcEnd = (double) ((Long) idata - .get(FunctionDataDBTable.COLUMN.ENDTIME.index)) - / TimelineConstants.MEGA_DOUBLE; - int type = (Integer) idata.get(FunctionDataDBTable.COLUMN.STARTTYPE.index) - + (Integer) idata.get(FunctionDataDBTable.COLUMN.ENDTYPE.index); - - DAChartBoardItem functionItem = findFunctionBoardItem(threads, tid); - assert (functionItem != null); - DAChartSeries funcSeries = functionItem.getChart().getSeries(0); - if (funcSeries != null) { - int style; - switch (type) { - case 21: - case 31: - style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON_LEFT_ONLY; - break; - case 12: - case 13: - style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON_RIGHT_ONLY; - break; - case 22: - case 32: - case 23: - case 33: - style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON; - break; - case 11: - default: - style = ContextSwitchingChartSeriesItem.STYLE_SQUARE; - break; - } - - funcSeries.addSeriesItem(new ContextSwitchingChartSeriesItem(funcname, - funcStart, funcEnd, style)); - } - } - } - - // redraw chart - redraw(); - update(); - } - - private String getChartName(KernelDataPerThread data) { - String name = KernelPageLabels.CONTEXT_SWITCH_BOARD_NAME_PID + " " + data.getPid() + "\n" - + KernelPageLabels.CONTEXT_SWITCH_BOARD_NAME_TID + " " + data.getTid(); - return name; - } - - private DAChartBoardItem findCoreBoardItem(List threads, int tid) { - int size = threads.size(); - for (int i = 0; i < size; i++) { - if (threads.get(i).getTid() == tid) - return threads.get(i).getContextChart(); - } - - return null; - } - - private DAChartBoardItem findFunctionBoardItem(List threads, int tid) { - int size = threads.size(); - for (int i = 0; i < size; i++) { - if (threads.get(i).getTid() == tid) - return threads.get(i).getFunctionChart(); - } - - return null; - } - - private void rearrangeChart() { - DAChartBoardItemList itemList = getItemList(); - int listsize = itemList.getItemSize(); - - TreeMap sortedmap = new TreeMap( - new KernelDataPerThreadComparator()); - - for (int i = 0; i < listsize; i++) { - DAChartBoardItem item = itemList.get(i); - KernelDataPerThread gdata = ((KernelSelectionData) item.getData()).getData(); - sortedmap.put(gdata, i); - } - - Map.Entry entry; - ArrayList arranged = new ArrayList(); - while ((entry = sortedmap.pollFirstEntry()) != null) { - arranged.add(entry.getValue()); - } - - reArrangeItem(arranged.toArray(new Integer[listsize])); - } - - private void initContextSwitchChart(DAChartBoardHeightChangeableItem chartItem, boolean isParent) { - DAChart chart = chartItem.getChart(); - if (null == chart) { - return; - } - - DAChartPlot plot = chart.getPlot(); - if (null == plot) { - return; - } - - chartItem.useExpand(false); - chartItem.setHeightRatio(1); - chart.getPlot().setAutoHeightRange(AutoRangeType.MANUAL); - chart.getPlot().setShowAxis(false); - chart.setChartRenderer(new ContextSwitchingChartRenderer()); - - if (isParent) { - plot.setBackgroundImage(ImageResources.BG_GRADIENT); - } else { - plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT); - } - - 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(), KernelPage.pageID); - chart.addMouseListener(timelineChartMouseEventListener); - chart.addMouseMoveListener(timelineChartMouseEventListener); - chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(getTimeline())); - plot.setMarkers(getMarkers()); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartRenderer.java deleted file mode 100644 index 90dd0b3..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartRenderer.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * 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.ui.kernel; - -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Rectangle; -import org.tizen.dynamicanalyzer.widgets.chart.DAChart; -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 ContextSwitchingChartRenderer extends DAChartRenderer { - private static final int ARC = 6; - protected Rectangle rect; - - @Override - protected void drawToGc(GC gc, DAChart chart) { - if (!preDraw(gc, chart)) { - return; - } - - for (int i = 0; i < seriesList.size(); i++) { - drawChartSeries(gc, seriesList.get(i), i); - } - - for (int i = 0; i < seriesList.size(); i++) { - drawChartSeriesArrow(gc, seriesList.get(i), i); - } - - drawAxis(gc); - } - - protected void drawChartSeries(GC gc, DAChartSeries series, int seriesIndex) { - int seriesSize = seriesList.size(); - rect = new Rectangle(r.x, r.y + r.height * seriesIndex / seriesSize, - r.width, r.height / seriesSize); - - if (seriesIndex != 0) { - gc.setForeground(ColorResources.CHART_SEPERATE_LINE); - gc.drawLine(rect.x, r.height * seriesIndex / seriesSize, - rect.width, r.height * seriesIndex / seriesSize); - } - - List seriesItems = series.getSeriesItemList(); - if (seriesItems == null) { - return; - } - int seriesItemSize = seriesItems.size(); - if (seriesItemSize < 1) { - return; - } - - Color seriesColor = series.getColor(); - gc.setForeground(seriesColor); - gc.setLineStyle(SWT.LINE_SOLID); - gc.setAntialias(SWT.ON); - - int index = series.getPrevIndexByXvalue(plot.getVisibleStartX()); - if (index < 0) { - index = 0; - } - - for (int i = index; i < seriesItemSize; i++) { - if (!drawChartSeriesItem(gc, - (ContextSwitchingChartSeriesItem) seriesItems.get(i), - seriesColor)) { - break; - } - } - } - - private boolean drawChartSeriesItem(GC gc, - ContextSwitchingChartSeriesItem seriesItem, Color seriesColor) { - double x = seriesItem.getX(); - if (x > plot.getVisibleEndX()) { - return false; - } - - double endX = seriesItem.getEndX(); - if(endX == -1) { - endX = plot.getValidEndX(); - } - - int pixelX = plot.getXPixelFromX(x, r); - int pixelEndX = plot.getXPixelFromX(endX, r); - - gc.setBackground(seriesColor); - if (seriesItem.getColor() != null) { - gc.setBackground(seriesItem.getColor()); - } - Color boarderColor = seriesItem.getBorderColor(); - - int leftX = pixelX + ARC; - int rightX = pixelEndX - ARC; - int upperY = rect.y + (int) Math.round((rect.height * 0.1)); - int underY = rect.y + (int) Math.round((rect.height * 0.9)); - int[] points; - - switch (seriesItem.getStyle()) { - case ContextSwitchingChartSeriesItem.STYLE_OCTAGON: - if (leftX > rightX) { - int gap = leftX - rightX; - leftX = leftX - gap / 2; - rightX = rightX + gap / 2; - } - points = new int[] { leftX, upperY, pixelX, upperY + ARC, pixelX, - underY - ARC, leftX, underY, rightX, underY, pixelEndX, - underY - ARC, pixelEndX, upperY + ARC, rightX, upperY }; - gc.fillPolygon(points); - - if (boarderColor != null) { - gc.setForeground(boarderColor); - gc.drawPolygon(points); - } - break; - case ContextSwitchingChartSeriesItem.STYLE_OCTAGON_LEFT_ONLY: - if (leftX > pixelEndX) { - int gap = leftX - pixelEndX; - leftX = leftX - gap; - } - points = new int[] { leftX, upperY, pixelX, upperY + ARC, pixelX, - underY - ARC, leftX, underY, pixelEndX, underY, - pixelEndX, upperY, }; - gc.fillPolygon(points); - - if (boarderColor != null) { - gc.setForeground(boarderColor); - gc.drawPolygon(points); - } - break; - case ContextSwitchingChartSeriesItem.STYLE_OCTAGON_RIGHT_ONLY: - if (rightX < pixelX) { - int gap = pixelX - rightX; - rightX = rightX + gap; - } - points = new int[] { pixelX, upperY, pixelX, underY, rightX, - underY, pixelEndX, underY - ARC, pixelEndX, upperY + ARC, - rightX, upperY }; - gc.fillPolygon(points); - - if (boarderColor != null) { - gc.setForeground(boarderColor); - gc.drawPolygon(points); - } - break; - case ContextSwitchingChartSeriesItem.STYLE_SQUARE: - default: - gc.fillRectangle(pixelX, rect.y + (int) (rect.height * 0.1), - pixelEndX - pixelX, (int) (rect.height * 0.8)); - - if (boarderColor != null) { - gc.setForeground(boarderColor); - gc.drawRectangle(pixelX, rect.y + (int) (rect.height * 0.1), - pixelEndX - pixelX, (int) (rect.height * 0.8)); - } - break; - } - - String name = seriesItem.getName(); - if (name != null) { - int extentX = gc.stringExtent(name).x; - if (extentX < pixelEndX - pixelX) { - gc.setForeground(ColorResources.BLACK); - gc.drawText(name, (pixelEndX + pixelX) / 2 - extentX / 2, - rect.y + rect.height / 2 - gc.stringExtent(name).y / 2, - true); - } - } - - return true; - } - - protected void drawChartSeriesArrow(GC gc, DAChartSeries series, - int seriesIndex) { - int seriesSize = seriesList.size(); - rect = new Rectangle(r.x, r.y + r.height * seriesIndex / seriesSize, - r.width, r.height / seriesSize); - - List seriesItems = series.getSeriesItemList(); - if (seriesItems == null) { - return; - } - int seriesItemSize = seriesItems.size(); - if (seriesItemSize < 1) { - return; - } - - int index = series.getPrevIndexByXvalue(plot.getVisibleStartX()); - if (index < 0) { - index = 0; - } - - for (int i = index; i < seriesItemSize; i++) { - ContextSwitchingChartSeriesItem seriesItem = (ContextSwitchingChartSeriesItem) seriesItems - .get(i); - double x = seriesItem.getX(); - if (x > plot.getVisibleEndX()) { - return; - } - - int pixelEndX = plot.getXPixelFromX(seriesItem.getEndX(), r); - - int arrow = seriesItem.getArrow(); - if (arrow != 0) { - if (seriesItem.getBorderColor() != null) { - gc.setForeground(seriesItem.getBorderColor()); - } - int arrowHeadY = rect.y + rect.height / 2 + rect.height * arrow; - gc.drawLine(pixelEndX, rect.y + rect.height / 2, pixelEndX, - arrowHeadY); - int y = -5; - if (arrow < 0) { - y = 5; - } - gc.drawLine(pixelEndX, arrowHeadY, pixelEndX - 3, arrowHeadY - + y); - gc.drawLine(pixelEndX, arrowHeadY, pixelEndX + 3, arrowHeadY - + y); - } - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartSeriesItem.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartSeriesItem.java deleted file mode 100644 index a59936d..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartSeriesItem.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.graphics.Color; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem; - -public class ContextSwitchingChartSeriesItem extends DAChartSeriesItem { - public static final int STYLE_SQUARE = 0; - public static final int STYLE_OCTAGON = 1; - public static final int STYLE_OCTAGON_LEFT_ONLY = 2; - public static final int STYLE_OCTAGON_RIGHT_ONLY = 3; - - private String name = null; - private int style = STYLE_SQUARE; - private double endX = -1; - private int arrow = 0; - private Color borderColor = null; - - public ContextSwitchingChartSeriesItem(String name, double x) { - super(x, 0); - this.name = name; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, - Color borderColor) { - this(name, x); - this.borderColor = borderColor; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, int arrow, - Color borderColor) { - this(name, x, borderColor); - this.arrow = arrow; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, Color color, - Color borderColor) { - this(name, x, borderColor); - this.color = color; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, int style) { - this(name, x); - this.style = style; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, double endX) { - super(x, 0); - this.endX = endX; - this.name = name; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, double endX, - Color borderColor) { - this(name, x, endX); - this.borderColor = borderColor; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, double endX, - int arrow, Color borderColor) { - this(name, x, endX, borderColor); - this.arrow = arrow; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, double endX, - Color color, Color borderColor) { - this(name, x, endX, borderColor); - this.color = color; - setTooltipText(name); - } - - public ContextSwitchingChartSeriesItem(String name, double x, double endX, - int style) { - this(name, x, endX); - this.style = style; - setTooltipText(name); - } - - public String getName() { - return name; - } - - public int getStyle() { - return style; - } - - public double getEndX() { - return endX; - } - - public void setEndX(double endX) { - this.endX = endX; - } - - public void setStyle(int style) { - this.style = style; - } - - public void setArrow(int arr) { - this.arrow = arr; - } - - public int getArrow() { - return arrow; - } - - public Color getBorderColor() { - return borderColor; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartView.java deleted file mode 100644 index b044052..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChartView.java +++ /dev/null @@ -1,272 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StackLayout; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.ScrollBar; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.nl.KernelPageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; -import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardSelectionListener; -import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; -import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; - -public class ContextSwitchingChartView extends DAViewComposite { - public final static int KERNEL_CHART_HEIGHT = 40; - public final static int KERNEL_COMBO_ITEM_HEIGHT = 24; - - private final Composite contents; - private ContextSwitchingChart contextChart; - private DACustomCombo contextCombo; - private final StackLayout stackLayout; - - public static final int[] kernelScaleValue = new int[] { 100, 200, 400, - 800, 1600 }; - - public ContextSwitchingChartView(Composite parent, int style) { - super(parent, style, false); - this.setLayout(new FillLayout()); - - setTitle(KernelPageLabels.CONTEXT_SWITCH_CHART_TITLE); - - contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - - stackLayout = new StackLayout(); - contents.setLayout(stackLayout); - - contextChart = new ContextSwitchingChart(contents, - KernelPageLabels.CONTEXT_SWITCH_CHART_TITLE, kernelScaleValue); - contextChart.setNameFont(FontResources.CHART_NAME_FONT); - - contextChart.addSelectionListener(new DAChartBoardSelectionListener() { - @Override - public void handleSelectionEvent(DAChartBoardItem item) { - handleSelection(item); - } - }); - - ScrollBar hScrollBar = contextChart.getHScrollBar(); - hScrollBar.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (contextChart.isMaximumScrolled()) { - AnalyzerUtil.setLatestTraceMode(KernelPage.pageID, true); - } else { - AnalyzerUtil.setLatestTraceMode(KernelPage.pageID, false); - } - } - }); - - initIntervalMarkers(contextChart); - - stackLayout.topControl = contextChart; - - contextCombo = new DACustomCombo(contextChart.getTitleComp(), SWT.NONE); - - contextCombo.setComboGradation( - ColorResources.FRAME_RATE_COMBO_NORMAL_START, - ColorResources.FRAME_RATE_COMBO_NORMAL_END, - ColorResources.FRAME_RATE_COMBO_PUSH_START, - ColorResources.FRAME_RATE_COMBO_PUSH_END, - ColorResources.FRAME_RATE_COMBO_HOVER_START, - ColorResources.FRAME_RATE_COMBO_HOVER_END, - ColorResources.FRAME_RATE_COMBO_DISABLE_START, - ColorResources.FRAME_RATE_COMBO_DISABLE_END); - contextCombo.setOutlineColors(ColorResources.FRAME_RATE_COMBO_OUTLINE_NORMAL, - ColorResources.FRAME_RATE_COMBO_OUTLINE_PUSH, - ColorResources.FRAME_RATE_COMBO_OUTLINE_HOVER, - ColorResources.FRAME_RATE_COMBO_OUTLINE_DISABLE); - - contextCombo.add(KernelPageLabels.CONTEXT_SWITCH_CHART_TITLE); - contextCombo.select(0); - contextCombo.setEnabled(false); - contextCombo.setTextAlign(DACustomCombo.TEXT_ALIGN_LEFT); - contextCombo.setComboFont(FontResources.FRAME_RATE_COMBO); - contextCombo.setFontColors(ColorResources.ADD_CHART_FONT_COLOR, - ColorResources.ADD_CHART_FONT_COLOR, - ColorResources.ADD_CHART_FONT_COLOR, - ColorResources.ADD_CHART_FONT_COLOR); - contextCombo.setItemFont(FontResources.FRAME_RATE_DROPDOWN); - contextCombo.setItemFontColor(ColorResources.ADD_CHART_FONT_COLOR); - contextCombo.setButtonRenderer(new DACustomButtonRenderer()); - - DATimeline threadTimeline = contextChart.getTimeline(); - - threadTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT); - threadTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT); - - LifecycleLogParser.getInstance().registerLifecycleBar( - contextChart.getLifecycleBar()); - LifecycleLogParser.getInstance().registerTimeline(threadTimeline); - } - - private void handleSelection(DAChartBoardItem selectItem) { - if (null == selectItem) { - AnalyzerManager - .getCurrentPage() - .updateView( - new DASelectionData( - KernelPage.contextViewID, - (long) (((DAChartPlotIntervalMarker) contextChart - .getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)) - .getStartVal() * TimelineConstants.MEGA_DOUBLE), - (long) (((DAChartPlotIntervalMarker) contextChart - .getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)) - .getEndVal() * TimelineConstants.MEGA_DOUBLE), - new Integer(0), null)); - } else { - AnalyzerManager - .getCurrentPage() - .updateView( - new DASelectionData( - KernelPage.contextViewID, - (long) (((DAChartPlotIntervalMarker) contextChart - .getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)) - .getStartVal() * TimelineConstants.MEGA_DOUBLE), - (long) (((DAChartPlotIntervalMarker) contextChart - .getMarkers() - .get(UICommonConstants.SELECTION_MARKER_INDEX)) - .getEndVal() * TimelineConstants.MEGA_DOUBLE), - selectItem.getData(), null)); - } - } - - @Override - public void updateView() { - contextChart.updateChart(); - - /* - * In case of Latest status, update visibleStartTime of chartBoard. - * Because Chart should be refreshed automatically even Page change. - */ - if (AnalyzerUtil.isLatestTraceMode(KernelPage.pageID)) { - contextChart.updateVisibleStartTime(); - contextChart.setTotalEndTime(Toolbar.INSTANCE.getTime(), true); - } else { - // set chart end time - contextChart.setTotalEndTime(Toolbar.INSTANCE.getTime(), false); - } - - RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - if (rangeDataManager.isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) contextChart.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(rangeDataManager.getAnalysisStartTime() - / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() - / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) contextChart.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) contextChart.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) { - DASelectionData selData = (DASelectionData) data; - - long start = selData.getStartTime(); - long end = selData.getEndTime(); - - double startTime = (double) start / TimelineConstants.MEGA_DOUBLE; - double endTime = (double) end / TimelineConstants.MEGA_DOUBLE; - - DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl; - - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard - .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX); - intervalMarker.setInterval(startTime, endTime); - } - } - - @Override - public void clear() { - contextChart.clear(); - initIntervalMarkers(contextChart); - } - - @Override - public Control getControl() { - return contextChart; - } - - 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); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListTable.java deleted file mode 100644 index acd6408..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListTable.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * 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.ui.kernel; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.nebula.widgets.grid.Grid; -import org.eclipse.nebula.widgets.grid.GridItem; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.database.DBConstants; -import org.tizen.dynamicanalyzer.model.FilterProperty; -import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.ui.kernel.data.ContextDataDBTable; -import org.tizen.dynamicanalyzer.ui.kernel.data.FunctionDataDBTable; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataManager; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.ui.widgets.table.DAWindowingTableComposite; -import org.tizen.dynamicanalyzer.widgets.helper.Formatter; - -public class KernelListTable extends DAWindowingTableComposite { - private KernelDataPerThread selectedData = null; - private boolean isCoreSelected = true; - - public KernelListTable(Composite parent, int compStyle, int tableStyle) { - super(parent, compStyle, tableStyle); - setDataType(0); // timeColumnIdex - setContextMenu(AnalyzerConstants.CONTEXT_TABLE_RANGE); - - table.addSelectionListener(new SelectionListener() { - - @Override - public void widgetSelected(SelectionEvent e) { - GridItem[] ti = ((Grid) e.widget).getSelection(); - if (null == ti || ti.length == 0) { - return; - } - int size = ti.length; - List startData = ((DATableDataFormat) ti[0].getData()).getData(); - List endData = ((DATableDataFormat) ti[size - 1].getData()).getData(); - long startTime = (Long) startData.get(timeColumnIndex); - long endTime = (Long) endData.get(timeColumnIndex); - - DASelectionData data = new DASelectionData(KernelPage.listViewID, startTime, - endTime, ti, table); - AnalyzerManager.getCurrentPage().updateView(data); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - } - - @Override - protected List makeTableInput() { - List input = new ArrayList(); - List> queriedData = getQueriedObjectData(); - if (queriedData == null) { - return null; - } - - int size = queriedData.size(); - for (int i = 0; i < size; i++) { - List row = queriedData.get(i); - List text = new ArrayList(); - long seqnum; - long starttime, endtime, exectime; - if (isCoreSelected) { - seqnum = (Long) row.get(ContextDataDBTable.COLUMN.SEQ.index); - starttime = (Long) row.get(ContextDataDBTable.COLUMN.STARTTIME.index); - endtime = (Long) row.get(ContextDataDBTable.COLUMN.ENDTIME.index); - exectime = endtime - starttime; - text.add(row.get(ContextDataDBTable.COLUMN.SEQ.index).toString()); - text.add(row.get(ContextDataDBTable.COLUMN.PID.index).toString()); - text.add(row.get(ContextDataDBTable.COLUMN.TID.index).toString()); - text.add(row.get(ContextDataDBTable.COLUMN.CPUNUM.index).toString()); - text.add(Formatter.toTimeFormat(starttime)); - text.add(Formatter.toTimeFormat(endtime)); - text.add(Formatter.toTimeFormat(exectime)); - text.add(row.get(ContextDataDBTable.COLUMN.STARTADDR.index).toString()); - text.add(row.get(ContextDataDBTable.COLUMN.ENDADDR.index).toString()); - text.add(""); - } else { - seqnum = (Long) row.get(FunctionDataDBTable.COLUMN.SEQ.index); - starttime = (Long) row.get(FunctionDataDBTable.COLUMN.STARTTIME.index); - endtime = (Long) row.get(FunctionDataDBTable.COLUMN.ENDTIME.index); - exectime = endtime - starttime; - text.add(row.get(FunctionDataDBTable.COLUMN.SEQ.index).toString()); - text.add(row.get(FunctionDataDBTable.COLUMN.PID.index).toString()); - text.add(row.get(FunctionDataDBTable.COLUMN.TID.index).toString()); - text.add(row.get(FunctionDataDBTable.COLUMN.CPUNUM.index).toString()); - text.add(Formatter.toTimeFormat(starttime)); - text.add(Formatter.toTimeFormat(endtime)); - text.add(Formatter.toTimeFormat(exectime)); - text.add(row.get(FunctionDataDBTable.COLUMN.STARTADDR.index).toString()); - text.add(row.get(FunctionDataDBTable.COLUMN.ENDADDR.index).toString()); - int funcId = (Integer) row.get(FunctionDataDBTable.COLUMN.FUNCID.index); - text.add(Global.getFunctionName(funcId)); - } - - // create DATableDataFormat - DATableDataFormat tableData = new DATableDataFormat(seqnum); - tableData.getData().add(new Long(starttime)); - if (isCoreSelected) { - tableData.setType(AnalyzerConstants.TYPE_TABLE_CONTEXTSWITCH); - } else { - tableData.setType(AnalyzerConstants.TYPE_TABLE_FUNCTIONFRAGMENT); - } - - TableInput tableInput = new TableInput(); - tableInput.setText(text); - tableInput.setData(tableData); - input.add(tableInput); - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long analysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime(); - long analysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime(); - if (starttime <= analysisEndTime && endtime >= analysisStartTime) { - tableInput.setInRange(true); - } - } - } - - return input; - } - - @Override - protected int getItemCountByPid() { - if (selectedData == null) { - return 0; - } - - int itemCount = 0; - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (selectedPid == 0 || selectedData.getPid() == selectedPid) { - if (isCoreSelected) { - itemCount = selectedData.getCoreFragmentCount(); - } else { - itemCount = selectedData.getFuncFragmentCount(); - } - } - - return itemCount; - } - - @Override - protected List getDBTableColumnNames() { - List columnName = new ArrayList(); - columnName.add("*"); - return columnName; - } - - @Override - protected String getDBTableName() { - if (selectedData == null) { - return null; - } - - String tablename; - if (isCoreSelected) { - tablename = KernelDataManager.getInstance().getContextDataTable().getTableName(); - } else { - tablename = KernelDataManager.getInstance().getFunctionDataTable().getTableName(); - } - - return tablename; - } - - @Override - protected String getSelectQueryOption() { - String never_option = DBConstants.DBCOLUMN_TID + " = -1"; - - if (selectedData == null) { - return never_option; - } - - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (selectedPid == 0 || selectedData.getPid() == selectedPid) { - String option = DBConstants.DBCOLUMN_TID + " = " + selectedData.getTid() + " order by "; - - if (isCoreSelected) - option += ContextDataDBTable.COLUMN.STARTTIME.name; - else - option += FunctionDataDBTable.COLUMN.STARTTIME.name; - - return option; - } else { - return never_option; - } - } - - @Override - protected String getSelectQueryCountOption() { - String never_option = DBConstants.DBCOLUMN_TID + " = -1"; - - if (selectedData == null) { - return never_option; - } - - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (selectedPid == 0 || selectedData.getPid() == selectedPid) { - String option = DBConstants.DBCOLUMN_TID + " = " + selectedData.getTid(); - - return option; - } else { - return never_option; - } - } - - public void setSelectedData(KernelDataPerThread kdata, boolean isCore) { - this.selectedData = kdata; - this.isCoreSelected = isCore; - } - - @Override - protected String getTimeColumnName() { - String timestr; - if (isCoreSelected) - timestr = ContextDataDBTable.COLUMN.STARTTIME.name; - else - timestr = FunctionDataDBTable.COLUMN.STARTTIME.name; - - return timestr; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListView.java deleted file mode 100644 index 0c451b2..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelListView.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.nl.KernelPageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelSelectionData; -import org.tizen.dynamicanalyzer.ui.widgets.table.WindowingTableColumnSizePackListener; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; - -public class KernelListView extends DAViewComposite { - private String[] columnNames = { KernelPageLabels.KERNEL_LIST_VIEW_INDEX, - KernelPageLabels.KERNEL_LIST_VIEW_PID, - KernelPageLabels.KERNEL_LIST_VIEW_TID, - KernelPageLabels.KERNEL_LIST_VIEW_CORE, - KernelPageLabels.KERNEL_LIST_VIEW_START_TIME, - KernelPageLabels.KERNEL_LIST_VIEW_END_TIME, - KernelPageLabels.KERNEL_LIST_VIEW_EXECUTION_TIME, - KernelPageLabels.KERNEL_LIST_VIEW_START_PC, - KernelPageLabels.KERNEL_LIST_VIEW_END_PC, - KernelPageLabels.KERNEL_LIST_VIEW_FUNCTION }; - - private int[] columnSizes = { 40, 40, 40, 65, 80, 80, 100, 100, 100, 250 }; - - private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT, - SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT }; - - int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_STRING }; - - private boolean[] columnVisibility_core = { true, true, true, true, true, - true, true, true, true, false }; - private boolean[] columnVisibility_function = { true, true, true, true, - true, true, true, true, true, true }; - - KernelListTable tableComp = null; - - public KernelListView(Composite parent, int style) { - super(parent, style, false); - this.setLayout(new FillLayout()); - - setTitle(KernelPageLabels.KERNEL_LIST_VIEW_NAME); - - Composite contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - contents.setLayout(new FillLayout()); - tableComp = new KernelListTable(contents, SWT.NONE, SWT.MULTI - | SWT.BORDER | SWT.FULL_SELECTION); - tableComp.setSortTypes(sortTypes); - tableComp.setColumnAlignment(columnAlignment); - tableComp.setColumns(columnNames); - tableComp.setColumnSize(columnSizes); - tableComp.setColumnVisibility(columnVisibility_function); - tableComp.setTableToolTipEnable(false); - contents.addControlListener(new WindowingTableColumnSizePackListener( - tableComp, columnSizes)); - } - - @Override - public void updateView(DAViewData data) { - if (data instanceof DASelectionData) { - DASelectionData selData = (DASelectionData) data; - - long start = selData.getStartTime(); - long end = selData.getEndTime(); - Object odata = selData.getData(); - - if (odata instanceof KernelSelectionData) { - KernelSelectionData sdata = (KernelSelectionData) odata; - boolean isCore = (sdata.getType() == KernelSelectionData.KERNEL_DATA_TYPE_CONTEXTSWITCH); - tableComp.setSelectedData(sdata.getData(), isCore); - if (isCore) { - tableComp.setColumnVisibility(columnVisibility_core); - } else { - tableComp.setColumnVisibility(columnVisibility_function); - } - tableComp.updateTable(); - } - - ((KernelListTable) tableComp).setSelectionByTime(start, end); - tableComp.updateTable(); - } - } - - @Override - public void updateView() { - tableComp.updateTable(); - } - - @Override - public void clear() { - tableComp.getTable().removeAll(); - tableComp.clear(); - } - - @Override - public Control getControl() { - return tableComp; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelPage.java deleted file mode 100644 index e9ccef0..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelPage.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; -import org.tizen.dynamicanalyzer.widgets.da.view.DAContainerComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite; - -public class KernelPage extends DAContainerComposite { - public static final String pageID = KernelPage.class.getName(); - public static final String contextViewID = ContextSwitchingChartView.class.getName(); - public static final String callflowTabID = "CallFlowTab.id"; - public static final String callflowViewID = CallFlowChartView.class.getName(); - public static final String listViewID = KernelListView.class.getName(); - public static final String statViewID = KernelStatisticInfoView.class.getName(); - - SashForm baseForm; - SashForm leftForm; - SashForm rightForm; - - public KernelPage(Composite parent, int style) { - super(parent, style); - - setTitle(AnalyzerLabels.COOLBAR_AREA_KERNEL); - this.setData(DAContainerComposite.KEY_TOOLTIP, ShortCutManager.COOLBAR_AREA_KERNEL_TOOLTIP); - this.setBackground(ColorResources.CONFIGURATION_TABLE_COVER_BACKGROUND_COLOR); - this.setLayout(new FillLayout()); - - baseForm = new SashForm(this, SWT.HORIZONTAL); - baseForm.setLayout(new FillLayout()); - baseForm.setForeground(ColorResources.TAB_SELECTED_COLOR_START); - ((FillLayout) getLayout()).marginHeight = 15; - ((FillLayout) getLayout()).marginWidth = 5; - - leftForm = new SashForm(baseForm, SWT.VERTICAL); - ContextSwitchingChartView kernelChartView = new ContextSwitchingChartView(leftForm, - SWT.NONE); - addView(kernelChartView); - DATabComposite lefttabView = new DATabComposite(leftForm, SWT.NONE, false); - addView(callflowTabID, lefttabView); - { - CallFlowChartView callflowView = new CallFlowChartView( - lefttabView.getContentComposite(), SWT.NONE); - lefttabView.addView(callflowView, false); - - KernelListView kernelListView = new KernelListView(lefttabView.getContentComposite(), - SWT.NONE); - lefttabView.addView(kernelListView, false); - } - - leftForm.setWeights(new int[] { 60, 40 }); - - rightForm = new SashForm(baseForm, SWT.VERTICAL); - - KernelStatisticInfoView statInfo = new KernelStatisticInfoView(rightForm, SWT.NONE); - addView(statInfo); - - TimelineTableView tabView = new TimelineTableView(rightForm, SWT.NONE); -// tabView.setObservingViews(TimelineTableView.screenshotViewID, -// new String[] { KernelPage.listViewID }); -// tabView.setObservingViews(TimelineTableView.callstackViewID, -// new String[] { KernelPage.listViewID }); - addView(tabView); - - rightForm.setWeights(new int[] { 50, 50 }); - baseForm.setWeights(new int[] { 75, 25 }); - } - - @Override - protected void onResized(int width, int height) { - int wrate = (int) (TimelineTableView.DEFAULT_WIDTH * 100 / width); - int hrate = (int) (TimelineTableView.DEFAULT_TABLE_VIEW_HEIGHT * 100 / height); - wrate = (wrate > 100) ? 100 : wrate; - hrate = (hrate > 100) ? 100 : hrate; - - if ((wrate > (100 - 37)) || hrate > 100) { - return; - } - - baseForm.setWeights(new int[] { 100 - wrate, wrate }); - rightForm.setWeights(new int[] { 100 - hrate, hrate }); - } - - @Override - public void clear() { - super.clear(); - KernelDataManager.getInstance().clear(); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelStatisticInfoView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelStatisticInfoView.java deleted file mode 100644 index a7dc0bf..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/KernelStatisticInfoView.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.ui.kernel; - -import org.eclipse.swt.SWT; -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.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.ScrollBar; -import org.eclipse.swt.widgets.Text; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.nl.KernelPageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; - -public class KernelStatisticInfoView extends DAViewComposite { - private Text detailText = null; - private Label labelMessage = null; - @SuppressWarnings("unused") - private int indexScrolledTop = 0; - - public KernelStatisticInfoView(Composite parent, int style) { - super(parent, style, true); - this.setLayout(new FillLayout()); - - setTitle(KernelPageLabels.KERNEL_STATISTIC_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; - 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); - - Listener listener = new Listener() { - public void handleEvent(Event e) { - indexScrolledTop = detailText.getTopIndex(); - } - }; - ScrollBar hBar = detailText.getHorizontalBar(); - if (hBar != null) { - hBar.addListener(SWT.Selection, listener); - } - ScrollBar vBar = detailText.getVerticalBar(); - if (vBar != null) { - vBar.addListener(SWT.Selection, listener); - } - - StringBuffer strDetailView = new StringBuffer(); - strDetailView.append(CommonConstants.NEW_LINE); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_ADDRESS -// + heightFormAttachment); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_RECV_SIZE -// + heightFormAttachment); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_SEND_SIZE -// + heightFormAttachment); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_TOTAL_USE_TIME -// + heightFormAttachment); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_API_COUNT -// + heightFormAttachment); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_FAILED_API_COUNT -// + heightFormAttachment); -// strDetailView.append(leftFormAttachment -// + NetworkPageLabels.NETWORK_DETAILS_PACKET_MESSAGE -// + heightFormAttachment); -// strDetailView.append(NetworkChartManager.getInstance() -// .getPacketMessage()); - detailText.setText(strDetailView.toString()); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/ContextDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/ContextDataDBTable.java deleted file mode 100644 index 6e1862e..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/ContextDataDBTable.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * 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.ui.kernel.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.IResultSet; -import org.tizen.dynamicanalyzer.util.Logger; - -public class ContextDataDBTable extends DBTable implements IResultSet { - public static final String TABLENAME = "CONTEXT_SWITCH_DATA"; - - public enum COLUMN { - SEQ(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER), - PID(1, DBConstants.DBCOLUMN_PID), - TID(2, DBConstants.DBCOLUMN_TID), - CPUNUM(3, "CPU_NUM"), - STARTTIME(4, "START_TIME"), - STARTADDR(5, "START_PCADDR"), - ENDTIME(6, "END_TIME"), - ENDADDR(7, "END_PCADDR"); - - 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 ContextDataDBTable() { - addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT8)); - 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.CPUNUM.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.STARTTIME.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.STARTADDR.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.ENDTIME.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.ENDADDR.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - } - - @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.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index))); - prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index))); - prep.setInt(COLUMN.CPUNUM.index + 1, (Integer) (rowData.get(COLUMN.CPUNUM.index))); - prep.setLong(COLUMN.STARTTIME.index + 1, - (Long) (rowData.get(COLUMN.STARTTIME.index))); - prep.setLong(COLUMN.STARTADDR.index + 1, - (Long) (rowData.get(COLUMN.STARTADDR.index))); - prep.setLong(COLUMN.ENDTIME.index + 1, (Long) (rowData.get(COLUMN.ENDTIME.index))); - prep.setLong(COLUMN.ENDADDR.index + 1, (Long) (rowData.get(COLUMN.ENDADDR.index))); - } catch (SQLException e) { - Logger.exception(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Long.valueOf(rs.getLong(1))); - row.add(Integer.valueOf(rs.getInt(2))); - row.add(Integer.valueOf(rs.getInt(3))); - row.add(Integer.valueOf(rs.getInt(4))); - row.add(Long.valueOf(rs.getLong(5))); - row.add(Long.valueOf(rs.getLong(6))); - row.add(Long.valueOf(rs.getLong(7))); - row.add(Long.valueOf(rs.getLong(8))); - } catch (SQLException e) { - Logger.exception(e); - return null; - } - - return row; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/FunctionDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/FunctionDataDBTable.java deleted file mode 100644 index 68daf53..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/FunctionDataDBTable.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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.ui.kernel.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.util.Logger; - -public class FunctionDataDBTable extends DBTable { - private static final String TABLENAME = "FUNCTION_CALL_DATA"; - - public enum COLUMN { - SEQ(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER), - PID(1, DBConstants.DBCOLUMN_PID), - TID(2, DBConstants.DBCOLUMN_TID), - CPUNUM(3, "CPU_NUM"), - STARTTIME(4, "START_TIME"), - STARTTYPE(5, "START_TYPE"), - STARTADDR(6, "START_PCADDR"), - ENDTIME(7, "END_TIME"), - ENDTYPE(8, "END_TYPE"), - ENDADDR(9, "END_PCADDR"), - FUNCID(10, "FUNCTION_ID"); - - 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 FunctionDataDBTable() { - addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT8)); - 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.CPUNUM.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.STARTTIME.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.STARTTYPE.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.STARTADDR.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.ENDTIME.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.ENDTYPE.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.ENDADDR.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT8)); - addColumn(new DBColumn(COLUMN.FUNCID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - } - - @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.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index))); - prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index))); - prep.setInt(COLUMN.CPUNUM.index + 1, (Integer) (rowData.get(COLUMN.CPUNUM.index))); - - prep.setLong(COLUMN.STARTTIME.index + 1, - (Long) (rowData.get(COLUMN.STARTTIME.index))); - prep.setInt(COLUMN.STARTTYPE.index + 1, - (Integer) (rowData.get(COLUMN.STARTTYPE.index))); - prep.setLong(COLUMN.STARTADDR.index + 1, - (Long) (rowData.get(COLUMN.STARTADDR.index))); - - prep.setLong(COLUMN.ENDTIME.index + 1, (Long) (rowData.get(COLUMN.ENDTIME.index))); - prep.setInt(COLUMN.ENDTYPE.index + 1, (Integer) (rowData.get(COLUMN.ENDTYPE.index))); - prep.setLong(COLUMN.ENDADDR.index + 1, (Long) (rowData.get(COLUMN.ENDADDR.index))); - prep.setInt(COLUMN.FUNCID.index + 1, (Integer) (rowData.get(COLUMN.FUNCID.index))); - } catch (SQLException e) { - Logger.exception(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Long.valueOf(rs.getLong(1))); - row.add(Integer.valueOf(rs.getInt(2))); - row.add(Integer.valueOf(rs.getInt(3))); - row.add(Integer.valueOf(rs.getInt(4))); - row.add(Long.valueOf(rs.getLong(5))); - row.add(Integer.valueOf(rs.getInt(6))); - row.add(Long.valueOf(rs.getLong(7))); - row.add(Long.valueOf(rs.getLong(8))); - row.add(Integer.valueOf(rs.getInt(9))); - row.add(Long.valueOf(rs.getLong(10))); - row.add(Integer.valueOf(rs.getInt(11))); - } catch (SQLException e) { - Logger.exception(e); - return null; - } - - return row; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataMaker.java deleted file mode 100644 index 79778ef..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataMaker.java +++ /dev/null @@ -1,369 +0,0 @@ -/* - * 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.ui.kernel.data; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.Stack; - -import org.tizen.dynamicanalyzer.database.DBInserter; -import org.tizen.dynamicanalyzer.database.DBTable; -import org.tizen.dynamicanalyzer.database.IResultSet; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.data.ContextSwitchData; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.util.Logger; - -public class KernelDataMaker { - private static final String queryto_withTime = "where %s < %s and %s > %s order by %s"; - private static final String queryto_withTidAndTime = "where %s = %s and %s < %s and %s > %s order by %s"; - private static final String queryto_withTid = "where %s = %s group by %s"; - - public static final int START_TYPE_START = 10; - public static final int START_TYPE_RESUME = 20; - public static final int START_TYPE_RETURNED = 30; - public static final int END_TYPE_END = 1; - public static final int END_TYPE_PAUSED = 2; - public static final int END_TYPE_CALL = 3; - - // 'threads' may be necessary to synchronize but i didn't - // because i think that it does not make critical error - private List threads; - - private DBInserter contextDBInserter = null; - private DBInserter functionDBInserter = null; - - public KernelDataMaker(DBInserter cDBInserter, DBInserter fDBInserter) { - threads = new ArrayList(); - - contextDBInserter = cDBInserter; - functionDBInserter = fDBInserter; - } - - private KernelDataPerThread findKernelData(int tid) { - int size = threads.size(); - - for (int i = 0; i < size; i++) { - KernelDataPerThread kdata = threads.get(i); - if (kdata.getTid() == tid) { - return kdata; - } - } - - return null; - } - - public void makeData(List inputs) { - Stack prefunc; - Stack prefunc_type; - - List> contextDataList = new ArrayList>(); - List> functionDataList = new ArrayList>(); - - int size = inputs.size(); - for (int i = 0; i < size; i++) { - LogData input = (LogData) inputs.get(i); - - switch (input.getMsgID()) { - case ProtocolConstants.MSG_CONTEXT_SWITCH_EXIT: { - ContextSwitchData csdata = (ContextSwitchData) input; - int tid = csdata.getTid(); - - KernelDataPerThread kdata = findKernelData(tid); - if (kdata == null) { // thread id is not exist in thread id - kdata = new KernelDataPerThread(csdata.getPid(), tid, csdata); - threads.add(kdata); - } else { // thread id is exist in thread id array - if (kdata.getCorelog() != null) { - // TODO : error - Logger.error("context switch entry log is coming without exit log of previous context"); - } else { - kdata.setCorelog(csdata); - - prefunc = kdata.getFunclog(); - prefunc_type = kdata.getFunclogType(); - - if (prefunc != null) { - ProfileData pfdata = prefunc.peek(); - pfdata.setTime(csdata.getTime()); - pfdata.setPcAddr(csdata.getPcAddr()); - pfdata.setCpuNum(csdata.getCpuNum()); - - prefunc_type.pop(); - prefunc_type.push(START_TYPE_RESUME); - } - } - } - break; - } - case ProtocolConstants.MSG_CONTEXT_SWITCH_ENTRY: { - ContextSwitchData csdata = (ContextSwitchData) input; - ContextSwitchData precore; - int tid = csdata.getTid(); - - KernelDataPerThread kdata = findKernelData(tid); - if (kdata == null) { // thread id is not exist - // TODO : error - Logger.error("context switch exit log is coming without any entry log"); - } else if ((precore = kdata.getCorelog()) == null) { - // TODO : error - Logger.error("context switch exit log is coming without corresponding entry log"); - } else if (precore.getCpuNum() != csdata.getCpuNum()) { - // TODO : error - Logger.error("context switch exit log is coming with different cpu num"); - } else { - kdata.setCorelog(null); - - ArrayList dbdata = new ArrayList(); - dbdata.add(new Long(precore.getSeq())); - dbdata.add(new Integer(precore.getPid())); - dbdata.add(new Integer(precore.getTid())); - dbdata.add(new Integer(precore.getCpuNum())); - dbdata.add(new Long(precore.getTime())); - dbdata.add(new Long(precore.getPcAddr())); - dbdata.add(new Long(csdata.getTime())); - dbdata.add(new Long(csdata.getPcAddr())); - contextDataList.add(dbdata); - kdata.incCoreFragmentCount(); - - prefunc = kdata.getFunclog(); - prefunc_type = kdata.getFunclogType(); - if (prefunc != null) { - if (prefunc.isEmpty() || prefunc_type.isEmpty()) { - Logger.warning("context switch exit log is coming but there is no function in stack"); - } else { - ProfileData lastfunc = prefunc.peek(); - int lastfunc_type = prefunc_type.peek(); - - ArrayList dbfuncdata = new ArrayList(); - dbfuncdata.add(new Long(csdata.getSeq())); - dbfuncdata.add(new Integer(csdata.getPid())); - dbfuncdata.add(new Integer(csdata.getTid())); - dbfuncdata.add(new Integer(csdata.getCpuNum())); - dbfuncdata.add(new Long(lastfunc.getTime())); - dbfuncdata.add(new Integer(lastfunc_type)); - dbfuncdata.add(new Long(lastfunc.getPcAddr())); - dbfuncdata.add(new Long(csdata.getTime())); - dbfuncdata.add(new Integer(END_TYPE_PAUSED)); - dbfuncdata.add(new Long(csdata.getPcAddr())); - dbfuncdata.add(new Integer(lastfunc.getApiId())); - functionDataList.add(dbfuncdata); - kdata.incFuncFragmentCount(); - } - } - } - break; - } - case ProtocolConstants.MSG_FUNCTION_ENTRY: { - ProfileData fndata = null; - try { - fndata = (ProfileData) input.clone(); - } catch (CloneNotSupportedException e) { - Logger.exception(e); - break; - } - int tid = fndata.getTid(); - - KernelDataPerThread kdata = findKernelData(tid); - if (kdata == null) { - // TODO : error - // Logger.error("function entry log is coming without any context entry log"); - } else { - assert (kdata.getCorelog() != null); - if (kdata.getFunclog() == null) { - kdata.createFunctionStack(); - } - - prefunc = kdata.getFunclog(); - prefunc_type = kdata.getFunclogType(); - assert (prefunc != null && prefunc_type != null); - - if (prefunc.isEmpty()) { - assert (prefunc_type.isEmpty()); - - prefunc.push(fndata); - prefunc_type.push(START_TYPE_START); - } else { - ProfileData lastfunc = prefunc.peek(); - int lastfunc_type = prefunc_type.peek(); - - ArrayList dbfuncdata = new ArrayList(); - dbfuncdata.add(new Long(fndata.getSeq())); - dbfuncdata.add(new Integer(fndata.getPid())); - dbfuncdata.add(new Integer(fndata.getTid())); - dbfuncdata.add(new Integer(fndata.getCpuNum())); - dbfuncdata.add(new Long(lastfunc.getTime())); - dbfuncdata.add(new Integer(lastfunc_type)); - dbfuncdata.add(new Long(lastfunc.getPcAddr())); - dbfuncdata.add(new Long(fndata.getTime())); - dbfuncdata.add(new Integer(END_TYPE_CALL)); - dbfuncdata.add(new Long(fndata.getPcAddr())); - dbfuncdata.add(new Integer(lastfunc.getApiId())); - functionDataList.add(dbfuncdata); - kdata.incFuncFragmentCount(); - - prefunc.push(fndata); - prefunc_type.push(START_TYPE_START); - } - } - break; - } - case ProtocolConstants.MSG_FUNCTION_EXIT: { - ProfileData fndata = (ProfileData) input; - int tid = fndata.getTid(); - - KernelDataPerThread kdata = findKernelData(tid); - if (kdata == null) { - // TODO : error - // Logger.error("function entry log is coming without any context entry log"); - } else { - assert (kdata.getCorelog() != null); - if (kdata.getFunclog() == null) { - kdata.createFunctionStack(); - } - - prefunc = kdata.getFunclog(); - prefunc_type = kdata.getFunclogType(); - assert (prefunc != null && prefunc_type != null); - - if (prefunc.isEmpty() || prefunc_type.isEmpty()) { - // TODO : error - Logger.error("function exit log is coming without function entry log"); - } else { - ProfileData lastfunc = prefunc.pop(); - int lastfunc_type = prefunc_type.pop(); - - assert (lastfunc.getApiId() == fndata.getApiId()); - - ArrayList dbfuncdata = new ArrayList(); - dbfuncdata.add(new Long(fndata.getSeq())); - dbfuncdata.add(new Integer(fndata.getPid())); - dbfuncdata.add(new Integer(fndata.getTid())); - dbfuncdata.add(new Integer(fndata.getCpuNum())); - dbfuncdata.add(new Long(lastfunc.getTime())); - dbfuncdata.add(new Integer(lastfunc_type)); - dbfuncdata.add(new Long(lastfunc.getPcAddr())); - dbfuncdata.add(new Long(fndata.getTime())); - dbfuncdata.add(new Integer(END_TYPE_END)); - dbfuncdata.add(new Long(fndata.getPcAddr())); - dbfuncdata.add(new Integer(lastfunc.getApiId())); - functionDataList.add(dbfuncdata); - kdata.incFuncFragmentCount(); - - if (!prefunc.isEmpty() && !prefunc_type.isEmpty()) { - prefunc.peek().setTime(fndata.getTime()); - prefunc.peek().setPcAddr(fndata.getPcAddr()); - prefunc_type.pop(); - prefunc_type.push(START_TYPE_RETURNED); - } - } - } - break; - } - default: - break; - } - } - - if (!contextDataList.isEmpty()) { - contextDBInserter.pushData(contextDataList); - } - - if (!functionDataList.isEmpty()) { - functionDBInserter.pushData(functionDataList); - } - } - - public void clear() { - threads.clear(); - } - - public List> getContextDataFromDB(long start, long end) { - String where = String.format(queryto_withTime, ContextDataDBTable.COLUMN.STARTTIME.name, - end, ContextDataDBTable.COLUMN.ENDTIME.name, start, - ContextDataDBTable.COLUMN.STARTTIME.name); - - DBTable table = KernelDataManager.getInstance().getContextDataTable(); - - return table.selectAllColumnData(where); - } - - public List> getFunctionDataFromDB(long start, long end, int tid) { - String where; - - if (tid >= 0) { - where = String.format(queryto_withTidAndTime, FunctionDataDBTable.COLUMN.TID.name, tid, - FunctionDataDBTable.COLUMN.STARTTIME.name, end, - FunctionDataDBTable.COLUMN.ENDTIME.name, start, - FunctionDataDBTable.COLUMN.STARTTIME.name); - } else { - where = String.format(queryto_withTime, FunctionDataDBTable.COLUMN.STARTTIME.name, end, - FunctionDataDBTable.COLUMN.ENDTIME.name, start, - FunctionDataDBTable.COLUMN.STARTTIME.name); - } - - DBTable table = KernelDataManager.getInstance().getFunctionDataTable(); - - return table.selectAllColumnData(where); - } - - public List> getFuncnameFromDB(int tid) { - String where = String.format(queryto_withTid, FunctionDataDBTable.COLUMN.TID.name, tid, - FunctionDataDBTable.COLUMN.FUNCID.name); - - List selectColumn = new ArrayList(); - selectColumn.add(FunctionDataDBTable.COLUMN.FUNCID.name); - - DBTable table = KernelDataManager.getInstance().getFunctionDataTable(); - - return table.selectData(selectColumn, where, new IResultSet() { - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Integer.valueOf(rs.getInt(1))); - } catch (SQLException e) { - Logger.exception(e); - return null; - } - - return row; - } - }); - } - - public List getThreadData() { - return threads; - } - - public void addThreadData(KernelDataPerThread data) { - threads.add(data); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataManager.java deleted file mode 100644 index 598b2ea..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataManager.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * 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.ui.kernel.data; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.PriorityQueue; - -import org.tizen.dynamicanalyzer.database.DBInserter; -import org.tizen.dynamicanalyzer.database.DBTable; -import org.tizen.dynamicanalyzer.database.SqlConnectionManager; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -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.swap.model.data.LogDataTimeComparator; - -public class KernelDataManager extends PageDataManager { - private static final String PIDTID_QUERY_CONTEXT = "select distinct " - + ContextDataDBTable.COLUMN.PID.name + ", " + ContextDataDBTable.COLUMN.TID.name - + " from %s"; - - private static final String PIDTID_QUERY_FUNCTION = "select distinct " - + FunctionDataDBTable.COLUMN.PID.name + ", " + FunctionDataDBTable.COLUMN.TID.name - + " from %s"; - - private static final String COUNT_QUERY_CONTEXT = "select count(*) from %s where " - + ContextDataDBTable.COLUMN.TID.name + "=%s"; - - private static final String COUNT_QUERY_FUNCTION = "select count(*) from %s where " - + FunctionDataDBTable.COLUMN.TID.name + "=%s"; - - private static KernelDataManager instance = new KernelDataManager(); - private KernelDataMaker kdataMaker = null; - - private ContextDataDBTable contextDataTable = null; - private FunctionDataDBTable functionDataTable = null; - - private KernelDataManager() { - contextDataTable = new ContextDataDBTable(); - functionDataTable = new FunctionDataDBTable(); - DBInserter cDBInserter = makeInserter(contextDataTable); - DBInserter fDBInserter = makeInserter(functionDataTable); - - kdataMaker = new KernelDataMaker(cDBInserter, fDBInserter); - } - - public DBTable getContextDataTable() { - return contextDataTable; - } - - public DBTable getFunctionDataTable() { - return functionDataTable; - } - - public KernelDataMaker getDataMaker() { - return kdataMaker; - } - - public static KernelDataManager getInstance() { - return instance; - } - - public void clear() { - kdataMaker.clear(); - } - - private ArrayList getLogsFromLogPackage(LogPackage logPack) { - Logs contextEntryLogs = logPack.getLogs(ProtocolConstants.MSG_CONTEXT_SWITCH_ENTRY); - Logs contextExitLogs = logPack.getLogs(ProtocolConstants.MSG_CONTEXT_SWITCH_EXIT); - Logs functionEntryLogs = logPack.getLogs(ProtocolConstants.MSG_FUNCTION_ENTRY); - Logs functionExitLogs = logPack.getLogs(ProtocolConstants.MSG_FUNCTION_EXIT); - - ArrayList kernelLogs = new ArrayList(); - PriorityQueue pqueue = new PriorityQueue(5, new LogDataTimeComparator()); - - List contextEntryLogList = null, contextExitLogList = null, functionEntryLogList = null, functionExitLogList = null; - Iterator centryiter = null, cexititer = null, fentryiter = null, fexititer = null; - if (contextEntryLogs != null) { - contextEntryLogList = contextEntryLogs.getLogs(); - centryiter = contextEntryLogList.iterator(); - if (centryiter.hasNext()) - pqueue.offer(centryiter.next()); - } - if (contextExitLogs != null) { - contextExitLogList = contextExitLogs.getLogs(); - cexititer = contextExitLogList.iterator(); - if (cexititer.hasNext()) - pqueue.offer(cexititer.next()); - } - if (functionEntryLogs != null) { - functionEntryLogList = functionEntryLogs.getLogs(); - fentryiter = functionEntryLogList.iterator(); - if (fentryiter.hasNext()) - pqueue.offer(fentryiter.next()); - } - if (functionExitLogs != null) { - functionExitLogList = functionExitLogs.getLogs(); - fexititer = functionExitLogList.iterator(); - if (fexititer.hasNext()) - pqueue.offer(fexititer.next()); - } - - do { - LogData top = pqueue.poll(); - if (top == null) - break; - - switch (top.getMsgID()) { - case ProtocolConstants.MSG_CONTEXT_SWITCH_ENTRY: - if (centryiter != null && centryiter.hasNext()) - pqueue.offer(centryiter.next()); - break; - case ProtocolConstants.MSG_CONTEXT_SWITCH_EXIT: - if (cexititer != null && cexititer.hasNext()) - pqueue.offer(cexititer.next()); - break; - case ProtocolConstants.MSG_FUNCTION_ENTRY: - if (fentryiter != null && fentryiter.hasNext()) - pqueue.offer(fentryiter.next()); - break; - case ProtocolConstants.MSG_FUNCTION_EXIT: - if (fexititer != null && fexititer.hasNext()) - pqueue.offer(fexititer.next()); - break; - default: - break; - } - - kernelLogs.add(top); - } while (true); - - return kernelLogs; - } - - @Override - protected void makeData(LogPackage pack) { - ArrayList logs = getLogsFromLogPackage(pack); - if (!logs.isEmpty()) - kdataMaker.makeData(logs); - } - - @Override - public void openData(Map dataMap) { - kdataMaker.clear(); - - Map threadMap = new HashMap(); - - String query = String.format(PIDTID_QUERY_CONTEXT, contextDataTable.getTableName()); - List> contextPidTid = SqlConnectionManager.executeQuery(query); - query = String.format(PIDTID_QUERY_FUNCTION, functionDataTable.getTableName()); - List> functionPidTid = SqlConnectionManager.executeQuery(query); - - if (contextPidTid != null) { - int threadsize = contextPidTid.size(); - for (int i = 0; i < threadsize; i++) { - List row = contextPidTid.get(i); - int pid = ((Integer) row.get(0)).intValue(); - int tid = ((Integer) row.get(1)).intValue(); - - KernelDataPerThread kdata = new KernelDataPerThread(pid, tid); - threadMap.put(Integer.valueOf(tid), kdata); - - query = String.format(COUNT_QUERY_CONTEXT, contextDataTable.getTableName(), - Integer.toString(tid)); - List> coreCount = SqlConnectionManager.executeQuery(query); - Object count; - if (coreCount == null) { - count = Integer.valueOf(0); - } else { - count = coreCount.get(0).get(0); - } - if (count instanceof Integer) { - kdata.setCoreFragmentCount(((Integer) count).intValue()); - } else if (count instanceof Long) { - kdata.setCoreFragmentCount(((Long) count).intValue()); - } - - query = String.format(COUNT_QUERY_FUNCTION, functionDataTable.getTableName(), - Integer.toString(tid)); - List> functionCount = SqlConnectionManager.executeQuery(query); - if (functionCount == null) { - count = Integer.valueOf(0); - } else { - count = functionCount.get(0).get(0); - } - if (count instanceof Integer) { - kdata.setFunctionFragmentCount(((Integer) count).intValue()); - } else if (count instanceof Long) { - kdata.setFunctionFragmentCount(((Long) count).intValue()); - } - } - } - - if (functionPidTid != null) { - int threadsize = functionPidTid.size(); - for (int i = 0; i < threadsize; i++) { - List row = functionPidTid.get(i); - int tid = ((Integer) row.get(1)).intValue(); - - KernelDataPerThread kdata = threadMap.get(Integer.valueOf(tid)); - if (kdata != null) { - kdata.createFunctionStack(); - } - } - } - - for (Map.Entry entry : threadMap.entrySet()) { - KernelDataPerThread kdata = entry.getValue(); - kdataMaker.addThreadData(kdata); - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThread.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThread.java deleted file mode 100644 index e453482..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThread.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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.ui.kernel.data; - -import java.util.Stack; - -import org.tizen.dynamicanalyzer.swap.model.data.ContextSwitchData; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; - -public class KernelDataPerThread { - private int pid; - private int tid; - private ContextSwitchData core_log; - private Stack func_log = null; - private Stack func_log_type = null; - - private DAChartBoardItem contextChart = null; - private DAChartBoardItem functionChart = null; - - private int coreFragmentCount = 0; - private int functionFragmentCount = 0; - - public KernelDataPerThread(int pid, int tid) { - this.pid = pid; - this.tid = tid; - core_log = null; - } - - public KernelDataPerThread(int pid, int tid, ContextSwitchData corelog) { - this.pid = pid; - this.tid = tid; - core_log = corelog; - } - - public void createFunctionStack() { - func_log = new Stack(); - func_log_type = new Stack(); - } - - public int getPid() { - return pid; - } - - public int getTid() { - return tid; - } - - public ContextSwitchData getCorelog() { - return core_log; - } - - public Stack getFunclog() { - return func_log; - } - - public Stack getFunclogType() { - return func_log_type; - } - - public void setCorelog(ContextSwitchData corelog) { - core_log = corelog; - } - - public DAChartBoardItem getContextChart() { - return contextChart; - } - - public void setContextChart(DAChartBoardItem contextChart) { - this.contextChart = contextChart; - } - - public DAChartBoardItem getFunctionChart() { - return functionChart; - } - - public void setFunctionChart(DAChartBoardItem functionChart) { - this.functionChart = functionChart; - } - - public void incCoreFragmentCount() { - coreFragmentCount++; - } - - public void incFuncFragmentCount() { - functionFragmentCount++; - } - - public int getCoreFragmentCount() { - return coreFragmentCount; - } - - public int getFuncFragmentCount() { - return functionFragmentCount; - } - - public void setCoreFragmentCount(int count) { - this.coreFragmentCount = count; - } - - public void setFunctionFragmentCount(int count) { - this.functionFragmentCount = count; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThreadComparator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThreadComparator.java deleted file mode 100644 index 360be76..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelDataPerThreadComparator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.ui.kernel.data; - -import java.util.Comparator; - -public class KernelDataPerThreadComparator implements - Comparator { - - @Override - public int compare(KernelDataPerThread o1, KernelDataPerThread o2) { - if (o1.getPid() < o2.getPid()) - return -1; - else if (o1.getPid() > o2.getPid()) - return 1; - else { - if (o1.getTid() < o2.getTid()) - return -1; - else if (o1.getTid() > o2.getTid()) - return 1; - else - return 0; - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelSelectionData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelSelectionData.java deleted file mode 100644 index 137eef8..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/data/KernelSelectionData.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Hyunjong Park - * 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.kernel.data; - -public class KernelSelectionData { - public static final int KERNEL_DATA_TYPE_NONE = 0; - public static final int KERNEL_DATA_TYPE_CONTEXTSWITCH = 1; - public static final int KERNEL_DATA_TYPE_FUNCTIONCALL = 2; - - private KernelDataPerThread kernelData = null; - private int dataType = KERNEL_DATA_TYPE_NONE; - - public KernelSelectionData(KernelDataPerThread data, int type) { - this.kernelData = data; - this.dataType = type; - } - - public KernelDataPerThread getData() { - return kernelData; - } - - public int getType() { - return dataType; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryCallStackView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryCallStackView.java index c9fa5f9..339ae3d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryCallStackView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryCallStackView.java @@ -33,7 +33,6 @@ import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.nl.InformationViewLabels; import org.tizen.dynamicanalyzer.nl.MemoryPageLabels; import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.memory.table.MemoryCallStackTable; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; @@ -51,10 +50,6 @@ public class MemoryCallStackView extends DAViewComposite { private boolean[] columnVisibility = { true, true, true }; Composite contents = null; - // this definition should be here for creation of instance (register db table) - @SuppressWarnings("unused") - private static CallStackInserter inserter = CallStackInserter.getInstance(); - public MemoryCallStackView(Composite parent, int style) { super(parent, style, false); this.setLayout(new FillLayout()); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryChartView.java index 7a7193b..4e0941f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryChartView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryChartView.java @@ -46,11 +46,8 @@ import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; -import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.memory.chart.MemoryChartBoard; import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; import org.tizen.dynamicanalyzer.ui.toolbar.DAToolBarCustomCombo; import org.tizen.dynamicanalyzer.ui.toolbar.ToolBarComboListener; @@ -58,7 +55,6 @@ import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.WorkbenchUtil; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; @@ -72,8 +68,6 @@ public class MemoryChartView extends DAViewComposite { private DAToolBarCustomCombo processCombo; - private final RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - public MemoryChartView(Composite parent, int style) { super(parent, style, false); this.setLayout(new FillLayout()); @@ -309,21 +303,6 @@ public class MemoryChartView extends DAViewComposite { return; memoryChartBoard.updateChartBoard(); - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) memoryChartBoard.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval( - rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) memoryChartBoard.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) memoryChartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryMapView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryMapView.java index c1c6baf..2f1f4fd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryMapView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryMapView.java @@ -29,6 +29,7 @@ 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.MemoryPageLabels; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.ui.memory.table.MemoryMapTable; @@ -41,17 +42,18 @@ public class MemoryMapView extends DAViewComposite { MemoryMapTable tableComp = null; - public MemoryMapView(Composite parent, int style) { + public MemoryMapView(Composite parent, int style) { super(parent, style, false); this.setLayout(new FillLayout()); setTitle(MemoryPageLabels.MEMORY_MAP_VIEW_TITLE); Composite contents = getContentArea(); contents.setBackground(ColorResources.WINDOW_BG_COLOR); contents.setLayout(new FillLayout()); - tableComp = new MemoryMapTable(contents, SWT.NONE, SWT.MULTI | SWT.BORDER + tableComp = new MemoryMapTable(contents, SWT.NONE, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); + tableComp.setSelectionTime(-1); } - + @Override public void updateView() { if (!AnalyzerManager.isVisibleView(this.getID())) { @@ -62,12 +64,29 @@ public class MemoryMapView extends DAViewComposite { } tableComp.updateTable(); } - + @Override - public void updateView(DAViewData data) { + public void updateView(DAViewData vdata) { + if (!(vdata instanceof DASelectionData)) { + return; + } + + DASelectionData selData = (DASelectionData) vdata; + if(selData.getStartTime() == selData.getEndTime()) { + tableComp.setSelectionTime(selData.getStartTime()); + } + else { + tableComp.setSelectionTime(-1); + } + + if (!AnalyzerManager.isVisibleView(this.getID())) { + return; + } + + tableComp.updateTable(); } - + @Override public void clear() { tableComp.clear(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPage.java index e913544..6ab83fe 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPage.java @@ -36,8 +36,6 @@ import org.tizen.dynamicanalyzer.setting.FlatPreferences; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; import org.tizen.dynamicanalyzer.ui.memory.chart.MemoryChartBoard; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; -import org.tizen.dynamicanalyzer.ui.memory.data.MemoryDataManager; import org.tizen.dynamicanalyzer.ui.memory.table.MemoryPersistentAllocationsTable; import org.tizen.dynamicanalyzer.ui.memory.table.MemoryStatisticsTable; import org.tizen.dynamicanalyzer.ui.page.MenuBar; @@ -52,8 +50,10 @@ public class MemoryPage extends DABaseDataPageComposite { public static final String mapViewID = MemoryMapView.class.getName(); public static final String persistentAllocsViewID = MemoryPageLabels.MEMORY_ALLOCATION_TRACE_VIEW_TITLE + "View"; public static final String leaksViewID = MemoryPageLabels.MEMORY_LEAKS_VIEW_TITLE + "View"; + public static final String callstackViewID = MemoryCallStackView.class.getName(); private DATabComposite memoryTabView = null; + private DATabComposite memoryRightTabView = null; MemoryChartView memoryChartView; MemoryDetailsTableView memoryDetailsTableView; @@ -73,22 +73,19 @@ public class MemoryPage extends DABaseDataPageComposite { memoryChartView = new MemoryChartView(topForm, SWT.NONE); addView(memoryChartView); - - + memoryTabView = new DATabComposite(bottomLeftForm, SWT.NONE, false, true); { + memoryTabView.setID(AnalyzerLabels.LEFT_TABLE_VIEW_ID); memoryDetailsTableView = new MemoryDetailsTableView(memoryTabView.getContentComposite(), SWT.NONE); memoryTabView.addView(memoryDetailsTableView, false); - addView(memoryDetailsTableView); - + memoryRangeAnalysisView = new MemoryRangeAnalysisView(memoryTabView.getContentComposite(), SWT.NONE); memoryTabView.addView(memoryRangeAnalysisView, true); - addView(memoryRangeAnalysisView); memoryStatisticsTableView = new MemoryStatisticsTableView(memoryTabView.getContentComposite(), SWT.NONE); memoryTabView.addView(memoryStatisticsTableView, false); - addView(memoryStatisticsTableView); PersistentAllocationsSelectionListener persistentAllocsListener = new PersistentAllocationsSelectionListener( this); @@ -97,27 +94,29 @@ public class MemoryPage extends DABaseDataPageComposite { memoryTabView.getContentComposite(), SWT.NONE, false); ((MemoryPersistentAllocationsTable) memoryPersistentAllocationsTableView.getControl()) .getTable().addSelectionListener(persistentAllocsListener); - showView(memoryPersistentAllocationsTableView, + showView(memoryTabView, memoryPersistentAllocationsTableView, MenuBar.getInstance().getPersistentAllocationsSelection()); memoryLeaksTableView = new MemoryPersistentAllocationsTableView( memoryTabView.getContentComposite(), SWT.NONE, true); ((MemoryPersistentAllocationsTable) memoryLeaksTableView.getControl()).getTable() .addSelectionListener(persistentAllocsListener); - showView(memoryLeaksTableView, SettingDataManager.INSTANCE + showView(memoryTabView, memoryLeaksTableView, SettingDataManager.INSTANCE .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)); } addView(memoryTabView); - DATabComposite memoryRightTabView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); + memoryRightTabView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); { + memoryRightTabView.setID(AnalyzerLabels.RIGHT_TABLE_VIEW_ID); memoryMapView = new MemoryMapView(memoryRightTabView.getContentComposite(), SWT.NONE); memoryRightTabView.addView(memoryMapView, false); - addView(memoryMapView); memoryCallStackView = new MemoryCallStackView(memoryRightTabView.getContentComposite(), SWT.NONE); - memoryRightTabView.addView(memoryCallStackView, false); - addView(memoryCallStackView); + showView(memoryRightTabView, memoryCallStackView, + MenuBar.getInstance().getPersistentAllocationsSelection() + || SettingDataManager.INSTANCE + .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)); } addView(memoryRightTabView); @@ -137,19 +136,19 @@ public class MemoryPage extends DABaseDataPageComposite { } /** - * Shows or hides given {@code view} depending on the value of the - * {@code show} argument. + * Shows or hides given {@code view} in given {@code tab} depending on the + * value of the {@code show} argument. * + * @param tab {@link DATabComposite} tab composite that should contains + * {@code view} * @param view {@link DABaseComposite} instance * @param show whether {@code view} should be shown */ - private void showView(DABaseComposite view, boolean show) { + private void showView(DATabComposite tab, DABaseComposite view, boolean show) { if (show) { - memoryTabView.addView(view); - addView(view); + tab.addView(view); } else { - memoryTabView.removeView(view.getID(), false); - removeView(view); + tab.removeView(view.getID(), false); } resizeTableButton(); } @@ -161,8 +160,11 @@ public class MemoryPage extends DABaseDataPageComposite { * @param show whether the table should be shown */ public void showPersistentAllocationsView(boolean show) { - showView(memoryPersistentAllocationsTableView, show); - + showView(memoryTabView, memoryPersistentAllocationsTableView, show); + showView(memoryRightTabView, memoryCallStackView, + MenuBar.getInstance().getPersistentAllocationsSelection() + || SettingDataManager.INSTANCE + .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)); // forces table to be updated when the view will be shown again if (!show) memoryPersistentAllocationsTableView.hide(); @@ -175,8 +177,11 @@ public class MemoryPage extends DABaseDataPageComposite { * @param show whether the table should be shown */ public void showLeaksView(boolean show) { - showView(memoryLeaksTableView, show); - + showView(memoryTabView, memoryLeaksTableView, show); + showView(memoryRightTabView, memoryCallStackView, + MenuBar.getInstance().getPersistentAllocationsSelection() + || SettingDataManager.INSTANCE + .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)); // forces table to be updated when the view will be shown again if (!show) memoryLeaksTableView.hide(); @@ -185,7 +190,5 @@ public class MemoryPage extends DABaseDataPageComposite { @Override public void clear() { super.clear(); - MemoryDataManager.getInstance().clear(); - HeapDataManager.getInstance().clear(); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPersistentAllocationsTableView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPersistentAllocationsTableView.java index b165154..9aadbfa 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPersistentAllocationsTableView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryPersistentAllocationsTableView.java @@ -57,7 +57,8 @@ public class MemoryPersistentAllocationsTableView extends DAHidableViewComposite ID = onlyLeaks ? MemoryPage.leaksViewID : MemoryPage.persistentAllocsViewID; tableComp = new MemoryPersistentAllocationsTable(getContentArea(), SWT.NONE, - SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL, onlyLeaks); + SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, + onlyLeaks); setDataComposite(tableComp); } @@ -75,7 +76,7 @@ public class MemoryPersistentAllocationsTableView extends DAHidableViewComposite } } - if (DAState.isRunning()) { + if (!DAState.isDone()) { if (!this.isHidden()) { if (!tableComp.isSelectionPerformed()) hide(); @@ -111,7 +112,7 @@ public class MemoryPersistentAllocationsTableView extends DAHidableViewComposite if (selData.getStartTime() == selData.getEndTime()) { tableComp.setSelectionRange((long) 0, (long) 0); - if (DAState.isRunning()) { + if (!DAState.isDone()) { hide(); tableComp.clear(); return; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryStatisticsTableView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryStatisticsTableView.java index 4365ba9..c07c57e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryStatisticsTableView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/MemoryStatisticsTableView.java @@ -60,7 +60,7 @@ public class MemoryStatisticsTableView extends DAHidableViewComposite { @Override public void updateView() { - if (DAState.isRunning()) { + if (!DAState.isDone()) { if (!this.isHidden()) { if (!tableComp.isSelectionPerformed()) hide(); @@ -96,7 +96,7 @@ public class MemoryStatisticsTableView extends DAHidableViewComposite { if (selData.getStartTime() == selData.getEndTime()) { tableComp.setSelectionRange((long) 0, (long) 0); - if (DAState.isRunning()) { + if (!DAState.isDone()) { hide(); tableComp.clear(); return; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChart.java index 4081b16..dbf72c2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChart.java @@ -28,10 +28,9 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.swt.graphics.Image; -import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; -import org.tizen.dynamicanalyzer.ui.common.PopupRangeAnalysisMenuItemOnChartListener; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.widgets.chart.DAChart; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType; @@ -40,7 +39,6 @@ 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 MemoryChart { public DAChart chart; @@ -65,6 +63,7 @@ public class MemoryChart { this.chartName = chartName; this.chartBoardItem = chartBoardItem; this.chart = chart; + this.popupMenu = new ChartPopupMenu(chart); } public DAChartBoardItem getChartItem() { @@ -124,8 +123,6 @@ public class MemoryChart { chart = item.getChart(); setChartStyle(); - popupMenu = new DAPopupMenu(chart); - initPopupMenu(chartBoard, popupMenu); return item; } @@ -144,13 +141,6 @@ public class MemoryChart { plot.setAxisFont(FontResources.CHART_AXIS_FONT); } - protected void initPopupMenu(DAChartBoard chartBoard, DAPopupMenu popupMenu) { - popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, chartBoard, chart)); - } - public void pushChild(MemoryChart child) { children.add(child); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartBoard.java index b135577..4dd15f6 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartBoard.java @@ -43,14 +43,14 @@ import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.setting.TargetData; -import org.tizen.dynamicanalyzer.ui.common.PopupRangeAnalysisMenuItemOnChartListener; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataProcessor; import org.tizen.dynamicanalyzer.ui.memory.data.MemoryDataManager; import org.tizen.dynamicanalyzer.ui.memory.data.ProcessMemoryDBTable; +import org.tizen.dynamicanalyzer.ui.memory.data.util.Query; import org.tizen.dynamicanalyzer.ui.page.MenuBar; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; @@ -63,8 +63,6 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip; import org.tizen.dynamicanalyzer.widgets.chart.DAChartRenderer; 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 MemoryChartBoard extends DADefaultChartBoard { private int allProcessPID = 0; @@ -139,20 +137,6 @@ public class MemoryChartBoard extends DADefaultChartBoard { 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); } public void updateChartBoard() { @@ -401,16 +385,6 @@ public class MemoryChartBoard extends DADefaultChartBoard { tooltip.setFont(FontResources.CHART_TOOLTIP_FONT); plot.setTooltip(tooltip); - final MemoryChart tmp = chart; - - DAPopupMenu popupMenu = new DAPopupMenu(chart.getChart()); - popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, this, tmp.getChart())); - - chart.popupMenu = popupMenu; - TimelineChartMouseEventListener memoryChartMouseEventListener = new TimelineChartMouseEventListener( chart.getPopupMenu(), getTimeline(), MemoryPage.pageID); chart.getChart().addMouseListener(memoryChartMouseEventListener); @@ -464,12 +438,12 @@ public class MemoryChartBoard extends DADefaultChartBoard { heapChart.chart.getPlot().setAxisRangeY(0, getNormalizedHeight(targetProcessDBData)); // Draw Persistent Memory Series only if tracing is stopped - if (!DAState.isRunning() && showPersistentSeries) { + if (DAState.isDone() && showPersistentSeries) { // no need to select data from DB every time if it is not // changing if (persistentData == null) - persistentData = HeapDataManager.getInstance() - .remainedAllocatedListForRange(start, end, false); + persistentData = HeapDataProcessor.getInstance() + .remainedAllocatedListForRange(new Query(start, end)); heapChart.showPersistentSeries(); heapChart.updatePersistentSeries(persistentData); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartMouseEventListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartMouseEventListener.java deleted file mode 100644 index cea7544..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/chart/MemoryChartMouseEventListener.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Dongkye Lee - * Jaeyong Lee - * Gihun Chang - * - * 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. - * - */ - -package org.tizen.dynamicanalyzer.ui.memory.chart; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseEvent; -import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; -import org.tizen.dynamicanalyzer.ui.common.UIEventChartContextMenuItem; -import org.tizen.dynamicanalyzer.ui.timeline.chart.ScreenshotChart; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.widgets.chart.DAChart; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotMarker; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem; -import org.tizen.dynamicanalyzer.widgets.chart.DAScreenshotChartPlot; -import org.tizen.dynamicanalyzer.widgets.chart.DAUIEventChartPlot; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; -import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; - -public class MemoryChartMouseEventListener extends TimelineChartMouseEventListener { - - public MemoryChartMouseEventListener(DAPopupMenu menu, DATimeline timeline, String pageID) { - super(menu, timeline, pageID); - } - - @Override - public void mouseDown(MouseEvent e) { - DAChart chart = (DAChart) e.widget; - DAChartPlot plot = chart.getPlot(); - DAChartPlotMarker marker = plot.getMarkers().get(SELECTION_MARKER_INDEX); - if (!(marker instanceof DAChartPlotIntervalMarker)) { - return; - } - DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) marker; - - double eventTime = plot.getXFromXPixel(e.x); - - if (e.button == 3) { - List itemList = menu.getItems(); - DAPopupMenuItem startItem = itemList.get(0); - DAPopupMenuItem endItem = itemList.get(1); - DAPopupMenuItem fromSelectionItem = itemList.get(2); - DAPopupMenuItem analysisItem = itemList.get(3); - DAPopupMenuItem clearItem = itemList.get(4); - - if (eventTime * TimelineConstants.MEGA_DOUBLE <= Toolbar.INSTANCE.getTime()) { - startItem.setEnabled(true); - endItem.setEnabled(true); - analysisItem.setEnabled(rangeDataManager.isAnalyzable()); - clearItem.setEnabled(rangeDataManager.isBeingAnalyzed()); - - startItem.setDoubleData(eventTime); - endItem.setDoubleData(eventTime); - } else { - startItem.setEnabled(false); - endItem.setEnabled(false); - analysisItem.setEnabled(rangeDataManager.isAnalyzable()); - clearItem.setEnabled(rangeDataManager.isBeingAnalyzed()); - } - - if (intervalMarker.getStartVal() != intervalMarker.getEndVal()) { - fromSelectionItem.setEnabled(true); - } else { - fromSelectionItem.setEnabled(false); - } - - if (plot instanceof DAUIEventChartPlot) { - List startIndexList = new ArrayList(); - List endIndexList = new ArrayList(); - - for (DAChartSeries chartSeries : chart.getSeriesList()) { - int startIndex = chartSeries.getNextIndexByXvalue(intervalMarker.getStartVal()); - int endIndex = chartSeries.getPrevIndexByXvalue(intervalMarker.getEndVal()); - - startIndexList.add(startIndex); - endIndexList.add(endIndex + 1); - } - DAPopupMenuItem eventListItem = menu.getItems().get(menu.getItems().size() - 1); - ((UIEventChartContextMenuItem) eventListItem).setChartSeriesList(chart - .getSeriesList()); - ((UIEventChartContextMenuItem) eventListItem).setStartIndexList(startIndexList); - ((UIEventChartContextMenuItem) eventListItem).setEndIndexList(endIndexList); - - eventListItem.setEnabled(true); - } - - return; - } - - boolean bShift = false; - if ((e.stateMask & SWT.SHIFT) != 0) { - bShift = true; - } - - if (plot instanceof DAScreenshotChartPlot) { - DAChartSeries series = chart.getSeries(0); - if (series != null) { - int index = series.getPrevIndexByXvalue(eventTime); - if (index >= 0 && index < series.getSeriesItemList().size()) { - DAChartSeriesItem item = series.getSeriesItemList().get(index); - double itemTime = item.getX(); - int imageWidth = item.getImage().getBounds().width; - double imageRightTime = itemTime + plot.getXFromXPixel(imageWidth) - - plot.getVisibleStartX(); - - if (eventTime > itemTime && eventTime < imageRightTime) { - if (bShift == true && intervalMarker.getStartVal() != -1) { - if (baseTime > eventTime) { - intervalMarker.setInterval(eventTime, baseTime); - } else { - intervalMarker.setInterval(baseTime, eventTime); - } - } else { - intervalMarker.setInterval(itemTime, eventTime); - baseTime = itemTime; - } - } else { - if (bShift == true && intervalMarker.getStartVal() != -1) { - if (baseTime > eventTime) { - intervalMarker.setInterval(eventTime, baseTime); - } else { - intervalMarker.setInterval(baseTime, eventTime); - } - } else { - intervalMarker.setInterval(eventTime, eventTime); - baseTime = eventTime; - } - } - } else { - if (bShift == true && intervalMarker.getStartVal() != -1) { - if (baseTime > eventTime) { - intervalMarker.setInterval(eventTime, baseTime); - } else { - intervalMarker.setInterval(baseTime, eventTime); - } - } else { - intervalMarker.setInterval(eventTime, eventTime); - baseTime = eventTime; - } - } - } - - DAChart chartWidget = ((ScreenshotChart) TimelineChartManager.getInstance().getChartInstance( - TimelineConstants.CHART_TYPE_SCREENSHOT)).getChart(); - DAScreenshotChartPlot screenshotChartPlot = (DAScreenshotChartPlot) chartWidget.getPlot(); - screenshotChartPlot.setSelectedImageIndex(getHighlightedImageIndex(screenshotChartPlot, - chartWidget.getSeriesList(), e.x)); - } else { - if (bShift == true && intervalMarker.getStartVal() != -1) { - if (baseTime > eventTime) { - intervalMarker.setInterval(eventTime, baseTime); - } else { - intervalMarker.setInterval(baseTime, eventTime); - } - } else { - intervalMarker.setInterval(eventTime, eventTime); - baseTime = eventTime; - } - } - - chart.redraw(); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManager.java index 8230093..63ecc02 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataManager.java @@ -3,7 +3,7 @@ * * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. * - * Contact: + * Contact: * Dongkye Lee * Jaeyong Lee * Gihun Chang @@ -19,890 +19,68 @@ * 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. - * + * */ package org.tizen.dynamicanalyzer.ui.memory.data; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.nio.charset.StandardCharsets; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Scanner; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DAState; import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.database.DBInserter; import org.tizen.dynamicanalyzer.database.IResultSet; -import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.model.TreeInput; -import org.tizen.dynamicanalyzer.nl.MemoryPageLabels; -import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.protocol.Protocol; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.setting.FlatPreferences; -import org.tizen.dynamicanalyzer.setting.SettingDataManager; 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.swap.model.data.MemoryData; -import org.tizen.dynamicanalyzer.ui.memory.table.MemoryPersistentAllocationsTable; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.util.Logger; -import org.tizen.dynamicanalyzer.utils.Formatter; +/** + * Process {@link ProtocolConstants#MSG_PROBE_MEMORY} messages and fill alloc and free db tables. + */ public class HeapDataManager extends PageDataManager { - - /** - * Class representing basic SQL query executed by {@link HeapDataManager}. - */ - private static class Query { - /** - * Start time of selected time range. - */ - public long startTime; - /** - * End time of selected time range. - */ - public long endTime; - /** - * String representation of selected PIDs. - */ - public String pidString; - - /** - * Default constructor. - */ - public Query() { - clear(); - } - - /** - * Constructs new instance with given time range. - * - * @param startTime start time of selected time range - * @param endTime end time of selected time range - */ - public Query(long startTime, long endTime) { - this.startTime = startTime; - this.endTime = endTime; - this.pidString = getTargetPIDString(); - } - - /** - * Resets values of all fields to defaults. - */ - public void clear() { - startTime = -1L; - endTime = -1L; - pidString = ""; - } - - /** - * Auto-generated method. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) (endTime ^ (endTime >>> 32)); - result = prime * result + ((pidString == null) ? 0 : pidString.hashCode()); - result = prime * result + (int) (startTime ^ (startTime >>> 32)); - return result; - } - - /** - * Auto-generated method. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof Query)) - return false; - Query other = (Query) obj; - if (endTime != other.endTime) - return false; - if (pidString == null) { - if (other.pidString != null) - return false; - } else if (!pidString.equals(other.pidString)) - return false; - if (startTime != other.startTime) - return false; - return true; - } - - /** - * Constructs string representation of currently selected PIDs. - * - * @return string representation of currently selected PIDs - */ - private static String getTargetPIDString() { - // TODO: move this method to some utility class and generalize all - // SQL queries management. - - StringBuilder pidliststring = new StringBuilder(); - pidliststring.append(CommonConstants.OPEN_BRACKET); - - int targetPID = Toolbar.INSTANCE.getSelectedPid(); - - if (targetPID > 0) - pidliststring.append(targetPID); - else - for (int pid : Global.getProject().getProcessIDs()) { - if (pidliststring.length() != 1) - pidliststring.append(CommonConstants.COMMA); - - pidliststring.append(pid); - } - - pidliststring.append(CommonConstants.CLOSE_BRACKET); - - return pidliststring.toString(); - } - } - private static HeapDataManager instance = new HeapDataManager(); - private final int TOTAL_PID = -1; - private final int MEM_API_TYPE_ALLOC = 0; private final int MEM_API_TYPE_FREE = 1; - - private final int PRESISTENT_SIZE_INDEX = 0; - private final int PRESISTENT_COUNT_INDEX = 1; - private final int FREE_COUNT_INDEX = 2; - private final int TOTAL_SIZE_INDEX = 3; - - /** - * Constant use for generation of unique selection indexes. - */ - private final int MAX_LIBRARIES_PER_PID = 500; private int REALLOC_ID; - + private MemAllocDBTable allocateDBTable = new MemAllocDBTable(); private MemFreeDBTable freeDBTable = new MemFreeDBTable(); - private MemLSanTable lsanDBTable = new MemLSanTable(); private DBInserter allocateDBInserter = makeInserter(allocateDBTable); private DBInserter freeDBInserter = makeInserter(freeDBTable); - private DBInserter lsanDBInserter = makeInserter(lsanDBTable); - - private ArrayList> memoryAllocDataList = new ArrayList> (); - private ArrayList> memoryfreeDataList = new ArrayList> (); - - private volatile List persistentAllocsTableInput = new ArrayList(); - private volatile List leaksTableInput = new ArrayList(); - private volatile List statisticsTreeInput = new ArrayList(); - - private List> preAllocDataList = new ArrayList>(); - private List> preFreeDataList = new ArrayList>(); - private List> preLeaksAllocDataList = new ArrayList>(); - private List> preLeaksFreeDataList = new ArrayList>(); - - private HashSet addressMap = new HashSet (); - - private Query lastFullAllocsQuery = new Query(); - private Query lastLeaksQuery = new Query(); - + + private List> memoryAllocDataList; + private List> memoryfreeDataList; + public static HeapDataManager getInstance() { return instance; } - - public void clear() { - memoryAllocDataList.clear(); - memoryfreeDataList.clear(); - - addressMap.clear(); - - persistentAllocsTableInput.clear(); - leaksTableInput.clear(); - statisticsTreeInput.clear(); - - preAllocDataList.clear(); - preFreeDataList.clear(); - preLeaksAllocDataList.clear(); - preLeaksFreeDataList.clear(); - - lastFullAllocsQuery.clear(); - lastLeaksQuery.clear(); - } @Override protected void makeData(LogPackage pack) { REALLOC_ID = Global.getFunctionID("realloc"); - - Logs allocatedlogs = getLogsFromLogPackage(pack, ProtocolConstants.MSG_PROBE_MEMORY); - - makeHeapData(allocatedlogs); - } - - /** - * Request MEM_ALLOC_DB for row, where sequence number equals to specified - * with {@code seqNum}. Report error, if data are corrupted. - * - * @param seqNum specified sequence number - * @return Row data if exist and unique, or null otherwise - */ - public List getAllocationRowBySeqFromDB(long seqNum) { - String where = "WHERE SEQUENCE_NUMBER = " + Long.toString(seqNum); - List> queryResult = allocateDBTable.selectRequiredColumns(where); - if (queryResult.size() != 1) { - Logger.error("Stored data was corrupted!"); - return null; - } - - return queryResult.get(0); - } - - /** - * Request MEM_ALLOC_DB for ALLOCATOR_ADDRESS value from row with specified sequence number - * @param seqNum requested sequence number - * @return allocator's address as Long value or 0 is address couldn't be read from table - */ - public Long getAllocatorAddrBySeqFromDB(long seqNum) { - if (!isAllocatorAddrSupported()) return 0L; - String where = "WHERE SEQUENCE_NUMBER = " + Long.toString(seqNum); - final String columnName = MemAllocDBTable.COLUMN.ALLOCATOR_ADDRESS.name; - List> queryResult = allocateDBTable.selectData( - new ArrayList(Arrays.asList(columnName)), where, - new IResultSet() { - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - if (rs.getMetaData().getColumnCount() > 0) - row.add(Long.valueOf(rs.getLong(1))); - else - row.add(Long.valueOf(0)); - } catch (SQLException e) { - Logger.exception(e); - } - return row; - } - }); - if (queryResult.size() != 1) { - Logger.warning("Could't extract " + columnName + " for seq#" + seqNum + " from " - + MemAllocDBTable.TABLENAME); - return 0L; - } - return (Long) queryResult.get(0).get(0); - } - - /** - * Selects all data from basic columns of {@link MemAllocDBTable} using - * specified {@code query} and optionally filters leaks depending on - * {@code onlyLeaks} argument. - * - * @param query {@link Query} instance - * @param onlyLeaks whether only leaks data should be selected - * @return selected data from database - */ - private List> getAllocationDataFromDB(Query query, boolean onlyLeaks) { - String where = getTimeWhereQuery(query, MemAllocDBTable.COLUMN.ALLOCATED_TIME.name, - onlyLeaks); - where += " ORDER BY " + MemAllocDBTable.COLUMN.SEQUENCE_NUMBER.name; - - List> queryResult = allocateDBTable.selectBasicColumns(where); - - return queryResult != null ? queryResult : new ArrayList>(); - } - - /** - * Selects all data from basic columns of {@link MemFreeDBTable} using - * specified {@code query} and optionally filters leaks depending on - * {@code onlyLeaks} argument. - * - * @param query {@link Query} instance - * @param onlyLeaks whether only leaks data should be selected - * @return selected data from database - */ - private List> getFreeDataFromDB(Query query, boolean onlyLeaks) { - String where = getTimeWhereQuery(query, MemFreeDBTable.COLUMN.FREE_TIME.name, onlyLeaks); - where += " ORDER BY " + MemFreeDBTable.COLUMN.SEQUENCE_NUMBER.name; - - List> queryResult = freeDBTable.selectBasicColumns(where); - - return queryResult != null ? queryResult : new ArrayList>(); - } - - /** - * Calculates and caches data for 'Persistent Allocations' or 'Leaks' table - * depending on {@code onlyLeaks} argument. - * - * @param onlyLeaks whether only leaks data should be cached - */ - public void makeWholePersistentAllocsData(boolean onlyLeaks) { - if(DAState.isRunning() == true) { - return; - } - - List> allocDataList = null; - - allocDataList = remainedAllocatedListForRange(0L, 0L, onlyLeaks); - - if (allocDataList == null || allocDataList.size() == 0) - return; - - int index = 0; - int size = allocDataList.size(); - List output = new ArrayList(); - - for (int j = 0; j < size; j++) { - List iAllocData = allocDataList.get(j); - TableInput input = makePersistentAllocsTableInput(iAllocData, index++, onlyLeaks); - if (input != null) - output.add(input); - } - - if (onlyLeaks) - leaksTableInput = output; - else - persistentAllocsTableInput = output; - } - - /** - * Constructs TreeInput list for MemoryStatisticsTable based on selected - * time range (0 as start and end time means whole range). - * - * @param startTime - * start time of selected range - * @param endTime - * end time of selected range - */ - public void makeStatisticsData(long startTime, long endTime) { - Query query = new Query(startTime, endTime); - Map>> staticdatas = remainedAllocStaticData(query); - - int index = 0; - List output = new ArrayList(); - - // for each PID - for (Map.Entry>> elem : staticdatas.entrySet()) { - long persistentSizeForPid = 0; - long persistentCountForPid = 0; - long freeCountForPid = 0; - long totalSizeForPid = 0; - - List children = new ArrayList(); - - // calculate initial selection index for pid - if (elem.getKey() == TOTAL_PID) { - index = 0; - } else { - index = elem.getKey() * MAX_LIBRARIES_PER_PID; - } - - int parentIndex = index++; - - // for each library - for (Map.Entry> libEntry : elem.getValue().entrySet()) { - String apiName = Global.getLibraryName(libEntry.getKey()); - TreeInput staticInput = makeTreeInputForDatas(apiName, false, - libEntry.getValue(), index++); - - if (staticInput == null) - continue; - - children.add(staticInput); - - persistentSizeForPid += (Long) libEntry.getValue().get(0); - persistentCountForPid += (Long) libEntry.getValue().get(1); - freeCountForPid += (Long) libEntry.getValue().get(2); - totalSizeForPid += (Long) libEntry.getValue().get(3); - } - - List total = new ArrayList(); - - total.add(persistentSizeForPid); - total.add(persistentCountForPid); - total.add(freeCountForPid); - total.add(totalSizeForPid); - total.add(persistentCountForPid + freeCountForPid); - - TreeInput parent; - if (elem.getKey() == TOTAL_PID) { - parent = makeTreeInputForDatas("Total", false, total, parentIndex); - } else { - parent = makeTreeInputForDatas(elem.getKey().toString(), true, total, parentIndex); - } - - if (parent == null) - continue; - - parent.getChildren().addAll(children); - output.add(parent); - } - - statisticsTreeInput = output; - } - - /** - * Gets data for 'Persistent Allocations' table. - * - * @return list of {@link TableInput} - */ - public List getPersistentAllocsTableInput() { - return persistentAllocsTableInput; - } - - /** - * Gets data for 'Leaks' table. - * - * @return list of {@link TableInput} - */ - public List getLeaksTableInput() { - return leaksTableInput; - } - - public List getStatisticsTreeInput() { - return statisticsTreeInput; - } - - private Map>> remainedAllocStaticData(Query query) { - updateFullAllocCache(query); - return makeRemainedAllocatedStatic(preAllocDataList, preFreeDataList); - } - - public List> remainedAllocatedListForRange(long startTime, long endTime, - boolean onlyLeaks) { - Query query = new Query(startTime, endTime); - return remainedAllocatedListForRange(query, onlyLeaks); - } - - private List> remainedAllocatedListForRange(Query query, boolean onlyLeaks) { - if (onlyLeaks) { - updateLeaksCache(query); - return makeRemainedAllocatedList(preLeaksAllocDataList, preLeaksFreeDataList); - } - - updateFullAllocCache(query); - return makeRemainedAllocatedList(preAllocDataList, preFreeDataList); - } - - /** - * Updates library entry with id equal to binaryId in given - * map. It increases allocated and total size by allocSize and - * increments allocated count. - * - * @param libStatisticMap - * statistics map for libraries - * @param binaryId - * library id - * @param allocSize - * size of allocation - */ - private void updateStatisticDataAllocs(Map> libStatisticMap, int binaryId, long allocSize) { - if (libStatisticMap.containsKey(binaryId)) { - List libstaticdata = libStatisticMap.get(binaryId); - - libstaticdata.set(PRESISTENT_SIZE_INDEX, (Long) libstaticdata.get(PRESISTENT_SIZE_INDEX) + allocSize); - libstaticdata.set(PRESISTENT_COUNT_INDEX, (Long) libstaticdata.get(PRESISTENT_COUNT_INDEX) + 1); - libstaticdata.set(TOTAL_SIZE_INDEX, (Long) libstaticdata.get(TOTAL_SIZE_INDEX) + allocSize); - - libStatisticMap.put(binaryId, libstaticdata); - } else { - /* - * 0: allocated size - * 1: allocated count - * 2: free count - * 3: total size - */ - libStatisticMap.put(binaryId, Arrays.asList((Object) allocSize, 1l, 0l, allocSize)); - } - } - - /** - * Updates library entry with id equal to binaryId in given - * map. It decreases allocated size by freeSize, increments - * free count and decrements persistent count. - * - * @param libStatisticMap - * statistics map for libraries - * @param binaryId - * library id - * @param freeSize - * size of freed allocation - */ - private void updateStatisticDataFrees(Map> libStatisticMap, int binaryId, long freeSize) { - if (libStatisticMap.containsKey(binaryId)) { - List libstaticdata = libStatisticMap.get(binaryId); - - libstaticdata.set(PRESISTENT_SIZE_INDEX, (Long) libstaticdata.get(PRESISTENT_SIZE_INDEX) - freeSize); - libstaticdata.set(PRESISTENT_COUNT_INDEX, (Long) libstaticdata.get(PRESISTENT_COUNT_INDEX) - 1); - libstaticdata.set(FREE_COUNT_INDEX, (Long) libstaticdata.get(FREE_COUNT_INDEX) + 1); - - libStatisticMap.put(binaryId, libstaticdata); - } - } - /** - * Constructs data map for Statistics table. - * - * @param allocData - * data from MEM_ALLOC_DB database table - * @param freeData - * data from MEM_FREE_DB database table - * @return constructed map - */ - private Map>> makeRemainedAllocatedStatic(List> allocData, - List> freeData) { - Map>> addressMap = new HashMap>>(); - Map>> pidStatisticMap = new HashMap>>(); - - // 'Total' entry - Map> libStatisticMapTotal = new HashMap>(); - pidStatisticMap.put(TOTAL_PID, libStatisticMapTotal); - - int allocDataSize = allocData.size(); - for (int j = 0; j < allocDataSize; j++) { - List iAllocData = allocData.get(j); - - long address = (Long) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_ADDRESS.index); - long alloctime = (Long) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_TIME.index); - long allocSize = (Long) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_MEMORY_SIZE.index); - int binaryId = (Integer) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.CALLER_LIBRARY_ID.index); - int pid = (Integer) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.PID.index); - - if(!addressMap.containsKey(address)) { - List> newlist = new ArrayList>(); - addressMap.put(address, newlist); - } - - List onedata = new ArrayList(); - onedata.add(alloctime); - onedata.add(allocSize); - onedata.add(binaryId); - - addressMap.get(address).add(onedata); - - if (!pidStatisticMap.containsKey(pid)) - pidStatisticMap.put(pid, new HashMap>()); - - updateStatisticDataAllocs(pidStatisticMap.get(pid), binaryId, allocSize); - updateStatisticDataAllocs(libStatisticMapTotal, binaryId, allocSize); - } - - for (int i = 0; i < freeData.size(); i++) { - List iFreeData = freeData.get(i); - long address = (Long) iFreeData.get(MemFreeDBTable.BASIC_COLUMN.ALLOCATED_ADDRESS.index); - long freetime = (Long) iFreeData.get(MemFreeDBTable.BASIC_COLUMN.FREE_TIME.index); - int pid = (int) iFreeData.get(MemFreeDBTable.BASIC_COLUMN.PID.index); - Map> libStatisticMapPid = pidStatisticMap.get(pid); - - if(addressMap.containsKey(address)) { - int size = addressMap.get(address).size(); - - for(int removeindex = 0; removeindex < size ; removeindex++) { - List onedata = addressMap.get(address).get(removeindex); - - if((Long) onedata.get(0) <= freetime) { - long freeSize = (Long) onedata.get(1); - int binaryId = (Integer) onedata.get(2); - - updateStatisticDataFrees(libStatisticMapPid, binaryId, freeSize); - updateStatisticDataFrees(libStatisticMapTotal, binaryId, freeSize); - - addressMap.get(address).remove(removeindex); - break; - } - } - } - } - - return pidStatisticMap; - } - - private List> makeRemainedAllocatedList(List> allocData, List> freeData) { - Map> addressMap = new HashMap>(); - List> output = new ArrayList>(); - - for (int i = 0; i < freeData.size(); i++) { - List iFreeData = freeData.get(i); - - long freetime = (Long) iFreeData.get(MemFreeDBTable.BASIC_COLUMN.FREE_TIME.index); - long address = (Long) iFreeData.get(MemFreeDBTable.BASIC_COLUMN.ALLOCATED_ADDRESS.index); - - if(!addressMap.containsKey(address)) { - List newlist = new ArrayList(); - addressMap.put(address, newlist); - } - - addressMap.get(address).add(freetime); - } - - int allocDataSize = allocData.size(); - for (int i = 0; i < allocDataSize; i++) { - List iAllocData = allocData.get(i); - boolean live = true; - long alloctime = (Long) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_TIME.index); - long address = (Long) iAllocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_ADDRESS.index); - - if(addressMap.containsKey(address)) { - int size = addressMap.get(address).size(); - for(int j = 0; j < size ; j++) { - Long freetime = addressMap.get(address).get(j); - - if(alloctime <= freetime) { - live = false; - addressMap.get(address).remove(j); - break; - } - } - } - - if(live == true) { - output.add(iAllocData); - } - } - - return output; - } - - /** - * Returns text that should be displayed for table entry. - * - * @param apiName entry name - * @param isProcess true if api denotes process pid entry - * @return displayed text for entry - */ - private String getDisplayedEntryName(String apiName, boolean isProcess) { - if (isProcess) { - return "PID #" + apiName; - } else { - if (apiName.equals(Global.getProject().getApplicationInfo().getExecPath())) - return MemoryPageLabels.MEMORY_MAIN_EXCUTABLE; - else - return apiName; - } - } - - /** - * Creates {@link TreeInput} entry for Statistics table. - * - * @param apiName name of entry - * @param isProcess flag denotes whether this api name is a process entry or library entry - * @param staticdata data in format of list of 4 long numbers - * @param index entry index - * @return created {@link TreeInput} entry - */ - public TreeInput makeTreeInputForDatas(String apiName, boolean isProcess, - List staticdata, int index) { - DATableDataFormat tableData = new DATableDataFormat(index); - - List text = new ArrayList(); - List data = new ArrayList(); - - if (staticdata == null) { - Logger.error("No statistics data for '%d' entry!", apiName); - return null; - } - - String entryName = getDisplayedEntryName(apiName, isProcess); - - Long PByte = (Long) staticdata.get(0); - Long PCount = (Long) staticdata.get(1); - Long FCount = (Long) staticdata.get(2); - Long TotalByte = (Long) staticdata.get(3); - Long TotalCount = PCount + FCount; - - text.add(entryName); data.add(apiName); - text.add(String.format("%,d", TotalCount)); data.add(TotalCount); - text.add(String.format("%,d", FCount)); data.add(FCount); - text.add(String.format("%,d", PCount)); data.add(PCount); - text.add(Formatter.toByteFormat(TotalByte)); data.add(TotalByte); - text.add(Formatter.toByteFormat(PByte)); data.add(PByte); - - tableData.getData().addAll(data); - tableData.setObject(entryName); - - TreeInput output = new TreeInput(); - output.setText(text); - output.setData(tableData); - - return output; - } - - /** - * Constructs {@link TableInput} for - * {@link MemoryPersistentAllocationsTable} using specified allocation data, - * index and adds a 'Leak' column data if {@code onlyLeaks} argument is set - * to {@code false}. - * - * @param allocData data selected from {@link MemAllocDBTable} - * @param index index of new {@link TableInput} - * @param onlyLeaks whether new {@link TableInput} will be used in 'Leaks' - * table, if set to {@code false}, 'Leak' column data will be - * added - * @return constructed instance of {@link TableInput} on success and - * {@code null} otherwise - */ - public TableInput makePersistentAllocsTableInput(List allocData, int index, - boolean onlyLeaks) { - DATableDataFormat tableData = new DATableDataFormat(index); - - List text = new ArrayList(); - List data = new ArrayList(); - - if (allocData == null) { - Logger.error("very strange case !!"); - return null; - } - // 0 : sequence number - hidden column for sorting - Long seq = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.SEQUENCE_NUMBER.index); - text.add(Long.toString(seq)); - data.add(seq); - // 1 : allocated time - long time = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_TIME.index); - data.add(Long.valueOf(time)); - try { - text.add(Formatter.toTimeFormat(time)); - } catch (NumberFormatException e) { - Logger.exception(e); - text.add(Long.toString(time)); - } - // 2 : PID - int pid = (Integer) allocData.get(MemAllocDBTable.BASIC_COLUMN.PID.index); - text.add(Integer.toString(pid)); - data.add(pid); - // 3 : TID - int tid = (Integer) allocData.get(MemAllocDBTable.BASIC_COLUMN.TID.index); - text.add(Integer.toString(tid)); - data.add(tid); - // 4 : address - Long address = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_ADDRESS.index); - text.add("0x" + Long.toHexString(address)); - data.add(address); - // 5 : size - Long size = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_MEMORY_SIZE.index); - text.add(Long.toString(size)); - data.add(size); - // 6 : library name - String libName = Global.getLibraryName((Integer)allocData.get(MemAllocDBTable.BASIC_COLUMN.CALLER_LIBRARY_ID.index)); - if (libName == null || libName.isEmpty()) { - libName = AnalyzerConstants.UNKNOWN_LIB; - } - - // Check if allocation was made from main binary - Project project = Global.getProject(); - boolean isMainBinary = project != null && project.getApplicationInfo() != null - && project.getApplicationInfo().getExecBinaryPath().equals(libName); - - // Filter leaks not from application binary - if (onlyLeaks && !isMainBinary) - return null; - - text.add(libName); - data.add(libName); - // 7 : api type - int apiId = (Integer) allocData.get(MemAllocDBTable.BASIC_COLUMN.API_ID.index); - String apiName = Global.getFunctionName(apiId); - text.add(apiName); - data.add(apiName); - - if (!onlyLeaks) { - // 8 : leak - boolean leak = false; - - if (isMainBinary && SettingDataManager.INSTANCE - .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)) { - updateLeaksCache(new Query(0L, 0L)); - leak = preLeaksAllocDataList.contains(allocData); - } - - text.add(leak ? CommonConstants.YES : CommonConstants.EMPTY); - data.add(leak ? CommonConstants.YES : CommonConstants.EMPTY); - } - - tableData.setType(AnalyzerConstants.TYPE_TABLE_MEM_ALLOCATEDTRACE); - - TreeInput output = new TreeInput(); - output.setText(text); - tableData.getData().addAll(data); - output.setData(tableData); + Logs allocatedlogs = getLogsFromLogPackage(pack, ProtocolConstants.MSG_PROBE_MEMORY); - return output; + makeHeapData(allocatedlogs); } - - /** - * Parses given LeakSanitizer report file. - * - * @param filepath path to pulled report file on host - */ - public void parseLSanReportFile(String filepath) { - Scanner scanner = null; - List> lsanDataList = new ArrayList>(); - - String parsingErrorMsg = "Failed to parse file: " + filepath; - try { - scanner = new Scanner(new FileInputStream(new File(filepath)), StandardCharsets.US_ASCII.name()); - - // loop through lines - while (scanner.hasNextLine()) { - /** - * There are 3 long fields separated by space character on each - * line in data file in following format: - * - * - */ - String[] fields = scanner.nextLine().split(" "); - if (fields.length != 3) { - Logger.error(parsingErrorMsg); - scanner.close(); - return; - } - - List row = new ArrayList(); - for (String field : fields) - row.add(Long.parseLong(field)); - - lsanDataList.add(row); - } - - if (!lsanDataList.isEmpty()) - lsanDBInserter.pushData(lsanDataList); - - } catch (FileNotFoundException e) { - Logger.warning("File was not found: " + filepath); - - } catch (NumberFormatException e) { - Logger.error(parsingErrorMsg + CommonConstants.NEW_LINE + e.getMessage()); - - } finally { - if (scanner != null) - scanner.close(); - } - } - private Logs getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) { Logs logs = logPack.getLogs(logCenterConstants); if (null == logs || logs.getRawLogs().size() == 0) { return null; } - + return logs; } @@ -913,8 +91,10 @@ public class HeapDataManager extends PageDataManager { Protocol projectProtocol = Global.getCurrentProtocol(); return (projectProtocol.getVersionNum() >= Protocol.VERSION_42.getVersionNum()); } + /** * Extract allocator's address from SWAP message + * * @param logData the SWAP message of MSG_PROBE_MEMORY type saved in {@link MemoryData} format * @return allocator's address as long value or 0 if protocol doesn't support such data */ @@ -927,22 +107,17 @@ public class HeapDataManager extends PageDataManager { return allocatorAddress; } - private void makeHeapData(Logs alloclogs) { - List memoryLogList = alloclogs == null ? null : alloclogs.getRawLogs(); - - if (memoryLogList == null) { + if (alloclogs == null) return; - } - - Collections.sort(memoryLogList, new AscCompare()); - - int size = memoryLogList.size(); - for (int i = 0; i < size; i++) { - MemoryData logData = (MemoryData) memoryLogList.get(i); - + + memoryAllocDataList = new ArrayList<>(); + memoryfreeDataList = new ArrayList<>(); + + for (LogData data : alloclogs.getRawLogs()) { + MemoryData logData = (MemoryData) data; long errorNo = logData.getErrno(); - + if (errorNo != 0) { continue; } @@ -951,54 +126,41 @@ public class HeapDataManager extends PageDataManager { int pid = logData.getPid(); long calleraddress = logData.getCallerPcAddr(); int binaryid = Global.getBinaryID(pid, logData.getTime(), calleraddress); - - if(MEM_API_TYPE_ALLOC == memApiType) { + + if (MEM_API_TYPE_ALLOC == memApiType) { long allocatorAddr = getAllocatorAddress(logData); makeAllocData(logData, binaryid, allocatorAddr); - } - else if(MEM_API_TYPE_FREE == memApiType) { + } else if (MEM_API_TYPE_FREE == memApiType) { makeFreeData(logData, binaryid); } - else{ - continue; - } } - if (memoryAllocDataList.size() > 0) { - @SuppressWarnings("unchecked") - List> mList = (List>) memoryAllocDataList.clone(); - memoryAllocDataList.clear(); - - allocateDBInserter.pushData(mList); + if (!memoryAllocDataList.isEmpty()) { + allocateDBInserter.pushData(memoryAllocDataList); } - if (memoryfreeDataList.size() > 0) { - @SuppressWarnings("unchecked") - List> fList = (List>) memoryfreeDataList.clone(); - memoryfreeDataList.clear(); - - freeDBInserter.pushData(fList); + if (!memoryfreeDataList.isEmpty()) { + freeDBInserter.pushData(memoryfreeDataList); } } - + private void makeAllocData(MemoryData mData, int binaryid, long allocatorAddr) { - ArrayList dbAllocData = new ArrayList(); - + List dbAllocData = new ArrayList<>(); + int pid = mData.getPid(); int tid = mData.getTid(); long address = mData.getAddress(); long mallocsize = mData.getSize(); - - if(REALLOC_ID == mData.getApiId()) { + + if (REALLOC_ID == mData.getApiId()) { try { Long freeaddress = Long.parseLong(mData.getArgs().replace("0x", "").split(",")[0], 16); makeFreeData(mData, freeaddress, binaryid); - } - catch(NumberFormatException ex) { + } catch (NumberFormatException ex) { Logger.warning("realloc address invalide : %s", mData.getArgs()); } } - + dbAllocData.add(Long.valueOf(mData.getSeq())); dbAllocData.add(Integer.valueOf(pid)); dbAllocData.add(Integer.valueOf(tid)); @@ -1011,26 +173,19 @@ public class HeapDataManager extends PageDataManager { dbAllocData.add(Integer.valueOf(mData.getMsgID())); dbAllocData.add(Long.valueOf(mallocsize)); dbAllocData.add(allocatorAddr == 0 ? null : Long.valueOf(allocatorAddr)); - memoryAllocDataList.add(dbAllocData); - //if(!addressMap.contains(address)) { - // addressMap.add(address); - //} + memoryAllocDataList.add(dbAllocData); } private void makeFreeData(MemoryData mData, int binaryid) { makeFreeData(mData, mData.getAddress(), binaryid); } - + private void makeFreeData(MemoryData mData, Long address, int binaryid) { - //if(!addressMap.contains(address)) { - // return; - //} - - ArrayList dbFreeData = new ArrayList(); - + ArrayList dbFreeData = new ArrayList<>(); + int pid = mData.getPid(); - + dbFreeData.add(Long.valueOf(mData.getSeq())); dbFreeData.add(Integer.valueOf(pid)); dbFreeData.add(Integer.valueOf(mData.getMsgID())); @@ -1042,85 +197,56 @@ public class HeapDataManager extends PageDataManager { } /** - * Constructs string representation of query conditions: time range, pid - * list and optional INNER JOIN with {@link MemLSanTable} if - * {@code onlyLeaks} is set as {@code true}. + * Request MEM_ALLOC_DB for row, where sequence number equals to specified + * with {@code seqNum}. Report error, if data are corrupted. * - * @param query {@link Query} instance - * @param timecolumn name of the column used for time data - * @param onlyLeaks whether result should filtered by data from - * {@link MemLSanTable} - * @return string representation of query conditions + * @param seqNum specified sequence number + * @return Row data if exist and unique, or null otherwise */ - private String getTimeWhereQuery(Query query, String timecolumn, boolean onlyLeaks) { - StringBuilder where = new StringBuilder(); - if (onlyLeaks) { - String table1 = "table1"; - String table2 = "table2"; - String joinCol = MemLSanTable.COLUMN.ALLOCATED_ADDRESS.name; - String join = String.format("%s INNER JOIN %s %s ON %s.%s = %s.%s ", table1, - MemLSanTable.TABLENAME, table2, table1, joinCol, table2, joinCol); - where.append(join); - } - - where.append("WHERE "); - if (query.startTime != 0 || query.endTime != 0) { - String timeRange = String.format("%s BETWEEN %s AND %s AND ", timecolumn, - Long.toString(query.startTime), Long.toString(query.endTime)); - where.append(timeRange); + public List getAllocationRowBySeqFromDB(long seqNum) { + String where = "WHERE SEQUENCE_NUMBER = " + Long.toString(seqNum); + List> queryResult = allocateDBTable.selectRequiredColumns(where); + if (queryResult.size() != 1) { + Logger.error("Stored data was corrupted!"); + return null; } - where.append(String.format("PID IN %s", query.pidString)); - - return where.toString(); - } - - /** - * Selects and caches all data from {@link MemAllocDBTable} and - * {@link MemFreeDBTable}, using specified {@code query} if it has changed - * since the last time. - * - * @param query {@link Query} instance - */ - private void updateFullAllocCache(Query query) { - if (lastFullAllocsQuery.equals(query)) - return; - - lastFullAllocsQuery = query; - - // TODO: Add check for data size to be loaded from data base. - // If data size exceeds predefined limit - invoke DALimit.stopTraceAndOpenWarningDialog() - preAllocDataList = getAllocationDataFromDB(lastFullAllocsQuery, false); - preFreeDataList = getFreeDataFromDB(lastFullAllocsQuery, false); + return queryResult.get(0); } /** - * Selects and caches all data from {@link MemAllocDBTable} and - * {@link MemFreeDBTable} inner joined with {@link MemLSanTable}, using - * specified {@code query} if it has changed since the last time. + * Request MEM_ALLOC_DB for ALLOCATOR_ADDRESS value from row with specified sequence number * - * @param query {@link Query} instance + * @param seqNum requested sequence number + * @return allocator's address as Long value or 0 is address couldn't be read from table */ - private void updateLeaksCache(Query query) { - if (lastLeaksQuery.equals(query)) - return; - - lastLeaksQuery = query; - - // TODO: Add check for data size to be loaded from data base. - // If data size exceeds predefined limit - invoke DALimit.stopTraceAndOpenWarningDialog() - preLeaksAllocDataList = getAllocationDataFromDB(lastLeaksQuery, true); - preLeaksFreeDataList = getFreeDataFromDB(lastLeaksQuery, true); - } - - private static class AscCompare implements Comparator { - - @Override - public int compare(LogData arg0, LogData arg1) { - - return Long.compare(arg0.getSeq(), arg1.getSeq()); + public Long getAllocatorAddrBySeqFromDB(long seqNum) { + if (!isAllocatorAddrSupported()) + return 0L; + String where = "WHERE SEQUENCE_NUMBER = " + Long.toString(seqNum); + final String columnName = MemAllocDBTable.COLUMN.ALLOCATOR_ADDRESS.name; + List> queryResult = allocateDBTable.selectData( + new ArrayList(Arrays.asList(columnName)), where, + new IResultSet() { + @Override + public List extractDataFromResultSet(ResultSet rs) { + List row = new ArrayList<>(); + try { + if (rs.getMetaData().getColumnCount() > 0) + row.add(Long.valueOf(rs.getLong(1))); + else + row.add(Long.valueOf(0)); + } catch (SQLException e) { + Logger.exception(e); + } + return row; + } + }); + if (queryResult.size() != 1) { + Logger.warning("Could't extract " + columnName + " for seq#" + seqNum + " from " + + MemAllocDBTable.TABLENAME); + return 0L; } - + return (Long) queryResult.get(0).get(0); } - } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataProcessor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataProcessor.java new file mode 100644 index 0000000..44ac25e --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/HeapDataProcessor.java @@ -0,0 +1,455 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Dongkye Lee + * Jaeyong Lee + * Gihun Chang + * + * 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. + * + */ + +package org.tizen.dynamicanalyzer.ui.memory.data; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.database.SqlConnectionManager; +import org.tizen.dynamicanalyzer.model.TableInput; +import org.tizen.dynamicanalyzer.model.TreeInput; +import org.tizen.dynamicanalyzer.nl.MemoryPageLabels; +import org.tizen.dynamicanalyzer.project.Project; +import org.tizen.dynamicanalyzer.setting.FlatPreferences; +import org.tizen.dynamicanalyzer.setting.SettingDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.util.PersistentAllocationsQuerySerializer; +import org.tizen.dynamicanalyzer.ui.memory.data.util.Query; +import org.tizen.dynamicanalyzer.ui.memory.data.util.QuerySerializer; +import org.tizen.dynamicanalyzer.ui.memory.data.util.StatisticsQuerySerializer; +import org.tizen.dynamicanalyzer.ui.memory.table.MemoryPersistentAllocationsTable; +import org.tizen.dynamicanalyzer.ui.memory.table.MemoryStatisticsTable; +import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; +import org.tizen.dynamicanalyzer.util.Logger; +import org.tizen.dynamicanalyzer.utils.Formatter; + +/** + * Processes memory allocations data and provides data for displaying tables. + */ +public class HeapDataProcessor { + private static HeapDataProcessor instance = new HeapDataProcessor(); + + private final static int TOTAL_PID = -1; + + /** + * Constant use for generation of unique selection indexes. + */ + private final static int MAX_LIBRARIES_PER_PID = 500; + + /** + * Query serializers + */ + private PersistentAllocationsQuerySerializer persistentSerializer = new PersistentAllocationsQuerySerializer(); + private StatisticsQuerySerializer statisticsSerializer = new StatisticsQuerySerializer(); + + /** + * Last query used to select leaks. + */ + private Query lastCachedLeaksQuery = null; + /** + * Last query used to select persistent allocations. + */ + private Query lastCachedPersistentQuery = null; + /** + * Last query used to select statistics. + */ + private Query lastCachedStatisticsQuery = null; + /** + * Last data got from {@link #lastCachedLeaksQuery}. + */ + private List> leaksCacheData = null; + /** + * Last data got from {@link #lastCachedPersistentQuery}. + */ + private List> persistentCacheData = null; + /** + * Last data got from {@link #lastCachedStatisticsQuery}. + */ + private Map>> statisticsCacheData = null; + + public static HeapDataProcessor getInstance() { + return instance; + } + + /** + * Calculates data for 'Persistent Allocations' or 'Leaks' table based on specified query. + * (0 as start and end time means whole range). + * + * @param query parameters for data calculation + */ + public List getTableInputPersistentAllocsData(Query query) { + List> allocDataList = null; + List output = new ArrayList<>(); + + allocDataList = remainedAllocatedListForRange(query); + + if (allocDataList == null || allocDataList.size() == 0) + return output; + + int index = 0; + + for (int j = 0; j < allocDataList.size(); j++) { + List iAllocData = allocDataList.get(j); + TableInput input = makePersistentAllocsTableInput(iAllocData, index++, query.onlyLeaks); + if (input != null) + output.add(input); + } + + return output; + } + + /** + * Constructs TreeInput list for {@link MemoryStatisticsTable} based on specified query. + * (0 as start and end time means whole range). + */ + public List getTreeInputStatisticsData(Query query) { + Map>> staticdatas = remainedAllocStaticData(query); + + int index = 0; + List output = new ArrayList<>(); + + // for each PID + for (Map.Entry>> elem : staticdatas.entrySet()) { + long allocCountForPid = 0; + long freeCountForPid = 0; + long persistentCountForPid = 0; + long totalSizeForPid = 0; + long persistentSizeForPid = 0; + + List children = new ArrayList<>(); + + // calculate initial selection index for pid + if (elem.getKey() == TOTAL_PID) { + index = 0; + } else { + index = elem.getKey() * MAX_LIBRARIES_PER_PID; + } + + int parentIndex = index++; + + // for each library + for (Map.Entry> libEntry : elem.getValue().entrySet()) { + String apiName = Global.getLibraryName(libEntry.getKey()); + TreeInput staticInput = makeTreeInputForStatistics(apiName, false, + libEntry.getValue(), index++); + + if (staticInput == null) + continue; + + children.add(staticInput); + + allocCountForPid += (Long) libEntry.getValue().get(0); + freeCountForPid += (Long) libEntry.getValue().get(1); + persistentCountForPid += (Long) libEntry.getValue().get(2); + totalSizeForPid += (Long) libEntry.getValue().get(3); + persistentSizeForPid += (Long) libEntry.getValue().get(4); + } + + List total = new ArrayList<>(); + + total.add(allocCountForPid); + total.add(freeCountForPid); + total.add(persistentCountForPid); + total.add(totalSizeForPid); + total.add(persistentSizeForPid); + + TreeInput parent; + if (elem.getKey() == TOTAL_PID) { + parent = makeTreeInputForStatistics("Total", false, total, parentIndex); + } else { + parent = makeTreeInputForStatistics(elem.getKey().toString(), true, total, parentIndex); + } + + if (parent == null) + continue; + + parent.getChildren().addAll(children); + output.add(parent); + } + + return output; + } + + /** + * Get all statistics for range specified in query. (0 as start and end time means whole range). + * + * @return statistics data mapped by PID and library ID + */ + private Map>> remainedAllocStaticData(Query query) { + if (query.equals(lastCachedStatisticsQuery)) + return statisticsCacheData; + + lastCachedStatisticsQuery = query; + statisticsCacheData = makeRemainedAllocatedStatic( + executeQuery(statisticsSerializer, query)); + return statisticsCacheData; + } + + /** + * Get all persistent (remained) allocation for range specified in query. + * (0 as start and end time means whole range). + * + * @return list of allocation objects + */ + public List> remainedAllocatedListForRange(Query query) { + if (query.onlyLeaks) { + if (query.equals(lastCachedLeaksQuery)) + return leaksCacheData; + else { + lastCachedLeaksQuery = query; + leaksCacheData = executeQuery(persistentSerializer, query); + return leaksCacheData; + } + } else { + if (query.equals(lastCachedPersistentQuery)) + return persistentCacheData; + else { + lastCachedPersistentQuery = query; + persistentCacheData = executeQuery(persistentSerializer, query); + return persistentCacheData; + } + } + } + + /** + * Execute query in data base. + * + * @return list of fetched objects + */ + private List> executeQuery(QuerySerializer serializer, Query query) { + List> result = SqlConnectionManager + .executeQuery(serializer.toSqlString(query)); + return result != null ? result : Collections.emptyList(); + } + + /** + * Constructs data map for Statistics table. + * + * @param statisticsData data received from DB + * @return constructed map + */ + private Map>> + makeRemainedAllocatedStatic(List> statisticsData) { + Map>> pidStatisticMap = new HashMap<>(); + + // 'Total' entry + Map> libStatisticMapTotal = new HashMap<>(); + pidStatisticMap.put(TOTAL_PID, libStatisticMapTotal); + + for (List row : statisticsData) { + + if (row == null || row.size() != 7) + continue; + + int pid = (Integer) row.get(0); + int binaryId = (Integer) row.get(1); + + List tableData = new ArrayList<>(); + tableData.add((Long) row.get(2)); + tableData.add((Long) row.get(3)); + tableData.add((Long) row.get(4)); + tableData.add((Long) row.get(5)); + tableData.add((Long) row.get(6)); + + if (!pidStatisticMap.containsKey(pid)) + pidStatisticMap.put(pid, new HashMap>()); + + pidStatisticMap.get(pid).put(binaryId, tableData); + libStatisticMapTotal.put(binaryId, tableData); + } + + return pidStatisticMap; + } + + /** + * Returns text that should be displayed for table entry. + * + * @param apiName entry name + * @param isProcess true if api denotes process pid entry + * @return displayed text for entry + */ + private String getDisplayedEntryName(String apiName, boolean isProcess) { + if (isProcess) { + return "PID #" + apiName; + } else { + if (apiName.equals(Global.getProject().getApplicationInfo().getExecPath())) + return MemoryPageLabels.MEMORY_MAIN_EXCUTABLE; + else + return apiName; + } + } + + /** + * Creates {@link TreeInput} entry for Statistics table. + * + * @param apiName name of entry + * @param isProcess flag denotes whether this api name is a process entry or library entry + * @param statisticsData data in format of list of 5 long numbers + * @param index entry index + * @return created {@link TreeInput} entry + */ + private TreeInput makeTreeInputForStatistics(String apiName, boolean isProcess, + List statisticsData, int index) { + DATableDataFormat tableData = new DATableDataFormat(index); + + List text = new ArrayList<>(); + List data = new ArrayList<>(); + + if (statisticsData == null) { + Logger.error("No statistics data for '%d' entry!", apiName); + return null; + } + + String entryName = getDisplayedEntryName(apiName, isProcess); + + Long TotalCount = (Long) statisticsData.get(0); + Long FCount = (Long) statisticsData.get(1); + Long PCount = (Long) statisticsData.get(2); + Long TotalByte = (Long) statisticsData.get(3); + Long PByte = (Long) statisticsData.get(4); + + text.add(entryName); data.add(apiName); + text.add(String.format("%,d", TotalCount)); data.add(TotalCount); + text.add(String.format("%,d", FCount)); data.add(FCount); + text.add(String.format("%,d", PCount)); data.add(PCount); + text.add(Formatter.toByteFormat(TotalByte)); data.add(TotalByte); + text.add(Formatter.toByteFormat(PByte)); data.add(PByte); + + tableData.getData().addAll(data); + tableData.setObject(entryName); + + TreeInput output = new TreeInput(); + output.setText(text); + output.setData(tableData); + + return output; + } + + /** + * Constructs {@link TableInput} for + * {@link MemoryPersistentAllocationsTable} using specified allocation data, + * index and adds a 'Leak' column data if {@code onlyLeaks} argument is set + * to {@code false}. + * + * @param allocData data selected from {@link MemAllocDBTable} + * @param index index of new {@link TableInput} + * @param onlyLeaks whether new {@link TableInput} will be used in 'Leaks' + * table, if set to {@code false}, 'Leak' column data will be + * added + * @return constructed instance of {@link TableInput} on success and + * {@code null} otherwise + */ + public TableInput makePersistentAllocsTableInput(List allocData, int index, + boolean onlyLeaks) { + DATableDataFormat tableData = new DATableDataFormat(index); + + List text = new ArrayList<>(); + List data = new ArrayList<>(); + + if (allocData == null) { + Logger.error("very strange case !!"); + return null; + } + // 0 : sequence number - hidden column for sorting + Long seq = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.SEQUENCE_NUMBER.index); + text.add(Long.toString(seq)); + data.add(seq); + // 1 : allocated time + long time = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_TIME.index); + data.add(Long.valueOf(time)); + try { + text.add(Formatter.toTimeFormat(time)); + } catch (NumberFormatException e) { + Logger.exception(e); + text.add(Long.toString(time)); + } + // 2 : PID + int pid = (Integer) allocData.get(MemAllocDBTable.BASIC_COLUMN.PID.index); + text.add(Integer.toString(pid)); + data.add(pid); + // 3 : TID + int tid = (Integer) allocData.get(MemAllocDBTable.BASIC_COLUMN.TID.index); + text.add(Integer.toString(tid)); + data.add(tid); + // 4 : address + Long address = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_ADDRESS.index); + text.add("0x" + Long.toHexString(address)); + data.add(address); + // 5 : size + Long size = (Long) allocData.get(MemAllocDBTable.BASIC_COLUMN.ALLOCATED_MEMORY_SIZE.index); + text.add(Long.toString(size)); + data.add(size); + // 6 : library name + String libName = Global.getLibraryName((Integer)allocData.get(MemAllocDBTable.BASIC_COLUMN.CALLER_LIBRARY_ID.index)); + if (libName == null || libName.isEmpty()) { + libName = AnalyzerConstants.UNKNOWN_LIB; + } + + // Check if allocation was made from main binary + Project project = Global.getProject(); + boolean isMainBinary = project != null && project.getApplicationInfo() != null + && project.getApplicationInfo().getExecBinaryPath().equals(libName); + + // Filter leaks not from application binary + if (onlyLeaks && !isMainBinary) + return null; + + text.add(libName); + data.add(libName); + // 7 : api type + int apiId = (Integer) allocData.get(MemAllocDBTable.BASIC_COLUMN.API_ID.index); + String apiName = Global.getFunctionName(apiId); + text.add(apiName); + data.add(apiName); + + if (!onlyLeaks) { + // 8 : leak + boolean leak = false; + + if (isMainBinary && SettingDataManager.INSTANCE + .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)) { + + leak = LsanDataManager.getInstance().getLeaksMap().containsKey(address); + } + + text.add(leak ? CommonConstants.YES : CommonConstants.EMPTY); + data.add(leak ? CommonConstants.YES : CommonConstants.EMPTY); + } + + tableData.setType(AnalyzerConstants.TYPE_TABLE_MEM_ALLOCATEDTRACE); + + TreeInput output = new TreeInput(); + output.setText(text); + tableData.getData().addAll(data); + output.setData(tableData); + + return output; + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/LsanDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/LsanDataManager.java new file mode 100644 index 0000000..c83850c --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/LsanDataManager.java @@ -0,0 +1,158 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Dongkye Lee + * Jaeyong Lee + * Gihun Chang + * + * 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. + * + */ + +package org.tizen.dynamicanalyzer.ui.memory.data; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.database.DBInserter; +import org.tizen.dynamicanalyzer.swap.logparser.LogPackage; +import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager; +import org.tizen.dynamicanalyzer.util.Logger; + +/** + * Processes leak sanitizer data and fills corresponding db table. + */ +public class LsanDataManager extends PageDataManager { + private static LsanDataManager instance = new LsanDataManager(); + private MemLSanTable lsanDBTable = new MemLSanTable(); + + private DBInserter lsanDBInserter = makeInserter(lsanDBTable); + + /** + * Map with leaks reported by LSAN tool. + */ + private Map> leaksMap = new HashMap<>(); + + public static LsanDataManager getInstance() { + return instance; + } + + /** + * Get info about all leaks. + * + * @return map address -> leaked allocation object + */ + public Map> getLeaksMap() { + return leaksMap; + } + + /** + * Clears leaks cache. + */ + @Override + protected void resetBeforeStart() { + leaksMap.clear(); + } + + /** + * Selects and caches all data from {@link MemLSanTable}. + * Data will be loaded only once during saved trace loading. + */ + @Override + public void openData(Map dataMap) { + // TODO: Add check for data size to be loaded from data base. + // If data size exceeds predefined limit - invoke DALimit.stopTraceAndOpenWarningDialog() + constructLeaksMap(lsanDBTable.selectAllObjectData()); + } + + /** + * Processes and caches leaks data in the map. + * + * @param leaks list of leaked allocations objects + */ + private void constructLeaksMap(List> leaks) { + leaksMap.clear(); + + for (List row : leaks) { + leaksMap.put((Long) row.get(MemLSanTable.COLUMN.ALLOCATED_ADDRESS.index), row); + } + } + + /** + * Parses given LeakSanitizer report file. + * + * @param filepath path to pulled report file on host + */ + public void parseLSanReportFile(String filepath) { + Scanner scanner = null; + List> lsanDataList = new ArrayList<>(); + + String parsingErrorMsg = "Failed to parse file: " + filepath; + + try { + scanner = new Scanner(new FileInputStream(new File(filepath)), StandardCharsets.US_ASCII.name()); + + // loop through lines + while (scanner.hasNextLine()) { + /** + * There are 3 long fields separated by space character on each + * line in data file in following format: + * + */ + String[] fields = scanner.nextLine().split(" "); + if (fields.length != 3) { + Logger.error(parsingErrorMsg); + scanner.close(); + return; + } + + List row = new ArrayList<>(); + for (String field : fields) + row.add(Long.parseLong(field)); + + lsanDataList.add(row); + } + + if (!lsanDataList.isEmpty()) + lsanDBInserter.pushData(lsanDataList); + + } catch (FileNotFoundException e) { + Logger.warning("File was not found: " + filepath); + + } catch (NumberFormatException e) { + Logger.error(parsingErrorMsg + CommonConstants.NEW_LINE + e.getMessage()); + + } finally { + if (scanner != null) + scanner.close(); + } + + constructLeaksMap(lsanDataList); + } + + @Override + protected void makeData(LogPackage pack) { + // do nothing here + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemAllocDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemAllocDBTable.java index 763e772..9cb43c6 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemAllocDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemAllocDBTable.java @@ -65,7 +65,7 @@ public class MemAllocDBTable extends DBTable { public MemAllocDBTable() { // required columns - addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT8)); + addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT8)); 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.API_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); @@ -79,9 +79,10 @@ public class MemAllocDBTable extends DBTable { // optional columns addColumn(new DBColumn(COLUMN.ALLOCATOR_ADDRESS.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.PID.index); - setIndexColumn(COLUMN.SEQUENCE_NUMBER.index); - setIndexColumn(COLUMN.ALLOCATED_TIME.index); + setPrimaryKey(COLUMN.SEQUENCE_NUMBER.index, COLUMN.PID.index, COLUMN.ALLOCATED_TIME.index); + addIndex(COLUMN.ALLOCATED_ADDRESS.index, COLUMN.ALLOCATED_TIME.index, COLUMN.PID.index); + addIndex(COLUMN.PID.index, COLUMN.CALLER_LIBRARY_ID.index, COLUMN.ALLOCATED_ADDRESS.index, + COLUMN.ALLOCATED_TIME.index); } @Override @@ -192,8 +193,8 @@ public class MemAllocDBTable extends DBTable { * Get names of basic columns of the table * @return ordered list of columns' names */ - private List getBasicColumns() { - List columns = new ArrayList(); + public static List getBasicColumns() { + List columns = new ArrayList<>(); for (MemAllocDBTable.BASIC_COLUMN col : MemAllocDBTable.BASIC_COLUMN.values()) { columns.add(col.name); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemFreeDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemFreeDBTable.java index 3b9cfe0..b73d009 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemFreeDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemFreeDBTable.java @@ -77,16 +77,17 @@ public class MemFreeDBTable extends DBTable { } public MemFreeDBTable() { - addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT8)); + addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT8)); addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(COLUMN.MESSAGE_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(COLUMN.FREE_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.ALLOCATED_ADDRESS.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.CALLER_LIBRARY_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - - setIndexColumn(COLUMN.PID.index); - setIndexColumn(COLUMN.FREE_TIME.index); - setIndexColumn(COLUMN.SEQUENCE_NUMBER.index); + + setPrimaryKey(COLUMN.SEQUENCE_NUMBER.index, COLUMN.PID.index, COLUMN.FREE_TIME.index); + addIndex(COLUMN.ALLOCATED_ADDRESS.index, COLUMN.FREE_TIME.index, COLUMN.PID.index); + addIndex(COLUMN.PID.index, COLUMN.CALLER_LIBRARY_ID.index, COLUMN.ALLOCATED_ADDRESS.index, + COLUMN.FREE_TIME.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemHeapDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemHeapDBTable.java index 1537bf1..8bf09c8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemHeapDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemHeapDBTable.java @@ -47,9 +47,8 @@ public class MemHeapDBTable extends DBTable { addColumn(new DBColumn(COLUMN.ALLOC_COUNT.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.FREE_SIZE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.FREE_COUNT.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - - setIndexColumn(COLUMN.PID.index); - setIndexColumn(COLUMN.CALL_TIME.index); + + addIndex(COLUMN.PID.index, COLUMN.CALL_TIME.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemLSanTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemLSanTable.java index 40d2c26..c52730e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemLSanTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/MemLSanTable.java @@ -43,7 +43,7 @@ public class MemLSanTable extends DBTable { addColumn(new DBColumn(COLUMN.ALLOCATED_MEMORY_SIZE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.ALLOCATED_FIRST_FOUR_BYTES.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.ALLOCATED_ADDRESS.index); + addIndex(COLUMN.ALLOCATED_ADDRESS.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/ProcessMemoryDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/ProcessMemoryDBTable.java index bcccab6..0b7559a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/ProcessMemoryDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/ProcessMemoryDBTable.java @@ -89,9 +89,8 @@ public class ProcessMemoryDBTable extends DBTable { addColumn(new DBColumn(COLUMN.HEAP_ALLOCATION_BYTE.name, DBConstants.EMPTY, DBConstants.BIGINT_ARRAY)); addColumn(new DBColumn(COLUMN.TID.name, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY)); addColumn(new DBColumn(COLUMN.THREAD_LOAD.name, DBConstants.EMPTY, DBConstants.FLOAT_ARRAY)); - - setIndexColumn(COLUMN.SAMPLING_TIME.index); - setIndexColumn(COLUMN.PID.index); + + addIndex(COLUMN.SAMPLING_TIME.index, COLUMN.PID.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/SystemMemoryDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/SystemMemoryDBTable.java index d8e819f..c39083c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/SystemMemoryDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/SystemMemoryDBTable.java @@ -59,7 +59,7 @@ public class SystemMemoryDBTable extends DBTable { addColumn(new DBColumn(COLUMN.MEMORY_USAGE_SYSTEM.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.PROCESS_PID_OTHER.name, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY)); addColumn(new DBColumn(COLUMN.PROCESS_LOAD_OTHER.name, DBConstants.EMPTY, DBConstants.FLOAT_ARRAY)); - setIndexColumn(COLUMN.SAMPLING_TIME.ordinal()); + addIndex(COLUMN.SAMPLING_TIME.ordinal()); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/PersistentAllocationsQuerySerializer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/PersistentAllocationsQuerySerializer.java new file mode 100644 index 0000000..89b7e2a --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/PersistentAllocationsQuerySerializer.java @@ -0,0 +1,79 @@ +package org.tizen.dynamicanalyzer.ui.memory.data.util; + +import org.tizen.dynamicanalyzer.ui.memory.data.MemAllocDBTable; +import org.tizen.dynamicanalyzer.ui.memory.data.MemFreeDBTable; +import org.tizen.dynamicanalyzer.ui.memory.data.MemLSanTable; + +/** + * Helper class to serialize query for extracting persistent allocations from database. + */ +public class PersistentAllocationsQuerySerializer implements QuerySerializer { + /** + * Constructs join query for tables restricted by time interval. + * + * @param q {@link Query} instance with necessary conditions + * @param columns desired columns in result set + */ + private static String getIntervalJoinQuery(Query q, String columns) { + StringBuilder queryFormat = new StringBuilder(); + queryFormat.append(String.format("SELECT %s FROM ", columns)); + queryFormat.append(String.format("(SELECT * FROM %s ", MemAllocDBTable.TABLENAME)); + queryFormat.append(String.format(" WHERE %s BETWEEN %s AND %s) as allocT ", + MemAllocDBTable.COLUMN.ALLOCATED_TIME.name, q.startTime, q.endTime)); + queryFormat.append("LEFT JOIN "); + queryFormat.append(String.format("(SELECT * FROM %s ", MemFreeDBTable.TABLENAME)); + queryFormat.append(String.format(" WHERE %s BETWEEN %s AND %s) as freeT ", + MemFreeDBTable.COLUMN.FREE_TIME.name, q.startTime, q.endTime)); + return queryFormat.toString(); + } + + /** + * Constructs join query for full db tables. + * + * @param columns desired columns in result set + */ + private static String getFullJoinQuery(String columns) { + return String.format("SELECT %s FROM %s allocT LEFT JOIN %s freeT ", columns, + MemAllocDBTable.TABLENAME, MemFreeDBTable.TABLENAME); + } + + /** + * Constructs SQL representation of query conditions: time range, pid + * list and optional INNER JOIN with {@link MemLSanTable} if + * {@code onlyLeaks} is set as {@code true}. + * + * @return SQL representation of query conditions + */ + @Override + public String toSqlString(Query q) { + String basicColumns = String.join(", ", MemAllocDBTable.getBasicColumns()); + StringBuilder queryFormat = new StringBuilder(); + if (q.startTime != 0 || q.endTime != 0) { + queryFormat.append(getIntervalJoinQuery(q, basicColumns)); + } else { + queryFormat.append(getFullJoinQuery(basicColumns)); + } + + queryFormat.append(String.format( + "ON allocT.%s = freeT.%s AND allocT.%s <= freeT.%s AND allocT.%s = freeT.%s ", + MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.name, + MemFreeDBTable.COLUMN.ALLOCATED_ADDRESS.name, + MemAllocDBTable.COLUMN.ALLOCATED_TIME.name, MemFreeDBTable.COLUMN.FREE_TIME.name, + MemAllocDBTable.COLUMN.PID.name, MemFreeDBTable.COLUMN.PID.name)); + + if (q.onlyLeaks) { + queryFormat.append(String.format("INNER JOIN %s lsanT ON allocT.%s = lsanT.%s ", + MemLSanTable.TABLENAME, MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.name, + MemLSanTable.COLUMN.ALLOCATED_ADDRESS.name)); + } + + queryFormat.append( + String.format("WHERE freeT.%s IS NULL ", MemFreeDBTable.COLUMN.FREE_TIME.name)); + + // only selected PIDs + queryFormat.append(String.format("AND allocT.%s IN %s ", MemAllocDBTable.COLUMN.PID.name, + q.pidString)); + + return queryFormat.toString(); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/Query.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/Query.java new file mode 100644 index 0000000..8cf3265 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/Query.java @@ -0,0 +1,140 @@ +package org.tizen.dynamicanalyzer.ui.memory.data.util; + +import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataProcessor; +import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; + +/** + * Class representing basic SQL query executed by {@link HeapDataProcessor}. + */ +public class Query { + /** + * Start time of selected time range. + */ + public long startTime; + /** + * End time of selected time range. + */ + public long endTime; + /** + * String representation of selected PIDs. + */ + public String pidString; + /** + * Flag denotes whether only allocations confirmed by LSAN tool should be selected. + */ + public boolean onlyLeaks; + + /** + * Default constructor. + */ + public Query() { + clear(); + } + + /** + * See {@link #Query(long, long, boolean)}. + */ + public Query(long startTime, long endTime) { + this(startTime, endTime, false); + } + + /** + * Construct new instance with given time range and onlyLeaks property. + * + * @param startTime start time of selected time range + * @param endTime end time of selected time range + * @param onlyLeaks pnlyLeaks flag + */ + public Query(long startTime, long endTime, boolean onlyLeaks) { + this.startTime = startTime; + this.endTime = endTime; + this.onlyLeaks = onlyLeaks; + this.pidString = getTargetPIDString(); + } + + /** + * Resets values of all fields to defaults. + */ + public void clear() { + startTime = -1L; + endTime = -1L; + pidString = ""; + onlyLeaks = false; + } + + /** + * Auto-generated method. + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (int) (endTime ^ (endTime >>> 32)); + result = prime * result + (onlyLeaks ? 1231 : 1237); + result = prime * result + ((pidString == null) ? 0 : pidString.hashCode()); + result = prime * result + (int) (startTime ^ (startTime >>> 32)); + return result; + } + + /** + * Auto-generated method. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof Query)) + return false; + Query other = (Query) obj; + if (endTime != other.endTime) + return false; + if (onlyLeaks != other.onlyLeaks) + return false; + if (pidString == null) { + if (other.pidString != null) + return false; + } else if (!pidString.equals(other.pidString)) + return false; + if (startTime != other.startTime) + return false; + return true; + } + + /** + * Constructs string representation of currently selected PIDs. + * + * @return string representation of currently selected PIDs + */ + private static String getTargetPIDString() { + // TODO: move this method to some utility class and generalize all + // SQL queries management. + + StringBuilder pidliststring = new StringBuilder(); + pidliststring.append(CommonConstants.OPEN_BRACKET); + + int targetPID = Toolbar.INSTANCE.getSelectedPid(); + + if (targetPID > 0) + pidliststring.append(targetPID); + else + for (int pid : Global.getProject().getProcessIDs()) { + if (pidliststring.length() != 1) + pidliststring.append(CommonConstants.COMMA); + + pidliststring.append(pid); + } + + pidliststring.append(CommonConstants.CLOSE_BRACKET); + + return pidliststring.toString(); + } + +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/QuerySerializer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/QuerySerializer.java new file mode 100644 index 0000000..e0ef2a3 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/QuerySerializer.java @@ -0,0 +1,17 @@ +package org.tizen.dynamicanalyzer.ui.memory.data.util; + +/** + * Base interface for {@link Query} serializers. + * + * @author d.nikiforov + */ +@FunctionalInterface +public interface QuerySerializer { + /** + * Serializes specified {@link Query} into SQL query. + * + * @param q {@link Query} instance with necessary conditions + * @return serialized string + */ + public abstract String toSqlString(Query q); +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializer.java new file mode 100644 index 0000000..64c4488 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/data/util/StatisticsQuerySerializer.java @@ -0,0 +1,87 @@ +package org.tizen.dynamicanalyzer.ui.memory.data.util; + +import org.tizen.dynamicanalyzer.ui.memory.data.MemAllocDBTable; +import org.tizen.dynamicanalyzer.ui.memory.data.MemFreeDBTable; +import org.tizen.dynamicanalyzer.ui.memory.table.MemoryStatisticsTable; + +/** + * Helper class to serialise query for extracting data for 'Statistics' table + * from database. + * + * @author d.nikiforov + */ +public class StatisticsQuerySerializer implements QuerySerializer { + /** + * Constructs SQL representation of query conditions (time range and pid list) + * for {@link MemoryStatisticsTable}. + * + * Resulting SQL query is constructed based on the assumption that there are no + * double allocations in the DB. + * + * @return SQL representation of query conditions + * @see {@link Query} + */ + @Override + public String toSqlString(Query q) { + StringBuilder queryFormat = new StringBuilder(); + // @formatter:off + /** + * All aggregate functions are explicitly casted to BIGINT (java.lang.Long) + * because they can be casted implicitly to DECIMAL due to overflow. + */ + queryFormat.append(String.format("SELECT %1$s, " // PID + + "%2$s, " // Caller library ID + + "CAST (COUNT(*) AS BIGINT), " // Allocations count + + "CAST (COUNT(%3$s) AS BIGINT), " // Free count + + "CAST (COUNT(CASE WHEN %3$s IS NULL THEN 1 ELSE NULL END) AS BIGINT), " // Persistent count + + "CAST (SUM(%4$s) AS BIGINT), " // Allocations size + + "CAST (SUM(CASE WHEN %3$s IS NULL THEN %4$s ELSE 0 END) AS BIGINT) ", // Persistent size + MemAllocDBTable.COLUMN.PID.name, + MemAllocDBTable.COLUMN.CALLER_LIBRARY_ID.name, + MemFreeDBTable.COLUMN.FREE_TIME.name, + MemAllocDBTable.COLUMN.ALLOCATED_MEMORY_SIZE)); + + queryFormat.append(String.format("FROM (" + + "SELECT DISTINCT %1$s, %2$s, %3$s, %4$s," // PID, Library, Allocated size, Allocation time + + "(SELECT TOP 1 DISTINCT %9$s" // select only first entry with only 'Free time' column + + " FROM %10$s as freeT" // from MEM_FREE_DB table + + " WHERE allocT.%1$s = freeT.%6$s" // same PID + + " AND allocT.%2$s = freeT.%7$s" // same library + + " AND allocT.%5$s = freeT.%8$s" // same address + + " AND allocT.%4$s <= freeT.%9$s", // free time is larger or equal to allocation time + MemAllocDBTable.COLUMN.PID.name, + MemAllocDBTable.COLUMN.CALLER_LIBRARY_ID.name, + MemAllocDBTable.COLUMN.ALLOCATED_MEMORY_SIZE.name, + MemAllocDBTable.COLUMN.ALLOCATED_TIME.name, + MemAllocDBTable.COLUMN.ALLOCATED_ADDRESS.name, + MemFreeDBTable.COLUMN.PID.name, + MemFreeDBTable.COLUMN.CALLER_LIBRARY_ID.name, + MemFreeDBTable.COLUMN.ALLOCATED_ADDRESS.name, + MemFreeDBTable.COLUMN.FREE_TIME.name, + MemFreeDBTable.TABLENAME)); + // @formatter:on + + // add time range condition if there is any + if (q.endTime > 0) + queryFormat.append(String.format(" AND %s <= %s", MemFreeDBTable.COLUMN.FREE_TIME, q.endTime)); + + queryFormat.append(String.format(" ORDER BY %1$s ASC) AS %1$s" // sorted in ascending order by free time + + " FROM %2$s as allocT ", // from MEM_ALLOC_DB table + MemFreeDBTable.COLUMN.FREE_TIME, MemAllocDBTable.TABLENAME)); + + queryFormat.append(String.format("WHERE %s in %s", MemAllocDBTable.COLUMN.PID.name, q.pidString)); + + // add time range condition if there is any + if (q.startTime > 0 || q.endTime > 0) { + queryFormat.append(String.format(" AND %s BETWEEN %s AND %s", + MemAllocDBTable.COLUMN.ALLOCATED_TIME, q.startTime, q.endTime)); + } + + // execute aggregate functions for all entries grouped by their PID and Library ID + queryFormat.append(String.format(") GROUP BY %s, %s", + MemAllocDBTable.COLUMN.PID.name, + MemAllocDBTable.COLUMN.CALLER_LIBRARY_ID.name)); + + return queryFormat.toString(); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTable.java index f2138b8..335d1d9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryCallStackTable.java @@ -24,9 +24,7 @@ package org.tizen.dynamicanalyzer.ui.memory.table; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.eclipse.nebula.widgets.grid.GridItem; import org.eclipse.swt.SWT; @@ -38,12 +36,11 @@ import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.project.callstack.RuntimeCallstackManager; import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit; import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; import org.tizen.dynamicanalyzer.ui.memory.data.MemAllocDBTable; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceDataManager; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.util.Logger; @@ -80,7 +77,7 @@ public class MemoryCallStackTable extends DATableComposite { @Override public void widgetSelected(SelectionEvent e) { AnalyzerManager.getCurrentPage().updateView( - new DAViewData(TimelineTableView.tabID, null)); + new DAViewData(MemoryPage.callstackViewID, null)); GridItem[] sels = table.getSelection(); if (sels.length <= 0) { return; @@ -115,53 +112,39 @@ public class MemoryCallStackTable extends DATableComposite { long time = (long) getMemAllocationDataByColumnIndex(memAllocationData, MemoryPersistentAllocationsTableIndex.TIMESTAMP.getIndex()); long allocCallerAddr = getCallerAddr(memAllocationData, seqNum); int pid = (int) getMemAllocationDataByColumnIndex(memAllocationData, MemoryPersistentAllocationsTableIndex.PID.getIndex()); + int tid = (int) getMemAllocationDataByColumnIndex(memAllocationData, MemoryPersistentAllocationsTableIndex.TID.getIndex()); String allocCallerPath = (String) getMemAllocationDataByColumnIndex(memAllocationData, MemoryPersistentAllocationsTableIndex.LIBRARY.getIndex()); String allocName = (String) getMemAllocationDataByColumnIndex(memAllocationData, MemoryPersistentAllocationsTableIndex.CALLED.getIndex()); - Map addrMap = Global.getRuntimeCallstackManager() - .getCallStackApiAddrByPidMap(pid); - if ((null == addrMap) || (addrMap.isEmpty())) { + long allocAddr = (long) HeapDataManager.getInstance().getAllocatorAddrBySeqFromDB(seqNum); + String allocPath = Global.getLibraryName(Global.getBinaryID(pid, time, allocAddr)); + fillAllocationFields(allocName, allocCallerAddr, allocCallerPath, allocAddr, allocPath, pid, + tid, time); + + List callStack = CallTraceDataManager.getInstance().getCallstackForTable(pid, + tid, time); + if ((null == callStack) || (callStack.isEmpty())) { return; } - List addrs = getAddrs(seqNum); - if (null == addrs) { - // FIXME: actually below is too strong suggestion, any other issue - // may occur while getting addresses - // This case may occurred if sequence number is above Long.MAX_VALUE - addrs = getAddrs(Long.MAX_VALUE); - if (null == addrs) { - Logger.error("Function entry or exit not found"); - return; - } - } - long allocAddr = (long) HeapDataManager.getInstance().getAllocatorAddrBySeqFromDB(seqNum); - String allocPath = Global.getLibraryName(Global.getBinaryID(pid, time, allocAddr)); - fillAllocationFields(time, pid, allocName, allocCallerAddr, allocCallerPath, - allocAddr, allocPath); // -------------------------------- - if (addrs.isEmpty()) - return; - if (allocCallerPath.equals(Global.getLibraryName(addrMap.get(addrs.get(0)).getBinaryID()))) { + if (allocCallerPath != null && allocCallerPath.equals(callStack.get(0).getPath())) { // this case occurred when allocation performed from profiled application. - lastItem.setText(0, addrMap.get(addrs.get(0)).getFunctionName()); - if (addrs.size() > 1) - lastItem.setData( - AnalyzerConstants.MEM_CALLSTACK_KEY_CALLER_ADDRESS, - addrs.get(1)); - lastItem.setData( - AnalyzerConstants.MEM_CALLSTACK_KEY_FUNCTION_START_ADDRESS, - addrMap.get(addrs.get(0)).getFunctionStartAddr()); + lastItem.setText(0, callStack.get(0).getFunctionName()); + lastItem.setData(AnalyzerConstants.MEM_CALLSTACK_KEY_CALLER_ADDRESS, callStack.get(0) + .getCallerAddress()); + lastItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, + callStack.get(0).getAddr()); // in this case addrs first element is already in table, so it // should be removed. - addrs.remove(0); + callStack.remove(0); } // -------------------------------- - if (!addrs.isEmpty()) - fillCallstackFields(addrs, addrMap, pid, time); + if (!callStack.isEmpty()) + fillCallstackFields(callStack); } @@ -199,26 +182,25 @@ public class MemoryCallStackTable extends DATableComposite { /** * Add 2 items to Memory callstack table: 1 - called allocation function * info, 2 - information about allocation caller. - * @param time time when allocation was performed - * @param pid identifier of process * @param allocName name of called allocation function * @param allocCallerAddr address of allocation caller instruction * @param allocCallerPath library from where allocation was called * @param allocAddr address of allocator * @param allocPath library which allocator belongs to */ - private void fillAllocationFields(long time, int pid, - String allocName, long allocCallerAddr, String allocCallerPath, long allocAddr, String allocPath) { + private void fillAllocationFields(String allocName, long allocCallerAddr, + String allocCallerPath, long allocAddr, String allocPath, int pid, int tid, long time) { DATableDataFormat callstackTableData = new DATableDataFormat(allocCallerAddr); callstackTableData.setType(AnalyzerConstants.TYPE_TABLE_MEM_CALLSTACK); callstackTableData.setObject(allocCallerAddr); - GridItem gridItem = createGridItem(callstackTableData, 0L, pid, time, "", allocCallerAddr, 0L); + GridItem gridItem = createGridItem(callstackTableData, + new CallStackUnit(allocAddr, allocCallerAddr, pid, tid, time, 0)); gridItem.setText(0, allocName); gridItem.setText(1, allocAddr == 0 ? UNKNOWN : formatLongAddr(allocAddr)); gridItem.setText(2, allocPath.isEmpty() ? UNKNOWN_LIBRARY : allocPath); - gridItem = createGridItem(callstackTableData, allocCallerAddr, pid, time, allocCallerPath, - 0L, 0L); + gridItem = createGridItem(callstackTableData, + new CallStackUnit(allocAddr, allocCallerAddr, pid, tid, time, 0)); gridItem.setText(0, UNKNOWN); String addrInput = (allocCallerAddr == 0) ? UNKNOWN : formatLongAddr(allocCallerAddr); //$NON-NLS-1$ gridItem.setText(1, addrInput); @@ -226,20 +208,16 @@ public class MemoryCallStackTable extends DATableComposite { } /** - * Add a callstack of function from where allocation was called. + * Create GUI representation for callstack of function from where allocation + * was called. * - * @param addrs list with addresses of functions in callstack - * @param addrMap map with callstack units, contains info about each - * function in callstack - * @param pid identifier of process - * @param time time when allocation was performed + * @param callStack of function from where allocation was called */ - private void fillCallstackFields(List addrs, - Map addrMap, int pid, long time) { + private void fillCallstackFields(List callStack) { - for (int i = 0; i < addrs.size(); i++) { - String hexAddr = Formatter.toHexString(addrs.get(i).toString()); - CallStackUnit api = addrMap.get(addrs.get(i)); + for (int i = 0; i < callStack.size(); i++) { + String hexAddr = Formatter.toHexString("" + callStack.get(i).getAddr()); + CallStackUnit api = callStack.get(i); if (null == api) { Logger.debug("callstackunit for addr : " + hexAddr + " not found"); @@ -251,17 +229,13 @@ public class MemoryCallStackTable extends DATableComposite { break; } - long address = addrs.get(i); + long address = api.getAddr(); // setData block DATableDataFormat callstackTableData = new DATableDataFormat(address); callstackTableData.setType(AnalyzerConstants.TYPE_TABLE_MEM_CALLSTACK); callstackTableData.setObject(address); - long nextAddr = 0L; - if (i + 1 < addrs.size()) - nextAddr = addrs.get(i + 1); - GridItem gridItem = createGridItem(callstackTableData, address, pid, - time, api.getPath(), nextAddr, api.getFunctionStartAddr()); + GridItem gridItem = createGridItem(callstackTableData, api); String addrInput = (address == 0) ? UNKNOWN : hexAddr; //$NON-NLS-1$ gridItem.setText(1, addrInput.toLowerCase()); gridItem.setText(0, api.getFunctionName()); @@ -270,31 +244,21 @@ public class MemoryCallStackTable extends DATableComposite { } /** - * Create grid item for Callstack table. + * Create grid item for callstack unit to put into Callstack table. * - * @param callstackTableData represents data for item - * @param addr address of instruction described in this table item - * @param pid process identifier - * @param time time when allocation was performed - * @param allocPath library from where allocation was called - * @param callerAddr address of caller - * @param memFuncAddr address of source code + * @param callstackTableData GUI representation of data + * @param api callstack unit * @return GridItem representing all this data */ private GridItem createGridItem(DATableDataFormat callstackTableData, - long addr, int pid, long time, String allocPath, - long callerAddr, long memFuncAddr) { + CallStackUnit api) { GridItem gridItem = new GridItem(table, SWT.NONE); gridItem.setData(callstackTableData); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, addr); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_PID, pid); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_TIME, time); - gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_LIBNAME, allocPath); - gridItem.setData(AnalyzerConstants.MEM_CALLSTACK_KEY_CALLER_ADDRESS, - callerAddr); - gridItem.setData( - AnalyzerConstants.MEM_CALLSTACK_KEY_FUNCTION_START_ADDRESS, - memFuncAddr); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_ADDR, api.getAddr()); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_PID, api.getPid()); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_TIME, api.getTime()); + gridItem.setData(AnalyzerConstants.CALLSTACK_KEY_LIBNAME, api.getPath()); + gridItem.setData(AnalyzerConstants.MEM_CALLSTACK_KEY_CALLER_ADDRESS, api.getCallerAddress()); lastItem = gridItem; return gridItem; } @@ -337,25 +301,7 @@ public class MemoryCallStackTable extends DATableComposite { * corrupted. In latter case error is being reported. */ private List getAllocationInfo(long seqNum) { - return HeapDataManager.getInstance() - .getAllocationRowBySeqFromDB(seqNum); - } - - /** - * Find current callstack for the moment, when allocation was performed. - * - * @param seqNum sequence number of the allocation - * @return unmodifiable list of addresses - */ - private List getAddrs(long seqNum) { - List res = new ArrayList(); - RuntimeCallstackManager callstackManager = Global - .getRuntimeCallstackManager(); - if (callstackManager.getCallStackDataBySeqMap().floorEntry(seqNum) == null) - return null; - res.addAll(callstackManager.getCallStackDataBySeqMap() - .floorEntry(seqNum).getValue().getAddrs()); - return res; + return HeapDataManager.getInstance().getAllocationRowBySeqFromDB(seqNum); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryDetailsTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryDetailsTable.java index ecef8ba..4d80b07 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryDetailsTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryDetailsTable.java @@ -45,7 +45,6 @@ import org.tizen.dynamicanalyzer.ui.memory.data.ProcessMemoryDBTable; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; -import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.Formatter; @@ -64,7 +63,6 @@ public class MemoryDetailsTable extends DATreeComposite { Current = (long) -1; setTableName(MemoryPageLabels.MEMORY_DETAILS_VIEW_TITLE); - setComparator(new DefaultTableComparator()); setTree(true); @@ -94,9 +92,6 @@ public class MemoryDetailsTable extends DATreeComposite { setTableToolTipEnable(false); - comparator.setType(AnalyzerConstants.SORT_TYPE_NONE); - comparator.setColumn(0); - } public void setSelectionRange(Long start, Long end, Long current) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryMapTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryMapTable.java index 7b1d83f..65e7946 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryMapTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryMapTable.java @@ -28,6 +28,7 @@ package org.tizen.dynamicanalyzer.ui.memory.table; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -42,6 +43,8 @@ import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator; +import org.tizen.dynamicanalyzer.util.Logger; +import org.tizen.dynamicanalyzer.utils.Formatter; public class MemoryMapTable extends DATreeComposite { @@ -50,6 +53,16 @@ public class MemoryMapTable extends DATreeComposite { */ int keyindex = 0; + /** + * Time to show memory map for. + */ + long selectionTime = -1; + + /** + * Suffix used to explain selection time. + */ + String selectionSuffix; + public MemoryMapTable(Composite parent, int style, int tableStyle) { super(parent, style, tableStyle); @@ -107,6 +120,15 @@ public class MemoryMapTable extends DATreeComposite { return result; } + /** + * Set time to show memory map for. + */ + public void setSelectionTime(long time) { + selectionTime = time; + selectionSuffix = String.format(" (%s)", + (selectionTime == -1) ? "current" : "at " + Formatter.toTimeFormat(selectionTime)); + } + @Override public List makeTreeInput() { keyindex = 0; @@ -123,14 +145,21 @@ public class MemoryMapTable extends DATreeComposite { for (Integer pid : pidList) { TreeInput parentInput = makeProcessHeaderTreeInput(pid); - ProcessMemoryMap pmap = project.getProcessInformation(pid) - .getLastProcessMemoryMap(); + ProcessMemoryMap pmap; + if (selectionTime == -1) + pmap = project.getProcessInformation(pid).getLastProcessMemoryMap(); + else + pmap = project.getProcessInformation(pid).getProcessMemoryMap(selectionTime); - Map binarymap = pmap.getAllLibraryID(); + if (pmap == null) { + Logger.warning("Missing process information for #%d (%s)", pid, selectionSuffix); + continue; + } + Map binarymap = pmap.getAllMappings(); - // for every library - for (Map.Entry entry : binarymap.entrySet()) { - int binId = entry.getKey(); + // for every library mapping + for (Entry entry : binarymap.entrySet()) { + int binId = entry.getValue().getBinaryID(); String binPath = project.getDeviceStatusInfo() .getBinaryInfo(binId).getTargetBinaryPath(); @@ -156,7 +185,7 @@ public class MemoryMapTable extends DATreeComposite { List text = new ArrayList<>(); List data = new ArrayList<>(); - String headerCaption = String.format("PID #%d", pid); + String headerCaption = String.format("PID #%d%s", pid, selectionSuffix); // PID column text.add(headerCaption); data.add(pid); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryPersistentAllocationsTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryPersistentAllocationsTable.java index f7070a4..a22515b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryPersistentAllocationsTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryPersistentAllocationsTable.java @@ -25,7 +25,11 @@ package org.tizen.dynamicanalyzer.ui.memory.table; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridItem; @@ -34,14 +38,18 @@ import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.common.DAState; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.model.TableInput; +import org.tizen.dynamicanalyzer.model.TreeInput; +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; import org.tizen.dynamicanalyzer.nl.MemoryPageLabels; import org.tizen.dynamicanalyzer.ui.memory.MemoryPersistentAllocationsTableView; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataProcessor; +import org.tizen.dynamicanalyzer.ui.memory.data.util.Query; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; @@ -55,6 +63,23 @@ public class MemoryPersistentAllocationsTable extends DATableComposite { private Long EndTime; private boolean onlyLeaks; + /** + * Last query used to get data on some range. + */ + Query lastPartQuery = null; + /** + * Last task to fetch persistent data on some range. + */ + CompletableFuture> partDataTask = null; + /** + * Last task to fetch persistent data on whole range. + */ + CompletableFuture> wholeDataTask = null; + /** + * Table input stub to show when fetch operation is in progress. + */ + List processingStub; + public MemoryPersistentAllocationsTable(Composite parent, int style, int tableStyle, boolean onlyLeaks) { super(parent, style, tableStyle); @@ -140,8 +165,57 @@ public class MemoryPersistentAllocationsTable extends DATableComposite { } }); + + processingStub = Arrays.asList(makeProcessingStub()); + } + + /** + * Make stub to indicate that data is under construction now. + */ + private TableInput makeProcessingStub() { + DATableDataFormat tableData = new DATableDataFormat(0); + + List text = new ArrayList<>(); + List data = new ArrayList<>(); + + // 0 : sequence number - hidden column for sorting + text.add(""); + data.add(0); + // 1 : allocated time + text.add(AnalyzerLabels.TABLE_PROCESSING_DATA); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + if (!onlyLeaks) { + text.add(""); + data.add(0); + } + + TreeInput output = new TreeInput(); + output.setText(text); + tableData.getData().addAll(data); + output.setData(tableData); + + return output; } - + public void setSelectionRange(Long start, Long end){ StartTime = start; EndTime = end; @@ -155,50 +229,77 @@ public class MemoryPersistentAllocationsTable extends DATableComposite { public boolean isSelectionPerformed() { return StartTime != EndTime; } - @Override - protected List makeTableInput() { - List output = new ArrayList(); - if(Global.getProject() == null) { - return output; + + /** + * Make table input for specific interval. + */ + private List makeIntervalTableInput() throws InterruptedException, ExecutionException { + Query newQuery = new Query(StartTime, EndTime, onlyLeaks); + + if (newQuery.equals(lastPartQuery)) { + if (partDataTask.isDone()) { + return partDataTask.get(); + } + } else { + lastPartQuery = newQuery; + if (partDataTask != null) { + partDataTask.cancel(true); + } + + partDataTask = CompletableFuture.supplyAsync( + () -> HeapDataProcessor.getInstance() + .getTableInputPersistentAllocsData(newQuery)); + partDataTask.thenRun(() -> Display.getDefault().asyncExec(this::updateTable)); } - if(DAState.isRunning() == false) { - if(StartTime == 0 && EndTime == 0 && Toolbar.INSTANCE.getSelectedPid() <= 0) { - List wholedata; - if (onlyLeaks) - wholedata = HeapDataManager.getInstance().getLeaksTableInput(); - else - wholedata = HeapDataManager.getInstance().getPersistentAllocsTableInput(); + return processingStub; + } - if(wholedata.size() != 0) { - return wholedata; - } + /** + * Make table input for whole tracing time. + */ + private List makeFullTableInput() throws InterruptedException, ExecutionException { + if (DAState.isDone()) { + if (wholeDataTask == null) { + wholeDataTask = CompletableFuture.supplyAsync( + () -> HeapDataProcessor.getInstance() + .getTableInputPersistentAllocsData( + new Query(StartTime, EndTime, onlyLeaks))); + wholeDataTask.thenRun(() -> Display.getDefault().asyncExec(this::updateTable)); + + } + + if (wholeDataTask.isDone()) { + return wholeDataTask.get(); + } else { + return processingStub; } } - - List> allocDataList = null; - - allocDataList = HeapDataManager.getInstance().remainedAllocatedListForRange(StartTime, - EndTime, onlyLeaks); - if (allocDataList == null || allocDataList.size() == 0) - return output; - - int index = 0; - int size = allocDataList.size(); - - for (int j = 0; j < size; j++) { - List iAllocData = allocDataList.get(j); + return Collections.emptyList(); + } - TableInput alloInput = HeapDataManager.getInstance() - .makePersistentAllocsTableInput(iAllocData, index++, onlyLeaks); - if (alloInput != null){ - output.add(alloInput); + /** + * TODO Time Consuming Process : make progress bar for this task in the future. + */ + @Override + protected List makeTableInput() { + if(Global.getProject() == null) { + return Collections.emptyList(); + } + + try { + if (StartTime != 0 || EndTime != 0) { + return makeIntervalTableInput(); + } else { + return makeFullTableInput(); } + } catch (InterruptedException | ExecutionException e) { + Logger.error(e); + return Collections.emptyList(); } - return output; } - + public void removeSelection() { table.removeAll(); updateTable(); @@ -212,6 +313,10 @@ public class MemoryPersistentAllocationsTable extends DATableComposite { StartTime = (long)0; EndTime = (long)0; + + wholeDataTask = null; + lastPartQuery = null; + partDataTask = null; } public void cleanColumnsWeights() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryStatisticsTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryStatisticsTable.java index 61b3178..e36cf94 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryStatisticsTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/memory/table/MemoryStatisticsTable.java @@ -25,30 +25,57 @@ package org.tizen.dynamicanalyzer.ui.memory.table; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.DAState; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.model.TreeInput; +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; import org.tizen.dynamicanalyzer.nl.MemoryPageLabels; -import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataProcessor; +import org.tizen.dynamicanalyzer.ui.memory.data.util.Query; +import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator; +import org.tizen.dynamicanalyzer.util.Logger; public class MemoryStatisticsTable extends DATreeComposite { - + private int[] columnSizes = {265, 140, 90, 90, 90, 110, 15}; - + private int[] columnAlignment = { SWT.LEFT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT}; private Long StartTime; private Long EndTime; + /** + * Last query used to get data on some range. + */ + Query lastPartQuery = null; + /** + * Last task to fetch persistent data on some range. + */ + CompletableFuture> partStatisticsTask = null; + /** + * Last task to fetch persistent data on whole range. + */ + CompletableFuture> wholeStatisticsTask = null; + /** + * Tree input stub to show when data fetch is in progress. + */ + List processingStub; + private String[] columnNames = { - MemoryPageLabels.MEMORY_STATISTICS_VIEW_PATH, + MemoryPageLabels.MEMORY_STATISTICS_VIEW_PATH, MemoryPageLabels.MEMORY_STATISTICS_VIEW_TOTAL, MemoryPageLabels.MEMORY_STATISTICS_VIEW_FREED, MemoryPageLabels.MEMORY_STATISTICS_VIEW_PERSISTENT, @@ -63,7 +90,7 @@ public class MemoryStatisticsTable extends DATreeComposite { AnalyzerConstants.SORT_TYPE_NONE }; - public MemoryStatisticsTable(Composite parent, int style, int tableStyle) { + public MemoryStatisticsTable(Composite parent, int style, int tableStyle) { super(parent, style, tableStyle); StartTime = (long)0; @@ -82,10 +109,48 @@ public class MemoryStatisticsTable extends DATreeComposite { comparator.setType(AnalyzerConstants.SORT_TYPE_NUM); comparator.setColumn(1); - + + processingStub = Arrays.asList(makeProcessingStub()); + } + + /** + * Make stub to indicate that data is under construction now. + */ + private TreeInput makeProcessingStub() { + DATableDataFormat tableData = new DATableDataFormat(0); + + List text = new ArrayList<>(); + List data = new ArrayList<>(); + + text.add(AnalyzerLabels.TABLE_PROCESSING_DATA); + data.add(""); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + text.add(""); + data.add(0); + + tableData.getData().addAll(data); + tableData.setObject(AnalyzerLabels.TABLE_PROCESSING_DATA); + + TreeInput output = new TreeInput(); + output.setText(text); + output.setData(tableData); + + return output; } - - public void setSelectionRange(Long start, Long end){ + + public void setSelectionRange(Long start, Long end){ StartTime = start; EndTime = end; } @@ -99,29 +164,87 @@ public class MemoryStatisticsTable extends DATreeComposite { return StartTime != EndTime; } + /** + * Make table input for specific interval. + */ + private List makeIntervalTableInput() + throws InterruptedException, ExecutionException { + Query newQuery = new Query(StartTime, EndTime); + + if (newQuery.equals(lastPartQuery)) { + if (partStatisticsTask.isDone()) { + return partStatisticsTask.get(); + } + } else { + lastPartQuery = newQuery; + if (partStatisticsTask != null) + partStatisticsTask.cancel(true); + + partStatisticsTask = CompletableFuture.supplyAsync(() -> HeapDataProcessor.getInstance() + .getTreeInputStatisticsData(new Query(StartTime, EndTime))); + partStatisticsTask.thenRun(() -> Display.getDefault().asyncExec(this::updateTree)); + } + + return processingStub; + } + + /** + * Make table input for whole tracing time. + */ + private List makeFullTableInput() throws InterruptedException, ExecutionException { + if (DAState.isDone()) { + if (wholeStatisticsTask == null) { + wholeStatisticsTask = CompletableFuture.supplyAsync(() -> HeapDataProcessor + .getInstance().getTreeInputStatisticsData(new Query(0, 0))); + wholeStatisticsTask.thenRun(() -> Display.getDefault().asyncExec(this::updateTree)); + } + + if (wholeStatisticsTask.isDone()) + return wholeStatisticsTask.get(); + else + return processingStub; + } + + return Collections.emptyList(); + } + + /** + * TODO Time Consuming Process : make progress bar for this task in the future. + */ @Override public List makeTreeInput() { - List output = new ArrayList(); if(Global.getProject() == null) { - return output; + return Collections.emptyList(); + } + + try { + if (StartTime != 0 || EndTime != 0) { + return makeIntervalTableInput(); + } else { + return makeFullTableInput(); + } + } catch (InterruptedException | ExecutionException e) { + Logger.error(e); + return Collections.emptyList(); } - - HeapDataManager.getInstance().makeStatisticsData(StartTime, EndTime); - return HeapDataManager.getInstance().getStatisticsTreeInput(); } - + public void removeSelection() { table.removeAll(); updateTable(); } - + @Override public void clear() { table.removeAll(); getSelectionIndex().clear(); - getSelections().clear(); + getSelections().clear(); StartTime = (long)0; EndTime = (long)0; + + lastPartQuery = null; + partStatisticsTask = null; + wholeStatisticsTask = null; } -} +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkAPIListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkAPIListView.java index cc1c7b8..9966185 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkAPIListView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkAPIListView.java @@ -37,7 +37,6 @@ import org.tizen.dynamicanalyzer.nl.NetworkPageLabels; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.ui.network.data.NetworkDataManager; import org.tizen.dynamicanalyzer.ui.network.data.type.NetworkSelectionType; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.DAAdvancedViewComposite; import org.tizen.dynamicanalyzer.util.Logger; @@ -137,22 +136,6 @@ public class NetworkAPIListView extends DAAdvancedViewComposite { } preSelectionPId = selectedPid; - // Change Analyzer - long newAnalysisStartTime = 0; - long newAnalysisEndTime = 0; - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - newAnalysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime(); - newAnalysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime(); - } else { - newAnalysisStartTime = 0; - newAnalysisEndTime = 0; - } - if (newAnalysisStartTime != preAnalysisStartTime - || newAnalysisEndTime != preAnalysisEndTime) { - preAnalysisStartTime = newAnalysisStartTime; - preAnalysisEndTime = newAnalysisEndTime; - isUpdate = true; - } // Change Selection if (isChangedSelected) { isChangedSelected = false; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartBoard.java index e62ea76..460acdd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartBoard.java @@ -35,11 +35,10 @@ import org.tizen.dynamicanalyzer.common.DAState; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.nl.NetworkPageLabels; 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.PopupRangeAnalysisMenuItemOnChartListener; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; @@ -59,7 +58,6 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip; import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; public class NetworkChartBoard extends DADefaultChartBoard { @@ -156,20 +154,6 @@ public class NetworkChartBoard extends DADefaultChartBoard { 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); } private void initNetworkChart(final DAChart chart, boolean isParent) { @@ -195,12 +179,8 @@ public class NetworkChartBoard extends DADefaultChartBoard { tooltip.setFont(FontResources.CHART_TOOLTIP_FONT); plot.setTooltip(tooltip); - DAPopupMenu popupMenu = new DAPopupMenu(chart); + DAPopupMenu popupMenu = new ChartPopupMenu(chart); popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, this, chart)); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( popupMenu, getTimeline(), NetworkPage.pageID); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartView.java index be8b572..5a4e57e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkChartView.java @@ -55,7 +55,6 @@ import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.network.data.NetworkDataManager; import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; import org.tizen.dynamicanalyzer.ui.toolbar.DAToolBarCustomCombo; @@ -83,8 +82,6 @@ public class NetworkChartView extends DAViewComposite { private DAToolBarCustomCombo processCombo; - private final RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - public NetworkChartView(Composite parent, int style) { super(parent, style, false); this.setLayout(new FillLayout()); @@ -338,22 +335,6 @@ public class NetworkChartView extends DAViewComposite { } else { networkChartBoard.setTotalEndTime(Toolbar.INSTANCE.getTime(), false); } - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) networkChartBoard.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval( - rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) networkChartBoard.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) networkChartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE); - } @Override @@ -414,11 +395,6 @@ public class NetworkChartView extends DAViewComposite { return networkChartBoard; } - public void setRangeMarker(double starttime, double endtime) { - ((DAChartPlotIntervalMarker) networkChartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval(starttime, endtime); - } - public DAChartBoard getChartBoard(){ return networkChartBoard; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkPage.java index df781f1..5221427 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkPage.java @@ -52,25 +52,22 @@ public class NetworkPage extends DABaseDataPageComposite { this.setBackground(ColorResources.WHITE); this.setLayout(new FillLayout()); -// ((FillLayout) getLayout()).marginHeight = 15; -// ((FillLayout) getLayout()).marginWidth = 5; - NetworkChartView networkChartView = new NetworkChartView(topForm, SWT.NONE); addView(networkChartView); networkAPITableView = new DATabComposite(bottomLeftForm, SWT.NONE, false, true); { + networkAPITableView.setID(AnalyzerLabels.LEFT_TABLE_VIEW_ID); NetworkAPIListView networkApiListView = new NetworkAPIListView(networkAPITableView.getContentComposite(), SWT.NONE); networkAPITableView.addView(networkApiListView); - addView(networkApiListView); } addView(networkAPITableView); - + DATabComposite networkDetailTableView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); { + networkDetailTableView.setID(AnalyzerLabels.RIGHT_TABLE_VIEW_ID); NetworkDetailView detailInfo = new NetworkDetailView(networkDetailTableView.getContentComposite(), SWT.NONE); networkDetailTableView.addView(detailInfo); - addView(detailInfo); } addView(networkDetailTableView); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkTableView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkTableView.java index c540aa6..c0fecfb 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkTableView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/NetworkTableView.java @@ -37,7 +37,6 @@ import org.tizen.dynamicanalyzer.nl.NetworkPageLabels; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.ui.network.data.NetworkDataManager; import org.tizen.dynamicanalyzer.ui.network.data.type.NetworkSelectionType; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.DAAdvancedViewComposite; import org.tizen.dynamicanalyzer.util.Logger; @@ -137,22 +136,6 @@ public class NetworkTableView extends DAAdvancedViewComposite { } preSelectionPId = selectedPid; - // Change Analyzer - long newAnalysisStartTime = 0; - long newAnalysisEndTime = 0; - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - newAnalysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime(); - newAnalysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime(); - } else { - newAnalysisStartTime = 0; - newAnalysisEndTime = 0; - } - if (newAnalysisStartTime != preAnalysisStartTime - || newAnalysisEndTime != preAnalysisEndTime) { - preAnalysisStartTime = newAnalysisStartTime; - preAnalysisEndTime = newAnalysisEndTime; - isUpdate = true; - } // Change Selection if (isChangedSelected) { isChangedSelected = false; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/data/NetworkAPIDBManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/data/NetworkAPIDBManager.java index f7e2be7..525dda7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/data/NetworkAPIDBManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/network/data/NetworkAPIDBManager.java @@ -128,7 +128,7 @@ public class NetworkAPIDBManager extends DBTable { addColumn(new DBColumn(API_TYPE, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(CALLER_PC_ADDRESS, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(LIB_NAME, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(DB_API_TIME_INDEX); + addIndex(DB_API_TIME_INDEX); } public void insert(List> insetData) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/notification/NotificationManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/notification/NotificationManager.java new file mode 100644 index 0000000..b33d879 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/notification/NotificationManager.java @@ -0,0 +1,140 @@ +package org.tizen.dynamicanalyzer.ui.notification; + +import java.util.ArrayList; +import java.util.ListIterator; + +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.tizen.dynamicanalyzer.util.WorkbenchUtil; +import org.tizen.dynamicanalyzer.widgets.notification.DAPopupNotification; + +/** + * Manages shown notification pop-ups. + * + * @author d.nikiforov + */ +public class NotificationManager { + + /** + * Should not be instantiated. + */ + private NotificationManager() { + throw new IllegalAccessError(); + } + + /** + * Maximum number of displayed notifications. + */ + private static final int MAX_NOTIFICATIONS_CAPACITY = 3; + /** + * Margin between two notifications. + */ + private static final int VERTICAL_SPACING = 10; + + /** + * Shown notifications. + */ + private static ArrayList notifications = new ArrayList<>(); + + /** + * Removes notification from the list of shown notifications once it is + * disposed. + */ + private static final DisposeListener listener = (DisposeEvent e) -> { + Shell disposedShell = (Shell) e.widget; + DAPopupNotification disposedNotification = (DAPopupNotification) disposedShell.getData(); + removeNotification(disposedNotification); + }; + + /** + * Shows notification popup with specified text. + * + * @param title notification title + */ + public static void showNotification(String title) { + showNotification(title, null, null); + } + + /** + * Shows notification popup with specified text. + * + * @param title notification title + * @param message notification message + */ + public static void showNotification(String title, String message) { + showNotification(title, message, null); + } + + /** + * Shows notification popup with specified text. + * + * @param title notification title + * @param message notification message + * @param details notification details + */ + public static void showNotification(String title, String message, String details) { + Display.getDefault().syncExec(() -> { + Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell(); + DAPopupNotification newNotification = new DAPopupNotification(shell, title, message, + details); + + addNotification(newNotification); + + newNotification.addDisposeListener(listener); + newNotification.open(); + }); + } + + /** + * Adds notification to the list of shown notifications and moves previous + * notifications higher. + * + * @param added notification to add + */ + private static synchronized void addNotification(DAPopupNotification added) { + // if max capacity is reached, close the first notification + if (notifications.size() == MAX_NOTIFICATIONS_CAPACITY) { + DAPopupNotification first = notifications.get(0); + first.removeDisposeListener(listener); + first.close(); + notifications.remove(first); + } + + // move shown notifications up + notifications.listIterator().forEachRemaining((notification) -> { + Point newLocation = notification.getLocation(); + newLocation.y -= (notification.getSize().y + VERTICAL_SPACING); + notification.setLocation(newLocation); + }); + + // add notification + notifications.add(added); + } + + /** + * Removes the specified notification from the list of shown notifications. + * + * @param removed + */ + private static synchronized void removeNotification(DAPopupNotification removed) { + int index = notifications.indexOf(removed); + if (index < 0) + // nothing to remove + return; + + // move down all notifications older than removed + ListIterator it = notifications.listIterator(index); + while(it.hasPrevious()) { + DAPopupNotification notification = it.previous(); + Point newLocation = notification.getLocation(); + newLocation.y += (notification.getSize().y + VERTICAL_SPACING); + notification.setLocation(newLocation); + } + + // remove notification + notifications.remove(removed); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/GLPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/GLPage.java index 45c555d..19b824b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/GLPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/GLPage.java @@ -86,33 +86,29 @@ public class GLPage extends DABaseDataPageComposite { glLeftTableView = new DATabComposite(bottomLeftForm, SWT.NONE, false, true); { + glLeftTableView.setID(AnalyzerLabels.LEFT_TABLE_VIEW_ID); GLStatisticsTableView glStatisticsView = new GLStatisticsTableView(glLeftTableView.getContentComposite(), SWT.NONE); glLeftTableView.addView(glStatisticsView); - addView(glStatisticsView); - + GLAPIListView glAPIListView = new GLAPIListView(glLeftTableView.getContentComposite(), SWT.NONE); glLeftTableView.addView(glAPIListView); - addView(glAPIListView); } addView(glLeftTableView); - + glRightTableView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); { + glRightTableView.setID(AnalyzerLabels.RIGHT_TABLE_VIEW_ID); GLRedundantTableView glRedundantView = new GLRedundantTableView(glRightTableView.getContentComposite(), SWT.NONE); glRightTableView.addView(glRedundantView); - addView(glRedundantView); - + GLContextTableView glContextTableView = new GLContextTableView(glRightTableView.getContentComposite(), SWT.NONE); glRightTableView.addView(glContextTableView); - addView(glContextTableView); - + GLProgramTableView glProgramTableView = new GLProgramTableView(glRightTableView.getContentComposite(), SWT.NONE); glRightTableView.addView(glProgramTableView); - addView(glProgramTableView); - + GLTextureTableView glTextureTableView = new GLTextureTableView(glRightTableView.getContentComposite(), SWT.NONE); glRightTableView.addView(glTextureTableView); - addView(glTextureTableView); } addView(glRightTableView); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChart.java index 986e5b7..c0d4ce4 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChart.java @@ -30,11 +30,9 @@ package org.tizen.dynamicanalyzer.ui.opengl.chart; import java.util.List; import org.eclipse.swt.graphics.Image; -import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; import org.tizen.dynamicanalyzer.swap.logparser.LogPackage; -import org.tizen.dynamicanalyzer.ui.common.PopupRangeAnalysisMenuItemOnChartListener; import org.tizen.dynamicanalyzer.widgets.chart.DAChart; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType; @@ -43,7 +41,6 @@ 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 abstract class GLChart { protected DAChart chart; @@ -56,27 +53,15 @@ public abstract class GLChart { public abstract void parseLogPackage(LogPackage logPack); - public DAChartBoardItem createBoardItem(final DAChartBoard chartBoard, boolean enablePopupMenu) { + public DAChartBoardItem createBoardItem(final DAChartBoard chartBoard) { DAChartBoardItem item = new DAChartBoardItem(chartBoard, chartName, chartIcon, chartStyle); chart = item.getChart(); setChartStyle(); - if(enablePopupMenu){ - popupMenu = new DAPopupMenu(chart); - initPopupMenu(chartBoard, popupMenu); - } return item; } - protected void initPopupMenu(DAChartBoard chartBoard, DAPopupMenu popupMenu) { - popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, chartBoard, chart)); - } - public void clear() { List seriesList = chart.getSeriesList(); for (DAChartSeries series : seriesList) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChartBoard.java index ee4680c..c59b606 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLChartBoard.java @@ -59,19 +59,5 @@ public abstract class GLChartBoard extends DADefaultChartBoard { 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); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChart.java index 2bd92f9..dff65c6 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChart.java @@ -62,8 +62,8 @@ public class GLFrameRateChart extends GLChart { } @Override - public DAChartBoardItem createBoardItem(DAChartBoard chartBoard, boolean enablePopupMenu) { - DAChartBoardItem item = super.createBoardItem(chartBoard, enablePopupMenu); + public DAChartBoardItem createBoardItem(DAChartBoard chartBoard) { + DAChartBoardItem item = super.createBoardItem(chartBoard); chart.addSeries(frameRateSeries); chart.getPlot().setSeriesHeightRange(true); chart.getPlot().setAutoHeightRange(AutoRangeType.AUTO); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChartBoard.java index 7fa9bcf..852d8a9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameRateChartBoard.java @@ -36,20 +36,16 @@ import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; -import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.opengl.GLPage; import org.tizen.dynamicanalyzer.ui.opengl.chart.listener.GLFrameRateMouseListener; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.chart.CPUChart; import org.tizen.dynamicanalyzer.ui.timeline.chart.ScreenshotChart; import org.tizen.dynamicanalyzer.ui.timeline.chart.TimelineChart; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.chart.DAChart; -import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; @@ -77,25 +73,6 @@ public class GLFrameRateChartBoard extends GLChartBoard { AnalyzerUtil.translateSecToMicroSec(getVisibleStartTime()), AnalyzerUtil.translateSecToMicroSec(getVisibleEndTime())); - double timelineMarkerStartTime = RangeDataManager.getInstance().getMarkerStartTime() - / TimelineConstants.MEGA_DOUBLE; - double timelineMarkerEndTime = RangeDataManager.getInstance().getMarkerEndTime() - / TimelineConstants.MEGA_DOUBLE; - - double analysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime() - / TimelineConstants.MEGA_DOUBLE; - double analysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime() - / TimelineConstants.MEGA_DOUBLE; - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - - ((DAChartPlotIntervalMarker) getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(analysisStartTime, - analysisEndTime); - } else { - ((DAChartPlotIntervalMarker) getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1); - } updateViewFromDBData(); } @@ -104,7 +81,7 @@ public class GLFrameRateChartBoard extends GLChartBoard { initIntervalMarkers(); GLFrameRateChart frameRateChart = GLFrameRateChart.getInstance(); - DAChartBoardItem frameRateChartItem = frameRateChart.createBoardItem(this, true); + DAChartBoardItem frameRateChartItem = frameRateChart.createBoardItem(this); DAChart frameRateChartWidget = frameRateChartItem.getChart(); GLFrameRateMouseListener glFrameRateMouseEventListener = new GLFrameRateMouseListener( diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChart.java index e97e410..c8cea57 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChart.java @@ -63,8 +63,8 @@ public class GLFrameTimeChart extends GLChart { } @Override - public DAChartBoardItem createBoardItem(DAChartBoard chartBoard, boolean enablePopupMenu) { - DAChartBoardItem item = super.createBoardItem(chartBoard, enablePopupMenu); + public DAChartBoardItem createBoardItem(DAChartBoard chartBoard) { + DAChartBoardItem item = super.createBoardItem(chartBoard); chart.addSeries(frameTimeSeries); chart.getPlot().setSeriesHeightRange(true); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChartBoard.java index f1d4332..40ee923 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/GLFrameTimeChartBoard.java @@ -30,17 +30,14 @@ package org.tizen.dynamicanalyzer.ui.opengl.chart; import org.eclipse.swt.widgets.Composite; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; -import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.opengl.GLPage; import org.tizen.dynamicanalyzer.ui.opengl.chart.listener.GLFrameTimeBoundMouseListener; import org.tizen.dynamicanalyzer.ui.opengl.chart.listener.GLFrameTimeMouseListener; import org.tizen.dynamicanalyzer.ui.opengl.data.GLDataManager; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; 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.DAChartPlotIntervalMarker; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem; public class GLFrameTimeChartBoard extends GLChartBoard { @@ -64,34 +61,6 @@ public class GLFrameTimeChartBoard extends GLChartBoard { setTotalEndTime(totalEndTime, false); } - double timelineMarkerStartTime = RangeDataManager.getInstance() - .getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE; - double timelineMarkerEndTime = RangeDataManager.getInstance() - .getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE; - - double analysisStartTime = RangeDataManager.getInstance() - .getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE; - double analysisEndTime = RangeDataManager.getInstance() - .getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE; - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(analysisStartTime, analysisEndTime); - } else { - ((DAChartPlotIntervalMarker) getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - timelineMarkerStartTime, timelineMarkerEndTime); - - ((DAChartPlotIntervalMarker) getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, - -1); - updateViewFromDBData(); } @@ -100,8 +69,7 @@ public class GLFrameTimeChartBoard extends GLChartBoard { initIntervalMarkers(); GLFrameTimeChart frameTimeChart = GLFrameTimeChart.getInstance(); - DAChartBoardItem frameTimeChartItem = frameTimeChart.createBoardItem( - this, false); + DAChartBoardItem frameTimeChartItem = frameTimeChart.createBoardItem(this); DAChart frameTimeChartWidget = frameTimeChartItem.getChart(); GLFrameTimeMouseListener glFrameChartMouseEventListener = new GLFrameTimeMouseListener( diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/listener/GLFrameRateMouseListener.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/listener/GLFrameRateMouseListener.java index 6488175..29b246d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/listener/GLFrameRateMouseListener.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/chart/listener/GLFrameRateMouseListener.java @@ -27,8 +27,6 @@ package org.tizen.dynamicanalyzer.ui.opengl.chart.listener; -import java.util.List; - import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.tizen.dynamicanalyzer.common.AnalyzerManager; @@ -43,7 +41,6 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotMarker; import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu; -import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem; import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline; import org.tizen.dynamicanalyzer.widgets.timeline.MarkerManager; @@ -66,10 +63,8 @@ public class GLFrameRateMouseListener extends GLChartMouseListener { double eventTime = plot.getXFromXPixel(e.x); if (e.button == 3) { - List itemList = menu.getItems(); - for(DAPopupMenuItem item : itemList) { - item.setDoubleData(eventTime); - } + if (menu != null) + menu.getItems().forEach((item) -> item.setDoubleData(eventTime)); return; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLAPIDBTableManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLAPIDBTableManager.java index c8d9372..54ed9d2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLAPIDBTableManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLAPIDBTableManager.java @@ -106,7 +106,7 @@ public class GLAPIDBTableManager extends DBTable { addColumn(new DBColumn(TID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(CALLER_PC_ADDRESS, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(LIB_NAME, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(TABLE_FRAME_INDEX_INDEX); + addIndex(TABLE_FRAME_INDEX_INDEX); } public void insert(List apiData) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLBufferSizeDBTableManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLBufferSizeDBTableManager.java index d2e9fb6..ea18691 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLBufferSizeDBTableManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLBufferSizeDBTableManager.java @@ -84,7 +84,7 @@ public class GLBufferSizeDBTableManager extends DBTable { DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(ELEMENT_ARRAY_BUFFER_USAGE, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(TABLE_CONTEXT_ID_INDEX); + addIndex(TABLE_CONTEXT_ID_INDEX); } public GLBufferSizeType getBufferSize(long contextID, long selectedSeq) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLCommonStateDBTableManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLCommonStateDBTableManager.java index 5f29b75..0b31bb0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLCommonStateDBTableManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLCommonStateDBTableManager.java @@ -83,7 +83,7 @@ public class GLCommonStateDBTableManager extends DBTable { for (int i = 0; i < length; i++) { addColumn(new DBColumn(columnName[i], options[i], types[i])); } - setIndexColumn(TABLE_CONTEXT_ID_INDEX); + addIndex(TABLE_CONTEXT_ID_INDEX); } public String[] getColumnName() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLFrameTimeDBTableManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLFrameTimeDBTableManager.java index 4236287..ab1f28e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLFrameTimeDBTableManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLFrameTimeDBTableManager.java @@ -80,7 +80,7 @@ public class GLFrameTimeDBTableManager extends DBTable { addColumn(new DBColumn(FRAME_MAKING_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(ERROR_INFO, DBConstants.NOT_NULL, DBConstants.DBTYPE_BOOLEAN)); addColumn(new DBColumn(PID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(TABLE_CHART_TIME_INDEX); + addIndex(TABLE_CHART_TIME_INDEX); } public int getFrameSize() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLStateHistoryDBTableManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLStateHistoryDBTableManager.java index 744b72f..61b1620 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLStateHistoryDBTableManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/DB/GLStateHistoryDBTableManager.java @@ -77,9 +77,7 @@ public class GLStateHistoryDBTableManager extends DBTable { addColumn(new DBColumn(CHANGE_SEQ, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(FRAME_RATE_INDEX, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(FRAME_TIME_INDEX, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(TABLE_CONTEXT_ID_INDEX); - setIndexColumn(TABLE_CONTEXT_DB_INDEX_INDEX); - setIndexColumn(TABLE_CHANGE_SEQ_INDEX); + addIndex(TABLE_CONTEXT_ID_INDEX, TABLE_CONTEXT_DB_INDEX_INDEX, TABLE_CHANGE_SEQ_INDEX); } public void insertData(long contextId, int stateIndex, long seq, int frameRateIndex, diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/api/GLAPITable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/api/GLAPITable.java index 37365de..c433a56 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/api/GLAPITable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/table/api/GLAPITable.java @@ -41,32 +41,15 @@ import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.model.FilterProperty; import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.ui.file.FileChartView; -import org.tizen.dynamicanalyzer.ui.file.FilePage; -import org.tizen.dynamicanalyzer.ui.memory.MemoryChartView; -import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; -import org.tizen.dynamicanalyzer.ui.network.NetworkChartView; -import org.tizen.dynamicanalyzer.ui.network.NetworkPage; import org.tizen.dynamicanalyzer.ui.opengl.GLPage; -import org.tizen.dynamicanalyzer.ui.opengl.chart.GLChartView; import org.tizen.dynamicanalyzer.ui.opengl.data.GLDataManager; import org.tizen.dynamicanalyzer.ui.opengl.data.DB.GLAPIDBTableManager; import org.tizen.dynamicanalyzer.ui.opengl.data.type.GLAPIData; import org.tizen.dynamicanalyzer.ui.opengl.data.type.GLConstantDefine; import org.tizen.dynamicanalyzer.ui.opengl.data.type.GLES20ErrorDefine; import org.tizen.dynamicanalyzer.ui.opengl.data.type.GLSelectionData; -import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.thread.ThreadPage; -import org.tizen.dynamicanalyzer.ui.thread.chart.ThreadChartView; -import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartView; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.util.WorkbenchUtil; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.utils.Formatter; import org.tizen.dynamicanalyzer.widgets.timeline.MarkerManager; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java index d438074..c16b112 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java @@ -155,7 +155,7 @@ public class BaseView extends ViewPart { } else if(e.keyCode == SWT.F5) { if(DAState.isStartable() && Toolbar.INSTANCE.getStartButton().getState() == DACustomButton.STATE_NORMAL) { //start trace MarkerManager.INSTANCE.clearMarkerList(); - CommandAction.startTrace(false); + CommandAction.startTrace(); } else if(DAState.isRunning() && Toolbar.INSTANCE.getStartButton().getState() == DACustomButton.STATE_NORMAL) { //stop trace CommandAction.stopTrace(new DAResult(ErrorCode.SUCCESS), false); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/MenuBar.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/MenuBar.java index 587bc21..3e2c74e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/MenuBar.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/MenuBar.java @@ -389,7 +389,7 @@ public class MenuBar { return; } - TimelineTableView tableView = (TimelineTableView) AnalyzerUtil.getView(TimelinePage.pageID, TimelineTableView.class.getName()); + TimelineTableView tableView = (TimelineTableView) AnalyzerUtil.getView(TimelinePage.pageID, AnalyzerLabels.LEFT_TABLE_VIEW_ID); MenuItem source = (MenuItem) arg0.getSource(); if (menuName.equals(MenuBarLabels.VIEW_FUNCTION_PROFILING)) { if(source.getSelection()) { @@ -768,6 +768,8 @@ public class MenuBar { Object result = dialog.open(); if (null != result) { + // TODO Time Consuming Process : make progress bar for this task + // or move this in another thread in the future. if (!CommandAction.saveToZip((String) result)) { UIActionHolder.getUIAction().showWarning(AnalyzerLabels.SAVE_FAILED); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistry.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistry.java index e74ecd6..8fe12c9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistry.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/PageInfoRegistry.java @@ -14,7 +14,6 @@ import java.util.Set; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.setting.SettingConstants; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager; @@ -23,12 +22,9 @@ import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager; import org.tizen.dynamicanalyzer.ui.hierarchy.HierarchyDataManager; import org.tizen.dynamicanalyzer.ui.hierarchy.HierarchyPage; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; -import org.tizen.dynamicanalyzer.ui.kernel.KernelPage; -import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataManager; import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager; +import org.tizen.dynamicanalyzer.ui.memory.data.LsanDataManager; import org.tizen.dynamicanalyzer.ui.memory.data.MemoryDataManager; import org.tizen.dynamicanalyzer.ui.network.NetworkPage; import org.tizen.dynamicanalyzer.ui.network.data.NetworkDataManager; @@ -43,8 +39,6 @@ import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceDataManager; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineDataManager; import org.tizen.dynamicanalyzer.ui.timeline.dlog.DLogDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.widgets.da.view.DABaseComposite; @@ -71,10 +65,6 @@ public class PageInfoRegistry { SettingConstants.PAGE_NAME_OPENGL); glPageInfo.addDataManager(GLDataManager.class); - PageInfo kernelPageInfo = new PageInfo(KernelPage.class, - SettingConstants.PAGE_NAME_KERNEL); - kernelPageInfo.addDataManager(KernelDataManager.class); - PageInfo networkPageInfo = new PageInfo(NetworkPage.class, SettingConstants.PAGE_NAME_NETWORK); networkPageInfo.addDataManager(NetworkDataManager.class); @@ -92,26 +82,12 @@ public class PageInfoRegistry { SettingConstants.PAGE_NAME_TIME_LINE, true); timelinePageInfo.addDataManager(TimelineDataManager.class); timelinePageInfo.addDataManager(CallTraceDataManager.class); - // InteractiveDataManager is not supported in CLI mode - if (Global.isGUIMode()) { - timelinePageInfo.addDataManager(InteractiveDataManager.class); - } timelinePageInfo.addDataManager(ScreenshotDataManager.class); timelinePageInfo.addDataManager(MemoryDataManager.class); timelinePageInfo.addDataManager(DLogDataManager.class); timelinePageInfo.addDataManager(FunctionUsageProfiler.class); timelinePageInfo.addDataManager(SummaryDataManager.class); - PageInfo uiPageInfo = new PageInfo(UIPage.class, - SettingConstants.PAGE_NAME_UI); - uiPageInfo.addDataManager(UIDataManager.class); - - PageInfo interactivePageInfo = new PageInfo(InteractivePage.class, - SettingConstants.PAGE_NAME_INTERACTIVE); - // InteractiveDataManager is not supported in CLI mode - if (Global.isGUIMode()) - interactivePageInfo.addDataManager(InteractiveDataManager.class); - PageInfo hierarchyPageInfo = new PageInfo(HierarchyPage.class, SettingConstants.PAGE_NAME_HIERARCHY); hierarchyPageInfo.addDataManager(HierarchyDataManager.class); @@ -120,6 +96,7 @@ public class PageInfoRegistry { SettingConstants.PAGE_NAME_MEMORY); memoryPageInfo.addDataManager(MemoryDataManager.class); memoryPageInfo.addDataManager(HeapDataManager.class); + memoryPageInfo.addDataManager(LsanDataManager.class); // Register pages to ordered list // Add new entry here for each new page introduced in Dynamic Analyzer @@ -130,9 +107,6 @@ public class PageInfoRegistry { networkPageInfo, filePageInfo, glPageInfo, - uiPageInfo, - kernelPageInfo, - interactivePageInfo, hierarchyPageInfo, summaryPageInfo)); @@ -252,10 +226,6 @@ public class PageInfoRegistry { Set selectedPageSet = SettingDataManager.INSTANCE.getSelectedPageList(targetName); // add default pages selectedPageSet.addAll(defaultPages); - // Add interactive page when needed - if (Global.isGUIMode() && !InteractiveDataManager.getInstance().getVariableInfoList().isEmpty()) { - selectedPageSet.add(SettingConstants.PAGE_NAME_INTERACTIVE); - } return selectedPageSet; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java deleted file mode 100644 index dc78909..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java +++ /dev/null @@ -1,568 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Seokgil Kang - * WooJin Jung - * Jooyoul Lee - * 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.range; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.PriorityQueue; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Display; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.database.SqlConnectionManager; -import org.tizen.dynamicanalyzer.project.callstack.BaseCallstackManager; -import org.tizen.dynamicanalyzer.project.callstack.RangeCallstackManager; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.swap.model.data.WebProfileData; -import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager; -import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionSampleDBTable; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker; -import org.tizen.dynamicanalyzer.ui.summary.profiling.RangeProfileDataMaker; -import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfileDataMaker; -import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; -import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable; -import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionExitDBTable; -import org.tizen.dynamicanalyzer.ui.timeline.calltrace.WebFunctionEntryDBTable; -import org.tizen.dynamicanalyzer.ui.timeline.calltrace.WebFunctionExitDBTable; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.util.Logger; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; -import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; -import org.tizen.dynamicanalyzer.widgets.da.view.DABaseComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAContainerComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DATabButton; -import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite; -import org.tizen.dynamicanalyzer.widgets.timeline.MarkerManager; - -public class RangeDataManager implements Runnable { - private static RangeDataManager instance = null; - private Thread rangeThread = null; - private Map webProfileDataMakerMap = null; - private Map profileDataMakerMap = null; - private BaseCallstackManager rangeCallstackManager = null; - - private long markerStartTime = 0; - private long markerEndTime = 0; - private long analysisStartTime = 0; - private long analysisEndTime = 0; - - private boolean isBeingAnalyzed = false; - - private enum Function { - SEQ(1), // ResultSet column index starts from 1 - PID(2), - TID(3), - FUNCTIONID(4), - BINARYID(5), - TIME(6), - CALLERPCADDR(7), - PCADDR(8); - - public final int index; - - Function(int index) { - this.index = index; - } - } - - private enum Sample { - TIME(1), PID(2), TID(3), PCADDR(4); - - public final int index; - - Sample(int index) { - this.index = index; - } - } - - private RangeDataManager() { - rangeCallstackManager = new RangeCallstackManager(); - } - - public synchronized void clearRange() { - rangeCallstackManager.clear(); - if (profileDataMakerMap != null) - profileDataMakerMap.clear(); - - if (webProfileDataMakerMap != null) { - webProfileDataMakerMap.clear(); - } - } - - public void initRange() { - clearRange(); - analysisStartTime = 0; - analysisEndTime = 0; - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - isBeingAnalyzed = false; - - DATabComposite mainTab = AnalyzerUtil.getMainTab(); - if (null != mainTab.getView(RangePage.pageID)) { - // mainTab.removeView(page.getViewName(), true); - mainTab.removeView(RangePage.pageID, true); - } - } - }); - } - - public void startRangeThread() { - clearRange(); - if (null == rangeThread || !rangeThread.isAlive()) { - rangeThread = new Thread(null, getInstance(), "Range data manager thread"); //$NON-NLS-1$ - rangeThread.start(); - - analysisStartTime = markerStartTime; - analysisEndTime = markerEndTime; - isBeingAnalyzed = true; - } - } - - public void startRangeAnalysis() { - if (!isBeingAnalyzed) { - DATabComposite mainTab = AnalyzerUtil.getMainTab(); - DABaseComposite rangePage = new RangePage(mainTab.getContentComposite(), SWT.NONE); - DATabButton rangeTab = mainTab.addView(null, rangePage, true, true); - rangeTab.addCloseButtonListener(new DACustomButtonClickEventListener() { - @Override - public void handleClickEvent(DACustomButton button) { - RangeDataManager.getInstance().initRange(); - } - }); - startRangeThread(); - } else { - startRangeThread(); - } - } - - public void stopUpdateLogThread() { - if (null != rangeThread && rangeThread.isAlive()) { - rangeThread.interrupt(); - } - } - - public synchronized static RangeDataManager getInstance() { - if (null == instance) { - instance = new RangeDataManager(); - } - return instance; - } - - public List getPidsOfProfileDataMakerMap() { - ArrayList pids = new ArrayList(); - pids.addAll(getProfileDataMakerMap().keySet()); - return pids; - } - - public synchronized Map getProfileDataMakerMap() { - if (null == profileDataMakerMap) { - profileDataMakerMap = new HashMap(); - } - return profileDataMakerMap; - } - - public ProfileDataMaker getProfileDataMakerByPid(int pid) { - ProfileDataMaker profileDataMaker = getProfileDataMakerMap().get(pid); - if (null == profileDataMaker) { - // if (DACommunicator.isSWAPVersion()) { - profileDataMaker = new RangeProfileDataMaker(rangeCallstackManager); - // } - profileDataMaker.setPid(pid); - getProfileDataMakerMap().put(pid, profileDataMaker); - } - return profileDataMaker; - } - - public List getPidsOfWebProfileDataMakerMap() { - ArrayList pids = new ArrayList(); - pids.addAll(getWebProfileDataMakerMap().keySet()); - return pids; - } - - public synchronized Map getWebProfileDataMakerMap() { - if (null == webProfileDataMakerMap) { - webProfileDataMakerMap = new HashMap(); - } - return webProfileDataMakerMap; - } - - public WebProfileDataMaker getWebProfileDataMakerByPid(int pid) { - WebProfileDataMaker webProfileDataMaker = getWebProfileDataMakerMap().get(pid); - if (null == webProfileDataMaker) { - webProfileDataMaker = new WebProfileDataMaker(pid); - getWebProfileDataMakerMap().put(pid, webProfileDataMaker); - } - return webProfileDataMaker; - } - - public void setMarkerStartTime(long startTime) { - markerStartTime = startTime; - if (startTime > markerEndTime) { - markerEndTime = startTime; - } - } - - public void setMarkerEndTime(long endTime) { - markerEndTime = endTime; - if (endTime < markerStartTime) { - markerStartTime = endTime; - } - } - - public void setRangeFromMarkerList(long time) { - List markerTimeListLong = MarkerManager.INSTANCE - .getMarkerTimeListLong(); - - if(markerTimeListLong.size() >= 1 && !markerTimeListLong.contains(time)) { - int findIndex = -1; - - for(int i = 0; i < markerTimeListLong.size(); i++) { - if(markerTimeListLong.get(i) > time) { - findIndex = i; - break; - } - } - - if(findIndex == 0) { - markerStartTime = 0; - markerEndTime = markerTimeListLong.get(findIndex); - } else if(findIndex == -1) { - markerStartTime = markerTimeListLong.get(markerTimeListLong.size()-1); - markerEndTime = Toolbar.INSTANCE.getTime(); - } else { - markerStartTime = markerTimeListLong.get(findIndex-1); - markerEndTime = markerTimeListLong.get(findIndex); - } - - // if click analyze range, setDlogselection false. - Toolbar.INSTANCE.setDlogSelection(false); - - AnalyzerManager.getCurrentPage().updateView( - new DASelectionData(TimelinePage.timelineViewID, markerStartTime, markerEndTime, null, null)); - } - } - - public long getMarkerStartTime() { - return markerStartTime; - } - - public long getMarkerEndTime() { - return markerEndTime; - } - - public long getAnalysisStartTime() { - return analysisStartTime; - } - - public long getAnalysisEndTime() { - return analysisEndTime; - } - - public boolean isBeingAnalyzed() { - return isBeingAnalyzed; - } - - public boolean isAnalyzable() { - if (markerStartTime >= 0 && markerEndTime >= 0 - && (markerStartTime != analysisStartTime || markerEndTime != analysisEndTime)) { - return true; - } else { - return false; - } - } - - public boolean isClearable() { - if (markerStartTime >= 0 || markerEndTime >= 0) { - return true; - } else { - return false; - } - } - - @Override - public void run() { - // case 1 : profile data - ResultSet rsEntry = null; - ResultSet rsExit = null; - ResultSet rsSample = null; - PriorityQueue pQueue = new PriorityQueue(3, - new Comparator() { - public int compare(ProfileData pData1, ProfileData pData2) { - long time1 = pData1.getTime(); - long time2 = pData2.getTime(); - if (time1 < time2) { - return -1; - } else if (time1 > time2) { - return 1; - } else { - return 0; - } - } - }); - - try { - String query = String.format(FunctionEntryDBTable.SELECT_QUERY, markerStartTime, - markerEndTime); - rsEntry = SqlConnectionManager.executeQueryRS(query); - - query = String.format(FunctionExitDBTable.SELECT_QUERY, markerStartTime, markerEndTime); - rsExit = SqlConnectionManager.executeQueryRS(query); - - query = String.format(FunctionSampleDBTable.SELECT_QUERY, markerStartTime, - markerEndTime); - rsSample = SqlConnectionManager.executeQueryRS(query); - - if (rsEntry == null || rsExit == null || rsSample == null) { - Logger.error("failed to query function profiling data in range"); - } else { - if (rsEntry.next()) { - ProfileData pEntry = makeFunctionProfileData( - ProtocolConstants.MSG_FUNCTION_ENTRY, rsEntry); - pQueue.offer(pEntry); - } - if (rsExit.next()) { - ProfileData pExit = makeFunctionProfileData( - ProtocolConstants.MSG_FUNCTION_EXIT, rsExit); - pQueue.offer(pExit); - } - if (rsSample.next()) { - ProfileData pSample = makeSampleProfileData(rsSample); - pQueue.offer(pSample); - } - // handle entry/exit/sample data one by one in - // chronological order - while (true) { - ProfileData top = pQueue.poll(); - if (top == null) { - break; - } - ProfileDataMaker profileDataMaker = getProfileDataMakerByPid(top.getPid()); - - switch (top.getMsgID()) { - case ProtocolConstants.MSG_FUNCTION_ENTRY: - if (rsEntry.next()) { - ProfileData pEntry = makeFunctionProfileData( - ProtocolConstants.MSG_FUNCTION_ENTRY, rsEntry); - pQueue.offer(pEntry); - } - rangeCallstackManager.makeUserCallstack(top, profileDataMaker); - break; - case ProtocolConstants.MSG_FUNCTION_EXIT: - if (rsExit.next()) { - ProfileData pExit = makeFunctionProfileData( - ProtocolConstants.MSG_FUNCTION_EXIT, rsExit); - pQueue.offer(pExit); - } - rangeCallstackManager.makeUserCallstack(top, profileDataMaker); - break; - case ProtocolConstants.MSG_DATA_SAMPLE: - if (rsSample.next()) { - ProfileData pSample = makeSampleProfileData(rsSample); - pQueue.offer(pSample); - } - profileDataMaker.makeFunctionUsageProfileData(top); - break; - default: // never goes here - Logger.error("Wrong data from selecting function profiling data inside range"); - break; - } - } - } - } catch (SQLException e) { - Logger.exception(e); - } finally { - if (rsEntry != null) { - SqlConnectionManager.releaseResultSet(rsEntry); - } - if (rsExit != null) { - SqlConnectionManager.releaseResultSet(rsExit); - } - if (rsSample != null) { - SqlConnectionManager.releaseResultSet(rsSample); - } - } - - // make web profile data - makeWebProfileDataForRange(); - - - AnalyzerUtil.changePage(RangePage.pageID); - final DAContainerComposite page = AnalyzerManager.getCurrentPage(); - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - page.updateView(); - } - }); - } - - private ProfileData makeFunctionProfileData(int id, ResultSet rs) { - ProfileData profileData = null; - try { - long seq = rs.getLong(Function.SEQ.index); - int pid = rs.getInt(Function.PID.index); - int tid = rs.getInt(Function.TID.index); - int functionId = rs.getInt(Function.FUNCTIONID.index); - int binaryId = rs.getInt(Function.BINARYID.index); - long time = rs.getLong(Function.TIME.index); - long callerPcAddr = rs.getLong(Function.CALLERPCADDR.index); - long pcAddr = rs.getLong(Function.PCADDR.index); - - profileData = new ProfileData(id, seq, pid, tid, functionId, binaryId, time, - callerPcAddr, pcAddr); - } catch (SQLException e) { - Logger.exception(e); - } - return profileData; - } - - private ProfileData makeSampleProfileData(ResultSet rs) { - ProfileData profileData = null; - try { - long time = rs.getLong(Sample.TIME.index); - int pid = rs.getInt(Sample.PID.index); - int tid = rs.getInt(Sample.TID.index); - long pcAddr = rs.getLong(Sample.PCADDR.index); - - profileData = new ProfileData(time, pid, tid, pcAddr); - } catch (SQLException e) { - Logger.exception(e); - } - return profileData; - } - - private WebProfileData makeWebProfileData(int id, ResultSet rs) { - WebProfileData profileData = null; - try { - long seq = rs.getLong(1); - int pid = rs.getInt(2); - int tid = rs.getInt(3); - int functionLineNumber = rs.getInt(4); - String functionName = rs.getString(5); - String functionURL = rs.getString(6); - long time = rs.getLong(7); - - profileData = new WebProfileData(id, seq, pid, tid, functionLineNumber, functionName, functionURL, time); - } catch (SQLException e) { - Logger.exception(e); - } - return profileData; - } - - private void makeWebProfileDataForRange() { - ResultSet rsWebEntry = null; - ResultSet rsWebExit = null; - // TODO: code improvement regarding use of priority Queue - PriorityQueue pWebQueue = new PriorityQueue(3, - new Comparator() { - public int compare(WebProfileData pData1, WebProfileData pData2) { - long time1 = pData1.getTime(); - long time2 = pData2.getTime(); - if (time1 < time2) { - return -1; - } else if (time1 > time2) { - return 1; - } else { - return 0; - } - } - }); - - try { - String query = String.format(WebFunctionEntryDBTable.SELECT_QUERY, markerStartTime, markerEndTime); - rsWebEntry = SqlConnectionManager.executeQueryRS(query); - - query = String.format(WebFunctionExitDBTable.SELECT_QUERY, markerStartTime, markerEndTime); - rsWebExit = SqlConnectionManager.executeQueryRS(query); - - - if (rsWebEntry == null || rsWebExit == null) { - Logger.error("failed to query web function profiling data in range"); - } else { - if (rsWebEntry.next()) { - WebProfileData pWebEntry = makeWebProfileData(ProtocolConstants.MSG_WEB_FUNCTION_ENTRY, rsWebEntry); - pWebQueue.offer(pWebEntry); - } - if (rsWebExit.next()) { - WebProfileData pWebExit = makeWebProfileData(ProtocolConstants.MSG_WEB_FUNCTION_EXIT, rsWebExit); - pWebQueue.offer(pWebExit); - } - // handle entry/exit data one by one in - // chronological order - while (true) { - WebProfileData top = pWebQueue.poll(); - if (top == null) { - break; - } - - WebProfileDataMaker profiler = getWebProfileDataMakerByPid(top.getPid()); - - switch (top.getMsgID()) { - case ProtocolConstants.MSG_WEB_FUNCTION_ENTRY: - if (rsWebEntry.next()) { - WebProfileData pWebEntry = makeWebProfileData(ProtocolConstants.MSG_WEB_FUNCTION_ENTRY, rsWebEntry); - pWebQueue.offer(pWebEntry); - } - - profiler.makeWebFunctionUsageProfileData(top); - break; - case ProtocolConstants.MSG_WEB_FUNCTION_EXIT: - if (rsWebExit.next()) { - WebProfileData pWebExit = makeWebProfileData(ProtocolConstants.MSG_WEB_FUNCTION_EXIT, rsWebExit); - pWebQueue.offer(pWebExit); - } - profiler.makeWebFunctionUsageProfileData(top); - break; - default: // never goes here - Logger.error("Wrong data from selecting web function profiling data inside range"); - break; - } - } - } - } catch (SQLException e) { - Logger.exception(e); - } finally { - if (rsWebEntry != null) { - SqlConnectionManager.releaseResultSet(rsWebEntry); - } - if (rsWebExit != null) { - SqlConnectionManager.releaseResultSet(rsWebExit); - } - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeFailedApiListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeFailedApiListView.java deleted file mode 100644 index c2434b7..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeFailedApiListView.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Seokgil Kang - * Jooyoul Lee - * 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.range; - -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.nl.SummaryLabels; -import org.tizen.dynamicanalyzer.ui.summary.failed.FailedApiListView; -import org.tizen.dynamicanalyzer.ui.summary.failed.FailedApiTable; - -public class RangeFailedApiListView extends FailedApiListView { - - public RangeFailedApiListView(Composite parent, int style) { - super(parent, style); - setTitle(SummaryLabels.FAILED_API_LIST_VIEW_TITLE); - ((FailedApiTable) tableComp).setRangeTable(true); - tableComp.setTableName(SummaryLabels.RANGE_PAGE_FAILED_TABLE_NAME); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangePage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangePage.java deleted file mode 100644 index 22235cb..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangePage.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Seokgil Kang - * Jooyoul Lee - * 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.range; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; -import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAContainerComposite; -import org.tizen.dynamicanalyzer.resources.ColorResources; - -public class RangePage extends DAContainerComposite { - public static final String pageID = RangePage.class.getName(); - public static final String failedListViewID = RangeFailedApiListView.class - .getName(); - public static final String profilingViewID = RangeProfilingView.class - .getName(); - public static final String warningListViewID = RangeWarningListView.class - .getName(); - public static final String warningDerailViewID = RangeWarningDetailView.class - .getName(); - - SashForm upperForm; - SashForm bottomForm; - SashForm baseForm; - SashForm warningForm; - - public RangePage(Composite parent, int style) { - super(parent, style); - setTitle(AnalyzerLabels.COOLBAR_AREA_RANGE); - this.setData(DAContainerComposite.KEY_TOOLTIP, - ShortCutManager.COOLBAR_AREA_RANGE_TOOLTIP); - this.setBackground(ColorResources.CONFIGURATION_TABLE_COVER_BACKGROUND_COLOR); - this.setLayout(new FillLayout()); - - baseForm = new SashForm(this, SWT.VERTICAL); - baseForm.setLayout(new FillLayout()); - baseForm.setForeground(ColorResources.TAB_SELECTED_COLOR_START); - ((FillLayout) getLayout()).marginHeight = 15; - ((FillLayout) getLayout()).marginWidth = 5; - - upperForm = new SashForm(baseForm, SWT.HORIZONTAL); - - // FAILED_APILIST_VIEW_INDEX = 0; - RangeFailedApiListView failedApiListView = new RangeFailedApiListView( - upperForm, SWT.NONE); - ((DATableComposite) failedApiListView.getControl()).getTable() - .setSelectionEnabled(true); - addView(failedApiListView); - - // INFO_VIEW_INDEX = 2; - TimelineTableView tabView = new TimelineTableView(upperForm, - SWT.NONE); -// tabView.setObservingViews(TimelineTableView.callstackViewID, -// new String[] { RangePage.failedListViewID, -// RangePage.leakViewID, RangePage.warningListViewID }); - addView(tabView); - - upperForm.setWeights(new int[] { 37, 40, 23 }); - - bottomForm = new SashForm(baseForm, SWT.HORIZONTAL); - // FUNCTION_PROFILING_VIEW_INDEX = 3; - RangeProfilingView userFunctionProfilingView = new RangeProfilingView( - bottomForm, SWT.NONE); - addView(userFunctionProfilingView); - - warningForm = new SashForm(bottomForm, SWT.VERTICAL); - bottomForm.setWeights(new int[] { 70, 30 }); - - // WARNING_VIEW_INDEX = 4; - RangeWarningListView warningListView = new RangeWarningListView( - warningForm, SWT.NONE); - addView(warningListView); - - // WARNING_VIEW_DETAIL_INDEX = 5; - RangeWarningDetailView warningDetailView = new RangeWarningDetailView( - warningForm, SWT.NONE); - addView(warningDetailView); - warningForm.setWeights(new int[] { 70, 30 }); - } - - @Override - protected void onResized(int width, int height) { - int wrate = (int) (TimelineTableView.DEFAULT_WIDTH * 100 / width); - int hrate = (int) (TimelineTableView.DEFAULT_TABLE_VIEW_HEIGHT * 100 / height); - wrate = (wrate > 100) ? 100 : wrate; - hrate = (hrate > 100) ? 100 : hrate; - - if ((wrate > (100 - 37)) || hrate > 100) { - return; - } - - upperForm.setWeights(new int[] { 37, 100 - 37 - wrate, wrate }); - baseForm.setWeights(new int[] { hrate, 100 - hrate }); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeProfilingView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeProfilingView.java deleted file mode 100644 index 8eb45a3..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeProfilingView.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Seokgil Kang - * Jooyoul Lee - * 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.range; - -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.nl.SummaryLabels; -import org.tizen.dynamicanalyzer.project.AppInfo; -import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfilingView; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; - -public class RangeProfilingView extends FunctionUsageProfilingView { - - public RangeProfilingView(Composite parent, int style) { - super(parent, style); - - // set profiling table in range page - changeTable(Global.getProject().getApplicationInfo().getAppType().equals(AppInfo.APPTYPE_WEB)); - setTitle(SummaryLabels.FUNCTION_USER_PROFILING_VIEW_TITLE); - - // TODO: check why setRangeTable is called twice - setRangeTable(true); - ((DATreeComposite)stackLayout.topControl).setTableName(SummaryLabels.RANGE_PAGE_PROFILING_TABLE_NAME); - setRangeTable(true); - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningDetailView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningDetailView.java deleted file mode 100644 index dbe28a6..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningDetailView.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Seokgil Kang - * Jooyoul Lee - * 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.range; - -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.ui.summary.warning.WarningDetailView; - -public class RangeWarningDetailView extends WarningDetailView { - - public RangeWarningDetailView(Composite parent, int style) { - super(parent, style); - selectionViewId = RangePage.warningListViewID; - isRange = true; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningListView.java deleted file mode 100644 index 982896a..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeWarningListView.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Seokgil Kang - * Jooyoul Lee - * 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.range; - -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.nl.SummaryLabels; -import org.tizen.dynamicanalyzer.ui.summary.warning.WarningListView; -import org.tizen.dynamicanalyzer.ui.summary.warning.WarningTable; - -public class RangeWarningListView extends WarningListView { - - public RangeWarningListView(Composite parent, int style) { - super(parent, style); - setTitle(SummaryLabels.WARNING_LIST_VIEW_TITLE); - ((WarningTable) tableComp).setRangeTable(true); - tableComp.setTableName(SummaryLabels.RANGE_PAGE_WARNING_TABLE_NAME); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java index d9a7e75..363e691 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/failed/FailedApiTable.java @@ -39,15 +39,12 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants; 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.error.ErrorCodeManager; import org.tizen.dynamicanalyzer.listeners.SummaryMouseDoubleClickListener; import org.tizen.dynamicanalyzer.model.FilterProperty; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.nl.SummaryLabels; import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.range.RangePage; import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager; import org.tizen.dynamicanalyzer.ui.summary.SummaryPage; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; @@ -57,8 +54,6 @@ import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.Formatter; public class FailedApiTable extends DATableComposite { - private boolean isRange = false; - private final FailedApiDataMaker failedApiDataMaker = SummaryDataManager .getInstance().getFailedApiDataMaker(); @@ -75,9 +70,6 @@ public class FailedApiTable extends DATableComposite { long time = dataFormat.getLogData().getTime(); String id = SummaryPage.failedViewID; - if (isRange) { - id = RangePage.failedListViewID; - } DASelectionData selData = new DASelectionData(id, time, 0, items, table); AnalyzerManager.getCurrentPage().updateView(selData); @@ -91,106 +83,6 @@ public class FailedApiTable extends DATableComposite { SummaryPage.failedViewID)); } - public void setRangeTable(boolean isRange) { - this.isRange = isRange; - } - - // protected List makeTableInput() { - // List failedList = null; - // if (isRange) { - // failedList = RangeDataManager.getInstance().getFailedChecker() - // .getFailedList(); - // } else { - // failedList = AnalyzerManager.getFailedChecker().getFailedList(); - // } - // - // List input = new ArrayList(); - // int size = failedList.size(); - // for (int i = 0; i < size; i++) { - // FailedData failedData = failedList.get(i); - // int selectedPid = ToolbarArea.INSTANCE.getSelectedPid(); - // if (selectedPid != 0) { - // if (selectedPid != failedData.getPid()) { - // continue; - // } - // } - // - // // create text - // List text = new ArrayList(); - // List data = new ArrayList(); - // - // text.add(Long.toString(failedData.getSeq())); // 0 - // data.add(new Long(failedData.getSeq())); - // String time = Formatter.toTimeFormat(failedData.getTime()); - // text.add(time); // 1 - // data.add(new Long(failedData.getTime())); - // - // text.add(failedData.getName()); // 2 - // data.add(failedData.getName()); - // - // text.add(failedData.getArgs()); // 3 - // data.add(failedData.getArgs()); - // - // text.add(failedData.getReturn()); // 4 - // data.add(failedData.getReturn()); - // - // try { - // String errCode = ErrorCodeManager.getInatance() - // .getErrorCode(failedData.getErrorCode()).name(); - // if (null == errCode) { - // // FIXME : for debug - // errCode = "undefined error number"; //$NON-NLS-1$ - // } - // text.add(errCode); // 5 - // data.add(new Long(failedData.getErrorCode())); - // } catch (NullPointerException e) { - // Logger.debug("debug"); - // continue; - // } - // String errMsg = ErrorCodeManager.getInatance().getErrorDescription( - // failedData.getErrorCode()); - // if (null == errMsg) { - // // FIXME : for debug - // errMsg = "undefined error number"; //$NON-NLS-1$ - // } - // text.add(errMsg); // 6 - // data.add(new Long(failedData.getErrorCode())); - // - // text.add(Integer.toString(failedData.getPid())); // 7 - // data.add(new Integer(failedData.getPid())); - // - // data.add(new Long(failedData.getCallerPc())); // 8 - // data.add(failedData.getLibName()); // 9 - // - // // create images - // - // // create DATableDataFormat - // DATableDataFormat tableData = new DATableDataFormat( - // failedData.getSeq()); - // tableData.setObject(failedData); - // tableData.setLogData(failedData.getData()); - // tableData.getData().addAll(data); - // tableData.setType(AnalyzerConstants.TYPE_TABLE_FAILED); - // - // TableInput tableInput = new TableInput(); - // tableInput.setText(text); - // tableInput.setData(tableData); - // input.add(tableInput); - // - // if (RangeDataManager.getInstance().isBeingAnalyzed()) { - // long failedTime = failedData.getTime(); - // long startTime = RangeDataManager.getInstance() - // .getAnalysisStartTime(); - // long endTime = RangeDataManager.getInstance() - // .getAnalysisEndTime(); - // if (failedTime >= startTime && failedTime <= endTime) { - // tableInput.setInRange(true); - // } - // } - // } - // return input; - // } - protected List makeTableInput() { List> failedData = null; int selectedPid = Toolbar.INSTANCE.getSelectedPid(); @@ -198,28 +90,9 @@ public class FailedApiTable extends DATableComposite { if (!filterList.isEmpty()) { // if filter is set by user List whereQueryList = convertFilterProperty2Query(filterList); - if (isRange) { - Long markerStartTime = Long.valueOf(RangeDataManager.getInstance() - .getMarkerStartTime()); - Long markerEndTime = Long.valueOf(RangeDataManager.getInstance() - .getMarkerEndTime()); - failedData = failedApiDataMaker.getFailedApiDataFromDBForRange( - markerStartTime, markerEndTime, selectedPid, whereQueryList); - } else { - failedData = failedApiDataMaker.getFailedApiDataFromDB(selectedPid, - whereQueryList); - } + failedData = failedApiDataMaker.getFailedApiDataFromDB(selectedPid, whereQueryList); } else { - if (isRange) { - Long markerStartTime = Long.valueOf(RangeDataManager.getInstance() - .getMarkerStartTime()); - Long markerEndTime = Long.valueOf(RangeDataManager.getInstance() - .getMarkerEndTime()); - failedData = failedApiDataMaker.getFailedApiDataFromDBForRange( - markerStartTime, markerEndTime, selectedPid, null); - } else { - failedData = failedApiDataMaker.getFailedApiDataFromDB(selectedPid, null); - } + failedData = failedApiDataMaker.getFailedApiDataFromDB(selectedPid, null); } if (failedData == null) @@ -369,17 +242,6 @@ public class FailedApiTable extends DATableComposite { tableInput.setText(text); tableInput.setData(tableData); input.add(tableInput); - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long failedTime = time; - long startTime = RangeDataManager.getInstance() - .getAnalysisStartTime(); - long endTime = RangeDataManager.getInstance() - .getAnalysisEndTime(); - if (failedTime >= startTime && failedTime <= endTime) { - tableInput.setInRange(true); - } - } } return input; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java index 706db33..7828c4d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java @@ -74,7 +74,7 @@ public class FunctionSampleDBTable extends DBTable { } public FunctionSampleDBTable() { - addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG)); + addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.SAMPLE_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); 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 2459edd..01a7fce 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 @@ -31,17 +31,14 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.NavigableMap; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.nl.SummaryLabels; import org.tizen.dynamicanalyzer.project.BinaryInfo; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.setting.Feature; import org.tizen.dynamicanalyzer.setting.FlatPreferences; import org.tizen.dynamicanalyzer.setting.SettingDataManager; -import org.tizen.dynamicanalyzer.setting.TargetData; import org.tizen.dynamicanalyzer.swap.logparser.LogPackage; import org.tizen.dynamicanalyzer.swap.logparser.Logs; import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager; @@ -121,7 +118,7 @@ public class FunctionUsageProfiler extends PageDataManager { public ProfileDataMaker getProfileDataMakerByPid(int pid) { ProfileDataMaker profileDataMaker = profileDataMakerMap.get(pid); if (null == profileDataMaker) { - profileDataMaker = new RuntimeProfileDataMaker(); + profileDataMaker = new ProfileDataMaker(); profileDataMaker.setPid(pid); profileDataMakerMap.put(pid, profileDataMaker); } @@ -150,6 +147,10 @@ public class FunctionUsageProfiler extends PageDataManager { public void clear() { lastSampleSeq = -1; isSetSamplePeriod = false; + for (int pid : getPidsOfProfileDataMakerMap()) { + ProfileDataMaker profiler = getProfileDataMakerByPid(pid); + profiler.clear(); + } profileDataMakerMap.clear(); webProfileDataMakerMap.clear(); ProfilingData.clear(); // reset internal sequence number @@ -246,17 +247,12 @@ public class FunctionUsageProfiler extends PageDataManager { @Override protected void makeData(LogPackage pack) { - - // TODO: will get sample_time from Project.java if (!isSetSamplePeriod) { - SAMPLE_TIME = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.FUNCTION_SAMPLING_RATE); - if (SAMPLE_TIME < 0) { - SAMPLE_TIME = Feature.FUNCTION_SAMPLING_RATE.getData().getDefaultValue(); - } + SAMPLE_TIME = SettingDataManager.INSTANCE + .getPreferenceValue(FlatPreferences.FUNCTION_SAMPLING_RATE); } if (SAMPLE_TIME > 0) { - Logs logs = pack.getLogs(ProtocolConstants.MSG_DATA_SAMPLE); if (null != logs && logs.getRawLogs().size() != 0) { List> insertData = new ArrayList>(); @@ -266,22 +262,8 @@ public class FunctionUsageProfiler extends PageDataManager { List insertRowData = new ArrayList(); ProfileData sampleLog = (ProfileData) sample.get(i); getInstance().getProfileDataMakerByPid(sample.get(i).getPid()) - .makeFunctionUsageProfileData(sampleLog); - // set LastSampleSeq - NavigableMap seqByTimeMap = Global.getRuntimeCallstackManager() - .getSeqTimeByTidMap(sampleLog.getTid(), false); - - if (null != seqByTimeMap) { - // 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); - } - } - + .prepareFunctionUsageProfileData(sampleLog); + // save to DB try { insertRowData.add(new Long(sampleLog.getSeq())); @@ -318,7 +300,7 @@ public class FunctionUsageProfiler extends PageDataManager { WebProfilingData pData = pDataList.get(j); try { - insertRowData.add(new Integer(pData.getProfilingDataID())); + insertRowData.add(new Integer(pData.getProfilingDataID())); insertRowData.add(new Integer(pData.getFunctionLineNumber())); insertRowData.add(pData.getFunctionName()); insertRowData.add(pData.getFunctionURL()); @@ -337,11 +319,17 @@ public class FunctionUsageProfiler extends PageDataManager { } } } - + @Override protected void onThreadStop() { + saveWebProfilingData(); + } + + /** + * Save native Profiling Data to database. + */ + public void doSaveProfilingData() { saveProfilingData(); saveProfilingChildData(); - saveWebProfilingData(); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfilingView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfilingView.java index 7d8ab3e..db94e1b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfilingView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionUsageProfilingView.java @@ -104,12 +104,4 @@ public class FunctionUsageProfilingView extends DAViewComposite { } contents.layout(); } - - protected void setRangeTable(boolean isRange) { - if (stackLayout.topControl == nativeTable) { - nativeTable.setRangeTable(isRange); - } else { - webTable.setRangeTable(isRange); - } - } } 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 fa7ef6f..68653b1 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 @@ -7,6 +7,7 @@ * WooJin Jung * Jooyoul Lee * Juyoung Kim + * Petr Privalov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +23,7 @@ * * Contributors: * - S-Core Co., Ltd - * + * */ package org.tizen.dynamicanalyzer.ui.summary.profiling; @@ -33,18 +34,18 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.project.AppInfo; import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.project.callstack.BaseCallstackManager; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackItem; import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceDataManager; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.Formatter; -public abstract class ProfileDataMaker { +public class ProfileDataMaker { static class CallstackTree { ProfilingData me; CallstackTree parent; @@ -72,9 +73,8 @@ public abstract class ProfileDataMaker { } } - private Map callstackTreeByTidMap = new HashMap(); + private Map callstackTreeByTidMap = new HashMap<>(); protected int totalSampleCount = 0; - protected BaseCallstackManager callstackManager = null; private int pid = 0; /** @@ -93,10 +93,6 @@ public abstract class ProfileDataMaker { private ProfilingData dependentLib = null; private String appBinName = null; - public ProfileDataMaker(BaseCallstackManager callstackManager) { - this.callstackManager = callstackManager; - } - public void clear() { getProfilingDataMap().clear(); getChildListMap().clear(); @@ -155,38 +151,36 @@ public abstract class ProfileDataMaker { public Map getProfilingDataMap() { if (null == profilingDataMap) { - profilingDataMap = new ConcurrentHashMap(); + profilingDataMap = new ConcurrentHashMap<>(); } return profilingDataMap; } public Map getChildListMap() { if (null == childListMap) { - childListMap = new ConcurrentHashMap(); + childListMap = new ConcurrentHashMap<>(); } return childListMap; } public Map getSymbolIDHash() { if (null == symbolIDHash) { - symbolIDHash = new ConcurrentHashMap(); + symbolIDHash = new ConcurrentHashMap<>(); } return symbolIDHash; } public CallstackTree getCurrentCallstackTree(int tid) { - CallstackTree current = callstackTreeByTidMap.get(tid); - return current; + return callstackTreeByTidMap.get(tid); } public void putCurrentCallstackTree(int tid, CallstackTree current) { callstackTreeByTidMap.put(tid, current); - return; } public String getCpuRate(ProfilingData data, boolean exclusive) { - int count = 0; - double rate = 0.; + int count; + double rate; if (exclusive) { count = data.getExCount(); if (totalSampleCount == 0) { @@ -207,7 +201,7 @@ public abstract class ProfileDataMaker { } public String getCpuTime(ProfilingData data, boolean exclusive) { - int count = 0; + int count; if (exclusive) { count = data.getExCount(); } else { @@ -217,41 +211,198 @@ public abstract class ProfileDataMaker { return Long.toString(count * FunctionUsageProfiler.SAMPLE_TIME); } - protected void checkUserCall(CallStackUnit csa, ProfilingData parent, ProfilingData pp, - LogData log) { + /** + * For given {@link CallStackUnit} object (which represents FUNCTION_ENTRY + * or FUNCTION_SAMPLING message occurrence) update tree of + * {@link ProfilingData} objects with root in given Parent node. + * + * @param csu {@link CallStackUnit} + * @param parent parent item + */ + private void checkUserCall(CallStackUnit csu, ProfilingData parent) { AppInfo appInfo = Global.getProject().getApplicationInfo(); BinaryInfo binfo = Global.getProject().getDeviceStatusInfo() .getBinaryInfo(appInfo.getExecBinaryPath()); if ((null != binfo.getTargetBinaryPath()) - && (binfo.getTargetBinaryPath().equals(csa.getPath()))) { + && (binfo.getTargetBinaryPath().equals(csu.getPath()))) { if (null == appBin) { - CallStackUnit appBinCsa = new CallStackUnit(-1, FunctionUsageProfiler.APPLICATION, - log); + CallStackUnit appBinCsa = new CallStackUnit(FunctionUsageProfiler.APPLICATION); appBin = makeNewProfilingData(appBinCsa, true); appBin.setKey(FunctionUsageProfiler.APPLICATION_KEY); - appBinName = csa.getPath(); + appBinName = csu.getPath(); } parent.setParent(appBin.getName()); appBin.addChild(parent); - if (null != pp) { - pp = appBin; - } } else { if (null == dependentLib) { - CallStackUnit dependentLibBinCsa = new CallStackUnit(-2, - FunctionUsageProfiler.DEPENDENT_LIB, log); + CallStackUnit dependentLibBinCsa = new CallStackUnit( + FunctionUsageProfiler.DEPENDENT_LIB); dependentLib = makeNewProfilingData(dependentLibBinCsa, true); dependentLib.setKey(FunctionUsageProfiler.DEPENDENT_LIB_KEY); } parent.setParent(dependentLib.getName()); dependentLib.addChild(parent); - if (null != pp) { - pp = dependentLib; + } + } + + /** + * For given FUNCTION_SAMPLE message update corresponding item in + * {@code profilingDataMap}. This method counts exclusive time. + * + * It is to be called during the tracing process. It is to be called only + * one time for each FUNCTION_SAMPLE message. + * + * @param sampleLog FUNCTION_SAMPLE message + */ + public void prepareFunctionUsageProfileData(ProfileData sampleLog){ + totalSampleCount++; + + long selfAddr = sampleLog.getPcAddr(); + int samplepid = sampleLog.getPid(); + int tid = sampleLog.getTid(); + long sampleTime = sampleLog.getTime(); + + int binId = Global.getBinaryID(samplepid, sampleTime, selfAddr); + String inputPath = Global.getLibraryName(binId); + String inputFuncName; + CallStackUnit callstackUnit = CallTraceDataManager.getInstance().getLastEntry(pid, tid, + sampleTime); + if (callstackUnit == null || callstackUnit.getBinaryID() != binId) { + inputFuncName = FunctionUsageProfiler.UNKNOWN; + callstackUnit = new CallStackUnit(selfAddr, 0, samplepid, tid, sampleTime, 0); + } else { + inputFuncName = callstackUnit.getFunctionName(); + } + + ProfilingData parent = getProfilingDataByKey(inputPath); + // exclusive cpu time + if (null == parent) { + parent = makeNewProfilingData(callstackUnit, true); + checkUserCall(callstackUnit, parent); + if (inputFuncName.equals(FunctionUsageProfiler.UNKNOWN)) { + parent.addExCount(); + } else { + ProfilingData child = makeNewProfilingData(callstackUnit, false); + parent.addChild(child); + child.addExCount(); + child.setParent(parent.getName()); + } + } else { + if (inputFuncName.equals(FunctionUsageProfiler.UNKNOWN)) { + parent.addExCount(); + } else { + ProfilingData child = getProfilingDataByKey(callstackUnit.getSymbol()); + if (null == child) { + child = makeNewProfilingData(callstackUnit, false); + parent.addChild(child); + child.setParent(parent.getName()); + } + child.addExCount(); } } } - abstract public void makeFunctionUsageProfileData(ProfileData sampleLog); + /** + * For given database record , which represents stored FUNCTION_SAMPLE + * message, update corresponding item in {@code profilingDataMap}. This + * method counts inclusive time. + * + * It is to be called after the tracing process. + * It is to be called only one time for each database record. + * + * @param dbrecord Sampling message row in the same way as in database + */ + public void finalizeFunctionUsageProfileData(List dbrecord) { + + long selfAddr = (long) dbrecord.get(FunctionSampleDBTable.COLUMN.PC_ADDRESS.index); + int samplepid = (int) dbrecord.get(FunctionSampleDBTable.COLUMN.PID.index); + int tid = (int) dbrecord.get(FunctionSampleDBTable.COLUMN.TID.index); + long sampleTime = (long) dbrecord.get(FunctionSampleDBTable.COLUMN.SAMPLE_TIME.index); + + int binId = Global.getBinaryID(samplepid, sampleTime, selfAddr); + String inputPath = Global.getLibraryName(binId); + String inputFuncName; + CallStackUnit callstackUnit = CallTraceDataManager.getInstance().getLastEntry(pid, tid, + sampleTime); + if (callstackUnit == null || callstackUnit.getBinaryID() != binId) { + inputFuncName = FunctionUsageProfiler.UNKNOWN; + callstackUnit = new CallStackUnit(selfAddr, 0, samplepid, tid, sampleTime, 0); + } else { + inputFuncName = callstackUnit.getFunctionName(); + } + ProfilingData parent = getProfilingDataByKey(inputPath); + + List callstack = CallTraceDataManager.getInstance() + .getCallstackForTable(samplepid, tid, sampleTime); + + // sampling before first entry in profiling app, or in another + // thread. + // Simply copy data from Exclusive part. + if (inputFuncName.equals(FunctionUsageProfiler.UNKNOWN)) { + parent.addInCount(); + } else { + Logger.warning("Unexpected occurence of " + CommonConstants.NEW_LINE + + callstackUnit.getSymbol()); + ProfilingData child = getProfilingDataByKey(callstackUnit.getSymbol()); + if (null == child) { + child = makeNewProfilingData(callstackUnit, false); + } + child.addInCount(); + } + for (int i = 0; i < callstack.size(); i++) { + CallStackUnit callstackCsa = callstack.get(i); + + if (callstackCsa.getFunctionName().equals(FunctionUsageProfiler.UNKNOWN)) { + ProfilingData inParent = getProfilingDataByKey(callstackCsa.getPath()); + ProfilingData pp; + if (null == inParent) { + inParent = makeNewProfilingData(callstackCsa, true); + checkUserCall(callstackCsa, inParent); + } + inParent.addInCount(); + + if (null != inParent.getParent()) { + String pInParentName = inParent.getParent(); + pp = getProfilingDataByKey(pInParentName); + if (null != pp) { + pp.addInCount(); + } + } + continue; + } + ProfilingData fupData = getProfilingDataByKey(callstackCsa.getSymbol()); + ProfilingData inParent; + if (null == fupData) { + inParent = getProfilingDataByKey(callstackCsa.getPath()); + if (null == inParent) { + inParent = makeNewProfilingData(callstackCsa, true); + checkUserCall(callstackCsa, inParent); + } + fupData = makeNewProfilingData(callstackCsa, false); + fupData.setParent(inParent.getName()); + inParent.addChild(fupData); + } else { + String pName = fupData.getParent(); + inParent = getProfilingDataByKey(pName); + if (inParent == null) { + Logger.error("ProfilingData: function item without library item"); + continue; + } + } + + if (i == callstack.size() - 1) { + inParent.addInCount(); + if (null != inParent.getParent()) { + String pInParentName = inParent.getParent(); + ProfilingData pp = getProfilingDataByKey(pInParentName); + if (null != pp) { + pp.addInCount(); + } + } + } + fupData.addInCount(); + } + } protected ProfilingData makeNewProfilingData(CallStackUnit inputData, boolean isParent) { ProfilingData newProfilingData = new ProfilingData(inputData, isParent, this); @@ -266,77 +417,136 @@ public abstract class ProfileDataMaker { return newProfilingData; } - public void makeFupDataForCallTrace(CallStackUnit inputCallstackApiData, ProfileData log) { + /** + * For given FUNCTION_ENTRY message update corresponding item in + * {@code profilingDataMap}. This method counts call count. + * + * It is to be called during the tracing process. + * It is to be called only one time for each FUNCTION_SAMPLE message. + * + * @param pData FUNCTION_ENTRY message + */ + public void prepareFUPDataForCallTrace(ProfileData pData) { + + int type = pData.getMsgID(); + int binId = pData.getBinaryId(); + String path = Global.getLibraryName(binId); + int functionID = pData.getApiId(); + String fName = Global.getFunctionName(functionID); + CallStackUnit unit = new CallStackUnit(pData.getPcAddr(), pData.getCallerPcAddr(), + pData.getPid(), pData.getTid(), pData.getTid(), functionID, binId, fName, path); + + if (type == ProtocolConstants.MSG_FUNCTION_ENTRY) { + ProfilingData parent = getProfilingDataByKey(path); + if (parent == null) { + parent = makeNewProfilingData(unit, true); + checkUserCall(unit, parent); + ProfilingData child = makeNewProfilingData(unit, false); + parent.addChild(child); + child.setParent(parent.getName()); + child.addCallCount(); + } else { + ProfilingData child = getProfilingDataByKey(unit.getSymbol()); + if (null == child) { + child = makeNewProfilingData(unit, false); + parent.addChild(child); + child.setParent(parent.getName()); + } + child.addCallCount(); + } + } + + } + + /** + * For given database record , which represents stored FUNCTION_ENTRY + * message update corresponding item in {@code profilingDataMap}. This + * method counts both exclusive and inclusive elapsed time. + * + * It is to be called after the tracing process. + * It is to be called only one time for each database record. + * + * @param entry db representation of function entry\exit message + */ + public void finalizeFUPDataForCallTrace(List entry) { long exeTime = 0; - int type = log.getMsgID(); - int tid = log.getTid(); - long time = log.getTime(); - long startTime; + long addr = (long) (entry.get(FunctionEntryDBTable.COLUMN.START_PC_ADDRESS.index)); + long callerAddr = (long) (entry.get(FunctionEntryDBTable.COLUMN.CALLER_PC_ADDRESS.index)); + int type = (boolean) (entry.get(FunctionEntryDBTable.COLUMN.IS_ENTRY.index)) ? ProtocolConstants.MSG_FUNCTION_ENTRY + : ProtocolConstants.MSG_FUNCTION_EXIT; + int entrypid = (int) (entry.get(FunctionEntryDBTable.COLUMN.PID.index)); + int tid = (int) (entry.get(FunctionEntryDBTable.COLUMN.TID.index)); + long time = (long) (entry.get(FunctionEntryDBTable.COLUMN.START_TIME.index)); + int functionID = (int) (entry.get(FunctionEntryDBTable.COLUMN.FUNCTION_ID.index)); + String fName = Global.getFunctionName(functionID); + int binId = (int) (entry.get(FunctionEntryDBTable.COLUMN.BINARY_ID.index)); + CallStackUnit unit = new CallStackUnit(addr, callerAddr, entrypid, tid, time, functionID, + binId, fName, Global.getLibraryName(binId)); - List userCallstack = callstackManager.getUserCallstack(tid); - int size = userCallstack.size(); + long startTime; + // called from FunctionEntryIndexer if (type == ProtocolConstants.MSG_FUNCTION_EXIT) { - if (size == 0 - || userCallstack.get(size - 1).getCallStackUnit().getFunctionId() != inputCallstackApiData - .getFunctionId()) { - Logger.debug("exit without entry or EXIT self is not the same as top of user callstack :" - + inputCallstackApiData.getFunctionName()); //$NON-NLS-1$ + List callstack = CallTraceDataManager.getInstance() + .getCallstackForSampling(entrypid, tid, time); + + if (callstack == null || callstack.isEmpty() + || callstack.get(0).getAddr() != addr) { return; } - startTime = userCallstack.get(size - 1).getStartTime(); - if (startTime != -1) { + + startTime = callstack.get(0).getTime(); + if (startTime > 0) { exeTime += time - startTime; } + unit = callstack.get(0); } - ProfilingData parent = getProfilingDataByKey(inputCallstackApiData.getPath()); + ProfilingData parent = getProfilingDataByKey(unit.getPath()); + ProfilingData child; if (null == parent) { - parent = makeNewProfilingData(inputCallstackApiData, true); - checkUserCall(inputCallstackApiData, parent, null, log); - - ProfilingData child = makeNewProfilingData(inputCallstackApiData, false); + Logger.warning("Unexpected occurence of library\n" + unit.getPath()); + parent = makeNewProfilingData(unit, true); + checkUserCall(unit, parent); + child = makeNewProfilingData(unit, false); parent.addChild(child); - child.addElapsedTime(exeTime); child.setParent(parent.getName()); - if (type != ProtocolConstants.MSG_FUNCTION_EXIT) { - child.addCallCount(); - } + child.addElapsedTime(exeTime); + } else { // null != parent - ProfilingData child = getProfilingDataByKey(inputCallstackApiData.getSymbol()); + child = getProfilingDataByKey(unit.getSymbol()); if (null == child) { - child = makeNewProfilingData(inputCallstackApiData, false); + Logger.warning( + "Unexpected occurence of " + CommonConstants.NEW_LINE + unit.getSymbol()); + child = makeNewProfilingData(unit, false); parent.addChild(child); child.setParent(parent.getName()); } child.addElapsedTime(exeTime); - if (type != ProtocolConstants.MSG_FUNCTION_EXIT) { - child.addCallCount(); - } + } - // calculate internal time - CallstackTree current = getCurrentCallstackTree(tid); - if (type == ProtocolConstants.MSG_FUNCTION_EXIT) { - if (null == current) { - // bug - Logger.debug("exit without entry - range only :" + inputCallstackApiData.getFunctionName()); //$NON-NLS-1$ - } else { - CallstackTree parentCt = current.getParent(); - if (null != parentCt) { - parentCt.addChildExeTime(current.getThis().getLastElapsedTime()); - } - child.addExclusiveElapsedTime(current.getExclusiveExeTime()); - putCurrentCallstackTree(tid, current.getParent()); - } + // calculate internal time + CallstackTree current = getCurrentCallstackTree(tid); + if (type == ProtocolConstants.MSG_FUNCTION_EXIT) { + if (null == current) { + // bug + Logger.debug("exit without entry - range only :" + unit.getFunctionName()); //$NON-NLS-1$ } else { - if (null == current) { - CallstackTree ct = new CallstackTree(child, null); - putCurrentCallstackTree(tid, ct); - } else { - CallstackTree ct = new CallstackTree(child, current); - putCurrentCallstackTree(tid, ct); + CallstackTree parentCt = current.getParent(); + if (null != parentCt) { + parentCt.addChildExeTime(exeTime); } + child.addExclusiveElapsedTime(current.getExclusiveExeTime()); + putCurrentCallstackTree(tid, current.getParent()); + } + } else { + if (null == current) { + CallstackTree ct = new CallstackTree(child, null); + putCurrentCallstackTree(tid, ct); + } else { + CallstackTree ct = new CallstackTree(child, current); + putCurrentCallstackTree(tid, ct); } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingData.java index 4e0ce8c..a5c8b87 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingData.java @@ -62,7 +62,6 @@ public class ProfilingData { private long inElapsedTime = 0; private long lastExeTime = 0; private long exElapsedTime = 0; - private int lastSampleID = -1; private int functionId = -1; private ProfileDataMaker profiler = null; @@ -103,7 +102,7 @@ public class ProfilingData { this.profiler = profiler; } - public void addChild(ProfilingData child) { + public synchronized void addChild(ProfilingData child) { int childID = child.getProfilingDataID(); getChildData().getChildren().add(childID); } @@ -120,11 +119,11 @@ public class ProfilingData { this.key = key; } - public String getParent() { + public synchronized String getParent() { return parent; } - public void setParent(String parentKey) { + public synchronized void setParent(String parentKey) { this.parent = parentKey; } @@ -158,7 +157,7 @@ public class ProfilingData { return exCount; } - public void addExCount() { + public synchronized void addExCount() { exCount++; } @@ -166,25 +165,19 @@ public class ProfilingData { return inCount; } - public void addInCount(int sampleID) { - if (sampleID == lastSampleID) { - return; - } else { - inCount++; - lastSampleID = sampleID; - return; - } + public synchronized void addInCount() { + inCount++; } public int getCallCount() { return callCount; } - public void addCallCount() { + public synchronized void addCallCount() { callCount++; } - public void addElapsedTime(long time) { + public synchronized void addElapsedTime(long time) { lastExeTime = time; inElapsedTime += time; } @@ -197,7 +190,7 @@ public class ProfilingData { return lastExeTime; } - public void addExclusiveElapsedTime(long time) { + public synchronized void addExclusiveElapsedTime(long time) { exElapsedTime += time; } @@ -205,7 +198,7 @@ public class ProfilingData { return exElapsedTime; } - public boolean isParent() { + public synchronized boolean isParent() { if (getChildData().getChildren().isEmpty()) { return false; } @@ -225,7 +218,7 @@ public class ProfilingData { } public List getChildList() { - List output = new ArrayList(); + List output = new ArrayList<>(); List childIDs = getChildData().getChildren(); for (int i = 0; i < childIDs.size(); i++) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingTable.java index b350345..6e03e85 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/ProfilingTable.java @@ -52,8 +52,6 @@ import org.tizen.dynamicanalyzer.model.ColumnData; import org.tizen.dynamicanalyzer.model.FilterProperty; import org.tizen.dynamicanalyzer.model.TreeInput; import org.tizen.dynamicanalyzer.nl.SummaryLabels; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.range.RangePage; import org.tizen.dynamicanalyzer.ui.summary.SummaryPage; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; @@ -65,8 +63,6 @@ import org.tizen.dynamicanalyzer.utils.Formatter; public class ProfilingTable extends DATreeComposite { - private boolean isRange = false; - public ProfilingTable(Composite parent, int compStyle, int tableStyle) { super(parent, compStyle, tableStyle); setComparator(new TreeDataComparator()); @@ -101,9 +97,6 @@ public class ProfilingTable extends DATreeComposite { GridItem[] items = table.getSelection(); String id = SummaryPage.profilingViewID; - if (isRange) { - id = RangePage.profilingViewID; - } DASelectionData selData = new DASelectionData(id, 0, 0, items, table); AnalyzerManager.getCurrentPage().updateView(selData); @@ -275,23 +268,11 @@ public class ProfilingTable extends DATreeComposite { } private List getPidsOfProfileDataMakerMap() { - if (isRange) { - return RangeDataManager.getInstance() - .getPidsOfProfileDataMakerMap(); - } else { - return FunctionUsageProfiler.getInstance() - .getPidsOfProfileDataMakerMap(); - } + return FunctionUsageProfiler.getInstance().getPidsOfProfileDataMakerMap(); } private ProfileDataMaker getProfileDataMakerByPid(int pid) { - if (isRange) { - return RangeDataManager.getInstance() - .getProfileDataMakerByPid(pid); - } else { - return FunctionUsageProfiler.getInstance() - .getProfileDataMakerByPid(pid); - } + return FunctionUsageProfiler.getInstance().getProfileDataMakerByPid(pid); } private void createColumn(Object parent, ColumnData data, int index) { @@ -451,10 +432,6 @@ public class ProfilingTable extends DATreeComposite { } } - public void setRangeTable(boolean isRange) { - this.isRange = isRange; - } - @Override public List makeTreeInput() { int selectedPid = Toolbar.INSTANCE.getSelectedPid(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RangeProfileDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RangeProfileDataMaker.java deleted file mode 100644 index 3440bd5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RangeProfileDataMaker.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * Jooyoul Lee - * 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.summary.profiling; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.tizen.dynamicanalyzer.common.path.PathConstants; -import org.tizen.dynamicanalyzer.project.callstack.BaseCallstackManager; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackItem; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit; - -public class RangeProfileDataMaker extends ProfileDataMaker { - - public RangeProfileDataMaker(BaseCallstackManager callstackManager) { - super(callstackManager); - } - - @Override - public void makeFunctionUsageProfileData(ProfileData sampleLog) { - totalSampleCount++; - List addrs = new ArrayList(); - long selfAddr = sampleLog.getPcAddr(); - int pid = sampleLog.getPid(); - int tid = sampleLog.getTid(); - long sampleTime = sampleLog.getTime(); - - Map addrMap = callstackManager.getCallStackApiAddrByPidMap(pid); - - CallStackUnit selfCallstackUnit = addrMap.get(selfAddr); - if (null == selfCallstackUnit) { - selfCallstackUnit = new CallStackUnit(selfAddr, callstackManager.getCallStackSymbol( - selfAddr, pid, sampleTime), sampleLog); - addrMap.put(selfAddr, selfCallstackUnit); - } - - List userCallstack = callstackManager.getUserCallstack(tid); - int callstackSize = userCallstack.size(); - - for (int i = 0; i < callstackSize; i++) { - long addr = userCallstack.get(i).getCallStackUnit().getAddr(); - addrs.add(addr); - } - addrs.add(selfAddr); - - // drop samples of probe library - if (selfCallstackUnit.getPath().startsWith(PathConstants.DA_REMOTE_PROBE_PATH)) { - return; - } - - String inputPath = selfCallstackUnit.getPath(); - String inputFuncName = selfCallstackUnit.getFunctionName(); - - ProfilingData parent = getProfilingDataByKey(inputPath); - // exclusive cpu time - if (null == parent) { - parent = makeNewProfilingData(selfCallstackUnit, true); - checkUserCall(selfCallstackUnit, parent, null, sampleLog); - if (inputFuncName.equals(FunctionUsageProfiler.UNKNOWN)) { - parent.addExCount(); - } else { - ProfilingData child = makeNewProfilingData(selfCallstackUnit, false); - parent.addChild(child); - child.addExCount(); - child.setParent(parent.getName()); - } - } else { - if (inputFuncName.isEmpty()) { - parent.addExCount(); - } else { - ProfilingData child = getProfilingDataByKey(selfCallstackUnit.getSymbol()); - if (null == child) { - child = makeNewProfilingData(selfCallstackUnit, false); - parent.addChild(child); - child.setParent(parent.getName()); - } - child.addExCount(); - } - } - - // inclusive cpu time - int size = 0; - if (null != addrs) { - size = addrs.size(); - } - for (int i = 0; i < size; i++) { - CallStackUnit callstackCsa = addrMap.get(addrs.get(i)); - - if (callstackCsa.getFunctionName().equals(FunctionUsageProfiler.UNKNOWN)) { - ProfilingData inParent = getProfilingDataByKey(callstackCsa.getPath()); - ProfilingData pp = null; - if (null == inParent) { - inParent = makeNewProfilingData(callstackCsa, true); - checkUserCall(callstackCsa, inParent, pp, sampleLog); - } - inParent.addInCount(totalSampleCount); - - if (null != inParent.getParent()) { - String pInParentName = inParent.getParent(); - pp = getProfilingDataByKey(pInParentName); - if (null != pp) { - pp.addInCount(totalSampleCount); - } - } - } else { - ProfilingData fupData = getProfilingDataByKey(callstackCsa.getSymbol()); - if (null == fupData) { - ProfilingData inParent = getProfilingDataByKey(callstackCsa.getPath()); - if (null == inParent) { - inParent = makeNewProfilingData(callstackCsa, true); - checkUserCall(callstackCsa, inParent, null, sampleLog); - } - fupData = makeNewProfilingData(callstackCsa, false); - fupData.setParent(inParent.getName()); - - inParent.addChild(fupData); - inParent.addInCount(totalSampleCount); - if (null != inParent.getParent()) { - String pInParentName = inParent.getParent(); - ProfilingData pp = getProfilingDataByKey(pInParentName); - if (null != pp) { - pp.addInCount(totalSampleCount); - } - } - } else { - String pName = fupData.getParent(); - ProfilingData inParent = getProfilingDataByKey(pName); - inParent.addInCount(totalSampleCount); - - if (null != inParent.getParent()) { - String pInParentName = inParent.getParent(); - ProfilingData ppData = getProfilingDataByKey(pInParentName); - if (null != ppData) { - ppData.addInCount(totalSampleCount); - } - } - } - fupData.addInCount(totalSampleCount); - } - } - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RuntimeProfileDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RuntimeProfileDataMaker.java deleted file mode 100644 index a392dd5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/RuntimeProfileDataMaker.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * WooJin Jung - * Jooyoul Lee - * 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.summary.profiling; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.common.path.PathConstants; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackData; -import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit; -import org.tizen.dynamicanalyzer.util.Logger; - -public class RuntimeProfileDataMaker extends ProfileDataMaker { - - public RuntimeProfileDataMaker() { - super(Global.getRuntimeCallstackManager()); - } - - public void makeFunctionUsageProfileData(ProfileData sampleLog) { - totalSampleCount++; - List addrs = new ArrayList(); - long selfAddr = sampleLog.getPcAddr(); - int pid = sampleLog.getPid(); - int tid = sampleLog.getTid(); - long sampleTime = sampleLog.getTime(); - - CallStackData callstackData; - Map addrMap = callstackManager.getCallStackApiAddrByPidMap(pid); - - CallStackUnit callstackUnit = addrMap.get(selfAddr); - if (null == callstackUnit) { - CallStackUnit newCallstackUnit = new CallStackUnit(selfAddr, - callstackManager.getCallStackSymbol(selfAddr, pid, sampleTime), sampleLog); - addrMap.put(selfAddr, newCallstackUnit); - } - - long 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.add(selfAddr); - } else { - addrs.addAll(callstackData.getAddrs()); - for (int i = 0; i < addrs.size(); i++) { - if (addrs.get(i) == 0) { - addrs.remove(i); - } - } - addrs.add(0, selfAddr); - } - } else { - // Logger.debug("makeFunctionUsageProfileData : cannot find seq by time"); - addrs.add(selfAddr); - } - - CallStackUnit inputData = addrMap.get(selfAddr); - if (null == inputData) { - return; - } - - // drop samples of probe library - if (inputData.getPath().startsWith(PathConstants.DA_REMOTE_PROBE_PATH)) { - return; - } - - String inputPath = inputData.getPath(); - String inputFuncName = inputData.getFunctionName(); - - ProfilingData parent = getProfilingDataByKey(inputPath); - // exclusive cpu time - if (null == parent) { - parent = makeNewProfilingData(inputData, true); - checkUserCall(inputData, parent, null, sampleLog); - if (inputFuncName.equals(FunctionUsageProfiler.UNKNOWN)) { - parent.addExCount(); - } else { - ProfilingData child = makeNewProfilingData(inputData, false); - parent.addChild(child); - child.addExCount(); - child.setParent(parent.getName()); - } - } else { - if (inputFuncName.isEmpty()) { - parent.addExCount(); - } else { - ProfilingData child = getProfilingDataByKey(inputData.getSymbol()); - if (null == child) { - child = makeNewProfilingData(inputData, false); - parent.addChild(child); - child.setParent(parent.getName()); - } - child.addExCount(); - } - } - - // inclusive cpu time - int size = 0; - if (null != addrs) { - size = addrs.size(); - } - for (int i = 0; i < size; i++) { - CallStackUnit callstackCsa = addrMap.get(addrs.get(i)); - - if (callstackCsa.getFunctionName().equals(FunctionUsageProfiler.UNKNOWN)) { - ProfilingData inParent = getProfilingDataByKey(callstackCsa.getPath()); - ProfilingData pp = null; - if (null == inParent) { - inParent = makeNewProfilingData(callstackCsa, true); - checkUserCall(callstackCsa, inParent, pp, sampleLog); - } - inParent.addInCount(totalSampleCount); - - if (null != inParent.getParent()) { - String pInParentName = inParent.getParent(); - pp = getProfilingDataByKey(pInParentName); - if (null != pp) { - pp.addInCount(totalSampleCount); - } - } - } else { - ProfilingData fupData = getProfilingDataByKey(callstackCsa.getSymbol()); - if (null == fupData) { - ProfilingData inParent = getProfilingDataByKey(callstackCsa.getPath()); - if (null == inParent) { - inParent = makeNewProfilingData(callstackCsa, true); - checkUserCall(callstackCsa, inParent, null, sampleLog); - } - fupData = makeNewProfilingData(callstackCsa, false); - fupData.setParent(inParent.getName()); - - inParent.addChild(fupData); - inParent.addInCount(totalSampleCount); - if (null != inParent.getParent()) { - String pInParentName = inParent.getParent(); - ProfilingData pp = getProfilingDataByKey(pInParentName); - if (null != pp) { - pp.addInCount(totalSampleCount); - } - } - } else { - String pName = fupData.getParent(); - ProfilingData inParent = getProfilingDataByKey(pName); - if (inParent == null) { - Logger.error("ProfilingData: function item without library item"); - continue; - } - inParent.addInCount(totalSampleCount); - - if (null != inParent.getParent()) { - String pInParentName = inParent.getParent(); - ProfilingData ppData = getProfilingDataByKey(pInParentName); - if (null != ppData) { - ppData.addInCount(totalSampleCount); - } - } - } - fupData.addInCount(totalSampleCount); - } - } - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/WebProfilingTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/WebProfilingTable.java index f7133bf..341782c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/WebProfilingTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/WebProfilingTable.java @@ -41,8 +41,6 @@ import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.model.TreeInput; import org.tizen.dynamicanalyzer.nl.SummaryLabels; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.range.RangePage; import org.tizen.dynamicanalyzer.ui.summary.SummaryPage; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; @@ -68,8 +66,6 @@ public class WebProfilingTable extends DATreeComposite { AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_NUM }; - - private boolean isRange = false; public WebProfilingTable(Composite parent, int compStyle, int tableStyle) { super(parent, compStyle, tableStyle); @@ -95,9 +91,6 @@ public class WebProfilingTable extends DATreeComposite { GridItem[] items = table.getSelection(); String id = SummaryPage.profilingViewID; - if (isRange) { - id = RangePage.profilingViewID; - } DASelectionData selData = new DASelectionData(id, 0, 0, items, table); AnalyzerManager.getCurrentPage().updateView(selData); } @@ -247,22 +240,10 @@ public class WebProfilingTable extends DATreeComposite { } private List getPidsOfProfileDataMakerMap() { - if (isRange) { - return RangeDataManager.getInstance().getPidsOfWebProfileDataMakerMap(); - } else { - return FunctionUsageProfiler.getInstance().getPidsOfWebProfileDataMakerMap(); - } + return FunctionUsageProfiler.getInstance().getPidsOfWebProfileDataMakerMap(); } private WebProfileDataMaker getProfileDataMakerByPid(int pid) { - if (isRange) { - return RangeDataManager.getInstance().getWebProfileDataMakerByPid(pid); - } else { - return FunctionUsageProfiler.getInstance().getWebProfileDataMakerByPid(pid); - } - } - - public void setRangeTable(boolean isRange) { - this.isRange = isRange; + return FunctionUsageProfiler.getInstance().getWebProfileDataMakerByPid(pid); } } \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/warning/WarningTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/warning/WarningTable.java index 33edd08..6402506 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/warning/WarningTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/warning/WarningTable.java @@ -35,27 +35,21 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DASelectionData; import org.tizen.dynamicanalyzer.listeners.SummaryMouseDoubleClickListener; import org.tizen.dynamicanalyzer.model.FilterProperty; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.swap.model.data.LogDataFactory; import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.range.RangePage; import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager; import org.tizen.dynamicanalyzer.ui.summary.SummaryPage; import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; public class WarningTable extends DATableComposite { - private boolean isRange = false; - private final WarningDataMaker warningDataMaker = SummaryDataManager.getInstance().getWarningDataMaker(); @@ -73,9 +67,6 @@ public class WarningTable extends DATableComposite { long time = dataFormat.getLogData().getTime(); String id = SummaryPage.warningListViewID; - if (isRange) { - id = RangePage.warningListViewID; - } DASelectionData selData = new DASelectionData(id, time, 0, items, table); // AnalyzerManager.getCurrentPage().updateView(selData); @@ -92,53 +83,6 @@ public class WarningTable extends DATableComposite { table.addMouseListener(new SummaryMouseDoubleClickListener( SummaryPage.warningListViewID)); } - - public void setRangeTable(boolean isRange) { - this.isRange = isRange; - } - -// protected List makeTableInput() { -// List warningList = null; -// if (isRange) { -// warningList = RangeDataManager.getInstance().getWarningChecker() -// .getWarningData(); -// } else { -// warningList = AnalyzerManager.getWarningChecker().getWarningData(); -// } -// List input = new ArrayList(); -// int size = warningList.size(); -// for (int i = 0; i < size; i++) { -// // create text -// List text = new ArrayList(); -// List data = new ArrayList(); -// WarningData warningData = warningList.get(i); -// -// text.add(Long.toString(warningData.getSeq())); -// data.add(Long.toString(warningData.getSeq())); -// -// text.add(warningData.getCategory()); -// data.add(warningData.getCategory()); -// -// text.add(Integer.toString(warningData.getPid())); -// data.add(Integer.toString(warningData.getPid())); -// String message = WarningChecker.messageMaker(warningData, true); -// text.add(message); -// data.add(message); -// // create images -// -// // create DATableDataFormat -// DATableDataFormat tableData = new DATableDataFormat(warningData -// .getLogData().getSeq()); -// tableData.getData().addAll(text); -// tableData.setLogData(warningData.getLogData()); -// tableData.setType(AnalyzerConstants.TYPE_TABLE_WARNING); -// TableInput tableInput = new TableInput(); -// tableInput.setText(text); -// tableInput.setData(tableData); -// input.add(tableInput); -// } -// return input; -// } protected List makeTableInput() { List> warningData = null; @@ -248,15 +192,8 @@ public class WarningTable extends DATableComposite { } private boolean isVaildData(List idata){ - Long markerStartTime = null; - Long markerEndTime = null; - if (isRange) { - markerStartTime = Long.valueOf(RangeDataManager.getInstance().getMarkerStartTime()); - markerEndTime = Long.valueOf(RangeDataManager.getInstance().getMarkerEndTime()); - }else{ - markerStartTime = (long) 0; - markerEndTime = Toolbar.INSTANCE.getTime(); - } + Long markerStartTime = 0l; + Long markerEndTime = Toolbar.INSTANCE.getTime(); Long startTime = (Long)idata.get(WarningDataDBTable.COLUMN.START_TIME.index); Long endTime = (Long)idata.get(WarningDataDBTable.COLUMN.END_TIME.index); 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 45a7cae..f70c901 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 @@ -36,7 +36,6 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants; 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.Toolbar; @@ -98,25 +97,6 @@ public class ThreadAPIListView extends DAAdvancedViewComposite { return; } - long newAnalysisStartTime = 0; - long newAnalysisEndTime = 0; - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - newAnalysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime(); - newAnalysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime(); - } else { - newAnalysisStartTime = 0; - newAnalysisEndTime = 0; - } - - if (newAnalysisStartTime != analysisStartTime || newAnalysisEndTime != analysisEndTime) { - analysisStartTime = newAnalysisStartTime; - analysisEndTime = newAnalysisEndTime; - tableComp.updateTable(); - - return; - } - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); if (preSelectionPid != -1 && preSelectionPid != selectedPid) { tableComp.updateTable(); 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 5248f3d..4d81c02 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 @@ -55,27 +55,24 @@ public class ThreadPage extends DABaseDataPageComposite { this.setBackground(ColorResources.WHITE); this.setLayout(new FillLayout()); -// ((FillLayout) getLayout()).marginHeight = 15; -// ((FillLayout) getLayout()).marginWidth = 5; - ThreadChartView threadChartView = new ThreadChartView(topForm, SWT.NONE); addView(threadChartView); threadApiTableView = new DATabComposite(bottomLeftForm, SWT.NONE, false, true); { + threadApiTableView.setID(AnalyzerLabels.LEFT_TABLE_VIEW_ID); ThreadAPIListView threadAPIListView = new ThreadAPIListView(threadApiTableView.getContentComposite(), SWT.NONE); threadApiTableView.addView(threadAPIListView); - addView(threadAPIListView); } addView(threadApiTableView); threadDetailTableView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); { + threadDetailTableView.setID(AnalyzerLabels.RIGHT_TABLE_VIEW_ID); ThreadDetailInfoView threadDetailInfoView = new ThreadDetailInfoView( threadDetailTableView.getContentComposite(), SWT.NONE); threadDetailTableView.addView(threadDetailInfoView); - addView(threadDetailInfoView); } addView(threadDetailTableView); } 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 index 993107d..061fc00 100644 --- 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 @@ -36,11 +36,10 @@ 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.PopupRangeAnalysisMenuItemOnChartListener; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; @@ -61,7 +60,6 @@ import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip; 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 DADefaultChartBoard { private List syncChartItemList = new ArrayList(); @@ -148,21 +146,6 @@ public class SyncChartBoard extends DADefaultChartBoard { 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(final DAChart chart, boolean isParent) { @@ -187,12 +170,8 @@ public class SyncChartBoard extends DADefaultChartBoard { tooltip.setFont(FontResources.CHART_TOOLTIP_FONT); plot.setTooltip(tooltip); - DAPopupMenu popupMenu = new DAPopupMenu(chart); + DAPopupMenu popupMenu = new ChartPopupMenu(chart); popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, this, chart)); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( popupMenu, getTimeline(), ThreadPage.pageID); 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 index 7188538..8b5d0cc 100644 --- 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 @@ -36,10 +36,9 @@ 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.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; -import org.tizen.dynamicanalyzer.ui.common.PopupRangeAnalysisMenuItemOnChartListener; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimeLineChartKeyListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; @@ -149,14 +148,10 @@ public class ThreadChartBoard extends SyncChartBoard { DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1); tooltip.setFont(FontResources.CHART_TOOLTIP_FONT); plot.setTooltip(tooltip); - DAPopupMenu popupMenu = new DAPopupMenu(chart); + DAPopupMenu popupMenu = new ChartPopupMenu(chart); plot.setBackgroundImage(ImageResources.BG_GRADIENT); popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, this, chart)); - ///Add Keylistener 0215 TimeLineChartKeyListener timelineKeyListener = new TimeLineChartKeyListener(this); chart.addKeyListener(timelineKeyListener); 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/chart/ThreadChartView.java index 9297502..9518d2c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/chart/ThreadChartView.java @@ -54,7 +54,6 @@ import org.tizen.dynamicanalyzer.swap.model.data.LogDataFactory; import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.thread.ThreadPage; import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; @@ -498,32 +497,13 @@ public class ThreadChartView extends DAViewComposite { updateProcessCombo(); if (stackLayout.topControl == syncChartBoard) { updateTimeLine(syncChartBoard); - updateRange(syncChartBoard); syncChartBoard.updateChart(); } else { updateTimeLine(threadChartBoard); - updateRange(threadChartBoard); threadChartBoard.updateChart(); } } - private void updateRange(DAChartBoard chartBoard) { - 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); - } else { - ((DAChartPlotIntervalMarker) chartBoard.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) { /* * In case of Latest status, update visibleStartTime of chartBoard. @@ -615,13 +595,6 @@ public class ThreadChartView extends DAViewComposite { return 0; } - public void setRangeMarker(double starttime, double endtime) { - DAChartBoard currentChart = (DAChartBoard) stackLayout.topControl; - - ((DAChartPlotIntervalMarker) currentChart.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval(starttime, endtime); - } - @Override public void clear() { syncChartBoard.contentsClear(); 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 index 31f1f88..d9bedd3 100644 --- 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 @@ -104,7 +104,7 @@ public class SyncEventDBTable extends DBTable { addColumn(new DBColumn(COLUMN.SYNC_VALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.BLOCK_END_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.SYNC_DATA_ID.index); + addIndex(COLUMN.SYNC_DATA_ID.index); } public List> getSyncEventFromDB() { 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/db/ThreadAPIDBTable.java index ee3b15f..4e42dce 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadAPIDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadAPIDBTable.java @@ -89,7 +89,7 @@ public class ThreadAPIDBTable extends DBTable { addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_RETURN_VALUE_LENGTH)); addColumn(new DBColumn(COLUMN.ERROR_NUMBER.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.THREAD_DATA_ID.index); + addIndex(COLUMN.THREAD_DATA_ID.index); } public List> getThreadAPIFromDB() { 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/db/ThreadEventDBTable.java index b4cc8d9..6e47e4e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadEventDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/db/ThreadEventDBTable.java @@ -91,7 +91,7 @@ public class ThreadEventDBTable extends DBTable { addColumn(new DBColumn(COLUMN.THREAD_TYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(COLUMN.CALLER_ID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - setIndexColumn(COLUMN.THREAD_DATA_ID.index); + addIndex(COLUMN.THREAD_DATA_ID.index); } public List> getThreadEventFromDB() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/LifeCycleDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/LifeCycleDBTable.java index 0c1c5c5..b61f8d5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/LifeCycleDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/LifeCycleDBTable.java @@ -56,7 +56,7 @@ public class LifeCycleDBTable extends DBTable { public LifeCycleDBTable() { addColumn(new DBColumn(LIFE_CHANGE_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(LIFE_STATUS, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); - setIndexColumn(COLUMN.LIFE_CHANGE_TIME.ordinal()); + addIndex(COLUMN.LIFE_CHANGE_TIME.ordinal()); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/SystemDataDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/SystemDataDBTable.java index 5d5a042..ec8a2a8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/SystemDataDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/SystemDataDBTable.java @@ -115,7 +115,7 @@ public class SystemDataDBTable extends DBTable { addColumn(new DBColumn(PROCESS_PID_OTHER, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY)); addColumn(new DBColumn(PROCESS_LOAD_OTHER, DBConstants.EMPTY, DBConstants.FLOAT_ARRAY)); addColumn(new DBColumn(DEVICE_STATUS, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY)); - setIndexColumn(COLUMN.SAMPLING_TIME.ordinal()); + addIndex(COLUMN.SAMPLING_TIME.ordinal()); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TargetProcessDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TargetProcessDBTable.java index d92d387..ff018a7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TargetProcessDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TargetProcessDBTable.java @@ -94,7 +94,7 @@ public class TargetProcessDBTable extends DBTable { addColumn(new DBColumn(HEAP_ALLOCATION_BYTE, DBConstants.EMPTY, DBConstants.BIGINT_ARRAY)); addColumn(new DBColumn(TID, DBConstants.EMPTY, DBConstants.INTEGER_ARRAY)); addColumn(new DBColumn(THREAD_LOAD, DBConstants.EMPTY, DBConstants.FLOAT_ARRAY)); - setIndexColumn(COLUMN.SAMPLING_TIME.ordinal()); + addIndex(COLUMN.SAMPLING_TIME.ordinal()); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TimelinePage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TimelinePage.java index 3050b8d..5c20f93 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TimelinePage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TimelinePage.java @@ -36,7 +36,6 @@ import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; import org.tizen.dynamicanalyzer.ui.info.callstack.CallstackView; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotDataManager; -import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager; import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceDataManager; @@ -64,21 +63,19 @@ public class TimelinePage extends DABaseDataPageComposite { this.setData(KEY_TOOLTIP, ShortCutManager.COOLBAR_AREA_TIMELINE_TOOLTIP); this.setBackground(ColorResources.WHITE); this.setLayout(new FillLayout()); - -// ((FillLayout) getLayout()).marginHeight = 15; -// ((FillLayout) getLayout()).marginWidth = 5; timelineChartView = new TimelineChartView(topForm, SWT.NONE); addView(timelineChartView); timelineTableView = new TimelineTableView(bottomLeftForm, SWT.NONE); + timelineTableView.setID(AnalyzerLabels.LEFT_TABLE_VIEW_ID); addView(timelineTableView); DATabComposite timelineCallStackTableView = new DATabComposite(bottomRightForm, SWT.NONE, false, true); { + timelineCallStackTableView.setID(AnalyzerLabels.RIGHT_TABLE_VIEW_ID); CallstackView callstack = new CallstackView(timelineCallStackTableView.getContentComposite(), SWT.NONE); timelineCallStackTableView.addView(callstack, false); - addView(callstack); } addView(timelineCallStackTableView); } @@ -103,7 +100,6 @@ public class TimelinePage extends DABaseDataPageComposite { // clear data managers TimelineDataManager.getInstance().clear(); CallTraceDataManager.getInstance().clear(); - InteractiveDataManager.getInstance().clear(); ScreenshotDataManager.getInstance().clear(); FunctionUsageProfiler.getInstance().clear(); SummaryDataManager.getInstance().clear(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/UIEventDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/UIEventDBTable.java index a6a8a39..0c34df2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/UIEventDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/UIEventDBTable.java @@ -73,7 +73,7 @@ public class UIEventDBTable extends DBTable { addColumn(new DBColumn(POINT_Y, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); addColumn(new DBColumn(INFO_STRING, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, MAX_INFO_LEN)); addColumn(new DBColumn(INFO_INTEGER, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - setIndexColumn(COLUMN.EVENT_TIME.ordinal()); + addIndex(COLUMN.EVENT_TIME.ordinal()); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceDataManager.java index 9b7131c..1b6e250 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceDataManager.java @@ -26,12 +26,17 @@ package org.tizen.dynamicanalyzer.ui.timeline.calltrace; +import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.communicator.UnsupportedProtocolException; +import org.tizen.dynamicanalyzer.database.DBTable; +import org.tizen.dynamicanalyzer.project.LibraryObject; import org.tizen.dynamicanalyzer.project.ProcessInformation; +import org.tizen.dynamicanalyzer.project.ProcessMemoryMap; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.swap.logparser.LogPackage; import org.tizen.dynamicanalyzer.swap.logparser.Logs; @@ -39,6 +44,11 @@ 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.swap.model.data.WebProfileData; +import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit; +import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; +import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingTable; +import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; +import org.tizen.dynamicanalyzer.ui.widgets.table.DATableRegistry; import org.tizen.dynamicanalyzer.util.Logger; public class CallTraceDataManager extends PageDataManager { @@ -47,7 +57,6 @@ public class CallTraceDataManager extends PageDataManager { // native function private FunctionEntryDBTable functionEntryTable = null; - private FunctionExitDBTable functionExitTable = null; // web function private WebFunctionEntryDBTable webFunctionEntryTable = null; @@ -55,7 +64,6 @@ public class CallTraceDataManager extends PageDataManager { private CallTraceDataManager() { functionEntryTable = new FunctionEntryDBTable(); - functionExitTable = new FunctionExitDBTable(); webFunctionEntryTable = new WebFunctionEntryDBTable(); webFunctionExitTable = new WebFunctionExitDBTable(); @@ -65,10 +73,6 @@ public class CallTraceDataManager extends PageDataManager { return functionEntryTable; } - public FunctionExitDBTable getFunctionExitTable() { - return functionExitTable; - } - public WebFunctionEntryDBTable getWebFunctionEntryTable() { return webFunctionEntryTable; } @@ -93,95 +97,100 @@ public class CallTraceDataManager extends PageDataManager { private void makeNativeData(LogPackage pack) { Logs entryLogs = pack.getLogs(ProtocolConstants.MSG_FUNCTION_ENTRY); - if (null != entryLogs && entryLogs.getRawLogs().size() != 0) { + if (null != entryLogs && !entryLogs.getRawLogs().isEmpty()) { List inputs = entryLogs.getLogs(); - List> insertData = new ArrayList>(); + List> insertData = new ArrayList<>(); int size = inputs.size(); for (int i = 0; i < size; i++) { - List insertRowData = new ArrayList(); ProfileData pData = (ProfileData) inputs.get(i); // probe type 4 is for file analysis with non-target process // no need to insert into DB - try { - if (pData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_FILE) { - continue; - } - } catch (UnsupportedProtocolException e) { - // do nothing - } - - try { - insertRowData.add(new Long(pData.getSeq())); - insertRowData.add(new Integer(pData.getPid())); - insertRowData.add(new Integer(pData.getTid())); - insertRowData.add(new Integer(pData.getApiId())); - insertRowData.add(new Integer(pData.getBinaryId())); - insertRowData.add(new Long(pData.getTime())); - insertRowData.add(new Long(pData.getCallerPcAddr())); - insertRowData.add(new Long(pData.getPcAddr())); - insertRowData.add(new String(pData.getArgs())); - } catch (ArrayIndexOutOfBoundsException e) { - Logger.exception(e); + if (pData.getProbeType() == ProtocolConstants.FUNCTION_TYPE_FILE) { + continue; } - insertData.add(insertRowData); + insertData.add(createEntryRowData(pData)); // for calltrace table windowing ProcessInformation process = Global.getProject().getProcessInformation( pData.getPid()); process.addFunctionEntryLogCount(); } - if (insertData.size() > 0) { + if (!insertData.isEmpty()) { functionEntryTable.insertData(insertData); } } Logs exitLogs = pack.getLogs(ProtocolConstants.MSG_FUNCTION_EXIT); - if (null != exitLogs && exitLogs.getRawLogs().size() != 0) { + if (null != exitLogs && !exitLogs.getRawLogs().isEmpty()) { List inputs = exitLogs.getLogs(); - List> insertData = new ArrayList>(); + List> insertData = new ArrayList<>(); int size = inputs.size(); for (int i = 0; i < size; i++) { - List insertRowData = new ArrayList(); ProfileData pData = (ProfileData) inputs.get(i); - - try { - insertRowData.add(new Long(pData.getEntrySeq())); - insertRowData.add(new Long(pData.getSeq())); - insertRowData.add(new Long(pData.getTime())); - insertRowData.add(new String(pData.getReturn())); - } catch (ArrayIndexOutOfBoundsException e) { - Logger.exception(e); - } - insertData.add(insertRowData); + insertData.add(createExitRowData(pData)); } - if (insertData.size() > 0) { - functionExitTable.insertData(insertData); + if (!insertData.isEmpty()) { + functionEntryTable.insertData(insertData); } } } + private List createEntryRowData(ProfileData pData) { + List insertRowData = new ArrayList<>(); + insertRowData.add(Boolean.TRUE);// IS_ENTRY + insertRowData.add(pData.getSeq());// SEQ + insertRowData.add(pData.getPid());// PID + insertRowData.add(pData.getTid());// TID + if (pData.getApiId() >= 0) + insertRowData.add(pData.getApiId());// FunctionID + else + insertRowData.add(0);// FunctionID + insertRowData.add(pData.getBinaryId());// BinaryID + insertRowData.add(pData.getTime());// START_TIME + insertRowData.add(0L);// END_TIME + insertRowData.add(pData.getCallerPcAddr());// Caller_Address + insertRowData.add(pData.getPcAddr());// Self_Address + insertRowData.add(pData.getArgs());// ARGS + insertRowData.add("");// Return value + return insertRowData; + } + + private List createExitRowData(ProfileData pData) { + List insertRowData = new ArrayList<>(); + insertRowData.add(Boolean.FALSE);// IS_ENTRY + insertRowData.add(pData.getSeq());// SEQ + insertRowData.add(pData.getPid());// PID + insertRowData.add(pData.getTid());// TID + insertRowData.add(0);// FunctionID + insertRowData.add(0);// BinaryID + insertRowData.add(pData.getTime());// START_TIME + insertRowData.add(pData.getTime());// END_TIME + insertRowData.add(pData.getCallerPcAddr());// Caller_Address + insertRowData.add(pData.getPcAddr());// Self_Address + insertRowData.add("");// ARGS + insertRowData.add(pData.getReturn());// Return value + return insertRowData; + } + private void makeWebData(LogPackage pack) { Logs entryLogs = pack.getLogs(ProtocolConstants.MSG_WEB_FUNCTION_ENTRY); - if (null != entryLogs && entryLogs.getRawLogs().size() != 0) { + if (null != entryLogs && !entryLogs.getRawLogs().isEmpty()) { List inputs = entryLogs.getLogs(); - List> insertData = new ArrayList>(); + List> insertData = new ArrayList<>(); int size = inputs.size(); for (int i = 0; i < size; i++) { - List insertRowData = new ArrayList(); + List insertRowData = new ArrayList<>(); WebProfileData pData = (WebProfileData) inputs.get(i); - try { - insertRowData.add(new Long(pData.getSeq())); - insertRowData.add(new Integer(pData.getPid())); - insertRowData.add(new Integer(pData.getTid())); - insertRowData.add(new Integer(pData.getFunctionLineNumber())); - insertRowData.add(pData.getFunctionName()); - insertRowData.add(pData.getFunctionURL()); - insertRowData.add(new Long(pData.getTime())); - } catch (ArrayIndexOutOfBoundsException e) { - Logger.exception(e); - } + insertRowData.add(pData.getSeq()); + insertRowData.add(pData.getPid()); + insertRowData.add(pData.getTid()); + insertRowData.add(pData.getFunctionLineNumber()); + insertRowData.add(pData.getFunctionName()); + insertRowData.add(pData.getFunctionURL()); + insertRowData.add(pData.getTime()); + insertData.add(insertRowData); // for calltrace table windowing @@ -189,32 +198,252 @@ public class CallTraceDataManager extends PageDataManager { pData.getPid()); process.addFunctionEntryLogCount(); } - if (insertData.size() > 0) { + if (!insertData.isEmpty()) { webFunctionEntryTable.insertData(insertData); } } Logs exitLogs = pack.getLogs(ProtocolConstants.MSG_WEB_FUNCTION_EXIT); - if (null != exitLogs && exitLogs.getRawLogs().size() != 0) { + if (null != exitLogs && !exitLogs.getRawLogs().isEmpty()) { List inputs = exitLogs.getLogs(); - List> insertData = new ArrayList>(); + List> insertData = new ArrayList<>(); int size = inputs.size(); for (int i = 0; i < size; i++) { - List insertRowData = new ArrayList(); + List insertRowData = new ArrayList<>(); WebProfileData pData = (WebProfileData) inputs.get(i); - try { - insertRowData.add(new Long(pData.getEntrySeq())); - insertRowData.add(new Long(pData.getSeq())); - insertRowData.add(new Long(pData.getTime())); - } catch (ArrayIndexOutOfBoundsException e) { - Logger.exception(e); - } + insertRowData.add(pData.getEntrySeq()); + insertRowData.add(pData.getSeq()); + insertRowData.add(pData.getTime()); + insertData.add(insertRowData); } - if (insertData.size() > 0) { + if (!insertData.isEmpty()) { webFunctionExitTable.insertData(insertData); } } } + + /** + * Update Function Entry DB table: for each entry it finds corresponding + * exit and updates entry record with corresponding exit time. + */ + public void addCallStackIndexes() { + ArrayList threads = new ArrayList<>(); + for (int pid : Global.getProject().getProcessIDs()) { + try { + threads.add(new Thread(new FunctionEntryIndexer(functionEntryTable, pid), + "Function Entry Indexer")); + threads.get(threads.size() - 1).start(); + } catch (SQLException e) { + Logger.error("failed to connect to database: " + e); + } + } + threads.forEach(arg0 -> { + try { + arg0.join(); + } catch (InterruptedException e) { + Logger.error(e); + Thread.currentThread().interrupt(); + } + }); + final DATableComposite profiling = DATableRegistry.getTable(ProfilingTable.class.getName()); + if (profiling != null) { + Display.getDefault().syncExec(profiling::updateTable); + } + FunctionUsageProfiler.getInstance().doSaveProfilingData(); + } + + /** + * Builds callstack for specified pid, tid and time. Note: It works + * correctly only when Function Entry DB table updated with exit times for + * all entries. If specified time equals to Exit time of some function, this + * function will be added to callstack. + * + * @param pid pid + * @param tid tid + * @param time time in microseconds + * + * @return List of {@link CallStackUnit} ordered to be a call stack, where + * last function control entered in is on the top. + */ + public List getCallstackForSampling(Integer pid, Integer tid, Long time) { + return getCallStack(pid, tid, time, true); + } + + /** + * Builds callstack for specified pid, tid and time. Note: It works + * correctly only when Function Entry DB table updated with exit times for + * all entries. If specified time equals to Exit time of some function, this + * function will not be added to callstack. + * + * @param pid pid + * @param tid tid + * @param time time in microseconds + * + * @return List of {@link CallStackUnit} ordered to be a call stack, where + * last function control entered in is on the top. + */ + public List getCallstackForTable(Integer pid, Integer tid, Long time) { + return getCallStack(pid, tid, time, false); + } + + /** + * Builds callstack for specified pid, tid and time. + * Note: It works correctly only when Function Entry DB table updated + * with exit times for all entries. + * + * @param pid pid + * @param tid tid + * @param time time in microseconds + * @param calledforExit indicate whether we should add function if its exit + * time equals to specified or not + * + * @return List of {@link CallStackUnit} ordered to be a call stack, where + * last function control entered in is on the top. + */ + private List getCallStack(Integer pid, Integer tid, Long time, + boolean calledforExit) { + String where = DBTable.WHERE + FunctionEntryDBTable.COLUMN.START_TIME.name + "<=" + time + + DBTable.AND + "(" + FunctionEntryDBTable.COLUMN.END_TIME.name + + (calledforExit ? ">=" : '>') + time + + DBTable.OR + FunctionEntryDBTable.COLUMN.END_TIME.name + "=0" + + ')' + DBTable.AND + FunctionEntryDBTable.COLUMN.IS_ENTRY.name + DBTable.AND + + FunctionEntryDBTable.COLUMN.PID.name + '=' + pid + DBTable.AND + + FunctionEntryDBTable.COLUMN.TID.name + '=' + tid + + DBTable.ORDER_BY + FunctionEntryDBTable.COLUMN.START_TIME.name + DBTable.DESC; + List> list = functionEntryTable.selectAllColumnData(where); + if (list == null || list.isEmpty()) + return Collections.emptyList(); + List res = new ArrayList<>(); + ProcessMemoryMap memMap = Global.getProject().getProcessInformation(pid) + .getProcessMemoryMap(time); + CallStackUnit unknown = new CallStackUnit(); + for (int i = 0; i < list.size(); i++) { + List buf = list.get(i); + long address = (long) buf.get(FunctionEntryDBTable.COLUMN.START_PC_ADDRESS.index); + long callerAddress = (long) buf + .get(FunctionEntryDBTable.COLUMN.CALLER_PC_ADDRESS.index); + int dbpid = (int) buf.get(FunctionEntryDBTable.COLUMN.PID.index); + int dbtid = (int) buf.get(FunctionEntryDBTable.COLUMN.TID.index); + long dbtime = (long) buf.get(FunctionEntryDBTable.COLUMN.START_TIME.index); + int functionID = (int) buf.get(FunctionEntryDBTable.COLUMN.FUNCTION_ID.index); + int binaryID = (int) buf.get(FunctionEntryDBTable.COLUMN.BINARY_ID.index); + String functionName = Global.getFunctionName(functionID); + String path = Global.getLibraryName(binaryID); + CallStackUnit api = new CallStackUnit(address, callerAddress, dbpid, dbtid, dbtime, + functionID, binaryID, functionName, path); + res.add(api); + if (i < list.size() - 1 && calledFromUnknown(callerAddress, memMap, list.get(i + 1))) + res.add(unknown); + } + return res; + } + + /** + * Check whether current caller address doesn't belong to library that is + * specified as next in call stack. + * + * @param callerAddress caller address of current {@link CallStackUnit} + * @param memMap {@link ProcessMemoryMap} actual for call stack creating + * time. + * @param list database representation of next call stack unit + * + * @return {@code true} if next callStack unit does not call current. + */ + private boolean calledFromUnknown(long callerAddress, ProcessMemoryMap memMap, + List list) { + LibraryObject lib = memMap.getLibraryByAddress(callerAddress); + // called from library that is not mapped. + if (lib == null) + return true; + // called from not profiled library + if (lib.getBinaryID() != (Integer) list.get(FunctionEntryDBTable.COLUMN.BINARY_ID.index)) + return true; + return false; + } + + /** + * Select entries with specified function id, + * + * @return list of records from db table. + */ + public List> getCallTrace() { + String where = DBTable.WHERE + FunctionEntryDBTable.COLUMN.IS_ENTRY.name + DBTable.AND + + FunctionEntryDBTable.COLUMN.FUNCTION_ID + ">" + 0 + DBTable.ORDER_BY + + FunctionEntryDBTable.COLUMN.START_TIME.name; + return functionEntryTable.selectAllColumnData(where); + } + + /** + * Return last entry performed in thread for specified time. + * + * @param pid pid + * @param tid tid + * @param time time in microseconds + * + * @return {@link CallStackUnit} representing last performed entry. + */ + public CallStackUnit getLastEntry(Integer pid, Integer tid, Long time) { + String where = DBTable.WHERE + FunctionEntryDBTable.COLUMN.START_TIME.name + "<=" + + time + DBTable.AND + FunctionEntryDBTable.COLUMN.IS_ENTRY.name + DBTable.AND + + FunctionEntryDBTable.COLUMN.PID.name + "=" + pid + DBTable.AND + + FunctionEntryDBTable.COLUMN.TID.name + "=" + tid + + DBTable.ORDER_BY + FunctionEntryDBTable.COLUMN.START_TIME.name + DBTable.DESC + + " limit 1"; + List> list = functionEntryTable.selectAllColumnData(where); + if (list == null || list.isEmpty()) { + return null; + } + long address = (long) list.get(0).get(FunctionEntryDBTable.COLUMN.START_PC_ADDRESS.index); + long callerAddress = (long) list.get(0).get( + FunctionEntryDBTable.COLUMN.CALLER_PC_ADDRESS.index); + int dbpid = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.PID.index); + int dbtid = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.TID.index); + long dbtime = (long) list.get(0).get(FunctionEntryDBTable.COLUMN.START_TIME.index); + int functionID = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.FUNCTION_ID.index); + int binaryID = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.BINARY_ID.index); + String functionName = Global.getFunctionName(functionID); + String path = Global.getLibraryName(binaryID); + return new CallStackUnit(address, callerAddress, dbpid, dbtid, dbtime, functionID, binaryID, + functionName, path); + } + + /** + * Return last entry performed in thread for specified time in specified + * function. + * + * @param pid pid + * @param tid tid + * @param time time in microseconds + * @param functionID function id + * + * @return {@link CallStackUnit} representing last performed entry in + * specified function performed before specified time. + */ + public CallStackUnit getLastEntryInFunction(int pid, int tid, long time, int functionID) { + String where = DBTable.WHERE + FunctionEntryDBTable.COLUMN.START_TIME.name + "<=" + time + + DBTable.AND + FunctionEntryDBTable.COLUMN.IS_ENTRY.name + DBTable.AND + + FunctionEntryDBTable.COLUMN.PID.name + "=" + pid + DBTable.AND + + FunctionEntryDBTable.COLUMN.TID.name + "=" + tid + DBTable.AND + + FunctionEntryDBTable.COLUMN.FUNCTION_ID.name + "=" + functionID + DBTable.ORDER_BY + + FunctionEntryDBTable.COLUMN.START_TIME.name + DBTable.DESC + " limit 1"; + List> list = functionEntryTable.selectAllColumnData(where); + if (list == null || list.isEmpty()) { + return null; + } + + long address = (long) list.get(0).get(FunctionEntryDBTable.COLUMN.START_PC_ADDRESS.index); + long callerAddress = (long) list.get(0).get( + FunctionEntryDBTable.COLUMN.CALLER_PC_ADDRESS.index); + int epid = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.PID.index); + int etid = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.TID.index); + long etime = (long) list.get(0).get(FunctionEntryDBTable.COLUMN.START_TIME.index); + int efunctionID = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.FUNCTION_ID.index); + int binaryID = (int) list.get(0).get(FunctionEntryDBTable.COLUMN.BINARY_ID.index); + String functionName = Global.getFunctionName(functionID); + String path = Global.getLibraryName(binaryID); + return new CallStackUnit(address, callerAddress, epid, etid, etime, + efunctionID, binaryID, functionName, path); + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceTable.java index bd97c71..e931981 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceTable.java @@ -44,7 +44,6 @@ import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.nl.TimelinePageLabels; import org.tizen.dynamicanalyzer.project.BinaryInfo; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; @@ -137,7 +136,7 @@ public class CallTraceTable extends DATableComposite { int size = queriedData.size(); for (int i = 0; i < size; i++) { List rowData = queriedData.get(i); - List text = new ArrayList(); + List text = new ArrayList<>(); long time = (Long) rowData.get(FunctionEntryDBTable.COLUMN.START_TIME.index); String strTime = Formatter.toTimeFormat(time); @@ -165,14 +164,6 @@ public class CallTraceTable extends DATableComposite { tableInput.setText(text); tableInput.setData(tableData); input.add(tableInput); - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long analysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime(); - long analysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime(); - if (time >= analysisStartTime && time <= analysisEndTime) { - tableInput.setInRange(true); - } - } } return input; } @@ -184,7 +175,7 @@ public class CallTraceTable extends DATableComposite { * null if there is no required data in the DB */ private List> getFunctionEntryData() { - return CallTraceDataManager.getInstance().getFunctionEntryTable().selectAllObjectData(); + return CallTraceDataManager.getInstance().getCallTrace(); } /** 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 b8871be..d54ba4e 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 @@ -41,8 +41,9 @@ import org.tizen.dynamicanalyzer.util.Logger; public class FunctionEntryDBTable extends DBTable { public static final String TABLENAME="FUNCTION_ENTRY"; + public static final int FUNCTION_RETURN_VALUE_LENGTH = 1024; // for range analysis - private static final String SELECT_COLUMN = + private static final String SELECT_ENTRY_COLUMN = COLUMN.SEQUENCE_NUMBER.name + CommonConstants.COMMA + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name + CommonConstants.COMMA + @@ -51,12 +52,24 @@ public class FunctionEntryDBTable extends DBTable { COLUMN.START_TIME.name + CommonConstants.COMMA + COLUMN.CALLER_PC_ADDRESS.name + CommonConstants.COMMA + COLUMN.START_PC_ADDRESS.name; - public static final String SELECT_QUERY = - "select " + SELECT_COLUMN + " from " + TABLENAME + - " where " + COLUMN.START_TIME.name + " between %s and %s"; + private static final String SELECT_EXIT_COLUMN = + COLUMN.SEQUENCE_NUMBER.name + CommonConstants.COMMA + + COLUMN.PID.name + CommonConstants.COMMA + + COLUMN.TID.name + CommonConstants.COMMA + + COLUMN.END_TIME.name + CommonConstants.COMMA + + COLUMN.CALLER_PC_ADDRESS.name + CommonConstants.COMMA + + COLUMN.START_PC_ADDRESS.name; + public static final String SELECT_ENTRY_QUERY = + SELECT + SELECT_ENTRY_COLUMN + FROM + TABLENAME + + " where " + COLUMN.IS_ENTRY.name + " and " + COLUMN.START_TIME.name + + " between %s and %s"; + public static final String SELECT_EXIT_QUERY = + SELECT + SELECT_EXIT_COLUMN + FROM + TABLENAME + + " where not " + COLUMN.IS_ENTRY.name + " and " + COLUMN.END_TIME.name + + " between %s and %s"; // to make callstack for sample, probe public static final String USERCALLSTACK_QUERY = - "select " + COLUMN.SEQUENCE_NUMBER.name + " from " + TABLENAME + + SELECT + COLUMN.SEQUENCE_NUMBER.name + FROM + TABLENAME + " where " + COLUMN.START_TIME.name + " = (select max( " + COLUMN.START_TIME.name + ") from " + TABLENAME + " where " + COLUMN.START_TIME.name + " <= %s )"; // to get function entry time concerning sequence number @@ -65,16 +78,19 @@ public class FunctionEntryDBTable extends DBTable { " where " + COLUMN.FUNCTION_ID.name + " = %s and " + COLUMN.SEQUENCE_NUMBER.name + " < %s"; public enum COLUMN { - SEQUENCE_NUMBER(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER), - PID(1, DBConstants.DBCOLUMN_PID), - TID(2, DBConstants.DBCOLUMN_TID), - FUNCTION_ID(3, DBConstants.DBCOLUMN_FUNCTION_ID), - BINARY_ID(4, "BINARY_ID"), - START_TIME(5, DBConstants.DBCOLUMN_START_TIME), - CALLER_PC_ADDRESS(6, DBConstants.DBCOLUMN_CALLER_PC_ADDRESS), - START_PC_ADDRESS(7, "START_PC_ADDRESS"), - ARGUMENT(8, DBConstants.DBCOLUMN_ARGUMENT); - + IS_ENTRY(0, DBConstants.DBCOLUMN_IS_ENTRY), + SEQUENCE_NUMBER(1, DBConstants.DBCOLUMN_SEQUENCE_NUMBER), + PID(2, DBConstants.DBCOLUMN_PID), + TID(3, DBConstants.DBCOLUMN_TID), + FUNCTION_ID(4, DBConstants.DBCOLUMN_FUNCTION_ID), + BINARY_ID(5, "BINARY_ID"), + START_TIME(6, DBConstants.DBCOLUMN_START_TIME), + END_TIME(7, DBConstants.DBCOLUMN_END_TIME), + CALLER_PC_ADDRESS(8, DBConstants.DBCOLUMN_CALLER_PC_ADDRESS), + START_PC_ADDRESS(9, DBConstants.DBCOLUMN_START_PC_ADDRESS), + ARGUMENT(10, DBConstants.DBCOLUMN_ARGUMENT), + RETURN_VALUE(11, DBConstants.DBCOLUMN_RETURN_VALUE); + public final int index; public final String name; @@ -90,23 +106,21 @@ public class FunctionEntryDBTable extends DBTable { } public FunctionEntryDBTable() { + addColumn(new DBColumn(COLUMN.IS_ENTRY.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_BOOLEAN)); addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG)); 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.FUNCTION_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.BINARY_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4)); - addColumn(new DBColumn(COLUMN.START_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); + addColumn(new DBColumn(COLUMN.FUNCTION_ID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); + addColumn(new DBColumn(COLUMN.BINARY_ID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4)); + addColumn(new DBColumn(COLUMN.START_TIME.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG)); + addColumn(new DBColumn(COLUMN.END_TIME.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.CALLER_PC_ADDRESS.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.START_PC_ADDRESS.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, - DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH)); - setIndexColumn(COLUMN.START_TIME.index); + addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH)); + addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR, FUNCTION_RETURN_VALUE_LENGTH)); + addIndex(COLUMN.START_TIME.index); } - public List> getFunctionEntryFromDB() { - return selectAllColumnData(null); - } - @Override public boolean prepare(PreparedStatement prep, List rowData) { boolean isPrepared = true; @@ -116,19 +130,22 @@ public class FunctionEntryDBTable extends DBTable { isPrepared = false; } else { try { + prep.setBoolean(COLUMN.IS_ENTRY.index+1, (Boolean)(rowData.get(COLUMN.IS_ENTRY.index))); prep.setLong(COLUMN.SEQUENCE_NUMBER.index + 1, (Long) (rowData.get(COLUMN.SEQUENCE_NUMBER.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.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index))); prep.setInt(COLUMN.FUNCTION_ID.index + 1, (Integer) (rowData.get(COLUMN.FUNCTION_ID.index))); prep.setInt(COLUMN.BINARY_ID.index + 1, (Integer) (rowData.get(COLUMN.BINARY_ID.index))); prep.setLong(COLUMN.START_TIME.index + 1, (Long) (rowData.get(COLUMN.START_TIME.index))); + prep.setLong(COLUMN.END_TIME.index + 1, (Long) (rowData.get(COLUMN.END_TIME.index))); prep.setLong(COLUMN.CALLER_PC_ADDRESS.index + 1, (Long) (rowData.get(COLUMN.CALLER_PC_ADDRESS.index))); prep.setLong(COLUMN.START_PC_ADDRESS.index + 1, (Long) (rowData.get(COLUMN.START_PC_ADDRESS.index))); - String argumentStr = clipString((String) (rowData.get(COLUMN.ARGUMENT.index)), DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQUENCE_NUMBER.index).toString()); prep.setString(COLUMN.ARGUMENT.index + 1, argumentStr); - + String retStr = clipString((String) (rowData.get(COLUMN.RETURN_VALUE.index)), + FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQUENCE_NUMBER.index).toString()); + prep.setString(COLUMN.RETURN_VALUE.index + 1, retStr); } catch (SQLException e) { Logger.exception(e); isPrepared = false; @@ -142,15 +159,18 @@ public class FunctionEntryDBTable extends DBTable { public List extractDataFromResultSet(ResultSet rs) { List row = new ArrayList(); try { - row.add(Long.valueOf(rs.getLong(1))); - row.add(Integer.valueOf(rs.getInt(2))); - row.add(Integer.valueOf(rs.getInt(3))); - row.add(Integer.valueOf(rs.getInt(4))); - row.add(Integer.valueOf(rs.getInt(5))); - row.add(Long.valueOf(rs.getLong(6))); - row.add(Long.valueOf(rs.getLong(7))); - row.add(Long.valueOf(rs.getLong(8))); - row.add(rs.getString(9)); + row.add(Boolean.valueOf(rs.getBoolean(1)));// IS_ENTRY + row.add(Long.valueOf(rs.getLong(2)));// SEQ + row.add(Integer.valueOf(rs.getInt(3)));// PID + row.add(Integer.valueOf(rs.getInt(4)));// TID + row.add(Integer.valueOf(rs.getInt(5)));// FUNCTION_ID + row.add(Integer.valueOf(rs.getInt(6)));// BINARY_ID + row.add(Long.valueOf(rs.getLong(7)));// START_TIME + row.add(Long.valueOf(rs.getLong(8)));// END_TIME + row.add(Long.valueOf(rs.getLong(9)));// CALLER_PC_ADDRESS + row.add(Long.valueOf(rs.getLong(10)));// START_PC_ADDRESS + row.add(rs.getString(11));// ARGUMENT + row.add(rs.getString(12));// RETURN_VALUE } catch (SQLException e) { Logger.exception(e); return null; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryIndexer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryIndexer.java new file mode 100644 index 0000000..9c599bf --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryIndexer.java @@ -0,0 +1,171 @@ +package org.tizen.dynamicanalyzer.ui.timeline.calltrace; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.HashMap; +import java.util.List; + +import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.database.DBTable; +import org.tizen.dynamicanalyzer.database.SqlConnectionManager; +import org.tizen.dynamicanalyzer.util.Logger; + +/** + * This class is launched when tracing process is stopped. It updates data in + * FUNCTION_ENTRY db table with corresponding exit time. + * + * @author p.privalov@partner.samsung.com + * + */ +public class FunctionEntryIndexer implements Runnable { + + /** + * FUNCTION_ENTRY db table + */ + FunctionEntryDBTable dbTable; + + /** + * Map that is filled in analyzing process, that holds actual callstack for + * each pid in any moment. + */ + HashMap> callstackByTid = new HashMap<>(); + + /** + * PID of process which entries and exits are indexed. + */ + final int pid; + + /** + * Statement used to execute batched updates. + */ + Statement statement; + + /** + * Time step in microseconds. Determine chunk of the trace to be updated. + * used to limit memory consumption. + */ + static final long TIMESTEP = 200000; + + /** + * Public constructor. + * + * @param dbTable {@link FunctionEntryDBTable} to work with table directly. + * @param pid PID of process which entries and exits are indexed. + * + * @throws SQLException if it is failed to connect to database. + */ + public FunctionEntryIndexer(FunctionEntryDBTable dbTable, int pid) throws SQLException { + this.dbTable = dbTable; + this.pid = pid; + // conn will be closed with statement + Connection conn = SqlConnectionManager.getUpdateConnection(); //NOSONAR + conn.setAutoCommit(true); + statement = conn.createStatement(); + } + + @Override + public void run() { + Logger.debug("Indexing begins"); + long totalTime = Global.getProject().getTotalStopTime(); + FunctionProfilingDataUpdater functionProfilingDataUpdater = new FunctionProfilingDataUpdater( + dbTable, pid); + long time = 0; + while(time list) { + int tid = (int) list.get(FunctionEntryDBTable.COLUMN.TID.index); + Deque callstack = callstackByTid.get(tid); + if (callstack == null) { + callstack = new ArrayDeque<>(); + callstackByTid.put(tid, callstack); + } + callstack.push((Long) list.get(FunctionEntryDBTable.COLUMN.START_TIME.index)); + } + + /** + * Exception to indicate Entry without corresponding exit. + */ + static final class ExitWithoutEntryException extends Exception { + private static final long serialVersionUID = -8929551670368096651L; + public ExitWithoutEntryException(String string) { + super(string); + } + } + + /** + * Remove record from callstack and create update query to update + * corresponding record in DB table. Performed for Exits. + * + * @param list list of objects, represents record from DB table + * @return String that represents db update query, that should be added to + * batch. + * @throws ExitWithoutEntryException if failed to found corresponding ENTRY + */ + private String updateEntryWithCorrespondingExitTimeAndRemoveFromMap(List list) + throws ExitWithoutEntryException { + int tid = (int) list.get(FunctionEntryDBTable.COLUMN.TID.index); + Deque callstack = callstackByTid.get(tid); + if (callstack == null || callstack.isEmpty()) { + throw new ExitWithoutEntryException( + "exit without entry " + list.get(FunctionEntryDBTable.COLUMN.END_TIME.index)); + } + Long entryTime = callstack.pop(); + return DBTable.UPDATE + dbTable.getTableName() + " set " + + FunctionEntryDBTable.COLUMN.END_TIME.name + " = " + + list.get(FunctionEntryDBTable.COLUMN.END_TIME.index) + DBTable.WHERE + + FunctionEntryDBTable.COLUMN.START_TIME.name + " = " + entryTime + DBTable.AND + + FunctionEntryDBTable.COLUMN.TID.name + "=" + tid; + + } + + /** + * Create callstack and update DB records for records with START_TIME value + * in interval from {@code time} to {@code time + TIMESTEP}. + * + * @param time specified time. + */ + private void updateFunctionEntryTable(long time) { + String where = DBTable.WHERE + FunctionEntryDBTable.COLUMN.START_TIME.name + ">" + time + + DBTable.AND + FunctionEntryDBTable.COLUMN.START_TIME.name + "<=" + + (time + TIMESTEP) + DBTable.ORDER_BY + + FunctionEntryDBTable.COLUMN.START_TIME.name; + + for (List list : dbTable.selectAllColumnData(where)) { + if ((Boolean) (list.get(FunctionEntryDBTable.COLUMN.IS_ENTRY.index))) { + putEntryToMap(list); + } else { + try { + statement.addBatch(updateEntryWithCorrespondingExitTimeAndRemoveFromMap(list)); + } catch (SQLException | ExitWithoutEntryException e) { + Logger.error("Failed to add update query:" + e); + } + } + } + try { + statement.executeBatch(); + statement.clearBatch(); + } catch (SQLException e) { + Logger.error("Failed to connect to database or to perform update: " + e); + } + } +} 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 deleted file mode 100644 index 1dd7244..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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.timeline.calltrace; - -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.util.Logger; - -public class FunctionExitDBTable extends DBTable { - private static final String TABLENAME="FUNCTION_EXIT"; - public static final int FUNCTION_RETURN_VALUE_LENGTH = 1024; - // for range analysis - private static final String SELECT_COLUMN = - COLUMN.EXIT_SEQUENCE_NUMBER.name + CommonConstants.COMMA + - FunctionEntryDBTable.COLUMN.PID.name + CommonConstants.COMMA + - FunctionEntryDBTable.COLUMN.TID.name + CommonConstants.COMMA + - FunctionEntryDBTable.COLUMN.FUNCTION_ID.name + CommonConstants.COMMA + - FunctionEntryDBTable.COLUMN.BINARY_ID.name + CommonConstants.COMMA + - COLUMN.END_TIME.name + CommonConstants.COMMA + - FunctionEntryDBTable.COLUMN.CALLER_PC_ADDRESS.name + CommonConstants.COMMA + - FunctionEntryDBTable.COLUMN.START_PC_ADDRESS.name; - - public static final String SELECT_QUERY = - "select " + SELECT_COLUMN + " from " + TABLENAME + - CommonConstants.COMMA + FunctionEntryDBTable.TABLENAME + " where " + - COLUMN.ENTRY_SEQUENCE_NUMBER.name + CommonConstants.EQUAL + FunctionEntryDBTable.COLUMN.SEQUENCE_NUMBER.name + - " and " + COLUMN.END_TIME.name + " between %s and %s"; - // to make callstack for sample, probe - public static final String USERCALLSTACK_QUERY = - "select " + COLUMN.EXIT_SEQUENCE_NUMBER.name + " from " + TABLENAME + - " where " + COLUMN.END_TIME.name + " = (select max( " + COLUMN.END_TIME.name + - ") from " + TABLENAME + " where " + COLUMN.END_TIME.name + " <= %s )"; - - public enum COLUMN { - ENTRY_SEQUENCE_NUMBER(0, "ENTRY_SEQUENCE_NUMBER"), - EXIT_SEQUENCE_NUMBER(1, "EXIT_SEQUENCE_NUMBER"), - END_TIME(2, DBConstants.DBCOLUMN_END_TIME), - RETURN_VALUE(3, DBConstants.DBCOLUMN_RETURN_VALUE); - - 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 FunctionExitDBTable() { - addColumn(new DBColumn(COLUMN.ENTRY_SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(COLUMN.EXIT_SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(COLUMN.END_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY, - DBConstants.DBTYPE_VARCHAR, FUNCTION_RETURN_VALUE_LENGTH)); - setIndexColumn(COLUMN.END_TIME.index); - } - - public List> getFunctionExitFromDB() { - 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.ENTRY_SEQUENCE_NUMBER.index + 1, (Long) (rowData.get(COLUMN.ENTRY_SEQUENCE_NUMBER.index))); - prep.setLong(COLUMN.EXIT_SEQUENCE_NUMBER.index + 1, (Long) (rowData.get(COLUMN.EXIT_SEQUENCE_NUMBER.index))); - prep.setLong(COLUMN.END_TIME.index + 1, (Long) (rowData.get(COLUMN.END_TIME.index))); - - String retStr = clipString((String) (rowData.get(COLUMN.RETURN_VALUE.index)), - FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.EXIT_SEQUENCE_NUMBER.index).toString()); - prep.setString(COLUMN.RETURN_VALUE.index + 1, retStr); - } catch (SQLException e) { - Logger.exception(e); - isPrepared = false; - } - } - - return isPrepared; - } - - @Override - public List extractDataFromResultSet(ResultSet rs) { - List row = new ArrayList(); - try { - row.add(Long.valueOf(rs.getLong(1))); - row.add(Long.valueOf(rs.getLong(2))); - row.add(Long.valueOf(rs.getLong(3))); - row.add(rs.getString(4)); - } catch (SQLException e) { - Logger.exception(e); - return null; - } - - return row; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionProfilingDataUpdater.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionProfilingDataUpdater.java new file mode 100644 index 0000000..b5a4791 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionProfilingDataUpdater.java @@ -0,0 +1,125 @@ +package org.tizen.dynamicanalyzer.ui.timeline.calltrace; + +import java.util.ArrayList; +import java.util.List; + +import org.tizen.dynamicanalyzer.database.DBTable; +import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionSampleDBTable; +import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; +import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker; + +/** + * This class contains methods used to update FunctionProfiling data when + * tracing process is stopped and callstack data has been updated. It calls + * {@code ProfileDataMaker.finalizeFunctionUsageProfileData()} and + * {@code ProfileDataMaker.finalizeFUPDataForCallTrace()} of the corresponding + * {@link ProfileDataMaker} + * + * @author p.privalov@partner.samsung.com + * + */ +public class FunctionProfilingDataUpdater { + + /** + * FUNCTION_ENTRY db table, that was previously updated(partially) by + * {@link FunctionEntryIndexer} + */ + FunctionEntryDBTable updatedFunctionEntryDBTable; + /** + * PID of process which entries and exits were indexed. + */ + final int pid; + + /** + * FUNCTION_SAMPLE db table + */ + FunctionSampleDBTable sampleTable; + /** + * Data from FUNCTION_SAMPLE db table + */ + List> samplingDBTableData = new ArrayList<>(); + /** + * Lowest time in sampling db table + */ + long lowestSamplingTime; + + /** + * Corresponding to specified {@code pid} {@link ProfileDataMaker}. + */ + ProfileDataMaker dataMaker; + + /** + * Public constructor. + * + * @param dbTable FUNCTION_ENTRY db table, that was previously + * updated(partially) by {@link FunctionEntryIndexer} + * @param pid PID of process which entries and exits were indexed. + */ + protected FunctionProfilingDataUpdater(FunctionEntryDBTable dbTable, int pid) { + this.updatedFunctionEntryDBTable = dbTable; + this.pid = pid; + sampleTable = FunctionUsageProfiler.getInstance().getFunctionSampleTable(); + this.dataMaker = FunctionUsageProfiler.getInstance().getProfileDataMakerByPid(pid); + samplingDBTableData = sampleTable.selectAllColumnData( + DBTable.ORDER_BY + FunctionSampleDBTable.COLUMN.SAMPLE_TIME.name + DBTable.DESC); + updateLowestSamplingTime(); + } + + /** + * Updates function profiling table with data dependent from callstack. This + * method is used to count inclusive CPU time and rate for each + * function and elapsed time. It works over chunk of data base with records + * which START_TIME or SAMPLE_TIME value is in range from {@code startTime} + * to {@code startTime + FunctionEntryIndexer.TIMESTEP}. + * + * @param startTime specified start time. + */ + void updateProfilingInfo(long startTime) { + + String where = DBTable.WHERE + FunctionEntryDBTable.COLUMN.START_TIME.name + ">" + startTime + + DBTable.AND + FunctionEntryDBTable.COLUMN.START_TIME.name + "<=" + + (startTime + FunctionEntryIndexer.TIMESTEP) + DBTable.ORDER_BY + + FunctionEntryDBTable.COLUMN.START_TIME.name; + + String samplingWhere = DBTable.WHERE + FunctionSampleDBTable.COLUMN.PID.name + "=" + pid + + DBTable.AND + FunctionSampleDBTable.COLUMN.SAMPLE_TIME.name + ">" + startTime + + DBTable.AND + FunctionSampleDBTable.COLUMN.SAMPLE_TIME.name + "<=" + + (startTime + FunctionEntryIndexer.TIMESTEP) + DBTable.ORDER_BY + + FunctionSampleDBTable.COLUMN.SAMPLE_TIME.name + DBTable.DESC; + samplingDBTableData.addAll(0, sampleTable.selectAllColumnData(samplingWhere)); + updateLowestSamplingTime(); + for (List list : updatedFunctionEntryDBTable.selectAllColumnData(where)) { + long time = (long) list.get(FunctionEntryDBTable.COLUMN.START_TIME.index); + updateRates(time); + dataMaker.finalizeFUPDataForCallTrace(list); + } + } + + /** + * Perform {@code ProfileDataMaker.finalizeFunctionUsageProfileData()} for + * db records from FUNCTION_SAMPLE db table which SAMPLE_TIME is less then + * specified {@code time}. Processed records are removed from + * {@code samplingDBTableData} and {@code lowestSamplingTime} is updated. Thus + * the function processes sampling events on intervals from each next + * lowestSamplingTime till given {@code time}. + * + * @param time specified time + */ + void updateRates(long time) { + while (!samplingDBTableData.isEmpty() && lowestSamplingTime < time) { + List dbrecord = samplingDBTableData.remove(samplingDBTableData.size() - 1); + dataMaker.finalizeFunctionUsageProfileData(dbrecord); + updateLowestSamplingTime(); + } + } + + /** + * Update {@code lowestSamplingTime} field with the lowest sampling time + * value among records of {@code samplingDBTableData}. + */ + private void updateLowestSamplingTime() { + if (!samplingDBTableData.isEmpty()) + lowestSamplingTime = (long) samplingDBTableData.get(samplingDBTableData.size() - 1) + .get(FunctionSampleDBTable.COLUMN.SAMPLE_TIME.index); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebCallTraceTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebCallTraceTable.java index 4321b40..ac81984 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebCallTraceTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebCallTraceTable.java @@ -34,7 +34,6 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.nl.TimelinePageLabels; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.utils.Formatter; @@ -116,16 +115,6 @@ public class WebCallTraceTable extends DATableComposite { tableInput.setText(contentText); tableInput.setData(tableData); input.add(tableInput); - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long analysisStartTime = RangeDataManager.getInstance() - .getAnalysisStartTime(); - long analysisEndTime = RangeDataManager.getInstance() - .getAnalysisEndTime(); - if (time >= analysisStartTime && time <= analysisEndTime) { - tableInput.setInRange(true); - } - } } return input; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionEntryDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionEntryDBTable.java index d7f93dc..18c5de5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionEntryDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionEntryDBTable.java @@ -83,7 +83,7 @@ public class WebFunctionEntryDBTable extends DBTable { addColumn(new DBColumn(COLUMN.FUNCTION_URL.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, DALimit.FILEPATH_LENGTH)); addColumn(new DBColumn(COLUMN.START_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.START_TIME.index); + addIndex(COLUMN.START_TIME.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionExitDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionExitDBTable.java index 5fd72ea..df8bf4b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionExitDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/WebFunctionExitDBTable.java @@ -83,7 +83,7 @@ public class WebFunctionExitDBTable extends DBTable { addColumn(new DBColumn(COLUMN.ENTRY_SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.EXIT_SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG)); addColumn(new DBColumn(COLUMN.END_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); - setIndexColumn(COLUMN.END_TIME.index); + addIndex(COLUMN.END_TIME.index); } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/CPUChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/CPUChart.java index c5fb84c..39e569a 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/CPUChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/CPUChart.java @@ -42,6 +42,7 @@ import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; import org.tizen.dynamicanalyzer.ui.timeline.SystemDataDBTable; @@ -167,8 +168,7 @@ public class CPUChart extends TimelineChart { processChartPlot.setShowAxis(true); processChartPlot.setMarkers(chartBoard.getMarkers()); - DAPopupMenu processChartPopupMenu = new DAPopupMenu(processesChart); - initPopupMenu(chartBoard, processChartPopupMenu); + DAPopupMenu processChartPopupMenu = new ChartPopupMenu(processesChart); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( processChartPopupMenu, chartBoard.getTimeline(), pageID); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/EnergyChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/EnergyChart.java index 1ab0171..9d3b401 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/EnergyChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/EnergyChart.java @@ -37,6 +37,7 @@ import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; import org.tizen.dynamicanalyzer.ui.timeline.SystemDataDBTable; @@ -101,8 +102,7 @@ public class EnergyChart extends TimelineChart { appUsageChartPlot.setShowAxis(true); appUsageChartPlot.setMarkers(board.getMarkers()); - DAPopupMenu appUsageChartPopupMenu = new DAPopupMenu(appUsageChart); - initPopupMenu(board, appUsageChartPopupMenu); + DAPopupMenu appUsageChartPopupMenu = new ChartPopupMenu(appUsageChart); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( appUsageChartPopupMenu, board.getTimeline(), pageID); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/HeapChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/HeapChart.java index 1c845fa..94313ed 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/HeapChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/HeapChart.java @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.NavigableMap; import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; @@ -47,6 +48,7 @@ import org.tizen.dynamicanalyzer.resources.ColorResources; 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.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; import org.tizen.dynamicanalyzer.ui.timeline.TargetProcessDBTable; @@ -61,7 +63,6 @@ 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; public class HeapChart extends TimelineChart { private List librarySequenceList = new ArrayList(); @@ -110,11 +111,11 @@ public class HeapChart extends TimelineChart { for (BinarySettingData binData : binDataList) { String libraryPath = binData.getBinaryPath(); BinaryInfo binInfo = project.getDeviceStatusInfo().getBinaryInfo(libraryPath); - LibraryObject libObj = pmap.getLibraryByBinaryID(binInfo.getID()); - if (null != libObj) { + NavigableMap libObjMap = pmap.getLibraryMappingByBinaryID(binInfo.getID()); + if (libObjMap != null && libObjMap.size() > 0) { DAChartSeries libraryAllocSeries = new DAChartSeries(libraryPath, DAChartSeries.SERIES_STYLE_AREA); - chartSeriesMap.put(libObj.getBinaryID(), libraryAllocSeries); + chartSeriesMap.put(binInfo.getID(), libraryAllocSeries); } } } @@ -153,8 +154,7 @@ public class HeapChart extends TimelineChart { chart.getPlot().setAxisUnitType(parentPlot.getAxisUnitType()); chart.getPlot().setShowAxis(parentPlot.isShowAxis()); - popupMenu = new DAPopupMenu(chart); - initPopupMenu(parent.getChartBoard(), popupMenu); + popupMenu = new ChartPopupMenu(chart); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( popupMenu, parent.getChartBoard().getTimeline(), pageID); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ProcessMemoryChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ProcessMemoryChart.java index 60fb126..60cd1d5 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ProcessMemoryChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/ProcessMemoryChart.java @@ -35,10 +35,10 @@ import java.util.Map; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; -import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.ImageResources; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; import org.tizen.dynamicanalyzer.ui.memory.data.ProcessMemoryDBTable; @@ -51,7 +51,6 @@ 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; public class ProcessMemoryChart extends TimelineChart { private final int VSS = 0; @@ -136,8 +135,7 @@ public class ProcessMemoryChart extends TimelineChart { chart.getPlot().setAxisUnitType(parentPlot.getAxisUnitType()); chart.getPlot().setShowAxis(parentPlot.isShowAxis()); - popupMenu = new DAPopupMenu(chart); - initPopupMenu(parent.getChartBoard(), popupMenu); + popupMenu = new ChartPopupMenu(chart); TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener( popupMenu, parent.getChartBoard().getTimeline(), pageID); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/TimelineChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/TimelineChart.java index feba776..d68daf5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/TimelineChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/chart/TimelineChart.java @@ -30,10 +30,9 @@ package org.tizen.dynamicanalyzer.ui.timeline.chart; import java.util.List; import org.eclipse.swt.graphics.Image; -import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; -import org.tizen.dynamicanalyzer.ui.common.PopupRangeAnalysisMenuItemOnChartListener; +import org.tizen.dynamicanalyzer.ui.common.ChartPopupMenu; import org.tizen.dynamicanalyzer.widgets.chart.DAChart; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType; @@ -42,7 +41,6 @@ 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 abstract class TimelineChart { protected DAChart chart; @@ -68,19 +66,12 @@ public abstract class TimelineChart { chart = item.getChart(); setChartStyle(); - popupMenu = new DAPopupMenu(chart); - initPopupMenu(chartBoard, popupMenu); + popupMenu = new ChartPopupMenu(chart); + popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); return item; } - protected void initPopupMenu(DAChartBoard chartBoard, DAPopupMenu popupMenu) { - popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); - DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu); - analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS); - analysisItem.addListener(new PopupRangeAnalysisMenuItemOnChartListener(analysisItem, chartBoard, chart)); - } - public void clear() { List seriesList = chart.getSeriesList(); for (DAChartSeries series : seriesList) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineChartView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineChartView.java index cd1d427..271a256 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineChartView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineChartView.java @@ -59,7 +59,6 @@ import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener; import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter; import org.tizen.dynamicanalyzer.ui.common.UICommonConstants; import org.tizen.dynamicanalyzer.ui.page.BaseView; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; import org.tizen.dynamicanalyzer.ui.timeline.chart.TimelineChart; import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser; @@ -85,8 +84,6 @@ public class TimelineChartView extends DAViewComposite { private final TimelineChartManager timelineChartManager = TimelineChartManager .getInstance(); - private final RangeDataManager rangeDataManager = RangeDataManager - .getInstance(); private final LifecycleLogParser lifecycleLogParser = LifecycleLogParser .getInstance(); @@ -374,26 +371,6 @@ public class TimelineChartView extends DAViewComposite { chartBoard.setTotalEndTime(time, false); } - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(rangeDataManager.getAnalysisStartTime() - / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getAnalysisEndTime() - / TimelineConstants.MEGA_DOUBLE); - } else { - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)) - .setInterval(-1, -1); - } - - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - rangeDataManager.getMarkerStartTime() - / TimelineConstants.MEGA_DOUBLE, - rangeDataManager.getMarkerEndTime() - / TimelineConstants.MEGA_DOUBLE); - timelineChartManager.addNewCustomChart(); } @@ -470,26 +447,6 @@ public class TimelineChartView extends DAViewComposite { 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.SELECTION_LINE); - rangeMarker.setAlpha((int) (255 * 0.25)); - board.addIntervalMarker(rangeMarker); - } - - public void setRangeMarker(double starttime, double endtime) { - ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get( - UICommonConstants.RANGE_MARKER_INDEX)).setInterval( - starttime, endtime); } public DAChartBoard getChartBoard(){ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineTableView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineTableView.java index 5562c19..b31269b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineTableView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/common/TimelineTableView.java @@ -34,15 +34,11 @@ import org.tizen.dynamicanalyzer.ui.info.callstack.CallstackView; import org.tizen.dynamicanalyzer.ui.info.process.ProcessView; import org.tizen.dynamicanalyzer.ui.info.screenshot.ImageViewer; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotView; -import org.tizen.dynamicanalyzer.ui.summary.failed.FailedApiListView; -import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfilingView; -import org.tizen.dynamicanalyzer.ui.summary.warning.WarningDataView; import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceView; import org.tizen.dynamicanalyzer.ui.timeline.dlog.DlogView; import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite; public class TimelineTableView extends DATabComposite { - public static final String tabID = TimelineTableView.class.getName(); public static final String screenshotViewID = ScreenshotView.class.getName(); public static final String callstackViewID = CallstackView.class.getName(); public static final String imageViewerID = ImageViewer.class.getName(); @@ -54,7 +50,7 @@ public class TimelineTableView extends DATabComposite { + DesignConstants.TAB_BUTTON_HEIGHT; { - ID = tabID; + ID = TimelineTableView.class.getName(); } public TimelineTableView(Composite parent, int style) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogTable.java index c7d2213..705444d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogTable.java @@ -50,7 +50,6 @@ import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.utils.Formatter; import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker; @@ -76,10 +75,7 @@ public class DlogTable extends DATableComposite { setColumns(columnNames); setColumnSize(columnSizes); setColumnVisibility(columnVisibility); - - setComparator(new DefaultTableComparator()); - initDlogListeners(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/uievent/UIEventListDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/uievent/UIEventListDialog.java index 0cab7a2..e3db511 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/uievent/UIEventListDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/uievent/UIEventListDialog.java @@ -43,16 +43,11 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.appearance.DesignConstants; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.model.TableInput; import org.tizen.dynamicanalyzer.nl.TimelinePageLabels; import org.tizen.dynamicanalyzer.nl.WidgetLabels; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartView; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer; @@ -193,44 +188,6 @@ public class UIEventListDialog extends Dialog { private DACustomButtonClickEventListener okButtonListener = new DACustomButtonClickEventListener() { @Override public void handleClickEvent(DACustomButton button) { - RangeDataManager rangeDataManager = RangeDataManager.getInstance(); - TimelineChartView tview = (TimelineChartView) AnalyzerManager - .getCurrentPage().getView(TimelinePage.timelineViewID); - - Double startTime = (Double) uiEventListTable.getTable().getData( - KEY_START_TIME); - Double endTime = (Double) uiEventListTable.getTable().getData( - KEY_END_TIME); - - if (startTime == null || endTime == null) { - return; - } - - if (startTime != -1 && endTime != -1 && startTime > endTime) { - double temp = startTime; - startTime = endTime; - endTime = temp; - } - - if (startTime != -1) { - rangeDataManager - .setMarkerStartTime((long) (startTime * TimelineConstants.MEGA_DOUBLE)); - double revisedEndTime = rangeDataManager.getMarkerEndTime(); - - tview.setRangeMarker(startTime, revisedEndTime - / TimelineConstants.MEGA_DOUBLE); - } - - if (endTime != -1) { - rangeDataManager - .setMarkerEndTime((long) (endTime * TimelineConstants.MEGA_DOUBLE)); - - double revisedStartTime = rangeDataManager.getMarkerStartTime(); - - tview.setRangeMarker(revisedStartTime - / TimelineConstants.MEGA_DOUBLE, endTime); - } - shell.dispose(); } }; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/Toolbar.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/Toolbar.java index ee2d9d3..f635914 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/Toolbar.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/Toolbar.java @@ -72,6 +72,7 @@ import org.tizen.dynamicanalyzer.setting.SettingDataManager; 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; import org.tizen.dynamicanalyzer.ui.toolbar.setting.PreferencesDialog; import org.tizen.dynamicanalyzer.ui.widgets.SearchDialog; @@ -82,6 +83,9 @@ import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer; import org.tizen.dynamicanalyzer.widgets.button.toggle.DACustomToggleButton; +import org.tizen.dynamicanalyzer.widgets.chart.DAChart; +import org.tizen.dynamicanalyzer.widgets.chart.DAChartRenderer; +import org.tizen.dynamicanalyzer.widgets.chart.DANotificationOnChartRenderer; import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo; import org.tizen.dynamicanalyzer.widgets.combo.DACustomComboSelectionListener; import org.tizen.dynamicanalyzer.widgets.da.base.ProgressDialog; @@ -408,7 +412,7 @@ public enum Toolbar { if (DAState.isStartable()) { MarkerManager.INSTANCE.clearMarkerList(); - CommandAction.startTrace(false); + CommandAction.startTrace(); } else if (DAState.isRunning()) { CommandAction.stopTrace(new DAResult(ErrorCode.SUCCESS), false); } else { @@ -1327,8 +1331,28 @@ public enum Toolbar { } } + /** + * Check if connected device type corresponds to target. If check failed + * then lock application combo and start button. + * + * @return true if check passed, false otherwise. + */ + public boolean checkThatConnectedCorrespondsToTarget() { + TimelinePage tP = (TimelinePage) AnalyzerUtil.getTabPage(TimelinePage.pageID); + DAChart chart = tP.getTimelineChartView().getChartBoard().getItemList().get(0).getChart(); + if(SettingDataManager.INSTANCE.checkConnectedTargetType()){ + chart.setChartRenderer(new DAChartRenderer()); + return true; + } + startButton.setButtonEnabled(false); + appCombo.setEnabled(false); + chart.setChartRenderer(new DANotificationOnChartRenderer( + UserErrorWarningLabels.ERR_GUIDE_SELECT_ANOTHER_DEVICE)); + return false; + } + private void setAppComboState(boolean enabled) { - if (enabled) { + if (enabled && checkThatConnectedCorrespondsToTarget()) { DeviceInfo device = Global.getCurrentDeviceInfo(); if (device != null) { appCombo.setEnabled(true); @@ -1340,7 +1364,7 @@ public enum Toolbar { } private void setStartButtonState(boolean enabled) { - if (enabled) { + if (enabled && checkThatConnectedCorrespondsToTarget()) { DeviceInfo device = Global.getCurrentDeviceInfo(); if (device != null) { String selDev = deviceCombo.getText(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java index 222d5db..76e04a8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java @@ -30,6 +30,7 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.common.DAState; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.common.path.PathManager; import org.tizen.dynamicanalyzer.handlers.CommonAction; @@ -131,6 +132,8 @@ public class OpenTraceProgressManager implements Runnable { } public void openTraceComplete() { + DAState.changeCurrentState(DAState.DONE); + if (null != dialog) { // waitingThreads(); Display.getDefault().syncExec(new Runnable() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialog.java index 18539a7..21f60ab 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialog.java @@ -49,6 +49,7 @@ import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; +import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.widgets.da.base.DAMessageBox; public class FlatFeatureDialog extends DAMessageBox { @@ -60,7 +61,7 @@ public class FlatFeatureDialog extends DAMessageBox { private FlatFeatureDialogSelectedFeaturePage selectedFeaturePage = null; private Composite buttonContentsComp = null; - final public int WINDOW_WIDTH = 1010; + final public int WINDOW_WIDTH = 1030; final public int WINDOW_HEIGHT = 620; final public int TITLE_BAR = 30; @@ -83,7 +84,7 @@ public class FlatFeatureDialog extends DAMessageBox { final public int FEATURE_HEIGHT = 489 + TITLE_HEIGHT; final public int SELECTED_LEFT = TARGET_COMP_WIDTH + FEATURE_WIDTH; - final public int SELECTED_WIDTH = 285; // SelectedList have to draw line + final public int SELECTED_WIDTH = 305; // SelectedList have to draw line final public int SELECTED_HEIGHT = 489 + TITLE_HEIGHT; public FlatFeatureDialog(Shell parentShell) { @@ -93,7 +94,7 @@ public class FlatFeatureDialog extends DAMessageBox { private Listener okListener = new Listener() { @Override public void handleEvent(Event event) { - // TODO Auto-generated method stub + Toolbar.INSTANCE.checkThatConnectedCorrespondsToTarget(); doApply(); doRun(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogSelectedFeaturePage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogSelectedFeaturePage.java index 6b6b8c6..d7232f8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogSelectedFeaturePage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogSelectedFeaturePage.java @@ -48,6 +48,7 @@ import org.tizen.dynamicanalyzer.setting.FlatFeature; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.setting.TargetData; import org.tizen.dynamicanalyzer.util.Logger; +import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.toggle.DACustomToggleButton; import org.tizen.dynamicanalyzer.widgets.da.view.DABaseComposite; @@ -64,29 +65,37 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { private DACustomToggleButton delToggle = null; private Cursor daCursor = null; - private int TITLE_FONT_SIZE = 0; - private int ICON_SIZE = 0; - - private int WIDTH = 0; - private int HEIGHT = 0; - private int LINE = 0; - private int ITEM_LEFT = 0; - private int TITLE_HEIGHT = 0; - private int TITLE_TOP = 0; - private int BODY_HEIGHT = 0; - private int BODY_TOP = 0; - private int BODY_TOP_MARGIN = 0; - private int ITEM_DIST = 0; - private int ICON_TITLE_DIST = 0; - private int ITEM_TITLE_TOP = 0; - private int ITEM_TITLE_LEFT = 0; - private int ITEM_TITLE_WIDTH = 0; - private int CANCEL_SIZE = 0; - private int CANCEL_TOP = 0; - private int CANCEL_RIGHT = 0; - private int NOITEM_UPPER_MARGIN = 0; - private int NOITEM_LEFT_MARGIN = 0; - private int VSCROLL_MARGIN = -3; + /** + * Size constants + */ + // TODO: Add handling at MAC + private static int TITLE_FONT_SIZE = 10 + 6; + private static int ICON_SIZE = 40; + private static int ITEM_LEFT = 20; + private static int BODY_TOP_MARGIN = 30; + private static int ITEM_DIST = 23; + private static int ICON_TITLE_DIST = 15; + private static int ITEM_TITLE_TOP = (ICON_SIZE - TITLE_FONT_SIZE) / 2; + private static int ITEM_TITLE_LEFT = ITEM_LEFT + ICON_SIZE + ICON_TITLE_DIST; + private static int ITEM_TITLE_WIDTH = 145; + private static int BUTTON_SIZE = 15; + private static int BUTTON_TOP = (ICON_SIZE - BUTTON_SIZE) / 2; + private static int BUTTON_RIGHT = -30; + private static int BUTTON_SPACING = -10; + private static int VSCROLL_MARGIN = -3; + + /** + * Calculated sizes + */ + private int width = 0; + private int height = 0; + private int line = 0; + private int titleHeight = 0; + private int titleTop = 0; + private int bodyHeight = 0; + private int bodyTop = 0; + private int noItemUpperMargin = 0; + private int noItemTopMargin = 0; public FlatFeatureDialogSelectedFeaturePage(Composite parent, FlatFeatureDialog parentObject, int style) { super(parent, style); @@ -96,29 +105,15 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { selectedComp = parent; featureDialog = parentObject; - // TODO: Add handling at MAC - TITLE_FONT_SIZE = 10 + 6; - ICON_SIZE = 40; - CANCEL_SIZE = 15; - - WIDTH = featureDialog.SELECTED_WIDTH; - HEIGHT = featureDialog.SELECTED_HEIGHT; - LINE = featureDialog.LINE; - ITEM_LEFT = 20; - TITLE_HEIGHT = featureDialog.TITLE_HEIGHT; - TITLE_TOP = (TITLE_HEIGHT - TITLE_FONT_SIZE)/2; - BODY_TOP = TITLE_HEIGHT + LINE + 1; - BODY_HEIGHT = HEIGHT - TITLE_HEIGHT - LINE; - BODY_TOP_MARGIN = 30; - ITEM_DIST = 23; - ICON_TITLE_DIST = 15; - ITEM_TITLE_TOP = (ICON_SIZE - TITLE_FONT_SIZE)/2; - ITEM_TITLE_LEFT = ITEM_LEFT + ICON_SIZE + ICON_TITLE_DIST; - ITEM_TITLE_WIDTH = 158; - CANCEL_TOP = (ICON_SIZE - CANCEL_SIZE)/2; - CANCEL_RIGHT = -30; - NOITEM_UPPER_MARGIN = (BODY_HEIGHT-TITLE_FONT_SIZE)/2; - NOITEM_LEFT_MARGIN = 15; // TODO: Replace '15' with string length + width = featureDialog.SELECTED_WIDTH; + height = featureDialog.SELECTED_HEIGHT; + line = featureDialog.LINE; + titleHeight = featureDialog.TITLE_HEIGHT; + titleTop = (titleHeight - TITLE_FONT_SIZE) / 2; + bodyTop = titleHeight + line + 1; + bodyHeight = height - titleHeight - line; + noItemUpperMargin = (bodyHeight - TITLE_FONT_SIZE) / 2; + noItemTopMargin = 15; // TODO: Replace '15' with string length createSelectedFeatureComposite(); } @@ -195,15 +190,18 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { } private Listener cursorListener = new Listener() { + private Cursor arrowCursor = new Cursor(getShell().getDisplay(), SWT.CURSOR_ARROW); + private Cursor handCursor = new Cursor(getShell().getDisplay(), SWT.CURSOR_HAND); + public void handleEvent(Event event) { if (event.type == SWT.MouseEnter || event.type == SWT.MouseExit) { - DACustomToggleButton toggleButton = (DACustomToggleButton) event.widget; + DACustomButton toggleButton = (DACustomButton) event.widget; toggleButton.setFocus(); if (event.type == SWT.MouseEnter) - daCursor = new Cursor(getShell().getDisplay(), SWT.CURSOR_HAND); + daCursor = handCursor; else if (event.type == SWT.MouseExit) - daCursor = new Cursor(getShell().getDisplay(), SWT.CURSOR_ARROW); + daCursor = arrowCursor; else return; @@ -212,14 +210,21 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { } }; - private Listener clickListener = new Listener() { - public void handleEvent(Event event) { - DACustomToggleButton toggleButton = (DACustomToggleButton) event.widget; - TargetData target = SettingDataManager.INSTANCE.getTarget(null); - target.removeSelectedFlatFeature(toggleButton.getText()); - featureDialog.getFeatureListPage().featureToggleUnselect(toggleButton.getText()); - createSelectedFeatureComposite(); - } + private Listener deleteClickListener = (Event event) -> { + DACustomToggleButton toggleButton = (DACustomToggleButton) event.widget; + TargetData target = SettingDataManager.INSTANCE.getTarget(null); + target.removeSelectedFlatFeature(toggleButton.getText()); + featureDialog.getFeatureListPage().featureToggleUnselect(toggleButton.getText()); + createSelectedFeatureComposite(); + }; + + /** + * Opens preferences dialog for selected configurable feature. + */ + private Listener configClickListener = (Event event) -> { + DACustomButton toggleButton = (DACustomButton) event.widget; + FlatFeature selectedFeature = FlatFeature.getFlatFeature((String) (toggleButton.getData())); + new PreferencesDialog(getShell()).open(selectedFeature); }; /** @@ -235,10 +240,10 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { // label selectedFeatureLabel = new Label(selectedComp, SWT.TRANSPARENT); FormData data = new FormData(); - data.top = new FormAttachment(0, TITLE_TOP); + data.top = new FormAttachment(0, titleTop); data.left = new FormAttachment(0, ITEM_LEFT); - data.width = WIDTH - ITEM_LEFT; - data.height = TITLE_HEIGHT - TITLE_TOP - TITLE_FONT_SIZE+6; + data.width = width - ITEM_LEFT; + data.height = titleHeight - titleTop - TITLE_FONT_SIZE + 6; selectedFeatureLabel.setLayoutData(data); selectedFeatureLabel.setText(ConfigureLabels.SETTING_DIALOG_SELECTED_TITLE); selectedFeatureLabel.setBackground(ColorResources.FEATURE_TITLE_BACKGROUND); @@ -248,7 +253,7 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { selectedComp.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { e.gc.setForeground(ColorResources.FEATURE_LINE); - e.gc.drawLine(0, TITLE_HEIGHT + LINE, WIDTH, TITLE_HEIGHT + LINE); + e.gc.drawLine(0, titleHeight + line, width, titleHeight + line); } }); @@ -256,7 +261,7 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { selecetedScrolledComp = new ScrolledComposite(selectedComp, SWT.V_SCROLL); selecetedScrolledComp.setLayout(new FormLayout()); data = new FormData(); - data.top = new FormAttachment(0, BODY_TOP); + data.top = new FormAttachment(0, bodyTop); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, VSCROLL_MARGIN); data.bottom = new FormAttachment(100, 0); @@ -267,7 +272,7 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { selecetedScrolledComp.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { e.gc.setForeground(ColorResources.FEATURE_FEATURELISTCOMP_LINE); - e.gc.drawLine(0, 0, WIDTH, 0); + e.gc.drawLine(0, 0, width, 0); } }); @@ -303,10 +308,10 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { // label : No Item Selected noItemLabel = new Label(selectedInputComp, SWT.TRANSPARENT); data = new FormData(); - data.top = new FormAttachment(0, NOITEM_UPPER_MARGIN); - data.left = new FormAttachment(0, NOITEM_LEFT_MARGIN); - data.width = WIDTH - NOITEM_LEFT_MARGIN; - data.height = TITLE_HEIGHT; + data.top = new FormAttachment(0, noItemUpperMargin); + data.left = new FormAttachment(0, noItemTopMargin); + data.width = width - noItemTopMargin; + data.height = titleHeight; noItemLabel.setLayoutData(data); noItemLabel.setText(ConfigureLabels.SETTING_DIALOG_NO_ITEM_SELECTED); noItemLabel.setBackground(ColorResources.FEATURE_FEATURELISTCOMP_NORMAL_BACKGROUND); @@ -346,13 +351,34 @@ public class FlatFeatureDialogSelectedFeaturePage extends DABaseComposite { delToggle = createToggleButton(selectedInputComp, ImageResources.DELETE, delImagePoint, feature.getName(), null, - CANCEL_SIZE, CANCEL_SIZE, - topPosition + CANCEL_TOP, - WIDTH - CANCEL_SIZE + CANCEL_RIGHT); - delToggle.addListener(SWT.MouseUp, clickListener); + BUTTON_SIZE, BUTTON_SIZE, + topPosition + BUTTON_TOP, + width - BUTTON_SIZE + BUTTON_RIGHT); + delToggle.addListener(SWT.MouseUp, deleteClickListener); delToggle.addListener(SWT.MouseEnter, cursorListener); delToggle.addListener(SWT.MouseExit, cursorListener); + if (feature.isConfigurable()) { + // configuration button + DACustomButton confToggle = new DACustomButton(selectedInputComp, + ImageResources.CONFIG_FEATURE_NORMAL, + ImageResources.CONFIG_FEATURE_PUSH, + ImageResources.CONFIG_FEATURE_HOVER, + ImageResources.CONFIG_FEATURE_NORMAL); + confToggle.setBackground(ColorResources.FEATURE_FEATURELISTCOMP_NORMAL_BACKGROUND); + confToggle.setButtonImagePoint(new Point(0, 0)); + confToggle.setData(feature.getName()); + + data = new FormData(BUTTON_SIZE, BUTTON_SIZE); + data.right = new FormAttachment(delToggle, BUTTON_SPACING); + data.top = new FormAttachment(0, topPosition + BUTTON_TOP); + confToggle.setLayoutData(data); + + confToggle.addListener(SWT.MouseUp, configClickListener); + confToggle.addListener(SWT.MouseEnter, cursorListener); + confToggle.addListener(SWT.MouseExit, cursorListener); + } + topPosition += (ICON_SIZE + ITEM_DIST); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogTargetPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogTargetPage.java index 5783d45..79a1fec 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogTargetPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/FlatFeatureDialogTargetPage.java @@ -25,10 +25,12 @@ */ package org.tizen.dynamicanalyzer.ui.toolbar.setting; +import java.util.List; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Cursor; @@ -38,21 +40,32 @@ import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.tizen.dynamicanalyzer.common.DAState; +import org.tizen.dynamicanalyzer.communicator.DeviceInfo; +import org.tizen.dynamicanalyzer.communicator.DeviceManager; +import org.tizen.dynamicanalyzer.communicator.IDeviceStatusListener; import org.tizen.dynamicanalyzer.nl.ConfigureLabels; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.resources.ImageResources; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.setting.TargetData; +import org.tizen.dynamicanalyzer.util.Logger; +import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.toggle.DACustomFeatureToggleButton; import org.tizen.dynamicanalyzer.widgets.button.toggle.DACustomFeatureToggleButtonGroup; import org.tizen.dynamicanalyzer.widgets.da.view.DABaseComposite; +import org.tizen.dynamicanalyzer.widgets.tooltip.DACustomTooltip; public class FlatFeatureDialogTargetPage extends DABaseComposite { + private static final int TOOLTIP_HORIZONTAL_OFFSET = 20; + private static final int CONNECTION_IMAGE_TOP_MARGIN = 18; + private static final int CONNECTION_IMAGE_LEFT_MARGIN = 145; + private enum ProfileDisplayInfo { PROFILE_NAME_MOBILE(0, ConfigureLabels.TARGET_NAME_FLAT_MOBILE_FOCUS, ImageResources.TARGET_NAME_FLAT_MOBILE_SEL, @@ -71,8 +84,9 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { private Image focusImage = null; private Image normalImage = null; private Image overImage = null; + private boolean connected = false; public static int imageWidth = 40; - + private ProfileDisplayInfo(int id, String displayName, Image focusImage, Image normalImage, Image overImage) { this.displayName = displayName; this.focusImage = focusImage; @@ -81,31 +95,85 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { } public static Image getImage(String displayName) { - ProfileDisplayInfo[] profiles = ProfileDisplayInfo.values(); - for (ProfileDisplayInfo profile : profiles) { - if (profile.displayName.equals(displayName)) { - return profile.normalImage; - } - } - return null; + ProfileDisplayInfo profile = getProfileByName(displayName); + return profile != null ? profile.normalImage : null; } + public static Image getFocusImage(String displayName) { - ProfileDisplayInfo[] profiles = ProfileDisplayInfo.values(); - for (ProfileDisplayInfo profile : profiles) { + ProfileDisplayInfo profile = getProfileByName(displayName); + return profile != null ? profile.focusImage : null; + } + + public static Image getOverImage(String displayName) { + ProfileDisplayInfo profile = getProfileByName(displayName); + return profile != null ? profile.overImage : null; + } + + /** + * Gets connection status of a profile with specified name. + * + * @param displayName displayed name of the profile + * @return if profile is found then its connection status is returned + * ({@code true} if connected), if it is not found then + * {@code false} is returned + */ + public static boolean getConnected(String displayName) { + ProfileDisplayInfo profile = getProfileByName(displayName); + return profile != null && profile.connected; + } + + /** + * Gets {@link ProfileDisplayInfo} value by its name. + * + * @param displayName displayed name of the profile + * @return found {@link ProfileDisplayInfo} or {@code null} if there is + * no such profile + */ + private static ProfileDisplayInfo getProfileByName(String displayName) { + for (ProfileDisplayInfo profile : ProfileDisplayInfo.values()) { if (profile.displayName.equals(displayName)) { - return profile.focusImage; + return profile; } } return null; } - public static Image getOverImage(String displayName) { - ProfileDisplayInfo[] profiles = ProfileDisplayInfo.values(); - for (ProfileDisplayInfo profile : profiles) { - if (profile.displayName.equals(displayName)) { - return profile.overImage; + + /** + * Updates 'connected' field of the profile with specified name. + * + * @param displayName name of the profile which connection status should + * be updated + */ + public static void updateConnectionStatus(String displayName) { + ProfileDisplayInfo profile = getProfileByName(displayName); + if (profile == null) + return; + + profile.updateConnectionStatus(); + } + + /** + * Updates 'connected' field of the profile based on the list of + * connected devices. + */ + private void updateConnectionStatus() { + List devices = DeviceManager.getDevices(); + + connected = false; + for (DeviceInfo devInfo : devices) { + if (devInfo.getPlatformName().equals(displayName)) { + connected = true; + break; } } - return null; + + Logger.debug(displayName + (connected ? " connected" : " disconnected")); + } + + static { + // initialize 'connected' field for all profiles + for (ProfileDisplayInfo profile : ProfileDisplayInfo.values()) + profile.updateConnectionStatus(); } }; @@ -137,6 +205,23 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { private int TARGET_LIST_ITEM_LABEL_MARGIN = 0; private int TARGET_LIST_ITEM_TITLE_MARGIN = 0; + /** + * Tooltip displaying focused target connection status + */ + DACustomTooltip tooltip = new DACustomTooltip() { + + @Override + public void setTooltipMessage() { + tooltipMessage.clear(); + } + + @Override + public void setTooltipMessage(String text) { + tooltipMessage.clear(); + tooltipMessage.add(text); + } + }; + public FlatFeatureDialogTargetPage(Composite parent, FlatFeatureDialog parentObject, int style) { super(parent, style); this.setLayout(new FormLayout()); @@ -218,6 +303,18 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { } }; + /** + * Draws connection status icon. + */ + private PaintListener paintListener = (PaintEvent e) -> { + DACustomFeatureToggleButton toggleButton = (DACustomFeatureToggleButton) e.widget; + Image icon = ProfileDisplayInfo.getConnected(toggleButton.getText()) + ? ImageResources.TARGET_CONNECTED + : ImageResources.TARGET_DISCONNECTED; + + e.gc.drawImage(icon, CONNECTION_IMAGE_LEFT_MARGIN, CONNECTION_IMAGE_TOP_MARGIN); + }; + private DACustomFeatureToggleButton createToggleButton(Composite composit, Image image, Image pushImage, Image hoverImage, Point imagePoint, String title, Point fontPoint, @@ -250,6 +347,47 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { data.height = height; toggle.setLayoutData(data); + toggle.addListener(SWT.MouseHover, (Event event) -> { + openTooltip(toggle); + }); + toggle.addListener(SWT.MouseExit, (Event event) -> { + tooltip.close(); + }); + + // update profiles' connection statuses and redraw button + // once some device got connected/disconnected + IDeviceStatusListener deviceListener = (connected, device) -> { + Display.getDefault().asyncExec(() -> { + /** + * XXX: Due to a very bad design of sdblib we cannot get + * platform name of the device after it got disconnected, so we + * have to ignore passed arguments and check each platform on + * connection. For the sake of code simplicity do this for both + * when 'connected' is true and false. + */ + ProfileDisplayInfo.updateConnectionStatus(toggle.getText()); + toggle.redraw(); + toggle.update(); + + updateToggleData(toggle); + + // update tooltip if it is shown for this toggle (cursor is + // hovering over this toggle) + Point cursor = composit.toControl(Display.getCurrent().getCursorLocation()); + if (toggle.getBounds().contains(cursor)) + openTooltip(toggle); + }); + }; + + DeviceManager.addDeviceStatusListener(deviceListener); + + // when toggle is disposed, remove listener + toggle.addDisposeListener((DisposeEvent e) -> { + DeviceManager.removeDeviceStatusListener(deviceListener); + }); + + updateToggleData(toggle); + return toggle; } @@ -332,6 +470,7 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { toggle.addListener(SWT.MouseUp, clickListener); toggle.addListener(SWT.MouseEnter, cursorListener); toggle.addListener(SWT.MouseExit, cursorListener); + toggle.addPaintListener(paintListener); // set next position topPosition += (TARGET_LIST_ITEM_HEIGHT + TARGET_LIST_ITEM_MARGIN); @@ -350,4 +489,29 @@ public class FlatFeatureDialogTargetPage extends DABaseComposite { targetComp.setEnabled(false); } } + + /** + * Updates data of the {@code toggle} depending on current connection status + * of the corresponding target. + * + * @param toggle toggle to update + */ + private void updateToggleData(DACustomButton toggle) { + boolean targetConnected = ProfileDisplayInfo.getConnected(toggle.getText()); + toggle.setData(targetConnected + ? ConfigureLabels.TARGET_CONNECTED + : ConfigureLabels.TARGET_DISCONNECTED); + } + + /** + * Opens tooltip for the specified {@code toggle}. + * + * @param toggle toggle for which tooltip should be shown + */ + private void openTooltip(DACustomButton toggle) { + Point p = Display.getCurrent().getCursorLocation(); + tooltip.open(toggle.getParent().getShell()); + tooltip.setTooltipMessage((String) toggle.getData()); + tooltip.setTooltipLocation(p, 0, TOOLTIP_HORIZONTAL_OFFSET); + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/PreferencesDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/PreferencesDialog.java index 4c4966f..baf1e51 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/PreferencesDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/PreferencesDialog.java @@ -24,6 +24,10 @@ package org.tizen.dynamicanalyzer.ui.toolbar.setting; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; + import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.DisposeEvent; @@ -58,6 +62,7 @@ import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; import org.tizen.dynamicanalyzer.ui.memory.MemoryPage; import org.tizen.dynamicanalyzer.ui.page.MenuBar; +import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; @@ -97,10 +102,27 @@ public class PreferencesDialog extends DAMessageBox { private Composite memoryProfilingView = null; + private List configs = new ArrayList(); + private EnumMap featureConfigs = new EnumMap( + FlatFeature.class); + private FlatFeature selectedFeature = null; + public PreferencesDialog(Shell parentShell) { super(parentShell); } + /** + * Opens Preferences dialog with only selected {@code feature} configuration + * controls visible. + * + * @param feature feature to configure + * @return result of Preferences dialog processing + */ + public Object open(FlatFeature feature) { + selectedFeature = feature; + return open(); + } + protected boolean run() { if (opened) { return false; @@ -191,12 +213,23 @@ public class PreferencesDialog extends DAMessageBox { drawButtonCom(); - setSelectedOptions(); + setOptions(false); // Disable configuration preferences if DAState is RUNNING if (DAState.isRunning()) disableConfiguration(); + // If some feature is selected for this dialog then dispose all + // unrelated configuration options + if (selectedFeature != null) { + Composite selectedConfig = featureConfigs.get(selectedFeature); + for (Composite config : configs) + if (config != selectedConfig) + config.dispose(); + + scrolledComp.layout(true); + } + opened = true; ShortCutManager.getInstance().setEnabled(!opened); shell.open(); @@ -239,6 +272,8 @@ public class PreferencesDialog extends DAMessageBox { generalBaseView.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND); generalBaseView.setLayout(parentLayout); + configs.add(generalBaseView); + // Add 'General' button DACustomButton generalExtend = createFoldingButton(generalBaseView, PreferencesDialogLabels.GENERAL); @@ -277,6 +312,9 @@ public class PreferencesDialog extends DAMessageBox { screenshotBaseView.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND); screenshotBaseView.setLayout(parentLayout); + configs.add(screenshotBaseView); + featureConfigs.put(FlatFeature.SCREENSHOT, screenshotBaseView); + // Add 'Screenshot feature' button DACustomButton screenshotExtend = createFoldingButton(screenshotBaseView, PreferencesDialogLabels.SCREENSHOT); @@ -320,6 +358,9 @@ public class PreferencesDialog extends DAMessageBox { memoryProfilingBaseView.setBackground(ColorResources.DIALOG_CONTENT_BACKGROUND); memoryProfilingBaseView.setLayout(parentLayout); + configs.add(memoryProfilingBaseView); + featureConfigs.put(FlatFeature.MEMORY_ALLOC, memoryProfilingBaseView); + // Add 'Memory Profiling' button DACustomButton memoryProfilingExtend = createFoldingButton(memoryProfilingBaseView, PreferencesDialogLabels.HEAP_ALLOCATION); @@ -429,30 +470,70 @@ public class PreferencesDialog extends DAMessageBox { @Override public void widgetSelected(SelectionEvent arg0) { - resetToDefault(); + setOptions(true); scrolledComp.setFocus(); } }); } - private void setSelectedOptions() { - int value = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.SOURCE_VIEW); - if (value == 1) { - sourceviewtoggle.setToggled(true); - MenuBar.getInstance().setSourceView(true); - } else { - sourceviewtoggle.setToggled(false); - MenuBar.getInstance().setSourceView(false); + /** + * Reflect current or default settings on the controls. + * + * @param reset whether settings should be reset to default values + */ + private void setOptions(boolean reset) { + // 'preferences' mode + if (selectedFeature == null) { + setGeneralOptions(reset); + setScreenshotOptions(reset); + setHeapAllocationOptions(reset); + return; } - value = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.SYSTEM_SAMPLING_RATE); + // 'feature configuration' mode + switch (selectedFeature) { + case SCREENSHOT: + setScreenshotOptions(reset); + break; + case MEMORY_ALLOC: + setHeapAllocationOptions(reset); + break; + default: + break; + } + } + + /** + * Reflect current of default settings on the controls in the 'General' + * section. + * + * @param reset whether settings should be reset to default values + */ + private void setGeneralOptions(boolean reset) { + int value = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.SOURCE_VIEW, + reset); + sourceviewtoggle.setToggled(value == 1); + MenuBar.getInstance().setSourceView(value == 1); + + value = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.SYSTEM_SAMPLING_RATE, + reset); systemRateCombo.setText(String.valueOf(value)); - value = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.FUNCTION_SAMPLING_RATE); + value = SettingDataManager.INSTANCE + .getPreferenceValue(FlatPreferences.FUNCTION_SAMPLING_RATE, reset); functionRateCombo.setText(String.valueOf(value)); + } + /** + * Reflect current of default settings on the controls in the 'Screenshot + * feature' section. + * + * @param reset whether settings should be reset to default values + */ + private void setScreenshotOptions(boolean reset) { if (screenshotFeatureEnabled) { - value = SettingDataManager.INSTANCE.getPreferenceValue(FlatPreferences.SCREENSHOT_PERIODICALLY); + int value = SettingDataManager.INSTANCE + .getPreferenceValue(FlatPreferences.SCREENSHOT_PERIODICALLY, reset); boolean enabled = (value != 0); periodicallyToggle.setToggled(enabled); @@ -461,7 +542,8 @@ public class PreferencesDialog extends DAMessageBox { if (enabled) screenshotRateCombo.setText(String.valueOf(value)); - enabled = SettingDataManager.INSTANCE.isPreferenceSelected(FlatPreferences.SCREENSHOT_ON_SCENE_TRANSITION); + enabled = SettingDataManager.INSTANCE + .isPreferenceSelected(FlatPreferences.SCREENSHOT_ON_SCENE_TRANSITION, reset); onSceneTransitionToggle.setToggled(enabled); onSceneTransitionToggle.setButtonEnabled(true); } else { @@ -472,10 +554,19 @@ public class PreferencesDialog extends DAMessageBox { onSceneTransitionToggle.setToggled(false); onSceneTransitionToggle.setButtonEnabled(false); } + } + /** + * Reflect current of default settings on the controls in the 'Heap + * Allocation feature' section. + * + * @param reset whether settings should be reset to default values + */ + private void setHeapAllocationOptions(boolean reset) { if (leakSanitizerEnabled) { - leakSanitizerToggle.setToggled(SettingDataManager.INSTANCE - .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER)); + boolean enabled = SettingDataManager.INSTANCE + .isPreferenceSelected(FlatPreferences.LEAK_SANITIZER, reset); + leakSanitizerToggle.setToggled(enabled); leakSanitizerToggle.setButtonEnabled(true); } else { leakSanitizerToggle.setToggled(false); @@ -483,40 +574,6 @@ public class PreferencesDialog extends DAMessageBox { } } - private void resetToDefault() { - int value = FlatPreferences.SOURCE_VIEW.getDefaultValue(); - if (value == 1) { - sourceviewtoggle.setToggled(true); - } else { - sourceviewtoggle.setToggled(false); - } - - value = FlatPreferences.SYSTEM_SAMPLING_RATE.getDefaultValue(); - systemRateCombo.setText(String.valueOf(value)); - - value = FlatPreferences.FUNCTION_SAMPLING_RATE.getDefaultValue(); - functionRateCombo.setText(String.valueOf(value)); - - if (screenshotFeatureEnabled) { - value = FlatPreferences.SCREENSHOT_PERIODICALLY.getDefaultValue(); - - boolean periodically = (value != 0); - - periodicallyToggle.setToggled(periodically); - screenshotRateCombo.setEnabled(periodically); - if (periodically) - screenshotRateCombo.setText(String.valueOf(value)); - - value = FlatPreferences.SCREENSHOT_ON_SCENE_TRANSITION.getDefaultValue(); - onSceneTransitionToggle.setToggled(value != 0); - } - - if (leakSanitizerEnabled) { - value = FlatPreferences.LEAK_SANITIZER.getDefaultValue(); - leakSanitizerToggle.setToggled(value == 1); - } - } - private DACustomExtendButton createFoldingButton(Composite parent, String text) { DACustomExtendButton foldingbutton = new DACustomExtendButton(parent, ImageResources.DROP_ARROW_DOWN_NOR, ImageResources.DROP_ARROW_DOWN_NOR, @@ -576,44 +633,83 @@ public class PreferencesDialog extends DAMessageBox { return label; } + /** + * Saves all configured options. + */ private void applyPreferenceData() { + // 'preferences' mode + if (selectedFeature == null) { + saveGeneralOptions(); + saveScreenshotOptions(); + saveHeapAllocationOptions(); + return; + } + + // 'feature configuration' mode + switch (selectedFeature) { + case SCREENSHOT: + saveScreenshotOptions(); + break; + case MEMORY_ALLOC: + saveHeapAllocationOptions(); + break; + default: + break; + } + } + + /** + * Saves options from the 'General' section. + */ + private void saveGeneralOptions() { boolean sourceViewEnabled = sourceviewtoggle.isToggled(); MenuBar.getInstance().setSourceView(sourceViewEnabled); - SettingDataManager.INSTANCE.setPreferenceValue(FlatPreferences.SOURCE_VIEW, sourceViewEnabled ? 1 : 0); + SettingDataManager.INSTANCE.setPreferenceValue(FlatPreferences.SOURCE_VIEW, + sourceViewEnabled ? 1 : 0); String ratestring = systemRateCombo.getText(); try { int rate = Integer.parseInt(ratestring); SettingDataManager.INSTANCE.setPreferenceValue(FlatPreferences.SYSTEM_SAMPLING_RATE, rate); - } catch (Exception ex) { - - return; + } catch (NumberFormatException ex) { + Logger.warning("Failed to save system sampling rate: " + ex.getLocalizedMessage()); } ratestring = functionRateCombo.getText(); try { int rate = Integer.parseInt(ratestring); SettingDataManager.INSTANCE.setPreferenceValue(FlatPreferences.FUNCTION_SAMPLING_RATE, rate); - } catch (Exception ex) { - - return; + } catch (NumberFormatException ex) { + Logger.warning("Failed to save function sampling rate: " + ex.getLocalizedMessage()); } - - int rate = 0; + } + + /** + * Saves options from the 'Screenshot feature' section. + */ + private void saveScreenshotOptions() { if (periodicallyToggle.isToggled()) { - ratestring = screenshotRateCombo.getText(); + String ratestring = screenshotRateCombo.getText(); try { - rate = Integer.parseInt(ratestring); - } catch (Exception ex) { - return; + int rate = Integer.parseInt(ratestring); + SettingDataManager.INSTANCE + .setPreferenceValue(FlatPreferences.SCREENSHOT_PERIODICALLY, rate); + } catch (NumberFormatException ex) { + Logger.warning("Failed to save screenshots rate: " + ex.getLocalizedMessage()); } + } else { + SettingDataManager.INSTANCE.setPreferenceValue(FlatPreferences.SCREENSHOT_PERIODICALLY, 0); } - SettingDataManager.INSTANCE.setPreferenceValue(FlatPreferences.SCREENSHOT_PERIODICALLY, rate); SettingDataManager.INSTANCE.setPreferenceSelected( FlatPreferences.SCREENSHOT_ON_SCENE_TRANSITION, onSceneTransitionToggle.isToggled()); + } + /** + * Saves options from the 'Heap Allocation feature' section. + */ + private void saveHeapAllocationOptions() { SettingDataManager.INSTANCE.setPreferenceSelected(FlatPreferences.LEAK_SANITIZER, leakSanitizerToggle.isToggled()); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIDataManager.java deleted file mode 100644 index 7320c5b..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIDataManager.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface; - -import java.util.HashMap; -import java.util.List; - -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -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.ControlData; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.swap.model.data.SceneData; -import org.tizen.dynamicanalyzer.ui.userinterface.control.UIControlListDataChecker; -import org.tizen.dynamicanalyzer.ui.userinterface.profiling.UIFunctionProfilingDataChecker; -import org.tizen.dynamicanalyzer.ui.userinterface.scene.UISceneDataChecker; - -public class UIDataManager extends PageDataManager { - private static UIDataManager instance = new UIDataManager(); - - private UIControlListDataChecker controlListDataChecker = null; - private UISceneDataChecker sceneTransformDataChecker = null; - private UIFunctionProfilingDataChecker functionProfilingDataChecker = null; - private HashMap findScreenshotViewHashMap = new HashMap(); - - private String strTableSeleteClassName = null; - - public static UIDataManager getInstance() { - return instance; - } - - private UIDataManager() { - } - - public void clear() { - controlListDataChecker = null; - sceneTransformDataChecker = null; - functionProfilingDataChecker = null; - strTableSeleteClassName = null; - findScreenshotViewHashMap.clear(); - } - - public UIControlListDataChecker getControlDataChecker() { - if (null == controlListDataChecker) { - controlListDataChecker = new UIControlListDataChecker(); - } - return controlListDataChecker; - } - - public UISceneDataChecker getSceneTransformDataChecker() { - if (null == sceneTransformDataChecker) { - sceneTransformDataChecker = new UISceneDataChecker(); - } - return sceneTransformDataChecker; - } - - public UIFunctionProfilingDataChecker getfunctionProfilingDataChecker() { - if (null == functionProfilingDataChecker) { - functionProfilingDataChecker = new UIFunctionProfilingDataChecker(); - } - return functionProfilingDataChecker; - } - - public void setTableSeleteClassName(String data) { - strTableSeleteClassName = data; - } - - public String getTableSeleteClassName() { - if (strTableSeleteClassName == null) { - strTableSeleteClassName = CommonConstants.ZERO; - } - return strTableSeleteClassName; - } - - public HashMap getFindScreenshotViewHashMap() { - return findScreenshotViewHashMap; - } - - @Override - protected void makeData(LogPackage pack) { - Logs logs = pack.getLogs(ProtocolConstants.MSG_PROBE_UICONTROL); - if (null != logs && logs.getRawLogs() != null && logs.getRawLogs().size() != 0) { - List inputs = logs.getLogs(); - int size = inputs.size(); - for (int i = 0; i < size; i++) { - getControlDataChecker().parserLog((ControlData) inputs.get(i)); - } - } - - logs = pack.getLogs(ProtocolConstants.MSG_PROBE_SCENE); - if (null != logs && logs.getRawLogs() != null && logs.getRawLogs().size() != 0) { - List inputs = logs.getLogs(); - int size = inputs.size(); - for (int i = 0; i < size; i++) { - getSceneTransformDataChecker().parserLog((SceneData) inputs.get(i)); - } - } - - UIDataManager.getInstance().getfunctionProfilingDataChecker().updateUIApiTreeSet(); - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIPage.java deleted file mode 100644 index 8a6f652..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/UIPage.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; -import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry; -import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView; -import org.tizen.dynamicanalyzer.ui.userinterface.control.UIControlListView; -import org.tizen.dynamicanalyzer.ui.userinterface.profiling.UIFunctionProfilingView; -import org.tizen.dynamicanalyzer.ui.userinterface.scene.UISceneListView; -import org.tizen.dynamicanalyzer.widgets.da.view.DAContainerComposite; - -public class UIPage extends DAContainerComposite { - public static final String pageID = UIPage.class.getName(); - public static final String controlListViewID = UIControlListView.class.getName(); - public static final String sceneListViewID = UISceneListView.class.getName(); - public static final String profilingViewID = UIFunctionProfilingView.class.getName(); - - SashForm baseForm; - SashForm upperForm; - SashForm bottomForm; - - public UIPage(Composite parent, int style) { - super(parent, style); - setTitle(AnalyzerLabels.COOLBAR_AREA_UI); - this.setBackground(ColorResources.CONFIGURATION_TABLE_COVER_BACKGROUND_COLOR); - this.setData(DAContainerComposite.KEY_TOOLTIP, ShortCutManager.COOLBAR_AREA_UI_TOOLTIP); - this.setLayout(new FillLayout()); - baseForm = new SashForm(this, SWT.VERTICAL); - baseForm.setLayout(new FillLayout()); - baseForm.setForeground(ColorResources.TAB_SELECTED_COLOR_START); - ((FillLayout) getLayout()).marginHeight = 15; - ((FillLayout) getLayout()).marginWidth = 5; - - upperForm = new SashForm(baseForm, SWT.HORIZONTAL); - - UIControlListView topLeftFirst = new UIControlListView(upperForm, SWT.NONE); - addView(topLeftFirst); - - UISceneListView topLeftSencond = new UISceneListView(upperForm, SWT.NONE); - addView(topLeftSencond); - - upperForm.setWeights(new int[] { 40, 60}); - - bottomForm = new SashForm(baseForm, SWT.HORIZONTAL); - UIFunctionProfilingView bottomLeftFirst = new UIFunctionProfilingView(bottomForm, SWT.NONE); - addView(bottomLeftFirst); - - TimelineTableView tabView = new TimelineTableView(upperForm, SWT.NONE); -// tabView.setObservingViews(TimelineTableView.screenshotViewID, new String[] { -// UIPage.sceneListViewID, UIPage.controlListViewID }); -// tabView.setObservingViews(TimelineTableView.callstackViewID, new String[] { -// UIPage.sceneListViewID, UIPage.controlListViewID }); - addView(tabView); - - bottomForm.setWeights(new int[] { 77, 23 }); - - baseForm.setSashWidth(SASH_WIDTH); - upperForm.setSashWidth(SASH_WIDTH); - bottomForm.setSashWidth(SASH_WIDTH); - - DataManagerRegistry.registerPageDataManager(UIDataManager.getInstance()); - } - - @Override - protected void onResized(int width, int height) { - int wrate = (int) (TimelineTableView.DEFAULT_WIDTH * 100 / width); - int hrate = (int) (TimelineTableView.DEFAULT_TABLE_VIEW_HEIGHT * 100 / height); - wrate = (wrate > 100) ? 100 : wrate; - hrate = (hrate > 100) ? 100 : hrate; - - if ((wrate > (100 - 37)) || hrate > 100) { - return; - } - - upperForm.setWeights(new int[] { 100 - wrate, wrate }); - baseForm.setWeights(new int[] { 100 - hrate, hrate }); - } - - @Override - public void clear() { - super.clear(); - UIDataManager.getInstance().clear(); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListData.java deleted file mode 100644 index 934029e..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListData.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.control; - -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; - -public class UIControlListData { - public static final int USER_INTERFACE_CONTROL_LIST_CONTROL = 0; - public static final int USER_INTERFACE_CONTROL_LIST_CLASS_NAME = 1; - public static final int USER_INTERFACE_CONTROL_LIST_INITIALIZER_TIME = 2; - public static final int USER_INTERFACE_CONTROL_LIST_TERMININATE_TIME = 3; - public static final int USER_INTERFACE_CONTROL_LIST_PROCESS_ID = 4; - public static final int USER_INTERFACE_CONTROL_LIST_DATABLEDATAFORMAT_CLASSNAME_INDEX = 20; - - private String strCalssKeyName = null; - private long strSequence = -1; - private int pID = -1; - private long strTime = -1; - private String strAPIName = null; - private String strInitializeTime = null; - private String strTerminateTime = null; - - private String strParentName = null; - private String strParentClassName = null; - private long strParentPointer = -1; - private String strChildName = null; - private String strChildClassName = null; - private long strChildPointer = -1; - private String strControlType = null; - - private LogData data; - - public UIControlListData(LogData input) { - data = input; - } - - public LogData getData() { - return data; - } - - public void setSequence(long seq) { - strSequence = seq; - } - - public long getSequence() { - return strSequence; - } - - public void setCalssKeyName(String data) { - strCalssKeyName = data; - } - - public String getCalssKeyName() { - if (strCalssKeyName == null) { - strCalssKeyName = CommonConstants.EMPTY; - } - return strCalssKeyName; - } - - public void setTime(long time) { - strTime = time; - } - - public long getTime() { - return strTime; - } - - public void setControlType(String data) { - strControlType = data; - } - - public String getControlType() { - if (strControlType == null) { - strControlType = CommonConstants.DASH; - } - return strControlType; - } - - public void setAPIName(String data) { - strAPIName = data; - } - - public String getAPIName() { - if (strAPIName == null) { - strAPIName = CommonConstants.EMPTY; - } - return strAPIName; - } - - public void setInitializeTime(String data) { - strInitializeTime = data; - } - - public String getInitializeTime() { - if (strInitializeTime == null) { - strInitializeTime = CommonConstants.EMPTY; - } - return strInitializeTime; - } - - public void setTerminateTime(String data) { - strTerminateTime = data; - } - - public String getTerminateTime() { - if (strTerminateTime == null) { - strTerminateTime = CommonConstants.EMPTY; - } - return strTerminateTime; - } - - public void setParentPointer(long data) { - strParentPointer = data; - } - - public long getParentPointer() { - return strParentPointer; - } - - public void setParentName(String data) { - strParentName = data; - } - - public String getParentName() { - if (strParentName == null) { - strParentName = CommonConstants.EMPTY; - } - return strParentName; - } - - public void setParentClassName(String data) { - strParentClassName = data; - } - - public String getParentClassName() { - if (strParentClassName == null) { - strParentClassName = CommonConstants.EMPTY; - } - return strParentClassName; - } - - public void setChildName(String data) { - strChildName = data; - } - - public String getChildName() { - if (strChildName == null) { - strChildName = CommonConstants.EMPTY; - } - return strChildName; - } - - public void setChildClassName(String data) { - strChildClassName = data; - } - - public String getChildClassName() { - if (strChildClassName == null) { - strChildClassName = CommonConstants.EMPTY; - } - return strChildClassName; - } - - public void setChildPointer(long data) { - strChildPointer = data; - } - - public long getChildPointer() { - return strChildPointer; - } - - public String getPID() { - return Integer.toString(pID); - } - - public void setPID(int pID) { - this.pID = pID; - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListDataChecker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListDataChecker.java deleted file mode 100644 index d5720f8..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListDataChecker.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.control; - -import java.util.ArrayList; -import java.util.List; - -import org.tizen.dynamicanalyzer.common.SymbolManager; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.data.ControlData; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.profiling.UIFunctionProfilingData; -import org.tizen.dynamicanalyzer.util.Logger; - -public class UIControlListDataChecker { - private List controlList = null; - private List removeCallControlList = null; - private long preSeq = -1; - - public void parserLog(ControlData input) { - String stClassName = getClassName(input.getApiName()).trim(); - if (stClassName.contains("AddFrame") || stClassName.contains("AddControl")) {//$NON-NLS-1$ //$NON-NLS-2$ - if (isExistData(input.getParentClassName(), - input.getChildClassName()) == true) { - return; - } - if (preSeq == input.getSeq()) { - return; - } - - addSortData(makeUIControlListData(input)); - setUIControlListTimeData(); - - preSeq = input.getSeq(); - - } else if (stClassName.trim().contains("RemoveControl")) {//$NON-NLS-1$ - getRemoveCallControlList().add(input.getChildClassName()); - } else if (stClassName.trim().contains("SetName")//$NON-NLS-1$ - || stClassName.contains("RemoveFrame")//$NON-NLS-1$ - || stClassName.contains("RemoveAllControl")) {//$NON-NLS-1$ - return; - } else { - Logger.debug("wrong type log : " + stClassName.trim()); - } - } - - private UIControlListData makeUIControlListData(ControlData input) { - UIControlListData controlData = new UIControlListData(input); - - controlData.setSequence(input.getSeq()); - - controlData.setTime(input.getTime()); - - controlData.setAPIName(getClassName(input.getApiName()).trim()); - - controlData.setInitializeTime(CommonConstants.DASH); - controlData.setTerminateTime(CommonConstants.DASH); - - controlData.setParentName(input.getParentName()); - - controlData.setParentClassName(input.getParentClassName()); - controlData.setParentPointer(input.getParentPointer()); - - controlData.setChildName(input.getChildName()); - controlData.setPID(input.getPid()); - - StringBuilder childClassNameDemangling = new StringBuilder( - input.getChildClassName()); - - childClassNameDemangling.insert(0, "_Z");//$NON-NLS-1$ - String childClassName = SymbolManager - .demanglingFunctionName(childClassNameDemangling.toString()); - - controlData.setChildClassName(childClassName); - - controlData.setChildPointer(input.getChildPointer()); - - controlData.setControlType(input.getChildName()); - - controlData.setCalssKeyName(getClassName(input)); - return controlData; - } - - private boolean isExistData(String parentClassNam, String childClassName) { - if (getRemoveCallControlList() == null) { - return false; - } else { - int nSize = getRemoveCallControlList().size(); - for (int i = 0; i < nSize; i++) { - if (getRemoveCallControlList().get(i).equals(parentClassNam) - || getRemoveCallControlList().get(i).equals( - childClassName)) { - return true; - } - } - return false; - } - } - - private void addSortData(UIControlListData data) { - int nSize = getDataList().size(); - for (int i = 0; i < nSize; i++) { - if (data.getParentPointer() == 0) { - getDataList().add(0, data); - return; - } else if (getDataList().get(i).getChildPointer() == data - .getParentPointer()) { - getDataList().add(i + 1, data); - return; - } else if (getDataList().get(i).getParentPointer() == data - .getChildPointer()) { - int insertIndex = 0; - if (i - 1 < 0) { - insertIndex = 0; - } else { - insertIndex = i - 1; - } - getDataList().add(insertIndex, data); - return; - } - } - getDataList().add(data); - } - - private String getClassName(String apiName) { - String[] splitApiNameList = apiName.split(CommonConstants.DOUBLE_COLON); - String strApiName = CommonConstants.EMPTY; - if (splitApiNameList.length == 1) { - strApiName = splitApiNameList[0].trim(); - } else { - String clasName = splitApiNameList[1].trim(); - if (clasName.contains(CommonConstants.OPEN_BRACKET)) { - String[] splitClassNameList = clasName.split("\\(");//$NON-NLS-1$ - strApiName = splitClassNameList[0]; - } - } - return strApiName; - } - - public void notificationFromUserInterfaceFunctionProfilingDataChecker() { - if (controlList != null) { - setUIControlListTimeData(); - } - } - - private void setUIControlListTimeData() { - UIDataManager uiManager = UIDataManager.getInstance(); - List controlList = uiManager - .getfunctionProfilingDataChecker().getDataList(); - for (int i = 0; i < controlList.size(); i++) { - String[] splitProfilingList = controlList.get(i).getAPIName() - .split(CommonConstants.DOUBLE_COLON); - String strProfilingClassName = new String( - splitProfilingList[0].trim()); - String strProfilingAPIName = new String( - splitProfilingList[splitProfilingList.length - 1].trim()); - for (int j = 0; j < getDataList().size(); j++) { - if (getDataList().get(j).getChildClassName().trim() - .contains(strProfilingClassName)) { - if (i < controlList.size()) { - if (strProfilingAPIName.trim().contains( - "OnInitializing")) { //$NON-NLS-1$ - getDataList().get(j).setInitializeTime( - controlList.get(i).getExclElapsedTime()); - } else if (strProfilingAPIName.trim().contains( - "OnTerminating")) { //$NON-NLS-1${ - getDataList().get(j).setTerminateTime( - controlList.get(i).getExclElapsedTime()); - } - } - } - } - } - } - - private String getDemanglingName(String uiClassName) { - String demangleName = CommonConstants.EMPTY; - StringBuilder childClassNameDemangling = new StringBuilder(uiClassName); - if (childClassNameDemangling.indexOf("_Z") != 0) {//$NON-NLS-1$ - childClassNameDemangling.insert(0, "_Z");//$NON-NLS-1$ - demangleName = SymbolManager - .demanglingFunctionName(childClassNameDemangling.toString()); - } - return demangleName; - } - - public String getClassName(ControlData dataFormat) { - String apiName = dataFormat.getApiName(); - if (apiName.contains("AddFrame")) {//$NON-NLS-1$ - String className = dataFormat.getChildClassName(); - return getDemanglingName(className); - } - String controlTyp = dataFormat.getChildName(); - - String className = CommonConstants.EMPTY; - if (controlTyp.contains("Panel") || controlTyp.contains("Form")) {//$NON-NLS-1$//$NON-NLS-2$ - className = dataFormat.getChildClassName(); - } else { - className = dataFormat.getParentClassName(); - } - return getDemanglingName(className); - } - - public List getDataList() { - if (null == controlList) { - controlList = new ArrayList(); - } - return controlList; - } - - public List getRemoveCallControlList() { - if (null == removeCallControlList) { - removeCallControlList = new ArrayList(); - } - return removeCallControlList; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListTable.java deleted file mode 100644 index 33e42b5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListTable.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.control; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.nebula.widgets.grid.GridColumn; -import org.eclipse.nebula.widgets.grid.GridItem; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.model.FilterProperty; -import org.tizen.dynamicanalyzer.model.TreeInput; -import org.tizen.dynamicanalyzer.project.ImageInfo; -import org.tizen.dynamicanalyzer.swap.model.data.ControlData; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingData; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; - -public class UIControlListTable extends DATreeComposite { - public boolean selfUpdate = false; - - public UIControlListTable(Composite parent, int compStyle, int tableStyle) { - super(parent, compStyle, tableStyle); - - table.addSelectionListener(new SelectionListener() { - - @Override - public void widgetSelected(SelectionEvent e) { - GridItem[] items = table.getSelection(); - if (items.length <= 0) { - return; - } - DATableDataFormat dataFormat = (DATableDataFormat) items[0].getData(); - ControlData data = (ControlData) dataFormat.getLogData(); - String className = UIDataManager.getInstance().getControlDataChecker() - .getClassName(data); - UIDataManager.getInstance().setTableSeleteClassName(className); - long time = getSnapsotForScene(className, data.getTime()); - - DASelectionData selData = new DASelectionData(UIPage.controlListViewID, time, 0, - items, table); - AnalyzerManager.getCurrentPage().updateView(selData); - - setSelfUpdate(true); - updateTree(); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - } - }); - - table.addMouseListener(new MouseListener() { - - @Override - public void mouseUp(MouseEvent e) { - // do nothing - } - - @Override - public void mouseDown(MouseEvent e) { - // do nothing - } - - @Override - public void mouseDoubleClick(MouseEvent e) { - GridItem[] items = (GridItem[]) table.getSelection(); - if (null == items || items.length == 0) { - return; - } - GridItem item = items[0]; - if (item.isExpanded()) { - setExpand(item, false); - } else { - setExpand(item, true); - } - setSelfUpdate(true); - updateTree(); - } - }); - } - - private long getSnapsotForScene(String className, long strTime) { - Long time = UIDataManager.getInstance().getFindScreenshotViewHashMap().get(className); - if (null == time) { - return strTime; - } - if (time == -1) { - time = strTime; - } - - ImageInfo lastimg = Global.getLeastImageInfoByTime(strTime); - if (lastimg == null) { - return strTime; - } else { - return lastimg.getTime(); - } - } - - @Override - public void setColumns(String[] columnNames) { - int size = columnNames.length; - for (int i = 0; i < size; i++) { - GridColumn column = new GridColumn(table, SWT.NONE); - column.setText(columnNames[i]); - if (isTree && i == 0) { - column.setTree(true); - } - column.setCellRenderer(new DATableCellRenderer()); - column.setHeaderRenderer(new DATableHeaderRenderer()); - - if (columnAlignment != null) { - if (columnAlignment.length > i) { - column.setAlignment(columnAlignment[i]); - } - } - - column.pack(); - - if (null != comparator && null != sortTypes) { - final int type = sortTypes[i]; - // final int sourceColumn = sourceColumns[i]; - final int columnIndex = i; - column.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - comparator.setType(type); - comparator.setColumn(columnIndex); - // comparator.setSourceColumn(sourceColumn); - comparator.reverseDirection(); - updateTree(); - } - }); - } - } - } - - public List difference(ArrayList base, - ArrayList target) { - @SuppressWarnings("unchecked") - ArrayList result = (ArrayList) base.clone(); - result.removeAll(target); - return result; - } - - private TreeInput makeInput(UIControlListData input) { - - DATableDataFormat tableData = new DATableDataFormat(input.getSequence()); - LogData inputData = input.getData(); - tableData.setLogData(inputData); - - tableData.setObject(input.getChildClassName()); - List text = new ArrayList(); - text.add(input.getChildClassName()); - text.add(input.getInitializeTime()); - text.add(input.getTerminateTime()); - text.add(input.getControlType()); - text.add(input.getPID()); - - TreeInput output = new TreeInput(); - output.setText(text); - output.setData(tableData); - - output.setParent(Long.toString(input.getParentPointer())); - output.setChild(Long.toString(input.getChildPointer())); - - String strSelectedClassname = UIDataManager.getInstance().getTableSeleteClassName(); - boolean isUpdate = true; - - if ((isSelfUpdate() == true) && (input.getControlType().trim().equals("Frame") == false)//$NON-NLS-1$ - && (input.getControlType().trim().equals("Form") == false)//$NON-NLS-1$ - && (input.getControlType().trim().equals("Panel") == false)) {//$NON-NLS-1$ - isUpdate = false; - } - if (strSelectedClassname.equals(input.getCalssKeyName()) && (isUpdate == true)) { - output.setSecondSelection(true); - } - return output; - } - - // !! recursive!! - public boolean makeChildTree(TreeInput nodeParent, TreeInput currentNode, int nNodeDepth) { - if (nodeParent.getChild().trim().equals(currentNode.getParent().trim())) { - nodeParent.getChildren().add(currentNode); - return true; - } else { - for (int i = 0; i < nodeParent.getChildren().size(); i++) { - if (makeChildTree(nodeParent.getChildren().get(i), currentNode, nNodeDepth++) == true) { - break; - } - } - } - return false; - } - - @Override - public List makeTreeInput() { - List controlList = UIDataManager.getInstance().getControlDataChecker() - .getDataList(); - List output = new ArrayList(); - int size = controlList.size(); - int nNodeDepth = 0; - for (int i = 0; i < size; i++) { - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (selectedPid != 0) { - String pid = controlList.get(i).getPID().trim(); - if (!pid.equals(Integer.toString(selectedPid))) { - continue; - } - } - // Logger.debug("sort " + i + " " - // +controlList.get(i).getDebugLog()); - TreeInput currentNode = makeInput(controlList.get(i)); - - if (isRootNode(controlList, i)) { - output.add(currentNode); - } else { // first Parent Node, Last Child Node - for (int j = 0; j < output.size(); j++) { - if (makeChildTree(output.get(j), currentNode, nNodeDepth++) == true) { - break; - } - } - } - - } - return output; - - } - - public boolean isRootNode(List controlList, int index) { - boolean isRootNode = true; - if (!controlList.get(index).getChildName().trim().equals("Frame")//$NON-NLS-1$ - && !controlList.get(index).getChildName().trim().equals("Form")) {//$NON-NLS-1$ - return false; - } - for (int i = 0; i < index; i++) { - if (controlList.get(i).getChildPointer() == (controlList.get(index).getParentPointer())) { - - isRootNode = false; - break; - } - } - return isRootNode; - } - - public boolean isSelfUpdate() { - return selfUpdate; - } - - public void setSelfUpdate(boolean update) { - selfUpdate = update; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListView.java deleted file mode 100644 index 608c735..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/control/UIControlListView.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.control; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.nl.UserInterfacePageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; - -public class UIControlListView extends DAViewComposite { - - UIDataManager tManager = UIDataManager.getInstance(); - - private String[] columnNames = { - UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_0, - UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_1, - UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_2, - UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_3, - UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_COLUMN_4 }; - private int[] columnSizes = { 250, 110, 110, 100, 70 }; - - UIControlListTable treeComp = null; - private boolean[] columnVisibility = { true, true, true, true, true, true }; - private int[] columnAlignment = { SWT.LEFT, SWT.RIGHT, SWT.RIGHT, SWT.LEFT, - SWT.RIGHT }; - int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NONE, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM }; - - public UIControlListView(Composite parent, int style) { - super(parent, style, true); - this.setLayout(new FillLayout()); - - setTitle(UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_NAME); - - Composite contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - contents.setLayout(new FillLayout()); - treeComp = new UIControlListTable(contents, SWT.NONE, SWT.SINGLE - | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); - /*** setTree set first!!! ***/ - treeComp.setTableName(UserInterfacePageLabels.USERINTERFACE_CONTROL_LIST_VIEW_NAME); - treeComp.setTree(true); - treeComp.setSortTypes(sortTypes); - treeComp.setColumnAlignment(columnAlignment); - treeComp.setColumns(columnNames); - treeComp.setColumnSize(columnSizes); - treeComp.setColumnVisibility(columnVisibility); - treeComp.setTableToolTipEnable(false); - treeComp.setTableToolTipListener(null); - - } - - @Override - public void updateView() { - treeComp.updateTree(); - } - - public void updateView(DAViewData data) { - if (data instanceof DASelectionData) { - DASelectionData selData = (DASelectionData) data; - - /* only ui page update */ - if (selData.getViewID().equals(UIPage.profilingViewID) - || selData.getViewID().equals(UIPage.sceneListViewID)) { - treeComp.setSelfUpdate(false); - treeComp.updateTree(); - } - } - - // other view selection occurred - treeComp.deselectAll(); - } - - @Override - public void clear() { - treeComp.clear(); - } - - @Override - public Control getControl() { - return treeComp; - } - -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingColumnGroupRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingColumnGroupRenderer.java deleted file mode 100644 index a827a22..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingColumnGroupRenderer.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.profiling; - -import org.eclipse.nebula.widgets.grid.GridColumnGroup; -import org.eclipse.nebula.widgets.grid.internal.DefaultColumnGroupHeaderRenderer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; - -public class UIFunctionProfilingColumnGroupRenderer extends - DefaultColumnGroupHeaderRenderer { - - int bottomMargin = 4; - - @Override - public boolean notify(int arg0, Point arg1, Object arg2) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void paint(GC gc, Object arg1) { - GridColumnGroup column = (GridColumnGroup) arg1; - gc.setBackground(ColorResources.TABLE_HEADER_BG); - Rectangle rect = getBounds(); - gc.fillRectangle(rect.x, rect.y, rect.width, rect.height); - gc.setForeground(ColorResources.TABLE_LINE); - gc.drawLine(rect.x - 1, rect.y, rect.x - 1, rect.y + rect.height); - gc.drawLine(rect.x - 1, rect.y - 1 + rect.height, rect.x + rect.width, - rect.y - 1 + rect.height); - gc.setForeground(ColorResources.TABLE_HEADER_FONT_COLOR); - gc.setFont(FontResources.TABLE_HEADER_FONT); - String inputText = column.getText(); - Point textSize = gc.textExtent(inputText, SWT.DRAW_MNEMONIC); - int textWidth = textSize.x; - int y = getBounds().y + getBounds().height - bottomMargin - - gc.getFontMetrics().getHeight(); - int x = rect.x + (rect.width - textWidth) / 2; - gc.drawString(inputText, x, y, true); - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingData.java deleted file mode 100644 index 4a4da8d..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingData.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.profiling; - -import java.util.ArrayList; - -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingData; -import org.tizen.dynamicanalyzer.utils.Formatter; - -public class UIFunctionProfilingData { - public static final int USER_INTERFACE_PROFILING_LIST_API_NAME = 0; - public static final int USER_INTERFACE_PROFILING_LIST_EXCL_CPU_TIME = 1; - public static final int USER_INTERFACE_PROFILING_LIST_INCL_CPU_TIME = 2; - public static final int USER_INTERFACE_PROFILING_LIST_INCL_ESAPSED_TIME = 3; - public static final int USER_INTERFACE_PROFILING_LIST_EXCL_ESAPSED_TIME = 4; - public static final int USER_INTERFACE_PROFILING_LIST_EXCL_CPU_AVG_TIME = 5; - public static final int USER_INTERFACE_PROFILING_LIST_INCL_CPU_AVG_TIME = 6; - public static final int USER_INTERFACE_PROFILING_LIST_INCL_ESAPSED_AVG_TIME = 7; - public static final int USER_INTERFACE_PROFILING_LIST_EXCL_ESAPSED_AVG_TIME = 8; - public static final int USER_INTERFACE_PROFILING_DATABLEDATAFORMAT_CLASSNAME_INDEX = 10; - - private String strClassKeyName = null; - private int strUIFunctionDataID = -1; - private int pid = -1; - private long longTime = -1; - private String strKey = null; - - private String strAPIName = null; - private String strExclCPUTime = null; - private String strInclCPUTime = null; - private String strInclElapsedTime = null; - private String strExclElapsedTime = null; - private String strExclCPUAvgTime = null; - private String strInclCPUAvgTime = null; - private String strInclElapsedAvgTime = null; - private String strExclElapsedAvgTime = null; - - private String strParent = null; - private String strTreeKey = null; - - private LogData data = null; - - private ArrayList profilingData = new ArrayList(); - - public UIFunctionProfilingData(String[] input) { - } - - public UIFunctionProfilingData(LogData input) { - data = input; - } - - public UIFunctionProfilingData(ProfilingData input) { - if (null != input) { - profilingData.add(input); - } - } - - public ArrayList getProfilingData() { - return profilingData; - } - - public UIFunctionProfilingData() { - } - - public LogData getData() { - return data; - } - - public void setUIFunctionDataID(int data) { - strUIFunctionDataID = data; - } - - public int getUIFunctionDataID() { - return strUIFunctionDataID; - } - - public void setClassKeyName(String data) { - strClassKeyName = data; - } - - public String getClassKeyName() { - if (strClassKeyName == null) { - strClassKeyName = CommonConstants.EMPTY; - } - return strClassKeyName; - } - - public void setKey(String data) { - strKey = data; - } - - public String getKey() { - if (strKey == null) { - strKey = CommonConstants.EMPTY; - } - return strKey; - } - - public void setTime(long data) { - longTime = data; - } - - public String getTime() { - return Formatter.toTimeFormat(longTime); - } - - public void setParent(String data) { - strParent = data; - } - - public String getParent() { - if (strParent == null) { - strParent = CommonConstants.EMPTY; - } - return strParent; - } - - public void setTreeKey(String data) { - strTreeKey = data; - } - - public String getTreeKey() { - if (strTreeKey == null) { - strTreeKey = CommonConstants.EMPTY; - } - return strTreeKey; - } - - public void setAPIName(String data) { - strAPIName = data; - } - - public String getAPIName() { - if (strAPIName == null) { - strAPIName = CommonConstants.EMPTY; - } - return strAPIName; - } - - public void setExclCPUTime(String data) { - strExclCPUTime = data; - } - - public String getExclCPUTime() { - if (strExclCPUTime == null) { - strExclCPUTime = CommonConstants.EMPTY; - } - return strExclCPUTime; - } - - public void setExclCPUAvgTime(String data) { - strExclCPUAvgTime = data; - } - - public String getExclCPUAvgTime() { - if (strExclCPUAvgTime == null) { - strExclCPUAvgTime = CommonConstants.EMPTY; - } - return strExclCPUAvgTime; - } - - public void setInclCPUTime(String data) { - strInclCPUTime = data; - } - - public String getInclCPUTime() { - if (strInclCPUTime == null) { - strInclCPUTime = CommonConstants.EMPTY; - } - return strInclCPUTime; - } - - public void setInclCPUAvgTime(String data) { - strInclCPUAvgTime = data; - } - - public String getInclCPUAvgTime() { - if (strInclCPUAvgTime == null) { - strInclCPUAvgTime = CommonConstants.EMPTY; - } - return strInclCPUAvgTime; - } - - public void setInclElapsedTime(String data) { - strInclElapsedTime = data; - } - - public String getInclElapsedTime() { - if (strInclElapsedTime == null) { - strInclElapsedTime = CommonConstants.EMPTY; - } - return strInclElapsedTime; - } - - public void setInclElapsedAvgTime(String data) { - strInclElapsedAvgTime = data; - } - - public String getInclElapsedAvgTime() { - if (strInclElapsedAvgTime == null) { - strInclElapsedAvgTime = CommonConstants.EMPTY; - } - return strInclElapsedAvgTime; - } - - public void setExclElapsedTime(String data) { - strExclElapsedTime = data; - } - - public String getExclElapsedTime() { - if (strExclElapsedTime == null) { - strExclElapsedTime = CommonConstants.EMPTY; - } - return strExclElapsedTime; - } - - public void setExclElapsedAvgTime(String data) { - strExclElapsedAvgTime = data; - } - - public String getExclElapsedAvgTime() { - if (strExclElapsedAvgTime == null) { - strExclElapsedAvgTime = CommonConstants.EMPTY; - } - return strExclElapsedAvgTime; - } - - public int getPid() { - return pid; - } - - public void setPid(int pid) { - this.pid = pid; - } - -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingDataChecker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingDataChecker.java deleted file mode 100644 index d0e2218..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingDataChecker.java +++ /dev/null @@ -1,448 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.profiling; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.TreeSet; - -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.path.PathManager; -import org.tizen.dynamicanalyzer.communicator.DACommunicator; -import org.tizen.dynamicanalyzer.communicator.DeviceNotFoundException; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.setting.SettingDataManager; -import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingData; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.util.CommonUtil; -import org.tizen.dynamicanalyzer.util.Logger; -import org.tizen.dynamicanalyzer.utils.Formatter; - -public class UIFunctionProfilingDataChecker { - List profilingList; - static private TreeSet userInterfaceFunctionTree = new TreeSet(); - - static boolean InitUIApiList = false; - static List isUiApiCheckList = new ArrayList(); - static final String UI_API_TRUE = "true";//$NON-NLS-1$ - static final String UI_API_FALSE = "false";//$NON-NLS-1$ - static int nUserProfilingDataCount = 0; - - public boolean addProfilingData(ProfilingData input) { - - getUIApiListFile(); - boolean bTreeSearch = userInterfaceFunctionTree.contains(makeTreeSetData(input.getName())); - if (bTreeSearch) { // Find Same Api name - - int nChangedIndex = 0; - boolean bUpdateData = false; - - if (!existRootData(input)) { - makeRootParentData(input); - } - - int nListSize = getDataList().size(); - for (int i = 0; i < nListSize; i++) { - String apiName = getDataList().get(i).getAPIName(); - if ((apiName != null) && (apiName.equals(input.getName()))) { - getDataList().remove(i); - nChangedIndex = i; - bUpdateData = true; - break; - } - } - - UIFunctionProfilingData pd = new UIFunctionProfilingData(); - int pid = input.getProfileDataMaker().getPid(); - ProfileDataMaker profiler = FunctionUsageProfiler.getInstance() - .getProfileDataMakerByPid(pid); - String exTime = CommonConstants.DASH, inTime = CommonConstants.DASH, exeTime = CommonConstants.DASH, inExeTime = CommonConstants.DASH, exAvgTime = CommonConstants.DASH, inAvgTime = CommonConstants.DASH, exeAvgTime = CommonConstants.DASH, inExeAvgTime = CommonConstants.DASH; - try { - exTime = profiler.getCpuTime(input, true); - exAvgTime = getAvgTime(Integer.parseInt(exTime), input.getCallCount(), 2); - exTime = Formatter.toTimeFormat2(exTime); - - inTime = profiler.getCpuTime(input, false); - inAvgTime = getAvgTime(Integer.parseInt(inTime), input.getCallCount(), 2); - inTime = Formatter.toTimeFormat2(inTime); - exeTime = Formatter.toTimeFormat4(input.getElapsedTime()); - exeAvgTime = getAvgTime(input.getElapsedTime(), input.getCallCount(), 1); - inExeTime = Formatter.toTimeFormat4(input.getExclusiveElapsedTime()); - inExeAvgTime = getAvgTime(input.getExclusiveElapsedTime(), input.getCallCount(), 1); - } catch (NumberFormatException e) { - Logger.exception(e); - } - - pd.setPid(input.getProfileDataMaker().getPid()); - pd.setUIFunctionDataID(input.getProfilingDataID()); - pd.setKey(input.getKey()); - pd.setAPIName(input.getName()); - pd.setExclCPUTime(exTime); - pd.setInclCPUTime(inTime); - pd.setInclElapsedTime(exeTime); - pd.setExclElapsedTime(inExeTime); - pd.setExclCPUAvgTime(exAvgTime); - pd.setInclCPUAvgTime(inAvgTime); - pd.setInclElapsedAvgTime(exeAvgTime); - pd.setExclElapsedAvgTime(inExeAvgTime); - pd.setParent(input.getParent()); - // TODO: ProfilingData.getSaveData is deprecated, below code must be fixed. - // pd.setCalssKeyName(getClassName(input.getSaveData())); // index 10; - - if (bUpdateData == true) { - getDataList().add(nChangedIndex, pd); - } else { - getDataList().add(pd); - } - return true; - } else { - return false; - } - } - - public UIFunctionProfilingDataChecker() { - getUIApiListFile(); - } - - public synchronized List getDataList() { - if (null == profilingList) { - profilingList = new ArrayList(); - } - return profilingList; - } - - public void updateUIApiTreeSet() { - List pids = FunctionUsageProfiler.getInstance().getPidsOfProfileDataMakerMap(); - for (int i = 0; i < pids.size(); i++) { - ProfileDataMaker profiler = FunctionUsageProfiler.getInstance() - .getProfileDataMakerByPid(pids.get(i)); - if (profiler.getAppBin() == null) { - return; - } - List children = profiler.getAppBin().getChildList().get(0) - .getChildList(); - int size = children.size(); - getUIApiListFile(); - for (int j = 0; j < size; j++) { - if (j >= isUiApiCheckList.size()) { - isUiApiCheckList.add(j, UI_API_TRUE); - } - if (isUiApiCheckList.get(j).equals(UI_API_TRUE)) { - ProfilingData data = children.get(j); - if (addProfilingData(data)) { - isUiApiCheckList.add(j, UI_API_TRUE); - } else { - isUiApiCheckList.add(j, UI_API_FALSE); - } - } - } - UIDataManager tManager = UIDataManager.getInstance(); - tManager.getControlDataChecker() - .notificationFromUserInterfaceFunctionProfilingDataChecker(); - } - } - - public void cleanUIProfilingMemberData() { - isUiApiCheckList = null; - isUiApiCheckList = new ArrayList(); - nUserProfilingDataCount = 0; - } - - private String getAvgTime(long nTime, int nCount, int nType) { - String strRetrun = "00.000";//$NON-NLS-1$ - long time = -1; - if (nTime == 0) { - return strRetrun; - } else if (nCount == 0) { - time = nTime; - } else { - // avg exe time - time = (nTime / nCount); - } - if (nType == 1) { - strRetrun = Formatter.toTimeFormat4(time); - } else { - strRetrun = Formatter.toTimeFormat2(time); - } - return strRetrun; - } - - public boolean existRootData(ProfilingData input) { - boolean existRootData = false; - for (UIFunctionProfilingData data : getDataList()) { - if (data.getAPIName().equals(input.getParent())) { - existRootData = true; - break; - } - } - return existRootData; - } - - private void makeRootParentData(ProfilingData input) { - UIFunctionProfilingData pd = new UIFunctionProfilingData(); - String exTime = CommonConstants.DASH, inTime = CommonConstants.DASH, exeTime = CommonConstants.DASH, inExeTime = CommonConstants.DASH, exAvgTime = CommonConstants.DASH, inAvgTime = CommonConstants.DASH, exeAvgTime = CommonConstants.DASH, inExeAvgTime = CommonConstants.DASH; - pd.setPid(input.getProfileDataMaker().getPid()); - pd.setUIFunctionDataID(0); - pd.setKey(input.getKey()); - pd.setAPIName(input.getParent()); - pd.setParent(CommonConstants.EMPTY); - pd.setExclCPUTime(exTime); - pd.setInclCPUTime(inTime); - pd.setInclElapsedTime(exeTime); - pd.setExclElapsedTime(inExeTime); - pd.setExclCPUAvgTime(exAvgTime); - pd.setInclCPUAvgTime(inAvgTime); - pd.setInclElapsedAvgTime(exeAvgTime); - pd.setExclElapsedAvgTime(inExeAvgTime); - getDataList().add(pd); - } - - private UIFunctionProfilingTreeSetData makeTreeSetData(String inputData) { - UIFunctionProfilingTreeSetData returnData = null; - if (inputData.contains(CommonConstants.OPEN_BRACKET)) { - String[] splitInpuDataList = inputData.split("\\("); //$NON-NLS-1$ - String strApiName = null; - - String[] splitApiNameAndReturnValues = splitInpuDataList[0] - .split(CommonConstants.SPACE); - - if (splitApiNameAndReturnValues[splitApiNameAndReturnValues.length - 1] - .contains(CommonConstants.DOUBLE_COLON)) { - - String[] apiNameList = splitApiNameAndReturnValues[splitApiNameAndReturnValues.length - 1] - .split(CommonConstants.DOUBLE_COLON); - strApiName = new String(apiNameList[apiNameList.length - 1].trim()); - } else { - strApiName = new String( - splitApiNameAndReturnValues[splitApiNameAndReturnValues.length - 1].trim()); - } - String strParameter = new String(splitInpuDataList[splitInpuDataList.length - 1].trim()); - if (strParameter.contains(CommonConstants.COMMA)) { - String[] splitParameterList = strParameter.split(CommonConstants.COMMA); - returnData = new UIFunctionProfilingTreeSetData(strApiName, splitParameterList); - } else { - String[] splitParameterList = strParameter.split("\\)"); //$NON-NLS-1$ - if (strParameter.contains("void")) {//$NON-NLS-1$ - returnData = new UIFunctionProfilingTreeSetData(strApiName, null); - } else if (splitParameterList.length == 0) { - returnData = new UIFunctionProfilingTreeSetData(strApiName, null); - } else { - returnData = new UIFunctionProfilingTreeSetData(strApiName, splitParameterList); - } - } - } else { - returnData = new UIFunctionProfilingTreeSetData(inputData, null); - } - return returnData; - } - - private void getUIApiListFile() { - if (InitUIApiList == false) { - InitUIApiList = true; - } else { - return; - } - - boolean isEmulator = false; - try { - if (!DACommunicator.isEmulator()) { - isEmulator = true; - } - } catch (DeviceNotFoundException e1) { - // this exception is occurred, if 'open' save file and device is not connected - Logger.warning("Device is not found"); - // do not return, assume device is emulator - } - - String platform = SettingDataManager.INSTANCE.getPlatform(); - if (platform == null) { - return; - } - - String sourcePath = PathManager.getTizenHeaderPath(isEmulator, platform); - File sourceFolder = new File(sourcePath); - if (!sourceFolder.exists() && !sourceFolder.isDirectory()) { - Logger.debug("Not Found the tizen_header_file folder : " + sourcePath); - return; - } - - String uiFileOptionList = null; - String uiApiOptionList = null; - String uiOptionList = getUIApiOptionList(); - if (uiOptionList == null) { - return; - } - if (uiOptionList.contains(CommonConstants.SEMICOLON) == false) { - return; - } - String[] splitInpuDataList = uiOptionList.split(CommonConstants.SEMICOLON); - for (int i = 0; i < splitInpuDataList.length; i++) { - if (splitInpuDataList[i].contains("file")) {//$NON-NLS-1$ - if (splitInpuDataList[i].contains(CommonConstants.DOUBLE_COLON) == false) { - return; - } - String[] splitDataList = splitInpuDataList[i].split(CommonConstants.DOUBLE_COLON); - uiFileOptionList = splitDataList[splitDataList.length - 1]; - } else { - if (splitInpuDataList[i].contains(CommonConstants.DOUBLE_COLON) == false) { - return; - } - String[] splitDataList = splitInpuDataList[i].split(CommonConstants.DOUBLE_COLON); - uiApiOptionList = splitDataList[splitDataList.length - 1]; - } - } - - if (uiFileOptionList == null) { - return; - } - if (uiFileOptionList.contains(AnalyzerConstants.DATA_PARSING_TOKEN) == false) { - return; - } - String[] splitUiFileOptionList = uiFileOptionList - .split(AnalyzerConstants.DATA_PARSING_TOKEN); - if (uiApiOptionList == null) { - return; - } - if (uiApiOptionList.contains(AnalyzerConstants.DATA_PARSING_TOKEN) == false) { - return; - } - String[] splitUiApiOptionList = uiApiOptionList.split(AnalyzerConstants.DATA_PARSING_TOKEN); - - File[] files = sourceFolder.listFiles(); - if (files == null) { - return; - } - String filename = null; - int filelength = files.length; - for (int i = 0; i < filelength; i++) { - filename = files[i].getName(); - if (isOptionValue(splitUiFileOptionList, filename)) { - // Logger.debug("ui filename : "+filename); - BufferedReader in = null; - String content; - try { - in = new BufferedReader(new FileReader(files[i])); - String strInputData; - while (null != (content = in.readLine())) { - if (!content.equals(CommonConstants.EMPTY)) { - strInputData = content.trim(); - if (strInputData.startsWith("virtual")) {//$NON-NLS-1$ - if (isOptionValue(splitUiApiOptionList, strInputData)) { - userInterfaceFunctionTree.add(makeTreeSetData(strInputData)); - // Logger.debug("- ui header : "+strInputData); - } - } - } - } - } catch (FileNotFoundException e) { - Logger.exception(e); - } catch (IOException e) { - Logger.exception(e); - } finally { - CommonUtil.tryClose(in); - } - } - } - } - - private boolean isOptionValue(String[] optionList, String strCmp) { - boolean bSucces = true; - for (int j = 0; j < optionList.length; j++) { - if (optionList[j].contains(CommonConstants.PLUS)) { - int chartIndex = optionList[j].indexOf(CommonConstants.PLUS); - String uiAddOption = optionList[j].substring(chartIndex + 1).trim(); - if (strCmp.contains(uiAddOption)) { - bSucces = true; - } else { - bSucces = false; - break; - } - } else { - int chartIndex = optionList[j].indexOf(CommonConstants.DASH); - String uiMinusOption = optionList[j].substring(chartIndex + 1).trim(); - if (strCmp.contains(uiMinusOption)) { - bSucces = false; - } - } - } - return bSucces; - } - - private String getUIApiOptionList() { - String uiApiOptionList = null; - ; - String configFileName = AnalyzerConstants.USER_INTERFACE_API_LIST_FILE_NAME; - File configFolder = new File(PathManager.DA_CONFIG_FOLDER_PATH); - if (!configFolder.isDirectory()) { - Logger.debug("Not Exist UI API List Option Path "); - return CommonConstants.EMPTY; - } - File apiListFile = new File(configFolder, configFileName); - if (!apiListFile.isFile()) { - Logger.debug("Not Exist UI API List Option File"); - return CommonConstants.EMPTY; - } else { - BufferedReader in = null; - String content; - try { - in = new BufferedReader(new FileReader(apiListFile)); - StringBuffer inputData = new StringBuffer(); - while (null != (content = in.readLine())) { - if (!content.equals(CommonConstants.EMPTY)) { - inputData.append(content); - } - } - uiApiOptionList = inputData.toString(); - } catch (FileNotFoundException e) { - Logger.exception(e); - } catch (IOException e) { - Logger.exception(e); - } finally { - CommonUtil.tryClose(in); - } - } - return uiApiOptionList; - } - - @SuppressWarnings("unused") - private String getClassName(List dataFormat) { - String[] splitApiNameList = dataFormat.get(2).split(CommonConstants.DOUBLE_COLON); - if (splitApiNameList.length - 2 < 0) { - return CommonConstants.EMPTY; - } - String className = new String(splitApiNameList[splitApiNameList.length - 2].trim()); - return className; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTable.java deleted file mode 100644 index 6885588..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTable.java +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.profiling; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.nebula.widgets.grid.Grid; -import org.eclipse.nebula.widgets.grid.GridColumn; -import org.eclipse.nebula.widgets.grid.GridColumnGroup; -import org.eclipse.nebula.widgets.grid.GridItem; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.model.ColumnData; -import org.tizen.dynamicanalyzer.model.FilterProperty; -import org.tizen.dynamicanalyzer.model.TreeInput; -import org.tizen.dynamicanalyzer.nl.UserInterfacePageLabels; -import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingData; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATreeComposite; -import org.tizen.dynamicanalyzer.ui.widgets.table.TreeDataComparator; - -public class UIFunctionProfilingTable extends DATreeComposite { - public UIFunctionProfilingTable(Composite parent, int compStyle, - int tableStyle) { - super(parent, compStyle, tableStyle); - setComparator(new TreeDataComparator()); - - comparator.setType(AnalyzerConstants.SORT_TYPE_NUM); - comparator.setColumn(2); - comparator.reverseDirection(); - - table.addSelectionListener(new SelectionListener() { - - @Override - public void widgetSelected(SelectionEvent e) { - GridItem[] items = table.getSelection(); - if (items.length <= 0) { - return; - } - DATableDataFormat dataFormat = (DATableDataFormat) items[0] - .getData(); - String className = (String) dataFormat.getData().get( - dataFormat.getData().size() - 1); - UIDataManager.getInstance().setTableSeleteClassName(className); - - DASelectionData selData = new DASelectionData( - UIPage.profilingViewID, 0, 0, items, table); - AnalyzerManager.getCurrentPage().updateView(selData); - updateTree(); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - } - }); - - table.addMouseListener(new MouseListener() { - - @Override - public void mouseUp(MouseEvent e) { - // do nothing - } - - @Override - public void mouseDown(MouseEvent e) { - // do nothing - } - - @Override - public void mouseDoubleClick(MouseEvent e) { - GridItem[] items = (GridItem[]) table.getSelection(); - if (null == items || items.length == 0) { - return; - } - GridItem item = items[0]; - if (item.isExpanded()) { - setExpand(item, false); - } else { - setExpand(item, true); - } - updateTree(); - } - }); - } - - public void setColumns(List columnData) { - int size = columnData.size(); - int index = 0; - for (int i = 0; i < size; i++) { - if (columnData.get(i).isParent()) { - GridColumnGroup columnGroup = new GridColumnGroup(table, - SWT.NONE); - columnGroup - .setHeaderRenderer(new UIFunctionProfilingColumnGroupRenderer()); - columnGroup.setText(columnData.get(i).getText()); - List children = columnData.get(i).getChildren(); - int childSize = children.size(); - for (int ii = 0; ii < childSize; ii++) { - createColumn(columnGroup, children.get(ii), index++); - } - } else { - createColumn(table, columnData.get(i), index++); - } - } - } - - private void createColumn(Object parent, ColumnData columnData, int index) { - GridColumn column = null; - if (parent instanceof GridColumnGroup) { - GridColumnGroup group = (GridColumnGroup) parent; - column = new GridColumn(group, SWT.NONE); - } else { - Grid table = (Grid) parent; - column = new GridColumn(table, SWT.NONE); - } - - column.setCellRenderer(new DATableCellRenderer()); - column.setHeaderRenderer(new DATableHeaderRenderer()); - column.setText(columnData.getText()); - if (columnAlignment != null) { - if (columnAlignment.length > index) { - column.setAlignment(columnAlignment[index]); - } - } - if (columnData.getWidth() == 0) { - column.pack(); - } else { - column.setWidth(columnData.getWidth()); - } - if (isTree && index == 0) { - column.setTree(true); - } - - if (null != comparator && null != sortTypes) { - final int type = sortTypes[index]; - final int columnIndex = index; - column.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - comparator.setType(type); - comparator.setColumn(columnIndex); - comparator.reverseDirection(); - updateTree(); - } - }); - } - } - - public List difference(ArrayList base, - ArrayList target) { - @SuppressWarnings("unchecked") - ArrayList result = (ArrayList) base - .clone(); - result.removeAll(target); - return result; - } - - private TreeInput makeInput(UIFunctionProfilingData input) { - - DATableDataFormat tableData = new DATableDataFormat(input.getUIFunctionDataID()); - List inputData = new ArrayList(); - - // make input data - inputData.add(Integer.toString(input.getUIFunctionDataID())); - inputData.add(input.getAPIName()); - inputData.add(input.getInclElapsedTime()); - inputData.add(input.getInclElapsedAvgTime()); - inputData.add(input.getExclElapsedTime()); - inputData.add(input.getExclElapsedAvgTime()); - inputData.add(input.getInclCPUTime()); - inputData.add(input.getInclCPUAvgTime()); - inputData.add(input.getExclCPUTime()); - inputData.add(input.getExclCPUAvgTime()); - inputData.add(input.getClassKeyName()); - - tableData.getData().addAll(inputData); - if (input.getParent().equals(CommonConstants.EMPTY)) { - tableData.setObject(input.getAPIName() + CommonConstants.SPACE - + CommonConstants.OPEN_BRACKET - + UserInterfacePageLabels.PID + input.getPid() - + CommonConstants.CLOSE_BRACKET); - } else { - tableData.setObject(input.getAPIName()); - } - - List text = new ArrayList(); - text.add(input.getAPIName()); - text.add(input.getInclElapsedTime()); - text.add(input.getInclElapsedAvgTime()); - text.add(input.getExclElapsedTime()); - text.add(input.getExclElapsedAvgTime()); - text.add(input.getInclCPUTime()); - text.add(input.getInclCPUAvgTime()); - text.add(input.getExclCPUTime()); - text.add(input.getExclCPUAvgTime()); - - TreeInput output = new TreeInput(); - output.setText(text); - output.setData(tableData); - - String strSelectedClassname = UIDataManager.getInstance() - .getTableSeleteClassName(); - if (strSelectedClassname.equals(input.getClassKeyName())) { - output.setSecondSelection(true); - } - return output; - } - - // !! recursive!! - public boolean makeChildTree(TreeInput nodeParent, TreeInput currentNode, - int nNodeDepth) { - String strParentName = nodeParent.getText().get( - UIFunctionProfilingData.USER_INTERFACE_PROFILING_LIST_API_NAME); - if (currentNode.getParent().trim().equals(strParentName)) { - nodeParent.getChildren().add(currentNode); - return true; - } else { - for (int i = 0; i < nodeParent.getChildren().size(); i++) { - if (makeChildTree(nodeParent.getChildren().get(i), currentNode, - nNodeDepth++) == true) { - break; - } - } - } - return false; - } - - @Override - public List makeTreeInput() { - UIDataManager tManager = UIDataManager.getInstance(); - List controlList = tManager - .getfunctionProfilingDataChecker().getDataList(); - List output = new ArrayList(); - int size = controlList.size(); - int nNodeDepth = 0; - for (int i = 0; i < size; i++) { - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (selectedPid != 0) { - int pid = controlList.get(i).getPid(); - - if (pid != selectedPid) { - continue; - } - } - - TreeInput currentNode = makeInput(controlList.get(i)); - currentNode.setParent(controlList.get(i).getParent()); - if (controlList.get(i).getParent().equals(CommonConstants.EMPTY)) { - output.add(currentNode); - } else { - for (int j = 0; j < output.size(); j++) { - if (makeChildTree(output.get(j), currentNode, nNodeDepth++) == true) { - break; - } - } - } - } - return output; - - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTreeSetData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTreeSetData.java deleted file mode 100644 index 6b04625..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingTreeSetData.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.profiling; - -public class UIFunctionProfilingTreeSetData implements Comparable { - private String apiName = null; - private String[] parameter = null; - private int nParameterlength = 0; - - public UIFunctionProfilingTreeSetData(String apiName, String[] parameter) { - this.apiName = apiName; - if (parameter == null) { - this.parameter = null; - this.nParameterlength = 0; - } else { - this.parameter = parameter; - this.nParameterlength = parameter.length; - } - } - - @Override - public int compareTo(UIFunctionProfilingTreeSetData op) { - // Logger.debug("op.apiName.trim() : " + op.apiName.trim()); - if (apiName.trim().equals(op.apiName.trim())) { - if (nParameterlength == op.nParameterlength) { - for (int i = 0; i < nParameterlength; i++) { - if (parameter[i].trim().equals(op.parameter[i].trim())) { - continue; - } else { - return 1; - } - } - return 0; - } else { - if (nParameterlength > op.nParameterlength) { - return 1; - } else { - return -1; - } - } - } else { - return apiName.trim().compareTo(op.apiName.trim()); - } - } - - @Override - public String toString() { - return String.format("%s|%d", apiName, nParameterlength); - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingView.java deleted file mode 100644 index 1a1147e..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/profiling/UIFunctionProfilingView.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.profiling; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.model.ColumnData; -import org.tizen.dynamicanalyzer.nl.UserInterfacePageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; - -public class UIFunctionProfilingView extends DAViewComposite { - List columnData = null; - - private String[] columnNames = { - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_0, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_1, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_2, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_3, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_4, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_5, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_6, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_7, - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_COLUMN_8 }; - private int[] columnSizes = { 355, 80, 80, 80, 80, 80, 80, 80, 80 }; - private int[] columnAlignment = { SWT.LEFT, SWT.RIGHT, SWT.RIGHT, - SWT.RIGHT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT, SWT.RIGHT }; - UIFunctionProfilingTable treeComp = null; - private boolean[] columnVisibility = { true, true, true, true, true, true, - true, true, true }; - int[] sortTypes = { AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING }; - - public UIFunctionProfilingView(Composite parent, int style) { - super(parent, style, true); - this.setLayout(new FillLayout()); - - setTitle(UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_NAME); - - Composite contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - contents.setLayout(new FillLayout()); - treeComp = new UIFunctionProfilingTable(contents, SWT.NONE, SWT.SINGLE - | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - /*** setTree set first!!! ***/ - treeComp.setTree(true); - treeComp.setSortTypes(sortTypes); - treeComp.setColumnAlignment(columnAlignment); - createColumnData(); - treeComp.setColumns(columnData); - treeComp.setColumnSize(columnSizes); - treeComp.setColumnVisibility(columnVisibility); - treeComp.setTableToolTipEnable(false); - treeComp.setTableName(UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_NAME); - } - - private void createColumnData() { - int columnIndex = 0; - columnData = new ArrayList(); - ColumnData data0 = new ColumnData(columnNames[columnIndex++]); - columnData.add(data0); - - ColumnData dataInc1 = new ColumnData( - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_INCLUSIVE_ELAPSED_TIME); - ColumnData dataInc1Child1 = new ColumnData(columnNames[columnIndex++]); - ColumnData dataInc1Child2 = new ColumnData(columnNames[columnIndex++]); - dataInc1.getChildren().add(dataInc1Child1); - dataInc1.getChildren().add(dataInc1Child2); - columnData.add(dataInc1); - - ColumnData dataExc1 = new ColumnData( - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_EXCLUSIVE_ELAPSED_TIME); - ColumnData dataExc1Child1 = new ColumnData(columnNames[columnIndex++]); - ColumnData dataExc1Child2 = new ColumnData(columnNames[columnIndex++]); - dataExc1.getChildren().add(dataExc1Child1); - dataExc1.getChildren().add(dataExc1Child2); - columnData.add(dataExc1); - - ColumnData dataInc2 = new ColumnData( - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_INCLUSIVE_CPU_TIME); - ColumnData dataInc2Child1 = new ColumnData(columnNames[columnIndex++]); - ColumnData dataInc2Child2 = new ColumnData(columnNames[columnIndex++]); - dataInc2.getChildren().add(dataInc2Child1); - dataInc2.getChildren().add(dataInc2Child2); - columnData.add(dataInc2); - - ColumnData dataExc2 = new ColumnData( - UserInterfacePageLabels.USERINTERFACE_UIFUNCTIONPROFILING_LIST_VIEW_EXCLUSIVE_CPU_TIME); - ColumnData dataExc2Child1 = new ColumnData(columnNames[columnIndex++]); - ColumnData dataExc2Child2 = new ColumnData(columnNames[columnIndex++]); - dataExc2.getChildren().add(dataExc2Child1); - dataExc2.getChildren().add(dataExc2Child2); - columnData.add(dataExc2); - } - - @Override - public void updateView() { - treeComp.updateTree(); - } - - @Override - public void updateView(DAViewData data) { - if (data instanceof DASelectionData) { - DASelectionData selData = (DASelectionData) data; - - /* only ui page update */ - if (selData.getViewID().equals(UIPage.controlListViewID) - || selData.getViewID().equals(UIPage.sceneListViewID)) { - treeComp.updateTree(); - } - } - - // other view selection occurred - treeComp.deselectAll(); - } - - @Override - public void clear() { - treeComp.clear(); - UIDataManager.getInstance().getfunctionProfilingDataChecker() - .cleanUIProfilingMemberData(); - } - - @Override - public Control getControl() { - return treeComp; - } -} \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneData.java deleted file mode 100644 index ecd99f5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneData.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.scene; - -import org.tizen.dynamicanalyzer.common.SymbolManager; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.data.LogData; -import org.tizen.dynamicanalyzer.utils.Formatter; - -public class UISceneData { - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LISTL_SCENE_NAME = 0; - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LIST_TIME = 1; - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LIST_PID = 2; - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LIST_FORM_NAME = 3; - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LIST_PANEL_NAME = 4; - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LIST_TRANSFORM_TIME = 5; - public static final int USER_INTERFACE_SCENE_TRANSFORMS_LIST_DATABLEDATAFORMAT_CLASSNAME_INDEX = 21; - - private String strCalssKeyName = null; - private long strSequence = -1; - private int strPID = -1; - private long strTime = -1; - private String strSceneName = null; - private String strTransformTime = null; - private String strFormName = null; - private String strPanelName = null; - - private LogData data; - - public UISceneData(LogData sceneLoginput) { - if (null != sceneLoginput) { - data = sceneLoginput; - } - } - - public LogData getData() { - return data; - } - - public void setSequence(long data) { - strSequence = data; - } - - public long getSequence() { - return strSequence; - } - - public void setCalssKeyName(String data) { - strCalssKeyName = data; - } - - public String getCalssKeyName() { - if (strCalssKeyName == null) { - strCalssKeyName = CommonConstants.EMPTY; - } - return strCalssKeyName; - } - - public void setTime(long data) { - strTime = data; - } - - public String getTime() { - return Formatter.toTimeFormat(strTime); - } - - public void setSceneName(String data) { -// strSceneName = getDemanglingName(data); - strSceneName = data; - } - - public String getSceneName() { - if (strSceneName == null - || strSceneName.trim().equals(CommonConstants.EMPTY)) { - strSceneName = CommonConstants.DASH; - } - return strSceneName; - } - - public void setTransformTime(String data) { - strTransformTime = data; - } - - public String getTransformTime() { - if (strTransformTime == null) { - strTransformTime = CommonConstants.EMPTY; - } - return strTransformTime; - } - - public void setFormName(String data) { - strFormName = getDemanglingName(data); - } - - public String getFormName() { - if (strFormName == null - || strFormName.trim().equals(CommonConstants.EMPTY)) { - strFormName = CommonConstants.DASH; - } - return strFormName; - } - - public void setPanelName(String data) { - strPanelName = data; - } - - public String getPanelName() { - if (strPanelName == null - || strPanelName.trim().equals(CommonConstants.EMPTY)) { - strPanelName = CommonConstants.DASH; - } - return strPanelName; - } - - public String getPID() { - return Integer.toString(strPID); - } - - public void setPID(int strPID) { - this.strPID = strPID; - } - - public String getDemanglingName(String name) { - String demanglingName = CommonConstants.EMPTY; - StringBuilder childClassNameDemangling = new StringBuilder(name); - if(!childClassNameDemangling.toString().contains("_Z")){//$NON-NLS-1$ - childClassNameDemangling.insert(0, "_Z");//$NON-NLS-1$ - } - demanglingName = SymbolManager - .demanglingFunctionName(childClassNameDemangling.toString()); - return demanglingName; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneDataChecker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneDataChecker.java deleted file mode 100644 index ac242f1..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneDataChecker.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.scene; - -import java.util.ArrayList; -import java.util.List; - -import org.tizen.dynamicanalyzer.common.SymbolManager; -import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.data.SceneData; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.utils.Formatter; - -public class UISceneDataChecker { - - List transfomSceneList; - - public void parserLog(SceneData input) { - UISceneData sceneData = new UISceneData(input); - sceneData.setSequence(input.getSeq()); - sceneData.setTime(input.getTime()); - sceneData.setPID(input.getPid()); - sceneData.setSceneName(input.getSceneName()); - sceneData.setFormName(input.getFormName()); - sceneData.setPanelName(input.getPanelName()); - sceneData.setCalssKeyName(getClassName(input)); - - sceneData - .setTransformTime(getTransitionTime(input.getTransitionTime())); - - getDataList().add(sceneData); - UIDataManager.getInstance().getFindScreenshotViewHashMap() - .put(getClassName(input), input.getTime()); - } - - public List getDataList() { - if (null == transfomSceneList) { - transfomSceneList = new ArrayList(); - } - return transfomSceneList; - } - - private String getTransitionTime(long time) { - if (time == -1 || time == 0) { - return "00:00.000";//$NON-NLS-1$ - } - String strTime = Long.toString(time); - strTime = strTime + "00";//$NON-NLS-1$ - return Formatter.toTimeFormat(strTime); - } - - public String getClassName(SceneData dataFormat) { - String className = CommonConstants.EMPTY; - String panelName = dataFormat.getPanelName(); - if (panelName.trim().equals(CommonConstants.EMPTY)) { // - className = dataFormat.getFormName(); - } else { - className = panelName; - } - StringBuilder childClassNameDemangling = new StringBuilder(className); - childClassNameDemangling.insert(0, "_Z");//$NON-NLS-1$ - className = SymbolManager - .demanglingFunctionName(childClassNameDemangling.toString()); - return className; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListTable.java deleted file mode 100644 index 5d24c52..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListTable.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.scene; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.nebula.widgets.grid.GridItem; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Composite; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.model.FilterProperty; -import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.project.ImageInfo; -import org.tizen.dynamicanalyzer.swap.model.data.SceneData; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; -import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; -import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat; - -public class UISceneListTable extends DATableComposite { - - public UISceneListTable(Composite parent, int style, int tableStyle) { - super(parent, style, tableStyle); - setContextMenu(AnalyzerConstants.CONTEXT_TABLE_RANGE); - table.addSelectionListener(new SelectionListener() { - @Override - public void widgetSelected(SelectionEvent e) { - GridItem[] items = table.getSelection(); - if (items.length <= 0) { - return; - } - - DATableDataFormat dataFormat = (DATableDataFormat) items[0] - .getData(); - - SceneData data = (SceneData) dataFormat.getLogData(); - - String className = UIDataManager.getInstance() - .getSceneTransformDataChecker().getClassName(data); - - UIDataManager.getInstance().setTableSeleteClassName(className); - - long time = getScreensotForScene(data.getTime()); - - DASelectionData selData = new DASelectionData( - UIPage.sceneListViewID, time, 0, items, table); - AnalyzerManager.getCurrentPage().updateView(selData); - - updateTable(); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - } - - private long getScreensotForScene(long strTime) { - ImageInfo lastimg = Global.getLeastImageInfoByTime(strTime); - if(lastimg == null) { - return strTime; - } else { - return lastimg.getTime(); - } - } - - protected List makeTableInput() { - List transfomSceneList = UIDataManager.getInstance() - .getSceneTransformDataChecker().getDataList(); - - List input = new ArrayList(); - int size = transfomSceneList.size(); - for (int i = 0; i < size; i++) { - - int selectedPid = Toolbar.INSTANCE.getSelectedPid(); - if (selectedPid != 0) { - if (!transfomSceneList.get(i).getPID() - .equals(Integer.toString(selectedPid))) { - continue; - } - } - - List text = new ArrayList(); - UISceneData sceneTransformsData = transfomSceneList.get(i); - SceneData inputData = (SceneData) sceneTransformsData.getData(); - - DATableDataFormat tableData = new DATableDataFormat( - sceneTransformsData.getSequence()); - tableData.setLogData(inputData); - text.add(sceneTransformsData.getTime()); // Time - text.add(sceneTransformsData.getPID()); // Precess ID - text.add(sceneTransformsData.getSceneName()); // Scene Name - text.add(sceneTransformsData.getFormName()); // Form Name - text.add(sceneTransformsData.getPanelName()); // Panel Name - text.add(sceneTransformsData.getTransformTime()); // Panel Name - - TableInput tableInput = new TableInput(); - tableInput.setText(text); - tableInput.setData(tableData); - input.add(tableInput); - - String strSelectedClassname = UIDataManager.getInstance() - .getTableSeleteClassName(); - if (strSelectedClassname.equals(sceneTransformsData - .getCalssKeyName())) { - tableInput.setSecondSelection(true); - } - - if (RangeDataManager.getInstance().isBeingAnalyzed()) { - long time = tableData.getLogData().getTime(); - long analysisStartTime = RangeDataManager.getInstance() - .getAnalysisStartTime(); - long analysisEndTime = RangeDataManager.getInstance() - .getAnalysisEndTime(); - if (time >= analysisStartTime && time <= analysisEndTime) { - tableInput.setInRange(true); - } - } - } - return input; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListView.java deleted file mode 100644 index 24a23e5..0000000 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/userinterface/scene/UISceneListView.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Heeyoung Hwang - * 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.userinterface.scene; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.tizen.dynamicanalyzer.common.AnalyzerConstants; -import org.tizen.dynamicanalyzer.common.DASelectionData; -import org.tizen.dynamicanalyzer.nl.UserInterfacePageLabels; -import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.ui.userinterface.UIPage; -import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; -import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; - -public class UISceneListView extends DAViewComposite { - DATableComposite tableComp = null; - - private int[] columnSizes = { 70, 70, 120, 120, 120, 120 }; - private boolean[] columnVisibility = { true, true, true, true, true }; - private int[] columnAlignment = { SWT.RIGHT, SWT.RIGHT, SWT.LEFT, SWT.LEFT, - SWT.LEFT, SWT.RIGHT }; - - private String[] columnNames = { - UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_0, - UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_1, - UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_2, - UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_3, - UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_4, - UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_COLUMN_5 }; - - int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_NUM, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING, - AnalyzerConstants.SORT_TYPE_STRING }; - - public UISceneListView(Composite parent, int style) { - super(parent, style, true); - this.setLayout(new FillLayout()); - - setTitle(UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_NAME); - - Composite contents = getContentArea(); - contents.setBackground(ColorResources.WINDOW_BG_COLOR); - contents.setLayout(new FillLayout()); - tableComp = new UISceneListTable(contents, SWT.NONE, SWT.MULTI - | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); - tableComp - .setTableName(UserInterfacePageLabels.USERINTERFACE_SCENETRANSFORM_LIST_VIEW_NAME); - tableComp.setSortTypes(sortTypes); - tableComp.setColumnAlignment(columnAlignment); - tableComp.setColumns(columnNames); - tableComp.setColumnSize(columnSizes); - tableComp.setColumnVisibility(columnVisibility); - tableComp.setTableToolTipEnable(false); - - } - - @Override - public void updateView() { - tableComp.updateTable(); - } - - @Override - public void updateView(DAViewData data) { - if (data instanceof DASelectionData) { - DASelectionData selData = (DASelectionData) data; - - /* only ui page update */ - if (selData.getViewID().equals(UIPage.controlListViewID) - || selData.getViewID().equals(UIPage.profilingViewID) - || selData.getViewID().equals(UIPage.sceneListViewID)) { - tableComp.updateTable(); - } - } - - // other view selection occurred - tableComp.deselectAll(); - } - - @Override - public void clear() { - tableComp.clear(); - } - - @Override - public Control getControl() { - return tableComp; - } -} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/DADefaultChartBoard.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/DADefaultChartBoard.java index cb7f7d6..207793a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/DADefaultChartBoard.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/DADefaultChartBoard.java @@ -1,7 +1,9 @@ package org.tizen.dynamicanalyzer.ui.widgets; import org.eclipse.swt.widgets.Composite; +import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; +import org.tizen.dynamicanalyzer.project.AppInfo; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard; import org.tizen.dynamicanalyzer.widgets.lifecycle.LifecycleData; @@ -11,22 +13,33 @@ import org.tizen.dynamicanalyzer.widgets.lifecycle.LifecycleData; * preparation phase. */ public class DADefaultChartBoard extends DAChartBoard { + /** * Default lifecycle data for preparation phase. */ private static final LifecycleData defaultLifecycleData = new LifecycleData(0, ColorResources.LIFECYCLE_PREPARING, TimelineChartLabels.LIFECYCLE_PREPARING); + public DADefaultChartBoard(Composite parent, String title) { + super(parent, title); + } + public DADefaultChartBoard(Composite parent, String title, int boardStyle) { - super(parent, title, boardStyle, defaultLifecycleData); + super(parent, title, boardStyle); } public DADefaultChartBoard(Composite parent, String title, int[] scaleValues) { - super(parent, title, scaleValues, defaultLifecycleData); + super(parent, title, scaleValues); } - public DADefaultChartBoard(Composite parent, String title) { - super(parent, title, defaultLifecycleData); - } + @Override + protected void reinitLifecycleData() { + if (lifecycleBar == null) + return; + super.reinitLifecycleData(); + if (Global.getCurrentApplication() != null + && !Global.getCurrentApplication().getAppType().equals(AppInfo.APPTYPE_WEB)) + lifecycleBar.addLifecycleData(defaultLifecycleData); + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableComposite.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableComposite.java index 0de91a5..e9adcbb 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableComposite.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableComposite.java @@ -27,8 +27,12 @@ package org.tizen.dynamicanalyzer.ui.widgets.table; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.List; @@ -36,6 +40,9 @@ import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridColumn; import org.eclipse.nebula.widgets.grid.GridItem; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.FocusAdapter; @@ -56,25 +63,27 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.SymbolManager.SourceLine; +import org.tizen.dynamicanalyzer.common.path.PathManager; import org.tizen.dynamicanalyzer.communicator.IDECommunicator; import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.handlers.UIActionHolder; import org.tizen.dynamicanalyzer.listeners.TableTooltipListener; import org.tizen.dynamicanalyzer.model.FilterProperty; import org.tizen.dynamicanalyzer.model.FindProperty; import org.tizen.dynamicanalyzer.model.TableInput; -import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; +import org.tizen.dynamicanalyzer.nl.UserErrorWarningLabels; +import org.tizen.dynamicanalyzer.project.Project; 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.LogData; -import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener; import org.tizen.dynamicanalyzer.ui.memory.table.MemoryPersistentAllocationsTable; import org.tizen.dynamicanalyzer.ui.memory.table.MemoryStatisticsTable; -import org.tizen.dynamicanalyzer.ui.range.RangeDataManager; import org.tizen.dynamicanalyzer.ui.widgets.DAGrid; import org.tizen.dynamicanalyzer.ui.widgets.FilterDialog; import org.tizen.dynamicanalyzer.ui.widgets.SearchDialog; @@ -169,7 +178,6 @@ public abstract class DATableComposite extends Composite { */ private boolean mousePressed; - protected RangeDataManager rangeDataManager = RangeDataManager.getInstance(); /** * Length of queue of runnable tasks assigned to the table. */ @@ -177,7 +185,7 @@ public abstract class DATableComposite extends Composite { protected static final Image filterImg = ImageResources.COLUMN_FILTER_NORMAL; protected static final int filterImgOffset = 12; - private static final int MINIMAL_COLUMN_SIZE = 20; + private static final int MINIMAL_COLUMN_SIZE = 30; public DATableComposite(Composite parent, int style) { this(parent, SWT.NONE, style); @@ -223,6 +231,8 @@ public abstract class DATableComposite extends Composite { addMouseWheelListener(); addSelectionListener(); addKeyListener(); + addCopyItemsToPopup(); + me = this; setTableToolTipListener(new TableTooltipListener(table)); @@ -329,11 +339,118 @@ public abstract class DATableComposite extends Composite { dialog.open(); } } + } else if (e.keyCode == 'c' || e.keyCode == SWT.INSERT) { + if (ctrlPressed) { + ctrlPressed = false; + copySelectionToCliboard(); + } } } }); } + /** + * Initialize {@code popupMenu} if it is not initialized yet and add "Copy" + * item and "Export" item, which purpose is to copy selected table items to + * the clip board or entire table to file correspondingly. + */ + private void addCopyItemsToPopup() { + if (popupMenu == null) { + popupMenu = new DATablePopupMenu(table); + popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); + } + if(popupMenu.getItems()!=null && !popupMenu.getItems().isEmpty()) + new DAPopupMenuItem(popupMenu, DAPopupMenuItem.SEPARATOR); + DAPopupMenuItem copy = new DAPopupMenuItem(popupMenu); + copy.setText("Copy"); + copy.addListener(new DAPopupMenuListener() { + @Override + public void widgetSelected(DAPopupMenuItem menuItem) { + copySelectionToCliboard(); + } + }); + DAPopupMenuItem export = new DAPopupMenuItem(popupMenu); + export.setText("Export to file"); + export.addListener(new DAPopupMenuListener() { + @Override + public void widgetSelected(DAPopupMenuItem menuItem) { + exportTableToFile(); + } + }); + } + + /** + * Copy selection data of the table to clip board. + */ + private void copySelectionToCliboard() { + final Clipboard clip = new Clipboard(getDisplay()); + String txt = getFormatedString(table.getSelection(), CommonConstants.TAB); + Object[] textData = new Object[] { txt }; + Transfer[] textTransfer = new Transfer[] { TextTransfer.getInstance() }; + clip.setContents(textData, textTransfer); + } + + /** + * Open {@link FileDialog} to specify destination file and copy entire data + * of the table to the file. Data will be stored in TSV. + */ + private void exportTableToFile() { + FileDialog fd = new FileDialog(getShell(), SWT.SAVE); + fd.setFilterPath(PathManager.DA_SAVE_PATH); + fd.setText("Export table to file"); + fd.setFileName(Project.constructSaveName(getTableName(), new Date()) + ".tsv"); + String path = fd.open(); + if (path == null) + return; + File dest = new File(path); + String txt = getFormatedString(table.getItems(), CommonConstants.TAB); + if (dest.exists() && !dest.delete()) { + UIActionHolder.getUIAction() + .showWarning(UserErrorWarningLabels.ERR_FAILED_TO_DELETE_FILE + ' ' + path); + Logger.info(UserErrorWarningLabels.ERR_FAILED_TO_DELETE_FILE + ' ' + path); + return; + } + try (FileWriter fo = new FileWriter(dest)) { + fo.write(txt); + fo.flush(); + } catch (IOException e) { + UIActionHolder.getUIAction() + .showWarning(UserErrorWarningLabels.ERR_FAILED_TO_WRITE_TO_FILE); + Logger.error(e); + } + } + + /** + * Build String representation of data from {@code source} and put it into + * string, where values separated with {@code delimiter} and rows separated + * with {@code CommonConstants.NEW_LINE}. + * + * @param source GridItems to be copied + * @param delimiter Character to separate values in row + * + * @return String in delimiter-separated format. + */ + private String getFormatedString(GridItem[] source, String delimiter) { + StringBuilder sb = new StringBuilder(); + for (GridItem item : source) { + for (int i = 0; i < table.getColumnCount(); i++) { + if (table.getColumn(i).isVisible()) { + if (item.getText(i).contains(delimiter)) { + sb.append('"'); + sb.append(item.getText(i)); + sb.append('"'); + } else { + sb.append(item.getText(i)); + } + sb.append(delimiter); + } + } + sb.deleteCharAt(sb.length() - 1); + sb.append(CommonConstants.NEW_LINE); + } + return sb.toString(); + } + public void setTree(boolean tree) { isTree = tree; } @@ -525,7 +642,9 @@ public abstract class DATableComposite extends Composite { } tableClone.addAll(input); if (null != comparator) { - Collections.sort(input, comparator); + // TODO Time Consuming Process : make progress bar for this task + // or move this in another thread in the future. + sortTable(input); } int[] sels = new int[selSeqs.size()]; int iii = 0; @@ -596,6 +715,30 @@ public abstract class DATableComposite extends Composite { table.update(); } + /** + * Sort input data rows by item stored in {@code comparator.column} field. + * Add "sort" icon to corresponding column. If table is filtered, it can not + * be sorted by the column on which has been filtered. + * + * @param input input data + */ + protected void sortTable(List input) { + GridColumn c = table.getColumn(comparator.column); + if (c.getImage() != null && ImageResources.FILTER_IMAGES.contains(c.getImage())) + // Filtered by value in this column + return; + for (GridColumn column : table.getColumns()) { + if (c.equals(column)) + continue; + column.setSort(SWT.NONE); + if (!ImageResources.FILTER_IMAGES.contains(column.getImage())) { + column.setImage(null); + } + } + c.setSort(comparator.dirUp ? SWT.UP : SWT.DOWN); + Collections.sort(input, comparator); + } + protected abstract List makeTableInput(); public HashMap getSelections() { @@ -813,30 +956,12 @@ public abstract class DATableComposite extends Composite { filterPropertyList.clear(); } - protected void actionSetStartEnd(int type) { - GridItem item = table.getItem(mousePoint); - if (null != item) { - LogData data = ((DATableDataFormat) item.getData()).getLogData(); - long inputTime = data.getTime(); - if (type == START_TIME) { - rangeDataManager.setMarkerStartTime(inputTime); - } else if (type == END_TIME) { - rangeDataManager.setMarkerEndTime(inputTime); - } - } - } - public void setContextMenu(final int context) { if (popupMenu == null) { popupMenu = new DATablePopupMenu(table); popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT); } - if ((context & AnalyzerConstants.CONTEXT_TABLE_RANGE) != 0) { - if(popupMenu.getItems()!=null && !popupMenu.getItems().isEmpty()) - new DAPopupMenuItem(popupMenu, DAPopupMenuItem.SEPARATOR); - setRangeContext(); - } if ((context & AnalyzerConstants.CONTEXT_TABLE_SOURCE) != 0) { if(popupMenu.getItems()!=null && !popupMenu.getItems().isEmpty()) new DAPopupMenuItem(popupMenu, DAPopupMenuItem.SEPARATOR); @@ -868,24 +993,7 @@ public abstract class DATableComposite extends Composite { } String text = menuItem.getText(); // TODO need to identity method instead of String - if (text.equals(TimelineChartLabels.RANGE_CONTEXT_SET_START) - || text.equals(TimelineChartLabels.RANGE_CONTEXT_SET_END)) { - if (!menuItem.isEnabled()) { - menuItem.setEnabled(true); - } - } else if (text.equals(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS)) { - if (rangeDataManager.isAnalyzable()) { - menuItem.setEnabled(true); - } else { - menuItem.setEnabled(false); - } - } else if (text.equals(TimelineChartLabels.RANGE_CONTEXT_CLEAR)) { - if (rangeDataManager.isBeingAnalyzed()) { - menuItem.setEnabled(true); - } else { - menuItem.setEnabled(false); - } - } else if (text.equals("View caller source")) { + if (text.equals("View caller source")) { SourceLine sl = tableListener.getCallerSourceLine(gridItem); if (null == sl || sl.getError() != AnalyzerConstants.SOURCELINE_NOERROR) { menuItem.setEnabled(false); @@ -962,40 +1070,6 @@ public abstract class DATableComposite extends Composite { }); } - private void setRangeContext() { - DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu); - startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START); - startItem.addListener(new DAPopupMenuListener() { - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - actionSetStartEnd(START_TIME); - } - }); - - DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu); - endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END); - endItem.addListener(new DAPopupMenuListener() { - - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - actionSetStartEnd(END_TIME); - } - }); - - 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 DAPopupMenuListener() { - @Override - public void widgetSelected(DAPopupMenuItem menuItem) { - rangeDataManager.initRange(); - } - }); - } - public void setAutoColumnPackEnabled(boolean enabled) { autoColumnPack = enabled; } @@ -1151,6 +1225,9 @@ public abstract class DATableComposite extends Composite { return; } + cleanColumnsImages(); + table.getColumn(index).setImage(ImageResources.DA_IC_FILTER); + table.getColumn(index).setSort(SWT.NONE); String startData = item.getText(index); filterTable(startData, index); } @@ -1163,12 +1240,23 @@ public abstract class DATableComposite extends Composite { @Override public void widgetSelected(DAPopupMenuItem menuItem) { isFilter = false; + cleanColumnsImages(); updateTable(); } }); } /** + * Remove images from columns' headers. For all table's columns predefined + * images is set to null. + */ + private void cleanColumnsImages() { + for (GridColumn column : table.getColumns()) { + column.setImage(null); + } + } + + /** * Method to filter table that will hide elements with specified field * differ from specified value. * diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableHeaderRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableHeaderRenderer.java index ee66b04..1866607 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableHeaderRenderer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableHeaderRenderer.java @@ -30,24 +30,24 @@ package org.tizen.dynamicanalyzer.ui.widgets.table; import org.eclipse.nebula.widgets.grid.GridColumn; import org.eclipse.nebula.widgets.grid.internal.CheckBoxRenderer; import org.eclipse.nebula.widgets.grid.internal.DefaultColumnHeaderRenderer; -import org.eclipse.nebula.widgets.grid.internal.SortArrowRenderer; import org.eclipse.nebula.widgets.grid.internal.TextUtils; 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.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; +import org.tizen.dynamicanalyzer.resources.ImageResources; public class DATableHeaderRenderer extends DefaultColumnHeaderRenderer { int leftMargin = 6; int rightMargin = 6; - int topMargin = 3; - // int bottomMargin = 3; - int arrowMargin = 6; + int insideMargin = 3; + int imageRightMargin = 9; int alignment; boolean check = false; @@ -56,11 +56,10 @@ public class DATableHeaderRenderer extends DefaultColumnHeaderRenderer { Color bgColor = ColorResources.TABLE_HEADER_BG; Color fontColor = ColorResources.TABLE_HEADER_FONT_COLOR; - private SortArrowRenderer arrowRenderer = new SortArrowRenderer(); protected CheckBoxRenderer checkRenderer = null; public DATableHeaderRenderer() { - alignment = SWT.CENTER; + alignment = SWT.LEFT; } public DATableHeaderRenderer(int style) { @@ -80,7 +79,6 @@ public class DATableHeaderRenderer extends DefaultColumnHeaderRenderer { public void setDisplay(Display display) { super.setDisplay(display); - arrowRenderer.setDisplay(display); if (checkRenderer != null) { checkRenderer.setDisplay(display); } @@ -117,6 +115,7 @@ public class DATableHeaderRenderer extends DefaultColumnHeaderRenderer { boolean flat = (column.getParent().getCellSelectionEnabled() && !column.getMoveable()); + // drawSelected means that item is clicked. boolean drawSelected = ((isMouseDown() && isHover())); // column bg color @@ -137,6 +136,7 @@ public class DATableHeaderRenderer extends DefaultColumnHeaderRenderer { pushedDrawingOffset = 1; } + // x - current offset from left side int x = leftMargin; if (check) { @@ -151,51 +151,82 @@ public class DATableHeaderRenderer extends DefaultColumnHeaderRenderer { x += checkRenderer.getBounds().width + insideMargin; } - if (column.getImage() != null) { - gc.drawImage(column.getImage(), getBounds().x + x + pushedDrawingOffset, getBounds().y - + topMargin + pushedDrawingOffset); - x += column.getImage().getBounds().width + insideMargin; - } - + // width of remained space inside column header int width = getBounds().width - x; - if (column.getSort() == SWT.NONE) { - width -= rightMargin; + // If table sorted or any Image associated with the current column the + // corresponding image should be printed at right of the column's + // header. + if (column.getImage() != null || column.getSort() != SWT.NONE) { + column.setImage(refineImage(column)); + + gc.drawImage(column.getImage(), + getBounds().x + getBounds().width - imageRightMargin - column.getImage().getBounds().width + +pushedDrawingOffset, + getBounds().y + (getBounds().height - column.getImage().getBounds().height) / 2 + + pushedDrawingOffset); + width -= column.getImage().getBounds().width + insideMargin + imageRightMargin; } else { - width -= arrowMargin + arrowRenderer.getSize().x + arrowMargin; + width -= rightMargin; } // font color gc.setForeground(fontColor); gc.setFont(FontResources.TABLE_HEADER_FONT); + // Define short text representation String inputText = TextUtils.getShortString(gc, column.getText(), width); Point textSize = gc.textExtent(inputText, SWT.DRAW_MNEMONIC); int textX; if (alignment == SWT.CENTER) { - textX = r.x + (r.width - textSize.x) / 2; + textX = r.x + x + (width - textSize.x) / 2; } else if (alignment == SWT.LEFT) { textX = r.x + x; } else { - textX = r.x + r.width - textSize.x - rightMargin; + textX = r.x + x + width - textSize.x; } int y = getBounds().y + (getBounds().height - textSize.y) / 2; gc.drawString(inputText, textX + pushedDrawingOffset, y + pushedDrawingOffset, true); + } - if (column.getSort() != SWT.NONE) { - arrowRenderer.setSelected(column.getSort() == SWT.UP); - if (drawSelected) { - arrowRenderer.setLocation(getBounds().x + getBounds().width - arrowMargin - - arrowRenderer.getBounds().width + 1, getBounds().y - + ((getBounds().height - arrowRenderer.getBounds().height) / 2) + 1); - } else { - arrowRenderer.setLocation(getBounds().x + getBounds().width - arrowMargin - - arrowRenderer.getBounds().width, getBounds().y - + ((getBounds().height - arrowRenderer.getBounds().height) / 2)); - } - arrowRenderer.paint(gc, null); + /** + * Define the actual image for the header of the given {@code column}, + * depending on the sort and filter state. + * + * @param column {@link GridColumn} which image should be refined + * @return {@link Image} to add to {@code column}'s header + */ + private Image refineImage(GridColumn column) { + if (column.getSort() == SWT.NONE + && ImageResources.FILTER_IMAGES.contains(column.getImage())) { + if (isHover()) + if (isMouseDown()) + return ImageResources.DA_IC_FILTER_PRESSED; + else + return ImageResources.DA_IC_FILTER_OVER; + else + return ImageResources.DA_IC_FILTER; + } + if (column.getSort() == SWT.UP) { + if (isHover()) + if (isMouseDown()) + return ImageResources.SORTED_INC_SELECTED; + else + return ImageResources.SORTED_INC_OVER; + else + return ImageResources.SORTED_INC; + } + if (column.getSort() == SWT.DOWN) { + if (isHover()) + if (isMouseDown()) + return ImageResources.SORTED_DESC_SELECTED; + else + return ImageResources.SORTED_DESC_OVER; + else + return ImageResources.SORTED_DESC; } + return column.getImage(); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableRegistry.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableRegistry.java index 026b083..cf3ecf4 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableRegistry.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATableRegistry.java @@ -41,4 +41,19 @@ public class DATableRegistry { table.clearFiltering(); } } + + /** + * Check if specified table is created and return link to it. + * + * @param name table class name + * @return {@link DATableComposite} representing specified table or null if + * it is not created. + */ + public static DATableComposite getTable(String name) { + for (DATableComposite table : tables) { + if (table.getClass().getName().equals(name)) + return table; + } + return null; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATreeComposite.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATreeComposite.java index 731bb79..ae161cf 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATreeComposite.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DATreeComposite.java @@ -28,7 +28,6 @@ package org.tizen.dynamicanalyzer.ui.widgets.table; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -181,7 +180,7 @@ public abstract class DATreeComposite extends DATableComposite { // !! recursive private void createTree(List input, Object parent) { if (null != comparator) { - Collections.sort(input, comparator); + sortTable(input); } int rootSize = input.size(); // -- loop? diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DAWindowingTableComposite.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DAWindowingTableComposite.java index 1438e6b..a386b9b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DAWindowingTableComposite.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/table/DAWindowingTableComposite.java @@ -44,7 +44,6 @@ import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.common.DAState; @@ -530,21 +529,6 @@ public abstract class DAWindowingTableComposite extends DATableComposite { previousItemCount = -1; } - @Override - protected void actionSetStartEnd(int type) { - GridItem item = table.getItem(mousePoint); - if (null != item) { - long inputTime = (Long) ((DATableDataFormat) item.getData()).getData().get( - timeColumnIndex); - - if (type == START_TIME) { - rangeDataManager.setMarkerStartTime(inputTime); - } else if (type == END_TIME) { - rangeDataManager.setMarkerEndTime(inputTime); - } - } - } - protected List> getQueriedObjectData() { return queriedObjectData; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/ZipUtils.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/ZipUtils.java index efe78cf..f870f57 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/ZipUtils.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/ZipUtils.java @@ -29,6 +29,7 @@ import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; @@ -37,166 +38,147 @@ import org.tizen.dynamicanalyzer.util.Logger; public class ZipUtils { - private static final int COMPRESSION_LEVEL = 8; - - private static final int BUFFER_SIZE = 1024 * 2; - - /** - * Compress to output file - * @param sourcePath - Target directory - * @param output - zip file name - * @throws Exception - */ - public static void zip(String sourcePath, String output) throws Exception { - - // If sourcePath is not a directory, make exception. - File sourceFile = new File(sourcePath); - if (!sourceFile.isFile() && !sourceFile.isDirectory()) { - throw new Exception("Can't find directory."); - } - - // - if(!output.toLowerCase().endsWith(".zip") ) { - output += ".zip"; - } - - FileOutputStream fos = null; - BufferedOutputStream bos = null; - ZipOutputStream zos = null; - - try { - fos = new FileOutputStream(output); - bos = new BufferedOutputStream(fos); - zos = new ZipOutputStream(bos); - zos.setLevel(COMPRESSION_LEVEL); // Compression level - Max 9, Default 8 - zipEntry(sourceFile, sourcePath, zos); // make Zip file - zos.finish(); // ZipOutputStream finish - } finally { - if (zos != null) { - zos.close(); - } - if (bos != null) { - bos.close(); - } - if (fos != null) { - fos.close(); - } - } - } - - /** - * Compress - * @param sourceFile - * @param sourcePath - * @param zos - * @throws Exception - */ - private static void zipEntry(File sourceFile, String sourcePath, ZipOutputStream zos) throws Exception { - // If sourceFile is a directory, call zipEntry again. - if (sourceFile.isDirectory()) { - if (sourceFile.getName().equalsIgnoreCase(".metadata")) { // .metadata is unnecessary. - return; - } - File[] fileArray = sourceFile.listFiles(); // children files of sourceFile - for (int i = 0; i < fileArray.length; i++) { - zipEntry(fileArray[i], sourcePath, zos); - } - } else { // sourcehFile is a file - BufferedInputStream bis = null; - try { - String sFilePath = sourceFile.getPath(); - String zipEntryName = sFilePath.substring(sourcePath.length() + 1, sFilePath.length()); - - bis = new BufferedInputStream(new FileInputStream(sourceFile)); - ZipEntry zentry = new ZipEntry(zipEntryName); - zentry.setTime(sourceFile.lastModified()); - zos.putNextEntry(zentry); - - byte[] buffer = new byte[BUFFER_SIZE]; - int cnt = 0; - while ((cnt = bis.read(buffer, 0, BUFFER_SIZE)) != -1) { - zos.write(buffer, 0, cnt); - } - zos.closeEntry(); - } finally { - if (bis != null) { - bis.close(); - } - } - } - } - - /** - * Decompress Zip file - * - * @param zipFile - * @param targetDir - * @param fileNameToLowerCase - * @throws Exception - */ - public static void unzip(File zipFile, File targetDir, boolean fileNameToLowerCase) throws Exception { - FileInputStream fis = null; - ZipInputStream zis = null; - ZipEntry zentry = null; - - try { - fis = new FileInputStream(zipFile); // FileInputStream - zis = new ZipInputStream(fis); // ZipInputStream - - while ((zentry = zis.getNextEntry()) != null) { - String fileNameToUnzip = zentry.getName(); - if (fileNameToLowerCase) { // fileName toLowerCase - fileNameToUnzip = fileNameToUnzip.toLowerCase(); - } - - File targetFile = new File(targetDir, fileNameToUnzip); - - if (zentry.isDirectory()) { - File childFolder = new File(targetFile.getAbsolutePath()); - if(!childFolder.exists()) { - childFolder.mkdirs(); - } - } else { - File parentFolder = new File(targetFile.getParent()); - if(!parentFolder.exists()) { - parentFolder.mkdirs(); - } - unzipEntry(zis, targetFile); - } - } - } finally { - if (zis != null) { - zis.close(); - } - if (fis != null) { - fis.close(); - } - } - } - - /** - * Decompress one Zip file - * - * @param zis - Zip Input Stream - * @param filePath - * @return - * @throws Exception - */ - protected static File unzipEntry(ZipInputStream zis, File targetFile) throws Exception { - FileOutputStream fos = null; - try { - fos = new FileOutputStream(targetFile); - - byte[] buffer = new byte[BUFFER_SIZE]; - int len = 0; - while ((len = zis.read(buffer)) != -1) { - fos.write(buffer, 0, len); - } - } finally { - if (fos != null) { - fos.close(); - } - } - return targetFile; - } + private static final int COMPRESSION_LEVEL = 8; + + private static final int BUFFER_SIZE = 1024 * 2; + + private static final String METADATA = ".metadata"; + + /** + * Compress collected trace into the specified zip file. If path to file + * does not exist, it will be created, if creation is permitted. + * + * @param sourcePath path to the collected trace + * @param output full name of the specified zip file + * @return {@code true} if trace archived successfully + * @throws IOException if any IOExceptions occurred during archiving + */ + public static boolean zip(String sourcePath, String output) throws IOException { + + // If sourcePath is not a directory, make exception. + File sourceFile = new File(sourcePath); + if (!sourceFile.isFile() && !sourceFile.isDirectory()) { + Logger.error("Can't find directory " + sourcePath); + return false; + } + + File target = new File(output); + File tParent = target.getParentFile(); + if ((!tParent.exists() || !tParent.isDirectory()) && !tParent.mkdirs()) { + Logger.error("Can't create directory for output file "+output); + return false; + } + + if (!output.toLowerCase().endsWith(".zip")) { + output += ".zip"; + } + + try (FileOutputStream fos = new FileOutputStream(output); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos))) { + zos.setLevel(COMPRESSION_LEVEL); // Compression level - Max 9, + // Default 8 + zipEntry(sourceFile, sourcePath, zos); // make Zip file + zos.finish(); // ZipOutputStream finish + } + return true; + } + + /** + * Recursively compress {@link File} into zip archive: Compress file as is + * if it is not directory, and compress all child files otherwise. + * + * @param sourceFile file or directory to copy + * @param sourcePath path to {@code sourceFile} + * @param zos stream to zip archive + * @throws IOException if any occurres + */ + private static void zipEntry(File sourceFile, String sourcePath, ZipOutputStream zos) + throws IOException { + // If sourceFile is a directory, call zipEntry again. + if (sourceFile.isDirectory()) { + if (sourceFile.getName().equalsIgnoreCase(METADATA)) { // .metadata is unnecessary. + return; + } + File[] fileArray = sourceFile.listFiles(); // children files of sourceFile + for (int i = 0; i < fileArray.length; i++) { + zipEntry(fileArray[i], sourcePath, zos); + } + } else { // sourcehFile is a file + try (BufferedInputStream bis = new BufferedInputStream( + new FileInputStream(sourceFile));) { + String sFilePath = sourceFile.getPath(); + String zipEntryName = sFilePath.substring(sourcePath.length() + 1, + sFilePath.length()); + + ZipEntry zentry = new ZipEntry(zipEntryName); + zentry.setTime(sourceFile.lastModified()); + zos.putNextEntry(zentry); + + byte[] buffer = new byte[BUFFER_SIZE]; + int cnt = 0; + while ((cnt = bis.read(buffer, 0, BUFFER_SIZE)) != -1) { + zos.write(buffer, 0, cnt); + } + zos.closeEntry(); + } + } + } + + /** + * Extract zip file to the specified target directory. + * + * @param zipFile archive to extract + * @param targetDir target directory + * @param fileNameToLowerCase indicate whether file names of extracted files + * should be turned to lower case or not + * @throws IOException if any occurres + */ + public static void unzip(File zipFile, File targetDir, boolean fileNameToLowerCase) + throws IOException { + ZipEntry zentry = null; + + try (FileInputStream fis = new FileInputStream(zipFile); + ZipInputStream zis = new ZipInputStream(fis)) { + + while ((zentry = zis.getNextEntry()) != null) { + String fileNameToUnzip = zentry.getName(); + if (fileNameToLowerCase) { // fileName toLowerCase + fileNameToUnzip = fileNameToUnzip.toLowerCase(); + } + + File targetFile = new File(targetDir, fileNameToUnzip); + + if (zentry.isDirectory()) { + File childFolder = new File(targetFile.getAbsolutePath()); + if (!childFolder.exists()) { + childFolder.mkdirs(); + } + } else { + File parentFolder = new File(targetFile.getParent()); + if (!parentFolder.exists()) { + parentFolder.mkdirs(); + } + unzipEntry(zis, targetFile); + } + } + } + } + + /** + * Extract zip entry into file or directory. + * + * @param zis {@link ZipInputStream} stream from zip archive. + * @param targetFile {@link File} target file + * @throws IOException + */ + protected static void unzipEntry(ZipInputStream zis, File targetFile) throws IOException { + try (FileOutputStream fos = new FileOutputStream(targetFile)) { + + byte[] buffer = new byte[BUFFER_SIZE]; + int len = 0; + while ((len = zis.read(buffer)) != -1) { + fos.write(buffer, 0, len); + } + } + } } \ No newline at end of file diff --git a/package/changelog b/package/changelog index 70d5a61..4529d2c 100644 --- a/package/changelog +++ b/package/changelog @@ -1,11 +1,60 @@ +* 2.5.1 +- Fix a regression of hidden in tracing time Call Trace table (regression in DA 2.5.0) +- Show filter icon after filtering above sorting (SRADA-1364) +- Fix a regression of inserting an "unknown" API item into callstack (SRADA-1362) +- Disable sorting in Memory Details table (SRADA-1366) +- Fix popup menu behavior broken with previous redesign of callstack (regression in DA 2.5.0) +- Improve memory usage and performance for HeapAllocation profiling (SRADA-1231) + - Add primary keys and indexes for database tables + - Update HSQLDB to 2.3.4 version + - Heavy queries to database are executed in separate threads + - All data calculation for Statistics and Persistent Allocations tables is + moved to database + - Increase max memory available to DA from 512MB to 1GB +- Fix incorrect memory map building (SRADA-1327) +- Add device serial number to pop-up notifications (SRADA-1255) +- Removed redundant double updates in left table views (SRADA-1374) + - Remove deprecated logic related to Interactive, Kernel, Range Analysis + and User Interface pages + - Replace 'Analyze range' pop-up menu item for charts with 'Select range' +- Fix synchronization issues in DeviceManager and NotificationManager (regression in DA 2.5.0) +- Fix NullPointerException in TableTooltipListener (SRADA-1390) +- Fix JIRA defects: + SPTSDKUX-3428: Tracing data is not being saved in given path but no failure message shown +== Dmitriy Nikiforov February 28, 2017 +* 2.5.0 +- Fix bug with incorrect callstack construction (SRADA-1274): + - Callstack is shown only after tracing is stopped + - Function Profiling data processing totally redesigned +- Fix behaviour of Cancel button in start tracing progress bar (SRADA-1105) +- Fix memory map building (SRADA-1327) +- Fix bug with Core Usage feature not working when it's only one selected (SRADA-947) +- Fix Memory Callstack table to be shown only when needed (SRADA-1350) +- Enable function profiling for application libraries (SRADA-1287) +- Show memory map for selected time (SRADA-1116) +- Add ability to copy data from tables (SRADA-1226) +- Add ability to export data from tables to file (SRADA-1336) +- Add filter/sort icons for the tables (SRADA-1334) +- Add notification popups on devices connect/disconnect (SRADA-1255) +- Add target connection status icons in Feature dialog (SRADA-1254) +- Add guide text on timeline page if connected device doesn't match selected (SRADA-1256) +- Add possibility to configure features in Feature dialog (SRADA-1333) +- Disable logging of SWAP messages by default to improve performance (SRADA-1348) +- Improve memory usage for HeapAllocation profiling (SRADA-1231) +- Refactor HeapDataManager class (SRADA-1231) +- Java version compliance changed to 1.8 in main pom.xml and in projects: org.tizen.dynamicanalyzer, +org.tizen.dynamicanalyzer.widgets +- Fix JIRA defects: + SPTSDKUX-2998 Lifecycle bar is showing wrong status for web project +== Maria Guseva February 08, 2017 * 2.4.5 -== Maria Guseva December 21, 2016 - Add native widget applications to blacklist - Update warning message text for unsupported applications - Fix JIRA defects: SPTSDKUX-2885: UI is distorted while clicking on screenshot feature in prefrences window. SPTSDKUX-2966: Search not working for Range Analysis tab SPTSDKUX-2972: Dynamic analyzer placement is change when check / uncheck Detail option from View menu +== Maria Guseva December 21, 2016 * 2.4.4 - Apply a workaround for non-root sdbd - Make Persistent Allocations table to be hidden by default @@ -43,6 +92,7 @@ * 2.4.1 - Add support for multi-application packages - Fix Persistent Allocations table update after filtering +- Improve table columns resize behaviour - Fix FindBugs issues of Performance category in widgets and common packages - Fix JIRA defects: SPTSDKUX-2449: Error Pop-up shows for the First time when clicking on start Trace for Web Project on Emulator (UIHV) diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index a3c6595..d7fe10f 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,5 +1,5 @@ Source:dynamic-analyzer -Version:2.4.5 +Version:2.5.1 Maintainer:Gihun Chang , WooJin Jung , Jaewon Lim , Seokgil Kang Package:dynamic-analyzer-product diff --git a/pom.xml b/pom.xml index 46b8935..e0161f4 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ 4.0.0 org.tizen.dynamicanalyzer dynamic-analyzer - 2.4.5-SNAPSHOT + 2.5.1-SNAPSHOT pom @@ -52,8 +52,8 @@ ${tycho-version} -warn:+discouraged,forbidden - 1.7 - 1.7 + 1.8 + 1.8 -- 2.7.4