Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +16 −2 Original line number Diff line number Diff line Loading @@ -133,6 +133,20 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, @Retention(RetentionPolicy.SOURCE) @interface ExitReason{} public static final int ENTER_REASON_UNKNOWN = 0; public static final int ENTER_REASON_MULTI_INSTANCE = 1; public static final int ENTER_REASON_DRAG = 2; public static final int ENTER_REASON_LAUNCHER = 3; /** Acts as a mapping to the actual EnterReasons as defined in the logging proto */ @IntDef(value = { ENTER_REASON_MULTI_INSTANCE, ENTER_REASON_DRAG, ENTER_REASON_LAUNCHER, ENTER_REASON_UNKNOWN }) public @interface SplitEnterReason { } private final ShellCommandHandler mShellCommandHandler; private final ShellController mShellController; private final ShellTaskOrganizer mTaskOrganizer; Loading Loading @@ -394,7 +408,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, */ public void startShortcut(String packageName, String shortcutId, @SplitPosition int position, @Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER); startShortcut(packageName, shortcutId, position, options, user); } Loading Loading @@ -442,7 +456,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, */ public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER); startIntent(intent, fillInIntent, position, options); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java +38 −6 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.wm.shell.splitscreen; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED; Loading @@ -28,6 +30,10 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT; import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT; import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_DRAG; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_UNKNOWN; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DEVICE_FOLDED; Loading @@ -38,6 +44,7 @@ import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_UNKNOWN; import android.annotation.Nullable; import android.util.Slog; import com.android.internal.logging.InstanceId; Loading @@ -59,7 +66,7 @@ public class SplitscreenEventLogger { // Drag info private @SplitPosition int mDragEnterPosition; private InstanceId mEnterSessionId; private @Nullable InstanceId mEnterSessionId; // For deduping async events private int mLastMainStagePosition = -1; Loading @@ -67,6 +74,7 @@ public class SplitscreenEventLogger { private int mLastSideStagePosition = -1; private int mLastSideStageUid = -1; private float mLastSplitRatio = -1f; private @SplitScreenController.SplitEnterReason int mEnterReason = ENTER_REASON_UNKNOWN; public SplitscreenEventLogger() { mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE); Loading @@ -84,15 +92,26 @@ public class SplitscreenEventLogger { */ public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) { mDragEnterPosition = position; enterRequested(enterSessionId); enterRequested(enterSessionId, ENTER_REASON_DRAG); } /** * May be called before logEnter() to indicate that the session was started from launcher. * This specifically is for all the scenarios where split started without a drag interaction */ public void enterRequested(InstanceId enterSessionId) { public void enterRequested(@Nullable InstanceId enterSessionId, @SplitScreenController.SplitEnterReason int enterReason) { mEnterSessionId = enterSessionId; mEnterReason = enterReason; } /** * @return if an enterSessionId has been set via either * {@link #enterRequested(InstanceId, int)} or * {@link #enterRequestedByDrag(int, InstanceId)} */ public boolean hasValidEnterSessionId() { return mEnterSessionId != null; } /** Loading @@ -103,9 +122,7 @@ public class SplitscreenEventLogger { @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { mLoggerSessionId = mIdSequence.newInstanceId(); int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED ? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape) : SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; int enterReason = getLoggerEnterReason(isLandscape); updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), mainStageUid); updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), Loading @@ -124,6 +141,20 @@ public class SplitscreenEventLogger { mLoggerSessionId.getId()); } private int getLoggerEnterReason(boolean isLandscape) { switch (mEnterReason) { case ENTER_REASON_MULTI_INSTANCE: return SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE; case ENTER_REASON_LAUNCHER: return SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; case ENTER_REASON_DRAG: return getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape); case ENTER_REASON_UNKNOWN: default: return SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER; } } /** * Returns the framework logging constant given a splitscreen exit reason. */ Loading Loading @@ -189,6 +220,7 @@ public class SplitscreenEventLogger { mLastMainStageUid = -1; mLastSideStagePosition = -1; mLastSideStageUid = -1; mEnterReason = ENTER_REASON_UNKNOWN; } /** Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +6 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSIT import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_MAIN; import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_SIDE; import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_PIP; Loading Loading @@ -669,7 +671,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void setEnterInstanceId(InstanceId instanceId) { if (instanceId != null) { mLogger.enterRequested(instanceId); mLogger.enterRequested(instanceId, ENTER_REASON_LAUNCHER); } } Loading Loading @@ -1472,6 +1474,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, updateRecentTasksSplitPair(); if (!mLogger.hasStartedSession()) { if (!mLogger.hasValidEnterSessionId()) { mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE); } mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(), getMainStagePosition(), mMainStage.getTopChildTaskUid(), getSideStagePosition(), mSideStage.getTopChildTaskUid(), Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +16 −2 Original line number Diff line number Diff line Loading @@ -133,6 +133,20 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, @Retention(RetentionPolicy.SOURCE) @interface ExitReason{} public static final int ENTER_REASON_UNKNOWN = 0; public static final int ENTER_REASON_MULTI_INSTANCE = 1; public static final int ENTER_REASON_DRAG = 2; public static final int ENTER_REASON_LAUNCHER = 3; /** Acts as a mapping to the actual EnterReasons as defined in the logging proto */ @IntDef(value = { ENTER_REASON_MULTI_INSTANCE, ENTER_REASON_DRAG, ENTER_REASON_LAUNCHER, ENTER_REASON_UNKNOWN }) public @interface SplitEnterReason { } private final ShellCommandHandler mShellCommandHandler; private final ShellController mShellController; private final ShellTaskOrganizer mTaskOrganizer; Loading Loading @@ -394,7 +408,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, */ public void startShortcut(String packageName, String shortcutId, @SplitPosition int position, @Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER); startShortcut(packageName, shortcutId, position, options, user); } Loading Loading @@ -442,7 +456,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, */ public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER); startIntent(intent, fillInIntent, position, options); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java +38 −6 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.wm.shell.splitscreen; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED; Loading @@ -28,6 +30,10 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT; import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT; import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_DRAG; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_UNKNOWN; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DEVICE_FOLDED; Loading @@ -38,6 +44,7 @@ import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_UNKNOWN; import android.annotation.Nullable; import android.util.Slog; import com.android.internal.logging.InstanceId; Loading @@ -59,7 +66,7 @@ public class SplitscreenEventLogger { // Drag info private @SplitPosition int mDragEnterPosition; private InstanceId mEnterSessionId; private @Nullable InstanceId mEnterSessionId; // For deduping async events private int mLastMainStagePosition = -1; Loading @@ -67,6 +74,7 @@ public class SplitscreenEventLogger { private int mLastSideStagePosition = -1; private int mLastSideStageUid = -1; private float mLastSplitRatio = -1f; private @SplitScreenController.SplitEnterReason int mEnterReason = ENTER_REASON_UNKNOWN; public SplitscreenEventLogger() { mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE); Loading @@ -84,15 +92,26 @@ public class SplitscreenEventLogger { */ public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) { mDragEnterPosition = position; enterRequested(enterSessionId); enterRequested(enterSessionId, ENTER_REASON_DRAG); } /** * May be called before logEnter() to indicate that the session was started from launcher. * This specifically is for all the scenarios where split started without a drag interaction */ public void enterRequested(InstanceId enterSessionId) { public void enterRequested(@Nullable InstanceId enterSessionId, @SplitScreenController.SplitEnterReason int enterReason) { mEnterSessionId = enterSessionId; mEnterReason = enterReason; } /** * @return if an enterSessionId has been set via either * {@link #enterRequested(InstanceId, int)} or * {@link #enterRequestedByDrag(int, InstanceId)} */ public boolean hasValidEnterSessionId() { return mEnterSessionId != null; } /** Loading @@ -103,9 +122,7 @@ public class SplitscreenEventLogger { @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { mLoggerSessionId = mIdSequence.newInstanceId(); int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED ? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape) : SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; int enterReason = getLoggerEnterReason(isLandscape); updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), mainStageUid); updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), Loading @@ -124,6 +141,20 @@ public class SplitscreenEventLogger { mLoggerSessionId.getId()); } private int getLoggerEnterReason(boolean isLandscape) { switch (mEnterReason) { case ENTER_REASON_MULTI_INSTANCE: return SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE; case ENTER_REASON_LAUNCHER: return SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; case ENTER_REASON_DRAG: return getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape); case ENTER_REASON_UNKNOWN: default: return SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER; } } /** * Returns the framework logging constant given a splitscreen exit reason. */ Loading Loading @@ -189,6 +220,7 @@ public class SplitscreenEventLogger { mLastMainStageUid = -1; mLastSideStagePosition = -1; mLastSideStageUid = -1; mEnterReason = ENTER_REASON_UNKNOWN; } /** Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +6 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSIT import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_MAIN; import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_SIDE; import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED; import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_PIP; Loading Loading @@ -669,7 +671,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void setEnterInstanceId(InstanceId instanceId) { if (instanceId != null) { mLogger.enterRequested(instanceId); mLogger.enterRequested(instanceId, ENTER_REASON_LAUNCHER); } } Loading Loading @@ -1472,6 +1474,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, updateRecentTasksSplitPair(); if (!mLogger.hasStartedSession()) { if (!mLogger.hasValidEnterSessionId()) { mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE); } mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(), getMainStagePosition(), mMainStage.getTopChildTaskUid(), getSideStagePosition(), mSideStage.getTopChildTaskUid(), Loading