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

Commit a7d61a3a authored by wilsonshih's avatar wilsonshih
Browse files

Simplify code flow for add starting window.

Remove unnecessary code, no logic change.
Also remove testTransferStartingWindowWhileCreating, it is impossible
to have such code path since there won't create starting window inside
core anymore.

Bug: 341054451
Test: presubmit
Change-Id: I3a27952160bc26bd9618ce96e5c692c78d0983b2
parent e5e673af
Loading
Loading
Loading
Loading
+0 −30
Original line number Diff line number Diff line
@@ -79,24 +79,12 @@
      "group": "WM_DEBUG_STARTING_WINDOW",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "1789854065584848502": {
      "message": "startingData was nulled out before handling mAddStartingWindow: %s",
      "level": "VERBOSE",
      "group": "WM_DEBUG_STARTING_WINDOW",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "5659016061937922595": {
      "message": "Add starting %s: startingData=%s",
      "level": "VERBOSE",
      "group": "WM_DEBUG_STARTING_WINDOW",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "-9066702108316454290": {
      "message": "Aborted starting %s: startingData=%s",
      "level": "VERBOSE",
      "group": "WM_DEBUG_STARTING_WINDOW",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "7506106334102501360": {
      "message": "Added starting %s: startingWindow=%s startingView=%s",
      "level": "VERBOSE",
@@ -1123,12 +1111,6 @@
      "group": "WM_SHOW_SURFACE_ALLOC",
      "at": "com\/android\/server\/wm\/BlackFrame.java"
    },
    "5256889109971284149": {
      "message": "CameraManager cannot be found.",
      "level": "ERROR",
      "group": "WM_DEBUG_STATES",
      "at": "com\/android\/server\/wm\/CameraStateMonitor.java"
    },
    "8116030277393789125": {
      "message": "Display id=%d is notified that Camera %s is open for package %s",
      "level": "VERBOSE",
@@ -4189,18 +4171,6 @@
      "group": "WM_ERROR",
      "at": "com\/android\/server\/wm\/WindowManagerService.java"
    },
    "-707915937966769475": {
      "message": "unable to update pointer icon",
      "level": "WARN",
      "group": "WM_ERROR",
      "at": "com\/android\/server\/wm\/WindowManagerService.java"
    },
    "-8663841671650918687": {
      "message": "unable to restore pointer icon",
      "level": "WARN",
      "group": "WM_ERROR",
      "at": "com\/android\/server\/wm\/WindowManagerService.java"
    },
    "-6186782212018913664": {
      "message": "Invalid displayId for requestScrollCapture: %d",
      "level": "ERROR",
+11 −60
Original line number Diff line number Diff line
@@ -2638,69 +2638,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        return true;
    }

    void scheduleAddStartingWindow() {
        mAddStartingWindow.run();
    }

    private class AddStartingWindow implements Runnable {

        @Override
        public void run() {
            // Can be accessed without holding the global lock
            final StartingData startingData;
            synchronized (mWmService.mGlobalLock) {
                // There can only be one adding request, silly caller!

                if (mStartingData == null) {
                    // Animation has been canceled... do nothing.
                    ProtoLog.v(WM_DEBUG_STARTING_WINDOW,
                            "startingData was nulled out before handling"
                                    + " mAddStartingWindow: %s", ActivityRecord.this);
                    return;
                }
                startingData = mStartingData;
            }

    private void scheduleAddStartingWindow() {
        ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Add starting %s: startingData=%s",
                    this, startingData);

            StartingSurfaceController.StartingSurface surface = null;
            try {
                surface = startingData.createStartingSurface(ActivityRecord.this);
            } catch (Exception e) {
                Slog.w(TAG, "Exception when adding starting window", e);
            }
            if (surface != null) {
                boolean abort = false;
                synchronized (mWmService.mGlobalLock) {
                    // If the window was successfully added, then we need to remove it.
                    if (mStartingData == null) {
                        ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Aborted starting %s: startingData=%s",
                                ActivityRecord.this, mStartingData);
                this, mStartingData);

                        mStartingWindow = null;
                        mStartingData = null;
                        abort = true;
                    } else {
                        mStartingSurface = surface;
                    }
                    if (!abort) {
        mStartingSurface = mStartingData.createStartingSurface(ActivityRecord.this);
        if (mStartingSurface != null) {
            ProtoLog.v(WM_DEBUG_STARTING_WINDOW,
                    "Added starting %s: startingWindow=%s startingView=%s",
                    ActivityRecord.this, mStartingWindow, mStartingSurface);
                    }
                }
                if (abort) {
                    surface.remove(false /* prepareAnimation */, false /* hasImeSurface */);
                }
        } else {
            ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Surface returned was null: %s",
                    ActivityRecord.this);
        }
    }
    }

    private final AddStartingWindow mAddStartingWindow = new AddStartingWindow();

    private int getStartingWindowType(boolean newTask, boolean taskSwitch, boolean processRunning,
            boolean allowTaskSnapshot, boolean activityCreated, boolean activityAllDrawn,
+1 −2
Original line number Diff line number Diff line
@@ -90,8 +90,7 @@ public abstract class StartingData {
    }

    /**
     * Creates the actual starting window surface. DO NOT HOLD THE WINDOW MANAGER LOCK WHEN CALLING
     * THIS METHOD.
     * Creates the actual starting window surface.
     *
     * @param activity the app to add the starting window to
     * @return a class implementing {@link StartingSurface} for easy removal with
+36 −42
Original line number Diff line number Diff line
@@ -81,7 +81,6 @@ public class StartingSurfaceController {
    }

    StartingSurface createSplashScreenStartingSurface(ActivityRecord activity, int theme) {
        synchronized (mService.mGlobalLock) {
        final Task task = activity.getTask();
        final TaskOrganizerController controller =
                mService.mAtmService.mTaskOrganizerController;
@@ -89,7 +88,6 @@ public class StartingSurfaceController {
                null /* taskSnapshot */)) {
            return new StartingSurface(task, controller.getTaskOrganizer());
        }
        }
        return null;
    }

