diff options
author | 2021-06-15 16:49:33 +0000 | |
---|---|---|
committer | 2021-06-15 16:49:33 +0000 | |
commit | 216d32af4dfdc67dfc114f45d8bc1206b5bb2b46 (patch) | |
tree | 146816f044303b7262a0cf6de93d5ecd48efffe5 | |
parent | 3ab0caf4c8771fba42f108dd9805350955534cf3 (diff) | |
parent | ae0f353d5603f5726a57cb3b9b2d8e24613d3fe0 (diff) |
Merge "Only associate the same windowing mode to a transition info" into sc-dev
-rw-r--r-- | services/core/java/com/android/server/wm/ActivityMetricsLogger.java | 11 | ||||
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java | 13 |
2 files changed, 21 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index 2b6a83896cc6..14f6fb3ed99a 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -312,6 +312,12 @@ class ActivityMetricsLogger { } } + /** Returns {@code true} if the incoming activity can belong to this transition. */ + boolean canCoalesce(ActivityRecord r) { + return mLastLaunchedActivity.mDisplayContent == r.mDisplayContent + && mLastLaunchedActivity.getWindowingMode() == r.getWindowingMode(); + } + /** @return {@code true} if the activity matches a launched activity in this transition. */ boolean contains(ActivityRecord r) { return r != null && (r == mLastLaunchedActivity || mPendingDrawActivities.contains(r)); @@ -604,8 +610,7 @@ class ActivityMetricsLogger { return; } - final DisplayContent targetDisplay = launchedActivity.mDisplayContent; - if (info != null && info.mLastLaunchedActivity.mDisplayContent == targetDisplay) { + if (info != null && info.canCoalesce(launchedActivity)) { // If we are already in an existing transition on the same display, only update the // activity name, but not the other attributes. @@ -633,7 +638,7 @@ class ActivityMetricsLogger { // As abort for no process switch. launchObserverNotifyIntentFailed(); } - if (targetDisplay.isSleeping()) { + if (launchedActivity.mDisplayContent.isSleeping()) { // It is unknown whether the activity can be drawn or not, e.g. ut depends on the // keyguard states and the attributes or flags set by the activity. If the activity // keeps invisible in the grace period, the tracker will be cancelled so it won't get 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 82c459c6868a..38466ebaa0cf 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java @@ -38,6 +38,7 @@ import static org.mockito.Mockito.timeout; import android.app.ActivityOptions; import android.app.ActivityOptions.SourceInfo; import android.app.WaitResult; +import android.app.WindowConfiguration; import android.content.Intent; import android.os.IBinder; import android.os.SystemClock; @@ -476,6 +477,18 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase { transitToDrawnAndVerifyOnLaunchFinished(activityOnNewDisplay); } + @Test + public void testConsecutiveLaunchWithDifferentWindowingMode() { + mTopActivity.setWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); + onActivityLaunched(mTrampolineActivity); + mActivityMetricsLogger.notifyActivityLaunching(mTopActivity.intent, + mTrampolineActivity /* caller */, mTrampolineActivity.getUid()); + notifyActivityLaunched(START_SUCCESS, mTopActivity); + // Different windowing modes should be independent launch events. + transitToDrawnAndVerifyOnLaunchFinished(mTrampolineActivity); + transitToDrawnAndVerifyOnLaunchFinished(mTopActivity); + } + private void transitToDrawnAndVerifyOnLaunchFinished(ActivityRecord activity) { notifyTransitionStarting(activity); notifyWindowsDrawn(activity); |