diff options
| author | 2020-09-22 21:13:24 +0800 | |
|---|---|---|
| committer | 2020-09-22 21:13:24 +0800 | |
| commit | b5e37eec59bbb287cc951d08a07652dd22b4743a (patch) | |
| tree | 9bf0a5f6e966e47c111fe38021d2778fb3fcaf7b | |
| parent | 1e64ab97a1657f913c8a349570f23ee55d10cc66 (diff) | |
Fix missing source info of hot launch
The ActivityStarter#mOptions may be changed according to different
launch cases. Use the original options to avoid missing the info.
Bug: 166614700
Test: ActivityStarterTests#testBringTaskToFrontOnSecondaryDisplay
Change-Id: Ibee1ba837c89784d48bbda87e5e5678ccb445ba3
3 files changed, 18 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index e8e4059af324..a9f06813faf5 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -700,11 +700,15 @@ class ActivityStarter { mService.updateConfigurationLocked(mRequest.globalConfig, null, false); } + // The original options may have additional info about metrics. The mOptions is not + // used here because it may be cleared in setTargetStackIfNeeded. + final ActivityOptions originalOptions = mRequest.activityOptions != null + ? mRequest.activityOptions.getOriginalOptions() : null; // Notify ActivityMetricsLogger that the activity has launched. // ActivityMetricsLogger will then wait for the windows to be drawn and populate // WaitResult. mSupervisor.getActivityMetricsLogger().notifyActivityLaunched(launchingState, res, - mLastStartActivityRecord, mOptions); + mLastStartActivityRecord, originalOptions); return getExternalResult(mRequest.waitResult == null ? res : waitForResult(res, mLastStartActivityRecord)); } diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java index ede6708d5f8f..9205401ed2ee 100644 --- a/services/core/java/com/android/server/wm/SafeActivityOptions.java +++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java @@ -150,6 +150,14 @@ public class SafeActivityOptions { } /** + * Gets the original options passed in. It should only be used for logging. DO NOT use it as a + * condition in the logic of activity launch. + */ + ActivityOptions getOriginalOptions() { + return mOriginalOptions; + } + + /** * @see ActivityOptions#popAppVerificationBundle */ Bundle popAppVerificationBundle() { diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java index 076047b35604..3ccdcb1ed6a5 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java @@ -63,6 +63,7 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.notNull; import android.app.ActivityOptions; import android.app.IApplicationThread; @@ -800,6 +801,7 @@ public class ActivityStarterTests extends WindowTestsBase { final Task topTask = new TaskBuilder(mSupervisor).setParentTask(topStack).build(); new ActivityBuilder(mAtm).setTask(topTask).build(); + doReturn(mActivityMetricsLogger).when(mSupervisor).getActivityMetricsLogger(); // Start activity with the same intent as {@code singleTaskActivity} on secondary display. final ActivityOptions options = ActivityOptions.makeBasic() .setLaunchDisplayId(secondaryDisplay.mDisplayId); @@ -813,6 +815,9 @@ public class ActivityStarterTests extends WindowTestsBase { // Ensure secondary display only creates two stacks. verify(secondaryTaskContainer, times(2)).createStack(anyInt(), anyInt(), anyBoolean()); + // The metrics logger should receive the same result and non-null options. + verify(mActivityMetricsLogger).notifyActivityLaunched(any() /* launchingState */, + eq(result), eq(singleTaskActivity), notNull() /* options */); } @Test |