From afd8c2fd1c34d95c2aac34d47badba923fbacc35 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Thu, 15 Oct 2020 22:16:39 +0800 Subject: [PATCH] Dump display area hierarchy To provide the debug information about if the display area has override configuration, e.g. set by display area organizer. Bug: 170361032 Test: adb shell dumpsys window displays Change-Id: I50e29a80276b08872eb3fe82c9353a5541d1c1fd --- .../server/wm/ConfigurationContainer.java | 5 +++++ .../com/android/server/wm/DisplayArea.java | 20 +++++++++++++++++++ .../com/android/server/wm/DisplayContent.java | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java index 13033a6fcf814..60a62dc0b64c3 100644 --- a/services/core/java/com/android/server/wm/ConfigurationContainer.java +++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java @@ -157,6 +157,11 @@ public abstract class ConfigurationContainer { mResolvedOverrideConfiguration.setTo(mRequestedOverrideConfiguration); } + /** Returns {@code true} if requested override override configuration is not empty. */ + boolean hasRequestedOverrideConfiguration() { + return mHasOverrideConfiguration; + } + /** Returns requested override configuration applied to this configuration container. */ public Configuration getRequestedOverrideConfiguration() { return mRequestedOverrideConfiguration; diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java index 94b3d8d6c546d..38ad0706d9493 100644 --- a/services/core/java/com/android/server/wm/DisplayArea.java +++ b/services/core/java/com/android/server/wm/DisplayArea.java @@ -263,6 +263,26 @@ public class DisplayArea extends WindowContainer { if (mIgnoreOrientationRequest) { pw.println(prefix + "mIgnoreOrientationRequest=true"); } + if (hasRequestedOverrideConfiguration()) { + pw.println(prefix + "overrideConfig=" + getRequestedOverrideConfiguration()); + } + } + + void dumpChildDisplayArea(PrintWriter pw, String prefix, boolean dumpAll) { + final String doublePrefix = prefix + " "; + for (int i = getChildCount() - 1; i >= 0; i--) { + final DisplayArea childArea = getChildAt(i).asDisplayArea(); + if (childArea == null) { + continue; + } + pw.println(prefix + "* " + childArea.getName()); + if (childArea.isTaskDisplayArea()) { + // TaskDisplayArea can only contain task. And it is already printed by display. + continue; + } + childArea.dump(pw, doublePrefix, dumpAll); + childArea.dumpChildDisplayArea(pw, doublePrefix, dumpAll); + } } @Override diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index be03e91ac84d7..fed99a490c91d 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2984,6 +2984,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp pw.println(mSystemGestureExclusion); } + pw.println(); + pw.println(prefix + "Display areas in top down Z order:"); + dumpChildDisplayArea(pw, subPrefix, dumpAll); + pw.println(); pw.println(prefix + "Task display areas in top down Z order:"); forAllTaskDisplayAreas(taskDisplayArea -> {