diff options
| author | 2022-03-08 23:26:22 +0000 | |
|---|---|---|
| committer | 2022-03-08 23:26:22 +0000 | |
| commit | 1f854ad7c3454ca8e4e71df99309ac8fb58b373e (patch) | |
| tree | 53d8940c1125f60d5e097ba50b5fd406e03860ab | |
| parent | 5622ee0fd86bb9c00de1c6c51dee803730dd0efa (diff) | |
| parent | 447e815bd76fc29967c357442028d52014161d90 (diff) | |
Merge "Provide refresh rate range to the window manager based on the maximum frame rate of each camera stream." into tm-dev
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 |