Merge "Pass in enter reasons into SplitscreenEventLogger" into tm-qpr-dev am: fa3a8fafda

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19980249

Change-Id: I00374b3f8852a69bb5a45662cc84e93174f15206
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Vinit Nayak
2022-09-21 21:39:46 +00:00
committed by Automerger Merge Worker
3 changed files with 60 additions and 9 deletions

View File

@@ -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;
@@ -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);
}
@@ -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);
}

View File

@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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);
@@ -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;
}
/**
@@ -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),
@@ -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.
*/
@@ -189,6 +220,7 @@ public class SplitscreenEventLogger {
mLastMainStageUid = -1;
mLastSideStagePosition = -1;
mLastSideStageUid = -1;
mEnterReason = ENTER_REASON_UNKNOWN;
}
/**

View File

@@ -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;
@@ -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);
}
}
@@ -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(),