Merge "Support DisplayAreas in protos" into rvc-dev am: ae062e9268 am: 174c1acad0 am: 765434716e

Change-Id: Ia2fad9a54f5bf3c2c4d284a5fc9c0c80ecbbd327
This commit is contained in:
Automerger Merge Worker
2020-03-10 15:16:30 +00:00
10 changed files with 90 additions and 68 deletions

View File

@@ -53,10 +53,10 @@ message RootWindowContainerProto {
option (.android.msg_privacy).dest = DEST_AUTOMATIC;
optional WindowContainerProto window_container = 1;
repeated DisplayContentProto displays = 2;
repeated DisplayContentProto displays = 2 [deprecated=true];
reserved 3; // IdentifierProto windows
/* window references in top down z order */
repeated WindowStateProto windows = 4;
repeated WindowStateProto windows = 4 [deprecated=true];
optional KeyguardControllerProto keyguard_controller = 5;
// Whether or not the home activity is the recents activity. This is needed for the CTS tests to
// know what activity types to check for when invoking splitscreen multi-window.
@@ -192,7 +192,8 @@ message DisplayContentProto {
optional bool single_task_instance = 22;
optional int32 focused_root_task_id = 23;
optional .com.android.server.wm.IdentifierProto resumed_activity = 24;
repeated TaskProto tasks = 25;
repeated TaskProto tasks = 25 [deprecated=true];
optional bool display_ready = 26;
}
/* represents DisplayArea object */
@@ -201,7 +202,7 @@ message DisplayAreaProto {
optional WindowContainerProto window_container = 1;
optional string name = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
repeated DisplayAreaChildProto children = 3;
repeated DisplayAreaChildProto children = 3 [deprecated=true];
}
/* represents a generic child of a DisplayArea */
@@ -254,8 +255,8 @@ message TaskProto {
optional int32 surface_width = 8;
optional int32 surface_height = 9;
repeated TaskProto tasks = 10;
repeated ActivityRecordProto activities = 11;
repeated TaskProto tasks = 10 [deprecated=true];
repeated ActivityRecordProto activities = 11 [deprecated=true];
optional .com.android.server.wm.IdentifierProto resumed_activity = 12;
optional string real_activity = 13;
@@ -321,7 +322,7 @@ message WindowTokenProto {
optional WindowContainerProto window_container = 1;
optional int32 hash_code = 2;
repeated WindowStateProto windows = 3;
repeated WindowStateProto windows = 3 [deprecated=true];
optional bool waiting_to_show = 5;
optional bool paused = 6;
}
@@ -346,7 +347,7 @@ message WindowStateProto {
optional .android.graphics.RectProto surface_insets = 12;
optional WindowStateAnimatorProto animator = 13;
optional bool animating_exit = 14;
repeated WindowStateProto child_windows = 15;
repeated WindowStateProto child_windows = 15 [deprecated=true];
optional .android.graphics.RectProto surface_position = 16;
optional int32 requested_width = 18;
optional int32 requested_height = 19;
@@ -426,6 +427,32 @@ message WindowContainerProto {
optional int32 orientation = 2;
optional bool visible = 3;
optional SurfaceAnimatorProto surface_animator = 4;
repeated WindowContainerChildProto children = 5;
}
/* represents a generic child of a WindowContainer */
message WindowContainerChildProto {
option (.android.msg_privacy).dest = DEST_AUTOMATIC;
/* A window container can have multiple children of different types stored as
* a WindowContainerChildProto but each instance of WindowContainerChildProto
* can only contain a single type.
*/
/* We do not know the derived typ and the class is dumped
* as a WindowContainer */
optional WindowContainerProto window_container = 2;
/* represents a DisplayContent child */
optional DisplayContentProto display_content = 3;
/* represents a DisplayArea child */
optional DisplayAreaProto display_area = 4;
/* represents a Task child */
optional TaskProto task = 5;
/* represents an ActivityRecord child */
optional ActivityRecordProto activity = 6;
/* represents a WindowToken child */
optional WindowTokenProto window_token = 7;
/* represents a WindowState child */
optional WindowStateProto window = 8;
}
/* represents ConfigurationContainer */

View File

@@ -200,6 +200,7 @@ import static com.android.server.wm.TaskPersister.IMAGE_EXTENSION;
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
import static com.android.server.wm.WindowContainerChildProto.ACTIVITY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW_VERBOSE;
@@ -7449,6 +7450,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
}
@Override
long getProtoFieldId() {
return ACTIVITY;
}
@Override
public void dumpDebug(ProtoOutputStream proto, long fieldId,
@WindowTraceLogLevel int logLevel) {

View File

@@ -90,7 +90,6 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLAS
import static com.android.server.wm.ActivityTaskManagerService.H.FIRST_ACTIVITY_STACK_MSG;
import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_FREE_RESIZE;
import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_WINDOWING_MODE_RESIZE;
import static com.android.server.wm.TaskProto.ACTIVITIES;
import static com.android.server.wm.TaskProto.ACTIVITY_TYPE;
import static com.android.server.wm.TaskProto.ANIMATING_BOUNDS;
import static com.android.server.wm.TaskProto.BOUNDS;
@@ -109,7 +108,6 @@ import static com.android.server.wm.TaskProto.RESUMED_ACTIVITY;
import static com.android.server.wm.TaskProto.ROOT_TASK_ID;
import static com.android.server.wm.TaskProto.SURFACE_HEIGHT;
import static com.android.server.wm.TaskProto.SURFACE_WIDTH;
import static com.android.server.wm.TaskProto.TASKS;
import static com.android.server.wm.TaskProto.WINDOW_CONTAINER;
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
@@ -3918,17 +3916,6 @@ class ActivityStack extends Task {
proto.write(DISPLAY_ID, getDisplayId());
proto.write(ROOT_TASK_ID, getRootTaskId());
for (int i = mChildren.size() - 1; i >= 0; --i) {
final WindowContainer child = mChildren.get(i);
if (child instanceof Task) {
child.dumpDebug(proto, TASKS, logLevel);
} else if (child instanceof ActivityRecord) {
child.dumpDebug(proto, ACTIVITIES, logLevel);
} else {
throw new IllegalStateException("Unknown child type: " + child);
}
}
if (mResumedActivity != null) {
mResumedActivity.writeIdentifierToProto(proto, RESUMED_ACTIVITY);
}

View File

@@ -23,13 +23,10 @@ import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE;
import static android.view.WindowManagerPolicyConstants.APPLICATION_LAYER;
import static com.android.internal.util.Preconditions.checkState;
import static com.android.server.wm.DisplayAreaChildProto.DISPLAY_AREA;
import static com.android.server.wm.DisplayAreaChildProto.UNKNOWN;
import static com.android.server.wm.DisplayAreaChildProto.WINDOW;
import static com.android.server.wm.DisplayAreaProto.CHILDREN;
import static com.android.server.wm.DisplayAreaProto.NAME;
import static com.android.server.wm.DisplayAreaProto.WINDOW_CONTAINER;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ORIENTATION;
import static com.android.server.wm.WindowContainerChildProto.DISPLAY_AREA;
import android.graphics.Rect;
import android.util.proto.ProtoOutputStream;
@@ -111,24 +108,14 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> {
final long token = proto.start(fieldId);
super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
proto.write(NAME, mName);
for (int i = 0; i < getChildCount(); i++) {
final long childToken = proto.start(CHILDREN);
final T child = getChildAt(i);
if (child instanceof ActivityStack) {
// TODO(display-area): Dump stacks & tasks here, instead of in DisplayContent's
// dumpDebug. For now, skip them here to avoid dumping them as UNKNOWN.
} else if (child instanceof WindowToken) {
((WindowToken) child).dumpDebug(proto, WINDOW, logLevel);
} else if (child instanceof DisplayArea) {
child.dumpDebug(proto, DISPLAY_AREA, logLevel);
} else {
proto.write(UNKNOWN, child.getClass().getSimpleName());
}
proto.end(childToken);
}
proto.end(token);
}
@Override
long getProtoFieldId() {
return DISPLAY_AREA;
}
/**
* DisplayArea that contains WindowTokens, and orders them according to their type.
*/

View File

@@ -94,6 +94,7 @@ import static com.android.server.wm.DisplayContentProto.APP_TRANSITION;
import static com.android.server.wm.DisplayContentProto.CLOSING_APPS;
import static com.android.server.wm.DisplayContentProto.DISPLAY_FRAMES;
import static com.android.server.wm.DisplayContentProto.DISPLAY_INFO;
import static com.android.server.wm.DisplayContentProto.DISPLAY_READY;
import static com.android.server.wm.DisplayContentProto.DPI;
import static com.android.server.wm.DisplayContentProto.FOCUSED_APP;
import static com.android.server.wm.DisplayContentProto.FOCUSED_ROOT_TASK_ID;
@@ -105,7 +106,6 @@ import static com.android.server.wm.DisplayContentProto.ROOT_DISPLAY_AREA;
import static com.android.server.wm.DisplayContentProto.ROTATION;
import static com.android.server.wm.DisplayContentProto.SCREEN_ROTATION_ANIMATION;
import static com.android.server.wm.DisplayContentProto.SINGLE_TASK_INSTANCE;
import static com.android.server.wm.DisplayContentProto.TASKS;
import static com.android.server.wm.DisplayContentProto.WINDOW_CONTAINER;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS;
@@ -117,6 +117,7 @@ import static com.android.server.wm.ProtoLogGroup.WM_SHOW_TRANSACTIONS;
import static com.android.server.wm.RootWindowContainer.TAG_STATES;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
import static com.android.server.wm.WindowContainerChildProto.DISPLAY_CONTENT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT_METHOD;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
@@ -2837,10 +2838,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
proto.write(ID, mDisplayId);
mRootDisplayArea.dumpDebug(proto, ROOT_DISPLAY_AREA, logLevel);
for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
final ActivityStack stack = mTaskContainers.getChildAt(i);
stack.dumpDebug(proto, TASKS, logLevel);
}
for (int i = mOverlayContainers.getChildCount() - 1; i >= 0; --i) {
final WindowToken windowToken = mOverlayContainers.getChildAt(i);
windowToken.dumpDebug(proto, OVERLAY_WINDOWS, logLevel);
@@ -2875,10 +2872,16 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
} else {
proto.write(FOCUSED_ROOT_TASK_ID, INVALID_TASK_ID);
}
proto.write(DISPLAY_READY, isReady());
proto.end(token);
}
@Override
long getProtoFieldId() {
return DISPLAY_CONTENT;
}
@Override
public void dump(PrintWriter pw, String prefix, boolean dumpAll) {
super.dump(pw, prefix, dumpAll);

View File

@@ -66,11 +66,9 @@ import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_KEEP_SCREEN_ON;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ORIENTATION;
import static com.android.server.wm.ProtoLogGroup.WM_SHOW_SURFACE_ALLOC;
import static com.android.server.wm.ProtoLogGroup.WM_SHOW_TRANSACTIONS;
import static com.android.server.wm.RootWindowContainerProto.DISPLAYS;
import static com.android.server.wm.RootWindowContainerProto.IS_HOME_RECENTS_COMPONENT;
import static com.android.server.wm.RootWindowContainerProto.KEYGUARD_CONTROLLER;
import static com.android.server.wm.RootWindowContainerProto.PENDING_ACTIVITIES;
import static com.android.server.wm.RootWindowContainerProto.WINDOWS;
import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER;
import static com.android.server.wm.Task.REPARENT_LEAVE_STACK_IN_PLACE;
import static com.android.server.wm.Task.REPARENT_MOVE_STACK_TO_FRONT;
@@ -1278,18 +1276,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
final long token = proto.start(fieldId);
super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
if (mWmService.mDisplayReady) {
final int count = mChildren.size();
for (int i = 0; i < count; ++i) {
final DisplayContent displayContent = mChildren.get(i);
displayContent.dumpDebug(proto, DISPLAYS, logLevel);
}
}
if (logLevel == WindowTraceLogLevel.ALL) {
forAllWindows((w) -> {
w.dumpDebug(proto, WINDOWS, logLevel);
}, true);
}
mStackSupervisor.getKeyguardController().dumpDebug(proto, KEYGUARD_CONTROLLER);
proto.write(IS_HOME_RECENTS_COMPONENT,

View File

@@ -85,6 +85,7 @@ import static com.android.server.wm.IdentifierProto.USER_ID;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
import static com.android.server.wm.WindowContainerChildProto.TASK;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_MOVEMENT;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
@@ -4121,4 +4122,9 @@ class Task extends WindowContainer<WindowContainer> {
SurfaceControl.Transaction getMainWindowSizeChangeTransaction() {
return mMainWindowSizeChangeTransaction;
}
@Override
long getProtoFieldId() {
return TASK;
}
}

View File

@@ -40,6 +40,7 @@ import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITIO
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
import static com.android.server.wm.WindowContainerChildProto.WINDOW_CONTAINER;
import static com.android.server.wm.WindowContainerProto.CONFIGURATION_CONTAINER;
import static com.android.server.wm.WindowContainerProto.ORIENTATION;
import static com.android.server.wm.WindowContainerProto.SURFACE_ANIMATOR;
@@ -1819,9 +1820,25 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
if (mSurfaceAnimator.isAnimating()) {
mSurfaceAnimator.dumpDebug(proto, SURFACE_ANIMATOR);
}
// add children to proto
for (int i = 0; i < getChildCount(); i++) {
final long childToken = proto.start(WindowContainerProto.CHILDREN);
final E child = getChildAt(i);
child.dumpDebug(proto, child.getProtoFieldId(), logLevel);
proto.end(childToken);
}
proto.end(token);
}
/**
* @return a proto field id to identify where to add the derived class to the generic window
* container proto.
*/
long getProtoFieldId() {
return WINDOW_CONTAINER;
}
private ForAllWindowsConsumerWrapper obtainConsumerWrapper(Consumer<WindowState> consumer) {
ForAllWindowsConsumerWrapper wrapper = mConsumerWrapperPool.acquire();
if (wrapper == null) {

View File

@@ -118,6 +118,7 @@ import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_STARTING_WINDOW;
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
import static com.android.server.wm.WindowContainerChildProto.WINDOW;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_CONFIGURATION;
@@ -146,7 +147,6 @@ import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW;
import static com.android.server.wm.WindowStateProto.ANIMATING_EXIT;
import static com.android.server.wm.WindowStateProto.ANIMATOR;
import static com.android.server.wm.WindowStateProto.ATTRIBUTES;
import static com.android.server.wm.WindowStateProto.CHILD_WINDOWS;
import static com.android.server.wm.WindowStateProto.DESTROYING;
import static com.android.server.wm.WindowStateProto.DISPLAY_ID;
import static com.android.server.wm.WindowStateProto.FINISHED_SEAMLESS_ROTATION_FRAME;
@@ -3761,9 +3761,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
mSurfacePosition.dumpDebug(proto, SURFACE_POSITION);
mWinAnimator.dumpDebug(proto, ANIMATOR);
proto.write(ANIMATING_EXIT, mAnimatingExit);
for (int i = 0; i < mChildren.size(); i++) {
mChildren.get(i).dumpDebug(proto, CHILD_WINDOWS, logLevel);
}
proto.write(REQUESTED_WIDTH, mRequestedWidth);
proto.write(REQUESTED_HEIGHT, mRequestedHeight);
proto.write(VIEW_VISIBILITY, mViewVisibility);
@@ -3781,6 +3778,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
proto.end(token);
}
@Override
long getProtoFieldId() {
return WINDOW;
}
@Override
public void writeIdentifierToProto(ProtoOutputStream proto, long fieldId) {
final long token = proto.start(fieldId);

View File

@@ -28,13 +28,13 @@ import static com.android.server.wm.ProtoLogGroup.WM_ERROR;
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
import static com.android.server.wm.WindowContainerChildProto.WINDOW_TOKEN;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
import static com.android.server.wm.WindowTokenProto.HASH_CODE;
import static com.android.server.wm.WindowTokenProto.PAUSED;
import static com.android.server.wm.WindowTokenProto.WAITING_TO_SHOW;
import static com.android.server.wm.WindowTokenProto.WINDOWS;
import static com.android.server.wm.WindowTokenProto.WINDOW_CONTAINER;
import android.annotation.CallSuper;
@@ -541,15 +541,16 @@ class WindowToken extends WindowContainer<WindowState> {
final long token = proto.start(fieldId);
super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
proto.write(HASH_CODE, System.identityHashCode(this));
for (int i = 0; i < mChildren.size(); i++) {
final WindowState w = mChildren.get(i);
w.dumpDebug(proto, WINDOWS, logLevel);
}
proto.write(WAITING_TO_SHOW, waitingToShow);
proto.write(PAUSED, paused);
proto.end(token);
}
@Override
long getProtoFieldId() {
return WINDOW_TOKEN;
}
void dump(PrintWriter pw, String prefix, boolean dumpAll) {
super.dump(pw, prefix, dumpAll);
pw.print(prefix); pw.print("windows="); pw.println(mChildren);