summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Austin Borger <borgera@google.com> 2022-03-08 23:26:22 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-03-08 23:26:22 +0000
commit1f854ad7c3454ca8e4e71df99309ac8fb58b373e (patch)
tree53d8940c1125f60d5e097ba50b5fd406e03860ab
parent5622ee0fd86bb9c00de1c6c51dee803730dd0efa (diff)
parent447e815bd76fc29967c357442028d52014161d90 (diff)
Merge "Provide refresh rate range to the window manager based on the maximum frame rate of each camera stream." into tm-dev
-rw-r--r--core/java/android/hardware/CameraSessionStats.java11
-rw-r--r--core/java/android/hardware/CameraStreamStats.java13
-rw-r--r--services/core/java/com/android/server/camera/CameraServiceProxy.java15
3 files changed, 33 insertions, 6 deletions
diff --git a/core/java/android/hardware/CameraSessionStats.java b/core/java/android/hardware/CameraSessionStats.java
index f34e2bf5ddc2..698cc76f6325 100644
--- a/core/java/android/hardware/CameraSessionStats.java
+++ b/core/java/android/hardware/CameraSessionStats.java
@@ -59,6 +59,7 @@ public class CameraSessionStats implements Parcelable {
private long mRequestCount;
private long mResultErrorCount;
private boolean mDeviceError;
+ private float mMaxPreviewFps;
private ArrayList<CameraStreamStats> mStreamStats;
public CameraSessionStats() {
@@ -67,6 +68,7 @@ public class CameraSessionStats implements Parcelable {
mApiLevel = -1;
mIsNdk = false;
mLatencyMs = -1;
+ mMaxPreviewFps = 0;
mSessionType = -1;
mInternalReconfigure = -1;
mRequestCount = 0;
@@ -77,7 +79,7 @@ public class CameraSessionStats implements Parcelable {
public CameraSessionStats(String cameraId, int facing, int newCameraState,
String clientName, int apiLevel, boolean isNdk, int creationDuration,
- int sessionType, int internalReconfigure) {
+ float maxPreviewFps, int sessionType, int internalReconfigure) {
mCameraId = cameraId;
mFacing = facing;
mNewCameraState = newCameraState;
@@ -85,6 +87,7 @@ public class CameraSessionStats implements Parcelable {
mApiLevel = apiLevel;
mIsNdk = isNdk;
mLatencyMs = creationDuration;
+ mMaxPreviewFps = maxPreviewFps;
mSessionType = sessionType;
mInternalReconfigure = internalReconfigure;
mStreamStats = new ArrayList<CameraStreamStats>();
@@ -121,6 +124,7 @@ public class CameraSessionStats implements Parcelable {
dest.writeInt(mApiLevel);
dest.writeBoolean(mIsNdk);
dest.writeInt(mLatencyMs);
+ dest.writeFloat(mMaxPreviewFps);
dest.writeInt(mSessionType);
dest.writeInt(mInternalReconfigure);
dest.writeLong(mRequestCount);
@@ -137,6 +141,7 @@ public class CameraSessionStats implements Parcelable {
mApiLevel = in.readInt();
mIsNdk = in.readBoolean();
mLatencyMs = in.readInt();
+ mMaxPreviewFps = in.readFloat();
mSessionType = in.readInt();
mInternalReconfigure = in.readInt();
mRequestCount = in.readLong();
@@ -176,6 +181,10 @@ public class CameraSessionStats implements Parcelable {
return mLatencyMs;
}
+ public float getMaxPreviewFps() {
+ return mMaxPreviewFps;
+ }
+
public int getSessionType() {
return mSessionType;
}
diff --git a/core/java/android/hardware/CameraStreamStats.java b/core/java/android/hardware/CameraStreamStats.java
index 823d454ee16b..7b24cc4836d0 100644
--- a/core/java/android/hardware/CameraStreamStats.java
+++ b/core/java/android/hardware/CameraStreamStats.java
@@ -15,8 +15,8 @@
*/
package android.hardware;
-import android.hardware.camera2.params.DynamicRangeProfiles;
import android.hardware.camera2.CameraMetadata;
+import android.hardware.camera2.params.DynamicRangeProfiles;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
@@ -37,6 +37,7 @@ public class CameraStreamStats implements Parcelable {
private int mWidth;
private int mHeight;
private int mFormat;
+ private float mMaxPreviewFps;
private int mDataSpace;
private long mUsage;
private long mRequestCount;
@@ -56,6 +57,7 @@ public class CameraStreamStats implements Parcelable {
mWidth = 0;
mHeight = 0;
mFormat = 0;
+ mMaxPreviewFps = 0;
mDataSpace = 0;
mUsage = 0;
mRequestCount = 0;
@@ -68,13 +70,14 @@ public class CameraStreamStats implements Parcelable {
mStreamUseCase = CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
}
- public CameraStreamStats(int width, int height, int format,
+ public CameraStreamStats(int width, int height, int format, float maxPreviewFps,
int dataSpace, long usage, long requestCount, long errorCount,
int startLatencyMs, int maxHalBuffers, int maxAppBuffers, long dynamicRangeProfile,
int streamUseCase) {
mWidth = width;
mHeight = height;
mFormat = format;
+ mMaxPreviewFps = maxPreviewFps;
mDataSpace = dataSpace;
mUsage = usage;
mRequestCount = requestCount;
@@ -120,6 +123,7 @@ public class CameraStreamStats implements Parcelable {
dest.writeInt(mWidth);
dest.writeInt(mHeight);
dest.writeInt(mFormat);
+ dest.writeFloat(mMaxPreviewFps);
dest.writeInt(mDataSpace);
dest.writeLong(mUsage);
dest.writeLong(mRequestCount);
@@ -138,6 +142,7 @@ public class CameraStreamStats implements Parcelable {
mWidth = in.readInt();
mHeight = in.readInt();
mFormat = in.readInt();
+ mMaxPreviewFps = in.readFloat();
mDataSpace = in.readInt();
mUsage = in.readLong();
mRequestCount = in.readLong();
@@ -164,6 +169,10 @@ public class CameraStreamStats implements Parcelable {
return mFormat;
}
+ public float getMaxPreviewFps() {
+ return mMaxPreviewFps;
+ }
+
public int getDataSpace() {
return mDataSpace;
}
diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java
index 01f0cb637105..7db99f1da130 100644
--- a/services/core/java/com/android/server/camera/CameraServiceProxy.java
+++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java
@@ -184,6 +184,9 @@ public class CameraServiceProxy extends SystemService
// Must be equal to number of CameraStreamProto in CameraActionEvent
private static final int MAX_STREAM_STATISTICS = 5;
+ private static final float MIN_PREVIEW_FPS = 30.0f;
+ private static final float MAX_PREVIEW_FPS = 60.0f;
+
private final Context mContext;
private final ServiceThread mHandlerThread;
private final Handler mHandler;
@@ -821,6 +824,7 @@ public class CameraServiceProxy extends SystemService
Slog.v(TAG, "Stream " + i + ": width " + streamProtos[i].width
+ ", height " + streamProtos[i].height
+ ", format " + streamProtos[i].format
+ + ", maxPreviewFps " + streamStats.getMaxPreviewFps()
+ ", dataSpace " + streamProtos[i].dataSpace
+ ", usage " + streamProtos[i].usage
+ ", requestCount " + streamProtos[i].requestCount
@@ -1015,6 +1019,11 @@ public class CameraServiceProxy extends SystemService
return false;
}
+ private float getMinFps(CameraSessionStats cameraState) {
+ float maxFps = cameraState.getMaxPreviewFps();
+ return Math.max(Math.min(maxFps, MAX_PREVIEW_FPS), MIN_PREVIEW_FPS);
+ }
+
private void updateActivityCount(CameraSessionStats cameraState) {
String cameraId = cameraState.getCameraId();
int newCameraState = cameraState.getNewCameraState();
@@ -1068,9 +1077,9 @@ public class CameraServiceProxy extends SystemService
if (!alreadyActivePackage) {
WindowManagerInternal wmi =
LocalServices.getService(WindowManagerInternal.class);
- // TODO(b/209669709): populate min.max refreshRate based on
- // the camera capture speed
- wmi.addRefreshRateRangeForPackage(clientName, 60.0f, 60.0f);
+ float minFps = getMinFps(cameraState);
+ wmi.addRefreshRateRangeForPackage(clientName,
+ minFps, MAX_PREVIEW_FPS);
}
// Update activity events