aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2012-09-19 08:58:12 -0700
committerandroid code review <noreply-gerritcodereview@google.com>2012-09-19 08:58:12 -0700
commitff8d9cddc0e8ff107870046df64fda1622bd10d4 (patch)
tree9df1404a6d62ec002620627e9a004e74913687d5
parentf5a41c47350c7449d1b1474591215b8c03c9d3a1 (diff)
parent201e9f24eb34621819ae59c9d0d8959e365bf464 (diff)
downloadsdk-ff8d9cddc0e8ff107870046df64fda1622bd10d4.zip
sdk-ff8d9cddc0e8ff107870046df64fda1622bd10d4.tar.gz
sdk-ff8d9cddc0e8ff107870046df64fda1622bd10d4.tar.bz2
Merge "gltrace: Allow ability to save images"
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/FrameSummaryViewPage.java12
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/SaveImageAction.java59
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/GlDrawCallDetailProvider.java11
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/TextureImageDetailsProvider.java11
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/widgets/ImageCanvas.java24
5 files changed, 110 insertions, 7 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/FrameSummaryViewPage.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/FrameSummaryViewPage.java
index 64e9ac1..e2c20ce 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/FrameSummaryViewPage.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/FrameSummaryViewPage.java
@@ -75,6 +75,9 @@ public class FrameSummaryViewPage extends Page {
private StatsLabelProvider mStatsLabelProvider;
private StatsTableComparator mStatsTableComparator;
+ private FitToCanvasAction mFitToCanvasAction;
+ private SaveImageAction mSaveImageAction;
+
private static final String[] STATS_TABLE_PROPERTIES = {
"Function",
"Count",
@@ -108,8 +111,12 @@ public class FrameSummaryViewPage extends Page {
mSash.setWeights(new int[] {70, 30});
+ mFitToCanvasAction = new FitToCanvasAction(true, mImageCanvas);
+ mSaveImageAction = new SaveImageAction(mImageCanvas);
+
IToolBarManager toolbarManager = getSite().getActionBars().getToolBarManager();
- toolbarManager.add(new FitToCanvasAction(true, mImageCanvas));
+ toolbarManager.add(mFitToCanvasAction);
+ toolbarManager.add(mSaveImageAction);
}
private void createFrameStatisticsPart(Composite parent) {
@@ -280,6 +287,9 @@ public class FrameSummaryViewPage extends Page {
@Override
public void run() {
mImageCanvas.setImage(image);
+
+ mFitToCanvasAction.setEnabled(image != null);
+ mSaveImageAction.setEnabled(image != null);
}
});
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/SaveImageAction.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/SaveImageAction.java
new file mode 100644
index 0000000..6cc8b69
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/SaveImageAction.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.eclipse.gltrace.views;
+
+import com.android.ide.eclipse.gltrace.widgets.ImageCanvas;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+import java.io.File;
+
+public class SaveImageAction extends Action {
+ private static String sLastUsedPath;
+
+ private ImageCanvas mImageCanvas;
+
+ public SaveImageAction(ImageCanvas canvas) {
+ super("Save Image",
+ PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+ ISharedImages.IMG_ETOOL_SAVEAS_EDIT));
+ setToolTipText("Save Image");
+ mImageCanvas = canvas;
+ }
+
+ @Override
+ public void run() {
+ FileDialog fd = new FileDialog(mImageCanvas.getShell(), SWT.SAVE);
+ fd.setFilterExtensions(new String[] { "*.png" });
+ if (sLastUsedPath != null) {
+ fd.setFilterPath(sLastUsedPath);
+ }
+
+ String path = fd.open();
+ if (path == null) {
+ return;
+ }
+
+ File f = new File(path);
+ sLastUsedPath = f.getParent();
+ mImageCanvas.exportImageTo(f);
+ }
+}
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/GlDrawCallDetailProvider.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/GlDrawCallDetailProvider.java
index c3cabb0..44a05ff 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/GlDrawCallDetailProvider.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/GlDrawCallDetailProvider.java
@@ -20,6 +20,7 @@ import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.Function;
import com.android.ide.eclipse.gltrace.model.GLCall;
import com.android.ide.eclipse.gltrace.model.GLTrace;
import com.android.ide.eclipse.gltrace.views.FitToCanvasAction;
+import com.android.ide.eclipse.gltrace.views.SaveImageAction;
import com.android.ide.eclipse.gltrace.widgets.ImageCanvas;
import org.eclipse.jface.action.ActionContributionItem;
@@ -27,12 +28,13 @@ import org.eclipse.jface.action.IContributionItem;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import java.util.Collections;
+import java.util.Arrays;
import java.util.List;
public class GlDrawCallDetailProvider implements ICallDetailProvider {
private ImageCanvas mImageCanvas;
private FitToCanvasAction mFitToCanvasAction;
+ private SaveImageAction mSaveImageAction;
private List<IContributionItem> mToolBarItems;
@Override
@@ -47,8 +49,11 @@ public class GlDrawCallDetailProvider implements ICallDetailProvider {
mImageCanvas.setFitToCanvas(false);
mFitToCanvasAction = new FitToCanvasAction(false, mImageCanvas);
- mToolBarItems = Collections.singletonList(
- (IContributionItem) new ActionContributionItem(mFitToCanvasAction));
+ mSaveImageAction = new SaveImageAction(mImageCanvas);
+
+ mToolBarItems = Arrays.asList(
+ (IContributionItem) new ActionContributionItem(mFitToCanvasAction),
+ (IContributionItem) new ActionContributionItem(mSaveImageAction));
}
@Override
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/TextureImageDetailsProvider.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/TextureImageDetailsProvider.java
index f29bbef..4dcbb10 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/TextureImageDetailsProvider.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/TextureImageDetailsProvider.java
@@ -22,6 +22,7 @@ import com.android.ide.eclipse.gltrace.state.GLStateType;
import com.android.ide.eclipse.gltrace.state.GLStringProperty;
import com.android.ide.eclipse.gltrace.state.IGLProperty;
import com.android.ide.eclipse.gltrace.views.FitToCanvasAction;
+import com.android.ide.eclipse.gltrace.views.SaveImageAction;
import com.android.ide.eclipse.gltrace.widgets.ImageCanvas;
import org.eclipse.jface.action.ActionContributionItem;
@@ -31,12 +32,13 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
-import java.util.Collections;
+import java.util.Arrays;
import java.util.List;
public class TextureImageDetailsProvider implements IStateDetailProvider {
private ImageCanvas mImageCanvas;
private FitToCanvasAction mFitToCanvasAction;
+ private SaveImageAction mSaveImageAction;
private List<IContributionItem> mToolBarItems;
@Override
@@ -50,8 +52,11 @@ public class TextureImageDetailsProvider implements IStateDetailProvider {
mImageCanvas.setFitToCanvas(false);
mFitToCanvasAction = new FitToCanvasAction(false, mImageCanvas);
- mToolBarItems = Collections.singletonList(
- (IContributionItem) new ActionContributionItem(mFitToCanvasAction));
+ mSaveImageAction = new SaveImageAction(mImageCanvas);
+
+ mToolBarItems = Arrays.asList(
+ (IContributionItem) new ActionContributionItem(mFitToCanvasAction),
+ (IContributionItem) new ActionContributionItem(mSaveImageAction));
}
@Override
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/widgets/ImageCanvas.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/widgets/ImageCanvas.java
index 4ff12c3..23baf17 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/widgets/ImageCanvas.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/widgets/ImageCanvas.java
@@ -16,6 +16,10 @@
package com.android.ide.eclipse.gltrace.widgets;
+import com.android.ide.eclipse.gltrace.GlTracePlugin;
+
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@@ -23,6 +27,8 @@ import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
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.graphics.Rectangle;
import org.eclipse.swt.widgets.Canvas;
@@ -32,6 +38,8 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ScrollBar;
+import java.io.File;
+
public class ImageCanvas extends Canvas {
private static final int SCROLLBAR_INCREMENT = 20;
@@ -223,4 +231,20 @@ public class ImageCanvas extends Canvas {
mImage.dispose();
}
}
+
+ public void exportImageTo(File file) {
+ if (mImage == null || file == null) {
+ return;
+ }
+
+ ImageLoader imageLoader = new ImageLoader();
+ imageLoader.data = new ImageData[] { mImage.getImageData() };
+
+ try {
+ imageLoader.save(file.getAbsolutePath(), SWT.IMAGE_PNG);
+ } catch (Exception e) {
+ ErrorDialog.openError(getShell(), "Save Image", "Error saving image",
+ new Status(Status.ERROR, GlTracePlugin.PLUGIN_ID, e.toString()));
+ }
+ }
}