diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index e1b7dd3a081b4..602a0ff639a99 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -80,7 +80,6 @@ import android.content.pm.IncrementalStatesInfo; import android.content.pm.dex.ArtManagerInternal; import android.content.pm.dex.PackageOptimizationInfo; import android.metrics.LogMaker; -import android.os.Binder; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; @@ -507,22 +506,13 @@ class ActivityMetricsLogger { return notifyActivityLaunching(intent, null /* caller */, IGNORE_CALLER); } - /** - * If the caller is found in an active transition, it will be considered as consecutive launch - * and coalesced into the active transition. - * - * @see #notifyActivityLaunching(Intent, ActivityRecord, int) - */ - LaunchingState notifyActivityLaunching(Intent intent, @Nullable ActivityRecord caller) { - return notifyActivityLaunching(intent, caller, Binder.getCallingUid()); - } - /** * Notifies the tracker at the earliest possible point when we are starting to launch an * activity. The caller must ensure that {@link #notifyActivityLaunched} will be called later - * with the returned {@link LaunchingState}. + * with the returned {@link LaunchingState}. If the caller is found in an active transition, + * it will be considered as consecutive launch and coalesced into the active transition. */ - private LaunchingState notifyActivityLaunching(Intent intent, @Nullable ActivityRecord caller, + LaunchingState notifyActivityLaunching(Intent intent, @Nullable ActivityRecord caller, int callingUid) { final long transitionStartTimeNs = SystemClock.elapsedRealtimeNanos(); TransitionInfo existingInfo = null; diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 7424e78c7fac8..80e83346b0d23 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -618,8 +618,10 @@ class ActivityStarter { final LaunchingState launchingState; synchronized (mService.mGlobalLock) { final ActivityRecord caller = ActivityRecord.forTokenLocked(mRequest.resultTo); + final int callingUid = mRequest.realCallingUid == Request.DEFAULT_REAL_CALLING_UID + ? Binder.getCallingUid() : mRequest.realCallingUid; launchingState = mSupervisor.getActivityMetricsLogger().notifyActivityLaunching( - mRequest.intent, caller); + mRequest.intent, caller, callingUid); } // If the caller hasn't already resolved the activity, we're willing 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 349270ff708a9..beff3862df010 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java @@ -306,7 +306,8 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase { private void notifyActivityLaunching(Intent intent) { final ActivityMetricsLogger.LaunchingState previousState = mLaunchingState; mLaunchingState = mActivityMetricsLogger.notifyActivityLaunching(intent, - mLaunchTopByTrampoline ? mTrampolineActivity : null /* caller */); + mLaunchTopByTrampoline ? mTrampolineActivity : null /* caller */, + mLaunchTopByTrampoline ? mTrampolineActivity.getUid() : 0); if (mLaunchTopByTrampoline) { // The transition of TrampolineActivity has not been completed, so when the next // activity is starting from it, the same launching state should be returned. @@ -429,7 +430,7 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase { .setCreateTask(true) .build(); mActivityMetricsLogger.notifyActivityLaunching(activityOnNewTask.intent, - mTrampolineActivity /* caller */); + mTrampolineActivity /* caller */, mTrampolineActivity.getUid()); notifyActivityLaunched(START_SUCCESS, activityOnNewTask); transitToDrawnAndVerifyOnLaunchFinished(activityOnNewTask); @@ -453,7 +454,7 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase { // Before TopActivity is drawn, it launches another activity on a different display. mActivityMetricsLogger.notifyActivityLaunching(activityOnNewDisplay.intent, - mTopActivity /* caller */); + mTopActivity /* caller */, mTopActivity.getUid()); notifyActivityLaunched(START_SUCCESS, activityOnNewDisplay); // There should be 2 events instead of coalescing as one event.