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

Commit 4fa449f9 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "WM: Unify windows and activities proto dumps (88/n)"

parents 7bf70c97 f342f064
Loading
Loading
Loading
Loading
+2 −83
Original line number Diff line number Diff line
@@ -55,87 +55,8 @@ message ActivityManagerServiceProto {
message ActivityManagerServiceDumpActivitiesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ActivityStackSupervisorProto activity_stack_supervisor = 1;
}

message ActivityStackSupervisorProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true];
    repeated ActivityDisplayProto displays = 2;
    optional KeyguardControllerProto keyguard_controller = 3;
    // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances
    // can be obtained from top display and these fields can be removed.
    optional int32 focused_stack_id = 4;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 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.
    optional bool is_home_recents_component = 6;
    repeated .com.android.server.wm.IdentifierProto pending_activities = 7;
    optional .com.android.server.wm.RootWindowContainerProto root_window_container = 8;
}

/* represents ActivityStackSupervisor.ActivityDisplay */
message ActivityDisplayProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    // To be removed soon.
    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true];
    optional int32 id = 2;
    repeated ActivityStackProto stacks = 3;
    optional int32 focused_stack_id = 4;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 5;
    optional bool single_task_instance = 6;
    optional .com.android.server.wm.DisplayContentProto display = 7;
}

message ActivityStackProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    // To be removed soon.
    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true];
    optional int32 id = 2;
    repeated TaskRecordProto tasks = 3;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 4;
    optional int32 display_id = 5;
    optional bool fullscreen = 6;
    optional .android.graphics.RectProto bounds = 7;
    optional .com.android.server.wm.StackProto stack = 8;
}

message TaskRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    // To be removed soon.
    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true];
    optional int32 id = 2;
    repeated .com.android.server.wm.ActivityRecordProto activities = 3;
    optional int32 stack_id = 4;
    optional .android.graphics.RectProto last_non_fullscreen_bounds = 5;
    optional string real_activity = 6;
    optional string orig_activity = 7;
    optional int32 activity_type = 8;
    optional int32 resize_mode = 9;
    optional bool fullscreen = 10;
    optional .android.graphics.RectProto bounds = 11;
    optional int32 min_width = 12;
    optional int32 min_height = 13;
    optional .com.android.server.wm.TaskProto task = 14;
}

message KeyguardControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool keyguard_showing = 1;
    repeated KeyguardOccludedProto keyguard_occluded_states= 2;
    optional bool aod_showing = 3;
}

message KeyguardOccludedProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 display_id = 1;
    optional bool keyguard_occluded = 2;
    reserved 1; // activity_stack_supervisor
    optional .com.android.server.wm.RootWindowContainerProto root_window_container = 2;
}

// "dumpsys activity --proto broadcasts"
@@ -669,8 +590,6 @@ message ActivityManagerServiceDumpProcessesProto {
    optional int64 previous_proc_visible_time_ms = 17;
    optional ProcessRecordProto heavy_weight_proc = 18;
    optional .android.content.ConfigurationProto global_configuration = 19;
    // ActivityStackSupervisorProto dumps these values as well, still here?
    // repeated ActivityDisplayProto displays = 20;

    optional bool config_will_change = 21;

+57 −31
Original line number Diff line number Diff line
@@ -54,8 +54,14 @@ message RootWindowContainerProto {

    optional WindowContainerProto window_container = 1;
    repeated DisplayContentProto displays = 2;
    reserved 3; // IdentifierProto windows
    /* window references in top down z order */
    repeated IdentifierProto windows = 3;
    repeated WindowStateProto windows = 4;
    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.
    optional bool is_home_recents_component = 6;
    repeated IdentifierProto pending_activities = 7;
}

message BarControllerProto {
@@ -94,6 +100,21 @@ message KeyguardServiceDelegateProto {
    optional InteractiveState interactive_state = 5;
}

message KeyguardControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool keyguard_showing = 1;
    repeated KeyguardOccludedProto keyguard_occluded_states = 2;
    optional bool aod_showing = 3;
}

message KeyguardOccludedProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 display_id = 1;
    optional bool keyguard_occluded = 2;
}

