Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java +39 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED_SHOW_ON_TOP; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN; import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT; import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_DRAG; Loading @@ -57,6 +58,7 @@ import android.util.Slog; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; import com.android.internal.protolog.ProtoLog; import com.android.internal.util.FrameworkStatsLog; import com.android.wm.shell.shared.split.SplitScreenConstants.SplitPosition; import com.android.wm.shell.splitscreen.SplitScreenController.ExitReason; Loading Loading @@ -133,6 +135,11 @@ public class SplitscreenEventLogger { @SplitPosition int mainStagePosition, int mainStageUid, @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { if (hasStartedSession()) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logEnter: no-op, previous session has not ended"); return; } mLoggerSessionId = mIdSequence.newInstanceId(); int enterReason = getLoggerEnterReason(isLandscape); updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), Loading @@ -140,6 +147,14 @@ public class SplitscreenEventLogger { updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), sideStageUid); updateSplitRatioState(splitRatio); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logEnter: enterReason=%d splitRatio=%f " + "mainStagePosition=%d mainStageUid=%d sideStagePosition=%d " + "sideStageUid=%d isLandscape=%b mEnterSessionId=%d mLoggerSessionId=%d", enterReason, splitRatio, mLastMainStagePosition, mLastMainStageUid, mLastSideStagePosition, mLastSideStageUid, isLandscape, mEnterSessionId != null ? mEnterSessionId.getId() : 0, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__ENTER, enterReason, Loading Loading @@ -212,14 +227,25 @@ public class SplitscreenEventLogger { @SplitPosition int mainStagePosition, int mainStageUid, @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { if (mLoggerSessionId == null) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logExit: no-op, mLoggerSessionId is null"); // Ignore changes until we've started logging the session return; } if ((mainStagePosition != SPLIT_POSITION_UNDEFINED && sideStagePosition != SPLIT_POSITION_UNDEFINED) || (mainStageUid != 0 && sideStageUid != 0)) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logExit: no-op, only main or side stage should be set, not both/none"); throw new IllegalArgumentException("Only main or side stage should be set"); } ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logExit: exitReason=%d mainStagePosition=%d" + " mainStageUid=%d sideStagePosition=%d sideStageUid=%d isLandscape=%b" + " mLoggerSessionId=%d", getLoggerExitReason(exitReason), getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), mainStageUid, getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), sideStageUid, isLandscape, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__EXIT, 0 /* enterReason */, Loading Loading @@ -304,18 +330,25 @@ public class SplitscreenEventLogger { */ public void logResize(float splitRatio) { if (mLoggerSessionId == null) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: no-op, mLoggerSessionId is null"); // Ignore changes until we've started logging the session return; } if (splitRatio <= 0f || splitRatio >= 1f) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: no-op, splitRatio indicates that user is dismissing, not resizing"); // Don't bother reporting resizes that end up dismissing the split, that will be logged // via the exit event return; } if (!updateSplitRatioState(splitRatio)) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: no-op, split ratio was not changed"); // Ignore if there are no user perceived changes return; } ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: splitRatio=%f mLoggerSessionId=%d", mLastSplitRatio, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__RESIZE, 0 /* enterReason */, Loading @@ -335,6 +368,7 @@ public class SplitscreenEventLogger { public void logSwap(@SplitPosition int mainStagePosition, int mainStageUid, @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { if (mLoggerSessionId == null) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logSwap: no-op, mLoggerSessionId is null"); // Ignore changes until we've started logging the session return; } Loading @@ -343,6 +377,11 @@ public class SplitscreenEventLogger { mainStageUid); updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), sideStageUid); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logSwap: mainStagePosition=%d mainStageUid=%d " + "sideStagePosition=%d sideStageUid=%d mLoggerSessionId=%d", mLastMainStagePosition, mLastMainStageUid, mLastSideStagePosition, mLastSideStageUid, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__SWAP, 0 /* enterReason */, Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +11 −14 Original line number Diff line number Diff line Loading @@ -1480,13 +1480,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSkipEvictingMainStageChildren = false; mSplitRequest = null; updateRecentTasksSplitPair(); if (!mLogger.hasStartedSession()) { mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(), getMainStagePosition(), mMainStage.getTopChildTaskUid(), getSideStagePosition(), mSideStage.getTopChildTaskUid(), mSplitLayout.isLeftRightSplit()); } } void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds) { outTopOrLeftBounds.set(mSplitLayout.getBounds1()); Loading Loading @@ -1961,8 +1960,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, clearRequestIfPresented(); updateRecentTasksSplitPair(); if (!mLogger.hasStartedSession()) { if (!mLogger.hasValidEnterSessionId()) { if (!mLogger.hasStartedSession() && !mLogger.hasValidEnterSessionId()) { mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE); } mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(), Loading @@ -1971,7 +1969,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSplitLayout.isLeftRightSplit()); } } } @Override public void onSnappedToDismiss(boolean bottomOrRight, @ExitReason int exitReason) { Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java +39 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED_SHOW_ON_TOP; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN; import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT; import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED; import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_DRAG; Loading @@ -57,6 +58,7 @@ import android.util.Slog; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; import com.android.internal.protolog.ProtoLog; import com.android.internal.util.FrameworkStatsLog; import com.android.wm.shell.shared.split.SplitScreenConstants.SplitPosition; import com.android.wm.shell.splitscreen.SplitScreenController.ExitReason; Loading Loading @@ -133,6 +135,11 @@ public class SplitscreenEventLogger { @SplitPosition int mainStagePosition, int mainStageUid, @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { if (hasStartedSession()) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logEnter: no-op, previous session has not ended"); return; } mLoggerSessionId = mIdSequence.newInstanceId(); int enterReason = getLoggerEnterReason(isLandscape); updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), Loading @@ -140,6 +147,14 @@ public class SplitscreenEventLogger { updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), sideStageUid); updateSplitRatioState(splitRatio); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logEnter: enterReason=%d splitRatio=%f " + "mainStagePosition=%d mainStageUid=%d sideStagePosition=%d " + "sideStageUid=%d isLandscape=%b mEnterSessionId=%d mLoggerSessionId=%d", enterReason, splitRatio, mLastMainStagePosition, mLastMainStageUid, mLastSideStagePosition, mLastSideStageUid, isLandscape, mEnterSessionId != null ? mEnterSessionId.getId() : 0, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__ENTER, enterReason, Loading Loading @@ -212,14 +227,25 @@ public class SplitscreenEventLogger { @SplitPosition int mainStagePosition, int mainStageUid, @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { if (mLoggerSessionId == null) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logExit: no-op, mLoggerSessionId is null"); // Ignore changes until we've started logging the session return; } if ((mainStagePosition != SPLIT_POSITION_UNDEFINED && sideStagePosition != SPLIT_POSITION_UNDEFINED) || (mainStageUid != 0 && sideStageUid != 0)) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logExit: no-op, only main or side stage should be set, not both/none"); throw new IllegalArgumentException("Only main or side stage should be set"); } ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logExit: exitReason=%d mainStagePosition=%d" + " mainStageUid=%d sideStagePosition=%d sideStageUid=%d isLandscape=%b" + " mLoggerSessionId=%d", getLoggerExitReason(exitReason), getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), mainStageUid, getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), sideStageUid, isLandscape, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__EXIT, 0 /* enterReason */, Loading Loading @@ -304,18 +330,25 @@ public class SplitscreenEventLogger { */ public void logResize(float splitRatio) { if (mLoggerSessionId == null) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: no-op, mLoggerSessionId is null"); // Ignore changes until we've started logging the session return; } if (splitRatio <= 0f || splitRatio >= 1f) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: no-op, splitRatio indicates that user is dismissing, not resizing"); // Don't bother reporting resizes that end up dismissing the split, that will be logged // via the exit event return; } if (!updateSplitRatioState(splitRatio)) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: no-op, split ratio was not changed"); // Ignore if there are no user perceived changes return; } ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logResize: splitRatio=%f mLoggerSessionId=%d", mLastSplitRatio, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__RESIZE, 0 /* enterReason */, Loading @@ -335,6 +368,7 @@ public class SplitscreenEventLogger { public void logSwap(@SplitPosition int mainStagePosition, int mainStageUid, @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) { if (mLoggerSessionId == null) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logSwap: no-op, mLoggerSessionId is null"); // Ignore changes until we've started logging the session return; } Loading @@ -343,6 +377,11 @@ public class SplitscreenEventLogger { mainStageUid); updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), sideStageUid); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "logSwap: mainStagePosition=%d mainStageUid=%d " + "sideStagePosition=%d sideStageUid=%d mLoggerSessionId=%d", mLastMainStagePosition, mLastMainStageUid, mLastSideStagePosition, mLastSideStageUid, mLoggerSessionId.getId()); FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED, FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__SWAP, 0 /* enterReason */, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +11 −14 Original line number Diff line number Diff line Loading @@ -1480,13 +1480,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSkipEvictingMainStageChildren = false; mSplitRequest = null; updateRecentTasksSplitPair(); if (!mLogger.hasStartedSession()) { mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(), getMainStagePosition(), mMainStage.getTopChildTaskUid(), getSideStagePosition(), mSideStage.getTopChildTaskUid(), mSplitLayout.isLeftRightSplit()); } } void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds) { outTopOrLeftBounds.set(mSplitLayout.getBounds1()); Loading Loading @@ -1961,8 +1960,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, clearRequestIfPresented(); updateRecentTasksSplitPair(); if (!mLogger.hasStartedSession()) { if (!mLogger.hasValidEnterSessionId()) { if (!mLogger.hasStartedSession() && !mLogger.hasValidEnterSessionId()) { mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE); } mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(), Loading @@ -1971,7 +1969,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSplitLayout.isLeftRightSplit()); } } } @Override public void onSnappedToDismiss(boolean bottomOrRight, @ExitReason int exitReason) { Loading