aboutsummaryrefslogtreecommitdiffstats
path: root/hierarchyviewer
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2011-04-22 16:24:23 -0700
committerTor Norbye <tnorbye@google.com>2011-05-04 17:37:22 -0700
commit3fe16ced4294bdeeab31008e93b5e2d004da7437 (patch)
treea82c16fc41828ac25f6d744735fc709c7bcf6559 /hierarchyviewer
parent4355ff5f80690a4503314ead5299b88f04bfcfaa (diff)
downloadsdk-3fe16ced4294bdeeab31008e93b5e2d004da7437.zip
sdk-3fe16ced4294bdeeab31008e93b5e2d004da7437.tar.gz
sdk-3fe16ced4294bdeeab31008e93b5e2d004da7437.tar.bz2
hierarchyviewer can dump displaylists for selected nodes.
In hierarchyviewer (and hierarchyviewer1): The displaylist for the selected node (if there is one) is output into logcat when the "Dump DisplayList" button is clicked. Change-Id: I1996bbd1cbe32d8bc25708453c777800385fe444
Diffstat (limited to 'hierarchyviewer')
-rw-r--r--hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewManager.java4
-rw-r--r--hierarchyviewer/src/com/android/hierarchyviewer/ui/Workspace.java58
-rw-r--r--hierarchyviewer/src/com/android/hierarchyviewer/ui/action/DumpDisplayListAction.java39
3 files changed, 98 insertions, 3 deletions
diff --git a/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewManager.java b/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewManager.java
index df2a63e..ba346df 100644
--- a/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewManager.java
+++ b/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewManager.java
@@ -35,6 +35,10 @@ public class ViewManager {
sendCommand("REQUEST_LAYOUT", device, window, params);
}
+ public static void outputDisplayList(IDevice device, Window window, String params) {
+ sendCommand("OUTPUT_DISPLAYLIST", device, window, params);
+ }
+
private static void sendCommand(String command, IDevice device, Window window, String params) {
Socket socket = null;
BufferedWriter out = null;
diff --git a/hierarchyviewer/src/com/android/hierarchyviewer/ui/Workspace.java b/hierarchyviewer/src/com/android/hierarchyviewer/ui/Workspace.java
index a7db985..82375e0 100644
--- a/hierarchyviewer/src/com/android/hierarchyviewer/ui/Workspace.java
+++ b/hierarchyviewer/src/com/android/hierarchyviewer/ui/Workspace.java
@@ -29,6 +29,7 @@ import com.android.hierarchyviewer.scene.ViewManager;
import com.android.hierarchyviewer.scene.ViewNode;
import com.android.hierarchyviewer.scene.WindowsLoader;
import com.android.hierarchyviewer.scene.ProfilesLoader;
+import com.android.hierarchyviewer.ui.action.DumpDisplayListAction;
import com.android.hierarchyviewer.ui.util.PsdFileFilter;
import com.android.hierarchyviewer.util.OS;
import com.android.hierarchyviewer.util.WorkerThread;
@@ -145,6 +146,7 @@ public class Workspace extends JFrame {
private JPanel mainPanel;
private JProgressBar progress;
private JToolBar buttonsPanel;
+ private JToolBar commandButtonsPanel;
private JComponent deviceSelector;
private DevicesTableModel devicesTableModel;
@@ -154,6 +156,7 @@ public class Workspace extends JFrame {
private Window currentWindow = Window.FOCUSED_WINDOW;
private JButton displayNodeButton;
+ private JButton dumpDisplayListButton;
private JButton captureLayersButton;
private JButton invalidateButton;
private JButton requestLayoutButton;
@@ -202,6 +205,7 @@ public class Workspace extends JFrame {
actionsMap.put(StopServerAction.ACTION_NAME, new StopServerAction(this));
actionsMap.put(InvalidateAction.ACTION_NAME, new InvalidateAction(this));
actionsMap.put(RequestLayoutAction.ACTION_NAME, new RequestLayoutAction(this));
+ actionsMap.put(DumpDisplayListAction.ACTION_NAME, new DumpDisplayListAction(this));
actionsMap.put(CaptureNodeAction.ACTION_NAME, new CaptureNodeAction(this));
actionsMap.put(CaptureLayersAction.ACTION_NAME, new CaptureLayersAction(this));
actionsMap.put(RefreshWindowsAction.ACTION_NAME, new RefreshWindowsAction(this));
@@ -210,11 +214,12 @@ public class Workspace extends JFrame {
private JComponent buildMainPanel() {
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
- mainPanel.add(buildToolBar(), BorderLayout.PAGE_START);
+ commandButtonsPanel = buildToolBar();
+ mainPanel.add(commandButtonsPanel, BorderLayout.PAGE_START);
mainPanel.add(deviceSelector = buildDeviceSelector(), BorderLayout.CENTER);
mainPanel.add(buildStatusPanel(), BorderLayout.SOUTH);
- mainPanel.setPreferredSize(new Dimension(950, 800));
+ mainPanel.setPreferredSize(new Dimension(1200, 800));
return mainPanel;
}
@@ -481,6 +486,11 @@ public class Workspace extends JFrame {
displayNodeButton.putClientProperty("JButton.segmentPosition", "first");
toolBar.add(displayNodeButton);
+ dumpDisplayListButton = new JButton();
+ dumpDisplayListButton.setAction(actionsMap.get(DumpDisplayListAction.ACTION_NAME));
+ dumpDisplayListButton.putClientProperty("JButton.buttonType", "segmentedTextured");
+ dumpDisplayListButton.putClientProperty("JButton.segmentPosition", "middle");
+
captureLayersButton = new JButton();
captureLayersButton.setAction(actionsMap.get(CaptureLayersAction.ACTION_NAME));
captureLayersButton.putClientProperty("JButton.buttonType", "segmentedTextured");
@@ -502,6 +512,17 @@ public class Workspace extends JFrame {
return toolBar;
}
+ private void setupProtocolDependentToolbar() {
+ // Some functionality is only enabled in certain versions of the protocol.
+ // Add/remove those buttons here
+ if (protocolVersion < 4) {
+ commandButtonsPanel.remove(dumpDisplayListButton);
+ } else if (dumpDisplayListButton.getParent() == null) {
+ commandButtonsPanel.add(dumpDisplayListButton,
+ commandButtonsPanel.getComponentCount() - 1);
+ }
+ }
+
private JMenuBar buildMenuBar() {
JMenuBar menuBar = new JMenuBar();
@@ -885,6 +906,7 @@ public class Workspace extends JFrame {
displayNodeButton.setEnabled(false);
captureLayersButton.setEnabled(false);
invalidateButton.setEnabled(false);
+ dumpDisplayListButton.setEnabled(false);
requestLayoutButton.setEnabled(false);
graphViewButton.setEnabled(false);
pixelPerfectViewButton.setEnabled(false);
@@ -914,6 +936,7 @@ public class Workspace extends JFrame {
displayNodeButton.setEnabled(false);
captureLayersButton.setEnabled(false);
invalidateButton.setEnabled(false);
+ dumpDisplayListButton.setEnabled(false);
graphViewButton.setEnabled(false);
pixelPerfectViewButton.setEnabled(false);
requestLayoutButton.setEnabled(false);
@@ -1008,6 +1031,13 @@ public class Workspace extends JFrame {
return new CaptureNodeTask();
}
+ public SwingWorker<?, ?> outputDisplayList() {
+ if (scene.getFocusedObject() == null) {
+ return null;
+ }
+ return new DumpDisplayListTask();
+ }
+
public SwingWorker<?, ?> captureLayers() {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new PsdFileFilter());
@@ -1081,6 +1111,27 @@ public class Workspace extends JFrame {
}
}
+ private class DumpDisplayListTask extends SwingWorker<Object, Void> {
+ private String captureParams;
+
+ private DumpDisplayListTask() {
+ captureParams = scene.getFocusedObject().toString();
+ beginTask();
+ }
+
+ @Override
+ @WorkerThread
+ protected Object doInBackground() throws Exception {
+ ViewManager.outputDisplayList(currentDevice, currentWindow, captureParams);
+ return null;
+ }
+
+ @Override
+ protected void done() {
+ endTask();
+ }
+ }
+
private class RequestLayoutTask extends SwingWorker<Object, Void> {
private String captureParams;
@@ -1182,7 +1233,7 @@ public class Workspace extends JFrame {
WindowsResult result = get();
protocolVersion = result.protocolVersion;
serverVersion = result.serverVersion;
-
+ setupProtocolDependentToolbar();
windowsTableModel.clear();
windowsTableModel.addWindows(result.windows);
} catch (ExecutionException e) {
@@ -1324,6 +1375,7 @@ public class Workspace extends JFrame {
public void focusChanged(ObjectSceneEvent e, Object oldFocus, Object newFocus) {
displayNodeButton.setEnabled(true);
invalidateButton.setEnabled(true);
+ dumpDisplayListButton.setEnabled(true);
requestLayoutButton.setEnabled(true);
Set<Object> selection = new HashSet<Object>();
diff --git a/hierarchyviewer/src/com/android/hierarchyviewer/ui/action/DumpDisplayListAction.java b/hierarchyviewer/src/com/android/hierarchyviewer/ui/action/DumpDisplayListAction.java
new file mode 100644
index 0000000..3e66794
--- /dev/null
+++ b/hierarchyviewer/src/com/android/hierarchyviewer/ui/action/DumpDisplayListAction.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2011 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.hierarchyviewer.ui.action;
+
+import com.android.hierarchyviewer.ui.Workspace;
+
+import javax.swing.KeyStroke;
+import java.awt.event.KeyEvent;
+import java.awt.event.ActionEvent;
+import java.awt.Toolkit;
+
+public class DumpDisplayListAction extends BackgroundAction {
+ public static final String ACTION_NAME = "dumpDisplayList";
+ private Workspace mWorkspace;
+
+ public DumpDisplayListAction(Workspace workspace) {
+ putValue(NAME, "Dump DisplayList");
+ putValue(SHORT_DESCRIPTION, "Dump DisplayList");
+ putValue(LONG_DESCRIPTION, "Dump DisplayList");
+ this.mWorkspace = workspace;
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ executeBackgroundTask(mWorkspace.outputDisplayList());
+ }
+}