From db6e213cf3cdddfff52b3f4222dec9b9fb06334f Mon Sep 17 00:00:00 2001 From: "yeongtaik.byeon" Date: Tue, 28 Aug 2012 12:02:32 +0900 Subject: [PATCH] [Title]merge from release [Type]merge [Module] [Priority]normal [CQ#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] --- org.tizen.dynamicanalyzer.widgets/plugin.xml | 5 - .../widgets/chart/DACustomChart.java | 52 ++ .../widgets/chart/DACustomChartRenderer.java | 84 +-- .../widgets/chart/DACustomChartSeries.java | 38 ++ .../widgets/chart/DACustomChartTooltip.java | 205 +++++++ .../dynamicanalyzer/widgets/scale/DAScale.java | 1 - .../dynamic-analyzer/config/config | 13 +- .../dynamic-analyzer/xml/custom_chart.logc | 132 +++++ .../icons/128_DA_icon.png | Bin 0 -> 8433 bytes .../icons/16_DA_icon.png | Bin 0 -> 3159 bytes .../icons/20_DA_icon.png | Bin 0 -> 3258 bytes .../icons/22_DA_icon.png | Bin 0 -> 3513 bytes .../icons/24_DA_icon.png | Bin 0 -> 3576 bytes .../icons/256_DA_icon.png | Bin 0 -> 15099 bytes .../icons/32_DA_icon.png | Bin 0 -> 3860 bytes .../icons/48_DA_icon.png | Bin 0 -> 4613 bytes .../icons/64_DA_icon.png | Bin 0 -> 5314 bytes .../icons/96_DA_icon.png | Bin 0 -> 6786 bytes .../icons/DA_icon.ico | Bin 0 -> 120078 bytes .../dynamicanalyzer/workbench/Application.java | 112 ++-- .../ApplicationWorkbenchWindowAdvisor.java | 11 +- .../workbench/WorkbenchPathManager.java | 205 +++++++ org.tizen.dynamicanalyzer/lib/sdblib.jar | Bin 118356 -> 118373 bytes .../org/tizen/dynamicanalyzer/AnalyzerManager.java | 35 +- .../org/tizen/dynamicanalyzer/AnalyzerPlugin.java | 72 +-- .../org/tizen/dynamicanalyzer/ColorResources.java | 178 +++++- .../tizen/dynamicanalyzer/ConfigureManager.java | 451 +++++++-------- .../dynamicanalyzer/DASingletonFocusManager.java | 35 +- .../tizen/dynamicanalyzer/IDEConnectorManager.java | 69 ++- .../src/org/tizen/dynamicanalyzer/LogSpliter.java | 9 +- .../dynamicanalyzer/ResourceCommunicator.java | 5 +- .../tizen/dynamicanalyzer/SymbolNameDemangler.java | 2 +- .../constants/AnalyzerConstants.java | 632 +++++++++++---------- .../constants/LogCenterConstants.java | 12 +- .../constants/TimelineConstants.java | 3 +- .../dynamicanalyzer/handlers/ClearHandler.java | 3 + .../handlers/StartStopTraceHandler.java | 1 + .../listeners/TableTooltipListener.java | 2 +- .../tizen/dynamicanalyzer/model/CallStackUnit.java | 4 +- .../org/tizen/dynamicanalyzer/model/Project.java | 1 - .../tizen/dynamicanalyzer/model/SnapshotData.java | 4 - .../tizen/dynamicanalyzer/nl/AnalyzerLabels.java | 2 +- .../dynamicanalyzer/nl/AnalyzerLabels.properties | 63 +- .../dynamicanalyzer/nl/CommonPageLabels.properties | 6 +- .../tizen/dynamicanalyzer/nl/ConfigureLabels.java | 26 + .../dynamicanalyzer/nl/ConfigureLabels.properties | 11 + .../dynamicanalyzer/nl/FilePageLabels.properties | 24 +- .../dynamicanalyzer/nl/InformationViewLabels.java | 5 +- .../nl/InformationViewLabels.properties | 59 +- .../dynamicanalyzer/nl/SummaryLabels.properties | 58 +- .../nl/TimelineChartLabels.properties | 50 +- .../nl/TimelinePageLabels.properties | 4 +- .../threads/RecordStartStopThread.java | 7 + .../dynamicanalyzer/timeline/CustomLogParser.java | 19 +- .../timeline/TimeTickComposite.java | 10 - .../timeline/TimelineChartManager.java | 128 ++--- .../timeline/TimelineComposite.java | 49 +- .../timeline/TimelineEditItemsDialog.java | 18 +- .../timeline/TimelineItemManager.java | 417 +------------- .../timeline/TimelineItemSettingProvider.java | 8 +- .../dynamicanalyzer/timeline/TimelineMaster.java | 245 -------- .../timeline/TimelineRangeSelector.java | 1 - .../dynamicanalyzer/timeline/chart/CPUChart.java | 258 --------- .../timeline/chart/CPUCoreChart.java | 291 ---------- .../timeline/chart/CPUFrequencyChart.java | 219 ------- .../timeline/chart/ChartDataSet.java | 45 -- .../dynamicanalyzer/timeline/chart/DACPUChart.java | 48 +- .../timeline/chart/DACPUCoreChart.java | 42 +- .../timeline/chart/DACPUFrequencyChart.java | 52 +- .../timeline/chart/DAFileChart.java | 66 ++- .../timeline/chart/DAHeapChart.java | 75 +-- .../timeline/chart/DAProcessMemoryChart.java | 84 +-- .../timeline/chart/DASystemMemoryChart.java | 80 +-- .../timeline/chart/DATimelineChart.java | 67 ++- .../dynamicanalyzer/timeline/chart/FileChart.java | 331 ----------- .../dynamicanalyzer/timeline/chart/HeapChart.java | 336 ----------- .../timeline/chart/ProcessMemoryChart.java | 354 ------------ .../timeline/chart/SeriesDataSet.java | 91 --- .../timeline/chart/SystemMemoryChart.java | 286 ---------- .../timeline/chart/TimelineChart.java | 181 ------ .../timeline/chart/UserCustomChart.java | 31 +- .../dynamicanalyzer/ui/views/CoolbarArea.java | 54 +- .../dynamicanalyzer/ui/views/SnapshotView.java | 5 +- .../ui/views/base/AbstractEffectFrame.java | 65 +-- .../ui/views/filePage/fileChart/DAFileChart.java | 137 +++-- .../views/filePage/fileChart/FileChartManager.java | 4 - .../views/timelinePage/DATimelineTabComposite.java | 6 +- .../dynamicanalyzer/ui/widgets/AboutDialog.java | 29 +- .../ui/widgets/ConfigurationDialog.java | 23 +- .../tizen/dynamicanalyzer/ui/widgets/DAButton.java | 24 + .../tizen/dynamicanalyzer/ui/widgets/DADialog.java | 38 +- .../ui/widgets/imageViewer/ImageViewer.java | 4 +- .../ui/widgets/tables/StatsTable.java | 389 +++++++------ .../dynamicanalyzer/uirecorder/RecorderXml.java | 85 ++- .../dynamicanalyzer/utils/CallStackManager.java | 7 + .../utils/FunctionUsageProfiler.java | 19 +- .../tizen/dynamicanalyzer/utils/LeakDetector.java | 14 +- .../theme/black/img/64_DA_icon.png | Bin 10240 -> 5314 bytes .../theme/white/img/64_DA_icon.png | Bin 10240 -> 5314 bytes 99 files changed, 2604 insertions(+), 4822 deletions(-) delete mode 100644 org.tizen.dynamicanalyzer.widgets/plugin.xml create mode 100644 org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartTooltip.java create mode 100644 org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/custom_chart.logc create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/128_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/16_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/20_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/22_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/24_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/256_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/32_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/48_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/64_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/96_DA_icon.png create mode 100644 org.tizen.dynamicanalyzer.workbench/icons/DA_icon.ico create mode 100644 org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/CPUChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/CPUCoreChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/CPUFrequencyChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/ChartDataSet.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/FileChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/HeapChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/ProcessMemoryChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/SeriesDataSet.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/SystemMemoryChart.java delete mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/TimelineChart.java diff --git a/org.tizen.dynamicanalyzer.widgets/plugin.xml b/org.tizen.dynamicanalyzer.widgets/plugin.xml deleted file mode 100644 index 5535690..0000000 --- a/org.tizen.dynamicanalyzer.widgets/plugin.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChart.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChart.java index ffdc590..efcc971 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChart.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChart.java @@ -26,15 +26,21 @@ import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; public class DACustomChart extends Canvas { private String name; + Composite parent = null; private List seriesList = new ArrayList(); private DACustomChartPlot plot = null; private DACustomChartRenderer chartRenderer = new DACustomChartRenderer(); + private boolean bTooltip = false; public DACustomChart(Composite parent, String name) { super(parent, SWT.TRANSPARENT); + this.parent = parent; this.name = name; plot = new DACustomChartPlot(this); addListeners(); @@ -51,6 +57,7 @@ public class DACustomChart extends Canvas { private void addListeners() { this.addPaintListener(chartPaintListener); + // showTooltip(true); //FIXME : delete } public String getChartName() { @@ -111,4 +118,49 @@ public class DACustomChart extends Canvas { chartRenderer.draw(e.gc, (DACustomChart) e.widget); } }; + + public void showTooltip(boolean show) { + if (bTooltip == show) { + return; + } + if (true == show) { + this.addListener(SWT.MouseMove, chartTooltipListener); + this.addListener(SWT.MouseEnter, chartTooltipListener); + this.addListener(SWT.MouseExit, chartTooltipListener); + } else { + this.removeListener(SWT.MouseMove, chartTooltipListener); + this.removeListener(SWT.MouseEnter, chartTooltipListener); + this.removeListener(SWT.MouseExit, chartTooltipListener); + } + } + + private Listener chartTooltipListener = new Listener() { + + @Override + public void handleEvent(Event event) { + + switch (event.type) { + case SWT.MouseMove: + if (null != plot) { + DACustomChartTooltip.getInstance().move(); + } + break; + case SWT.MouseEnter: + System.out.println("MouseEnter"); + if (null != plot) { + Shell shell = parent.getShell(); + DACustomChartTooltip.getInstance().open(shell, plot); + } + break; + case SWT.MouseExit: + System.out.println("MouseExit"); + + DACustomChartTooltip.getInstance().close(); + + break; + default: + break; + } + } + }; } diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartRenderer.java index 14a355f..6eb86d8 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartRenderer.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartRenderer.java @@ -67,7 +67,7 @@ public class DACustomChartRenderer { for (int i = 0; i < seriesSize; i++) { series = seriesList.get(i); switch (series.getStyle()) { - case DACustomChartSeries.SERIES_STYLE_EVENT: + case DACustomChartSeries.SERIES_STYLE_EVENT: //FIXME break; case DACustomChartSeries.SERIES_STYLE_BAR: drawBarSeries(gc, series); @@ -226,7 +226,11 @@ public class DACustomChartRenderer { gc.setBackground(color); gc.setAntialias(SWT.ON); - for (int i = 0; i < seriesItemSize; i++) { + int index = series.getPrevIndexByXvalue(plot.getStartX()); + if(index < 0){ + index = 0; + } + for (int i = index; i < seriesItemSize; i++) { seriesItem = seriesItems.get(i); double barWidthTime = 0; @@ -237,11 +241,7 @@ public class DACustomChartRenderer { } double currentX = seriesItem.getX(); - if (currentX + barWidthTime < plot.getStartX()) { - continue; - } else if (currentX - barWidthTime > plot.getEndX()) { - break; - } + int pixcelStartX = plot.getXPixcelFromX(seriesItem.getX(), r); int pixcelStartY = plot.getYPixcelFromY(series,seriesItem.getY(), r); @@ -261,6 +261,9 @@ public class DACustomChartRenderer { gc.fillRectangle(pixcelStartX, pixcelStartY, barWidth - pixcelStartX, r.y + r.height - pixcelStartY); } + if (currentX > plot.getEndX()) { + break; + } } } @@ -290,28 +293,30 @@ public class DACustomChartRenderer { gc.drawPoint(oldPixcelX, oldPixcelY); return; } - int newPixcelX = 0; - int newPixcelY = 0; Color color = series.getColor(); gc.setForeground(color); gc.setLineStyle(SWT.LINE_SOLID); gc.setAntialias(SWT.ON); - for (int i = 1; i < seriesItemSize; i++) { + int index = series.getPrevIndexByXvalue(plot.getStartX()); + if(index < 0){ + index = 0; + } + + seriesItem = seriesItems.get(index); + double currentX = seriesItem.getX(); + + int newPixcelX = plot.getXPixcelFromX(currentX, r);; + int newPixcelY = plot.getYPixcelFromY(series,seriesItem.getY(), r); + + for (int i = index; i < seriesItemSize; i++) { seriesItem = seriesItems.get(i); - double currentX = seriesItem.getX(); - if (currentX < plot.getStartX()) { - continue; - } else if (newPixcelX == 0 && newPixcelY == 0) { - oldPixcelX = plot.getXPixcelFromX( - seriesItems.get(i - 1).getX(), r); - oldPixcelY = plot.getYPixcelFromY(series, - seriesItems.get(i - 1).getY(), r); - } else { - oldPixcelX = newPixcelX; - oldPixcelY = newPixcelY; - } + currentX = seriesItem.getX(); + + oldPixcelX = newPixcelX; + oldPixcelY = newPixcelY; + newPixcelX = plot.getXPixcelFromX(currentX, r); newPixcelY = plot.getYPixcelFromY(series,seriesItem.getY(), r); @@ -350,30 +355,33 @@ public class DACustomChartRenderer { gc.drawLine(oldPixcelX, baseY, oldPixcelX, oldPixcelY); return; } - int newPixcelX = 0; - int newPixcelY = 0; Color color = series.getColor(); gc.setAntialias(SWT.ON); gc.setBackground(color); - for (int i = 1; i < seriesItemSize; i++) { + + int index = series.getPrevIndexByXvalue(plot.getStartX()); + if(index < 0){ + index = 0; + } + + seriesItem = seriesItems.get(index); + double currentX = seriesItem.getX(); + + int newPixcelX = plot.getXPixcelFromX(currentX, r);; + int newPixcelY = plot.getYPixcelFromY(series,seriesItem.getY(), r); + + for (int i = index; i < seriesItemSize; i++) { seriesItem = seriesItems.get(i); - double currentX = seriesItem.getX(); - if (currentX < plot.getStartX()) { - continue; - }else if (newPixcelX == 0 && newPixcelY == 0) { - oldPixcelX = plot.getXPixcelFromX( - seriesItems.get(i - 1).getX(), r); - oldPixcelY = plot.getYPixcelFromY(series, - seriesItems.get(i - 1).getY(), r); - } else { - oldPixcelX = newPixcelX; - oldPixcelY = newPixcelY; - } + currentX = seriesItem.getX(); + + oldPixcelX = newPixcelX; + oldPixcelY = newPixcelY; + newPixcelX = plot.getXPixcelFromX(currentX, r); newPixcelY = plot.getYPixcelFromY(series,seriesItem.getY(), r); int[] polygon = { oldPixcelX, baseY, oldPixcelX, oldPixcelY, - newPixcelX+1, newPixcelY, newPixcelX+1, baseY }; + newPixcelX, newPixcelY, newPixcelX, baseY }; gc.fillPolygon(polygon); if (currentX > plot.getEndX()) { diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartSeries.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartSeries.java index b906370..d48993e 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartSeries.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartSeries.java @@ -141,6 +141,44 @@ public class DACustomChartSeries { return i; } } + + public int getNextIndexByXvalue(double x){ + int current; + int seriesItemSize = seriesItems.size(); + + if(0 == seriesItemSize){ + return -1; + } + else if(seriesItemSize <= (int)x){ + current = seriesItemSize-1; + } + else if((int)x < 0){ + current = 0; + } + else{ + current = (int)x; + } + int i; + if(seriesItems.get(current).getX() == x){ + return current; + } + else if(seriesItems.get(current).getX() < x){ + for(i=current+1; i x){ + break; + } + } + return i; + } + else{ + for(i=current-1; i>0; i--){ + if(seriesItems.get(i).getX() <= x){ + break; + } + } + return i+1; + } + } public void clear() { seriesItems.clear(); diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartTooltip.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartTooltip.java new file mode 100644 index 0000000..c2cc921 --- /dev/null +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DACustomChartTooltip.java @@ -0,0 +1,205 @@ +package org.tizen.dynamicanalyzer.widgets.chart; + +import java.util.ArrayList; +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.graphics.Color; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Canvas; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; + +public class DACustomChartTooltip { + private static DACustomChartTooltip instance = null; + private Shell shell = null; + Canvas contents = null; + private static final int MAX_WIDTH = 100; + private static final int MAX_HEIGHT = 100; + private DACustomChartTooltipInfo tooltipInfo = null; + + private class DACustomChartTooltipInfo { + public int height = 0; + public int width = 0; + public List tooltipTexts; + public double xVal = 0; + public DACustomChart chart; + + public DACustomChartTooltipInfo() { + tooltipTexts = new ArrayList(); + } + + public void clear() { + if (null != tooltipTexts) { + tooltipTexts.clear(); + } + + height = 0; + width = 0; + xVal = 0; + } + } + + private DACustomChartTooltip() { + } + + public static DACustomChartTooltip getInstance() { + if (null == instance) { + instance = new DACustomChartTooltip(); + } + return instance; + } + + private void init(Shell parent) { + if (null == shell) { + shell = new Shell(parent, SWT.TOOL | SWT.NO_FOCUS); + + shell.setSize(100, 10); + shell.setLayout(new FillLayout()); + + contents = new Canvas(shell, SWT.NONE); + contents.setBackground(new Color(Display.getCurrent(), 193, 193, + 193)); + + contents.addPaintListener(new PaintListener() { + + @Override + public void paintControl(PaintEvent e) { + drawTooltip(e.gc); + } + }); + } + } + + public void open(Shell parent, DACustomChartPlot plot) { + boolean bInfo = makeTooltipInfo(plot.getChart()); + if (false == bInfo) { + return; + } + + init(parent); + + Point pt = Display.getCurrent().getCursorLocation(); + + shell.setBounds(pt.x + 10, pt.y - tooltipInfo.height - 10, + tooltipInfo.width, tooltipInfo.height); + shell.open(); + } + + public void move() { + if (null == shell || null == tooltipInfo) { + return; + } + DACustomChartPlotTooltip tooltip = tooltipInfo.chart.getPlot() + .getTooltip(); + + if (tooltipInfo.xVal != tooltip.getStartVal()) { + makeTooltipInfo(tooltipInfo.chart); + } + + Point pt = Display.getCurrent().getCursorLocation(); + shell.setBounds(pt.x + 10, pt.y - tooltipInfo.height - 10, + tooltipInfo.width, tooltipInfo.height); + } + + private boolean makeTooltipInfo(DACustomChart chart) { + if (null == tooltipInfo) { + tooltipInfo = new DACustomChartTooltipInfo(); + } else { + tooltipInfo.clear(); + } + tooltipInfo.chart = chart; + + DACustomChartPlotTooltip tooltip = chart.getPlot().getTooltip(); + List seriesList = chart.getSeriesList(); + + if (null == tooltip || -1 == tooltip.getStartVal()) { + return false; + } + + tooltipInfo.height = seriesList.size() + * DACustomChartPlotTooltip.TOOLTIP_HEIGHT + + (DACustomChartPlotTooltip.TOOLTIP_MARGIN * 2); + tooltipInfo.xVal = tooltip.getStartVal(); + + GC tempGC = new GC(new Image(Display.getCurrent(), MAX_WIDTH, + MAX_HEIGHT)); + tempGC.setFont(tooltip.getFont()); + + for (int i = 0; i < seriesList.size(); i++) { + DACustomChartSeries series = seriesList.get(i); + int index = series.getPrevIndexByXvalue(tooltipInfo.xVal); + String text; + if (index >= 0) { + text = series.getName() + + " : " + + series.getSeriesItemList().get(index) + .getTooltipText(); + } else { + text = series.getName(); + } + + tooltipInfo.tooltipTexts.add(text); + + int textWidth = tempGC.textExtent(text).x; + if (tooltipInfo.width < textWidth) { + tooltipInfo.width = textWidth; + } + } + tooltipInfo.width += DACustomChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + + (DACustomChartPlotTooltip.TOOLTIP_MARGIN * 3); + return true; + } + + private void drawTooltip(GC gc) { + + DACustomChartPlotTooltip tooltip = tooltipInfo.chart.getPlot() + .getTooltip(); + List seriesList = tooltipInfo.chart + .getSeriesList(); + + if (null == tooltip || false == tooltip.isTooltip() + || -1 == tooltip.getStartVal()) { + return; + } + + gc.setFont(tooltip.getFont()); + for (int i = 0; i < seriesList.size(); i++) { + DACustomChartSeries series = seriesList.get(i); + int y = DACustomChartPlotTooltip.TOOLTIP_HEIGHT * i + + DACustomChartPlotTooltip.TOOLTIP_MARGIN; + gc.setBackground(series.getColor()); + gc.fillRectangle( + DACustomChartPlotTooltip.TOOLTIP_MARGIN, + y + + (DACustomChartPlotTooltip.TOOLTIP_HEIGHT / 2 - DACustomChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH / 2), + DACustomChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH, + DACustomChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH); + + gc.setBackground(tooltip.getBackgroundColor()); + gc.drawText( + tooltipInfo.tooltipTexts.get(i), + DACustomChartPlotTooltip.TOOLTIP_MARGIN + + DACustomChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + + DACustomChartPlotTooltip.TOOLTIP_MARGIN, y + + DACustomChartPlotTooltip.TOOLTIP_MARGIN); + } + + } + + public void close() { + if (null != tooltipInfo) { + tooltipInfo.clear(); + } + if (null != shell) { + shell.dispose(); + shell = null; + } + + } +} diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/scale/DAScale.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/scale/DAScale.java index 55c699f..6dc2fbd 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/scale/DAScale.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/scale/DAScale.java @@ -8,7 +8,6 @@ import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; diff --git a/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/config/config b/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/config/config index 376152d..02562b3 100644 --- a/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/config/config +++ b/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/config/config @@ -1,6 +1,7 @@ -INTERNALCALL=OFF -VERSION=0.1.8 -GITVERSION=Iba5efd0d -RANGEAUTOSELECT=ON -BUILDTIME=06/25/2012 00:29 PM (GMT) -SNAPSHOT=OFF \ No newline at end of file +Internal call=off +Version=0.3.21 +Ragne auto select=on +Build time=08/27/2012 20:30 PM (GMT) +Snapshot=off +Selected chart list=CPU,CPU core,CPU frequency,Heap allocation,Process Size,Memory,File +Available chart list=CPU,CPU core,CPU frequency,Heap allocation,Process Size,Memory,File \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/custom_chart.logc b/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/custom_chart.logc new file mode 100644 index 0000000..563adf1 --- /dev/null +++ b/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/custom_chart.logc @@ -0,0 +1,132 @@ + + + 13 + custom_chart + 19 + false + + Rid + ID + SeqNumber + APIName + Time + + Pid + Tid + InputParam + Return + PCAddr + + Error + InternalCall + CallerPCAddr + Handle + Type + + Name + Color + Value + Reserved + + INTEGER + INTEGER + INTEGER PRIMARY KEY NOT NULL + TEXT + INTEGER + + INTEGER + INTEGER + TEXT + TEXT + TEXT + + INTEGER + INTEGER + INTEGER + INTEGER + INTEGER + + TEXT + INTEGER + TEXT + TEXT + + 100 + 0 + 0 + 0 + 0 + + + 0 + 1 + 2 + 4 + 3 + + 13 + 14 + 12 + 11 + 9 + + 7 + 8 + 10 + 5 + 6 + + 15 + 16 + 17 + 18 + 19 + + + false + false + true + true + true + + true + true + true + true + false + + true + true + true + false + false + + false + false + false + false + + + Row Id + ID + # + API name + Time + + Process id + Thread id + Input parm + Return + PC Addr + + Errno + Internal Call + Caller PC Address + Handle + Type + + Name + Color + Value + Reserved + \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer.workbench/icons/128_DA_icon.png b/org.tizen.dynamicanalyzer.workbench/icons/128_DA_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb0a5d51cb315305b36c854c03d00355bf4a788 GIT binary patch literal 8433 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 N1sPT88kl+5{{YnB+V}tf literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.workbench/icons/16_DA_icon.png b/org.tizen.dynamicanalyzer.workbench/icons/16_DA_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb42a4fdcbb13bf1c4ae87e23610ee5c77c5f4 GIT binary patch literal 3159 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.workbench/icons/20_DA_icon.png b/org.tizen.dynamicanalyzer.workbench/icons/20_DA_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..519dbd02b31691798dc97ba3300fad37fe54911e GIT binary patch literal 3258 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.workbench/icons/22_DA_icon.png b/org.tizen.dynamicanalyzer.workbench/icons/22_DA_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8546053cd7eede50b1c6fcbffd349e77897b9ba9 GIT binary patch literal 3513 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 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.workbench/icons/24_DA_icon.png b/org.tizen.dynamicanalyzer.workbench/icons/24_DA_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..efe6f11f8a77252d0da0b7bd01937f70dc427266 GIT binary patch literal 3576 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�PRl1k-M24sPS^6uWhMT8)fgCtK#Ct4i;GaUT4g!suiVT?8SeBp%Q{d2h{#C z&NmkaPcDH4f@r`WP1k6l8M3O7fU6qYlT&e@rVU663ssIUNH1!>LjT|5WY3B;*#+#tD<<1m{>yJT}Ah_u9RkL68S zpbk#Wv55aTv8z)07IDS^W?ury+&mH(Q=WSJ1br+YzqYHokhH)usJ@*6$TN|~F^~g3 zur{}i>>>QHN+(n0pgjY^?YoL|k!ah^??BI26%vC)RKFj|hhykZiu5$jq3WI5y7#m*EJhkKVDH7E2}HBpV&M|9}(iXE!_EPrA??n^!Xvpd({mUQDnG;E}OQa%WOT_uC5yKKVCuvUOVI! zC6}K;L<8?R|LzTJJ2ey7ae4e9ypkUC=x9A38r$EQ&%MM$`xJ1uLJyH*MvPhw|81(8 zX9riKS5AW*z-hZ7Zl|n>9VjVHnk8Dz^s6c(?S>7EEdLAaD-{)0z%r+m5F96i+g${d zFih4k{CIKw&M*YdCg`d^kM6bOEcX$SZ?@d%@>UQA0BYzx4QmXG-2>*WQ8^=KauazD z@Q$PRhwh3bWZr}ASU*#Kd;_Ln%e#a`07c%lPj#FH&-H+4hb88jA1vFCF4zmAQH2-~ z6;P*5BgV}9%;aUo_-PGA1r%Z5cJ97BBD=O}=k#bbwhiM|p6%kInYu>LcKPix zFV~h9tvAT~qSRvnG=CDf^nR%5)42wI*iHEI`OTF?>+YJoLRo+zFoPhx6;__G9aDETXki*MhHJmgULJdbL6YYn_A4kxY`;^u8qDr3e zft1|U{b-NPGQSMbWvg~LcVFDAyl?nTqiBEDf|sPDR*3lZ^wITXJ=!swrtlYrrv7^7 zVm6hBd|6lc&Z2PM0BDA+(jXS6a7@psW&)WQP~gR83=H7NSN&kSVI0JP^x)W3$=CM2 zI*7>>{Ph<9<7%D7vLhL$+1`WGSINlYW$hd1N{2@Dy_OK20FhwJQSQWk8J{nBY z_s~SM0)KAsR>l5m5&Za@y1%UQiRE?7B?*DDI!F zu+6vfo^h7b-{j9r5xW~9i(5g5?r3nrv~mSfs(G~g-a{F>L>|Rj!{tkFZ`gBaCkr1C z&jV$pB3BE64MADCA<<;PJs6$DnBsf{nX-NiGB<~c+hx~wo#+T5P-@1g495Hgkk#myTwyd9nb?wJ_(C5t z+cD1?5Oeg)TO^9sDMy{VbF$%u6Gbrr65#f>0tnk6)Eb>YIfQ2y0Ygh97FlC7%72`g z_vV8v|H)p(E*QoIU0aPo!c?LDXmeHo(=(WMjsXVki8Om=u3SF%Qg5=c^+vy?u!IVF*DC63TeFS6qrF*3xXM0Bn3Sl zz||)8J|UO^i!)-!^By~VP`M?eff-%9mk{(MV0FF`y9+>np%$Y2yJNlM_H;=jp2q}_ z1wEMKQ@sOFQuyg_=|eWeLiudF1|dx}_$4m?_Y19^t!7D@>*{JpJm2v&K?s!wwDZHl zYp4?9B=BqtEjSMnpk<0VpB*#ie>eblb$awsodNAa32r9X(TmxRukMC1>)?RDL}B#; z0aJ))kx}Hvfy{u_QeLIrRYt-Md2k#f)sAmGrI<1w`EVB3wi z#@48kdtL@5U0HV3{XHsInGoE{hF z3oCGt$Sak)IXaU+KUvP*^i(|a$-52cA2tt3XfqSZ7Duy_Fh85pH`|{(LQf+oyoqnO zVsGIi#E@u)Vf~tZieOQUZ=@9H!O^Zm4ETRR;EF3gF(dzVc6M?>!M#kEaVrCg0x6N? z-m(E5FV8wZcM_V07nM?3@YqcXYlBH3cG&5zM@S44ufuScuIw?LDTTPT81C~1QoFAX zD|4>w|1S7l1_q_X4;Wx5ac=V=1d&LR?%c+(SKqEJ=C8k*Og!{$A8n@zTs2a4fQ|fv zt?~5GHC8$$w5vLE63|sPxoSV}RC+hKgN)c0dl_wu$#Jc_}$o6*#a>Tie zi+8OGV4meSbVNaFpt%}IsmpWCN>;UNfSS}F$;d*Hk_ePhItL(b7d#(H-Ox*1m%^Es zZSnl&A(SB*x;U3Pvf+HnFT|du@}R0M&EnFhAIwdbkGKbq@h{K5?~eH`tp)2C2p>ur zP)i0LkJ^a`f=axa4qHt?lveUY7D8e(HR@uDR>ZTr)V&z3jNo9$_b{VQ7G#kHR@eE^ zc_r%?7_V$DA>4`qVUc!k6|(d^2a0~|t1puKI4b)#mmOp%NO~j+c45%E;eU8e*iNNn zb#DmG>#_Y&v$mr4#~uXhWa>!g$Y)Uu64q7-ejSzj5&L-Gm-MB7)7vC$ivldRh-1R@ zXGG9D?|GkcmVbpwagzY~Ri=y-ITLu^D|L0hpOa5M;7?zRzqi1*DZ|aAZwSGL{AoZD zCW6&)`u5T3AU8~s7|-AbvB`~9u*k+T;n>V9J}V>ompCakaOHkgH^}%9IJ<>?H%otP ze&z|6Uqu#mB>A^&5Xz-Gt(kE~<4L;nHZ*sHWjB(O77eW-d85}{SWN3Wo6qI9Gh{~k z&YQ!avqc2J=Sgl0I78(I0lbZy8gz-1y-sehGCaPinJdZFjwGeZ+TTX~Ra>R`~Q_m|cdZ*v=Q&Y_Hy)(RYSJ+DGG}j{*^Q zQKs=cPYuyzKkgaK!Pr?wOS$F1mD7|7o>hTv5VK344?zqKf|S2M;IEk_S(C+YK)Y^= zdBP)D_O5abhxo8Xi?HUwO{2oCz`B#+MXE`pR`(=(jNW!%TO2SRiTjmBkKyr?u&@-1B}g-wez+x!W14mdndox& zt3Lk?xQV(P#VQo{_w#c0UZWjptk8u<1zC`S(vPuTy7Nrm)oh+m#qWABF$y!Up1qCn z9oO@rl)R8t0ax-=oq~D_(>y&ja!5UTWZygu!<0$UW%RLl7!dxer#=v!re(9ME-F2d9(+Twqt&q8+qMzpj*R?F}&^`4t?pwe_+M93MCuqH0pl z_~FsRj_t#2SNO7fGsXJd8?!+C#vazn=>sAL$=_n3hfTQd@BRy)O?8u=Bw==3gd^1y zAN3fcS-ZgDqX1`oI_8x~xxR=fnR-zqrb{_NN?EY8A^3E?@MGth@Q7DqemA@2o>z{% z)z6(qbR-uy#Xc?O?A$*~P3r5VNwj@y!;ZYp++4?r2Y5tzzfa&G>>@+T9sDnI7$KGu zk!lr^i@QN{vNhbx7kiHvC6qlL24C^(MUKVSTOi58$BY1e7F_7?bA z3C@$>Zo^r*xjr!q)#{r&=M%xdD!Pj(1j#Ozdv$J1un(hBn#3+Zc~oI<(YqBZ{J=`} zW-{aLR&$mrACGe9R(o(^r7)5$6M05=l}V60_tP{e(bB!VBQLrcyyTYyu`pVuLVp7% zG)-I?O>dZsm9Oog`MzXlw~7S3PLTF$o%4xAVdIG`@q&lPIr z8hf!6x*yfr-+XRHjCkF7O$Y)O3kK}#I5V%@n|2wZe-YLxUN0XhBzh^_sm6sl+{3eW zj#po{Goa-RR0NgF-z*Tq{(h%+cxYnelbejyVvhHN!o1CTefZc#{Z|CLU#}OO&-+Z& zJSbow3qM^PGd}+HD?TgJVUVmCwP<+fe{>yT3L-{)S%y}$Z}HB9rMvIyzS#V@{wk~B zcEV@Y+86O#SRg{PD6i$7v_hI8A!aA|@2t6e!%O>V%3hq1a>lkiJo`+qjuZ*fo4mW-c7+CCo)(6BB*%Ix zeVA(uA=ZMSrF9bqrwrNKy&=K*h3I+dOGwS{d1L1_ae#esb*u5i^i8*x!0!o3<>cHM zYzPt+I8Fm24>w=bx654QoZm)%U8~5Ep{V+oR`pttNmU@*@63LEGFT~(@!oj`VKe=D zw=^o*Us5ven)qPyLyl&>J}3Azx7KQpsr^dfBJCQKRo?&mfg zy?38SMrFxvgWHvbQaM0|Zu<0tvmEx+o^}b4jgLR}yXq0#JP@;qupQ^m-U?q+m4BbE z&oy-$eWEaQ^)Ke!1bVIw;DI4u#q|1i;rXvK7{^#w_hYwZn6MI~i z770#^Idbi=GYX@jOM0!0xj%%CBay5ReAi@ThJk0!S$IBMgHhw2y8_RU3s;8< zdZZ$=-iO8(IofzOTWh=Vw)4xFfH)_beZ4FoE@RK*9!K>ly~<(%5g)*|_8z83=|NY` zjLj)2gDdVymSzo7BC-Jcn-NlnFZdrfhxtq`zwX|wkVRM5navVHQkQUjvOGqU60;~S z9ny0~wW&zEGwvs@vH`IYj&hVe5@ zKk9#=Wk2*ShHj&(C_f}Q%TWuVn+`^WK0EqTZS3P-);z%g{9Js(R;*fcQ_(4bQ!d#x zlq>MjNs#I|{;3*v3e}}? zncduT0?m&W?QX=G#IL7ygi?M!%4%!5+*eXuc98%}Vw`CfVta|!z1P>tvINvU*WkB- zj9VACCj+-A29W;A?S=gTAz347ebfg(fNFw3V{_ zHzlDCMQmnWCy|3zPLhSN1^MgVHVNh7FC#N@D`kJ5&0ja zYMo|#F&{SGu+V#hG!n9XKU zO+n7Fmt13xKL|Q4`?kk8MC29x-|;P(=NX2Cn17!cZ$m!uApfXf3wGQhVBYx|h{(HU zT9BrFghjNRD9sKmFMRV*>Uo5 zyudrh|M5s9^gs(~^&12EuL_EJRP;g*e>(faLY+(0?9_+!`q|E_vpq>#R?S31TsDnXs*lFZzNeo$ewa3O+gv%qLS-db;_R9Q=`Xh zIaF;d`Xv~(Vbc9kDcF-h9xK;QO+GPP^z&b?INjJt+N4z_DfeCm{jIB2+CTMf<;p0P zfz-jHf)VOHVf<2IiQ(OYjnf8C=tu^5Ixlg)C6aBjq!;p!+40IRL$3v zULdJk&U+5der3Ot`G?1P`w!wHbdN0tFTGNd<)_Yz3GOueGz0J0D zTUvv7KfSAq`rE6>Um_@c8$ot!|15mxmh>&L#!T#Dily<_xk6u z>Mw5j-aanw`ta4nBvg64ib~wIJV&20rp&wAT;RCa=~RU&(gWy*Oo8Vq46RY91-OlX z(F_X_fCgcM6*W*MvaH_twTG`$2kBjl0&+i%Fr~Y&1u%Homn!jq`~w{RzvFN572N6a z>?64ORd#o2Yt7#UMOF)5kzpmGYg8S}#w`8~>SWl~9D5!>-IE)L^)r0Q#LXb@@A&=m zN1b}f3^KQ={Lvjt8s#0Rs@`IP?pC7+I|;Y4fBxQ$ObQN)DH;tsd2`se_hcl{(gwpV z+NEPW@LJp?ptU8bVw0hCxAbhVt&^!B=u+U~0<#*T9F1;#*vxR?nYuzvE$F*=He-fW zTSx4}zWVj%_v>=wkZxMAN?YA3F2*I;_vyPr|+`FzoD2GL_n)E#3~)3?Xx7 z&vPG0;c>P%7n?*4KrK#Xd}qo1sJz+$j{7kt56Jn(c$Fl+-GPFS)}P@}n=tN>TU21i za8kFdcge{rhLiP^@i&plv_wu(yZEtFHQuZ_FNJ5S!FJy~!GFWt3k zz+e@3mv5Q~8>(x+`MPtuSisa}^nyH@D$vF>NUvx@FGB#kgDC-(HC+#H75&||T|Yme zQi={PFm{%oNI%6iQMHjkWuL_dgc@;_XVB7zxrV3rAJ+_SIX$<}O3#{q{VxFiP z(XWohGT&hf_Fb(h?wm*2#wNsM#sOQ=<4CxOo_@wN5;l+_#Qpmne_-g4N?b;)UK|15 z>JPu8Fp&b%zEId$stgQc0$XAE!J0eGx~E4`rP5bje1B)hs-_JVHkDmh!N6Pe%wlg% ziyyvxBsrS5(j6&|jx3N~3#)UXL z(iE!5R|ODNAs8ou777_kdk?*9Mvo^$N~neTc|*?i*`HUsr!sQ!6cBv>_WfM-rMUz@ z@7Eu!&ll$$fBQ9JB5mB!hegR5L547ApUtUbZ@ts$>(srI12d+Y%GF%_Fcot(#F!KEVMp*#|w+wmxX1>)8heECHKuKCAY zt7kt}WVE+}(GKV~ZA&dm--Kba2DAOE`Csyzh?s`AeJ`hvMDHow9Sa{a8S<;B?O5^% z6(twc)l7p}(7ReoR#`oaj=8Q{>0a*`DJxe#rj3>`&Xzrny_WcE#*pzWw~G}Bq_ zkumLSzKvFcH_I-f@}o;;@+fM6<0P_SBi&$pZr+hg(dkKhAdwA$tx@{d^iLHB5@F2} zn)RPEX8t~4-^|T%9@k?9KLZP>3^D{#7cjF1Tj!p@cMDtnw9jrFDD7O#|GKxscZkE9 znlz^JT^@U4%#eA7>iY|sfHzucIFD_gjxjs^(_BUNPva4xw%2~c*EL+PBl*4e(RLC6 zz5{JtCe?#_6@)Q=*sI*>O@scSc5P0(1y?LF)?H83j%;$C%B*21q=RMP{g>&RtBHxD z2G1aBZh%WkwGNpBMYwe^+)<5GM;N6RJ^H!~av%Rjw#Y7j(LKuD^*Eh%zZR ze1@M^zCzj`Ywrgh3Zv7OQ*7ZeL3;<=ZIhHIRpiZd*JN{VksXritCyo9?rA^qk3W3K z+Zaw4|AOrju-b>BlmuCe0m8dK^fIKn|4?6q9Ge|AeXw6N=O;xg{l;;q}|It>;{rw1Uxv)b@|09Q7g1xjD^P7vT zK|kGP7hhChhn5xK_j7S&h*nCtkazrp+V5V0*eGD@ptV2VemYGk$Vp?*I#+ejeh<06 zl%n*c&_R(&BSrAAk+4$tXBUz07(B}xK?(bmSq?rfICnp#>xB8iP($KU$#=B)`pK$8 z{GojPu5rG$0p6|DI#~|d=APhO|6_T*sE*hpX+l96{BIO|8A94!i|Zt;!{1jm8YD5i z?ojnXmaIxpyK=;VM!l7*8N^~sS5|Q-o%+MY`KQtqE|hVV%yw)HX=_wI)MT!2AI`P_dn4YL4*rGNhFe_VGCN!~`K?5C$?QAhVQr1DTO*kM)ucCSCm^lZ3 zV0BFP<%UtFModOq$rv^;Evu@(=Vb()>nE?>^&_x&-kqmMLI!=N=p=2pvx&<#oS}Aca-lA1LK zG-Zhajnh9P& zih>Oa-54AD@D#VnlsT2;PyMqn5AcOh7JED=^nx3|P~%}|xc(XnVr9j>MeZOtiBNE~ zm9?LQqHZ2lw37?hOvw59O*ev2DYB8ZXS=L|AsQVoF0ZIcuuQ}X=T12Y_=kg|7m`#y z$&(#V($c|J>a5`Wjh3Hmw-C|m?w1x^@y0U7&IpuN%&h^g=Y${p+E5cxz%!a*qY>23 zN)E81R!bMMabYD~x;A?=TUW+~P`e%?O=5ir_HQ-}3Y7Ad0SSB)}NP^Mp_ z(`hx1A_%+Zb5E``F)0`wgLC3c576GgF#rJ_#+1Uw+)+4u80IZ5KG7gm#;XI9?|M%jGqPM80o@di_1dgjqLZu$SDYr}u% zH9Z3-`MKsf$NT`=;sT@M#Fh+XHnSx@vC*=Ym{jTP*HgW?E^Mx05G+yjnX+Vw0`E>! zMazoWF%lcK_6-u`uTHSkzloc^2MwKi_L4s z(qb&s90|_NI&j7p(o1bdiEO%5$k_&TweZeCY=V9@AO7eG!DJSlqj~niYGKlC{@jff zGGjS=q}4y%QKFgY`q$i?rN#pXH9CrbqNLkaaeMZx`)GxpDh%Z!=gG<3Zu~vf#6ZnK zIjz0@W8|;)(LL-DeaP(IUP4iH zY!@&6pg{vO)IJM{GSi&su{#DpLlT5+JI1IegSA^?`cl&{suGJHv@#d0fj)&C^+ey% zZeII+WAUda5p_gZun2q&&Po&4E$?3Qm_B|dN1bW9Nen*st z`FfbPQqPOm`HLfIyw>5Ke>)%VNpA#?|?qUBtZ zMoZgS+H)fwQNW}~c;d^At_QhsEpN0q!M39S9>@K#X~Pw=lanN7H8F8{UgzJYYTosq zw=zF1R4{?Iz`&+8-glCx^#*x2V(p#V9YFeLh!LQB(ypuPGGnUZ5!lCHdiZ8E|!auoLw!$p0<`1uN z?}n4G{@wh<*Dpl)-a~^OyyrYSBG%lZ4woe=4Z&a^+(D9`eZE1@;dKC7jJj8Qvdo9p}HSC9P8o8 zi-TfmHwels>WB1Vn3mvNB%YE{uZ1n9PWDK|V%O1m!SQBh{*8a}O%M06-~9RoNtGjL z*y4tQqHF6U@1j4UIGr_fH0%B7fxM+n;ny{^p;R2lW znrd+6p+mjsl(NlzMMcb>=Wl4?E9g(77$Xd;0VSg+E9IueK4+R;f7!8^YlDShq> zVA5$WtWG_34Bi;qD?^0Vy{Rel1vkDCF3s~!a)d!j^%7maI|Dtw*`A~Xe!r(Yx26SE zBE^0z&J4Epxsg7IwT^68`3JgS*pFIZ`v+7B4;SDBh-(u=mHL8IK%GdUXCw4>Tc~Yp?QXo)m zr7%$5i55!mbu{RI&y=|qvrx*TltJkm4?y~4KLs3gM}_P@3grYOdVuXP)1a~Mcyr)9 zToO$tIcPKuTHahN%+e4@nTMn~eR@(m$)4AQ-F?dRG!-;M`;d$GF4(Y_9HqISBM8-N zPTnCDnsSI$4OpgK+wm#z#6F+!igd$;k=yE4)2FO?n$7;nZSU~9em@)9^enOgB9Ag7%DVrryT1GB<^v(n&fKw0mBN4rpgwBK&y>m) HEQ0?BzN0pZ literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.workbench/icons/32_DA_icon.png b/org.tizen.dynamicanalyzer.workbench/icons/32_DA_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d8d4928f665fea3a2bbd361f594b07b250bd0e GIT binary patch literal 3860 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

4`}YK|~|UAli^hrm$8JWoUeKJ%|vGMoXX~ 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 W|H=@2bfYY8`ujR~6qN7(^Zx;VP~g)5 literal 0 HcmV?d00001 diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java index b19ed7d..9f24bb0 100644 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java @@ -19,52 +19,92 @@ package org.tizen.dynamicanalyzer.workbench; +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; - public class Application implements IApplication { - @Override - public Object start(IApplicationContext context) throws Exception { - Display display = PlatformUI.createDisplay(); + private final boolean STDOUT_TO_FILE = true; + + @Override + public Object start(IApplicationContext context) throws Exception { + Display display = PlatformUI.createDisplay(); + + try { + if (STDOUT_TO_FILE) { + String logPath = WorkbenchPathManager.getLogsPath(); + File logs = new File(logPath); + if (!logs.exists()) { + logs.mkdir(); + } + + SimpleDateFormat format = new SimpleDateFormat( + "yyyy_MM_dd_HH-mm-ss", //$NON-NLS-1$ + Locale.KOREA); + Date date = new Date(); + String logFileName = "da_log_" + format.format(date); + logPath += File.separator + logFileName; + + File file = new File(logPath); + FileOutputStream fos = new FileOutputStream(file); + PrintStream ps = new PrintStream(fos); + System.setOut(ps); + System.setErr(ps); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + String[] args = (String[]) context.getArguments().get( + IApplicationContext.APPLICATION_ARGS); + if (args.length > 1) { + ApplicationWorkbenchWindowAdvisor.deviceName = args[0]; + ApplicationWorkbenchWindowAdvisor.appName = args[1]; + } + + int returnCode = PlatformUI.createAndRunWorkbench(display, + new ApplicationWorkbenchAdvisor()); - try { - String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); - if (args.length > 1) { - ApplicationWorkbenchWindowAdvisor.deviceName = args[0]; - ApplicationWorkbenchWindowAdvisor.appName = args[1]; - } + if (returnCode == PlatformUI.RETURN_RESTART) { + return IApplication.EXIT_RESTART; + } else { + return IApplication.EXIT_OK; + } - int returnCode =PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); - if (returnCode == PlatformUI.RETURN_RESTART) { - return IApplication.EXIT_RESTART; - } else { - return IApplication.EXIT_OK; - } + } catch (Exception e) { + e.printStackTrace(); + } finally { + display.dispose(); + } - } finally { - display.dispose(); - } - } + return context; + } - @Override - public void stop() { - if (!PlatformUI.isWorkbenchRunning()) { - return; - } - final IWorkbench workbench = PlatformUI.getWorkbench(); - final Display display = workbench.getDisplay(); - display.syncExec(new Runnable() { - @Override - public void run() { - if (!display.isDisposed()) { - workbench.close(); - } - } - }); - } + @Override + public void stop() { + if (!PlatformUI.isWorkbenchRunning()) { + return; + } + final IWorkbench workbench = PlatformUI.getWorkbench(); + final Display display = workbench.getDisplay(); + display.syncExec(new Runnable() { + @Override + public void run() { + if (!display.isDisposed()) { + workbench.close(); + } + } + }); + } } diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java index b7c33fa..dd4e94a 100755 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java @@ -67,15 +67,15 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { @Override public void createWindowContents(Shell shell) { CoolbarArea.createInstance(getWindowConfigurer(), shell); - - if ( DASingletonFocusManager.CheckDASingleton() ) { + + if (DASingletonFocusManager.checkDASingleton()) { System.out.print("Already DA Running \n"); - DASingletonFocusManager.SetFocusDA(); + DASingletonFocusManager.setFocusDA(); System.exit(-1); } else { - DASingletonFocusManager.SetSaveFocusDAPid(); - IDEConnectorManager.InitIDESocketThreadListener(); + DASingletonFocusManager.setSaveFocusDAPid(); + IDEConnectorManager.initIDESocketThreadListener(); } } @@ -107,7 +107,6 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { AnalyzerManager.setAutoStartDeviceName(deviceName); AnalyzerManager.setAutoStartApplicationName(appName); CoolbarArea.getInstance().autoStart(); - } public boolean preWindowShellClose() { diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java new file mode 100644 index 0000000..4ba5ef1 --- /dev/null +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java @@ -0,0 +1,205 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Jooyoul Lee + * Juyoung Kim + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * - S-Core Co., Ltd + * + */ + +package org.tizen.dynamicanalyzer.workbench; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +public class WorkbenchPathManager { + + public static final String WIN_INSTALL_NODE = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";//$NON-NLS-1$ + public static final String WIN_INSTALL_KEY = "Local AppData"; //$NON-NLS-1$ + + public static final String LINUX_INSTALL_ENV = "HOME";//$NON-NLS-1$ + public static final String TIZEN_SDK_DATA = "tizen-sdk-data";//$NON-NLS-1$ + public static final String TIZEN_SDK_DATA_PATH = getTizenSdkDataPath(); + public static final String INSTALL = "tizensdkpath"; //$NON-NLS-1$ + public static final String TIZEN_ROOT_PATH = getDefaultRoot(); + public static final String TOOLS_FOLDER_NAME = "tools"; //$NON-NLS-1$ + public static final String DYNAMIC_ANALYZER_FOLDER_NAME = "dynamic-analyzer"; //$NON-NLS-1$ + public static final String SAVE_FOLDER_NAME = "save"; //$NON-NLS-1$ + public static final String LOG_FOLDER_NAME = "logs"; //$NON-NLS-1$ + public static final String DYNAMIC_ANALYZER_INSTALL_PATH = getInstallPath(); + public static final String CONFIG_FOLDER_NAME = "config"; //$NON-NLS-1$ + public static final String CONFIG_FOLDER_PATH = getConfigFolderPath(); + public static final String CONFIG_FILE_NAME = "config"; //$NON-NLS-1$ + + public static final String OS_KEY = "os.name"; //$NON-NLS-1$ + public static final String LINUX = "linux"; //$NON-NLS-1$ + public static final String MAC = "mac"; //$NON-NLS-1$ + public static final String WIN = "win"; //$NON-NLS-1$ + + public static String getRegistryValue(String node, String key) { + BufferedReader br = null; + String value = ""; //$NON-NLS-1$ + + String query = "reg query " + "\"" + node + "\" /v " + "\"" + key + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + try { + Process process = Runtime.getRuntime().exec(query); + String encoding = System.getProperty("sun.jnu.encoding"); //$NON-NLS-1$ + + br = new BufferedReader(new InputStreamReader( + process.getInputStream(), encoding)); + + String line = null; + while ((line = br.readLine()) != null) { + int index = line.indexOf("REG_SZ"); //$NON-NLS-1$ + if (index >= 0) { + value = line.substring(index + "REG_SZ".length()).trim(); //$NON-NLS-1$ + } + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + return value; + } + + public static String getTizenSdkDataPath() { + String defaultPath = null; + if (isLinux()) { + defaultPath = System.getenv(LINUX_INSTALL_ENV) + File.separator + + TIZEN_SDK_DATA; + } else if (isWin()) { + defaultPath = getRegistryValue(WIN_INSTALL_NODE, WIN_INSTALL_KEY) + + File.separator + TIZEN_SDK_DATA; + } + + return defaultPath; + } + + public static String getDefaultRoot() { + String rootPath = null; + BufferedReader br = null; + String line = null; + try { + rootPath = TIZEN_SDK_DATA_PATH + File.separator + INSTALL; + File file = new File(rootPath); + if (!file.isFile()) { + return null; + } + br = new BufferedReader(new InputStreamReader(new FileInputStream( + file))); + line = br.readLine(); + return line.substring(line.indexOf("=") + 1); + } catch (IOException e) { + System.out.println("Fail to read."); //$NON-NLS-1$ + e.printStackTrace(); + } finally { + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return rootPath; + } + + public static String getInstallPath() { + String installPath = TIZEN_ROOT_PATH; + if (null != installPath) { + installPath += File.separator + TOOLS_FOLDER_NAME + File.separator + + DYNAMIC_ANALYZER_FOLDER_NAME; + } + return installPath; + } + + public static String getSavePath() { + String savePath = TIZEN_SDK_DATA_PATH; + if (null != savePath) { + savePath += File.separator + DYNAMIC_ANALYZER_FOLDER_NAME + + File.separator + SAVE_FOLDER_NAME; + } + return savePath; + } + + public static String getLogsPath() { + String savePath = TIZEN_SDK_DATA_PATH + File.separator + + DYNAMIC_ANALYZER_FOLDER_NAME + File.separator; + if (null != savePath) { + savePath += LOG_FOLDER_NAME; + } + return savePath; + } + + public static String getSdbPath() { + String path = TIZEN_ROOT_PATH; + if (null != path) { + path += File.separator + "tools" + File.separator + "sdb"; //$NON-NLS-1$ //$NON-NLS-2$ + } + return path; + } + + public static String getConfigFolderPath() { + String configFolderPath = DYNAMIC_ANALYZER_INSTALL_PATH; + if (null != configFolderPath) { + configFolderPath += File.separator + CONFIG_FOLDER_NAME; + } + return configFolderPath; + } + + public static String getConfigFilePath() { + String configFilePath = CONFIG_FOLDER_PATH; + + if (null != configFilePath) { + configFilePath += File.separator + CONFIG_FILE_NAME; + } + return configFilePath; + } + + public static void pathCheck() { + if (null == TIZEN_ROOT_PATH) { + System.out.println("Tizen Root Path is null"); + System.exit(-1); + } + } + + private static String getOS() { + return System.getProperty(OS_KEY).toLowerCase(); + } + + public static boolean isLinux() { + return getOS().indexOf(LINUX) >= 0; + } + + public static boolean isMac() { + return getOS().indexOf(MAC) >= 0; + } + + public static boolean isWin() { + return getOS().indexOf(WIN) >= 0; + } +} diff --git a/org.tizen.dynamicanalyzer/lib/sdblib.jar b/org.tizen.dynamicanalyzer/lib/sdblib.jar index 5ab9901514af09ad4e92d08173fab7080048e0af..d10065cbd98559e4118a9383e1ef404aaa982b79 100644 GIT binary patch delta 22643 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 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerManager.java index 735a5a9..99f823d 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerManager.java @@ -37,6 +37,7 @@ import org.tizen.dynamicanalyzer.model.InsertLogQueue; import org.tizen.dynamicanalyzer.model.LeakCheckList; import org.tizen.dynamicanalyzer.model.LogCenter; import org.tizen.dynamicanalyzer.model.Project; +import org.tizen.dynamicanalyzer.model.SnapshotData; import org.tizen.dynamicanalyzer.services.RecordStateSourceProvider; import org.tizen.dynamicanalyzer.theme.DAThemeWhite; import org.tizen.dynamicanalyzer.threads.InsertLogThread; @@ -173,6 +174,27 @@ public class AnalyzerManager { public static void clear() { if (null != project) { + if (!project.isValid()) { + try { + project.closeConnection(); + String sourcePath = project.getSavePath(); + if (null != sourcePath && !sourcePath.isEmpty()) { + boolean success = AnalyzerUtil.deleteFile(new File( + sourcePath)); + AnalyzerManager.removeFromProjectList(sourcePath); + if (success) { + // add snapshot model update + SnapshotData.getInstance().update(); + System.out.println("invalid project deleted!"); //$NON-NLS-1$ + } else { + System.out + .println("invalid project delete fail..."); //$NON-NLS-1$ + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } project = null; } @@ -484,17 +506,17 @@ public class AnalyzerManager { String state = AnalyzerUtil.getRecordState(); if (state.equals(RecordStateSourceProvider.RECORD_RECORDING)) { - CoolbarArea.getInstance().StopTraceButton(); - SetTraceConfig(deviceName, appName); + CoolbarArea.getInstance().stopTraceButton(); + setTraceConfig(deviceName, appName); bReTraceStartFormIDE = true; } else { - SetTraceConfig(deviceName, appName); - CoolbarArea.getInstance().StartTraceButton(); + setTraceConfig(deviceName, appName); + CoolbarArea.getInstance().startTraceButton(); } } - static void SetTraceConfig(String deviceName, String appName) { + static void setTraceConfig(String deviceName, String appName) { setAutoStartDeviceName(deviceName); setAutoStartApplicationName(appName); CoolbarArea.getInstance().setDeviceComboText(deviceName); @@ -503,7 +525,7 @@ public class AnalyzerManager { public static void recordStartWaitEndDlg() { if (bReTraceStartFormIDE == true) { - CoolbarArea.getInstance().StartTraceButton(); + CoolbarArea.getInstance().startTraceButton(); bReTraceStartFormIDE = false; } } @@ -638,4 +660,5 @@ public class AnalyzerManager { public static boolean isDataProcessEnd() { return dataProcessEnd; } + } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerPlugin.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerPlugin.java index 8c3b20a..397f6a8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerPlugin.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/AnalyzerPlugin.java @@ -51,7 +51,6 @@ public class AnalyzerPlugin extends AbstractUIPlugin { @Override public void start(BundleContext context) throws Exception { super.start(context); - plugin = this; // Adds workbench listener. @@ -70,40 +69,42 @@ public class AnalyzerPlugin extends AbstractUIPlugin { AnalyzerUtil.deleteFile(tempFile); } } - File tempFolder = new File( - AnalyzerConstants.TEMP_FOLDER_PATH); - boolean delete = false; - if (tempFolder.exists() && tempFolder.isDirectory()) { - String[] list = tempFolder.list(); - if (0 == list.length) { - delete = true; - } else { - int count = list.length; - for (int i = 0; i < count; i++) { - String fileName = list[i]; - if (fileName - .contains(AnalyzerConstants.TEMP_FOLDER_RUN_PREFIX)) { - delete = false; - break; - } - if (i + 1 == count) { - delete = true; - } - } - } - if (delete) { - File tempDir = new File( - AnalyzerConstants.TEMP_FOLDER_PATH); - if (tempDir.isDirectory() && tempDir.exists()) { - if (AnalyzerUtil.deleteFile(tempDir)) { - System.out.println("Delete temp folder!"); //$NON-NLS-1$ - } else { - System.out - .println("Delete temp folder fail..."); //$NON-NLS-1$ - } + // File tempFolder = new File( + // AnalyzerConstants.TEMP_FOLDER_PATH); + boolean delete = true; + /** do not delete : for multi da running **/ + // boolean delete = false; + // if (tempFolder.exists() && tempFolder.isDirectory()) { + // String[] list = tempFolder.list(); + // if (0 == list.length) { + // delete = true; + // } else { + // int count = list.length; + // for (int i = 0; i < count; i++) { + // String fileName = list[i]; + // if (fileName + // .contains(AnalyzerConstants.TEMP_FOLDER_RUN_PREFIX)) { + // delete = false; + // break; + // } + // if (i + 1 == count) { + // delete = true; + // } + // } + // } + if (delete) { + File tempDir = new File( + AnalyzerConstants.TEMP_FOLDER_PATH); + if (tempDir.isDirectory() && tempDir.exists()) { + if (AnalyzerUtil.deleteFile(tempDir)) { + System.out.println("Delete temp folder!"); //$NON-NLS-1$ + } else { + System.out + .println("Delete temp folder fail..."); //$NON-NLS-1$ } } } + // } } catch (Exception e) { e.printStackTrace(); } @@ -111,9 +112,9 @@ public class AnalyzerPlugin extends AbstractUIPlugin { @Override public boolean preShutdown(IWorkbench workbench, boolean forced) { -// AnalyzerUtil.executeCommand(ExitHandler.ID); -// -// CoolbarArea.getInstance().dispose(); + // AnalyzerUtil.executeCommand(ExitHandler.ID); + // + // CoolbarArea.getInstance().dispose(); return true; } @@ -166,5 +167,4 @@ public class AnalyzerPlugin extends AbstractUIPlugin { super.stop(context); } - } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ColorResources.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ColorResources.java index 45d578d..bad4d34 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ColorResources.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ColorResources.java @@ -276,9 +276,6 @@ public class ColorResources { public static Color ITEM_BLUE_DARK = getColor("item blue dark");//$NON-NLS-1$ public static Color ITEM_BG = getColor("item background");//$NON-NLS-1$ - public static java.awt.Color ITEM_BG_AWT = new java.awt.Color(50, 50, 50);//$NON-NLS-1$ - public static java.awt.Color ITEM_BLUE_AWT = new java.awt.Color(38, 104, - 138);//$NON-NLS-1$ public static Color TIMELINE_BG = getColor("timeline_bg"); //$NON-NLS-1$ public static Color TRANS = getColor("timeline_bg"); //$NON-NLS-1$ public static Color SNAPSHOT_CHART_FOREGROUND = BAR_GRAY1; @@ -288,9 +285,6 @@ public class ColorResources { public static Color GRAY_170 = getColor("GRAY_170"); //$NON-NLS-1$ public static Color GRAY_210 = getColor("GRAY_210"); //$NON-NLS-1$ - public static java.awt.Color DEFAULT_CHART_FOREGROUND = java.awt.Color.LIGHT_GRAY; - public static java.awt.Color DEFAULT_CHART_BACKGROUND = new java.awt.Color( - 66, 66, 68); public static Color DEFAULT_FOREGROUND = getColor("defaultForeground"); //$NON-NLS-1$ public static Color DEFAULT_BACKGROUND = getColor("defaultBackground"); //$NON-NLS-1$ public static Color DEFAULT_RED = getColor("defaultRed"); //$NON-NLS-1$ @@ -351,27 +345,43 @@ public class ColorResources { public static Color SCALE_BG_COLOR_END = getColor("scale_bg_color_end"); //$NON-NLS-1$ public static Color SCALE_AREA_COLOR = getColor("scale_area_color"); //$NON-NLS-1$ public static Color SCALE_AREA_OUTLINE_COLOR = getColor("scale_area_outline_color"); //$NON-NLS-1$ - + // stop progress dialog public static Color STOP_PROGRESS_LINE1_COLOR = getColor("stop_progress_line1_color"); //$NON-NLS-1$ public static Color STOP_PROGRESS_LINE2_COLOR = getColor("stop_progress_line2_color"); //$NON-NLS-1$ public static Color STOP_PROGRESS_BACKGROUND_COLOR = getColor("stop_progress_background_color"); //$NON-NLS-1$ public static Color STOP_PROGRESS_INFO_FONT_COLOR = getColor("stop_progress_info_font_color"); //$NON-NLS-1$ - + public static void initColors() { - // shell window background color WINDOW_BG_COLOR = getColor("window_bg_color"); //$NON-NLS-1$ + DIALOG_BG_UPPER = getColor("dialg_bg_upper");//$NON-NLS-1$ + DIALOG_BG_LOWER = getColor("dialg_bg_lower");//$NON-NLS-1$ + DIALOG_SUNKEN_1 = getColor("dialg_sunken_1");//$NON-NLS-1$ + DIALOG_SUNKEN_2 = getColor("dialg_sunken_2");//$NON-NLS-1$ + + EDIT_CHART_DIALOG_UPPER = getColor("edit_chart_dialog_upper");//$NON-NLS-1$ + EDIT_CHART_DIALOG_LOWER = getColor("edit_chart_dialog_lower");//$NON-NLS-1$ + + VIEW_BORDER = getColor("view_border"); //$NON-NLS-1$ + VIEW_BG_COLOR = getColor("view_bg_color"); //$NON-NLS-1$ + VIEW_TITLE_FONT_COLOR = getColor("view_title_font_color");//$NON-NLS-1$ + /** title bar colors **/ TITLEBAR_TEXT_COLOR = getColor("titlebar_text_color"); //$NON-NLS-1$ TITLEBAR_BG_COLOR = getColor("titlebar_bg"); //$NON-NLS-1$ + /** Coolbar bg color **/ + COOLBAR_BG_COLOR = getColor("coolbar_bg_color"); //$NON-NLS-1$ + DEFAULT_FONT_COLOR = getColor("default_font_color");//$NON-NLS-1$ + /** device and application combo specific colors start **/ - DEVICE_APPLICATION_ENABLE = WHITE; + DEVICE_APPLICATION_ENABLE = getColor("device_application_enable_font"); //$NON-NLS-1$ DEVICE_APPLICATION_DISABLE = getColor("device_application_disable"); //$NON-NLS-1$ DEVICE_APPLICATION_POPUP_OUTER_1 = getColor("device_application_popup_outer_1"); //$NON-NLS-1$ DEVICE_APPLICATION_POPUP_OUTER_2 = getColor("device_application_popup_outer_2"); //$NON-NLS-1$ - DEVICE_APPLICATION_DROPDOWN_TEXT = WHITE; + // DEVICE_APPLICATION_POPUP_OUTER_1 = RED; + DEVICE_APPLICATION_DROPDOWN_TEXT = getColor("device_application_enable_font"); //$NON-NLS-1$ DEVICE_APPLICATION_ITEM_NORMAL_TOP = getColor("device_application_item_normal_top"); //$NON-NLS-1$ DEVICE_APPLICATION_ITEM_NORMAL_INNER = getColor("device_application_item_normal_inner"); //$NON-NLS-1$ DEVICE_APPLICATION_ITEM_NORMAL_BOTTOM = getColor("device_application_item_normal_bottom"); //$NON-NLS-1$ @@ -379,8 +389,46 @@ public class ColorResources { "device_application_item_select_top", new RGB(76, 76, 77)); //$NON-NLS-1$ DEVICE_APPLICATION_ITEM_SELECT_INNER = getColor("device_application_item_select_inner"); //$NON-NLS-1$ DEVICE_APPLICATION_ITEM_SELECT_BOTTOM = getColor("device_application_item_select_bottom"); //$NON-NLS-1$ + + /*** combo button color ***/ + DEVICE_APPLICATION_BUTTON_NORMAL_START = getColor("device_application_button_normal_start"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_NORMAL_END = getColor("device_application_button_normal_end"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_PUSH_START = getColor("device_application_button_push_start"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_PUSH_END = getColor("device_application_button_push_end"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_HOVER_START = getColor("device_application_button_hover_start"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_HOVER_END = getColor("device_application_button_hover_end"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_DISABLE_START = getColor("device_application_button_disable_start"); //$NON-NLS-1$ + DEVICE_APPLICATION_BUTTON_DISABLE_END = getColor("device_application_button_disable_end"); //$NON-NLS-1$ + + DEVICE_APPLICATION_BUTTON_OUTLINE = getColor("device_application_button_outline"); //$NON-NLS-1$ + /** device and application combo specific colors end **/ + /*** common button colors ***/ + BUTTON_DISABLE_COLOR_START = getColor("button_disable_color_start"); //$NON-NLS-1$ + BUTTON_DISABLE_COLOR_END = getColor("button_disable_color_end"); //$NON-NLS-1$ + BUTTON_NORMAL_COLOR_START = getColor("button_normal_color_start"); //$NON-NLS-1$ + BUTTON_NORMAL_COLOR_END = getColor("button_normal_color_end"); //$NON-NLS-1$ + BUTTON_HOVER_COLOR_START = getColor("button_hover_color_start"); //$NON-NLS-1$ + BUTTON_HOVER_COLOR_END = getColor("button_hover_color_end"); //$NON-NLS-1$ + BUTTON_PUSH_COLOR_START = getColor("button_push_color_start"); //$NON-NLS-1$ + BUTTON_PUSH_COLOR_END = getColor("button_push_color_end"); //$NON-NLS-1$ + + BUTTON_OUTLINE_NORMAL_IN_COLOR = getColor("button_outline_normal_in_color"); //$NON-NLS-1$ + BUTTON_OUTLINE_PUSH_IN_COLOR = getColor("button_outline_push_in_color"); //$NON-NLS-1$ + BUTTON_OUTLINE_HOVER_IN_COLOR = getColor("button_outline_hover_in_color"); //$NON-NLS-1$ + BUTTON_OUTLINE_DISABLE_IN_COLOR = getColor("button_outline_disable_in_color"); //$NON-NLS-1$ + + BUTTON_OUTLINE_NORMAL_COLOR = getColor("button_outline_normal_color"); //$NON-NLS-1$ + BUTTON_OUTLINE_PUSH_COLOR = getColor("button_outline_push_color"); //$NON-NLS-1$ + BUTTON_OUTLINE_HOVER_COLOR = getColor("button_outline_hover_color"); //$NON-NLS-1$ + BUTTON_OUTLINE_DISABLE_COLOR = getColor("button_outline_disable_color"); //$NON-NLS-1$ + + BUTTON_NORMAL_FONT_COLOR = getColor("button_normal_font_color"); //$NON-NLS-1$ + BUTTON_PUSH_FONT_COLOR = getColor("button_push_font_color"); //$NON-NLS-1$ + BUTTON_HOVER_FONT_COLOR = getColor("button_hover_font_color"); //$NON-NLS-1$ + BUTTON_DISABLE_FONT_COLOR = getColor("button_disable_font_color"); //$NON-NLS-1$ + /** normal view layout colors start **/ NORMAL_VIEW_LAYOUT_OUTER = getColor("normal_view_layout_outer"); //$NON-NLS-1$ NORMAL_VIEW_LAYOUT_MIDDLE = getColor("normal_view_layout_middle"); //$NON-NLS-1$ @@ -415,17 +463,36 @@ public class ColorResources { TABLE_CONTENTS_HOVER = getColor("table_contents_hover"); //$NON-NLS-1$ TABLE_CONTENTS_SELECTED_START = getColor("table_contents_selected_start"); //$NON-NLS-1$ TABLE_CONTENTS_SELECTED_END = getColor("table_contents_selected_end"); //$NON-NLS-1$ + TABLE_CONTENTS_SELECTED_FONT_COLOR = getColor("table_contents_selected_font_color"); //$NON-NLS-1$ TABLE_HEADER_FONT_COLOR = getColor("table_title_font_color"); //$NON-NLS-1$ TABLE_CONTENTS_FONT_COLOR = getColor("table_contents_font_color"); //$NON-NLS-1$ /** common table colors end **/ /** open trace popup colors **/ + OPEN_TRACE_LABEL_COLOR = getColor("open_trace_label_color");//$NON-NLS-1$ + OPEN_TRACE_SAVE_CONTENTS_COLOR = getColor("open_trace_save_contents_color");//$NON-NLS-1$ + OPEN_TRACE_TEMP_CONTENTS_COLOR = getColor("open_trace_temp_contents_color");//$NON-NLS-1$ + OPEN_TRACE_TABLE_OUTLINE_COLOR = getColor("open_trace_table_outline_color");//$NON-NLS-1$ + + OPEN_TRACE_TABLE_CONTENT_NORMAL_COLOR1 = getColor("open_trace_table_content_normal_color1");//$NON-NLS-1$ + OPEN_TRACE_TABLE_CONTENT_HOVER_COLOR1 = getColor("open_trace_table_content_hover_color1");//$NON-NLS-1$ + OPEN_TRACE_TABLE_CONTENT_SELECTED_START_COLOR1 = getColor("open_trace_table_content_selected_start_color1");//$NON-NLS-1$ + OPEN_TRACE_TABLE_CONTENT_SELECTED_END_COLOR1 = getColor("open_trace_table_content_selected_end_color1");//$NON-NLS-1$ + + OPEN_TRACE_TABLE_CONTENT_NORMAL_COLOR2 = getColor("open_trace_table_content_normal_color2");//$NON-NLS-1$ + OPEN_TRACE_TABLE_CONTENT_HOVER_COLOR2 = getColor("open_trace_table_content_hover_color2");//$NON-NLS-1$ + OPEN_TRACE_TABLE_CONTENT_SELECTED_START_COLOR2 = getColor("open_trace_table_content_selected_start_color2");//$NON-NLS-1$ + OPEN_TRACE_TABLE_CONTENT_SELECTED_END_COLOR2 = getColor("open_trace_table_content_selected_end_color2");//$NON-NLS-1$ + + OPEN_TRACE_BUTTON_COMPOSITE_BG_COLOR = getColor("open_trace_button_composite_bg_color");//$NON-NLS-1$ + OPEN_TRACE_POPUP_CONTENTS_BG_COLOR = getColor("open_trace_popup_contents_bg_color"); //$NON-NLS-1$ OPEN_TRACE_POPUP_BOTTOM_BG_COLOR = getColor("open_trace_popup_bottom_bg_color"); //$NON-NLS-1$ OPEN_TRACE_TITLE_TEXT_COLOR = TITLEBAR_TEXT_COLOR; OPEN_TRACE_INNERTITLE_TEXT_COLOR = WHITE; OPEN_TRACE_BUTTON_TEXT_COLOR = WHITE; - OPEN_TRACE_TABLE_OUTLINE_COLOR = SNAPSHOT_VIEW_TABLE_LINE; + // OPEN_TRACE_TABLE_OUTLINE_COLOR = + // SNAPSHOT_VIEW_TABLE_LINE; OPEN_TRACE_TABLE_LINE1_NORMAL = getColor("open_trace_table_line1_normal"); //$NON-NLS-1$ OPEN_TRACE_TABLE_LINE1_HOVER = getColor("open_trace_table_line1_hover"); //$NON-NLS-1$ OPEN_TRACE_TABLE_LINE_SELECTED_START = getColor("open_trace_table_line_selected_start"); //$NON-NLS-1$ @@ -434,6 +501,30 @@ public class ColorResources { OPEN_TRACE_TABLE_LINE2_HOVER = getColor("open_trace_table_line2_hover"); //$NON-NLS-1$ OPEN_TRACE_TABLE2_FONT_COLOR = getColor("open_trace_table2_font_color"); //$NON-NLS-1$ + /** tab widget colors **/ + TAB_SELECTED_COLOR_START = getColor("tab_selected_color_start"); //$NON-NLS-1$ + TAB_SELECTED_COLOR_END = getColor("tab_selected_color_end"); //$NON-NLS-1$ + TAB_NORMAL_COLOR_START = getColor("tab_normal_color_start"); //$NON-NLS-1$ + TAB_NORMAL_COLOR_END = getColor("tab_normal_color_end"); //$NON-NLS-1$ + TAB_HOVER_COLOR_START = getColor("tab_hover_color_start"); //$NON-NLS-1$ + TAB_HOVER_COLOR_END = getColor("tab_hover_color_end"); //$NON-NLS-1$ + TAB_PUSH_COLOR_START = getColor("tab_push_color_start"); //$NON-NLS-1$ + TAB_PUSH_COLOR_END = getColor("tab_push_color_end"); //$NON-NLS-1$ + + TAB_OUTLINE_NORMAL_COLOR = getColor("tab_outline_normal_color"); //$NON-NLS-1$ + TAB_OUTLINE_PUSH_COLOR = getColor("tab_outline_push_color"); //$NON-NLS-1$ + TAB_OUTLINE_HOVER_COLOR = getColor("tab_outline_hover_color"); //$NON-NLS-1$ + TAB_OUTLINE_SELECTED_COLOR = getColor("tab_outline_selected_color"); //$NON-NLS-1$ + + TAB_SELECTED_FONT_COLOR = getColor("tab_selected_font_color"); //$NON-NLS-1$ + TAB_NORMAL_FONT_COLOR = getColor("tab_normal_font_color"); //$NON-NLS-1$ + TAB_HOVER_FONT_COLOR = getColor("tab_hover_font_color"); //$NON-NLS-1$ + TAB_PUSH_FONT_COLOR = getColor("tab_push_font_color"); //$NON-NLS-1$ + + TAB_BG_COLOR_START = getColor("tab_bg_color_start"); //$NON-NLS-1$ + TAB_BG_COLOR_END = getColor("tab_bg_color_end"); //$NON-NLS-1$ + TAB_BG_OUTLINE_COLOR = getColor("tab_bg_outline_color"); //$NON-NLS-1$ + /** snapshot viewer colors **/ SNAPSHOT_VIEWER_BORDER = getColor("snapshot_viewer_border"); //$NON-NLS-1$ @@ -467,15 +558,10 @@ public class ColorResources { FILE_CHART_CHILD_BG_START = getColor("file_chart_child_bg_start"); //$NON-NLS-1$ FILE_CHART_CHILD_BG_END = getColor("file_chart_child_bg_end"); //$NON-NLS-1$ - VIEW_BORDER = getColor("view_border"); //$NON-NLS-1$ - VIEW_BG_COLOR = getColor("view_bg_color"); //$NON-NLS-1$ + FILE_CHART_GRADATION_COLOR = getColor("file_chart_gradation_color");//$NON-NLS-1$ - // TAB_BG_COLOR = VIEW_BG_COLOR; //$NON-NLS-1$ - // TABLE_BG_COLOR = getColor("table_bg_color"); //$NON-NLS-1$ - // TABLE_HEADER_COLOR = getColor("table_header_color"); //$NON-NLS-1$ - // public static final Color TABLE_HEADER_FONT_COLOR = getColor( - // "table_header_font_color", new RGB(75, 229, 253)); //$NON-NLS-1$ - // TABLE_LINE_COLOR = getColor("table_line_color"); //$NON-NLS-1$ + FILE_CHART_SELECTED_FONT_COLOR = getColor("file_chart_selected_font_color");//$NON-NLS-1$ + FILE_CHART_NORMAL_FONT_COLOR = getColor("file_chart_normal_font_color");//$NON-NLS-1$ UNSELECTED_TAB_FIRST = getColor("unselected_tab_first"); //$NON-NLS-1$ UNSELECTED_TAB_SECOND = getColor("unselected_tab_second"); //$NON-NLS-1$ @@ -493,7 +579,6 @@ public class ColorResources { ITEM_BLUE_DARK = getColor("item blue dark");//$NON-NLS-1$ ITEM_BG = getColor("item background");//$NON-NLS-1$ - TIMELINE_BG = getColor("timeline_bg"); //$NON-NLS-1$ TRANS = getColor("timeline_bg"); //$NON-NLS-1$ SNAPSHOT_CHART_FOREGROUND = BAR_GRAY1; SNAPSHOT_CHART_BACKGROUND = getColor("snapshot_chart_bg"); //$NON-NLS-1$ @@ -507,8 +592,13 @@ public class ColorResources { DEFAULT_RED = getColor("defaultRed"); //$NON-NLS-1$ // circular graph - CPU_BAR_GRAPH_COLOR = getColor("cpu_circular_graph_color"); //$NON-NLS-1$ - PROCESS_GRAPH_COLOR = getColor("process_circular_graph_color"); //$NON-NLS-1$ + CPU_BAR_GRAPH_COLOR = getColor("cpu_bar_graph_color"); //$NON-NLS-1$ + CPU_BAR_GRAPH_GRAY_COLOR = getColor("cpu_bar_graph_gray_color"); //$NON-NLS-1$ + CPU_BAR_GRAPH_BG_COLOR = getColor("cpu_bar_graph_bg_color"); //$NON-NLS-1$ + + PROCESS_GRAPH_COLOR = getColor("process_bar_graph_color"); //$NON-NLS-1$ + PROCESS_GRAPH_CENTER_COLOR = getColor("process_bar_graph_center_color"); //$NON-NLS-1$ + PROCESS_GRAPH_BG_COLOR = getColor("process_bar_graph_bg_color"); //$NON-NLS-1$ PROFILING_GRAPH_COLOR_START = getColor("profiling_graph_color_start"); //$NON-NLS-1$ PROFILING_GRAPH_COLOR_END = getColor("profiling_graph_color_end"); //$NON-NLS-1$ @@ -516,27 +606,53 @@ public class ColorResources { PROFILING_GRAPH_SELECTION_COLOR_START = getColor("profiling_graph_selection_color_start"); //$NON-NLS-1$ PROFILING_GRAPH_SELECTION_COLOR_END = getColor("profiling_graph_selection_color_end"); //$NON-NLS-1$ - // awt colors - DEFAULT_CHART_FOREGROUND = java.awt.Color.LIGHT_GRAY; - DEFAULT_CHART_BACKGROUND = new java.awt.Color(66, 66, 68); - ITEM_BG_AWT = new java.awt.Color(50, 50, 50);//$NON-NLS-1$ - ITEM_BLUE_AWT = new java.awt.Color(38, 104, 138);//$NON-NLS-1$ - // Add Chart ADD_CHART_ENABLE_COLOR_START = getColor("add_chart_enable_color_start"); //$NON-NLS-1$ ADD_CHART_ENABLE_COLOR_END = getColor("add_chart_enable_color_end"); //$NON-NLS-1$ ADD_CHART_DISABLE_COLOR_START = getColor("add_chart_disable_color_start"); //$NON-NLS-1$ ADD_CHART_DISABLE_COLOR_END = getColor("add_chart_disable_color_end"); //$NON-NLS-1$ + /** timeline chart **/ + SERIESE_COLOR_CPU_SYSTEM = getColor("seriesColorCPUSystem"); //$NON-NLS-1$ + SERIESE_COLOR_CPU_APP = getColor("seriesColorCPUApp"); //$NON-NLS-1$ + + SERIESE_COLOR_CPUCORE_CORE0 = getColor("seriesColorCPUCoreCore0"); //$NON-NLS-1$ + SERIESE_COLOR_CPUCORE_CORE1 = getColor("seriesColorCPUCoreCore1"); //$NON-NLS-1$ + SERIESE_COLOR_CPUCORE_CORE2 = getColor("seriesColorCPUCoreCore2"); //$NON-NLS-1$ + SERIESE_COLOR_CPUCORE_CORE3 = getColor("seriesColorCPUCoreCore3"); //$NON-NLS-1$ + + SERIESE_COLOR_CPU_FREQ = getColor("seriesColorCPUFreq"); //$NON-NLS-1$ + + SERIESE_COLOR_HEAP_SYSTEM = getColor("seriesColorHeapSystem"); //$NON-NLS-1$ + SERIESE_COLOR_HEAP_USER = getColor("seriesColorHeapApp"); //$NON-NLS-1$ + + SERIESE_COLOR_PROCESS_VSS = getColor("seriesColorProcessVSS"); //$NON-NLS-1$ + SERIESE_COLOR_PROCESS_RSS = getColor("seriesColorProcessRSS"); //$NON-NLS-1$ + SERIESE_COLOR_PROCESS_PSS = getColor("seriesColorProcessPSS"); //$NON-NLS-1$ + + SERIESE_COLOR_MEMORY_SYS_MAX = getColor("seriesColorMemorySysMax"); //$NON-NLS-1$ + SERIESE_COLOR_MEMORY_SYS_USED = getColor("seriesColorMemorySysUsed"); //$NON-NLS-1$ + SERIESE_COLOR_MEMORY_APP_USED = getColor("seriesColorMemoryAppUsed"); //$NON-NLS-1$ + + SERIESE_COLOR_FILE_READ = getColor("seriesColorFileRead"); //$NON-NLS-1$ + SERIESE_COLOR_FILE_WRITE = getColor("seriesColorFileWrite"); //$NON-NLS-1$ + SERIESE_COLOR_FILE_FD = getColor("seriesColorFileFD"); //$NON-NLS-1$ + + SELECTION_RANGE = getColor("selectionRange"); //$NON-NLS-1$ + SELECTION_LINE = getColor("selectionLine"); //$NON-NLS-1$ + // scale widget SCALE_OUTLINE_COLOR = getColor("scale_outline_color"); //$NON-NLS-1$ - + SCALE_BG_COLOR_START = getColor("scale_bg_color_start"); //$NON-NLS-1$ + SCALE_BG_COLOR_END = getColor("scale_bg_color_end"); //$NON-NLS-1$ + SCALE_AREA_COLOR = getColor("scale_area_color"); //$NON-NLS-1$ + SCALE_AREA_OUTLINE_COLOR = getColor("scale_area_outline_color"); //$NON-NLS-1$ + // stop progress dialog STOP_PROGRESS_LINE1_COLOR = getColor("stop_progress_line1_color"); //$NON-NLS-1$ STOP_PROGRESS_LINE2_COLOR = getColor("stop_progress_line2_color"); //$NON-NLS-1$ STOP_PROGRESS_BACKGROUND_COLOR = getColor("stop_progress_background_color"); //$NON-NLS-1$ STOP_PROGRESS_INFO_FONT_COLOR = getColor("stop_progress_info_font_color"); //$NON-NLS-1$ - } private static Color getColor(String colorName, RGB rgb) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ConfigureManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ConfigureManager.java index c48e2a9..2e803a1 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ConfigureManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ConfigureManager.java @@ -1,225 +1,226 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * YeongTaik Byeon - * Juyoung Kim - * - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - -package org.tizen.dynamicanalyzer; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; - - -public class ConfigureManager { - - // default value - public static final String INTERNALCALL = "INTERNALCALL"; //$NON-NLS-1$ - public static final String RANGEAUTOSELECT = "RANGEAUTOSELECT"; //$NON-NLS-1$ - public static final String SNAPSHOT = "SNAPSHOT"; //$NON-NLS-1$ - // public static final String SHOWLOG = "SHOWLOG"; - // public static final String SAMPLINGPERIOD = "SAMPLINGPERIOD"; - // public static final String PROCESSSIZE = "PROCESSSIZE"; - - private static final String DEFAULT_INTERNALCALL = "OFF"; //$NON-NLS-1$ - private static final String DEFAULT_RANGEAUTOSELECT = "ON"; //$NON-NLS-1$ - private static final String DEFAULT_SNAPSHOT = "OFF"; //$NON-NLS-1$ - // private static final String DEFAULT_SHOWLOG = "OFF"; - // private static final String DEFAULT_SAMPLINGPERIOD = "1000"; - // private static final String DEFAULT_PROCESSSIZE = "RSS"; - - - // IDE Focus Path - public static final String SINGLETON_FOCUS_DA_PID = "FOCUS__DA_IDE"; //$NON-NLS-1$ - - // Chart - public static final String CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST = "CHART_AVAILABLE_ITEM"; //$NON-NLS-1$ - public static final String CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST = "CHART_SELECTED_ITEM"; //$NON-NLS-1$ - public static final String CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LISTS = - "CPU,CPU Core,CPU Frequency,Heap Allocation,Process Size,Memory,File,"; //$NON-NLS-1$ - public static final String CONFIGUREMANAGER_CHART_SELECTED_ITEM_LISTS = - "CPU,CPU Core,CPU Frequency,Heap Allocation,Process Size,Memory,File,"; //$NON-NLS-1$ - - // private ConfigureData configData; - // private String configFileName = "config"; //$NON-NLS-1$ - // private String configFilePath = AnalyzerConstants.CONFIG_FOLDER_PATH+ - // AnalyzerConstants.CONFIG_FILE_NAME; - - private static ConfigureManager instance = new ConfigureManager(); - private Map data = new HashMap(); - - private ConfigureManager() { - initConfigDataFromFile(); - } - - public static ConfigureManager getInstance() { - if (instance == null) { - instance = new ConfigureManager(); - } - return instance; - } - - private void parseReadedFileData(String readData) { - String[] splitData = readData.split("="); //$NON-NLS-1$ - int size = splitData.length; - - if (2 != size) { - return; - } - data.put(splitData[0], splitData[1]); - } - - private void setCheckDefaultConfigData() { - if (null == data.get(INTERNALCALL)) - data.put(INTERNALCALL, DEFAULT_INTERNALCALL); - if (null == data.get(RANGEAUTOSELECT)) - data.put(RANGEAUTOSELECT, DEFAULT_RANGEAUTOSELECT); - if (null == data.get(SNAPSHOT)) - data.put(SNAPSHOT, DEFAULT_SNAPSHOT); - if (null == data.get(SNAPSHOT)) - data.put(SNAPSHOT, DEFAULT_SNAPSHOT); - if (null == data.get(CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST)) - data.put(CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST, - CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LISTS); - if (null == data.get(CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST)) - data.put(CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST, - CONFIGUREMANAGER_CHART_SELECTED_ITEM_LISTS); - if (null == data.get(SINGLETON_FOCUS_DA_PID)) - data.put(SINGLETON_FOCUS_DA_PID, - " "); - - // if (null == data.get(SHOWLOG)) - // data.put(SHOWLOG, DEFAULT_SHOWLOG); - // if (null == data.get(SAMPLINGPERIOD)) - // data.put(SAMPLINGPERIOD, DEFAULT_SAMPLINGPERIOD); - // if (null == data.get(PROCESSSIZE)) - // data.put(PROCESSSIZE, DEFAULT_PROCESSSIZE); - } - - private void initConfigDataFromFile() { - if (null == AnalyzerConstants.CONFIG_FOLDER_PATH) { - return; - } - - File configFolder = new File(AnalyzerConstants.CONFIG_FOLDER_PATH); - if (!configFolder.isDirectory()) { - configFolder.mkdirs(); - } - - File configFile = - new File(configFolder, AnalyzerConstants.CONFIG_FILE_NAME); - if (!configFile.isFile()) { - try { - configFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - BufferedReader in; - String content; - try { - in = new BufferedReader(new FileReader(configFile)); - while (null != (content = in.readLine())) { - parseReadedFileData(content); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - setCheckDefaultConfigData(); - setConfigDataToFile(); - } - - private void setConfigDataToFile() { - String configFilePath = PathManager.getConfigFilePath(); - if (null == configFilePath) { - return; - } - - File configFile = new File(configFilePath); - FileWriter fileWriter; - BufferedWriter buffWriter; - PrintWriter printWriter; - try { - fileWriter = new FileWriter(configFile); - buffWriter = new BufferedWriter(fileWriter); - printWriter = new PrintWriter(buffWriter); - - Iterator iter = data.keySet().iterator(); - - while (iter.hasNext()) { - String key = (String) iter.next(); - String val = data.get(key); - printWriter.println(key + "=" + val); //$NON-NLS-1$ - printWriter.checkError(); - - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - public String getValue(String key) { - if (data == null) { - ; - data = new HashMap(); - return ""; //$NON-NLS-1$ - } - String ret = data.get(key); - if (null == ret) - return ""; //$NON-NLS-1$ - else - return ret; - } - - public int getValueInt(String key) { - if (data == null) { - data = new HashMap(); - return 0; - } - String valuestr = data.get(key); - if (valuestr.equalsIgnoreCase("on")) //$NON-NLS-1$ - return 1; - else - return 0; - } - - public void setValue(String key, String val) { - if (data == null) { - data = new HashMap(); - } else { - if (null != data.get(key)) { - if (false == data.get(key).equals(val)) { - data.put(key, val); - setConfigDataToFile(); - } - } - } - } -} +/* + * Dynamic Analyzer + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * YeongTaik Byeon + * Juyoung Kim + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * - S-Core Co., Ltd + * + */ + +package org.tizen.dynamicanalyzer; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; +import org.tizen.dynamicanalyzer.nl.ConfigureLabels; +import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; + +public class ConfigureManager { + + // default value + private static final String DEFAULT_INTERNALCALL = ConfigureLabels.OFF; //$NON-NLS-1$ + private static final String DEFAULT_RANGEAUTOSELECT = ConfigureLabels.ON; //$NON-NLS-1$ + private static final String DEFAULT_SNAPSHOT = ConfigureLabels.OFF; //$NON-NLS-1$ + + // default value Chart + public static final String CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LISTS = TimelineChartLabels.CPU_CHART_TITLE + + "," + + TimelineChartLabels.CPU_CORE_CHART_TITLE + + "," + + TimelineChartLabels.CPU_FREQUENCY_CHART_TITLE + + "," + + TimelineChartLabels.HEAP_CHART_TITLE + + "," + + TimelineChartLabels.PROCESS_MEMORY_CHART_TITLE + + "," + + TimelineChartLabels.SYSTEM_MEMORY_CHART_TITLE + + "," + + TimelineChartLabels.FILE_CHART_TITLE; + public static final String CONFIGUREMANAGER_CHART_SELECTED_ITEM_LISTS = TimelineChartLabels.CPU_CHART_TITLE + + "," + + TimelineChartLabels.CPU_CORE_CHART_TITLE + + "," + + TimelineChartLabels.CPU_FREQUENCY_CHART_TITLE + + "," + + TimelineChartLabels.HEAP_CHART_TITLE + + "," + + TimelineChartLabels.PROCESS_MEMORY_CHART_TITLE + + "," + + TimelineChartLabels.SYSTEM_MEMORY_CHART_TITLE + + "," + + TimelineChartLabels.FILE_CHART_TITLE; + + private static ConfigureManager instance = new ConfigureManager(); + private Map data = new HashMap(); + + private ConfigureManager() { + initConfigDataFromFile(); + } + + public static ConfigureManager getInstance() { + if (instance == null) { + instance = new ConfigureManager(); + } + return instance; + } + + private void parseReadedFileData(String readData) { + String[] splitData = readData.split("="); //$NON-NLS-1$ + int size = splitData.length; + + if (2 != size) { + return; + } + data.put(splitData[0], splitData[1]); + } + + private void setCheckDefaultConfigData() { + if (null == data.get(ConfigureLabels.INTERNALCALL)) + data.put(ConfigureLabels.INTERNALCALL, DEFAULT_INTERNALCALL); + if (null == data.get(ConfigureLabels.RANGEAUTOSELECT)) + data.put(ConfigureLabels.RANGEAUTOSELECT, DEFAULT_RANGEAUTOSELECT); + if (null == data.get(ConfigureLabels.SNAPSHOT)) + data.put(ConfigureLabels.SNAPSHOT, DEFAULT_SNAPSHOT); + if (null == data + .get(ConfigureLabels.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST)) + data.put( + ConfigureLabels.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST, + CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LISTS); + if (null == data + .get(ConfigureLabels.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST)) + data.put(ConfigureLabels.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST, + CONFIGUREMANAGER_CHART_SELECTED_ITEM_LISTS); + if (null == data.get(ConfigureLabels.SINGLETON_FOCUS_DA_PID)) + data.put(ConfigureLabels.SINGLETON_FOCUS_DA_PID, " "); + + // if (null == data.get(ConfigureLabels.SHOWLOG)) + // data.put(ConfigureLabels.SHOWLOG, DEFAULT_SHOWLOG); + // if (null == data.get(ConfigureLabels.SAMPLINGPERIOD)) + // data.put(ConfigureLabels.SAMPLINGPERIOD, DEFAULT_SAMPLINGPERIOD); + // if (null == data.get(ConfigureLabels.PROCESSSIZE)) + // data.put(ConfigureLabels.PROCESSSIZE, DEFAULT_PROCESSSIZE); + } + + private void initConfigDataFromFile() { + if (null == AnalyzerConstants.CONFIG_FOLDER_PATH) { + return; + } + + File configFolder = new File(AnalyzerConstants.CONFIG_FOLDER_PATH); + if (!configFolder.isDirectory()) { + configFolder.mkdirs(); + } + + File configFile = new File(configFolder, + AnalyzerConstants.CONFIG_FILE_NAME); + if (!configFile.isFile()) { + try { + configFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + BufferedReader in; + String content; + try { + in = new BufferedReader(new FileReader(configFile)); + while (null != (content = in.readLine())) { + parseReadedFileData(content); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + setCheckDefaultConfigData(); + setConfigDataToFile(); + } + + private void setConfigDataToFile() { + String configFilePath = PathManager.getConfigFilePath(); + if (null == configFilePath) { + return; + } + + File configFile = new File(configFilePath); + FileWriter fileWriter; + BufferedWriter buffWriter; + PrintWriter printWriter; + try { + fileWriter = new FileWriter(configFile); + buffWriter = new BufferedWriter(fileWriter); + printWriter = new PrintWriter(buffWriter); + + Iterator iter = data.keySet().iterator(); + + while (iter.hasNext()) { + String key = (String) iter.next(); + String val = data.get(key); + printWriter.println(key + "=" + val); //$NON-NLS-1$ + printWriter.checkError(); + + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String getValue(String key) { + if (data == null) { + ; + data = new HashMap(); + return ""; //$NON-NLS-1$ + } + String ret = data.get(key); + if (null == ret) + return ""; //$NON-NLS-1$ + else + return ret; + } + + public int getValueInt(String key) { + if (data == null) { + data = new HashMap(); + return 0; + } + String valuestr = data.get(key); + if (valuestr.equalsIgnoreCase(ConfigureLabels.ON)) + return 1; + else + return 0; + } + + public void setValue(String key, String val) { + if (data == null) { + data = new HashMap(); + } else { + if (null != data.get(key)) { + if (false == data.get(key).equals(val)) { + data.put(key, val); + setConfigDataToFile(); + } + } + } + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/DASingletonFocusManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/DASingletonFocusManager.java index eff5754..be8a6cd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/DASingletonFocusManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/DASingletonFocusManager.java @@ -28,9 +28,9 @@ import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; +import org.tizen.dynamicanalyzer.nl.ConfigureLabels; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; - public class DASingletonFocusManager { private static String pid = null; private static String Processid = null; @@ -46,7 +46,7 @@ public class DASingletonFocusManager { selfPid = iPid; } - private static void GetPid() { + private static void getPid() { if (selfPid > 0) { pid = String.valueOf(selfPid); @@ -58,17 +58,17 @@ public class DASingletonFocusManager { } } - private static String[] GetSaveFocusPath() { + private static String[] getSaveFocusPath() { String[] returnStr = null; String strPid = ConfigureManager.getInstance().getValue( - ConfigureManager.SINGLETON_FOCUS_DA_PID); + ConfigureLabels.SINGLETON_FOCUS_DA_PID); if (AnalyzerUtil.isWin()) { - returnStr = new String[] { "wscript", - AnalyzerConstants.InstallPathForWindow, strPid }; + returnStr = new String[] { AnalyzerConstants.WINDOW_ACTIVATOR_PATH_WINDOWS, + strPid }; } else { - returnStr = new String[] { AnalyzerConstants.InstallPathForLinux, + returnStr = new String[] { AnalyzerConstants.WINDOW_ACTIVATOR_PATH_LINUX, strPid }; } return returnStr; @@ -102,23 +102,23 @@ public class DASingletonFocusManager { return retValue; } - public static void SetFocusDA() { - executeCommand(GetSaveFocusPath()); + public static void setFocusDA() { + executeCommand(getSaveFocusPath()); } - public static void SetSaveFocusDAPid() { - GetPid(); + public static void setSaveFocusDAPid() { + getPid(); ConfigureManager.getInstance().setValue( - ConfigureManager.SINGLETON_FOCUS_DA_PID, pid); + ConfigureLabels.SINGLETON_FOCUS_DA_PID, pid); } - - public static boolean CheckDASingleton(){ - + + public static boolean checkDASingleton() { + File file = null; FileLock fileLock = null; FileChannel fchannel = null; try { - file = new File( AnalyzerConstants.DA_SINGLETON_FILE_PATH ); + file = new File(AnalyzerConstants.DA_SINGLETON_FILE_PATH); fchannel = new RandomAccessFile(file, "rw").getChannel(); fileLock = fchannel.tryLock(); if (fileLock == null) { @@ -127,8 +127,7 @@ public class DASingletonFocusManager { } catch (Exception e) { return true; } - + return false; - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/IDEConnectorManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/IDEConnectorManager.java index 98b8162..cf45623 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/IDEConnectorManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/IDEConnectorManager.java @@ -59,11 +59,47 @@ class IDEConnectorAppInfoReceiveThread extends Thread { try { receiveArr = new byte[MAXBUFSIZE]; InputStream in = socket.getInputStream(); + System.out.print("IDE Wait\n"); dataSize = in.read(receiveArr); if (dataSize > 0) { String msg = new String(receiveArr); - String[] strMsg = msg.split(" "); + String[] strMsg = msg.split(";"); + + System.out.print("strMsg "+strMsg+"\n"); + System.out.print("strMsg[0] "+strMsg[0]+"\n"); + System.out.print("strMsg[1] "+strMsg[1]+"\n"); + System.out.print("strMsg[2] "+strMsg[2]+"\n"); + + + if ( strMsg[0].equals("")&& strMsg[1].equals("")){ + System.out.print("dddd\n"); + String state = AnalyzerUtil.getRecordState(); + if (state.equals(RecordStateSourceProvider.RECORD_RECORDING) ) { + System.out.print("11111\n"); + String sendMsg = "1234" + + AnalyzerConstants.DATA_PARSING_TOKEN + "daplay" + + AnalyzerConstants.DATA_PARSING_TOKEN + "123"; + IDEConnectorManager.sendMessageOpenIDE(sendMsg); + + Display.getDefault().syncExec(new Runnable() { + public void run() { + IDEConnectorManager + .checkPopupMessage(AnalyzerLabels.RE_TRACE_FORM_IDE); + } + }); + + }else{ + String sendMsg = "4321" + + AnalyzerConstants.DATA_PARSING_TOKEN + "dastop" + + AnalyzerConstants.DATA_PARSING_TOKEN + "123"; + IDEConnectorManager.sendMessageOpenIDE(sendMsg); + } + }else{ + + + System.out.print("strMsg[1] " + strMsg[1]+ "\n"); + System.out.print("strMsg[2] " + strMsg[2]+ "\n"); IDEConnectorManager.deviceName = strMsg[1]; IDEConnectorManager.appName = strMsg[2]; @@ -71,9 +107,10 @@ class IDEConnectorAppInfoReceiveThread extends Thread { Display.getDefault().syncExec(new Runnable() { public void run() { IDEConnectorManager - .CheckPopupMessage(AnalyzerLabels.RE_TRACE_FORM_IDE); + .checkPopupMessage(AnalyzerLabels.RE_TRACE_FORM_IDE); } }); + } } else { bRunningThread = false; } @@ -143,7 +180,7 @@ public class IDEConnectorManager { } - public static void InitIDESocketThreadListener() { + public static void initIDESocketThreadListener() { IDEConnectorAcceptThread connectIde = new IDEConnectorAcceptThread(); connectIde.start(); } @@ -152,19 +189,20 @@ public class IDEConnectorManager { boolean bSuccess = false; - socket = GetIDESocket(port); + socket = getIDESocket(port); if (socket != null) { bSuccess = true; IDEConnectorAppInfoReceiveThread recvThread = new IDEConnectorAppInfoReceiveThread( socket); recvThread.run(); resetConfig(); - InitIDESocketThreadListener(); + initIDESocketThreadListener(); } return bSuccess; } - public static boolean SendMessageOpenIDE(final String message) { + public static boolean sendMessageOpenIDE(final String message) { + System.out.print("sendMessageOpenIDE "+message+"\n" ); boolean bSuccess = true; try { if (null != socket) { @@ -174,10 +212,10 @@ public class IDEConnectorManager { writer.flush(); } else { - CheckPopupMessage(AnalyzerLabels.VIEW_SOURCE_ERROR_MESSAGE); + checkPopupMessage(AnalyzerLabels.VIEW_SOURCE_ERROR_MESSAGE); } } catch (IOException e) { - CheckPopupMessage(AnalyzerLabels.VIEW_SOURCE_ERROR_MESSAGE); + checkPopupMessage(AnalyzerLabels.VIEW_SOURCE_ERROR_MESSAGE); e.printStackTrace(); bSuccess = false; } finally { @@ -185,9 +223,9 @@ public class IDEConnectorManager { return bSuccess; } - public static void CheckPopupMessage(final String message) { + public static void checkPopupMessage(final String message) { - DASingletonFocusManager.SetFocusDA(); + DASingletonFocusManager.setFocusDA(); String state = AnalyzerUtil.getRecordState(); if (state.equals(RecordStateSourceProvider.RECORD_RECORDING)) { @@ -196,19 +234,17 @@ public class IDEConnectorManager { DADialog warning = new DADialog(shell, SWT.NONE); warning.setMessage(message); warning.setIcon(ImageResources.DIALOG_WARNING_ICON); - if (warning.open() == true) { - ReStartApp(); - } + warning.open(); } else { - ReStartApp(); + reStartApp(); } } - private static void ReStartApp() { + private static void reStartApp() { AnalyzerManager.recordStartFormIde(deviceName, appName); } - private static Socket GetIDESocket(int port) { + private static Socket getIDESocket(int port) { Socket socket = null; try { socket = new Socket(AnalyzerConstants.LOCAL_HOST, port); @@ -220,5 +256,4 @@ public class IDEConnectorManager { return socket; } - } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java index 57c3fc5..2544115 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java @@ -220,6 +220,7 @@ public class LogSpliter { id = Integer.parseInt(logId); } catch (Exception e) { // e.printStackTrace(); + return; } if (id < 0) { return; @@ -266,6 +267,8 @@ public class LogSpliter { // input.get(LogCenterConstants.DEVICE_VOLTAGE_INDEX)); // input.set(LogCenterConstants.DEVICE_ENERGY_INDEX, // power.toString()); + } else if (id == LogCenterConstants.LOG_CUSTOM_CHART) { +// System.out.println("log custom chart arrived!!"); } logPack.setLogs(id, input); @@ -291,9 +294,9 @@ public class LogSpliter { .println("at setFuncName : " + prevFunctionName + " after function name:" + functionName); //$NON-NLS-1$ //$NON-NLS-2$ } } catch (Exception e) { -// functionName = SymbolManager.addr2func(path, pcAddr, isPieBuild, -// baseAddr); -// functionName = SymbolNameDemangler.nameDemangle(functionName); + // functionName = SymbolManager.addr2func(path, pcAddr, isPieBuild, + // baseAddr); + // functionName = SymbolNameDemangler.nameDemangle(functionName); e.printStackTrace(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ResourceCommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ResourceCommunicator.java index 443f826..d455fe8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ResourceCommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ResourceCommunicator.java @@ -24,6 +24,7 @@ import java.util.Timer; import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; +import org.tizen.dynamicanalyzer.nl.ConfigureLabels; import org.tizen.dynamicanalyzer.ui.views.CoolbarArea; import org.tizen.dynamicanalyzer.ui.views.base.BaseView; import org.tizen.dynamicanalyzer.ui.views.base.DAEffectFrame; @@ -104,9 +105,9 @@ public class ResourceCommunicator extends DACommunicator { + isArm + AnalyzerConstants.CMD_SPLIT + ConfigureManager.getInstance().getValueInt( - ConfigureManager.SNAPSHOT) + ConfigureLabels.SNAPSHOT) + ConfigureManager.getInstance().getValueInt( - ConfigureManager.INTERNALCALL) + ConfigureLabels.INTERNALCALL) + AnalyzerConstants.CMD_SPLIT + ResourceCommunicator.getSelectedApp().getExecPath(); System.out.println("Send message :" + message); //$NON-NLS-1$ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/SymbolNameDemangler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/SymbolNameDemangler.java index e9a0eb7..0e72f4a 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/SymbolNameDemangler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/SymbolNameDemangler.java @@ -285,7 +285,7 @@ public class SymbolNameDemangler { demangled = demangled.concat(" const"); //$NON-NLS-1$ } catch (Exception e) { -// e.printStackTrace(); +// DALogManager.printStackTrace(e); // return mangled; // return demangled; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java index 04bdc54..3bbd43d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java @@ -25,318 +25,328 @@ import org.tizen.dynamicanalyzer.AnalyzerManager; import org.tizen.dynamicanalyzer.PathManager; import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; - public class AnalyzerConstants { - public static final String VERSION = "0.4"; //$NON-NLS-1$ - public static final boolean CHECK_INTERNAL = true; - - /* special character */ - public static final String EMPTY = ""; //$NON-NLS-1$ - public static final String SPACE = " "; //$NON-NLS-1$ - public static final String TAB = " "; //$NON-NLS-1$ - public static final String SLASH = "/"; //$NON-NLS-1$ - public static final String BSLASH = "\\"; //$NON-NLS-1$ - public static final String CMD_SPLIT = "|"; //$NON-NLS-1$ - public static final String CMD_SPLIT_READ = "\\|"; //$NON-NLS-1$ - public static final String CMD_SPLIT_DOT = "\\."; //$NON-NLS-1$ - public static final String NEW_LINE_CHAR = "\\n"; //$NON-NLS-1$ - public static final String NEW_LINE = "\n"; //$NON-NLS-1$ - public static final String DOT = "."; //$NON-NLS-1$ - public static final String COMMA = ","; //$NON-NLS-1$ - public static final String COLON = ":"; //$NON-NLS-1$ - public static final String SEMICOLON = ";"; //$NON-NLS-1$ - public static final String DASH = "-"; //$NON-NLS-1$ - public static final String UNDERBAR = "_"; //$NON-NLS-1$ - public static final String OPEN_BRACKET = "("; //$NON-NLS-1$ - public static final String CLOSE_BRACKET = ")"; //$NON-NLS-1$ - public static final String OPEN_SQUARE_BRACKET = "["; //$NON-NLS-1$ - public static final String CLOSE_SQUARE_BRACKET = "]"; //$NON-NLS-1$ - public static final String TILDE = "~"; //$NON-NLS-1$ - public static final String ELLIPSIS = "..."; //$NON-NLS-1$ - public static final String ZERO = "0"; //$NON-NLS-1$ - public static final String EQUAL = "="; //$NON-NLS-1$ - public static final String ASTERISK = "*"; //$NON-NLS-1$ - public static final String GRAVE_ACCENT = "`"; //$NON-NLS-1$ - public static final String PERCENT = "%"; //$NON-NLS-1$ - - /* folder names */ - public static final String TOOLS_FOLDER_NAME = "tools"; //$NON-NLS-1$ - public static final String DYNAMIC_ANALYZER_FOLDER_NAME = "dynamic-analyzer"; //$NON-NLS-1$ - public static final String SAVE_FOLDER_NAME = "save"; //$NON-NLS-1$ - public static final String TEMP_FOLDER_NAME = "temp"; //$NON-NLS-1$ - public static final String TEMP_FOLDER_RUN_PREFIX = ".RUN"; //$NON-NLS-1$ - public static final String IMAGE_FOLDER_NAME = "img"; //$NON-NLS-1$ - public static final String ICON_WORKBENCH_FOLDER_NAME = "icons"; //$NON-NLS-1$ - public static final String ICON_FOLDER_NAME = AnalyzerManager.getTheme().getIconPath(); - public static final String XML_FOLDER_NAME = "xml"; //$NON-NLS-1$ - public static final String CONFIG_FOLDER_NAME = "config"; //$NON-NLS-1$ - public static final String CONFIG_FILE_NAME = "config"; //$NON-NLS-1$ - public static final String TIZEN_SDK_DATA = "tizen-sdk-data";//$NON-NLS-1$ - public static final String INSTALL = "tizensdkpath"; //$NON-NLS-1$ - - - /* paths */ - public static final String TIZEN_SDK_DATA_PATH = PathManager.getTizenSdkDataPath(); - public static final String TIZEN_ROOT_PATH = PathManager.getDefaultRoot(); -// public static final String DYNAMIC_ANALYZER_INSTALL_PATH = PathManager.getDefaultRoot() -// + File.separator + TOOLS_FOLDER_NAME + File.separator + DYNAMIC_ANALYZER_FOLDER_NAME; - public static final String DYNAMIC_ANALYZER_INSTALL_PATH = PathManager.getInstallPath(); - public static final String DYNAMIC_ANALYZER_SAVE_PATH = PathManager.getSavePath(); -// TIZEN_SDK_DATA_PATH + File.separator -// + DYNAMIC_ANALYZER_FOLDER_NAME + File.separator + SAVE_FOLDER_NAME; - public static final String TOOL_FOLDER_PATH = DYNAMIC_ANALYZER_INSTALL_PATH + File.separator - + TOOLS_FOLDER_NAME; - public static final String TEMP_FOLDER_PATH = DYNAMIC_ANALYZER_SAVE_PATH + File.separator - + AnalyzerConstants.TEMP_FOLDER_NAME; - public static final String CONFIG_FOLDER_PATH = PathManager.getConfigFolderPath(); - public static final String SDB_PATH = PathManager.getSdbPath(); - public static final String TARGET_PATH = DYNAMIC_ANALYZER_INSTALL_PATH + File.separator - + "target" + File.separator; //$NON-NLS-1$ - public static final String DA_SINGLETON_FILE_PATH = DYNAMIC_ANALYZER_INSTALL_PATH + File.separator + "fileLock"; //$NON-NLS-1$ - - public static final String InstallPathForLinux = AnalyzerConstants.TIZEN_ROOT_PATH + "/tools/dynamic-analyzer/tool/windowactivator.sh"; - public static final String InstallPathForWindow = AnalyzerConstants.TIZEN_ROOT_PATH+"/tools/dynamic-analyzer/tool/windowactivator.vbs"; - - - /* Name & Path */ - public static final String DA_DAEMON_NAME = "da_manager"; //$NON-NLS-1$ - public static final String TOOL_RECORDER_NAME = "da_event"; //$NON-NLS-1$ - public static final String BATTERY_FOLDER_NAME = "battery"; //$NON-NLS-1$ - public static final String READELF_BIN = "readelf"; //$NON-NLS-1$ - - public static final String WIN_INSTALL_NODE = - "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";//$NON-NLS-1$ - public static final String WIN_INSTALL_KEY = "Local AppData"; //$NON-NLS-1$ - - public static final String LINUX_INSTALL_ENV = "HOME";//$NON-NLS-1$ - public static final String ARM_ARCH = "arm"; //$NON-NLS-1$ - public static final String X86_ARCH = "x86"; //$NON-NLS-1$ - - public static final String DA_REMOTE_PROBE_PATH = "/opt/developer/sdk_tools/da/"; //$NON-NLS-1$ - public static final String DA_REMOTE_PATH = "/opt/home/developer/sdk_tools/da/"; //$NON-NLS-1$ - public static final String DA_REMOTE_DAEMON = DA_REMOTE_PATH + DA_DAEMON_NAME; - public static final String TOOL_REMOTE_RECORDER = DA_REMOTE_PATH + TOOL_RECORDER_NAME; - public static final String BATTERY_REMOTE_LOG_PATH = DA_REMOTE_PATH + BATTERY_FOLDER_NAME; - public static final String APPLICATION_LIST_PATH = "/opt/share/applications/"; //$NON-NLS-1$ - public static final String APPLICATION_INFO_FILE = ".desktop"; //$NON-NLS-1$ - public static final String LISTEN_CHECK = "LISTEN"; //$NON-NLS-1$ - public static final String PROBE_SO_TIZEN_NAME = "da_probe_tizen.so"; //$NON-NLS-1$ - public static final String PROBE_SO_OSP_NAME = "da_probe_osp.so"; //$NON-NLS-1$ - public static final String VERSION_NAME = "version"; //$NON-NLS-1$ - - /* timer intervals */ - public static final int SOCKET_CHECK_INTERVAL = 10; - public static final int SOCKET_TIMEOUT = 10000; - public static final int SOCKET_FORWARD_INTERVAL = 1000; - public static final int LOG_CHECK_INTERVAL = 1000; - public static final int SAVE_PREPARE_TIME = 2000; - public static final long TIMER_START_TIME_DEFAULT = 1000; - public static final int TIMER_INTERVAL_DEFAULT = 1000; - - /* thread names */ - public static final String LOG_QUEUE_OBSERVING_THREAD = "Log Queue Observing thread"; //$NON-NLS-1$ - public static final String COMMUNICATOR_RECEIVE_THREAD = "Communicator Receive Thread"; //$NON-NLS-1$ - public static final String MESSAGE_INTERNAL_IMAGE_THREAD = "Internal Image Process Thread"; //$NON-NLS-1$ - public static final String STOP_LOG_THREAD = "Stop Log Thread"; //$NON-NLS-1$ - public static final String BATTERY_RECEIVE_THREAD = "Battery Receive Thread"; //$NON-NLS-1$ - public static final String SLP_APP_RUN_THREAD = "SLP App Run Thread"; //$NON-NLS-1$ - public static final String OPEN_TRACE_THREAD = "Open trace input thread"; //$NON-NLS-1$ - public static final String INSERT_LOG_THREAD = "Insert log thread"; //$NON-NLS-1$ - public static final String SEND_MESSAGE_THREAD = "Send message thread"; //$NON-NLS-1$ - public static final String START_STOP_THREAD = "Start stop thread"; //$NON-NLS-1$ - - /* log parsing token and callstack parsing token, etc... */ - public static final String CALLSTACK_START = "callstack_start"; //$NON-NLS-1$ - public static final String CALLSTACK_END = "callstack_end"; //$NON-NLS-1$ - public static final String CALLSTACK_CUT_MEMORY_TOKEN = "\\["; //$NON-NLS-1$ - public static final String CALLSTACK_API_TOKEN = "\\("; //$NON-NLS-1$ - public static final String CALLSTACK_API_TOKEN_STRING = "("; //$NON-NLS-1$ - public static final String CALLSTACK_API_EMPTY_TOKEN = "\\)"; //$NON-NLS-1$ - public static final String CALLSTACK_API_OFFSET_TOKEN = "\\+"; //$NON-NLS-1$ - public static final String CLASS = "class"; //$NON-NLS-1$ - public static final String DATA_PARSING_TOKEN = "`,"; //$NON-NLS-1$ - - /* project save index */ - public static final int PROJECT_VERSION_INDEX = 0; - public static final int PROJECT_APPNAME_INDEX = 1; - public static final int PROJECT_DEVICE_INDEX = 2; - public static final int PROJECT_LAST_DATA_INDEX = 3; - public static final int PROJECT_LAST_TIME_INDEX = 4; - public static final int PROJECT_TOTAL_SAMPLE_COUNT = 5; - - /* Shell command */ - public static final String REMOVE_RECURSIVE_FORCE = "rm -rf "; //$NON-NLS-1$ - - /* extensions */ - public static final String EXTENSION_LOG_CENTER = ".logc"; //$NON-NLS-1$ - public static final String EXTENSION_LEAK_CHECK = ".leak"; //$NON-NLS-1$ - public static final String EXTENSION_JPG_IMAGE = ".jpg"; //$NON-NLS-1$ - public static final String EXTENSION_PNG_IMAGE = ".png"; //$NON-NLS-1$ - public static final String DATABASE_NAME = "da.trace"; //$NON-NLS-1$ - public static final String DEFAULT_IMAGE_NAME = "noImage.jpg"; //$NON-NLS-1$ - - /* save return values */ - public static final int ERROR_EXTENSION_FAIL = -1; - public static final int SUCCESS = 1; - public static final int ERROR_SAVE_FAIL = 0; - - /* data size */ - public static final int INSERT_DATA_PACKAGE_SIZE = 80; - public static final int MAX_REPEAT_COUNT = 5; - - /* log parsing size */ - public static final int DATABASE_READ_SIZE = 100; - - /* OS */ - public static final String OS_KEY = "os.name"; //$NON-NLS-1$ - public static final String LINUX = "linux"; //$NON-NLS-1$ - public static final String MAC = "mac"; //$NON-NLS-1$ - public static final String WIN = "win"; //$NON-NLS-1$ - - public static final String EMULATOR = "emulator"; //$NON-NLS-1$ - - /* Port */ - public static final int LOCAL_PORT = 8000; - public static final int REMOTE_PORT = 8001; - - public static final String LOCAL_HOST = "127.0.0.1"; //$NON-NLS-1$ - - /* Message Buffer max length */ - public static final int MSG_BUFFER_MAX = 100; - public static final int MSG_BUFFER_TIMER_DELAY = 5; - public static final int MSG_BUFFER_TIMER_PERIOD = 1000; // 1 second - - /* Message Type */ - public static final int MSG_APP_INFO = 1; //$NON-NLS-1$ - public static final int MSG_USER_PROFILING_SAMPLE = 3; //$NON-NLS-1$ - public static final int MSG_DEVICE_LOG = 4; //$NON-NLS-1$ - public static final int MSG_LOG = 5; //$NON-NLS-1$ - public static final int MSG_IMAGE = 6; //$NON-NLS-1$ - public static final int MSG_TERMINATE = 7; //$NON-NLS-1$ - public static final int MSG_DEBUG = 9; //$NON-NLS-1$ - - public static final String MSG_START = "100"; //$NON-NLS-1$ - public static final String MSG_STOP = "101"; //$NON-NLS-1$ - public static final String MSG_PAUSE = "102"; //$NON-NLS-1$ - public static final String MSG_OPTION = "103"; //$NON-NLS-1$ - public static final String MSG_BATT_START = "104"; //$NON-NLS-1$ - public static final String MSG_BATT_STOP = "105"; //$NON-NLS-1$ - public static final String MSG_ALIVE = "110"; //$NON-NLS-1$ - - /* Commands */ - public static final String CMD_GET_LIST = "ls -1 "; //$NON-NLS-1$ - public static final String CMD_NO_LIST = "ls:"; //$NON-NLS-1$ - public static final String CMD_CAT_PRINT = "cat "; //$NON-NLS-1$ - public static final String CMD_NO_CAT_PRINT = "cat:"; //$NON-NLS-1$ - public static final String CMD_REMOVE = "rm -rf"; //$NON-NLS-1$ - public static final String CMD_EXE_PERMISSION = "chmod +x "; //$NON-NLS-1$ - public static final String CMD_APPLICATION_LIST = "egrep -i \"exec|name=\" " //$NON-NLS-1$ - + GRAVE_ACCENT + "egrep -Li \"Hidden=true|taskmanage=false\" " //$NON-NLS-1$ - + APPLICATION_LIST_PATH + ASTERISK + APPLICATION_INFO_FILE + GRAVE_ACCENT; - // public static final String AA = - // "egrep -i \"exec|name=\" `egrep -Li \"Hidden=true|taskmanage=false\" /opt/share/applications/*.desktop`"; - // public static final String CMD_APPLICATION_LIST = "ls -t " + - // APPLICATION_LIST_PATH + - // "*.desktop | xargs egrep -Li \"Hidden=true|taskmanager=false\" | xargs egrep -i \"exec|name=\""; - // public static final String CMD_APPLICATION_LIST = "grep -Li Hidden=true " //$NON-NLS-1$ - // + GRAVE_ACCENT - // + "grep -Li taskmanage=false " //$NON-NLS-1$ - // + APPLICATION_LIST_PATH + ASTERISK - // + APPLICATION_INFO_FILE - // + GRAVE_ACCENT; - public static final String CMD_BATTERY_LOG_LIST = CMD_GET_LIST + BATTERY_REMOTE_LOG_PATH; - public static final String CMD_DAEMON_EXE_PERMISSION = CMD_EXE_PERMISSION + DA_REMOTE_DAEMON; - public static final String CMD_READELF_PERMISSION = CMD_EXE_PERMISSION + DA_REMOTE_PATH - + READELF_BIN; - public static final String CMD_IS_DAEMON_EXIST = CMD_GET_LIST + DA_REMOTE_DAEMON; - public static final String CMD_IS_DAEMON_LISTEN = "netstat -an | grep " //$NON-NLS-1$ - + REMOTE_PORT; - public static final String CMD_LS_VERSION = CMD_GET_LIST + DA_REMOTE_PATH + VERSION_NAME; - public static final String CMD_CAT_VERSION = CMD_CAT_PRINT + DA_REMOTE_PATH + VERSION_NAME; - public static final String CMD_PIDOF_DAEMON = "pidof " //$NON-NLS-1$ - + DA_DAEMON_NAME; - public static final String CMD_KILL_DAEMON = "kill -9 "; //$NON-NLS-1$ - public static final String CMD_IS_ARM_ARCH = "uname -m"; //$NON-NLS-1$ - - public static final int DAEMON_LISTEN_TRY = 50; - - /* app info */ - public static final int APP_INFO_SYSTEM_MEMORY_SIZE = 0; - public static final int APP_INFO_STORAGE_SIZE = 1; - public static final int APP_INFO_BLUETOOTH_SUPPORT = 2; - public static final int APP_INFO_GPS_SUPPORT = 3; - public static final int APP_INFO_WIFI_SUPPORT = 4; - public static final int APP_INFO_CAMERA_COUNT = 5; - public static final int APP_INFO_NETWORK_TYPE = 6; - public static final int APP_INFO_MAX_BRIGHTNESS = 7; - public static final int APP_INFO_WIDTH = 8; - public static final int APP_INFO_HEIGHT = 9; - public static final int APP_INFO_THEME = 10; - public static final int APP_INFO_VERSION = 11; - public static final int APP_INFO_SCALE = 12; - public static final int APP_INFO_REMOVABLE = 13; - public static final int APP_INFO_COMMENT = 14; - public static final int APP_INFO_PID = 15; - public static final int APP_INFO_START_TIME = 16; - public static final int APP_INFO_PIE_BUILD = 17; - public static final int APP_INFO_BASE_ADDRESS = 18; - public static final int APP_INFO_APP_TYPE = 19; - public static final int APP_INFO_BINARY_PATH = 20; - public static final int APP_INFO_SIZE = 21; - - /* app type */ - public static final int APP_TYPE_TIZEN = 0; - public static final int APP_TYPE_OSP = 1; - - /* Real Time Tab ID */ - public static final int REALTIME_TAB_RESOURCE_LIFECYCLE = 0; - public static final int REALTIME_TAB_RESOURCE_LEAK = 1; - public static final int REALTIME_TAB_LOGS = 2; - public static final int REALTIME_TAB_STATISTICS = 3; - public static final int REALTIME_TAB_BASE = 4; - - public static final int BATTERY_ANALYSIS_PAGE = 4; - - /* Save Data table */ - public static final String LEAK_DATA_TABLE_NAME = "LeakData"; //$NON-NLS-1$ - public static final String FAILED_DATA_TABLE_NAME = "FailedData"; //$NON-NLS-1$ - - /* Source Line errors */ - public static final int SOURCELINE_NOERROR = 0; - public static final int SOURCELINE_NULL_PATH = 1; - public static final int SOURCELINE_NULL_ADDRESS = 2; - public static final int SOURCELINE_FILE_NOT_FOUND = 3; - public static final int SOURCELINE_BAD_ADDRESS = 4; - public static final int SOURCELINE_NO_SYMBOL_INFORMATION = 5; - public static final int SOURCELINE_NO_MATCHING_LINE = 6; - public static final int SOURCELINE_UNKNOWN_ERROR = 7; - public static final int SOURCELINE_NO_SOURCELINE_DATA = 8; - public static final int SOURCELINE_PIE_BUILD = 9; - public static final int SOURCE_FILE_NOT_FOUND = 10; - - public static final String[] sourcelineErrorMsg = { AnalyzerLabels.EMPTY_STRING, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NULL_PATH, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NULL_ADDRESS, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_FILE_NOT_FOUND, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_BAD_ADDRESS, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NO_SYMBOL_INFORMATION, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NO_MATCHING_LINE, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_UNKNOWN_ERROR, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NO_SOURCELINE_DATA, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_PIE_BUILD, - AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NOT_FOUND }; - - // user call check - public final static String USER_BIN_POS = "/opt/apps/"; //$NON-NLS-1$ - public final static int USER_CALL = 1; - public final static int INTERNAL_CALL = 2; - public final static int USER_CALL_CHECK_ERROR = -1; - public final static String PROBE_LIB_TIZEN = "da_probe_tizen.so"; //$NON-NLS-1$ - public final static String PROBE_LIB_OSP = "da_probe_osp.so"; //$NON-NLS-1$ - - // comparator type - public final static int SORT_TYPE_NUM = 1; - public final static int SORT_TYPE_STRING = 2; + public static final String VERSION = "0.4"; //$NON-NLS-1$ + public static final boolean CHECK_INTERNAL = false; + + /* special character */ + public static final String EMPTY = ""; //$NON-NLS-1$ + public static final String SPACE = " "; //$NON-NLS-1$ + public static final String TAB = " "; //$NON-NLS-1$ + public static final String SLASH = "/"; //$NON-NLS-1$ + public static final String BSLASH = "\\"; //$NON-NLS-1$ + public static final String CMD_SPLIT = "|"; //$NON-NLS-1$ + public static final String CMD_SPLIT_READ = "\\|"; //$NON-NLS-1$ + public static final String CMD_SPLIT_DOT = "\\."; //$NON-NLS-1$ + public static final String NEW_LINE_CHAR = "\\n"; //$NON-NLS-1$ + public static final String NEW_LINE = "\n"; //$NON-NLS-1$ + public static final String DOT = "."; //$NON-NLS-1$ + public static final String COMMA = ","; //$NON-NLS-1$ + public static final String COLON = ":"; //$NON-NLS-1$ + public static final String SEMICOLON = ";"; //$NON-NLS-1$ + public static final String DASH = "-"; //$NON-NLS-1$ + public static final String UNDERBAR = "_"; //$NON-NLS-1$ + public static final String OPEN_BRACKET = "("; //$NON-NLS-1$ + public static final String CLOSE_BRACKET = ")"; //$NON-NLS-1$ + public static final String OPEN_SQUARE_BRACKET = "["; //$NON-NLS-1$ + public static final String CLOSE_SQUARE_BRACKET = "]"; //$NON-NLS-1$ + public static final String TILDE = "~"; //$NON-NLS-1$ + public static final String ELLIPSIS = "..."; //$NON-NLS-1$ + public static final String ZERO = "0"; //$NON-NLS-1$ + public static final String EQUAL = "="; //$NON-NLS-1$ + public static final String ASTERISK = "*"; //$NON-NLS-1$ + public static final String GRAVE_ACCENT = "`"; //$NON-NLS-1$ + public static final String PERCENT = "%"; //$NON-NLS-1$ + + /* folder names */ + public static final String TOOLS_FOLDER_NAME = "tools"; //$NON-NLS-1$ + public static final String DYNAMIC_ANALYZER_FOLDER_NAME = "dynamic-analyzer"; //$NON-NLS-1$ + public static final String SAVE_FOLDER_NAME = "save"; //$NON-NLS-1$ + public static final String TEMP_FOLDER_NAME = "temp"; //$NON-NLS-1$ + public static final String TEMP_FOLDER_RUN_PREFIX = ".RUN"; //$NON-NLS-1$ + public static final String IMAGE_FOLDER_NAME = "img"; //$NON-NLS-1$ + public static final String ICON_WORKBENCH_FOLDER_NAME = "icons"; //$NON-NLS-1$ + public static final String ICON_FOLDER_NAME = AnalyzerManager.getTheme() + .getIconPath(); + public static final String XML_FOLDER_NAME = "xml"; //$NON-NLS-1$ + public static final String CONFIG_FOLDER_NAME = "config"; //$NON-NLS-1$ + public static final String CONFIG_FILE_NAME = "config"; //$NON-NLS-1$ + public static final String TIZEN_SDK_DATA = "tizen-sdk-data";//$NON-NLS-1$ + public static final String INSTALL = "tizensdkpath"; //$NON-NLS-1$ + + /* paths */ + public static final String TIZEN_SDK_DATA_PATH = PathManager + .getTizenSdkDataPath(); + public static final String TIZEN_ROOT_PATH = PathManager.getDefaultRoot(); + // public static final String DYNAMIC_ANALYZER_INSTALL_PATH = + // PathManager.getDefaultRoot() + // + File.separator + TOOLS_FOLDER_NAME + File.separator + + // DYNAMIC_ANALYZER_FOLDER_NAME; + public static final String DYNAMIC_ANALYZER_INSTALL_PATH = PathManager + .getInstallPath(); + public static final String DYNAMIC_ANALYZER_SAVE_PATH = PathManager + .getSavePath(); + // TIZEN_SDK_DATA_PATH + File.separator + // + DYNAMIC_ANALYZER_FOLDER_NAME + File.separator + SAVE_FOLDER_NAME; + public static final String TOOL_FOLDER_PATH = DYNAMIC_ANALYZER_INSTALL_PATH + + File.separator + TOOLS_FOLDER_NAME; + public static final String TEMP_FOLDER_PATH = DYNAMIC_ANALYZER_SAVE_PATH + + File.separator + AnalyzerConstants.TEMP_FOLDER_NAME; + public static final String CONFIG_FOLDER_PATH = PathManager + .getConfigFolderPath(); + public static final String SDB_PATH = PathManager.getSdbPath(); + public static final String TARGET_PATH = DYNAMIC_ANALYZER_INSTALL_PATH + + File.separator + "target" + File.separator; //$NON-NLS-1$ + public static final String DA_SINGLETON_FILE_PATH = DYNAMIC_ANALYZER_INSTALL_PATH + + File.separator + "fileLock"; //$NON-NLS-1$ + + public static final String WINDOW_ACTIVATOR_PATH_LINUX = AnalyzerConstants.TIZEN_ROOT_PATH + + "/tools/dynamic-analyzer/tool/windowactivator.sh"; + public static final String WINDOW_ACTIVATOR_PATH_WINDOWS = AnalyzerConstants.TIZEN_ROOT_PATH + + "/tools/dynamic-analyzer/tool/windowactivator.bat"; + + /* Name & Path */ + public static final String DA_DAEMON_NAME = "da_manager"; //$NON-NLS-1$ + public static final String TOOL_RECORDER_NAME = "da_event"; //$NON-NLS-1$ + public static final String BATTERY_FOLDER_NAME = "battery"; //$NON-NLS-1$ + public static final String READELF_BIN = "readelf"; //$NON-NLS-1$ + + public static final String WIN_INSTALL_NODE = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";//$NON-NLS-1$ + public static final String WIN_INSTALL_KEY = "Local AppData"; //$NON-NLS-1$ + + public static final String LINUX_INSTALL_ENV = "HOME";//$NON-NLS-1$ + public static final String ARM_ARCH = "arm"; //$NON-NLS-1$ + public static final String X86_ARCH = "x86"; //$NON-NLS-1$ + + public static final String DA_REMOTE_PROBE_PATH = "/opt/developer/sdk_tools/da/"; //$NON-NLS-1$ + public static final String DA_REMOTE_PATH = "/opt/home/developer/sdk_tools/da/"; //$NON-NLS-1$ + public static final String DA_REMOTE_DAEMON = DA_REMOTE_PATH + + DA_DAEMON_NAME; + public static final String TOOL_REMOTE_RECORDER = DA_REMOTE_PATH + + TOOL_RECORDER_NAME; + public static final String BATTERY_REMOTE_LOG_PATH = DA_REMOTE_PATH + + BATTERY_FOLDER_NAME; + public static final String APPLICATION_LIST_PATH = "/opt/share/applications/"; //$NON-NLS-1$ + public static final String APPLICATION_INFO_FILE = ".desktop"; //$NON-NLS-1$ + public static final String LISTEN_CHECK = "LISTEN"; //$NON-NLS-1$ + public static final String PROBE_SO_TIZEN_NAME = "da_probe_tizen.so"; //$NON-NLS-1$ + public static final String PROBE_SO_OSP_NAME = "da_probe_osp.so"; //$NON-NLS-1$ + public static final String VERSION_NAME = "version"; //$NON-NLS-1$ + + /* timer intervals */ + public static final int SOCKET_CHECK_INTERVAL = 10; + public static final int SOCKET_TIMEOUT = 10000; + public static final int SOCKET_FORWARD_INTERVAL = 1000; + public static final int LOG_CHECK_INTERVAL = 1000; + public static final int SAVE_PREPARE_TIME = 2000; + public static final long TIMER_START_TIME_DEFAULT = 1000; + public static final int TIMER_INTERVAL_DEFAULT = 1000; + + /* thread names */ + public static final String LOG_QUEUE_OBSERVING_THREAD = "Log Queue Observing thread"; //$NON-NLS-1$ + public static final String COMMUNICATOR_RECEIVE_THREAD = "Communicator Receive Thread"; //$NON-NLS-1$ + public static final String MESSAGE_INTERNAL_IMAGE_THREAD = "Internal Image Process Thread"; //$NON-NLS-1$ + public static final String STOP_LOG_THREAD = "Stop Log Thread"; //$NON-NLS-1$ + public static final String BATTERY_RECEIVE_THREAD = "Battery Receive Thread"; //$NON-NLS-1$ + public static final String SLP_APP_RUN_THREAD = "SLP App Run Thread"; //$NON-NLS-1$ + public static final String OPEN_TRACE_THREAD = "Open trace input thread"; //$NON-NLS-1$ + public static final String INSERT_LOG_THREAD = "Insert log thread"; //$NON-NLS-1$ + public static final String SEND_MESSAGE_THREAD = "Send message thread"; //$NON-NLS-1$ + public static final String START_STOP_THREAD = "Start stop thread"; //$NON-NLS-1$ + + /* log parsing token and callstack parsing token, etc... */ + public static final String CALLSTACK_START = "callstack_start"; //$NON-NLS-1$ + public static final String CALLSTACK_END = "callstack_end"; //$NON-NLS-1$ + public static final String CALLSTACK_CUT_MEMORY_TOKEN = "\\["; //$NON-NLS-1$ + public static final String CALLSTACK_API_TOKEN = "\\("; //$NON-NLS-1$ + public static final String CALLSTACK_API_TOKEN_STRING = "("; //$NON-NLS-1$ + public static final String CALLSTACK_API_EMPTY_TOKEN = "\\)"; //$NON-NLS-1$ + public static final String CALLSTACK_API_OFFSET_TOKEN = "\\+"; //$NON-NLS-1$ + public static final String CLASS = "class"; //$NON-NLS-1$ + public static final String DATA_PARSING_TOKEN = "`,"; //$NON-NLS-1$ + + /* project save index */ + public static final int PROJECT_VERSION_INDEX = 0; + public static final int PROJECT_APPNAME_INDEX = 1; + public static final int PROJECT_DEVICE_INDEX = 2; + public static final int PROJECT_LAST_DATA_INDEX = 3; + public static final int PROJECT_LAST_TIME_INDEX = 4; + public static final int PROJECT_TOTAL_SAMPLE_COUNT = 5; + + /* Shell command */ + public static final String REMOVE_RECURSIVE_FORCE = "rm -rf "; //$NON-NLS-1$ + + /* extensions */ + public static final String EXTENSION_LOG_CENTER = ".logc"; //$NON-NLS-1$ + public static final String EXTENSION_LEAK_CHECK = ".leak"; //$NON-NLS-1$ + public static final String EXTENSION_JPG_IMAGE = ".jpg"; //$NON-NLS-1$ + public static final String EXTENSION_PNG_IMAGE = ".png"; //$NON-NLS-1$ + public static final String DATABASE_NAME = "da.trace"; //$NON-NLS-1$ + public static final String DEFAULT_IMAGE_NAME = "noImage.jpg"; //$NON-NLS-1$ + + /* save return values */ + public static final int ERROR_EXTENSION_FAIL = -1; + public static final int SUCCESS = 1; + public static final int ERROR_SAVE_FAIL = 0; + + /* data size */ + public static final int INSERT_DATA_PACKAGE_SIZE = 80; + public static final int MAX_REPEAT_COUNT = 5; + + /* log parsing size */ + public static final int DATABASE_READ_SIZE = 100; + + /* OS */ + public static final String OS_KEY = "os.name"; //$NON-NLS-1$ + public static final String LINUX = "linux"; //$NON-NLS-1$ + public static final String MAC = "mac"; //$NON-NLS-1$ + public static final String WIN = "win"; //$NON-NLS-1$ + + public static final String EMULATOR = "emulator"; //$NON-NLS-1$ + + /* Port */ + public static final int LOCAL_PORT = 8000; + public static final int REMOTE_PORT = 8001; + + public static final String LOCAL_HOST = "127.0.0.1"; //$NON-NLS-1$ + + /* Message Buffer max length */ + public static final int MSG_BUFFER_MAX = 100; + public static final int MSG_BUFFER_TIMER_DELAY = 5; + public static final int MSG_BUFFER_TIMER_PERIOD = 1000; // 1 second + + /* Message Type */ + public static final int MSG_APP_INFO = 1; //$NON-NLS-1$ + public static final int MSG_USER_PROFILING_SAMPLE = 3; //$NON-NLS-1$ + public static final int MSG_DEVICE_LOG = 4; //$NON-NLS-1$ + public static final int MSG_LOG = 5; //$NON-NLS-1$ + public static final int MSG_IMAGE = 6; //$NON-NLS-1$ + public static final int MSG_TERMINATE = 7; //$NON-NLS-1$ + public static final int MSG_DEBUG = 9; //$NON-NLS-1$ + + public static final String MSG_START = "100"; //$NON-NLS-1$ + public static final String MSG_STOP = "101"; //$NON-NLS-1$ + public static final String MSG_PAUSE = "102"; //$NON-NLS-1$ + public static final String MSG_OPTION = "103"; //$NON-NLS-1$ + public static final String MSG_BATT_START = "104"; //$NON-NLS-1$ + public static final String MSG_BATT_STOP = "105"; //$NON-NLS-1$ + public static final String MSG_ALIVE = "110"; //$NON-NLS-1$ + + /* Commands */ + public static final String CMD_GET_LIST = "ls -1 "; //$NON-NLS-1$ + public static final String CMD_NO_LIST = "ls:"; //$NON-NLS-1$ + public static final String CMD_CAT_PRINT = "cat "; //$NON-NLS-1$ + public static final String CMD_NO_CAT_PRINT = "cat:"; //$NON-NLS-1$ + public static final String CMD_REMOVE = "rm -rf"; //$NON-NLS-1$ + public static final String CMD_EXE_PERMISSION = "chmod +x "; //$NON-NLS-1$ + // public static final String CMD_APPLICATION_LIST = "egrep -i \"exec|name=\" " //$NON-NLS-1$ + // + GRAVE_ACCENT + "egrep -Li \"Hidden=true|taskmanage=false\" " //$NON-NLS-1$ + // + APPLICATION_LIST_PATH + ASTERISK + APPLICATION_INFO_FILE + + // GRAVE_ACCENT; + // public static final String AA = + // "egrep -i \"exec|name=\" `egrep -Li \"Hidden=true|taskmanage=false\" /opt/share/applications/*.desktop`"; + public static final String CMD_APPLICATION_LIST = "ls -t " + //$NON-NLS-1$ + APPLICATION_LIST_PATH + + "*.desktop | xargs egrep -Li \"Hidden=true|PackageType=wgt|taskmanage=false\" | xargs egrep -i \"exec|name=\"";//$NON-NLS-1$ + public static final String CMD_BATTERY_LOG_LIST = CMD_GET_LIST + + BATTERY_REMOTE_LOG_PATH; + public static final String CMD_DAEMON_EXE_PERMISSION = CMD_EXE_PERMISSION + + DA_REMOTE_DAEMON; + public static final String CMD_READELF_PERMISSION = CMD_EXE_PERMISSION + + DA_REMOTE_PATH + READELF_BIN; + public static final String CMD_IS_DAEMON_EXIST = CMD_GET_LIST + + DA_REMOTE_DAEMON; + public static final String CMD_IS_DAEMON_LISTEN = "netstat -an | grep " //$NON-NLS-1$ + + REMOTE_PORT; + public static final String CMD_LS_VERSION = CMD_GET_LIST + DA_REMOTE_PATH + + VERSION_NAME; + public static final String CMD_CAT_VERSION = CMD_CAT_PRINT + DA_REMOTE_PATH + + VERSION_NAME; + public static final String CMD_PIDOF_DAEMON = "pidof " //$NON-NLS-1$ + + DA_DAEMON_NAME; + public static final String CMD_KILL_DAEMON = "kill -9 "; //$NON-NLS-1$ + public static final String CMD_IS_ARM_ARCH = "uname -m"; //$NON-NLS-1$ + + public static final int DAEMON_LISTEN_TRY = 50; + + /* app info */ + public static final int APP_INFO_SYSTEM_MEMORY_SIZE = 0; + public static final int APP_INFO_STORAGE_SIZE = 1; + public static final int APP_INFO_BLUETOOTH_SUPPORT = 2; + public static final int APP_INFO_GPS_SUPPORT = 3; + public static final int APP_INFO_WIFI_SUPPORT = 4; + public static final int APP_INFO_CAMERA_COUNT = 5; + public static final int APP_INFO_NETWORK_TYPE = 6; + public static final int APP_INFO_MAX_BRIGHTNESS = 7; + public static final int APP_INFO_WIDTH = 8; + public static final int APP_INFO_HEIGHT = 9; + public static final int APP_INFO_THEME = 10; + public static final int APP_INFO_VERSION = 11; + public static final int APP_INFO_SCALE = 12; + public static final int APP_INFO_REMOVABLE = 13; + public static final int APP_INFO_COMMENT = 14; + public static final int APP_INFO_PID = 15; + public static final int APP_INFO_START_TIME = 16; + public static final int APP_INFO_PIE_BUILD = 17; + public static final int APP_INFO_BASE_ADDRESS = 18; + public static final int APP_INFO_APP_TYPE = 19; + public static final int APP_INFO_BINARY_PATH = 20; + public static final int APP_INFO_SIZE = 21; + + /* app type */ + public static final int APP_TYPE_TIZEN = 0; + public static final int APP_TYPE_OSP = 1; + + /* Real Time Tab ID */ + public static final int REALTIME_TAB_RESOURCE_LIFECYCLE = 0; + public static final int REALTIME_TAB_RESOURCE_LEAK = 1; + public static final int REALTIME_TAB_LOGS = 2; + public static final int REALTIME_TAB_STATISTICS = 3; + public static final int REALTIME_TAB_BASE = 4; + + public static final int BATTERY_ANALYSIS_PAGE = 4; + + /* Save Data table */ + public static final String LEAK_DATA_TABLE_NAME = "LeakData"; //$NON-NLS-1$ + public static final String FAILED_DATA_TABLE_NAME = "FailedData"; //$NON-NLS-1$ + + /* Source Line errors */ + public static final int SOURCELINE_NOERROR = 0; + public static final int SOURCELINE_NULL_PATH = 1; + public static final int SOURCELINE_NULL_ADDRESS = 2; + public static final int SOURCELINE_FILE_NOT_FOUND = 3; + public static final int SOURCELINE_BAD_ADDRESS = 4; + public static final int SOURCELINE_NO_SYMBOL_INFORMATION = 5; + public static final int SOURCELINE_NO_MATCHING_LINE = 6; + public static final int SOURCELINE_UNKNOWN_ERROR = 7; + public static final int SOURCELINE_NO_SOURCELINE_DATA = 8; + public static final int SOURCELINE_PIE_BUILD = 9; + public static final int SOURCE_FILE_NOT_FOUND = 10; + + public static final String[] sourcelineErrorMsg = { + AnalyzerLabels.EMPTY_STRING, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NULL_PATH, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NULL_ADDRESS, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_FILE_NOT_FOUND, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_BAD_ADDRESS, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NO_SYMBOL_INFORMATION, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NO_MATCHING_LINE, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_UNKNOWN_ERROR, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NO_SOURCELINE_DATA, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_PIE_BUILD, + AnalyzerLabels.ANALYZER_CONSTANTS_SOURCELINE_NOT_FOUND }; + + // user call check + public final static String USER_BIN_POS = "/opt/apps/"; //$NON-NLS-1$ + public final static int USER_CALL = 1; + public final static int INTERNAL_CALL = 2; + public final static int USER_CALL_CHECK_ERROR = -1; + public final static String PROBE_LIB_TIZEN = "da_probe_tizen.so"; //$NON-NLS-1$ + public final static String PROBE_LIB_OSP = "da_probe_osp.so"; //$NON-NLS-1$ + + // comparator type + public final static int SORT_TYPE_NUM = 1; + public final static int SORT_TYPE_STRING = 2; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/LogCenterConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/LogCenterConstants.java index 59cea21..7c381f2 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/LogCenterConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/LogCenterConstants.java @@ -31,7 +31,7 @@ public class LogCenterConstants { public static final int LOG_DEVICE = 9; public static final int LOG_SAMPLE = 11; public static final int LOG_SYSTEM = 12; - public static final int LOG_CUSTOM = 13; + public static final int LOG_CUSTOM_CHART = 13; public static final int TYPE_CALLSTACK = 99; @@ -121,11 +121,11 @@ public class LogCenterConstants { public static final int USER_CALL = 2; /* custom log */ - public static final int CUSTOM_HANDLE = 11; - public static final int CUSTOM_TYPE = 12; - public static final int CUSTOM_TEXT = 13; - public static final int CUSTOM_COLOR = 14; - public static final int CUSTOM_VALUE = 15; + public static final int CUSTOM_CHART_HANDLE = 12; + public static final int CUSTOM_CHART_TYPE = 13; + public static final int CUSTOM_CHART_TEXT = 14; + public static final int CUSTOM_CHART_COLOR = 15; + public static final int CUSTOM_CHART_VALUE = 16; /* Common Column Size */ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/TimelineConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/TimelineConstants.java index 178eed1..96b5dc5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/TimelineConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/TimelineConstants.java @@ -15,6 +15,7 @@ public class TimelineConstants { public static final long CHART_RANGE_DEFAULT = 120000;// 12 /* Time-line Item type */ + public static final int NOT_DEFAULT_CHART = -100; public static final int CHART_TYPE_CPU = -101; public static final int CHART_TYPE_CPU_CORE = -102; public static final int CHART_TYPE_CPU_FREQUENCY = -103; @@ -66,7 +67,7 @@ public class TimelineConstants { public static final int TIMELINE_ITEM_MINIMIZE_WIDTH = 20; /* item size mode */ - public static final int ITEM_HEIGHT_MIN = 30; + public static final int ITEM_HEIGHT_MIN = 41; public static final int ITEM_HEIGHT_DEF = 82;// 71, 58 public static final int ITEM_HEIGHT_MAX = 243; public static final int ITEM_SIZE_ICON_VISIBLE = 57; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java index 576e605..2ccc552 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java @@ -38,6 +38,7 @@ public class ClearHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { + System.out.println("clear handler"); UpdateViewTimer.stop(); @@ -53,9 +54,11 @@ public class ClearHandler extends AbstractHandler { @Override public void run() { ((BaseView) AnalyzerUtil.getView(BaseView.ID)).clear(); + System.out.println("view clear"); } }); + System.out.println("clear handler exit"); return null; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/StartStopTraceHandler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/StartStopTraceHandler.java index 28cdf00..ca38f87 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/StartStopTraceHandler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/StartStopTraceHandler.java @@ -31,6 +31,7 @@ public class StartStopTraceHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { + System.out.println("start stop trace handler"); AnalyzerManager.runStartStopThread(); return null; } 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 8acdbcf..82abbfd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/listeners/TableTooltipListener.java @@ -393,7 +393,7 @@ public class TableTooltipListener implements Listener { + AnalyzerConstants.DATA_PARSING_TOKEN + sl.getLineNumber(); - IDEConnectorManager.SendMessageOpenIDE( msg ); + IDEConnectorManager.sendMessageOpenIDE( msg ); } public void setSourceButtonToggle(boolean toggle) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackUnit.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackUnit.java index cbd3192..224d917 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackUnit.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/CallStackUnit.java @@ -95,8 +95,8 @@ public class CallStackUnit { functionName = SymbolNameDemangler.nameDemangle(functionName); if(functionName.contains("_Z")) { -// System.out.println("function name " + functionName); - functionName = SymbolNameDemangler.nameDemangle(functionName); + System.out.println("function name " + functionName); +// functionName = SymbolNameDemangler.nameDemangle(functionName); // System.out.println("function name2 " + functionName); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/Project.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/Project.java index 3389cf8..ff5fe9f 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/Project.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/Project.java @@ -33,7 +33,6 @@ import org.tizen.dynamicanalyzer.AnalyzerManager; import org.tizen.dynamicanalyzer.DACommunicator; import org.tizen.dynamicanalyzer.SqlManager; import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; - import org.tizen.sdblib.IDevice; public class Project { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/SnapshotData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/SnapshotData.java index 32f6f60..eba94a0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/SnapshotData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/SnapshotData.java @@ -31,7 +31,6 @@ import org.tizen.dynamicanalyzer.SqlManager; import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; import org.tizen.dynamicanalyzer.constants.LogCenterConstants; import org.tizen.dynamicanalyzer.constants.SnapshotConstants; -import org.tizen.dynamicanalyzer.timeline.TimelineMaster; import org.tizen.dynamicanalyzer.utils.ImageUtil; @@ -67,9 +66,6 @@ public class SnapshotData { imageHash.put(snapshotInfo.getSequence(), imageDesc); timeHash.put(snapshotInfo.getSequence(), snapshotInfo.getTime()); - - TimelineMaster.getInstance().addSnapshot(snapshotInfo.getTime(), - snapshotInfo.getSequence()); } } 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 db6a000..1f7aa6c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.java @@ -21,7 +21,7 @@ package org.tizen.dynamicanalyzer.nl; import org.eclipse.osgi.util.NLS; -public class AnalyzerLabels { +public class AnalyzerLabels extends NLS{ private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.AnalyzerLabels"; //$NON-NLS-1$ 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 920380d..75d81d1 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/AnalyzerLabels.properties @@ -1,20 +1,20 @@ -OFF=OFF -ON=ON +OFF=off +ON=on #Toolbar button -START_TRACE=Start Trace -STOP_TRACE=Stop Trace -SAVE_TRACE=Save Trace -OPEN_TRACE=Open Trace +START_TRACE=Start trace +STOP_TRACE=Stop trace +SAVE_TRACE=Save trace +OPEN_TRACE=Open trace REPLAY=Replay -VIEW_SOURCE=View Source +VIEW_SOURCE=View source SETTING=Settings #Setting menu ABOUT=About Dynamic Analyzer -LICENSE=License Dynamic Analyzer -CONFIGURATION=Configuration Dynamic Analyzer +LICENSE=License +CONFIGURATION=Configuration # SingletonInfoDlg. @@ -31,38 +31,37 @@ ERROR=Error CONFIRMATION=Confirmation YES=Yes NO=No -VIEW_SOURCE_MESSAGE=Are you sure you want to view source in IDE? -VIEW_SOURCE_ERROR_MESSAGE=Opening source file is failed. - +VIEW_SOURCE_MESSAGE=Are you sure you want to view the source in the IDE? +VIEW_SOURCE_ERROR_MESSAGE=Opening the source file failed. EMPTY_STRING= -SYMBOL_MANAGER_UNKNOWN=unknown +SYMBOL_MANAGER_UNKNOWN=Unknown error. -MESSAGE_PROCESS_PG_WARNING=to see source should be compiled with -pg option -MESSAGE_PROCESS_VIEW_SOURCE=View Source +MESSAGE_PROCESS_PG_WARNING=To view the source, compile with the '-pg' option +MESSAGE_PROCESS_VIEW_SOURCE=View source -ANALYZER_CONSTANTS_SOURCELINE_BAD_ADDRESS=Cannot get PC address.(bad pc address) -ANALYZER_CONSTANTS_SOURCELINE_FILE_NOT_FOUND=Application binary is not found in host -ANALYZER_CONSTANTS_SOURCELINE_NO_MATCHING_LINE=Cannot find matching source : function is from shared library -ANALYZER_CONSTANTS_SOURCELINE_NO_SOURCELINE_DATA=source not supported data -ANALYZER_CONSTANTS_SOURCELINE_NO_SYMBOL_INFORMATION=Cannot read symbol information.\n Application binary in host may not be the same as the binary from target. -ANALYZER_CONSTANTS_SOURCELINE_NOT_FOUND=Source file is not found. -ANALYZER_CONSTANTS_SOURCELINE_NULL_ADDRESS=Cannot get PC address. (null address) -ANALYZER_CONSTANTS_SOURCELINE_NULL_PATH=No symbol information in application binary. -ANALYZER_CONSTANTS_SOURCELINE_PIE_BUILD=Application is built with -pie option. Cannot find matching source with this option. -ANALYZER_CONSTANTS_SOURCELINE_UNKNOWN_ERROR=unknown error occured +ANALYZER_CONSTANTS_SOURCELINE_BAD_ADDRESS=Address not found. Check the address. +ANALYZER_CONSTANTS_SOURCELINE_FILE_NOT_FOUND=Application binary is not found in the host. +ANALYZER_CONSTANTS_SOURCELINE_NO_MATCHING_LINE=Matching source not found; the method comes from a shared library. +ANALYZER_CONSTANTS_SOURCELINE_NO_SOURCELINE_DATA=Source data not supported. +ANALYZER_CONSTANTS_SOURCELINE_NO_SYMBOL_INFORMATION=Error in reading the symbol. The host and target application binary may not be the same. +ANALYZER_CONSTANTS_SOURCELINE_NOT_FOUND=Source file not found. +ANALYZER_CONSTANTS_SOURCELINE_NULL_ADDRESS=Address not found. Enter the address. +ANALYZER_CONSTANTS_SOURCELINE_NULL_PATH=Symbol not found in the application binary. +ANALYZER_CONSTANTS_SOURCELINE_PIE_BUILD=Application built with the '-pie' option. Matching source with this option not found. +ANALYZER_CONSTANTS_SOURCELINE_UNKNOWN_ERROR=Unknown error. COOLBAR_AREA_FILE=File COOLBAR_AREA_SUMMARY=Summary COOLBAR_AREA_THREAD=Thread COOLBAR_AREA_TIMELINE=Timeline -LICENSE_DIALOG_LICENSE=license -LICENSE_DIALOG_NOT_FOUND=license file not found +LICENSE_DIALOG_LICENSE=License +LICENSE_DIALOG_NOT_FOUND=License file not found -ABOUT_DIALOG_BUILD_TIME=BUILDTIME -ABOUT_DIALOG_BUILD_TIME_TAB=Build Time\t: -ABOUT_DIALOG_VERSION=VERSION +ABOUT_DIALOG_BUILD_TIME=Build time +ABOUT_DIALOG_BUILD_TIME_TAB=Build time\t: +ABOUT_DIALOG_VERSION=Version ABOUT_DIALOG_VERSION_TAB=Version\t\t: ABOUT_DIALOG_OK=OK ABOUT_DIALOG_CANCEL=CANCEL @@ -74,11 +73,11 @@ CONFIGURATION_DIALOG_SHOW_SNAPSHOT=Show Snapshot OPEN_TRACE_DLG_SAVED_FILE=Saved file OPEN_TRACE_DLG_TEMP_FILE=Temporary file -OPEN_TRACE_DLG_TEMP_FILE_NAME=Trace file name +OPEN_TRACE_DLG_TEMP_FILE_NAME=Temporary file name OPEN_TRACE_DLG_TRACE_FILE_NAME=Trace file name PATH_WARNING=Please install the Tizen SDK -RE_TRACE_FORM_IDE=do you want Trace Application from Tizen IDE ? +RE_TRACE_FORM_IDE=Another one with the Trace Application is running now STOP_PROCESS_DLG_PLEASE_WAIT=Please wait... STOP_PROCESS_DLG_SUMMARIZING_DATA=Summarizing collected data diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/CommonPageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/CommonPageLabels.properties index 180d1e1..843baeb 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/CommonPageLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/CommonPageLabels.properties @@ -4,7 +4,7 @@ COMMON_DATA_COLUMN_TIME=Time COMMON_DATA_COLUMN_NAME=Name COMMON_DATA_COLUMN_PARAMETER=Parameter COMMON_DATA_COLUMN_THREADID=Thread ID -COMMON_DATA_COLUMN_RETURN=Return -COMMON_DATA_COLUMN_ERRNO=errno -COMMON_DATA_COLUMN_APITYPE=API Type +COMMON_DATA_COLUMN_RETURN=Return value +COMMON_DATA_COLUMN_ERRNO=Error number +COMMON_DATA_COLUMN_APITYPE=API type PAGE_CHART_SERIES_NAME=Page \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java new file mode 100644 index 0000000..033546f --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.java @@ -0,0 +1,26 @@ +package org.tizen.dynamicanalyzer.nl; + +import org.eclipse.osgi.util.NLS; + +public class ConfigureLabels extends NLS { + private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.ConfigureLabels"; //$NON-NLS-1$ + + public static String OFF; + public static String ON; + public static String INTERNALCALL; + public static String RANGEAUTOSELECT; + public static String SNAPSHOT; + public static String SHOWLOG; + public static String SAMPLINGPERIOD; + public static String PROCESSSIZE; + public static String SINGLETON_FOCUS_DA_PID; + public static String CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST; + public static String CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST; + + static { + NLS.initializeMessages(BUNDLE_NAME, ConfigureLabels.class); + } + + private ConfigureLabels(){ + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties new file mode 100644 index 0000000..0d7fd61 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ConfigureLabels.properties @@ -0,0 +1,11 @@ +OFF=off +ON=on +INTERNALCALL=Internal call +RANGEAUTOSELECT=Ragne auto select +SNAPSHOT=Snapshot +SHOWLOG=Show log +SAMPLINGPERIOD=Sampling period +PROCESSSIZE=Process size +SINGLETON_FOCUS_DA_PID=Singleton focus DA PID +CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST=Available chart list +CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST=Selected chart list \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties index 3c699db..0618e53 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/FilePageLabels.properties @@ -1,8 +1,8 @@ -FILE_API_LIST_VIEW_ERRNO=errno +FILE_API_LIST_VIEW_ERRNO=Error number FILE_API_LIST_VIEW_INDEX=\# -FILE_API_LIST_VIEW_NAME=Name +FILE_API_LIST_VIEW_NAME=File API FILE_API_LIST_VIEW_PARAMETER=Parameter -FILE_API_LIST_VIEW_RETURN=Return +FILE_API_LIST_VIEW_RETURN=Return value FILE_API_LIST_VIEW_THREAD_ID=Thread ID FILE_API_LIST_VIEW_TIME=Time FILE_API_LIST_VIEW_TITLE=File API List @@ -15,16 +15,16 @@ FILE_CHART_TOGGLE_RENDERER_OMIT=... FILE_CHART_TOGGLE_RENDERER_OBJ=0x FILE_CHART_TOGGLE_RENDERER_OBJECT=Object -FILE_DETAILS_API_COUNT=API Count : -FILE_DETAILS_FAILED_API_COUNT=Failed API Count : -FILE_DETAILS_FILE_NAME=File Name : -FILE_DETAILS_FILE_NAME_NEWLINE=File Name : \n -FILE_DETAILS_FILE_PATH=File Path : -FILE_DETAILS_READ_SIZE=Read Size : +FILE_DETAILS_API_COUNT=API count : +FILE_DETAILS_FAILED_API_COUNT=Failed API count : +FILE_DETAILS_FILE_NAME=File name : +FILE_DETAILS_FILE_NAME_NEWLINE=File name : \n +FILE_DETAILS_FILE_PATH=File path : +FILE_DETAILS_READ_SIZE=Read size : FILE_DETAILS_TITLE=File Details -FILE_DETAILS_TOTAL_USE_TIME=Total Use Time : -FILE_DETAILS_WRITE_SIZE=Write Size : -FILE_DETAILS_TOTAL_SIZE=File Size : +FILE_DETAILS_TOTAL_USE_TIME=Total use time : +FILE_DETAILS_WRITE_SIZE=Write size : +FILE_DETAILS_TOTAL_SIZE=File size : FILE_TIMELINE_DATA_STR1=time: diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.java index a10e7ee..2a87c78 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.java @@ -64,8 +64,8 @@ public class InformationViewLabels extends NLS { public static String SNAPSHOT_VIEW_WIFI_TRANSFER; public static String SNAPSHOT_VIEW_WIFI_UNCONNECTED; + public static String STATS_TABLE_CHILD; public static String STATS_TABLE_CPU_APP; - public static String STATS_TABLE_CPU_CORE; public static String STATS_TABLE_CPU_CORE0; public static String STATS_TABLE_CPU_CORE1; public static String STATS_TABLE_CPU_CORE2; @@ -78,6 +78,9 @@ public class InformationViewLabels extends NLS { public static String STATS_TABLE_PROCESS_PSS; public static String STATS_TABLE_PROCESS_RSS; public static String STATS_TABLE_PROCESS_VSS; + public static String STATS_TABLE_MEMORY_PROCESS; + public static String STATS_TABLE_MEMORY_SYSTEM; + public static String STATS_TABLE_MEMORY_TOTAL; public static String STATS_TABLE_READ_SIZE; public static String STATS_TABLE_TIME; public static String STATS_TABLE_WRITE_SIZE; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.properties index 6c676b0..9a3e2ce 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/InformationViewLabels.properties @@ -1,9 +1,9 @@ -CALLSTACK_TABLE_UNKNOWN= +CALLSTACK_TABLE_UNKNOWN=Unknown function CALLSTACK_VIEW_ADDRESS=Address -CALLSTACK_VIEW_BINARY_PATH=Binary Path +CALLSTACK_VIEW_BINARY_PATH=Binary path CALLSTACK_VIEW_FUNCTION=Function CALLSTACK_VIEW_TITLE=Callstack -CURRENT_TABLE_AVAILABLE_MEMORY=Available Memory +CURRENT_TABLE_AVAILABLE_MEMORY=Available memory CURRENT_TABLE_BRIGHTNESS=Brightness CURRENT_TABLE_THREAD=Thread @@ -16,43 +16,46 @@ RANGE_VIEW_NAME=Name RANGE_VIEW_START=Start RANGE_VIEW_STATISTICS=Stats -SCORE_VIEW_ELECTRIC_ENERGY=Electric Energy -SCORE_VIEW_FAIL_COUNT=Fail Count -SCORE_VIEW_LEAK_SIZE=Leak Size +SCORE_VIEW_ELECTRIC_ENERGY=Electric energy +SCORE_VIEW_FAIL_COUNT=Fail count +SCORE_VIEW_LEAK_SIZE=Leak size SCORE_VIEW_SCORE=Score -SCORE_VIEW_WARNING_COUNT=Warning Count +SCORE_VIEW_WARNING_COUNT=Warning count SNAPSHOT_VIEW_TITLE=Snapshot SNAPSHOT_VIEW_BLUETOOTH_ELSE=Bluetooth on SNAPSHOT_VIEW_BLUETOOTH_OFF=Bluetooth off -SNAPSHOT_VIEW_BLUETOOTH_TRANSFER=Bluetooth transfer +SNAPSHOT_VIEW_BLUETOOTH_TRANSFER=Bluetooth transfer in progress... SNAPSHOT_VIEW_BYTE=Byte SNAPSHOT_VIEW_CPU=CPU -SNAPSHOT_VIEW_CURRENT_VIEW=Current View -SNAPSHOT_VIEW_GPS_CONNECTED=GPS Connected -SNAPSHOT_VIEW_GPS_OFF=GPS OFF -SNAPSHOT_VIEW_GPS_SEARCHING=GPS Searching +SNAPSHOT_VIEW_CURRENT_VIEW=Current view +SNAPSHOT_VIEW_GPS_CONNECTED=GPS connected +SNAPSHOT_VIEW_GPS_OFF=GPS off +SNAPSHOT_VIEW_GPS_SEARCHING=GPS searching SNAPSHOT_VIEW_MB=\ MB SNAPSHOT_VIEW_PROCESS=Process -SNAPSHOT_VIEW_WIFI_CONNECTED=WiFi Connected -SNAPSHOT_VIEW_WIFI_OFF=WiFi OFF -SNAPSHOT_VIEW_WIFI_TRANSFER=WiFi transfer -SNAPSHOT_VIEW_WIFI_UNCONNECTED=WiFi Unconnected +SNAPSHOT_VIEW_WIFI_CONNECTED=Wi-Fi connected +SNAPSHOT_VIEW_WIFI_OFF=Wi-Fi off +SNAPSHOT_VIEW_WIFI_TRANSFER=Wi-Fi transfer in progress... +SNAPSHOT_VIEW_WIFI_UNCONNECTED=Wi-Fi ont connected -STATS_TABLE_CPU_APP=App. CPU Load -STATS_TABLE_CPU_CORE= -Core -STATS_TABLE_CPU_CORE0=Core0 -STATS_TABLE_CPU_CORE1=Core1 -STATS_TABLE_CPU_CORE2=Core2 -STATS_TABLE_CPU_CORE3=Core3 -STATS_TABLE_CPU_TOTAL=Total CPU Load -STATS_TABLE_CPU_FREQUENCY=CPU Frequency +STATS_TABLE_CHILD= - +STATS_TABLE_CPU_APP=Application CPU load +STATS_TABLE_CPU_CORE0=Core 0 +STATS_TABLE_CPU_CORE1=Core 1 +STATS_TABLE_CPU_CORE2=Core 2 +STATS_TABLE_CPU_CORE3=Core 3 +STATS_TABLE_CPU_TOTAL=Total CPU load +STATS_TABLE_CPU_FREQUENCY=CPU frequency STATS_TABLE_ENERGY=Energy (mW) -STATS_TABLE_FILE_COUNT=File Count -STATS_TABLE_HEAP_USER=Heap App +STATS_TABLE_FILE_COUNT=File count +STATS_TABLE_HEAP_USER=Application heap size STATS_TABLE_PROCESS_PSS=PSS STATS_TABLE_PROCESS_RSS=RSS STATS_TABLE_PROCESS_VSS=VSS -STATS_TABLE_READ_SIZE=File Read Size +STATS_TABLE_MEMORY_PROCESS=Process memory +STATS_TABLE_MEMORY_SYSTEM=System memory +STATS_TABLE_MEMORY_TOTAL=Total memory +STATS_TABLE_READ_SIZE=File read size STATS_TABLE_TIME=Time -STATS_TABLE_WRITE_SIZE=File Write Size +STATS_TABLE_WRITE_SIZE=File write size diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/SummaryLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/SummaryLabels.properties index 675b3eb..ca265e7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/SummaryLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/SummaryLabels.properties @@ -1,5 +1,5 @@ -FAILED_API_LIST_VIEW_ERRNO=errno -FAILED_API_LIST_VIEW_FAILED_API_LIST=Failed APIs Detected +FAILED_API_LIST_VIEW_ERRNO=Error number +FAILED_API_LIST_VIEW_FAILED_API_LIST=Failed APIs FAILED_API_LIST_VIEW_INDEX=\# FAILED_API_LIST_VIEW_NAME=Name FAILED_API_LIST_VIEW_PARAMETER=Parameter @@ -7,51 +7,51 @@ FAILED_API_LIST_VIEW_RETURN=Return FAILED_API_LIST_VIEW_TIME=Time FUNCTION_USAGE_PROFILER_APPLICATION=Application -FUNCTION_USAGE_PROFILER_DEPENDENT_LIB=Dependent Library - -FUNCTION_USER_PROFILING_VIEW_CALL_COUNT=Call Count -FUNCTION_USER_PROFILING_VIEW_EXCLUSIVE_CPU_RATE=Excl. CPU Rate -FUNCTION_USER_PROFILING_VIEW_EXCLUSIVE_CPU_TIME=Excl. CPU Time -FUNCTION_USER_PROFILING_VIEW_INCLUSIVE_CPU_RATE=Incl. CPU Rate -FUNCTION_USER_PROFILING_VIEW_INCLUSIVE_CPU_TIME=Incl. CPU Time -FUNCTION_USER_PROFILING_VIEW_NAME=Name -FUNCTION_USER_PROFILING_VIEW_EXCLUSIVE_ELASPED_TIME=Excl. Elapsed Time -FUNCTION_USER_PROFILING_VIEW_INCLUSIVE_ELASPED_TIME=Incl. Elapsed Time +FUNCTION_USAGE_PROFILER_DEPENDENT_LIB=Dependent library + +FUNCTION_USER_PROFILING_VIEW_CALL_COUNT=Call count +FUNCTION_USER_PROFILING_VIEW_EXCLUSIVE_CPU_RATE=Excl. CPU rate +FUNCTION_USER_PROFILING_VIEW_EXCLUSIVE_CPU_TIME=Excl. CPU time +FUNCTION_USER_PROFILING_VIEW_INCLUSIVE_CPU_RATE=Incl. CPU rate +FUNCTION_USER_PROFILING_VIEW_INCLUSIVE_CPU_TIME=Incl. CPU time +FUNCTION_USER_PROFILING_VIEW_NAME=Library or function name +FUNCTION_USER_PROFILING_VIEW_EXCLUSIVE_ELASPED_TIME=Excl. elapsed time +FUNCTION_USER_PROFILING_VIEW_INCLUSIVE_ELASPED_TIME=Incl. elapsed time FUNCTION_USER_PROFILING_VIEW_TITLE=Function Usage Profiling -WARNING_CASE_BRIEF_DUPLICATE=Duplicate open (re-open without closed) -WARNING_CASE_BRIEF_NO_OPERATION=open and close without using (no operation) -WARNING_CASE_BRIEF_REPEAT=Repeatedly open and close (more than 3 times) -WARNING_CASE_BRIEF_UNUSED=Long time unused (more than 10 files are opened, more than 1 minute unused.) -WARNING_CASE_POST_FIX_DUPLICATE=] was opened more than once with different file descriptors. It`s better to open it once and share the file descriptor. -WARNING_CASE_POST_FIX_NO_OPERATION=] was opened and closed without being used. You should check if the file needs to be opened at all. -WARNING_CASE_POST_FIX_REPEAT=] was opened and closed several times. It`s better to keep it open until it is no longer needed. -WARNING_CASE_POST_FIX_UNUSED=] was remain opened over 1 minute without being used. Because your program used lots of files simultaneously, you should optimize the use of file. +WARNING_CASE_BRIEF_DUPLICATE=Duplicate file open. +WARNING_CASE_BRIEF_NO_OPERATION=File closed without changes. +WARNING_CASE_BRIEF_REPEAT=File opened and closed repeatedly. +WARNING_CASE_BRIEF_UNUSED=File opened and unused for more than a minute. +WARNING_CASE_POST_FIX_DUPLICATE=> file opened more than once with different file descriptors. Open it once and share the file descriptor. +WARNING_CASE_POST_FIX_NO_OPERATION=> file closed without changes. Check whether the file must be opened at all. +WARNING_CASE_POST_FIX_REPEAT=> file opened and closed repeatedly. Keep the file open until not required. +WARNING_CASE_POST_FIX_UNUSED=> file opened and unused for more than a minute. -WARNING_CASE_PRE_FIX=The file [ +WARNING_CASE_PRE_FIX=< WARNING_LIST_VIEW_CATEGORY=Category WARNING_LIST_VIEW_INDEX=\# WARNING_LIST_VIEW_WARNING_LIST=Warning List -WARNING_LIST_VIEW_WARNING_MESSAGE=Warning Message +WARNING_LIST_VIEW_WARNING_MESSAGE=Warning message WARNING_TABLE_FILE=File WARNING_TABLE_SOCKET=Socket -FILE_DETAILS_TITLE=* Warning Message * +FILE_DETAILS_TITLE=* Warning message * LEAK_DATA_DEFAULT_FORMAT=--:--:--- -LEAK_TABLE_ETC=ETC +LEAK_TABLE_ETC=Other LEAK_TABLE_MEMORY=Memory LEAK_TABLE_RESOURCE=Resource -LEAK_VIEW_FILE_PARAMETER=File/Parameter +LEAK_VIEW_FILE_PARAMETER=File or parameter LEAK_VIEW_INDEX=\# -LEAK_VIEW_LEAK_VIEW=Leak View -LEAK_VIEW_NAME=Name -LEAK_VIEW_RETURN=Return +LEAK_VIEW_LEAK_VIEW=Leaks +LEAK_VIEW_NAME=API +LEAK_VIEW_RETURN=Return value LEAK_VIEW_TIME=Time -LEAK_VIEW_TYPE=Type +LEAK_VIEW_TYPE=Leak type SUMMARY_PAGE_CALLSTACK_TITLE=Callstack SUMMARY_PAGE_SNAPSHOT_TITLE=Snapshot 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 14abd9c..900e77f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelineChartLabels.properties @@ -1,46 +1,46 @@ -CPU_CHART_SERIES_NAME_APP_LOAD=App. -CPU_CHART_SERIES_NAME_TOTAL_LOAD=Total +CPU_CHART_SERIES_NAME_APP_LOAD=Application +CPU_CHART_SERIES_NAME_TOTAL_LOAD=Total CPU load CPU_CHART_TITLE=CPU -CPU_CORE_CHART_SERIES_NAME_CORE0=Core0 -CPU_CORE_CHART_SERIES_NAME_CORE1=Core1 -CPU_CORE_CHART_SERIES_NAME_CORE2=Core2 -CPU_CORE_CHART_SERIES_NAME_CORE3=Core3 -CPU_CORE_CHART_TITLE=CPU Core +CPU_CORE_CHART_SERIES_NAME_CORE0=Core 0 +CPU_CORE_CHART_SERIES_NAME_CORE1=Core 1 +CPU_CORE_CHART_SERIES_NAME_CORE2=Core 2 +CPU_CORE_CHART_SERIES_NAME_CORE3=Core 3 +CPU_CORE_CHART_TITLE=CPU core -CPU_FREQUENCY_CHART_FREQUENCY=Frequency -CPU_FREQUENCY_CHART_TITLE=CPU Frequency +CPU_FREQUENCY_CHART_FREQUENCY=CPU frequency +CPU_FREQUENCY_CHART_TITLE=CPU frequency DEVICE_CHART_BLUETOOTH=Bluetooth DEVICE_CHART_CALL=Call DEVICE_CHART_DNET=DNET DEVICE_CHART_GPS=GPS DEVICE_CHART_TITLE=Device -DEVICE_CHART_WIFI=WIFI +DEVICE_CHART_WIFI=Wi-Fi ENERGY_CHART_TITLE=Energy -FILE_CHART_SERIES_NAME_FD_COUNT=File Count -FILE_CHART_SERIES_NAME_READ=Read -FILE_CHART_SERIES_NAME_WRITE=Write +FILE_CHART_SERIES_NAME_FD_COUNT=File count +FILE_CHART_SERIES_NAME_READ=Read size +FILE_CHART_SERIES_NAME_WRITE=Write size FILE_CHART_TITLE=File HEAP_CHART_SERIES_NAME_PLATFORM_ALLOCATION=Platform -HEAP_CHART_SERIES_NAME_USER_ALLOCATION=App. -HEAP_CHART_TITLE=Heap Allocation +HEAP_CHART_SERIES_NAME_USER_ALLOCATION=Application +HEAP_CHART_TITLE=Heap allocation -PROCESS_MEMORY_CHART_PSS=PSS -PROCESS_MEMORY_CHART_RSS=RSS +PROCESS_MEMORY_CHART_PSS=Proportional set size +PROCESS_MEMORY_CHART_RSS=Resident set size PROCESS_MEMORY_CHART_TITLE=Process Size -PROCESS_MEMORY_CHART_VSS=VSS +PROCESS_MEMORY_CHART_VSS=Virtual set size -SNAPSHOT_CHART_SERIES_NAME_EVENT_MOVE=Move Event -SNAPSHOT_CHART_SERIES_NAME_EVENT_UP_DOWN=Up/Down Event -SNAPSHOT_CHART_TITLE=UI Event +SNAPSHOT_CHART_SERIES_NAME_EVENT_MOVE=Move event +SNAPSHOT_CHART_SERIES_NAME_EVENT_UP_DOWN=Up/down event +SNAPSHOT_CHART_TITLE=UI event -SYSTEM_MEMORY_CHART_SERIES_NAME_PROC_RESIDENT=Process -SYSTEM_MEMORY_CHART_SERIES_NAME_SYSTEM=System -SYSTEM_MEMORY_CHART_SERIES_NAME_TOTAL=Total +SYSTEM_MEMORY_CHART_SERIES_NAME_PROC_RESIDENT=Process memory size +SYSTEM_MEMORY_CHART_SERIES_NAME_SYSTEM=System memory size +SYSTEM_MEMORY_CHART_SERIES_NAME_TOTAL=Total memory size SYSTEM_MEMORY_CHART_TITLE=Memory TIMELINE_MASTER_CREATED=Created @@ -55,4 +55,4 @@ UNIT_GHZ=GHz UNIT_MB=MB UNIT_BYTE=Byte -EDIT_CHART_DLG_TITLE=Edit Chart +EDIT_CHART_DLG_TITLE=Edit chart diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelinePageLabels.properties b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelinePageLabels.properties index b5e1363..5339848 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelinePageLabels.properties +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/TimelinePageLabels.properties @@ -1,4 +1,4 @@ -CALL_TRACE_VIEW_NAME=Name +CALL_TRACE_VIEW_NAME=API CALL_TRACE_VIEW_TIME=Time -CALL_TRACE_VIEW_TITLE=Call Trace View +CALL_TRACE_VIEW_TITLE=Call Trace diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/threads/RecordStartStopThread.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/threads/RecordStartStopThread.java index 3b512dd..48a7576 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/threads/RecordStartStopThread.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/threads/RecordStartStopThread.java @@ -21,6 +21,7 @@ package org.tizen.dynamicanalyzer.threads; import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.AnalyzerManager; +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; import org.tizen.dynamicanalyzer.services.RecordStateSourceProvider; import org.tizen.dynamicanalyzer.ui.views.CoolbarArea; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; @@ -31,19 +32,25 @@ public class RecordStartStopThread implements Runnable { @Override public void run() { + System.out.println("record start stop thread"); String state = AnalyzerUtil.getRecordState(); if (state.equals(RecordStateSourceProvider.RECORD_RECORDING)) { // record start + System.out.println("record start"); AnalyzerManager.recordStart(); Display.getDefault().syncExec(new Runnable() { @Override public void run() { + System.out.println("record start : set coolbar area setting "); CoolbarArea.getInstance().setStartToolbarEnablement(true); + CoolbarArea.getInstance().setStartButtonToolTipText(AnalyzerLabels.STOP_TRACE); } }); } else { // record stop + System.out.println("record stop "); AnalyzerManager.recordStop(); + CoolbarArea.getInstance().setStartButtonToolTipText(AnalyzerLabels.START_TRACE); } count--; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/CustomLogParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/CustomLogParser.java index 2122b21..a5cebc0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/CustomLogParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/CustomLogParser.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.widgets.Display; import org.tizen.dynamicanalyzer.ColorResources; import org.tizen.dynamicanalyzer.constants.LogCenterConstants; import org.tizen.dynamicanalyzer.model.LogPackage; @@ -43,11 +44,11 @@ public class CustomLogParser { private static Map customChartSeriesMap = new HashMap(); public static void parsingLogPackage(LogPackage logPack) { - if(!isAbleToParse(logPack, LogCenterConstants.LOG_CUSTOM)) { + if(!isAbleToParse(logPack, LogCenterConstants.LOG_CUSTOM_CHART)) { return; } - Logs logs = logPack.getLogs(LogCenterConstants.LOG_CUSTOM); + Logs logs = logPack.getLogs(LogCenterConstants.LOG_CUSTOM_CHART); List> logList = logs.getLogs(); for(int i = 0; i< logList.size(); i++) { parsingLog(logList.get(i)); @@ -59,27 +60,27 @@ public class CustomLogParser { if(apiName.equals(API_NAME_CREATE_CHART)) { int chartHandle = Integer.parseInt(log.get(LogCenterConstants.RETURN_INDEX)); - String chartName = log.get(LogCenterConstants.CUSTOM_TEXT); + String chartName = log.get(LogCenterConstants.CUSTOM_CHART_TEXT); chartManager.addCustomChart(new UserCustomChart(chartHandle, chartName)); } else if(apiName.equals(API_NAME_CREATE_SERIES)) { - int chartType = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_HANDLE)); + int chartType = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_CHART_HANDLE)); UserCustomChart chart = (UserCustomChart)chartManager.getChartInstance(chartType); if(chart.getSeriesNum() >= 4) { return; } int seriesHandle = Integer.parseInt(log.get(LogCenterConstants.RETURN_INDEX)); - int seriesType = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_TYPE)); - String seriesName = log.get(LogCenterConstants.CUSTOM_TEXT); - Color seriesColor = getCustomColor(Integer.parseInt(log.get(LogCenterConstants.CUSTOM_COLOR))); + int seriesType = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_CHART_TYPE)); + String seriesName = log.get(LogCenterConstants.CUSTOM_CHART_TEXT); + Color seriesColor = getCustomColor(Integer.parseInt(log.get(LogCenterConstants.CUSTOM_CHART_COLOR))); DACustomChartSeries series = new DACustomChartSeries(seriesName, seriesType, seriesColor); chart.addSeries(series); customChartSeriesMap.put(seriesHandle, series); } else if(apiName.equals(API_NAME_DA_LOG)) { - int seriesHandle = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_HANDLE)); + int seriesHandle = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_CHART_HANDLE)); long time = Integer.parseInt(log.get(LogCenterConstants.TIME_INDEX)); - double value = Integer.parseInt(log.get(LogCenterConstants.CUSTOM_VALUE)); + double value = Double.parseDouble(log.get(LogCenterConstants.CUSTOM_CHART_VALUE)); DACustomChartSeries series = customChartSeriesMap.get(seriesHandle); series.addSeriesItem(new DACustomChartSeriesItem(time, value, series.getName() + " : " + value)); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimeTickComposite.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimeTickComposite.java index 21e5a92..d3c97c0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimeTickComposite.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimeTickComposite.java @@ -122,16 +122,6 @@ public class TimeTickComposite extends Composite { .getScaleSec(); int chartRunningPx = timelineMaster .getPxBySec(TempConstants.chartRunningSec); - double lastSnapshotTime = timelineMaster.getLastSnapshotTime(); - if (lastSnapshotTime != TempConstants.NOT_INITED) { - int lastSnapshotPx = timelineMaster - .getPxBySec(lastSnapshotTime); - if (chartRunningPx < lastSnapshotPx - + SnapshotConstants.SNAPSHOT_IMAGE_WIDTH) { - chartRunningPx = lastSnapshotPx - + SnapshotConstants.SNAPSHOT_IMAGE_WIDTH; - } - } TempConstants.oriScaleValue = TempConstants.currentScaleValue; TempConstants.originalEndPx = (int) Math diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineChartManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineChartManager.java index cf4d620..f16dd6b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineChartManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineChartManager.java @@ -24,13 +24,9 @@ import java.util.HashMap; import java.util.List; import org.eclipse.swt.widgets.Composite; -import org.jfree.chart.JFreeChart; -import org.jfree.data.xy.XYSeries; import org.tizen.dynamicanalyzer.ConfigureManager; import org.tizen.dynamicanalyzer.constants.TimelineConstants; -import org.tizen.dynamicanalyzer.timeline.chart.CPUChart; -import org.tizen.dynamicanalyzer.timeline.chart.CPUCoreChart; -import org.tizen.dynamicanalyzer.timeline.chart.CPUFrequencyChart; +import org.tizen.dynamicanalyzer.nl.ConfigureLabels; import org.tizen.dynamicanalyzer.timeline.chart.DACPUChart; import org.tizen.dynamicanalyzer.timeline.chart.DACPUCoreChart; import org.tizen.dynamicanalyzer.timeline.chart.DACPUFrequencyChart; @@ -39,21 +35,16 @@ import org.tizen.dynamicanalyzer.timeline.chart.DAHeapChart; import org.tizen.dynamicanalyzer.timeline.chart.DAProcessMemoryChart; import org.tizen.dynamicanalyzer.timeline.chart.DASystemMemoryChart; import org.tizen.dynamicanalyzer.timeline.chart.DATimelineChart; -import org.tizen.dynamicanalyzer.timeline.chart.FileChart; -import org.tizen.dynamicanalyzer.timeline.chart.HeapChart; -import org.tizen.dynamicanalyzer.timeline.chart.ProcessMemoryChart; -import org.tizen.dynamicanalyzer.timeline.chart.SystemMemoryChart; -import org.tizen.dynamicanalyzer.timeline.chart.TimelineChart; import org.tizen.dynamicanalyzer.timeline.chart.UserCustomChart; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.chart.DACustomChart; +import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartSeries; public class TimelineChartManager { - private final int NOT_DEFAULT_CHART = 1; private static TimelineChartManager instance = null; - private List chartList; - private List selectedChartList; + private List chartList; + private List selectedChartList; private HashMap customChartMap; public static TimelineChartManager getInstance() { @@ -64,8 +55,8 @@ public class TimelineChartManager { } private TimelineChartManager() { - chartList = new ArrayList(); - selectedChartList = new ArrayList(); + chartList = new ArrayList(); + selectedChartList = new ArrayList(); customChartMap = new HashMap(); loadSavedChartList(); @@ -73,48 +64,38 @@ public class TimelineChartManager { } private void loadSavedChartList() { - String savedChartNameList = ConfigureManager.getInstance().getValue(ConfigureManager.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST); + String savedChartNameList = ConfigureManager.getInstance().getValue(ConfigureLabels.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST); String[] chartNameList = savedChartNameList.split(","); //$NON-NLS-1$ int size = chartNameList.length; if (size > 1) { for (int i = 0; i < size; i++) { - TimelineChart chart = getChartInstance(chartNameList[i]); + DATimelineChart chart = getChartInstance(chartNameList[i]); if(chart != null) { chartList.add(chart); } } } else { - if(TimelineItemManager.bCustomChart) { - chartList.add(DACPUChart.getInstance()); - chartList.add(DACPUCoreChart.getInstance()); - chartList.add(DACPUFrequencyChart.getInstance()); - chartList.add(DAHeapChart.getInstance()); - chartList.add(DAProcessMemoryChart.getInstance()); - chartList.add(DASystemMemoryChart.getInstance()); - chartList.add(DAFileChart.getInstance()); - } else { - chartList.add(CPUChart.getInstance()); - chartList.add(CPUCoreChart.getInstance()); - chartList.add(CPUFrequencyChart.getInstance()); - chartList.add(HeapChart.getInstance()); - chartList.add(ProcessMemoryChart.getInstance()); - chartList.add(SystemMemoryChart.getInstance()); - chartList.add(FileChart.getInstance()); - } + chartList.add(DACPUChart.getInstance()); + chartList.add(DACPUCoreChart.getInstance()); + chartList.add(DACPUFrequencyChart.getInstance()); + chartList.add(DAHeapChart.getInstance()); + chartList.add(DAProcessMemoryChart.getInstance()); + chartList.add(DASystemMemoryChart.getInstance()); + chartList.add(DAFileChart.getInstance()); } } private void loadSelectedChartList() { - String strSaveSelectedItems = ConfigureManager.getInstance().getValue(ConfigureManager.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST); - if (strSaveSelectedItems.equalsIgnoreCase("")) { + String strSaveSelectedItems = ConfigureManager.getInstance().getValue(ConfigureLabels.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST); + if (strSaveSelectedItems.equalsIgnoreCase("")) {//$NON-NLS-1$ selectedChartList.addAll(chartList); } else { String[] savedSelectedChartNameList = strSaveSelectedItems.split(","); //$NON-NLS-1$ int size = savedSelectedChartNameList.length; if (size != 0) { for (int i = 0; i < size; i++) { - TimelineChart chart = getChartInstance(savedSelectedChartNameList[i]); + DATimelineChart chart = getChartInstance(savedSelectedChartNameList[i]); if(chart != null) { selectedChartList.add(chart); } @@ -123,36 +104,30 @@ public class TimelineChartManager { } } - public void setChartList(List chartList) { + public void setChartList(List chartList) { this.chartList.clear(); this.chartList.addAll(chartList); } - public void setSelectedChartList(List chartList) { + public void setSelectedChartList(List chartList) { this.selectedChartList.clear(); this.selectedChartList.addAll(chartList); } - public List getChartList() { + public List getChartList() { return chartList; } - public List getSelectedChartList() { + public List getSelectedChartList() { return selectedChartList; } - public JFreeChart createTimelineChart(int chartType) { - TimelineChart chart = getChartInstance(chartType); - - return chart.createChart(); - } - public DACustomChart createDATimelineChart(Composite parent, int chartType) { DACustomChart chart = null; - TimelineChart timelineChart = getChartInstance(chartType); + DATimelineChart timelineChart = getChartInstance(chartType); if(timelineChart != null) { - chart = ((DATimelineChart)timelineChart).createDAChart(parent); + chart = timelineChart.createDAChart(parent); } return chart; @@ -175,7 +150,7 @@ public class TimelineChartManager { return TimelineConstants.CHART_TYPE_FILE; } else { - return NOT_DEFAULT_CHART; + return TimelineConstants.NOT_DEFAULT_CHART; } } @@ -183,18 +158,13 @@ public class TimelineChartManager { return getChartInstance(chartType).getChartName(); } - public TimelineChart getChartInstance(String chartName) { - if(TimelineItemManager.bCustomChart) { - return getChartInstance(getChartType(chartName)); - } else { - return getChartInstance(getChartType(chartName)); - } + public DATimelineChart getChartInstance(String chartName) { + return getChartInstance(getChartType(chartName)); } - public TimelineChart getChartInstance(int chartType) { - if(TimelineItemManager.bCustomChart) { - switch(chartType) { - case NOT_DEFAULT_CHART: + public DATimelineChart getChartInstance(int chartType) { + switch(chartType) { + case TimelineConstants.NOT_DEFAULT_CHART: return null; case TimelineConstants.CHART_TYPE_CPU: return DACPUChart.getInstance(); @@ -212,28 +182,6 @@ public class TimelineChartManager { return DAFileChart.getInstance(); default: return customChartMap.get(chartType); - } - } else { - switch(chartType) { - case NOT_DEFAULT_CHART: - return null; - case TimelineConstants.CHART_TYPE_CPU: - return CPUChart.getInstance(); - case TimelineConstants.CHART_TYPE_CPU_CORE: - return CPUCoreChart.getInstance(); - case TimelineConstants.CHART_TYPE_CPU_FREQUENCY: - return CPUFrequencyChart.getInstance(); - case TimelineConstants.CHART_TYPE_HEAP: - return HeapChart.getInstance(); - case TimelineConstants.CHART_TYPE_PROCESS_MEMORY: - return ProcessMemoryChart.getInstance(); - case TimelineConstants.CHART_TYPE_SYSTEM_MEMORY: - return SystemMemoryChart.getInstance(); - case TimelineConstants.CHART_TYPE_FILE: - return FileChart.getInstance(); - default: - return customChartMap.get(chartType); - } } } @@ -244,7 +192,6 @@ public class TimelineChartManager { chartList.add(customChart); selectedChartList.add(customChart); - StringBuffer strSaveChartNameList = new StringBuffer(""); //$NON-NLS-1$ StringBuffer strSaveSelectedChartNameList = new StringBuffer(""); //$NON-NLS-1$ @@ -257,18 +204,17 @@ public class TimelineChartManager { strSaveSelectedChartNameList.append(selectedChartList.get(i).getChartName()); strSaveSelectedChartNameList.append(","); //$NON-NLS-1$ } - - TimelineComposite timelineComposite = AnalyzerUtil.getTimelineComposite(); - timelineComposite.resetItems(); + + AnalyzerUtil.getTimelineComposite().resetItems(); TimelineMaster.getInstance().redrawTimeTickCanvas(); - ConfigureManager.getInstance().setValue(ConfigureManager.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST, strSaveChartNameList.toString()); - ConfigureManager.getInstance().setValue(ConfigureManager.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST, strSaveSelectedChartNameList.toString()); + ConfigureManager.getInstance().setValue(ConfigureLabels.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST, strSaveChartNameList.toString()); + ConfigureManager.getInstance().setValue(ConfigureLabels.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST, strSaveSelectedChartNameList.toString()); } } - public List getChartSeriesList(int chartType) { - return getChartInstance(chartType).getBaseSeriesList(); + public List getDAChartSeriesList(int chartType) { + return getChartInstance(chartType).getBaseDASeriesList(); } public void updateChart() { @@ -290,7 +236,7 @@ public class TimelineChartManager { public void setAllChartDoaminAxisRange(double start, double end) { int chartListSize = chartList.size(); for (int i = 0; i < chartListSize; i++) { - ((DATimelineChart)chartList.get(i)).setDomainAxisRange(start, end); + chartList.get(i).setDomainAxisRange(start, end); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineComposite.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineComposite.java index b689e87..6512024 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineComposite.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineComposite.java @@ -38,7 +38,6 @@ import org.tizen.dynamicanalyzer.model.LogPackage; import org.tizen.dynamicanalyzer.model.Logs; import org.tizen.dynamicanalyzer.model.SnapshotData; import org.tizen.dynamicanalyzer.timeline.chart.DATimelineChart; -import org.tizen.dynamicanalyzer.timeline.chart.TimelineChart; import org.tizen.dynamicanalyzer.ui.views.CoolbarArea; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.utils.TimelineUtils; @@ -252,8 +251,6 @@ public class TimelineComposite extends DAView { * TimelineConstants.TIME_SEC_TO_MS; endTime = timelineMaster.getSecByPx(endPx) * TimelineConstants.TIME_SEC_TO_MS; - - timelineMaster.setSelectionMarkerValues(startTime, endTime); } @Override @@ -268,53 +265,29 @@ public class TimelineComposite extends DAView { } Logs logList = logPack.getLogs(LogCenterConstants.LOG_DEVICE); - if(logList == null || logList.getLogs() == null || logList.getLogs().size() <= 0) { - return; - } else { - List> deviceLogs = logList.getLogs(); - for (List deviceLog : deviceLogs) { - if (null == deviceLog || 0 >= deviceLog.size()) { - return; - } + if(logList != null && logList.getLogs() != null && logList.getLogs().size() > 0) { + List chartList = chartManager.getChartList(); + for (int i = 0; i < chartList.size(); i++) { + int probeType = TimelineUtils.getProbeID(chartList.get(i).getChartType()); + + DATimelineChart timelineChart = chartList.get(i); + timelineChart.parsingLogPackage(logPack, probeType); } } - List chartList = chartManager.getChartList(); - //FIXME chart manager - for (int i = 0; i < chartList.size(); i++) { - int probeType = TimelineUtils.getProbeID(chartList.get(i).getChartType()); - - DATimelineChart timelineChart = (DATimelineChart)chartList.get(i); - timelineChart.parsingLogPackage(logPack, probeType); - + Logs customLogList = logPack.getLogs(LogCenterConstants.LOG_CUSTOM_CHART); + if(customLogList != null && customLogList.getLogs() != null && customLogList.getLogs().size() > 0) { + System.out.println("logs : " + logPack.getLogs(LogCenterConstants.LOG_CUSTOM_CHART).getLogs()); + CustomLogParser.parsingLogPackage(logPack); } - - logList = logPack.getLogs(LogCenterConstants.LOG_CUSTOM); - if(logList == null || logList.getLogs() == null || logList.getLogs().size() <= 0) { - return; - } else { - List> customLogs = logList.getLogs(); - for (List customLog : customLogs) { - if (null == customLog || 0 >= customLog.size()) { - return; - } - } - } - - System.out.println("logs : " + logPack.getLogs(LogCenterConstants.LOG_CUSTOM).getLogs()); - CustomLogParser.parsingLogPackage(logPack); - } @Override public void clear() { - TimelineMaster timelineMaster = TimelineMaster.getInstance(); chartManager.clear(); timelineRangeSelector.clear(); timelineTick.clear(); - timelineMaster.clearSelectionMarker(); - timelineMaster.clearSnapshot(); SnapshotData.getInstance().clear(); CustomLogParser.clear(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineEditItemsDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineEditItemsDialog.java index 394b833..c3b13fd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineEditItemsDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineEditItemsDialog.java @@ -60,9 +60,9 @@ import org.tizen.dynamicanalyzer.ConfigureManager; import org.tizen.dynamicanalyzer.FontResources; import org.tizen.dynamicanalyzer.ImageResources; import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; +import org.tizen.dynamicanalyzer.nl.ConfigureLabels; import org.tizen.dynamicanalyzer.nl.TimelineChartLabels; -import org.tizen.dynamicanalyzer.timeline.chart.TimelineChart; -import org.tizen.dynamicanalyzer.timeline.chart.UserCustomChart; +import org.tizen.dynamicanalyzer.timeline.chart.DATimelineChart; import org.tizen.dynamicanalyzer.ui.widgets.DAButton; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; @@ -95,8 +95,8 @@ public class TimelineEditItemsDialog extends Dialog { public void handleClickEvent(DACustomButton button) { TableItem[] tableitems = chartTableViewer.getTable().getItems(); - List chartList = new ArrayList(); - List selectedChartList = new ArrayList(); + List chartList = new ArrayList(); + List selectedChartList = new ArrayList(); StringBuffer strSaveChartNameList = new StringBuffer(""); //$NON-NLS-1$ StringBuffer strSaveSelectedChartNameList = new StringBuffer(""); //$NON-NLS-1$ @@ -121,8 +121,8 @@ public class TimelineEditItemsDialog extends Dialog { timelineComposite.resetItems(); TimelineMaster.getInstance().redrawTimeTickCanvas(); - ConfigureManager.getInstance().setValue(ConfigureManager.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST, strSaveChartNameList.toString()); - ConfigureManager.getInstance().setValue(ConfigureManager.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST, strSaveSelectedChartNameList.toString()); + ConfigureManager.getInstance().setValue(ConfigureLabels.CONFIGUREMANAGER_CHART_AVAILABLE_ITEM_LIST, strSaveChartNameList.toString()); + ConfigureManager.getInstance().setValue(ConfigureLabels.CONFIGUREMANAGER_CHART_SELECTED_ITEM_LIST, strSaveSelectedChartNameList.toString()); shell.dispose(); } }; @@ -131,8 +131,6 @@ public class TimelineEditItemsDialog extends Dialog { @Override public void handleClickEvent(DACustomButton button) { - //FIXME test - chartManager.addCustomChart(new UserCustomChart(55, "This is a message from H.O.T.")); shell.dispose(); } }; @@ -174,9 +172,9 @@ public class TimelineEditItemsDialog extends Dialog { new TableColumn(chartTableViewer.getTable(), SWT.NONE).setWidth(0); } - final List chartList = chartManager.getChartList(); + final List chartList = chartManager.getChartList(); int chartListSize = chartList.size(); - List selectedChartList = chartManager.getSelectedChartList(); + List selectedChartList = chartManager.getSelectedChartList(); final TableItem[] items = new TableItem[chartListSize]; for (int i = 0; i < chartListSize; i++) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineItemManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineItemManager.java index dcb16a0..9ca6461 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineItemManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineItemManager.java @@ -19,7 +19,6 @@ package org.tizen.dynamicanalyzer.timeline; -import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.List; @@ -28,12 +27,8 @@ import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.MouseMoveListener; -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.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FormAttachment; @@ -42,25 +37,11 @@ import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowData; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -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.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Shell; -import org.jfree.chart.ChartRenderingInfo; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.IntervalMarker; -import org.jfree.chart.plot.PlotRenderingInfo; -import org.jfree.chart.plot.XYPlot; -import org.jfree.data.xy.XYSeries; -import org.jfree.experimental.chart.swt.ChartComposite; -import org.jfree.ui.Layer; import org.tizen.dynamicanalyzer.AnalyzerManager; import org.tizen.dynamicanalyzer.ColorResources; import org.tizen.dynamicanalyzer.FontResources; @@ -68,8 +49,7 @@ import org.tizen.dynamicanalyzer.ImageResources; import org.tizen.dynamicanalyzer.constants.TimelineConstants; import org.tizen.dynamicanalyzer.model.DASelectionData; import org.tizen.dynamicanalyzer.model.SnapshotData; -import org.tizen.dynamicanalyzer.timeline.chart.TimelineChart; -import org.tizen.dynamicanalyzer.ui.views.CoolbarArea; +import org.tizen.dynamicanalyzer.timeline.chart.DATimelineChart; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.chart.DACustomChart; import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartPlot; @@ -84,11 +64,6 @@ public class TimelineItemManager { private final int ITEM_INFO_ICON_HEIGHT = 50; private final int ITEM_INFO_LABEL_HEIGHT = 20; - private final int MARGIN = 5; - private final int SPACING = 0; - - private final int TOOLTIP_MARGIN = 20; - private Composite itemsAreaComp; // same with TimelineView's private TimelineChartManager chartManager = TimelineChartManager.getInstance(); @@ -99,21 +74,11 @@ public class TimelineItemManager { private Image itemImage; private Image selectedItemImage; - private IntervalMarker selectionMarker; private DACustomChartPlotIntervalMarker intervalMarker; // for DACustomChart // Selection - - private Shell tooltip; - - private double tempDownTime = TempConstants.NOT_INITED; - private double tempUpTime = TempConstants.NOT_INITED; - - public static boolean bCustomChart = true; // FIXME - private class ItemInfo { public int itemType; public ItemInfoComposite infoComp; - public ChartComposite chartComp; public Composite itemComp; } @@ -144,8 +109,6 @@ public class TimelineItemManager { itemInfoList = new ArrayList(); seletedItemList = new ArrayList(); indexInfoLabelList = new ArrayList