Merge "Provide refresh rate range to the window manager based on the maximum frame rate of each camera stream." into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1f854ad7c3
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user