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

Commit a342e3c8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Unify RootActivityContainer and RootWindowContainer (80/n)"

parents a9ae0852 3ff72a8c
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -60,7 +60,7 @@ message ActivityManagerServiceDumpActivitiesProto {
message ActivityStackSupervisorProto {
message ActivityStackSupervisorProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;


    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true];
    repeated ActivityDisplayProto displays = 2;
    repeated ActivityDisplayProto displays = 2;
    optional KeyguardControllerProto keyguard_controller = 3;
    optional KeyguardControllerProto keyguard_controller = 3;
    // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances
    // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances
@@ -71,6 +71,7 @@ message ActivityStackSupervisorProto {
    // know what activity types to check for when invoking splitscreen multi-window.
    // know what activity types to check for when invoking splitscreen multi-window.
    optional bool is_home_recents_component = 6;
    optional bool is_home_recents_component = 6;
    repeated .com.android.server.wm.IdentifierProto pending_activities = 7;
    repeated .com.android.server.wm.IdentifierProto pending_activities = 7;
    optional .com.android.server.wm.RootWindowContainerProto root_window_container = 8;
}
}


/* represents ActivityStackSupervisor.ActivityDisplay */
/* represents ActivityStackSupervisor.ActivityDisplay */
+16 −7
Original line number Original line Diff line number Diff line
@@ -825,13 +825,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        mAppWarnings = createAppWarnings(mUiContext, mH, mUiHandler, systemDir);
        mAppWarnings = createAppWarnings(mUiContext, mH, mUiHandler, systemDir);
        mCompatModePackages = new CompatModePackages(this, systemDir, mH);
        mCompatModePackages = new CompatModePackages(this, systemDir, mH);
        mPendingIntentController = intentController;
        mPendingIntentController = intentController;

        mTempConfig.setToDefaults();
        mTempConfig.setLocales(LocaleList.getDefault());
        mConfigurationSeq = mTempConfig.seq = 1;
        mStackSupervisor = createStackSupervisor();
        mStackSupervisor = createStackSupervisor();
        mRootActivityContainer = new RootActivityContainer(this);
        mRootActivityContainer.onConfigurationChanged(mTempConfig);


        mTaskChangeNotificationController =
        mTaskChangeNotificationController =
                new TaskChangeNotificationController(mGlobalLock, mStackSupervisor, mH);
                new TaskChangeNotificationController(mGlobalLock, mStackSupervisor, mH);
