From 2b6862dc7a299eaf13c6b871a7bfa12df8470a30 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Sun, 5 Feb 2023 21:25:22 -0800 Subject: [PATCH] Camera: Propogate deviceError in more scenarios When camera device goes into error state, it may not go into IDLE state, resulting in deviceError being lost. Make sure device error is recorded in case of close-after-error. Test: Force a device error and watchdog bite, observe analytics Bug: 239057315 Change-Id: I7bd26b50f30ce2c22e010d5de9be1ee200d2b144 --- .../com/android/server/camera/CameraServiceProxy.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java index 0b03005af044c..12134f776ffdb 100644 --- a/services/core/java/com/android/server/camera/CameraServiceProxy.java +++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java @@ -247,7 +247,7 @@ public class CameraServiceProxy extends SystemService private long mDurationOrStartTimeMs; // Either start time, or duration once completed CameraUsageEvent(String cameraId, int facing, String clientName, int apiLevel, - boolean isNdk, int action, int latencyMs, int operatingMode) { + boolean isNdk, int action, int latencyMs, int operatingMode, boolean deviceError) { mCameraId = cameraId; mCameraFacing = facing; mClientName = clientName; @@ -258,6 +258,7 @@ public class CameraServiceProxy extends SystemService mAction = action; mLatencyMs = latencyMs; mOperatingMode = operatingMode; + mDeviceError = deviceError; } public void markCompleted(int internalReconfigure, long requestCount, @@ -1108,7 +1109,7 @@ public class CameraServiceProxy extends SystemService CameraUsageEvent openEvent = new CameraUsageEvent( cameraId, facing, clientName, apiLevel, isNdk, FrameworkStatsLog.CAMERA_ACTION_EVENT__ACTION__OPEN, - latencyMs, sessionType); + latencyMs, sessionType, deviceError); mCameraUsageHistory.add(openEvent); break; case CameraSessionStats.CAMERA_STATE_ACTIVE: @@ -1135,7 +1136,7 @@ public class CameraServiceProxy extends SystemService CameraUsageEvent newEvent = new CameraUsageEvent( cameraId, facing, clientName, apiLevel, isNdk, FrameworkStatsLog.CAMERA_ACTION_EVENT__ACTION__SESSION, - latencyMs, sessionType); + latencyMs, sessionType, deviceError); CameraUsageEvent oldEvent = mActiveCameraUsage.put(cameraId, newEvent); if (oldEvent != null) { Slog.w(TAG, "Camera " + cameraId + " was already marked as active"); @@ -1154,6 +1155,8 @@ public class CameraServiceProxy extends SystemService resultErrorCount, deviceError, streamStats, userTag, videoStabilizationMode); mCameraUsageHistory.add(doneEvent); + // Do not double count device error + deviceError = false; // Check current active camera IDs to see if this package is still // talking to some camera @@ -1177,7 +1180,7 @@ public class CameraServiceProxy extends SystemService CameraUsageEvent closeEvent = new CameraUsageEvent( cameraId, facing, clientName, apiLevel, isNdk, FrameworkStatsLog.CAMERA_ACTION_EVENT__ACTION__CLOSE, - latencyMs, sessionType); + latencyMs, sessionType, deviceError); mCameraUsageHistory.add(closeEvent); }