summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt182
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt97
2 files changed, 272 insertions, 7 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt
index b1b7d057c756..5a277316ffd4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt
@@ -19,6 +19,7 @@ package com.android.wm.shell.desktopmode
import com.android.internal.annotations.VisibleForTesting
import com.android.internal.protolog.ProtoLog
import com.android.internal.util.FrameworkStatsLog
+import com.android.window.flags.Flags
import com.android.wm.shell.EventLogTags
import com.android.wm.shell.protolog.ShellProtoLogGroup
@@ -79,7 +80,8 @@ class DesktopModeEventLogger {
)
logTaskUpdate(
FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_ADDED,
- sessionId, taskUpdate)
+ sessionId, taskUpdate
+ )
}
/**
@@ -95,7 +97,8 @@ class DesktopModeEventLogger {
)
logTaskUpdate(
FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_REMOVED,
- sessionId, taskUpdate)
+ sessionId, taskUpdate
+ )
}
/**
@@ -111,7 +114,46 @@ class DesktopModeEventLogger {
)
logTaskUpdate(
FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED,
- sessionId, taskUpdate)
+ sessionId, taskUpdate
+ )
+ }
+
+ /**
+ * Logs that a task resize event is starting with [taskSizeUpdate] within a
+ * Desktop mode [sessionId].
+ */
+ fun logTaskResizingStarted(sessionId: Int, taskSizeUpdate: TaskSizeUpdate) {
+ if (!Flags.enableResizingMetrics()) return
+
+ ProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopModeLogger: Logging task resize is starting, session: %s taskId: %s",
+ sessionId,
+ taskSizeUpdate.instanceId
+ )
+ logTaskSizeUpdated(
+ FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZING_STAGE__START_RESIZING_STAGE,
+ sessionId, taskSizeUpdate
+ )
+ }
+
+ /**
+ * Logs that a task resize event is ending with [taskSizeUpdate] within a
+ * Desktop mode [sessionId].
+ */
+ fun logTaskResizingEnded(sessionId: Int, taskSizeUpdate: TaskSizeUpdate) {
+ if (!Flags.enableResizingMetrics()) return
+
+ ProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopModeLogger: Logging task resize is ending, session: %s taskId: %s",
+ sessionId,
+ taskSizeUpdate.instanceId
+ )
+ logTaskSizeUpdated(
+ FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZING_STAGE__END_RESIZING_STAGE,
+ sessionId, taskSizeUpdate
+ )
}
private fun logTaskUpdate(taskEvent: Int, sessionId: Int, taskUpdate: TaskUpdate) {
@@ -162,6 +204,34 @@ class DesktopModeEventLogger {
)
}
+ private fun logTaskSizeUpdated(
+ resizingStage: Int,
+ sessionId: Int,
+ taskSizeUpdate: TaskSizeUpdate
+ ) {
+ FrameworkStatsLog.write(
+ DESKTOP_MODE_TASK_SIZE_UPDATED_ATOM_ID,
+ /* resize_trigger */
+ taskSizeUpdate.resizeTrigger?.trigger ?: ResizeTrigger.UNKNOWN_RESIZE_TRIGGER.trigger,
+ /* resizing_stage */
+ resizingStage,
+ /* input_method */
+ taskSizeUpdate.inputMethod?.method ?: InputMethod.UNKNOWN_INPUT_METHOD.method,
+ /* desktop_mode_session_id */
+ sessionId,
+ /* instance_id */
+ taskSizeUpdate.instanceId,
+ /* uid */
+ taskSizeUpdate.uid,
+ /* task_height */
+ taskSizeUpdate.taskHeight,
+ /* task_width */
+ taskSizeUpdate.taskWidth,
+ /* display_area */
+ taskSizeUpdate.displayArea
+ )
+ }
+
companion object {
/**
* Describes a task position and dimensions.
@@ -188,13 +258,35 @@ class DesktopModeEventLogger {
val visibleTaskCount: Int,
)
+ /**
+ * Describes a task size update (resizing, snapping or maximizing to
+ * stable bounds).
+ *
+ * @property resizeTrigger the trigger for task resize
+ * @property inputMethod the input method for resizing this task
+ * @property instanceId instance id of the task
+ * @property uid uid of the app associated with the task
+ * @property taskHeight height of the task in dp
+ * @property taskWidth width of the task in dp
+ * @property displayArea the display size of the screen in dp
+ */
+ data class TaskSizeUpdate(
+ val resizeTrigger: ResizeTrigger? = null,
+ val inputMethod: InputMethod? = null,
+ val instanceId: Int,
+ val uid: Int,
+ val taskHeight: Int,
+ val taskWidth: Int,
+ val displayArea: Int,
+ )
+
// Default value used when the task was not minimized.
@VisibleForTesting
const val UNSET_MINIMIZE_REASON =
FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__MINIMIZE_REASON__UNSET_MINIMIZE
/** The reason a task was minimized. */
- enum class MinimizeReason (val reason: Int) {
+ enum class MinimizeReason(val reason: Int) {
TASK_LIMIT(
FrameworkStatsLog
.DESKTOP_MODE_SESSION_TASK_UPDATE__MINIMIZE_REASON__MINIMIZE_TASK_LIMIT
@@ -211,7 +303,7 @@ class DesktopModeEventLogger {
FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNSET_UNMINIMIZE
/** The reason a task was unminimized. */
- enum class UnminimizeReason (val reason: Int) {
+ enum class UnminimizeReason(val reason: Int) {
UNKNOWN(
FrameworkStatsLog
.DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_UNKNOWN
@@ -275,8 +367,88 @@ class DesktopModeEventLogger {
SCREEN_OFF(FrameworkStatsLog.DESKTOP_MODE_UICHANGED__EXIT_REASON__SCREEN_OFF)
}
+ /**
+ * Enum ResizeTrigger mapped to the ResizeTrigger definition in
+ * stats/atoms/desktopmode/desktopmode_extensions_atoms.proto
+ */
+ enum class ResizeTrigger(val trigger: Int) {
+ UNKNOWN_RESIZE_TRIGGER(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__UNKNOWN_RESIZE_TRIGGER
+ ),
+ CORNER(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__CORNER_RESIZE_TRIGGER
+ ),
+ EDGE(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__EDGE_RESIZE_TRIGGER
+ ),
+ TILING_DIVIDER(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__TILING_DIVIDER_RESIZE_TRIGGER
+ ),
+ MAXIMIZE_BUTTON(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__MAXIMIZE_BUTTON_RESIZE_TRIGGER
+ ),
+ DOUBLE_TAP_APP_HEADER(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__DOUBLE_TAP_APP_HEADER_RESIZE_TRIGGER
+ ),
+ DRAG_LEFT(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__DRAG_LEFT_RESIZE_TRIGGER
+ ),
+ DRAG_RIGHT(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__DRAG_RIGHT_RESIZE_TRIGGER
+ ),
+ SNAP_LEFT_MENU(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__SNAP_LEFT_MENU_RESIZE_TRIGGER
+ ),
+ SNAP_RIGHT_MENU(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__SNAP_RIGHT_MENU_RESIZE_TRIGGER
+ ),
+ }
+
+ /**
+ * Enum InputMethod mapped to the InputMethod definition in
+ * stats/atoms/desktopmode/desktopmode_extensions_atoms.proto
+ */
+ enum class InputMethod(val method: Int) {
+ UNKNOWN_INPUT_METHOD(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__UNKNOWN_INPUT_METHOD
+ ),
+ TOUCH(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__TOUCH_INPUT_METHOD
+ ),
+ STYLUS(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__STYLUS_INPUT_METHOD
+ ),
+ MOUSE(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__MOUSE_INPUT_METHOD
+ ),
+ TOUCHPAD(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__TOUCHPAD_INPUT_METHOD
+ ),
+ KEYBOARD(
+ FrameworkStatsLog
+ .DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__KEYBOARD_INPUT_METHOD
+ ),
+ }
+
private const val DESKTOP_MODE_ATOM_ID = FrameworkStatsLog.DESKTOP_MODE_UI_CHANGED
private const val DESKTOP_MODE_TASK_UPDATE_ATOM_ID =
FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE
+ private const val DESKTOP_MODE_TASK_SIZE_UPDATED_ATOM_ID =
+ FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt
index 6a5719ba0125..d7a132dfa1be 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt
@@ -16,15 +16,22 @@
package com.android.wm.shell.desktopmode
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.SetFlagsRule
import com.android.dx.mockito.inline.extended.ExtendedMockito.verify
import com.android.internal.util.FrameworkStatsLog
import com.android.modules.utils.testing.ExtendedMockitoRule
+import com.android.window.flags.Flags
import com.android.wm.shell.EventLogTags
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.EnterReason
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ExitReason
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.MinimizeReason
+import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger
+import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.TaskUpdate
+import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.TaskSizeUpdate
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.UnminimizeReason
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.UNSET_MINIMIZE_REASON
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.UNSET_UNMINIMIZE_REASON
@@ -41,11 +48,15 @@ class DesktopModeEventLoggerTest : ShellTestCase() {
private val desktopModeEventLogger = DesktopModeEventLogger()
@JvmField
- @Rule
+ @Rule(order = 0)
val extendedMockitoRule = ExtendedMockitoRule.Builder(this)
.mockStatic(FrameworkStatsLog::class.java)
.mockStatic(EventLogTags::class.java).build()!!
+ @JvmField
+ @Rule(order = 1)
+ val setFlagsRule = SetFlagsRule()
+
@Test
fun logSessionEnter_enterReason() = runBlocking {
desktopModeEventLogger.logSessionEnter(sessionId = SESSION_ID, EnterReason.UNKNOWN_ENTER)
@@ -328,7 +339,65 @@ class DesktopModeEventLoggerTest : ShellTestCase() {
}
}
- companion object {
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_RESIZING_METRICS)
+ fun logTaskResizingStarted_logsTaskSizeUpdatedWithStartResizingStage() = runBlocking {
+ desktopModeEventLogger.logTaskResizingStarted(sessionId = SESSION_ID, createTaskSizeUpdate())
+
+ verify {
+ FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED),
+ /* resize_trigger */
+ eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__UNKNOWN_RESIZE_TRIGGER),
+ /* resizing_stage */
+ eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZING_STAGE__START_RESIZING_STAGE),
+ /* input_method */
+ eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__UNKNOWN_INPUT_METHOD),
+ /* desktop_mode_session_id */
+ eq(SESSION_ID),
+ /* instance_id */
+ eq(TASK_SIZE_UPDATE.instanceId),
+ /* uid */
+ eq(TASK_SIZE_UPDATE.uid),
+ /* task_height */
+ eq(TASK_SIZE_UPDATE.taskHeight),
+ /* task_width */
+ eq(TASK_SIZE_UPDATE.taskWidth),
+ /* display_area */
+ eq(TASK_SIZE_UPDATE.displayArea),
+ )
+ }
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_RESIZING_METRICS)
+ fun logTaskResizingEnded_logsTaskSizeUpdatedWithEndResizingStage() = runBlocking {
+ desktopModeEventLogger.logTaskResizingEnded(sessionId = SESSION_ID, createTaskSizeUpdate())
+
+ verify {
+ FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED),
+ /* resize_trigger */
+ eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZE_TRIGGER__UNKNOWN_RESIZE_TRIGGER),
+ /* resizing_stage */
+ eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__RESIZING_STAGE__END_RESIZING_STAGE),
+ /* input_method */
+ eq(FrameworkStatsLog.DESKTOP_MODE_TASK_SIZE_UPDATED__INPUT_METHOD__UNKNOWN_INPUT_METHOD),
+ /* desktop_mode_session_id */
+ eq(SESSION_ID),
+ /* instance_id */
+ eq(TASK_SIZE_UPDATE.instanceId),
+ /* uid */
+ eq(TASK_SIZE_UPDATE.uid),
+ /* task_height */
+ eq(TASK_SIZE_UPDATE.taskHeight),
+ /* task_width */
+ eq(TASK_SIZE_UPDATE.taskWidth),
+ /* display_area */
+ eq(TASK_SIZE_UPDATE.displayArea),
+ )
+ }
+ }
+
+ private companion object {
private const val SESSION_ID = 1
private const val TASK_ID = 1
private const val TASK_UID = 1
@@ -337,12 +406,36 @@ class DesktopModeEventLoggerTest : ShellTestCase() {
private const val TASK_HEIGHT = 100
private const val TASK_WIDTH = 100
private const val TASK_COUNT = 1
+ private const val DISPLAY_AREA = 1000
private val TASK_UPDATE = TaskUpdate(
TASK_ID, TASK_UID, TASK_HEIGHT, TASK_WIDTH, TASK_X, TASK_Y,
visibleTaskCount = TASK_COUNT,
)
+ private val TASK_SIZE_UPDATE = TaskSizeUpdate(
+ resizeTrigger = ResizeTrigger.UNKNOWN_RESIZE_TRIGGER,
+ inputMethod = InputMethod.UNKNOWN_INPUT_METHOD,
+ TASK_ID,
+ TASK_UID,
+ TASK_HEIGHT,
+ TASK_WIDTH,
+ DISPLAY_AREA,
+ )
+
+ private fun createTaskSizeUpdate(
+ resizeTrigger: ResizeTrigger = ResizeTrigger.UNKNOWN_RESIZE_TRIGGER,
+ inputMethod: InputMethod = InputMethod.UNKNOWN_INPUT_METHOD,
+ ) = TaskSizeUpdate(
+ resizeTrigger,
+ inputMethod,
+ TASK_ID,
+ TASK_UID,
+ TASK_HEIGHT,
+ TASK_WIDTH,
+ DISPLAY_AREA,
+ )
+
private fun createTaskUpdate(
minimizeReason: MinimizeReason? = null,
unminimizeReason: UnminimizeReason? = null,