@@ -868,6 +862,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    public void setWindowManager(WindowManagerService wm) {
    public void setWindowManager(WindowManagerService wm) {
        synchronized (mGlobalLock) {
        synchronized (mGlobalLock) {
            mWindowManager = wm;
            mWindowManager = wm;
            // TODO(merge-root): Remove cast
            mRootActivityContainer = (RootActivityContainer) wm.mRoot;
            mTempConfig.setToDefaults();
            mTempConfig.setLocales(LocaleList.getDefault());
            mConfigurationSeq = mTempConfig.seq = 1;
            mRootActivityContainer.onConfigurationChanged(mTempConfig);
            mLockTaskController.setWindowManager(wm);
            mLockTaskController.setWindowManager(wm);
            mStackSupervisor.setWindowManager(wm);
            mStackSupervisor.setWindowManager(wm);
            mRootActivityContainer.setWindowManager(wm);
            mRootActivityContainer.setWindowManager(wm);
@@ -5216,7 +5216,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
     * also corresponds to the merged configuration of the default display.
     * also corresponds to the merged configuration of the default display.
     */
     */
    Configuration getGlobalConfiguration() {
    Configuration getGlobalConfiguration() {
        return mRootActivityContainer.getConfiguration();
        // Return default configuration before mRootActivityContainer initialized, which happens
        // while initializing process record for system, see {@link
        // ActivityManagerService#setSystemProcess}.
        return mRootActivityContainer != null ? mRootActivityContainer.getConfiguration()
                : new Configuration();
    }
    }


    boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
    boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
@@ -7277,6 +7281,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        @Override
        @Override
        public WindowProcessController getTopApp() {
        public WindowProcessController getTopApp() {
            synchronized (mGlobalLockWithoutBoost) {
            synchronized (mGlobalLockWithoutBoost) {
                if (mRootActivityContainer == null) {
                    // Return null if mRootActivityContainer not yet initialize, while update
                    // oomadj after AMS created.
                    return null;
                }
                final ActivityRecord top = mRootActivityContainer.getTopResumedActivity();
                final ActivityRecord top = mRootActivityContainer.getTopResumedActivity();
                return top != null ? top.app : null;
                return top != null ? top.app : null;
            }
            }
+1 −2
Original line number Original line Diff line number Diff line
@@ -1038,7 +1038,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        onDisplayChanged(this);
        onDisplayChanged(this);


        // Add itself as a child to the root container.
        // Add itself as a child to the root container.
        mWmService.mRoot.addChild(this, null);
        mWmService.mRoot.addChild(this, POSITION_BOTTOM);


        // TODO(b/62541591): evaluate whether this is the best spot to declare the
        // TODO(b/62541591): evaluate whether this is the best spot to declare the
        // {@link DisplayContent} ready for use.
        // {@link DisplayContent} ready for use.
@@ -6410,7 +6410,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
            stack.removeIfPossible();
            stack.removeIfPossible();
        } else if (getTopStack() == null) {
        } else if (getTopStack() == null) {
            removeIfPossible();
            removeIfPossible();
            mRootActivityContainer.removeChild(this);
            mRootActivityContainer.mStackSupervisor
            mRootActivityContainer.mStackSupervisor
                    .getKeyguardController().onDisplayRemoved(mDisplayId);
                    .getKeyguardController().onDisplayRemoved(mDisplayId);
        }
        }
+1 −1
Original line number Original line Diff line number Diff line
@@ -653,7 +653,7 @@ public class LockTaskController {
            taskChanged = true;
            taskChanged = true;
        }
        }


        mSupervisor.mRootActivityContainer.mRootWindowContainer.forAllTasks(Task::setLockTaskAuth);
        mSupervisor.mRootActivityContainer.forAllTasks(Task::setLockTaskAuth);


        final ActivityRecord r = mSupervisor.mRootActivityContainer.topRunningActivity();
        final ActivityRecord r = mSupervisor.mRootActivityContainer.topRunningActivity();
        final Task task = (r != null) ? r.getTask() : null;
        final Task task = (r != null) ? r.getTask() : null;
+22 −78
Original line number Original line Diff line number Diff line
@@ -36,13 +36,13 @@ import static android.view.Display.INVALID_DISPLAY;
import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY;
import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY;


import static com.android.server.am.ActivityStackSupervisorProto.CONFIGURATION_CONTAINER;
import static com.android.server.am.ActivityStackSupervisorProto.DISPLAYS;
import static com.android.server.am.ActivityStackSupervisorProto.DISPLAYS;
import static com.android.server.am.ActivityStackSupervisorProto.FOCUSED_STACK_ID;
import static com.android.server.am.ActivityStackSupervisorProto.FOCUSED_STACK_ID;
import static com.android.server.am.ActivityStackSupervisorProto.IS_HOME_RECENTS_COMPONENT;
import static com.android.server.am.ActivityStackSupervisorProto.IS_HOME_RECENTS_COMPONENT;
import static com.android.server.am.ActivityStackSupervisorProto.KEYGUARD_CONTROLLER;
import static com.android.server.am.ActivityStackSupervisorProto.KEYGUARD_CONTROLLER;
import static com.android.server.am.ActivityStackSupervisorProto.PENDING_ACTIVITIES;
import static com.android.server.am.ActivityStackSupervisorProto.PENDING_ACTIVITIES;
import static com.android.server.am.ActivityStackSupervisorProto.RESUMED_ACTIVITY;
import static com.android.server.am.ActivityStackSupervisorProto.RESUMED_ACTIVITY;
import static com.android.server.am.ActivityStackSupervisorProto.ROOT_WINDOW_CONTAINER;
import static com.android.server.wm.ActivityStack.ActivityState.PAUSED;
import static com.android.server.wm.ActivityStack.ActivityState.PAUSED;
import static com.android.server.wm.ActivityStack.ActivityState.RESUMED;
import static com.android.server.wm.ActivityStack.ActivityState.RESUMED;
import static com.android.server.wm.ActivityStack.ActivityState.STOPPED;
import static com.android.server.wm.ActivityStack.ActivityState.STOPPED;
@@ -135,7 +135,7 @@ import java.util.function.Function;
 * TODO: This class is mostly temporary to separate things out of ActivityStackSupervisor.java. The
 * TODO: This class is mostly temporary to separate things out of ActivityStackSupervisor.java. The
 * intention is to have this merged with RootWindowContainer.java as part of unifying the hierarchy.
 * intention is to have this merged with RootWindowContainer.java as part of unifying the hierarchy.
 */
 */
class RootActivityContainer extends ConfigurationContainer
class RootActivityContainer extends RootWindowContainer
        implements DisplayManager.DisplayListener {
        implements DisplayManager.DisplayListener {


    private static final String TAG = TAG_WITH_CLASS_NAME ? "RootActivityContainer" : TAG_ATM;
    private static final String TAG = TAG_WITH_CLASS_NAME ? "RootActivityContainer" : TAG_ATM;
@@ -168,14 +168,6 @@ class RootActivityContainer extends ConfigurationContainer
    WindowManagerService mWindowManager;
    WindowManagerService mWindowManager;
    DisplayManager mDisplayManager;
    DisplayManager mDisplayManager;
    private DisplayManagerInternal mDisplayManagerInternal;
    private DisplayManagerInternal mDisplayManagerInternal;
    // TODO(root-unify): Remove after object merge with RootWindowContainer.
    RootWindowContainer mRootWindowContainer;

    /**
     * List of displays which contain activities, sorted by z-order.
     * The last entry in the list is the topmost.
     */
    private final ArrayList<DisplayContent> mDisplayContents = new ArrayList<>();


    /** Reference to default display so we can quickly look it up. */
    /** Reference to default display so we can quickly look it up. */
    private DisplayContent mDefaultDisplay;
    private DisplayContent mDefaultDisplay;
@@ -337,7 +329,8 @@ class RootActivityContainer extends ConfigurationContainer
        }
        }
    }
    }


    RootActivityContainer(ActivityTaskManagerService service) {
    RootActivityContainer(ActivityTaskManagerService service, WindowManagerService wmService) {
        super(wmService);
        mService = service;
        mService = service;
        mStackSupervisor = service.mStackSupervisor;
        mStackSupervisor = service.mStackSupervisor;
        mStackSupervisor.mRootActivityContainer = this;
        mStackSupervisor.mRootActivityContainer = this;
@@ -345,8 +338,6 @@ class RootActivityContainer extends ConfigurationContainer


    void setWindowManager(WindowManagerService wm) {
    void setWindowManager(WindowManagerService wm) {
        mWindowManager = wm;
        mWindowManager = wm;
        mRootWindowContainer = mWindowManager.mRoot;
        mRootWindowContainer.setRootActivityContainer(this);
        mDisplayManager = mService.mContext.getSystemService(DisplayManager.class);
        mDisplayManager = mService.mContext.getSystemService(DisplayManager.class);
        mDisplayManager.registerDisplayListener(this, mService.mUiHandler);
        mDisplayManager.registerDisplayListener(this, mService.mUiHandler);
        mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
        mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
@@ -358,14 +349,13 @@ class RootActivityContainer extends ConfigurationContainer
            if (displayContent.mDisplayId == DEFAULT_DISPLAY) {
            if (displayContent.mDisplayId == DEFAULT_DISPLAY) {
                mDefaultDisplay = displayContent;
                mDefaultDisplay = displayContent;
            }
            }
            addChild(displayContent, DisplayContent.POSITION_TOP);
        }
        }
        calculateDefaultMinimalSizeOfResizeableTasks();
        calculateDefaultMinimalSizeOfResizeableTasks();


        final DisplayContent defaultDisplay = getDefaultDisplay();
        final DisplayContent defaultDisplay = getDefaultDisplay();


        defaultDisplay.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
        defaultDisplay.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
        positionChildAt(defaultDisplay, DisplayContent.POSITION_TOP);
        positionChildAt(POSITION_TOP, defaultDisplay, false /* includingParents */);
    }
    }


    // TODO(multi-display): Look at all callpoints to make sure they make sense in multi-display.
    // TODO(multi-display): Look at all callpoints to make sure they make sense in multi-display.
@@ -424,7 +414,6 @@ class RootActivityContainer extends ConfigurationContainer
        }
        }
        // The display hasn't been added to ActivityManager yet, create a new record now.
        // The display hasn't been added to ActivityManager yet, create a new record now.
        displayContent = new DisplayContent(display, this);
        displayContent = new DisplayContent(display, this);
        addChild(displayContent, DisplayContent.POSITION_BOTTOM);
        return displayContent;
        return displayContent;
    }
    }


