Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f854ad7 authored by Austin Borger's avatar Austin Borger Committed by Android (Google) Code Review
Browse files

Merge "Provide refresh rate range to the window manager based on the maximum...

Merge "Provide refresh rate range to the window manager based on the maximum frame rate of each camera stream." into tm-dev
parents 5622ee0f 447e815b
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -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;
    }
+11 −2
Original line number Diff line number Diff line
@@ -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;
    }
+12 −3
Original line number Diff line number Diff line
@@ -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