Merge "Reland "Distinguish warm/hot launch by whether the activity has attached process""
This commit is contained in:
committed by
Android (Google) Code Review
commit
c32a9421a2
@@ -131,7 +131,6 @@ class ActivityMetricsLogger {
|
||||
*/
|
||||
private static final int IGNORE_CALLER = -1;
|
||||
private static final int INVALID_DELAY = -1;
|
||||
private static final int INVALID_TRANSITION_TYPE = -1;
|
||||
|
||||
// Preallocated strings we are sending to tron, so we don't have to allocate a new one every
|
||||
// time we log.
|
||||
@@ -232,22 +231,19 @@ class ActivityMetricsLogger {
|
||||
static TransitionInfo create(@NonNull ActivityRecord r,
|
||||
@NonNull LaunchingState launchingState, @Nullable ActivityOptions options,
|
||||
boolean processRunning, boolean processSwitch, int startResult) {
|
||||
int transitionType = INVALID_TRANSITION_TYPE;
|
||||
if (startResult != START_SUCCESS && startResult != START_TASK_TO_FRONT) {
|
||||
return null;
|
||||
}
|
||||
final int transitionType;
|
||||
if (processRunning) {
|
||||
if (startResult == START_SUCCESS) {
|
||||
transitionType = TYPE_TRANSITION_WARM_LAUNCH;
|
||||
} else if (startResult == START_TASK_TO_FRONT) {
|
||||
transitionType = TYPE_TRANSITION_HOT_LAUNCH;
|
||||
}
|
||||
} else if (startResult == START_SUCCESS || startResult == START_TASK_TO_FRONT) {
|
||||
transitionType = r.attachedToProcess()
|
||||
? TYPE_TRANSITION_HOT_LAUNCH
|
||||
: TYPE_TRANSITION_WARM_LAUNCH;
|
||||
} else {
|
||||
// Task may still exist when cold launching an activity and the start result will be
|
||||
// set to START_TASK_TO_FRONT. Treat this as a COLD launch.
|
||||
transitionType = TYPE_TRANSITION_COLD_LAUNCH;
|
||||
}
|
||||
if (transitionType == INVALID_TRANSITION_TYPE) {
|
||||
// That means the startResult is neither START_SUCCESS nor START_TASK_TO_FRONT.
|
||||
return null;
|
||||
}
|
||||
return new TransitionInfo(r, launchingState, options, transitionType, processRunning,
|
||||
processSwitch);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.timeout;
|
||||
|
||||
import android.app.ActivityOptions;
|
||||
import android.app.ActivityOptions.SourceInfo;
|
||||
import android.app.WaitResult;
|
||||
import android.content.Intent;
|
||||
import android.os.SystemClock;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
@@ -167,10 +168,15 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
|
||||
|
||||
@Test
|
||||
public void testOnActivityLaunchFinished() {
|
||||
// Assume that the process is started (ActivityBuilder has mocked the returned value of
|
||||
// ATMS#getProcessController) but the activity has not attached process.
|
||||
mTopActivity.app = null;
|
||||
onActivityLaunched(mTopActivity);
|
||||
|
||||
notifyTransitionStarting(mTopActivity);
|
||||
notifyWindowsDrawn(mTopActivity);
|
||||
final ActivityMetricsLogger.TransitionInfoSnapshot info = notifyWindowsDrawn(mTopActivity);
|
||||
assertWithMessage("Warm launch").that(info.getLaunchState())
|
||||
.isEqualTo(WaitResult.LAUNCH_STATE_WARM);
|
||||
|
||||
verifyOnActivityLaunchFinished(mTopActivity);
|
||||
verifyNoMoreInteractions(mLaunchObserver);
|
||||
@@ -204,7 +210,7 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
|
||||
notifyActivityLaunching(noDrawnActivity.intent);
|
||||
notifyActivityLaunched(START_SUCCESS, noDrawnActivity);
|
||||
|
||||
noDrawnActivity.destroyIfPossible("test");
|
||||
noDrawnActivity.mVisibleRequested = false;
|
||||
mActivityMetricsLogger.notifyVisibilityChanged(noDrawnActivity);
|
||||
|
||||
verifyAsync(mLaunchObserver).onActivityLaunchCancelled(eqProto(noDrawnActivity));
|
||||
@@ -225,6 +231,8 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
|
||||
assertWithMessage("Record start source").that(info.sourceType)
|
||||
.isEqualTo(SourceInfo.TYPE_LAUNCHER);
|
||||
assertWithMessage("Record event time").that(info.sourceEventDelayMs).isAtLeast(10);
|
||||
assertWithMessage("Hot launch").that(info.getLaunchState())
|
||||
.isEqualTo(WaitResult.LAUNCH_STATE_HOT);
|
||||
|
||||
verifyAsync(mLaunchObserver).onReportFullyDrawn(eqProto(mTopActivity), anyLong());
|
||||
verifyOnActivityLaunchFinished(mTopActivity);
|
||||
|
||||
Reference in New Issue
Block a user