From 3e469aec5a71daed941a98d0c72ebff489fcdc38 Mon Sep 17 00:00:00 2001 From: Issei Suzuki Date: Mon, 25 Oct 2021 16:36:08 +0200 Subject: [PATCH] Add display sleep token information to winscope dump. Change-Id: Ia25854feed3bb6b037d4510a6b5000d906d27313 Merged-In: Ia25854feed3bb6b037d4510a6b5000d906d27313 Bug: 198593156 Test: manual. capture winscope dump and see it. --- core/proto/android/server/windowmanagerservice.proto | 3 ++- data/etc/services.core.protolog.json | 12 ++++++++++++ .../java/com/android/server/wm/DisplayContent.java | 7 +++++++ .../com/android/server/wm/RootWindowContainer.java | 7 +++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto index 061ecc8f74884..c750eadf845ac 100644 --- a/core/proto/android/server/windowmanagerservice.proto +++ b/core/proto/android/server/windowmanagerservice.proto @@ -202,7 +202,6 @@ message DisplayContentProto { optional .com.android.server.wm.IdentifierProto resumed_activity = 24; repeated TaskProto tasks = 25 [deprecated=true]; optional bool display_ready = 26; - optional WindowStateProto input_method_target = 27; optional WindowStateProto input_method_input_target = 28; optional WindowStateProto input_method_control_target = 29; @@ -212,6 +211,8 @@ message DisplayContentProto { optional DisplayRotationProto display_rotation = 33; optional int32 ime_policy = 34; + optional bool is_sleeping = 36; + repeated string sleep_tokens = 37; } /* represents DisplayArea object */ diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index 6e92755be98e2..8b3780590d44a 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -1561,6 +1561,12 @@ "group": "WM_DEBUG_ORIENTATION", "at": "com\/android\/server\/wm\/DisplayRotation.java" }, + "-436553282": { + "message": "Remove sleep token: tag=%s, displayId=%d", + "level": "DEBUG", + "group": "WM_DEBUG_STATES", + "at": "com\/android\/server\/wm\/RootWindowContainer.java" + }, "-415865166": { "message": "findFocusedWindow: Found new focus @ %s", "level": "VERBOSE", @@ -1669,6 +1675,12 @@ "group": "WM_DEBUG_ADD_REMOVE", "at": "com\/android\/server\/wm\/WindowState.java" }, + "-317761482": { + "message": "Create sleep token: tag=%s, displayId=%d", + "level": "DEBUG", + "group": "WM_DEBUG_STATES", + "at": "com\/android\/server\/wm\/RootWindowContainer.java" + }, "-317194205": { "message": "clearLockedTasks: %s", "level": "INFO", diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 0de3fa3ad968c..3102199e9743f 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -115,10 +115,12 @@ import static com.android.server.wm.DisplayContentProto.IME_POLICY; import static com.android.server.wm.DisplayContentProto.INPUT_METHOD_CONTROL_TARGET; import static com.android.server.wm.DisplayContentProto.INPUT_METHOD_INPUT_TARGET; import static com.android.server.wm.DisplayContentProto.INPUT_METHOD_TARGET; +import static com.android.server.wm.DisplayContentProto.IS_SLEEPING; import static com.android.server.wm.DisplayContentProto.OPENING_APPS; import static com.android.server.wm.DisplayContentProto.RESUMED_ACTIVITY; import static com.android.server.wm.DisplayContentProto.ROOT_DISPLAY_AREA; import static com.android.server.wm.DisplayContentProto.SCREEN_ROTATION_ANIMATION; +import static com.android.server.wm.DisplayContentProto.SLEEP_TOKENS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; @@ -3293,6 +3295,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp proto.write(FOCUSED_ROOT_TASK_ID, INVALID_TASK_ID); } proto.write(DISPLAY_READY, isReady()); + proto.write(IS_SLEEPING, isSleeping()); + for (int i = 0; i < mAllSleepTokens.size(); ++i) { + mAllSleepTokens.get(i).writeTagToProto(proto, SLEEP_TOKENS); + } + if (mImeLayeringTarget != null) { mImeLayeringTarget.dumpDebug(proto, INPUT_METHOD_TARGET, logLevel); } diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index e3600e6563075..b1eca9d5d4e41 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2700,6 +2700,7 @@ class RootWindowContainer extends WindowContainer token = new SleepToken(tag, displayId); mSleepTokens.put(tokenKey, token); display.mAllSleepTokens.add(token); + ProtoLog.d(WM_DEBUG_STATES, "Create sleep token: tag=%s, displayId=%d", tag, displayId); } else { throw new RuntimeException("Create the same sleep token twice: " + token); } @@ -2718,6 +2719,8 @@ class RootWindowContainer extends WindowContainer return; } + ProtoLog.d(WM_DEBUG_STATES, "Remove sleep token: tag=%s, displayId=%d", token.mTag, + token.mDisplayId); display.mAllSleepTokens.remove(token); if (display.mAllSleepTokens.isEmpty()) { mService.updateSleepIfNeededLocked(); @@ -3729,6 +3732,10 @@ class RootWindowContainer extends WindowContainer return "{\"" + mTag + "\", display " + mDisplayId + ", acquire at " + TimeUtils.formatUptime(mAcquireTime) + "}"; } + + void writeTagToProto(ProtoOutputStream proto, long fieldId) { + proto.write(fieldId, mTag); + } } private class RankTaskLayersRunnable implements Runnable {