@@ -143,16 +141,13 @@ public class StartingSurfaceController {

    StartingSurface createTaskSnapshotSurface(ActivityRecord activity, TaskSnapshot taskSnapshot) {
        final WindowState topFullscreenOpaqueWindow;
        final Task task;
        synchronized (mService.mGlobalLock) {
            task = activity.getTask();
        final Task task = activity.getTask();
        if (task == null) {
            Slog.w(TAG, "TaskSnapshotSurface.create: Failed to find task for activity="
                    + activity);
            return null;
        }
            final ActivityRecord topFullscreenActivity =
                    activity.getTask().getTopFullscreenActivity();
        final ActivityRecord topFullscreenActivity = task.getTopFullscreenActivity();
        if (topFullscreenActivity == null) {
            Slog.w(TAG, "TaskSnapshotSurface.create: Failed to find top fullscreen for task="
                    + task);
@@ -179,7 +174,6 @@ public class StartingSurfaceController {
        }
        return null;
    }
    }

    private static final class DeferringStartingWindowRecord {
        final ActivityRecord mDeferring;
+0 −18
Original line number Diff line number Diff line
@@ -2804,24 +2804,6 @@ public class ActivityRecordTests extends WindowTestsBase {
        assertHasStartingWindow(activity2);
    }

    @Test
    public void testTransferStartingWindowWhileCreating() {
        final TestStartingWindowOrganizer organizer = registerTestStartingWindowOrganizer();
        final ActivityRecord activity1 = new ActivityBuilder(mAtm).setCreateTask(true).build();
        final ActivityRecord activity2 = new ActivityBuilder(mAtm).setCreateTask(true).build();
        organizer.setRunnableWhenAddingSplashScreen(
                () -> {
                    // Surprise, ...! Transfer window in the middle of the creation flow.
                    activity2.addStartingWindow(mPackageName, android.R.style.Theme, activity1,
                            true, true, false, true, false, false, false);
                });
        activity1.addStartingWindow(mPackageName, android.R.style.Theme, null, true, true, false,
                true, false, false, false);
        waitUntilHandlersIdle();
        assertNoStartingWindow(activity1);
        assertHasStartingWindow(activity2);
    }

    @Test
    public void testTransferStartingWindowCanAnimate() {
        registerTestStartingWindowOrganizer();
Loading