diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-10-10 01:21:01 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-10-10 01:21:01 +0000 |
| commit | a36ebded5c31203efbf26d0be864c82eb78274cd (patch) | |
| tree | 7be9b6bce9e4ad5e1374049f760188bf60f8bedd /core/java | |
| parent | 7a2e7100ac1d4bc1277895d73064646d406af137 (diff) | |
| parent | 183e1380cef0f63610497abed01e16036a2ea2d4 (diff) | |
Merge "Improve dumping of display list memory usage"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/View.java | 3 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 36 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerGlobal.java | 22 |
3 files changed, 38 insertions, 23 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index cfb6a79a674c..c5d0a9b0a335 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4496,8 +4496,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * When non-null and valid, this is expected to contain an up-to-date copy * of the background drawable. It is cleared on temporary detach, and reset * on cleanup. + * @hide */ - private RenderNode mBackgroundRenderNode; + RenderNode mBackgroundRenderNode; @UnsupportedAppUsage private int mBackgroundResource; diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index fedd6fbe56ed..cf0698575851 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -7297,26 +7297,42 @@ public final class ViewRootImpl implements ViewParent, } } - public void dumpGfxInfo(int[] info) { - info[0] = info[1] = 0; - if (mView != null) { - getGfxInfo(mView, info); + static final class GfxInfo { + public int viewCount; + public long renderNodeMemoryUsage; + public long renderNodeMemoryAllocated; + + void add(GfxInfo other) { + viewCount += other.viewCount; + renderNodeMemoryUsage += other.renderNodeMemoryUsage; + renderNodeMemoryAllocated += other.renderNodeMemoryAllocated; } } - private static void getGfxInfo(View view, int[] info) { - RenderNode renderNode = view.mRenderNode; - info[0]++; - if (renderNode != null) { - info[1] += (int) renderNode.computeApproximateMemoryUsage(); + GfxInfo getGfxInfo() { + GfxInfo info = new GfxInfo(); + if (mView != null) { + appendGfxInfo(mView, info); } + return info; + } + + private static void computeRenderNodeUsage(RenderNode node, GfxInfo info) { + if (node == null) return; + info.renderNodeMemoryUsage += node.computeApproximateMemoryUsage(); + info.renderNodeMemoryAllocated += node.computeApproximateMemoryAllocated(); + } + private static void appendGfxInfo(View view, GfxInfo info) { + info.viewCount++; + computeRenderNodeUsage(view.mRenderNode, info); + computeRenderNodeUsage(view.mBackgroundRenderNode, info); if (view instanceof ViewGroup) { ViewGroup group = (ViewGroup) view; int count = group.getChildCount(); for (int i = 0; i < count; i++) { - getGfxInfo(group.getChildAt(i), info); + appendGfxInfo(group.getChildAt(i), info); } } } diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java index 379acbecb613..55b2a2a4033a 100644 --- a/core/java/android/view/WindowManagerGlobal.java +++ b/core/java/android/view/WindowManagerGlobal.java @@ -604,26 +604,24 @@ public final class WindowManagerGlobal { pw.println("\nView hierarchy:\n"); - int viewsCount = 0; - int displayListsSize = 0; - int[] info = new int[2]; + ViewRootImpl.GfxInfo totals = new ViewRootImpl.GfxInfo(); for (int i = 0; i < count; i++) { ViewRootImpl root = mRoots.get(i); - root.dumpGfxInfo(info); + ViewRootImpl.GfxInfo info = root.getGfxInfo(); + totals.add(info); String name = getWindowName(root); - pw.printf(" %s\n %d views, %.2f kB of display lists", - name, info[0], info[1] / 1024.0f); + pw.printf(" %s\n %d views, %.2f kB of render nodes", + name, info.viewCount, info.renderNodeMemoryUsage / 1024.f); pw.printf("\n\n"); - - viewsCount += info[0]; - displayListsSize += info[1]; } - pw.printf("\nTotal ViewRootImpl: %d\n", count); - pw.printf("Total Views: %d\n", viewsCount); - pw.printf("Total DisplayList: %.2f kB\n\n", displayListsSize / 1024.0f); + pw.printf("\nTotal %-15s: %d\n", "ViewRootImpl", count); + pw.printf("Total %-15s: %d\n", "attached Views", totals.viewCount); + pw.printf("Total %-15s: %.2f kB (used) / %.2f kB (capacity)\n\n", "RenderNode", + totals.renderNodeMemoryUsage / 1024.0f, + totals.renderNodeMemoryAllocated / 1024.0f); } } finally { pw.flush(); |
