summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2020-09-22 21:13:24 +0800
committer Riddle Hsu <riddlehsu@google.com> 2020-09-22 21:13:24 +0800
commitb5e37eec59bbb287cc951d08a07652dd22b4743a (patch)
tree9bf0a5f6e966e47c111fe38021d2778fb3fcaf7b
parent1e64ab97a1657f913c8a349570f23ee55d10cc66 (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
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java6
-rw-r--r--services/core/java/com/android/server/wm/SafeActivityOptions.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java5
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