diff options
author | Roland Grunberg | 2011-12-16 21:25:57 +0000 |
---|---|---|
committer | Roland Grunberg | 2011-12-20 18:36:44 +0000 |
commit | 17cb3b872638d898e7a32228793463da5fc63115 (patch) | |
tree | c6a34be7ee284a2e266be9dde4ce27ac0a2fc302 | |
parent | 572b52cea19d3936d0cce41265d3216d8f2ea9c4 (diff) | |
download | org.eclipse.linuxtools-17cb3b872638d898e7a32228793463da5fc63115.tar.gz org.eclipse.linuxtools-17cb3b872638d898e7a32228793463da5fc63115.tar.xz org.eclipse.linuxtools-17cb3b872638d898e7a32228793463da5fc63115.zip |
Implement exporting heap chart to PNG format.
5 files changed, 37 insertions, 98 deletions
diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java index a370a4fbcf..6404d7bb24 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif.tests/src/org/eclipse/linuxtools/internal/valgrind/massif/tests/ChartExportTest.java @@ -12,12 +12,12 @@ package org.eclipse.linuxtools.internal.valgrind.massif.tests; import java.io.File; -import org.eclipse.birt.chart.model.Chart; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.linuxtools.internal.valgrind.massif.birt.ChartEditorInput; import org.eclipse.linuxtools.internal.valgrind.massif.birt.ChartSVG; +import org.eclipse.linuxtools.internal.valgrind.massif.birt.HeapChart; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.PlatformUI; @@ -50,9 +50,9 @@ public class ChartExportTest extends AbstractMassifTest { IEditorInput input = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput(); if (input instanceof ChartEditorInput) { - Chart chart = ((ChartEditorInput) input).getChart(); + HeapChart chart = ((ChartEditorInput) input).getChart(); - ChartSVG svg = new ChartSVG(chart, ((ChartEditorInput) input).getView()); + ChartSVG svg = new ChartSVG(chart); svg.renderSVG(svgPath); File chartFile = svgPath.toFile(); diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java index 9445a38120..bfa980a2a8 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/MassifViewPart.java @@ -248,13 +248,10 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { @Override public void run() { ChartEditorInput currentInput = getChartInput(pid); - String path = getChartSavePath(currentInput.getName() + ".svg"); //$NON-NLS-1$ + String path = getChartSavePath(currentInput.getName() + ".png"); //$NON-NLS-1$ if (path != null) { - /** - * TODO : Implement this - */ -// ChartSVG renderer = new ChartSVG(currentInput.getChart(), MassifViewPart.this); -// renderer.renderSVG(Path.fromOSString(path)); + ChartSVG renderer = new ChartSVG(currentInput.getChart()); + renderer.renderSVG(Path.fromOSString(path)); } } }; @@ -290,7 +287,7 @@ public class MassifViewPart extends ViewPart implements IValgrindToolView { FileDialog dialog = new FileDialog(parent, SWT.SAVE); dialog.setText(Messages.getString("MassifViewPart.Save_chart_dialog_title")); //$NON-NLS-1$ dialog.setOverwrite(true); - dialog.setFilterExtensions(new String[] { ".svg" }); //$NON-NLS-1$ + dialog.setFilterExtensions(new String[] { ".png" }); //$NON-NLS-1$ dialog.setFileName(defaultName); return dialog.open(); diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartEditor.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartEditor.java index e408219b4f..51ac9c24ba 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartEditor.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartEditor.java @@ -24,10 +24,6 @@ import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.ImageLoader; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -43,7 +39,6 @@ import org.swtchart.IAxisSet; import org.swtchart.ILineSeries; import org.swtchart.ILineSeries.PlotSymbolType; import org.swtchart.ISeries.SeriesType; -import org.swtchart.IAxis; import org.swtchart.ITitle; import org.swtchart.LineStyle; import org.swtchart.Range; @@ -87,6 +82,7 @@ public class ChartEditor extends EditorPart { final ChartEditorInput input = (ChartEditorInput) getEditorInput(); final HeapChart heapChart = input.getChart(); control = new Chart(parent, SWT.FILL); + heapChart.setChartControl(control); final Color LIGHTYELLOW = new Color(Display.getDefault(), 255, 255, 225); final Color WHITE = new Color(Display.getDefault(), 255, 255, 255); @@ -226,15 +222,6 @@ public class ChartEditor extends EditorPart { }); - /*Display dsp = Display.getCurrent(); - GC gc = new GC(control); - Image img = new Image(dsp, 640, 480); - gc.copyArea(img, 0, 0); - gc.dispose(); - ImageLoader imageLoader = new ImageLoader(); - imageLoader.data = new ImageData[] {img.getImageData()}; - imageLoader.save("/home/rgrunber/Desktop/test.jpg",SWT.IMAGE_JPEG);*/ - } public Chart getControl() { diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartSVG.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartSVG.java index f52d3fbbe6..22f71a84ad 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartSVG.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/ChartSVG.java @@ -11,99 +11,44 @@ ***********************************************************************/ package org.eclipse.linuxtools.internal.valgrind.massif.birt; -import org.eclipse.birt.chart.computation.DataPointHints; -import org.eclipse.birt.chart.device.ICallBackNotifier; -import org.eclipse.birt.chart.device.IDeviceRenderer; -import org.eclipse.birt.chart.event.WrappedStructureSource; -import org.eclipse.birt.chart.exception.ChartException; -import org.eclipse.birt.chart.factory.GeneratedChartState; -import org.eclipse.birt.chart.factory.Generator; -import org.eclipse.birt.chart.factory.RunTimeContext; -import org.eclipse.birt.chart.model.Chart; -import org.eclipse.birt.chart.model.attribute.Bounds; -import org.eclipse.birt.chart.model.attribute.CallBackValue; -import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl; -import org.eclipse.birt.chart.util.PluginSettings; import org.eclipse.core.runtime.IPath; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot; import org.eclipse.linuxtools.internal.valgrind.massif.MassifViewPart; import org.eclipse.linuxtools.valgrind.ui.ValgrindUIConstants; -import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.ImageLoader; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; -public class ChartSVG implements ICallBackNotifier { +public class ChartSVG { - protected Chart cm = null; - protected GeneratedChartState state = null; - protected IDeviceRenderer deviceRenderer = null; + protected HeapChart cm = null; - private MassifViewPart view; - - public ChartSVG(Chart chart, MassifViewPart view) { - this.view = view; + public ChartSVG(HeapChart chart) { cm = chart; } public void renderSVG(IPath svgPath) { - try { - RunTimeContext rtc = new RunTimeContext(); - - deviceRenderer = PluginSettings.instance().getDevice("dv.SVG"); //$NON-NLS-1$ - Generator gr = Generator.instance(); - Bounds bo = BoundsImpl.create(0, 0, 800, 600); - state = gr.build(deviceRenderer.getDisplayServer(), cm, bo, null, - rtc, null); - deviceRenderer.setProperty(IDeviceRenderer.FILE_IDENTIFIER, svgPath - .toOSString()); - deviceRenderer.setProperty(IDeviceRenderer.UPDATE_NOTIFIER, this); - - gr.render(deviceRenderer, state); - } catch (ChartException e) { - e.printStackTrace(); - } - } - - public void callback(Object event, Object source, CallBackValue value) { - // give Valgrind view focus - showView(); - MouseEvent mEvent = (MouseEvent) event; - - DataPointHints point = ((DataPointHints)((WrappedStructureSource)source).getSource()); - // select the corresponding snapshot in the TableViewer - TableViewer viewer = view.getTableViewer(); - view.setTopControl(viewer.getControl()); - - MassifSnapshot snapshot = (MassifSnapshot) viewer.getElementAt(point.getIndex()); - - switch (mEvent.count) { - case 1: // single click - viewer.setSelection(new StructuredSelection(snapshot)); - break; - case 2: // double click -// if (snapshot.isDetailed()) { -// ChartLocationsDialog dialog = new ChartLocationsDialog(getShell()); -// dialog.setInput(snapshot); -// -// if (dialog.open() == Window.OK) { -// dialog.openEditorForResult(); -// } -// } - } + Composite comp = cm.getChartControl(); + Display dsp = Display.getCurrent(); + GC gc = new GC(comp); + Image img = new Image(dsp, comp.getSize().x, comp.getSize().y); + gc.copyArea(img, 0, 0); + gc.dispose(); + ImageLoader imageLoader = new ImageLoader(); + imageLoader.data = new ImageData[] {img.getImageData()}; + imageLoader.save(svgPath.toOSString(), SWT.IMAGE_PNG); } - public Chart getDesignTimeModel() { + public HeapChart getDesignTimeModel() { return cm; } - public Chart getRunTimeModel() { - return state.getChartModel(); - } - public Object peerInstance() { return this; } diff --git a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/HeapChart.java b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/HeapChart.java index 1e49a5e676..1e5639f67b 100644 --- a/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/HeapChart.java +++ b/valgrind/org.eclipse.linuxtools.valgrind.massif/src/org/eclipse/linuxtools/internal/valgrind/massif/birt/HeapChart.java @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.internal.valgrind.massif.birt; import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot; import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot.TimeUnit; +import org.eclipse.swt.widgets.Composite; public class HeapChart { @@ -45,6 +46,7 @@ public class HeapChart { protected String xUnits; protected String yUnits; public double [] time, dataUseful, dataExtra, dataStacks, dataTotal; + private Composite chartControl; public HeapChart(MassifSnapshot[] snapshots, String title) { TimeUnit timeUnit = snapshots[0].getUnit(); @@ -165,4 +167,12 @@ public class HeapChart { return secondUnits; } + public void setChartControl(Composite control) { + chartControl = control; + } + + public Composite getChartControl (){ + return chartControl; + } + } |