diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index f87856255b3e6..614c532b27e1b 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -61,6 +61,11 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_T import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_WARM_LAUNCH; import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__NOT_LETTERBOXED; import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__NOT_VISIBLE; +import static com.android.internal.util.FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__APPEARED_APPLY_TREATMENT; +import static com.android.internal.util.FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__APPEARED_REVERT_TREATMENT; +import static com.android.internal.util.FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__CLICKED_APPLY_TREATMENT; +import static com.android.internal.util.FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__CLICKED_DISMISS; +import static com.android.internal.util.FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__CLICKED_REVERT_TREATMENT; import static com.android.server.am.MemoryStatUtil.MemoryStat; import static com.android.server.am.MemoryStatUtil.readMemoryStatFromFilesystem; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_METRICS; @@ -73,6 +78,8 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityOptions; import android.app.ActivityOptions.SourceInfo; +import android.app.TaskInfo; +import android.app.TaskInfo.CameraCompatControlState; import android.app.WaitResult; import android.app.WindowConfiguration.WindowingMode; import android.content.ComponentName; @@ -1377,6 +1384,71 @@ class ActivityMetricsLogger { } } + /** + * Logs the Camera Compat Control appeared event that corresponds to the given {@code state} + * with the given {@code packageUid}. + */ + void logCameraCompatControlAppearedEventReported(@CameraCompatControlState int state, + int packageUid) { + switch (state) { + case TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED: + logCameraCompatControlEventReported( + CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__APPEARED_APPLY_TREATMENT, + packageUid); + break; + case TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED: + logCameraCompatControlEventReported( + CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__APPEARED_REVERT_TREATMENT, + packageUid); + break; + case TaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN: + // Nothing to log. + break; + default: + Slog.w(TAG, "Unexpected state in logCameraCompatControlAppearedEventReported: " + + state); + break; + } + } + + /** + * Logs the Camera Compat Control clicked event that corresponds to the given {@code state} + * with the given {@code packageUid}. + */ + void logCameraCompatControlClickedEventReported(@CameraCompatControlState int state, + int packageUid) { + switch (state) { + case TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED: + logCameraCompatControlEventReported( + CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__CLICKED_APPLY_TREATMENT, + packageUid); + break; + case TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED: + logCameraCompatControlEventReported( + CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__CLICKED_REVERT_TREATMENT, + packageUid); + break; + case TaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED: + logCameraCompatControlEventReported( + CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__CLICKED_DISMISS, + packageUid); + break; + default: + Slog.w(TAG, "Unexpected state in logCameraCompatControlAppearedEventReported: " + + state); + break; + } + } + + private void logCameraCompatControlEventReported(int event, int packageUid) { + FrameworkStatsLog.write(FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED, packageUid, + event); + if (DEBUG_METRICS) { + Slog.i(TAG, String.format("CAMERA_COMPAT_CONTROL_EVENT_REPORTED(%s, %s)", packageUid, + event)); + } + } + private ArtManagerInternal getArtManagerInternal() { if (mArtManagerInternal == null) { // Note that this may be null. diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index f841fc7692f14..48f81fffaca44 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1618,6 +1618,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (!changed) { return; } + mTaskSupervisor.getActivityMetricsLogger().logCameraCompatControlAppearedEventReported( + newCameraCompatControlState, info.applicationInfo.uid); if (newCameraCompatControlState == TaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN) { mCameraCompatControlClickedByUser = false; mCompatCameraControlCallback = null; @@ -1640,6 +1642,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (!changed) { return; } + mTaskSupervisor.getActivityMetricsLogger().logCameraCompatControlClickedEventReported( + state, info.applicationInfo.uid); if (state == TaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED) { mCompatCameraControlCallback = null; return;