@@ -750,7 +739,7 @@ class RootActivityContainer extends ConfigurationContainer


        // Force-update the orientation from the WindowManager, since we need the true configuration
        // Force-update the orientation from the WindowManager, since we need the true configuration
        // to send to the client now.
        // to send to the client now.
        final DisplayContent displayContent = mRootWindowContainer.getDisplayContent(displayId);
        final DisplayContent displayContent = getDisplayContent(displayId);
        Configuration config = null;
        Configuration config = null;
        if (displayContent != null) {
        if (displayContent != null) {
            config = displayContent.updateOrientation(
            config = displayContent.updateOrientation(
@@ -1564,57 +1553,11 @@ class RootActivityContainer extends ConfigurationContainer
    }
    }


    @Override
    @Override
    protected int getChildCount() {
    void positionChildAt(int position, DisplayContent child, boolean includingParents) {
        return mDisplayContents.size();
        super.positionChildAt(position, child, includingParents);
    }

    @Override
    protected DisplayContent getChildAt(int index) {
        return mDisplayContents.get(index);
    }

    @Override
    protected ConfigurationContainer getParent() {
        return null;
    }

    // TODO: remove after object merge with RootWindowContainer
    void onChildPositionChanged(DisplayContent display, int position) {
        // Assume AM lock is held from positionChildAt of controller in each hierarchy.
        if (display != null) {
            positionChildAt(display, position);
        }
    }

    /** Change the z-order of the given display. */
    private void positionChildAt(DisplayContent display, int position) {
        if (position >= mDisplayContents.size()) {
            position = mDisplayContents.size() - 1;
        } else if (position < 0) {
            position = 0;
        }

        if (mDisplayContents.isEmpty()) {
            mDisplayContents.add(display);
        } else if (mDisplayContents.get(position) != display) {
            mDisplayContents.remove(display);
            mDisplayContents.add(position, display);
        }
        mStackSupervisor.updateTopResumedActivityIfNeeded();
        mStackSupervisor.updateTopResumedActivityIfNeeded();
    }
    }


    @VisibleForTesting
    void addChild(DisplayContent displayContent, int position) {
        positionChildAt(displayContent, position);
        mRootWindowContainer.positionChildAt(position, displayContent);
    }

    void removeChild(DisplayContent displayContent) {
        // The caller must tell the controller of {@link DisplayContent} to release its container
        // {@link DisplayContent}. That is done in {@link DisplayContent#releaseSelfIfNeeded}).
        mDisplayContents.remove(displayContent);
    }

    Configuration getDisplayOverrideConfiguration(int displayId) {
    Configuration getDisplayOverrideConfiguration(int displayId) {
        final DisplayContent displayContent = getDisplayContentOrCreate(displayId);
        final DisplayContent displayContent = getDisplayContentOrCreate(displayId);
        if (displayContent == null) {
        if (displayContent == null) {
@@ -1664,7 +1607,7 @@ class RootActivityContainer extends ConfigurationContainer
    }
    }


    void addStartingWindowsForVisibleActivities() {
    void addStartingWindowsForVisibleActivities() {
        mRootWindowContainer.forAllActivities((r) -> {
        forAllActivities((r) -> {
            if (r.mVisibleRequested) {
            if (r.mVisibleRequested) {
                r.showStartingWindow(null /* prev */, false /* newTask */, true /*taskSwitch*/);
                r.showStartingWindow(null /* prev */, false /* newTask */, true /*taskSwitch*/);
            }
            }
@@ -1676,7 +1619,7 @@ class RootActivityContainer extends ConfigurationContainer
    }
    }


    void rankTaskLayersIfNeeded() {
    void rankTaskLayersIfNeeded() {
        if (!mTaskLayersChanged || mRootWindowContainer == null) {
        if (!mTaskLayersChanged) {
            return;
            return;
        }
        }
        mTaskLayersChanged = false;
        mTaskLayersChanged = false;
@@ -1684,7 +1627,7 @@ class RootActivityContainer extends ConfigurationContainer
        final PooledConsumer c = PooledLambda.obtainConsumer(
        final PooledConsumer c = PooledLambda.obtainConsumer(
                RootActivityContainer::rankTaskLayerForActivity, this,
                RootActivityContainer::rankTaskLayerForActivity, this,
                PooledLambda.__(ActivityRecord.class));
                PooledLambda.__(ActivityRecord.class));
        mRootWindowContainer.forAllActivities(c);
        forAllActivities(c);
        c.recycle();
        c.recycle();
    }
    }


@@ -1700,7 +1643,7 @@ class RootActivityContainer extends ConfigurationContainer
        final PooledConsumer c = PooledLambda.obtainConsumer(
        final PooledConsumer c = PooledLambda.obtainConsumer(
                RootActivityContainer::clearOtherAppTimeTrackers,
                RootActivityContainer::clearOtherAppTimeTrackers,
                PooledLambda.__(ActivityRecord.class), except);
                PooledLambda.__(ActivityRecord.class), except);
        mRootWindowContainer.forAllActivities(c);
        forAllActivities(c);
        c.recycle();
        c.recycle();
    }
    }


@@ -1748,7 +1691,7 @@ class RootActivityContainer extends ConfigurationContainer
    void handleAppCrash(WindowProcessController app) {
    void handleAppCrash(WindowProcessController app) {
        final PooledConsumer c = PooledLambda.obtainConsumer(
        final PooledConsumer c = PooledLambda.obtainConsumer(
                RootActivityContainer::handleAppCrash, PooledLambda.__(ActivityRecord.class), app);
                RootActivityContainer::handleAppCrash, PooledLambda.__(ActivityRecord.class), app);
        mRootWindowContainer.forAllActivities(c);
        forAllActivities(c);
        c.recycle();
        c.recycle();
    }
    }


@@ -1773,7 +1716,7 @@ class RootActivityContainer extends ConfigurationContainer
        final PooledPredicate p = PooledLambda.obtainPredicate(
        final PooledPredicate p = PooledLambda.obtainPredicate(
                RootActivityContainer::matchesActivity, PooledLambda.__(ActivityRecord.class),
                RootActivityContainer::matchesActivity, PooledLambda.__(ActivityRecord.class),
                userId, compareIntentFilters, intent, cls);
                userId, compareIntentFilters, intent, cls);
        final ActivityRecord r = mRootWindowContainer.getActivity(p);
        final ActivityRecord r = getActivity(p);
        p.recycle();
        p.recycle();
        return r;
        return r;
    }
    }
@@ -2123,7 +2066,7 @@ class RootActivityContainer extends ConfigurationContainer
    }
    }


    void closeSystemDialogs() {
    void closeSystemDialogs() {
        mRootWindowContainer.forAllActivities((r) -> {
        forAllActivities((r) -> {
            if ((r.info.flags & ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) {
            if ((r.info.flags & ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) {
                r.finishIfPossible("close-sys", true /* oomAdj */);
                r.finishIfPossible("close-sys", true /* oomAdj */);
            }
            }
@@ -2161,7 +2104,7 @@ class RootActivityContainer extends ConfigurationContainer
            final PooledFunction f = PooledLambda.obtainFunction(
            final PooledFunction f = PooledLambda.obtainFunction(
                    FinishDisabledPackageActivitiesHelper::processActivity, this,
                    FinishDisabledPackageActivitiesHelper::processActivity, this,
                    PooledLambda.__(ActivityRecord.class));
                    PooledLambda.__(ActivityRecord.class));
            mRootWindowContainer.forAllActivities(f);
            forAllActivities(f);
            f.recycle();
            f.recycle();
            return mDidSomething;
            return mDidSomething;
        }
        }
@@ -2213,7 +2156,7 @@ class RootActivityContainer extends ConfigurationContainer
        final PooledConsumer c = PooledLambda.obtainConsumer(
        final PooledConsumer c = PooledLambda.obtainConsumer(
                RootActivityContainer::updateActivityApplicationInfo,
                RootActivityContainer::updateActivityApplicationInfo,
                PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName);
                PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName);
        mRootWindowContainer.forAllActivities(c);
        forAllActivities(c);
        c.recycle();
        c.recycle();
    }
    }


@@ -2341,7 +2284,7 @@ class RootActivityContainer extends ConfigurationContainer
            final PooledConsumer c = PooledLambda.obtainConsumer(
            final PooledConsumer c = PooledLambda.obtainConsumer(
                    RootActivityContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class),
                    RootActivityContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class),
                    userId);
                    userId);
            mRootWindowContainer.forAllTasks(c);
            forAllTasks(c);
            c.recycle();
            c.recycle();
        } finally {
        } finally {
            mService.continueWindowLayout();
            mService.continueWindowLayout();
@@ -2409,7 +2352,7 @@ class RootActivityContainer extends ConfigurationContainer


        final PooledPredicate p = PooledLambda.obtainPredicate(
        final PooledPredicate p = PooledLambda.obtainPredicate(
                Task::isTaskId, PooledLambda.__(Task.class), id);
                Task::isTaskId, PooledLambda.__(Task.class), id);
        Task task = mRootWindowContainer.getTask(p);
        Task task = getTask(p);
        p.recycle();
        p.recycle();


        if (task != null) {
        if (task != null) {
@@ -2621,10 +2564,11 @@ class RootActivityContainer extends ConfigurationContainer
        return printed;
        return printed;
    }
    }


    protected void dumpDebug(ProtoOutputStream proto, long fieldId,
    @Override
    public void dumpDebug(ProtoOutputStream proto, long fieldId,
            @WindowTraceLogLevel int logLevel) {
            @WindowTraceLogLevel int logLevel) {
        final long token = proto.start(fieldId);
        final long token = proto.start(fieldId);
        super.dumpDebug(proto, CONFIGURATION_CONTAINER, logLevel);
        dumpDebugInner(proto, ROOT_WINDOW_CONTAINER, logLevel);
        for (int displayNdx = 0; displayNdx < getChildCount(); ++displayNdx) {
        for (int displayNdx = 0; displayNdx < getChildCount(); ++displayNdx) {
            final DisplayContent displayContent = getChildAt(displayNdx);
            final DisplayContent displayContent = getChildAt(displayNdx);
            displayContent.dumpDebug(proto, DISPLAYS, logLevel);
            displayContent.dumpDebug(proto, DISPLAYS, logLevel);
Loading