diff options
| author | 2019-11-01 06:49:29 +0000 | |
|---|---|---|
| committer | 2019-11-01 06:49:29 +0000 | |
| commit | 39a3c60407847ee58a8601537eb506db526b00eb (patch) | |
| tree | 7183a3af24c7fbb2e357ab2f2ec24392620fc02c | |
| parent | 66b1a264c5e8ca0cff13c6c0e3b7f6c9f239dc35 (diff) | |
| parent | c48c89150be0debebc33d919d3c1c52c6d76afa2 (diff) | |
Merge "Populate WaitResult with AML data for hot launches"
4 files changed, 20 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index f9b6bbaf54e9..ff2c67135e5c 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -823,7 +823,14 @@ class ActivityMetricsLogger { return StatsLog.APP_START_OCCURRED__TYPE__HOT; } return StatsLog.APP_START_OCCURRED__TYPE__UNKNOWN; - } + } + + /** @return the last known window drawn delay of the given windowing mode. */ + int getLastDrawnDelayMs(@WindowingMode int windowingMode) { + final WindowingModeTransitionInfo info = mLastWindowingModeTransitionInfo.get( + windowingMode); + return info != null ? info.windowsDrawnDelayMs : INVALID_DELAY; + } WindowingModeTransitionInfoSnapshot logAppTransitionReportedDrawn(ActivityRecord r, boolean restoredFromBundle) { diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index b9cd766cef79..76ac5392fa76 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -5086,7 +5086,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final @LaunchState int launchState = info != null ? info.getLaunchState() : -1; mStackSupervisor.reportActivityLaunchedLocked(false /* timeout */, this, windowsDrawnDelayMs, launchState); - mStackSupervisor.stopWaitingForActivityVisible(this); + mStackSupervisor.stopWaitingForActivityVisible(this, windowsDrawnDelayMs); finishLaunchTickingLocked(); if (task != null) { task.hasBeenVisible = true; diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index 87b41b4263f4..dc3d2631a5d7 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -562,8 +562,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { return candidateTaskId; } - void waitActivityVisible(ComponentName name, WaitResult result, long startTimeMs) { - final WaitInfo waitInfo = new WaitInfo(name, result, startTimeMs); + void waitActivityVisible(ComponentName name, WaitResult result) { + final WaitInfo waitInfo = new WaitInfo(name, result); mWaitingForActivityVisible.add(waitInfo); } @@ -573,10 +573,15 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { // down to the max limit while they are still waiting to finish. mFinishingActivities.remove(r); - stopWaitingForActivityVisible(r); + stopWaitingForActivityVisible(r, WaitResult.INVALID_DELAY); } void stopWaitingForActivityVisible(ActivityRecord r) { + stopWaitingForActivityVisible(r, + getActivityMetricsLogger().getLastDrawnDelayMs(r.getWindowingMode())); + } + + void stopWaitingForActivityVisible(ActivityRecord r, long totalTime) { boolean changed = false; for (int i = mWaitingForActivityVisible.size() - 1; i >= 0; --i) { final WaitInfo w = mWaitingForActivityVisible.get(i); @@ -585,7 +590,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { changed = true; result.timeout = false; result.who = w.getComponent(); - result.totalTime = SystemClock.uptimeMillis() - w.getStartTime(); + result.totalTime = totalTime; mWaitingForActivityVisible.remove(w); } } @@ -2824,13 +2829,10 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { static class WaitInfo { private final ComponentName mTargetComponent; private final WaitResult mResult; - /** Time stamp when we started to wait for {@link WaitResult}. */ - private final long mStartTimeMs; - WaitInfo(ComponentName targetComponent, WaitResult result, long startTimeMs) { + WaitInfo(ComponentName targetComponent, WaitResult result) { this.mTargetComponent = targetComponent; this.mResult = result; - this.mStartTimeMs = startTimeMs; } public boolean matches(ComponentName targetComponent) { @@ -2841,10 +2843,6 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { return mResult; } - public long getStartTime() { - return mStartTimeMs; - } - public ComponentName getComponent() { return mTargetComponent; } diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index f87175de1d06..d1bb2559e5be 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -107,7 +107,6 @@ import android.os.Bundle; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; -import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; @@ -764,9 +763,7 @@ class ActivityStarter { mRequest.waitResult.who = r.mActivityComponent; mRequest.waitResult.totalTime = 0; } else { - final long startTimeMs = SystemClock.uptimeMillis(); - mSupervisor.waitActivityVisible(r.mActivityComponent, mRequest.waitResult, - startTimeMs); + mSupervisor.waitActivityVisible(r.mActivityComponent, mRequest.waitResult); // Note: the timeout variable is not currently not ever set. do { try { |