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

Commit 0e410573 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Simplify code flow for add starting window." into main

parents ab2ec4ef a7d61a3a
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
@@ -2639,69 +2639,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