summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityMetricsLogger.java14
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java28
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskSupervisor.java3
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimation.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java7
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java3
6 files changed, 22 insertions, 35 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index 561f1ad75c12..09461132ef37 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -247,13 +247,14 @@ class ActivityMetricsLogger {
@Nullable
static TransitionInfo create(@NonNull ActivityRecord r,
@NonNull LaunchingState launchingState, @Nullable ActivityOptions options,
- boolean processRunning, boolean processSwitch, int startResult) {
+ boolean processRunning, boolean processSwitch, boolean newActivityCreated,
+ int startResult) {
if (startResult != START_SUCCESS && startResult != START_TASK_TO_FRONT) {
return null;
}
final int transitionType;
if (processRunning) {
- transitionType = r.attachedToProcess()
+ transitionType = !newActivityCreated && r.attachedToProcess()
? TYPE_TRANSITION_HOT_LAUNCH
: TYPE_TRANSITION_WARM_LAUNCH;
} else {
@@ -560,10 +561,12 @@ class ActivityMetricsLogger {
* @param resultCode One of the {@link android.app.ActivityManager}.START_* flags, indicating
* the result of the launch.
* @param launchedActivity The activity that is being launched
+ * @param newActivityCreated Whether a new activity instance is created.
* @param options The given options of the launching activity.
*/
void notifyActivityLaunched(@NonNull LaunchingState launchingState, int resultCode,
- @Nullable ActivityRecord launchedActivity, @Nullable ActivityOptions options) {
+ boolean newActivityCreated, @Nullable ActivityRecord launchedActivity,
+ @Nullable ActivityOptions options) {
if (launchedActivity == null) {
// The launch is aborted, e.g. intent not resolved, class not found.
abort(null /* info */, "nothing launched");
@@ -587,7 +590,8 @@ class ActivityMetricsLogger {
if (DEBUG_METRICS) {
Slog.i(TAG, "notifyActivityLaunched" + " resultCode=" + resultCode
+ " launchedActivity=" + launchedActivity + " processRunning=" + processRunning
- + " processSwitch=" + processSwitch + " info=" + info);
+ + " processSwitch=" + processSwitch
+ + " newActivityCreated=" + newActivityCreated + " info=" + info);
}
if (launchedActivity.isReportedDrawn() && launchedActivity.isVisible()) {
@@ -608,7 +612,7 @@ class ActivityMetricsLogger {
}
final TransitionInfo newInfo = TransitionInfo.create(launchedActivity, launchingState,
- options, processRunning, processSwitch, resultCode);
+ options, processRunning, processSwitch, newActivityCreated, resultCode);
if (newInfo == null) {
abort(info, "unrecognized launch");
return;
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 08a9f0928b8b..0d3c74ef318b 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -602,30 +602,6 @@ class ActivityStarter {
}
/**
- * Starts an activity based on the provided {@link ActivityRecord} and environment parameters.
- * Note that this method is called internally as well as part of {@link #executeRequest}.
- */
- void startResolvedActivity(final ActivityRecord r, ActivityRecord sourceRecord,
- IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
- int startFlags, boolean doResume, ActivityOptions options, Task inTask,
- NeededUriGrants intentGrants) {
- try {
- final LaunchingState launchingState = mSupervisor.getActivityMetricsLogger()
- .notifyActivityLaunching(r.intent, r.resultTo);
- mLastStartReason = "startResolvedActivity";
- mLastStartActivityTimeMs = System.currentTimeMillis();
- mLastStartActivityRecord = r;
- mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,
- voiceInteractor, startFlags, doResume, options, inTask,
- false /* restrictedBgActivity */, intentGrants);
- mSupervisor.getActivityMetricsLogger().notifyActivityLaunched(launchingState,
- mLastStartActivityResult, mLastStartActivityRecord, options);
- } finally {
- onExecutionComplete();
- }
- }
-
- /**
* Resolve necessary information according the request parameters provided earlier, and execute
* the request which begin the journey of starting an activity.
* @return The starter result.
@@ -707,11 +683,13 @@ class ActivityStarter {
// used here because it may be cleared in setTargetRootTaskIfNeeded.
final ActivityOptions originalOptions = mRequest.activityOptions != null
? mRequest.activityOptions.getOriginalOptions() : null;
+ // If the new record is the one that started, a new activity has created.
+ final boolean newActivityCreated = mStartActivity == mLastStartActivityRecord;
// 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, originalOptions);
+ newActivityCreated, mLastStartActivityRecord, originalOptions);
if (mRequest.waitResult != null) {
mRequest.waitResult.result = res;
res = waitResultIfNeeded(mRequest.waitResult, mLastStartActivityRecord,
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index df1fec9ad0da..8583061a3986 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -2542,7 +2542,8 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
targetActivity.applyOptionsAnimation();
} finally {
mActivityMetricsLogger.notifyActivityLaunched(launchingState,
- START_TASK_TO_FRONT, targetActivity, activityOptions);
+ START_TASK_TO_FRONT, false /* newActivityCreated */, targetActivity,
+ activityOptions);
}
mService.getActivityStartController().postStartActivityProcessingForLastStarter(
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java
index 869133ae948c..a10b5d6e8177 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimation.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimation.java
@@ -255,7 +255,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, OnRootTaskOrderChan
options.setSourceInfo(ActivityOptions.SourceInfo.TYPE_RECENTS_ANIMATION, eventTime);
}
mTaskSupervisor.getActivityMetricsLogger().notifyActivityLaunched(launchingState,
- START_TASK_TO_FRONT, targetActivity, options);
+ START_TASK_TO_FRONT, !hasExistingActivity, targetActivity, options);
// Register for root task order changes
mDefaultTaskDisplayArea.registerRootTaskOrderChangedListener(this);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
index 2148589529f3..349270ff708a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
@@ -77,6 +77,7 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
private ActivityRecord mTopActivity;
private ActivityOptions mActivityOptions;
private boolean mLaunchTopByTrampoline;
+ private boolean mNewActivityCreated = true;
@Before
public void setUpAMLO() {
@@ -187,6 +188,7 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
.isEqualTo(WaitResult.LAUNCH_STATE_WARM);
mTopActivity.app = app;
+ mNewActivityCreated = false;
assertWithMessage("Hot launch").that(launchTemplate.applyAsInt(false /* doRelaunch */))
.isEqualTo(WaitResult.LAUNCH_STATE_HOT);
@@ -194,6 +196,7 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
.isEqualTo(WaitResult.LAUNCH_STATE_RELAUNCH);
mTopActivity.app = null;
+ mNewActivityCreated = true;
doReturn(null).when(mAtm).getProcessController(app.mName, app.mUid);
assertWithMessage("Cold launch").that(launchTemplate.applyAsInt(false /* doRelaunch */))
.isEqualTo(WaitResult.LAUNCH_STATE_COLD);
@@ -313,8 +316,8 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
}
private void notifyActivityLaunched(int resultCode, ActivityRecord activity) {
- mActivityMetricsLogger.notifyActivityLaunched(mLaunchingState, resultCode, activity,
- mActivityOptions);
+ mActivityMetricsLogger.notifyActivityLaunched(mLaunchingState, resultCode,
+ mNewActivityCreated, activity, mActivityOptions);
}
private void notifyTransitionStarting(ActivityRecord activity) {
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 e6ac52d2bf6f..0a36af2d586a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -870,7 +870,8 @@ public class ActivityStarterTests extends WindowTestsBase {
verify(secondaryTaskContainer, times(2)).createRootTask(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 */);
+ eq(result), eq(false) /* newActivityCreated */, eq(singleTaskActivity),
+ notNull() /* options */);
}
@Test