/* represents PhoneWindowManager */
message WindowManagerPolicyProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
@@ -145,7 +166,7 @@ message DisplayContentProto {

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    repeated StackProto stacks = 3;
    reserved 3; // stacks
    optional DockedStackDividerControllerProto docked_stack_divider_controller = 4;
    // Will be removed soon.
    optional PinnedStackControllerProto pinned_stack_controller = 5 [deprecated=true];
@@ -166,6 +187,12 @@ message DisplayContentProto {
    repeated IdentifierProto changing_apps = 19;
    repeated WindowTokenProto overlay_windows = 20;
    optional DisplayAreaProto root_display_area = 21;


    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;
}

/* represents DisplayArea object */
@@ -191,7 +218,6 @@ message DisplayAreaChildProto {
    repeated string unknown = 3;
}


/* represents DisplayFrames */
message DisplayFramesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
@@ -214,39 +240,41 @@ message PinnedStackControllerProto {
    optional .android.graphics.RectProto movement_bounds = 2 [deprecated=true];
}

/* represents TaskStack */
message StackProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    repeated TaskProto tasks = 3;
    optional bool fills_parent = 4;
    optional .android.graphics.RectProto bounds = 5;
    optional bool animation_background_surface_is_dimming = 6 [deprecated=true];
    optional bool defer_removal = 7;
    optional float minimize_amount = 8;
    optional bool adjusted_for_ime = 9;
    optional float adjust_ime_amount = 10;
    optional float adjust_divider_amount = 11;
    optional .android.graphics.RectProto adjusted_bounds = 12;
    optional bool animating_bounds = 13;
}

/* represents Task */
message TaskProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    repeated ActivityRecordProto activity = 3;
    reserved 3; // activity
    optional bool fills_parent = 4;
    optional .android.graphics.RectProto bounds = 5;
    optional .android.graphics.RectProto displayed_bounds = 6;
    // Will be removed soon.
    optional bool defer_removal = 7 [deprecated=true];
    optional bool defer_removal = 7;
    optional int32 surface_width = 8;
    optional int32 surface_height = 9;

    repeated TaskProto tasks = 10;
    repeated ActivityRecordProto activities = 11;

    optional .com.android.server.wm.IdentifierProto resumed_activity = 12;
    optional string real_activity = 13;
    optional string orig_activity = 14;

    optional int32 display_id = 15;
    optional int32 root_task_id = 16;
    optional int32 activity_type = 17;
    optional int32 resize_mode = 18;
    optional int32 min_width = 19;
    optional int32 min_height = 20;

    optional .android.graphics.RectProto adjusted_bounds = 21;
    optional .android.graphics.RectProto last_non_fullscreen_bounds = 22;
    optional bool adjusted_for_ime = 23;
    optional float adjust_ime_amount = 24;
    optional float adjust_divider_amount = 25;
    optional bool animating_bounds = 26;
    optional float minimize_amount = 27;
}

