Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9dfb386f authored by Vishnu Nair's avatar Vishnu Nair
Browse files

Support DisplayAreas in protos

Dump WindowContainers and their children without hard coding the heirarchy.

Bug: 149672519
Test: open wm trace in winscope

Change-Id: If5a7bd88728054e50aaacee138d9ae78513e94fe
parent b7135876
Loading
Loading
Loading
Loading
+35 −8
Original line number Diff line number Diff line
@@ -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 */
+6 −0
Original line number Diff line number Diff line
@@ -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) {
+0 −13
Original line number Diff line number Diff line
@@ -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);
        }
+6 −19
Original line number Diff line number Diff line
@@ -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.
     */
+8 −5
Original line number Diff line number Diff line
@@ -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);
Loading