Merge "Camera: Add metrics for extension capture format" into main
diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
index 6d9b51cb..2e1e90c 100644
--- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
@@ -200,6 +200,8 @@
supportedCaptureSizes.put(format, supportedSizes);
}
}
+
+ int captureFormat = ImageFormat.UNKNOWN;
Surface burstCaptureSurface = CameraExtensionUtils.getBurstCaptureSurface(
config.getOutputConfigurations(), supportedCaptureSizes);
OutputConfiguration burstCaptureOutputConfig = null;
@@ -210,6 +212,12 @@
}
}
suitableSurfaceCount++;
+
+ if (Flags.analytics24q3()) {
+ CameraExtensionUtils.SurfaceInfo burstCaptureSurfaceInfo =
+ CameraExtensionUtils.querySurface(burstCaptureSurface);
+ captureFormat = burstCaptureSurfaceInfo.mFormat;
+ }
}
if (suitableSurfaceCount != config.getOutputConfigurations().size()) {
@@ -249,6 +257,9 @@
burstCaptureOutputConfig, postviewOutputConfig, config.getStateCallback(),
config.getExecutor(), sessionId, token, config.getExtension());
+ if (Flags.analytics24q3()) {
+ ret.mStatsAggregator.setCaptureFormat(captureFormat);
+ }
ret.mStatsAggregator.setClientName(ctx.getOpPackageName());
ret.mStatsAggregator.setExtensionType(config.getExtension());
diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
index 3ae3199..a4ae398 100644
--- a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
@@ -200,10 +200,18 @@
supportedCaptureSizes.put(format, supportedSizes);
}
}
+
+ int captureFormat = ImageFormat.UNKNOWN;
Surface burstCaptureSurface = CameraExtensionUtils.getBurstCaptureSurface(
config.getOutputConfigurations(), supportedCaptureSizes);
if (burstCaptureSurface != null) {
suitableSurfaceCount++;
+
+ if (Flags.analytics24q3()) {
+ CameraExtensionUtils.SurfaceInfo burstCaptureSurfaceInfo =
+ CameraExtensionUtils.querySurface(burstCaptureSurface);
+ captureFormat = burstCaptureSurfaceInfo.mFormat;
+ }
}
if (suitableSurfaceCount != config.getOutputConfigurations().size()) {
@@ -258,6 +266,9 @@
extensionChars.getAvailableCaptureResultKeys(config.getExtension()),
config.getExtension());
+ if (Flags.analytics24q3()) {
+ session.mStatsAggregator.setCaptureFormat(captureFormat);
+ }
session.mStatsAggregator.setClientName(ctx.getOpPackageName());
session.mStatsAggregator.setExtensionType(config.getExtension());
diff --git a/core/java/android/hardware/camera2/utils/ExtensionSessionStatsAggregator.java b/core/java/android/hardware/camera2/utils/ExtensionSessionStatsAggregator.java
index 3050a51..c75e418 100644
--- a/core/java/android/hardware/camera2/utils/ExtensionSessionStatsAggregator.java
+++ b/core/java/android/hardware/camera2/utils/ExtensionSessionStatsAggregator.java
@@ -70,6 +70,23 @@
}
/**
+ * Set the capture format.
+ *
+ * @param format Format of requested capture.
+ */
+ public void setCaptureFormat(int format) {
+ synchronized (mLock) {
+ if (mIsDone) {
+ return;
+ }
+ if (DEBUG) {
+ Log.v(TAG, "Setting capture format: " + format);
+ }
+ mStats.captureFormat = format;
+ }
+ }
+
+ /**
* Set extension type.
*
* @param extensionType Type of extension. Must match one of
@@ -116,7 +133,8 @@
+ " cameraId: '" + stats.cameraId + "'\n"
+ " clientName: '" + stats.clientName + "'\n"
+ " type: '" + stats.type + "'\n"
- + " isAdvanced: '" + stats.isAdvanced + "'\n";
+ + " isAdvanced: '" + stats.isAdvanced + "'\n"
+ + " captureFormat: '" + stats.captureFormat + "'\n";
}
/**
diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java
index 645a366..390ee96 100644
--- a/services/core/java/com/android/server/camera/CameraServiceProxy.java
+++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java
@@ -37,6 +37,7 @@
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.res.Configuration;
+import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.hardware.CameraExtensionSessionStats;
import android.hardware.CameraSessionStats;
@@ -906,6 +907,7 @@
int extensionType = FrameworkStatsLog.CAMERA_ACTION_EVENT__EXT_TYPE__EXTENSION_NONE;
boolean extensionIsAdvanced = false;
+ int extensionCaptureFormat = ImageFormat.UNKNOWN;
if (e.mExtSessionStats != null) {
switch (e.mExtSessionStats.type) {
case CameraExtensionSessionStats.Type.EXTENSION_AUTOMATIC:
@@ -932,6 +934,9 @@
Slog.w(TAG, "Unknown extension type: " + e.mExtSessionStats.type);
}
extensionIsAdvanced = e.mExtSessionStats.isAdvanced;
+ if (Flags.analytics24q3()) {
+ extensionCaptureFormat = e.mExtSessionStats.captureFormat;
+ }
}
int streamCount = 0;
@@ -945,10 +950,13 @@
String zoomOverrideDebug = Flags.logZoomOverrideUsage()
? ", zoomOverrideUsage " + e.mUsedZoomOverride
: "";
-
String mostRequestedFpsRangeDebug = Flags.analytics24q3()
? ", mostRequestedFpsRange " + e.mMostRequestedFpsRange
: "";
+ String extensionCaptureFormatDebug = Flags.analytics24q3()
+ ? " extensionCaptureFormat " + e.mExtSessionStats.captureFormat
+ : "";
+
Slog.v(TAG, "CAMERA_ACTION_EVENT: action " + e.mAction
+ " clientName " + e.mClientName
+ ", duration " + e.getDuration()
@@ -971,8 +979,10 @@
+ ", logId " + e.mLogId
+ ", sessionIndex " + e.mSessionIndex
+ ", mExtSessionStats {type " + extensionType
- + " isAdvanced " + extensionIsAdvanced + "}");
+ + " isAdvanced " + extensionIsAdvanced
+ + extensionCaptureFormatDebug + "}");
}
+
// Convert from CameraStreamStats to CameraStreamProto
CameraStreamProto[] streamProtos = new CameraStreamProto[MAX_STREAM_STATISTICS];
for (int i = 0; i < MAX_STREAM_STATISTICS; i++) {
@@ -1035,7 +1045,8 @@
e.mLogId, e.mSessionIndex,
extensionType, extensionIsAdvanced, e.mUsedUltraWide,
e.mUsedZoomOverride,
- e.mMostRequestedFpsRange.getLower(), e.mMostRequestedFpsRange.getUpper());
+ e.mMostRequestedFpsRange.getLower(), e.mMostRequestedFpsRange.getUpper(),
+ extensionCaptureFormat);
}
}