/* represents ActivityRecordProto */
@@ -271,17 +299,15 @@ message ActivityRecordProto {
    optional int32 num_drawn_windows = 15;
    optional bool all_drawn = 16;
    optional bool last_all_drawn = 17;
    // Will be removed soon
    optional bool removed = 18 [deprecated=true];
    reserved 18; // removed
    optional IdentifierProto starting_window = 19;
    optional bool starting_displayed = 20;
    optional bool starting_moved = 21;
    optional bool starting_moved = 201;
    optional bool visible_set_from_transferred_starting_window = 22;
    repeated .android.graphics.RectProto frozen_bounds = 23;
    optional bool visible = 24;
    // To be removed soon.
    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 25 [deprecated=true];
    optional .com.android.server.wm.IdentifierProto identifier = 26;
    reserved 25; // configuration_container
    optional IdentifierProto identifier = 26;
    optional string state = 27;
    optional bool front_of_task = 28;
    optional int32 proc_id = 29;
+1 −1
Original line number Diff line number Diff line
@@ -1212,7 +1212,7 @@ class ActivityMetricsLogger {
        final ProtoOutputStream protoOutputStream =
                new ProtoOutputStream(LAUNCH_OBSERVER_ACTIVITY_RECORD_PROTO_CHUNK_SIZE);
        // Write this data out as the top-most ActivityRecordProto (i.e. it is not a sub-object).
        record.dumpDebug(protoOutputStream);
        record.dumpDebug(protoOutputStream, WindowTraceLogLevel.ALL);
        final byte[] bytes = protoOutputStream.getBytes();

        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+7 −46
Original line number Diff line number Diff line
@@ -7506,17 +7506,19 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     * Write all fields to an {@code ActivityRecordProto}. This assumes the
     * {@code ActivityRecordProto} is the outer-most proto data.
     */
    void dumpDebug(ProtoOutputStream proto) {
    void dumpDebug(ProtoOutputStream proto, @WindowTraceLogLevel int logLevel) {
        writeNameToProto(proto, NAME);
        super.dumpDebug(proto, WINDOW_TOKEN, WindowTraceLogLevel.ALL);
        super.dumpDebug(proto, WINDOW_TOKEN, logLevel);
        proto.write(LAST_SURFACE_SHOWING, mLastSurfaceShowing);
        proto.write(IS_WAITING_FOR_TRANSITION_START, isWaitingForTransitionStart());
        proto.write(IS_ANIMATING, isAnimating());
        proto.write(IS_ANIMATING, isAnimating(PARENTS));
        if (mThumbnail != null){
            mThumbnail.dumpDebug(proto, THUMBNAIL);
        }
        proto.write(FILLS_PARENT, mOccludesParent);
        proto.write(APP_STOPPED, mAppStopped);
        proto.write(TRANSLUCENT, !occludesParent());
        proto.write(VISIBLE, mVisible);
        proto.write(VISIBLE_REQUESTED, mVisibleRequested);
        proto.write(CLIENT_VISIBLE, mClientVisible);
        proto.write(DEFER_HIDING_CLIENT, mDeferHidingClient);
@@ -7539,24 +7541,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

        writeIdentifierToProto(proto, IDENTIFIER);
        proto.write(STATE, mState.toString());
        proto.write(VISIBLE_REQUESTED, mVisibleRequested);
        proto.write(FRONT_OF_TASK, isRootOfTask());
        if (hasProcess()) {
            proto.write(PROC_ID, app.getPid());
        }
        proto.write(TRANSLUCENT, !occludesParent());
        proto.write(VISIBLE, mVisible);
    }

    public void dumpDebug(ProtoOutputStream proto, long fieldId) {
        final long token = proto.start(fieldId);
        dumpDebug(proto);
        proto.end(token);
    }

    /**
     * Copied from old AppWindowToken.
     */
    @Override
    public void dumpDebug(ProtoOutputStream proto, long fieldId,
            @WindowTraceLogLevel int logLevel) {
@@ -7566,36 +7556,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }

        final long token = proto.start(fieldId);
        writeNameToProto(proto, NAME);
        super.dumpDebug(proto, WINDOW_TOKEN, logLevel);
        proto.write(LAST_SURFACE_SHOWING, mLastSurfaceShowing);
        proto.write(IS_WAITING_FOR_TRANSITION_START, isWaitingForTransitionStart());
        proto.write(IS_ANIMATING, isAnimating(PARENTS));
        if (mThumbnail != null){
            mThumbnail.dumpDebug(proto, THUMBNAIL);
        }
        proto.write(FILLS_PARENT, mOccludesParent);
        proto.write(APP_STOPPED, mAppStopped);
        proto.write(VISIBLE_REQUESTED, mVisibleRequested);
        proto.write(CLIENT_VISIBLE, mClientVisible);
        proto.write(DEFER_HIDING_CLIENT, mDeferHidingClient);
        proto.write(REPORTED_DRAWN, reportedDrawn);
        proto.write(REPORTED_VISIBLE, reportedVisible);
        proto.write(NUM_INTERESTING_WINDOWS, mNumInterestingWindows);
        proto.write(NUM_DRAWN_WINDOWS, mNumDrawnWindows);
        proto.write(ALL_DRAWN, allDrawn);
        proto.write(LAST_ALL_DRAWN, mLastAllDrawn);
        if (startingWindow != null) {
            startingWindow.writeIdentifierToProto(proto, STARTING_WINDOW);
        }
        proto.write(STARTING_DISPLAYED, startingDisplayed);
        proto.write(STARTING_MOVED, startingMoved);
        proto.write(VISIBLE_SET_FROM_TRANSFERRED_STARTING_WINDOW,
                mVisibleSetFromTransferredStartingWindow);
        for (Rect bounds : mFrozenBounds) {
            bounds.dumpDebug(proto, FROZEN_BOUNDS);
        }
        proto.write(VISIBLE, mVisible);
        dumpDebug(proto, logLevel);
        proto.end(token);
    }

+69 −40
Original line number Diff line number Diff line
@@ -60,10 +60,18 @@ import static android.view.WindowManager.TRANSIT_TASK_OPEN_BEHIND;
import static android.view.WindowManager.TRANSIT_TASK_TO_BACK;
import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;

import static com.android.server.am.ActivityStackProto.DISPLAY_ID;
import static com.android.server.am.ActivityStackProto.FULLSCREEN;
import static com.android.server.am.ActivityStackProto.RESUMED_ACTIVITY;
import static com.android.server.am.ActivityStackProto.STACK;
import static com.android.server.wm.TaskProto.ACTIVITIES;
import static com.android.server.wm.TaskProto.ACTIVITY_TYPE;
import static com.android.server.wm.TaskProto.BOUNDS;
import static com.android.server.wm.TaskProto.DISPLAYED_BOUNDS;
import static com.android.server.wm.TaskProto.DISPLAY_ID;
import static com.android.server.wm.TaskProto.LAST_NON_FULLSCREEN_BOUNDS;
import static com.android.server.wm.TaskProto.MIN_HEIGHT;
import static com.android.server.wm.TaskProto.MIN_WIDTH;
import static com.android.server.wm.TaskProto.ORIG_ACTIVITY;
import static com.android.server.wm.TaskProto.REAL_ACTIVITY;
import static com.android.server.wm.TaskProto.RESIZE_MODE;
import static com.android.server.wm.TaskProto.RESUMED_ACTIVITY;
import static com.android.server.wm.ActivityStack.ActivityState.PAUSED;
import static com.android.server.wm.ActivityStack.ActivityState.PAUSING;
import static com.android.server.wm.ActivityStack.ActivityState.RESUMED;
@@ -107,15 +115,19 @@ import static com.android.server.wm.BoundsAnimationController.NO_PIP_MODE_CHANGE
import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_END;
import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_START;
import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
import static com.android.server.wm.StackProto.ADJUSTED_BOUNDS;
import static com.android.server.wm.StackProto.ADJUSTED_FOR_IME;
import static com.android.server.wm.StackProto.ADJUST_DIVIDER_AMOUNT;
import static com.android.server.wm.StackProto.ADJUST_IME_AMOUNT;
import static com.android.server.wm.StackProto.ANIMATING_BOUNDS;
import static com.android.server.wm.StackProto.DEFER_REMOVAL;
import static com.android.server.wm.StackProto.FILLS_PARENT;
import static com.android.server.wm.StackProto.MINIMIZE_AMOUNT;
import static com.android.server.wm.StackProto.WINDOW_CONTAINER;
import static com.android.server.wm.TaskProto.ADJUSTED_BOUNDS;
import static com.android.server.wm.TaskProto.ADJUSTED_FOR_IME;
import static com.android.server.wm.TaskProto.ADJUST_DIVIDER_AMOUNT;
import static com.android.server.wm.TaskProto.ADJUST_IME_AMOUNT;
import static com.android.server.wm.TaskProto.ANIMATING_BOUNDS;
import static com.android.server.wm.TaskProto.DEFER_REMOVAL;
import static com.android.server.wm.TaskProto.FILLS_PARENT;
import static com.android.server.wm.TaskProto.MINIMIZE_AMOUNT;
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;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
@@ -4925,49 +4937,66 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
    @Override
    public void dumpDebug(ProtoOutputStream proto, long fieldId,
            @WindowTraceLogLevel int logLevel) {
        if (logLevel == WindowTraceLogLevel.CRITICAL && !isVisible()) {
            return;
        }

        final long token = proto.start(fieldId);
        dumpDebugInnerStackOnly(proto, STACK, logLevel);
        proto.write(com.android.server.am.ActivityStackProto.ID, getRootTaskId());
        super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);

        proto.write(TaskProto.ID, mTaskId);
        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);
            }
        }

        forAllTasks((t) -> {
            t.dumpDebugInner(proto, com.android.server.am.ActivityStackProto.TASKS, logLevel);
        }, true /* traverseTopToBottom */, this);
        if (mResumedActivity != null) {
            mResumedActivity.writeIdentifierToProto(proto, RESUMED_ACTIVITY);
        }
        proto.write(DISPLAY_ID, getDisplayId());
        if (!matchParentBounds()) {
            final Rect bounds = getRequestedOverrideBounds();
            bounds.dumpDebug(proto, com.android.server.am.ActivityStackProto.BOUNDS);
        if (realActivity != null) {
            proto.write(REAL_ACTIVITY, realActivity.flattenToShortString());
        }

        // TODO: Remove, no longer needed with windowingMode.
        proto.write(FULLSCREEN, matchParentBounds());
        proto.end(token);
        if (origActivity != null) {
            proto.write(ORIG_ACTIVITY, origActivity.flattenToShortString());
        }
        proto.write(ACTIVITY_TYPE, getActivityType());
        proto.write(RESIZE_MODE, mResizeMode);
        proto.write(MIN_WIDTH, mMinWidth);
        proto.write(MIN_HEIGHT, mMinHeight);

    // TODO(proto-merge): Remove once protos for ActivityStack and TaskStack are merged.
    void dumpDebugInnerStackOnly(ProtoOutputStream proto, long fieldId,
            @WindowTraceLogLevel int logLevel) {
        if (logLevel == WindowTraceLogLevel.CRITICAL && !isVisible()) {
            return;
        proto.write(FILLS_PARENT, matchParentBounds());

        if (!matchParentBounds()) {
            final Rect bounds = getRequestedOverrideBounds();
            bounds.dumpDebug(proto, BOUNDS);
        }
        getOverrideDisplayedBounds().dumpDebug(proto, DISPLAYED_BOUNDS);
        mAdjustedBounds.dumpDebug(proto, ADJUSTED_BOUNDS);
        if (mLastNonFullscreenBounds != null) {
            mLastNonFullscreenBounds.dumpDebug(proto, LAST_NON_FULLSCREEN_BOUNDS);
        }

        final long token = proto.start(fieldId);
        super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
        proto.write(StackProto.ID, getRootTaskId());
        forAllTasks((t) -> {
            t.dumpDebugInnerTaskOnly(proto, StackProto.TASKS, logLevel);
        }, true /* traverseTopToBottom */, this);
        proto.write(FILLS_PARENT, matchParentBounds());
        getRawBounds().dumpDebug(proto, StackProto.BOUNDS);
        proto.write(DEFER_REMOVAL, mDeferRemoval);
        proto.write(MINIMIZE_AMOUNT, mMinimizeAmount);
        proto.write(ADJUSTED_FOR_IME, mAdjustedForIme);
        proto.write(ADJUST_IME_AMOUNT, mAdjustImeAmount);
        proto.write(ADJUST_DIVIDER_AMOUNT, mAdjustDividerAmount);
        mAdjustedBounds.dumpDebug(proto, ADJUSTED_BOUNDS);
        proto.write(ANIMATING_BOUNDS, mBoundsAnimating);

        if (mSurfaceControl != null) {
            proto.write(SURFACE_WIDTH, mSurfaceControl.getWidth());
            proto.write(SURFACE_HEIGHT, mSurfaceControl.getHeight());
        }

        proto.end(token);
    }
}
Loading