diff options
author | Siva Velusamy <vsiva@google.com> | 2013-01-06 16:03:12 -0800 |
---|---|---|
committer | Siva Velusamy <vsiva@google.com> | 2013-01-16 09:13:06 -0800 |
commit | 945bfb6068d4ac1414a37a3ebe4dc4d02383e38e (patch) | |
tree | 0a20baaba5224c08e41e2e00452d5b61fe4b2f20 /core/java/android/view/ViewDebug.java | |
parent | 707a71e39e8e3bf284422265b680b73a7c63debf (diff) | |
download | frameworks_base-945bfb6068d4ac1414a37a3ebe4dc4d02383e38e.zip frameworks_base-945bfb6068d4ac1414a37a3ebe4dc4d02383e38e.tar.gz frameworks_base-945bfb6068d4ac1414a37a3ebe4dc4d02383e38e.tar.bz2 |
Support hierarchy viewer commands via DDM
Hierarchy Viewer currently interfaces to the host via a socket
opened by ViewServer which resides in the WindowManagerService.
Since this has access to all windows, it is enabled only on
debug builds.
This CL adds necessary support to DDM to handle all the commands
required for Hierarchy Viewer. It only misses two commands that
are sent to the Window Manager (which we don't have access to
from the applications).
A future CL will remove the ViewServer functionality.
Change-Id: I1dae316a00737b0cae4e640ccc97bf9bb1d05973
Diffstat (limited to 'core/java/android/view/ViewDebug.java')
-rw-r--r-- | core/java/android/view/ViewDebug.java | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 023e58f..6e28268 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -406,7 +406,7 @@ public class ViewDebug { view = view.getRootView(); if (REMOTE_COMMAND_DUMP.equalsIgnoreCase(command)) { - dump(view, clientStream); + dump(view, false, true, clientStream); } else if (REMOTE_COMMAND_CAPTURE_LAYERS.equalsIgnoreCase(command)) { captureLayers(view, new DataOutputStream(clientStream)); } else { @@ -425,7 +425,8 @@ public class ViewDebug { } } - private static View findView(View root, String parameter) { + /** @hide */ + public static View findView(View root, String parameter) { // Look by type/hashcode if (parameter.indexOf('@') != -1) { final String[] ids = parameter.split("@"); @@ -488,7 +489,8 @@ public class ViewDebug { } } - private static void profileViewAndChildren(final View view, BufferedWriter out) + /** @hide */ + public static void profileViewAndChildren(final View view, BufferedWriter out) throws IOException { profileViewAndChildren(view, out, true); } @@ -623,7 +625,8 @@ public class ViewDebug { return duration[0]; } - private static void captureLayers(View root, final DataOutputStream clientStream) + /** @hide */ + public static void captureLayers(View root, final DataOutputStream clientStream) throws IOException { try { @@ -695,10 +698,21 @@ public class ViewDebug { view.getViewRootImpl().outputDisplayList(view); } + /** @hide */ + public static void outputDisplayList(View root, View target) { + root.getViewRootImpl().outputDisplayList(target); + } + private static void capture(View root, final OutputStream clientStream, String parameter) throws IOException { final View captureView = findView(root, parameter); + capture(root, clientStream, captureView); + } + + /** @hide */ + public static void capture(View root, final OutputStream clientStream, View captureView) + throws IOException { Bitmap b = performViewCapture(captureView, false); if (b == null) { @@ -752,14 +766,20 @@ public class ViewDebug { return null; } - private static void dump(View root, OutputStream clientStream) throws IOException { + /** + * Dumps the view hierarchy starting from the given view. + * @hide + */ + public static void dump(View root, boolean skipChildren, boolean includeProperties, + OutputStream clientStream) throws IOException { BufferedWriter out = null; try { out = new BufferedWriter(new OutputStreamWriter(clientStream, "utf-8"), 32 * 1024); View view = root.getRootView(); if (view instanceof ViewGroup) { ViewGroup group = (ViewGroup) view; - dumpViewHierarchyWithProperties(group.getContext(), group, out, 0); + dumpViewHierarchy(group.getContext(), group, out, 0, + skipChildren, includeProperties); } out.write("DONE."); out.newLine(); @@ -804,9 +824,13 @@ public class ViewDebug { return view.getClass().getName().equals(className) && view.hashCode() == hashCode; } - private static void dumpViewHierarchyWithProperties(Context context, ViewGroup group, - BufferedWriter out, int level) { - if (!dumpViewWithProperties(context, group, out, level)) { + private static void dumpViewHierarchy(Context context, ViewGroup group, + BufferedWriter out, int level, boolean skipChildren, boolean includeProperties) { + if (!dumpView(context, group, out, level, includeProperties)) { + return; + } + + if (skipChildren) { return; } @@ -814,9 +838,10 @@ public class ViewDebug { for (int i = 0; i < count; i++) { final View view = group.getChildAt(i); if (view instanceof ViewGroup) { - dumpViewHierarchyWithProperties(context, (ViewGroup) view, out, level + 1); + dumpViewHierarchy(context, (ViewGroup) view, out, level + 1, skipChildren, + includeProperties); } else { - dumpViewWithProperties(context, view, out, level + 1); + dumpView(context, view, out, level + 1, includeProperties); } } if (group instanceof HierarchyHandler) { @@ -824,8 +849,8 @@ public class ViewDebug { } } - private static boolean dumpViewWithProperties(Context context, View view, - BufferedWriter out, int level) { + private static boolean dumpView(Context context, View view, + BufferedWriter out, int level, boolean includeProperties) { try { for (int i = 0; i < level; i++) { @@ -835,7 +860,9 @@ public class ViewDebug { out.write('@'); out.write(Integer.toHexString(view.hashCode())); out.write(' '); - dumpViewProperties(context, view, out); + if (includeProperties) { + dumpViewProperties(context, view, out); + } out.newLine(); } catch (IOException e) { Log.w("View", "Error while dumping hierarchy tree"); |