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

Commit 4c564ef0 authored by Tony Huang's avatar Tony Huang
Browse files

Use queue to defer all task events

It has two layer defer currently, it should only remain queue
events method. Remove using of mDeferTaskOrgCallbacksConsumer
and extand using of queue method to onTaskAppeared,
onTaskVanished and onBackPressedOnTaskRoot.

Bug: 171749427
Test: check split screen, PiP and bubbles work normally
Test: atest WmTests:WindowOrganizerTests
Test: atest CtsHarmfulAppWarningHostTestCases
Change-Id: I1556d8352c97bfb8d8f55bfe30f49d266ba624fe
parent 2f01d3d2
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -262,12 +262,6 @@ public class ShellTaskOrganizer extends TaskOrganizer {
        synchronized (mLock) {
            ProtoLog.v(WM_SHELL_TASK_ORG, "Task info changed taskId=%d", taskInfo.taskId);
            final TaskAppearedInfo data = mTasks.get(taskInfo.taskId);
            if (data == null) {
                // TODO(b/171749427): It means onTaskInfoChanged send before onTaskAppeared or
                //  after onTaskVanished, it should be fixed in controller side.
                return;
            }

            final TaskListener oldListener = getTaskListener(data.getTaskInfo());
            final TaskListener newListener = getTaskListener(taskInfo);
            mTasks.put(taskInfo.taskId, new TaskAppearedInfo(taskInfo, data.getLeash()));
+4 −4
Original line number Diff line number Diff line
@@ -41,12 +41,12 @@ public class PipUiEventLogger {
    }

    public void setTaskInfo(TaskInfo taskInfo) {
        if (taskInfo == null) {
            mPackageName = null;
            mPackageUid = INVALID_PACKAGE_UID;
        } else {
        if (taskInfo != null && taskInfo.topActivity != null) {
            mPackageName = taskInfo.topActivity.getPackageName();
            mPackageUid = getUid(mPackageName, taskInfo.userId);
        } else {
            mPackageName = null;
            mPackageUid = INVALID_PACKAGE_UID;
        }
    }

+1 −0
Original line number Diff line number Diff line
@@ -1003,6 +1003,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    }

    private void updateThemeColors() {
        if (mScrimBehind == null) return;
        int background = Utils.getColorAttr(mScrimBehind.getContext(),
                android.R.attr.colorBackgroundFloating).getDefaultColor();
        int accent = Utils.getColorAccent(mScrimBehind.getContext()).getDefaultColor();
+3 −3
Original line number Diff line number Diff line
@@ -861,6 +861,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                        "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
            }
        }

        // Send any pending task-info changes that were queued-up during a layout deferment
        mWmService.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
        mWmService.mAnimator.executeAfterPrepareSurfacesRunnables();

        checkAppTransitionReady(surfacePlacer);
@@ -1013,9 +1016,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>

        mWmService.scheduleAnimationLocked();

        // Send any pending task-info changes that were queued-up during a layout deferment
        mWmService.mAtmService.mTaskOrganizerController.dispatchPendingTaskInfoChanges();

        if (DEBUG_WINDOW_TRACE) Slog.e(TAG, "performSurfacePlacementInner exit");
    }

+5 −7
Original line number Diff line number Diff line
@@ -4983,7 +4983,6 @@ class Task extends WindowContainer<WindowContainer> {
            }
        } else {
            // No longer managed by any organizer.
            mTaskAppearedSent = false;
            setForceHidden(FLAG_FORCE_HIDDEN_FOR_TASK_ORG, false /* set */);
            if (mCreatedByOrganizer) {
                removeImmediately();
@@ -5008,11 +5007,6 @@ class Task extends WindowContainer<WindowContainer> {
     * @return {@code true} if task organizer changed.
     */
    boolean updateTaskOrganizerState(boolean forceUpdate, boolean skipTaskAppeared) {
        if (getSurfaceControl() == null) {
            // Can't call onTaskAppeared without a surfacecontrol, so defer this until after one
            // is created.
            return false;
        }
        if (!canBeOrganized()) {
            return setTaskOrganizer(null);
        }
@@ -5022,6 +5016,10 @@ class Task extends WindowContainer<WindowContainer> {
        final ITaskOrganizer organizer = controller.getTaskOrganizer(windowingMode);
        if (!forceUpdate && mTaskOrganizer == organizer) {
            return false;
        } else if (organizer != null && getSurfaceControl() == null) {
            // Can't call onTaskAppeared without a surfacecontrol, so defer this until after one
            // is created.
            return false;
        }
        return setTaskOrganizer(organizer, skipTaskAppeared);
    }
@@ -7671,7 +7669,7 @@ class Task extends WindowContainer<WindowContainer> {

    void dispatchTaskInfoChangedIfNeeded(boolean force) {
        if (isOrganized()) {
            mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, force);
            mAtmService.mTaskOrganizerController.onTaskInfoChanged(this, force);
        }
    }

Loading