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

Commit 5a82e7f7 authored by Louis Chang's avatar Louis Chang Committed by Android (Google) Code Review
Browse files

Merge "Allows propagating launch cookies to next launching visible activity" into main

parents cd66423b 13fdfd28
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -749,12 +749,6 @@ class ActivityMetricsLogger {
                    + " newActivityCreated=" + newActivityCreated + " info=" + info);
        }

        if (launchedActivity.isReportedDrawn() && launchedActivity.isVisible()) {
            // Launched activity is already visible. We cannot measure windows drawn delay.
            abort(launchingState, "launched activity already visible");
            return;
        }

        // If the launched activity is started from an existing active transition, it will be put
        // into the transition info.
        if (info != null && info.canCoalesce(launchedActivity)) {
@@ -777,6 +771,11 @@ class ActivityMetricsLogger {
                startLaunchTrace(info);
            }
            scheduleCheckActivityToBeDrawnIfSleeping(launchedActivity);
            abortIfAlreadyVisible(launchedActivity, launchingState);
            return;
        }

        if (abortIfAlreadyVisible(launchedActivity, launchingState)) {
            return;
        }

@@ -824,6 +823,19 @@ class ActivityMetricsLogger {
        }
    }

    /**
     * Returns {@code true} if the launched activity is already visible, indicating that window
     * draw delay cannot be measured and the operation should be aborted.
     */
    private boolean abortIfAlreadyVisible(@NonNull ActivityRecord launchedActivity,
            @NonNull LaunchingState launchingState) {
        if (launchedActivity.isReportedDrawn() && launchedActivity.isVisible()) {
            abort(launchingState, "launched activity already visible");
            return true;
        }
        return false;
    }

    /**
     * Updates all transition infos including the given {@param info} if they are a part of a
     * split pair launch.
+34 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.wm;

import static android.app.ActivityManager.START_DELIVERED_TO_TOP;
import static android.app.ActivityManager.START_SUCCESS;
import static android.app.ActivityManager.START_TASK_TO_FRONT;
import static android.content.ComponentName.createRelative;
@@ -563,6 +564,39 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
                activityOnNewTask.mLaunchRootTask).isEqualTo(launchRootTask);
    }

    @Test
    public void testConsecutiveLaunchVisibleTaskCancelled_hasDrawn() {
        final ActivityRecord activityOnNewTask = new ActivityBuilder(mAtm)
                .setCreateTask(true)
                .build();
        onActivityLaunched(activityOnNewTask);
        activityOnNewTask.setVisibleRequested(true);
        doReturn(true).when(activityOnNewTask).isReportedDrawn();
        final IBinder launchCookie = mock(IBinder.class);
        final WindowContainerToken launchRootTask = mock(WindowContainerToken.class);
        mTrampolineActivity.setIsNoDisplay(true);
        mTrampolineActivity.mLaunchCookie = launchCookie;
        mTrampolineActivity.mLaunchRootTask = launchRootTask;
        onActivityLaunched(mTrampolineActivity);
        mActivityMetricsLogger.notifyActivityLaunching(activityOnNewTask.intent,
                mTrampolineActivity /* caller */, mTrampolineActivity.getUid());
        notifyActivityLaunched(START_DELIVERED_TO_TOP, activityOnNewTask);

        verifyAsync(mLaunchObserver).onActivityLaunchCancelled(
                eqLastStartedId(mTrampolineActivity));
        verifyNoMoreInteractions(mLaunchObserver);

        // Ensure that the trampoline's cookie still transferred.
        assertWithMessage("Trampoline's cookie must be transferred").that(
                mTrampolineActivity.mLaunchCookie).isNull();
        assertWithMessage("The last launch task has the transferred cookie").that(
                activityOnNewTask.mLaunchCookie).isEqualTo(launchCookie);
        assertWithMessage("Trampoline's launch root task must be transferred").that(
                mTrampolineActivity.mLaunchRootTask).isNull();
        assertWithMessage("The last launch task has the transferred launch root task").that(
                activityOnNewTask.mLaunchRootTask).isEqualTo(launchRootTask);
    }

    @Test
    public void testConsecutiveLaunchOnDifferentDisplay() {
        onActivityLaunched(mTopActivity);