Loading core/java/android/app/ActivityManagerInternal.java +4 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.os.IBinder; import android.os.SystemClock; import android.service.voice.IVoiceInteractionSession; import android.util.SparseIntArray; Loading Loading @@ -134,8 +135,10 @@ public abstract class ActivityManagerInternal { * * @param reasons A map from stack id to a reason integer why the transition was started,, which * must be one of the APP_TRANSITION_* values. * @param timestamp The time at which the app transition started in * {@link SystemClock#uptimeMillis()} timebase. */ public abstract void notifyAppTransitionStarting(SparseIntArray reasons); public abstract void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp); /** * Callback for window manager to let activity manager know that the app transition was Loading services/core/java/com/android/server/am/ActivityManagerService.java +3 −2 Original line number Diff line number Diff line Loading @@ -23752,9 +23752,10 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override public void notifyAppTransitionStarting(SparseIntArray reasons) { public void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp) { synchronized (ActivityManagerService.this) { mStackSupervisor.mActivityMetricsLogger.notifyTransitionStarting(reasons); mStackSupervisor.mActivityMetricsLogger.notifyTransitionStarting( reasons, timestamp); } } services/core/java/com/android/server/am/ActivityMetricsLogger.java +11 −6 Original line number Diff line number Diff line Loading @@ -230,12 +230,12 @@ class ActivityMetricsLogger { /** * Notifies the tracker that all windows of the app have been drawn. */ void notifyWindowsDrawn(int stackId) { void notifyWindowsDrawn(int stackId, long timestamp) { final StackTransitionInfo info = mStackTransitionInfo.get(stackId); if (info == null || info.loggedWindowsDrawn) { return; } info.windowsDrawnDelayMs = calculateCurrentDelay(); info.windowsDrawnDelayMs = calculateDelay(timestamp); info.loggedWindowsDrawn = true; if (allStacksWindowsDrawn() && mLoggedTransitionStarting) { reset(false /* abort */); Loading @@ -245,13 +245,13 @@ class ActivityMetricsLogger { /** * Notifies the tracker that the starting window was drawn. */ void notifyStartingWindowDrawn(int stackId) { void notifyStartingWindowDrawn(int stackId, long timestamp) { final StackTransitionInfo info = mStackTransitionInfo.get(stackId); if (info == null || info.loggedStartingWindowDrawn) { return; } info.loggedStartingWindowDrawn = true; info.startingWindowDelayMs = calculateCurrentDelay(); info.startingWindowDelayMs = calculateDelay(timestamp); } /** Loading @@ -260,11 +260,11 @@ class ActivityMetricsLogger { * @param stackIdReasons A map from stack id to a reason integer, which must be on of * ActivityManagerInternal.APP_TRANSITION_* reasons. */ void notifyTransitionStarting(SparseIntArray stackIdReasons) { void notifyTransitionStarting(SparseIntArray stackIdReasons, long timestamp) { if (!isAnyTransitionActive() || mLoggedTransitionStarting) { return; } mCurrentTransitionDelayMs = calculateCurrentDelay(); mCurrentTransitionDelayMs = calculateDelay(timestamp); mLoggedTransitionStarting = true; for (int index = stackIdReasons.size() - 1; index >= 0; index--) { final int stackId = stackIdReasons.keyAt(index); Loading Loading @@ -344,6 +344,11 @@ class ActivityMetricsLogger { return (int) (SystemClock.uptimeMillis() - mCurrentTransitionStartTime); } private int calculateDelay(long timestamp) { // Shouldn't take more than 25 days to launch an app, so int is fine here. return (int) (timestamp - mCurrentTransitionStartTime); } private void logAppTransitionMultiEvents() { for (int index = mStackTransitionInfo.size() - 1; index >= 0; index--) { final StackTransitionInfo info = mStackTransitionInfo.valueAt(index); Loading services/core/java/com/android/server/am/ActivityRecord.java +6 −5 Original line number Diff line number Diff line Loading @@ -1928,18 +1928,19 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } @Override public void onStartingWindowDrawn() { public void onStartingWindowDrawn(long timestamp) { synchronized (service) { mStackSupervisor.mActivityMetricsLogger.notifyStartingWindowDrawn(getStackId()); mStackSupervisor.mActivityMetricsLogger.notifyStartingWindowDrawn( getStackId(), timestamp); } } @Override public void onWindowsDrawn() { public void onWindowsDrawn(long timestamp) { synchronized (service) { mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn(getStackId()); mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn(getStackId(), timestamp); if (displayStartTime != 0) { reportLaunchTimeLocked(SystemClock.uptimeMillis()); reportLaunchTimeLocked(timestamp); } mStackSupervisor.sendWaitingVisibleReportLocked(this); startTime = 0; Loading services/core/java/com/android/server/wm/AppWindowContainerController.java +34 −17 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import android.graphics.Rect; import android.os.Debug; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Trace; import android.util.Slog; import android.view.DisplayInfo; Loading @@ -62,23 +64,38 @@ public class AppWindowContainerController private final IApplicationToken mToken; private final Handler mHandler; private final Runnable mOnStartingWindowDrawn = () -> { private final class H extends Handler { public static final int NOTIFY_WINDOWS_DRAWN = 1; public static final int NOTIFY_STARTING_WINDOW_DRAWN = 2; public H(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { switch (msg.what) { case NOTIFY_WINDOWS_DRAWN: if (mListener == null) { return; } if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting drawn in " + AppWindowContainerController.this.mToken); mListener.onStartingWindowDrawn(); }; private final Runnable mOnWindowsDrawn = () -> { mListener.onWindowsDrawn(msg.getWhen()); break; case NOTIFY_STARTING_WINDOW_DRAWN: if (mListener == null) { return; } if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting drawn in " + AppWindowContainerController.this.mToken); mListener.onWindowsDrawn(); }; mListener.onStartingWindowDrawn(msg.getWhen()); break; default: break; } } } private final Runnable mOnWindowsVisible = () -> { if (mListener == null) { Loading Loading @@ -213,7 +230,7 @@ public class AppWindowContainerController int targetSdkVersion, int rotationAnimationHint, long inputDispatchingTimeoutNanos, WindowManagerService service, Configuration overrideConfig, Rect bounds) { super(listener, service); mHandler = new Handler(service.mH.getLooper()); mHandler = new H(service.mH.getLooper()); mToken = token; synchronized(mWindowMap) { AppWindowToken atoken = mRoot.getAppWindowToken(mToken.asBinder()); Loading Loading @@ -761,11 +778,11 @@ public class AppWindowContainerController } void reportStartingWindowDrawn() { mHandler.post(mOnStartingWindowDrawn); mHandler.sendMessage(mHandler.obtainMessage(H.NOTIFY_STARTING_WINDOW_DRAWN)); } void reportWindowsDrawn() { mHandler.post(mOnWindowsDrawn); mHandler.sendMessage(mHandler.obtainMessage(H.NOTIFY_WINDOWS_DRAWN)); } void reportWindowsVisible() { Loading Loading
core/java/android/app/ActivityManagerInternal.java +4 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.os.IBinder; import android.os.SystemClock; import android.service.voice.IVoiceInteractionSession; import android.util.SparseIntArray; Loading Loading @@ -134,8 +135,10 @@ public abstract class ActivityManagerInternal { * * @param reasons A map from stack id to a reason integer why the transition was started,, which * must be one of the APP_TRANSITION_* values. * @param timestamp The time at which the app transition started in * {@link SystemClock#uptimeMillis()} timebase. */ public abstract void notifyAppTransitionStarting(SparseIntArray reasons); public abstract void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp); /** * Callback for window manager to let activity manager know that the app transition was Loading
services/core/java/com/android/server/am/ActivityManagerService.java +3 −2 Original line number Diff line number Diff line Loading @@ -23752,9 +23752,10 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override public void notifyAppTransitionStarting(SparseIntArray reasons) { public void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp) { synchronized (ActivityManagerService.this) { mStackSupervisor.mActivityMetricsLogger.notifyTransitionStarting(reasons); mStackSupervisor.mActivityMetricsLogger.notifyTransitionStarting( reasons, timestamp); } }
services/core/java/com/android/server/am/ActivityMetricsLogger.java +11 −6 Original line number Diff line number Diff line Loading @@ -230,12 +230,12 @@ class ActivityMetricsLogger { /** * Notifies the tracker that all windows of the app have been drawn. */ void notifyWindowsDrawn(int stackId) { void notifyWindowsDrawn(int stackId, long timestamp) { final StackTransitionInfo info = mStackTransitionInfo.get(stackId); if (info == null || info.loggedWindowsDrawn) { return; } info.windowsDrawnDelayMs = calculateCurrentDelay(); info.windowsDrawnDelayMs = calculateDelay(timestamp); info.loggedWindowsDrawn = true; if (allStacksWindowsDrawn() && mLoggedTransitionStarting) { reset(false /* abort */); Loading @@ -245,13 +245,13 @@ class ActivityMetricsLogger { /** * Notifies the tracker that the starting window was drawn. */ void notifyStartingWindowDrawn(int stackId) { void notifyStartingWindowDrawn(int stackId, long timestamp) { final StackTransitionInfo info = mStackTransitionInfo.get(stackId); if (info == null || info.loggedStartingWindowDrawn) { return; } info.loggedStartingWindowDrawn = true; info.startingWindowDelayMs = calculateCurrentDelay(); info.startingWindowDelayMs = calculateDelay(timestamp); } /** Loading @@ -260,11 +260,11 @@ class ActivityMetricsLogger { * @param stackIdReasons A map from stack id to a reason integer, which must be on of * ActivityManagerInternal.APP_TRANSITION_* reasons. */ void notifyTransitionStarting(SparseIntArray stackIdReasons) { void notifyTransitionStarting(SparseIntArray stackIdReasons, long timestamp) { if (!isAnyTransitionActive() || mLoggedTransitionStarting) { return; } mCurrentTransitionDelayMs = calculateCurrentDelay(); mCurrentTransitionDelayMs = calculateDelay(timestamp); mLoggedTransitionStarting = true; for (int index = stackIdReasons.size() - 1; index >= 0; index--) { final int stackId = stackIdReasons.keyAt(index); Loading Loading @@ -344,6 +344,11 @@ class ActivityMetricsLogger { return (int) (SystemClock.uptimeMillis() - mCurrentTransitionStartTime); } private int calculateDelay(long timestamp) { // Shouldn't take more than 25 days to launch an app, so int is fine here. return (int) (timestamp - mCurrentTransitionStartTime); } private void logAppTransitionMultiEvents() { for (int index = mStackTransitionInfo.size() - 1; index >= 0; index--) { final StackTransitionInfo info = mStackTransitionInfo.valueAt(index); Loading
services/core/java/com/android/server/am/ActivityRecord.java +6 −5 Original line number Diff line number Diff line Loading @@ -1928,18 +1928,19 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } @Override public void onStartingWindowDrawn() { public void onStartingWindowDrawn(long timestamp) { synchronized (service) { mStackSupervisor.mActivityMetricsLogger.notifyStartingWindowDrawn(getStackId()); mStackSupervisor.mActivityMetricsLogger.notifyStartingWindowDrawn( getStackId(), timestamp); } } @Override public void onWindowsDrawn() { public void onWindowsDrawn(long timestamp) { synchronized (service) { mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn(getStackId()); mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn(getStackId(), timestamp); if (displayStartTime != 0) { reportLaunchTimeLocked(SystemClock.uptimeMillis()); reportLaunchTimeLocked(timestamp); } mStackSupervisor.sendWaitingVisibleReportLocked(this); startTime = 0; Loading
services/core/java/com/android/server/wm/AppWindowContainerController.java +34 −17 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import android.graphics.Rect; import android.os.Debug; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Trace; import android.util.Slog; import android.view.DisplayInfo; Loading @@ -62,23 +64,38 @@ public class AppWindowContainerController private final IApplicationToken mToken; private final Handler mHandler; private final Runnable mOnStartingWindowDrawn = () -> { private final class H extends Handler { public static final int NOTIFY_WINDOWS_DRAWN = 1; public static final int NOTIFY_STARTING_WINDOW_DRAWN = 2; public H(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { switch (msg.what) { case NOTIFY_WINDOWS_DRAWN: if (mListener == null) { return; } if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting drawn in " + AppWindowContainerController.this.mToken); mListener.onStartingWindowDrawn(); }; private final Runnable mOnWindowsDrawn = () -> { mListener.onWindowsDrawn(msg.getWhen()); break; case NOTIFY_STARTING_WINDOW_DRAWN: if (mListener == null) { return; } if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting drawn in " + AppWindowContainerController.this.mToken); mListener.onWindowsDrawn(); }; mListener.onStartingWindowDrawn(msg.getWhen()); break; default: break; } } } private final Runnable mOnWindowsVisible = () -> { if (mListener == null) { Loading Loading @@ -213,7 +230,7 @@ public class AppWindowContainerController int targetSdkVersion, int rotationAnimationHint, long inputDispatchingTimeoutNanos, WindowManagerService service, Configuration overrideConfig, Rect bounds) { super(listener, service); mHandler = new Handler(service.mH.getLooper()); mHandler = new H(service.mH.getLooper()); mToken = token; synchronized(mWindowMap) { AppWindowToken atoken = mRoot.getAppWindowToken(mToken.asBinder()); Loading Loading @@ -761,11 +778,11 @@ public class AppWindowContainerController } void reportStartingWindowDrawn() { mHandler.post(mOnStartingWindowDrawn); mHandler.sendMessage(mHandler.obtainMessage(H.NOTIFY_STARTING_WINDOW_DRAWN)); } void reportWindowsDrawn() { mHandler.post(mOnWindowsDrawn); mHandler.sendMessage(mHandler.obtainMessage(H.NOTIFY_WINDOWS_DRAWN)); } void reportWindowsVisible() { Loading