Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt +51 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,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.wm.shell.protolog.ShellProtoLogGroup Loading Loading @@ -128,7 +129,10 @@ class DesktopModeEventLogger { /* task_y */ taskUpdate.taskY, /* session_id */ sessionId sessionId, taskUpdate.minimizeReason?.reason ?: UNSET_MINIMIZE_REASON, taskUpdate.unminimizeReason?.reason ?: UNSET_UNMINIMIZE_REASON, ) } Loading @@ -142,6 +146,8 @@ class DesktopModeEventLogger { * @property taskWidth width of the task in px * @property taskX x-coordinate of the top-left corner * @property taskY y-coordinate of the top-left corner * @property minimizeReason the reason the task was minimized * @property unminimizeEvent the reason the task was unminimized * */ data class TaskUpdate( Loading @@ -151,8 +157,52 @@ class DesktopModeEventLogger { val taskWidth: Int, val taskX: Int, val taskY: Int, val minimizeReason: MinimizeReason? = null, val unminimizeReason: UnminimizeReason? = null, ) // 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) { TASK_LIMIT( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__MINIMIZE_REASON__MINIMIZE_TASK_LIMIT ), MINIMIZE_BUTTON( // TODO(b/356843241): use this enum value FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__MINIMIZE_REASON__MINIMIZE_BUTTON ), } // Default value used when the task was not unminimized. @VisibleForTesting const val UNSET_UNMINIMIZE_REASON = FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNSET_UNMINIMIZE /** The reason a task was unminimized. */ enum class UnminimizeReason (val reason: Int) { UNKNOWN( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_UNKNOWN ), TASKBAR_TAP( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_TASKBAR_TAP ), ALT_TAB( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_ALT_TAB ), TASK_LAUNCH( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_TASK_LAUNCH ), } /** * Enum EnterReason mapped to the EnterReason definition in * stats/atoms/desktopmode/desktopmode_extensions_atoms.proto Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt +90 −12 Original line number Diff line number Diff line Loading @@ -16,14 +16,17 @@ package com.android.wm.shell.desktopmode import com.android.dx.mockito.inline.extended.ExtendedMockito 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.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.TaskUpdate 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 import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Rule import org.junit.Test import org.mockito.kotlin.eq Loading @@ -44,7 +47,7 @@ class DesktopModeEventLoggerTest { fun logSessionEnter_enterReason() = runBlocking { desktopModeEventLogger.logSessionEnter(sessionId = SESSION_ID, EnterReason.UNKNOWN_ENTER) ExtendedMockito.verify { verify { FrameworkStatsLog.write( eq(FrameworkStatsLog.DESKTOP_MODE_UI_CHANGED), /* event */ Loading @@ -63,7 +66,7 @@ class DesktopModeEventLoggerTest { fun logSessionExit_exitReason() = runBlocking { desktopModeEventLogger.logSessionExit(sessionId = SESSION_ID, ExitReason.UNKNOWN_EXIT) ExtendedMockito.verify { verify { FrameworkStatsLog.write( eq(FrameworkStatsLog.DESKTOP_MODE_UI_CHANGED), /* event */ Loading @@ -82,7 +85,7 @@ class DesktopModeEventLoggerTest { fun logTaskAdded_taskUpdate() = runBlocking { desktopModeEventLogger.logTaskAdded(sessionId = SESSION_ID, TASK_UPDATE) ExtendedMockito.verify { verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_ADDED), Loading @@ -99,7 +102,9 @@ class DesktopModeEventLoggerTest { /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID)) eq(SESSION_ID), eq(UNSET_MINIMIZE_REASON), eq(UNSET_UNMINIMIZE_REASON)) } } Loading @@ -107,7 +112,7 @@ class DesktopModeEventLoggerTest { fun logTaskRemoved_taskUpdate() = runBlocking { desktopModeEventLogger.logTaskRemoved(sessionId = SESSION_ID, TASK_UPDATE) ExtendedMockito.verify { verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_REMOVED), Loading @@ -124,7 +129,9 @@ class DesktopModeEventLoggerTest { /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID)) eq(SESSION_ID), eq(UNSET_MINIMIZE_REASON), eq(UNSET_UNMINIMIZE_REASON)) } } Loading @@ -132,10 +139,11 @@ class DesktopModeEventLoggerTest { fun logTaskInfoChanged_taskUpdate() = runBlocking { desktopModeEventLogger.logTaskInfoChanged(sessionId = SESSION_ID, TASK_UPDATE) ExtendedMockito.verify { verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), eq(FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), /* instance_id */ eq(TASK_UPDATE.instanceId), /* uid */ Loading @@ -149,7 +157,71 @@ class DesktopModeEventLoggerTest { /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID)) eq(SESSION_ID), eq(UNSET_MINIMIZE_REASON), eq(UNSET_UNMINIMIZE_REASON)) } } @Test fun logTaskInfoChanged_logsTaskUpdateWithMinimizeReason() = runBlocking { desktopModeEventLogger.logTaskInfoChanged(sessionId = SESSION_ID, createTaskUpdate(minimizeReason = MinimizeReason.TASK_LIMIT)) verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), /* instance_id */ eq(TASK_UPDATE.instanceId), /* uid */ eq(TASK_UPDATE.uid), /* task_height */ eq(TASK_UPDATE.taskHeight), /* task_width */ eq(TASK_UPDATE.taskWidth), /* task_x */ eq(TASK_UPDATE.taskX), /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID), /* minimize_reason */ eq(MinimizeReason.TASK_LIMIT.reason), /* unminimize_reason */ eq(UNSET_UNMINIMIZE_REASON)) } } @Test fun logTaskInfoChanged_logsTaskUpdateWithUnminimizeReason() = runBlocking { desktopModeEventLogger.logTaskInfoChanged(sessionId = SESSION_ID, createTaskUpdate(unminimizeReason = UnminimizeReason.TASKBAR_TAP)) verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), /* instance_id */ eq(TASK_UPDATE.instanceId), /* uid */ eq(TASK_UPDATE.uid), /* task_height */ eq(TASK_UPDATE.taskHeight), /* task_width */ eq(TASK_UPDATE.taskWidth), /* task_x */ eq(TASK_UPDATE.taskX), /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID), /* minimize_reason */ eq(UNSET_MINIMIZE_REASON), /* unminimize_reason */ eq(UnminimizeReason.TASKBAR_TAP.reason)) } } Loading @@ -165,5 +237,11 @@ class DesktopModeEventLoggerTest { private val TASK_UPDATE = TaskUpdate( TASK_ID, TASK_UID, TASK_HEIGHT, TASK_WIDTH, TASK_X, TASK_Y ) private fun createTaskUpdate( minimizeReason: MinimizeReason? = null, unminimizeReason: UnminimizeReason? = null, ) = TaskUpdate(TASK_ID, TASK_UID, TASK_HEIGHT, TASK_WIDTH, TASK_X, TASK_Y, minimizeReason, unminimizeReason) } } No newline at end of file Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeEventLogger.kt +51 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,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.wm.shell.protolog.ShellProtoLogGroup Loading Loading @@ -128,7 +129,10 @@ class DesktopModeEventLogger { /* task_y */ taskUpdate.taskY, /* session_id */ sessionId sessionId, taskUpdate.minimizeReason?.reason ?: UNSET_MINIMIZE_REASON, taskUpdate.unminimizeReason?.reason ?: UNSET_UNMINIMIZE_REASON, ) } Loading @@ -142,6 +146,8 @@ class DesktopModeEventLogger { * @property taskWidth width of the task in px * @property taskX x-coordinate of the top-left corner * @property taskY y-coordinate of the top-left corner * @property minimizeReason the reason the task was minimized * @property unminimizeEvent the reason the task was unminimized * */ data class TaskUpdate( Loading @@ -151,8 +157,52 @@ class DesktopModeEventLogger { val taskWidth: Int, val taskX: Int, val taskY: Int, val minimizeReason: MinimizeReason? = null, val unminimizeReason: UnminimizeReason? = null, ) // 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) { TASK_LIMIT( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__MINIMIZE_REASON__MINIMIZE_TASK_LIMIT ), MINIMIZE_BUTTON( // TODO(b/356843241): use this enum value FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__MINIMIZE_REASON__MINIMIZE_BUTTON ), } // Default value used when the task was not unminimized. @VisibleForTesting const val UNSET_UNMINIMIZE_REASON = FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNSET_UNMINIMIZE /** The reason a task was unminimized. */ enum class UnminimizeReason (val reason: Int) { UNKNOWN( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_UNKNOWN ), TASKBAR_TAP( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_TASKBAR_TAP ), ALT_TAB( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_ALT_TAB ), TASK_LAUNCH( FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__UNMINIMIZE_REASON__UNMINIMIZE_TASK_LAUNCH ), } /** * Enum EnterReason mapped to the EnterReason definition in * stats/atoms/desktopmode/desktopmode_extensions_atoms.proto Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeEventLoggerTest.kt +90 −12 Original line number Diff line number Diff line Loading @@ -16,14 +16,17 @@ package com.android.wm.shell.desktopmode import com.android.dx.mockito.inline.extended.ExtendedMockito 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.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.TaskUpdate 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 import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Rule import org.junit.Test import org.mockito.kotlin.eq Loading @@ -44,7 +47,7 @@ class DesktopModeEventLoggerTest { fun logSessionEnter_enterReason() = runBlocking { desktopModeEventLogger.logSessionEnter(sessionId = SESSION_ID, EnterReason.UNKNOWN_ENTER) ExtendedMockito.verify { verify { FrameworkStatsLog.write( eq(FrameworkStatsLog.DESKTOP_MODE_UI_CHANGED), /* event */ Loading @@ -63,7 +66,7 @@ class DesktopModeEventLoggerTest { fun logSessionExit_exitReason() = runBlocking { desktopModeEventLogger.logSessionExit(sessionId = SESSION_ID, ExitReason.UNKNOWN_EXIT) ExtendedMockito.verify { verify { FrameworkStatsLog.write( eq(FrameworkStatsLog.DESKTOP_MODE_UI_CHANGED), /* event */ Loading @@ -82,7 +85,7 @@ class DesktopModeEventLoggerTest { fun logTaskAdded_taskUpdate() = runBlocking { desktopModeEventLogger.logTaskAdded(sessionId = SESSION_ID, TASK_UPDATE) ExtendedMockito.verify { verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_ADDED), Loading @@ -99,7 +102,9 @@ class DesktopModeEventLoggerTest { /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID)) eq(SESSION_ID), eq(UNSET_MINIMIZE_REASON), eq(UNSET_UNMINIMIZE_REASON)) } } Loading @@ -107,7 +112,7 @@ class DesktopModeEventLoggerTest { fun logTaskRemoved_taskUpdate() = runBlocking { desktopModeEventLogger.logTaskRemoved(sessionId = SESSION_ID, TASK_UPDATE) ExtendedMockito.verify { verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_REMOVED), Loading @@ -124,7 +129,9 @@ class DesktopModeEventLoggerTest { /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID)) eq(SESSION_ID), eq(UNSET_MINIMIZE_REASON), eq(UNSET_UNMINIMIZE_REASON)) } } Loading @@ -132,10 +139,11 @@ class DesktopModeEventLoggerTest { fun logTaskInfoChanged_taskUpdate() = runBlocking { desktopModeEventLogger.logTaskInfoChanged(sessionId = SESSION_ID, TASK_UPDATE) ExtendedMockito.verify { verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), eq(FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), /* instance_id */ eq(TASK_UPDATE.instanceId), /* uid */ Loading @@ -149,7 +157,71 @@ class DesktopModeEventLoggerTest { /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID)) eq(SESSION_ID), eq(UNSET_MINIMIZE_REASON), eq(UNSET_UNMINIMIZE_REASON)) } } @Test fun logTaskInfoChanged_logsTaskUpdateWithMinimizeReason() = runBlocking { desktopModeEventLogger.logTaskInfoChanged(sessionId = SESSION_ID, createTaskUpdate(minimizeReason = MinimizeReason.TASK_LIMIT)) verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), /* instance_id */ eq(TASK_UPDATE.instanceId), /* uid */ eq(TASK_UPDATE.uid), /* task_height */ eq(TASK_UPDATE.taskHeight), /* task_width */ eq(TASK_UPDATE.taskWidth), /* task_x */ eq(TASK_UPDATE.taskX), /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID), /* minimize_reason */ eq(MinimizeReason.TASK_LIMIT.reason), /* unminimize_reason */ eq(UNSET_UNMINIMIZE_REASON)) } } @Test fun logTaskInfoChanged_logsTaskUpdateWithUnminimizeReason() = runBlocking { desktopModeEventLogger.logTaskInfoChanged(sessionId = SESSION_ID, createTaskUpdate(unminimizeReason = UnminimizeReason.TASKBAR_TAP)) verify { FrameworkStatsLog.write(eq(FrameworkStatsLog.DESKTOP_MODE_SESSION_TASK_UPDATE), /* task_event */ eq(FrameworkStatsLog .DESKTOP_MODE_SESSION_TASK_UPDATE__TASK_EVENT__TASK_INFO_CHANGED), /* instance_id */ eq(TASK_UPDATE.instanceId), /* uid */ eq(TASK_UPDATE.uid), /* task_height */ eq(TASK_UPDATE.taskHeight), /* task_width */ eq(TASK_UPDATE.taskWidth), /* task_x */ eq(TASK_UPDATE.taskX), /* task_y */ eq(TASK_UPDATE.taskY), /* session_id */ eq(SESSION_ID), /* minimize_reason */ eq(UNSET_MINIMIZE_REASON), /* unminimize_reason */ eq(UnminimizeReason.TASKBAR_TAP.reason)) } } Loading @@ -165,5 +237,11 @@ class DesktopModeEventLoggerTest { private val TASK_UPDATE = TaskUpdate( TASK_ID, TASK_UID, TASK_HEIGHT, TASK_WIDTH, TASK_X, TASK_Y ) private fun createTaskUpdate( minimizeReason: MinimizeReason? = null, unminimizeReason: UnminimizeReason? = null, ) = TaskUpdate(TASK_ID, TASK_UID, TASK_HEIGHT, TASK_WIDTH, TASK_X, TASK_Y, minimizeReason, unminimizeReason) } } No newline at end of file