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

Commit 1c1acd45 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Enhance camera atoms for system health"

parents 7a9ec898 b2443990
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -528,6 +528,7 @@ java_library {
        "android.hardware.vibrator-V1.3-java",
        "android.system.keystore2-java",
        "android.system.suspend.control.internal-java",
        "cameraprotosnano",
        "devicepolicyprotosnano",

        "com.android.sysprop.apex",
+55 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import "frameworks/base/core/proto/android/server/job/enums.proto";
import "frameworks/base/core/proto/android/server/location/enums.proto";
import "frameworks/base/core/proto/android/service/procstats_enum.proto";
import "frameworks/base/core/proto/android/service/usb.proto";
import "frameworks/base/core/proto/android/stats/camera/camera.proto";
import "frameworks/base/core/proto/android/stats/connectivity/network_stack.proto";
import "frameworks/base/core/proto/android/stats/connectivity/tethering.proto";
import "frameworks/base/core/proto/android/stats/dnsresolver/dns_resolver.proto";
@@ -9950,10 +9951,12 @@ message DisplayJankReported {
 *   frameworks/base/services/core/java/com/android/server/camera/CameraServiceProxy.java
 */
message CameraActionEvent {
    // Camera session duration
    // Camera session duration in milliseconds if action is SESSION.
    // 0 if action is OPEN or CLOSE.
    optional int64 duration_millis = 1;

    // Camera API level used
    // Camera API level used.
    // 1 for camera1 API, and 2 for camera2 API.
    optional int32 api_level = 2;

    // Name of client package
@@ -9967,6 +9970,56 @@ message CameraActionEvent {
        EXTERNAL = 3;
    }
    optional Facing facing = 4;

    // Camera ID
    optional string camera_id = 5;

    // Camera action type
    enum Action {
        UNKNOWN_ACTION = 0;
        OPEN = 1;
        CLOSE = 2;
        SESSION = 3;
    }
    optional Action action = 6;

    // Whether the client is accessing camera using ndk
    optional bool is_ndk = 7;

    // Action OPEN: Open latency
    // Action CLOSE: Close latency
    // Action SESSION: Camera session creation duration.
    //                 If this entry is reusing an existing session, the value is -1.
    optional int32 latency_millis = 8;

    // session type: 0 for normal mode, 1 for constrained high speed mode
    optional int32 operating_mode = 9;

    // If actioh is SESSION: number of internal reconfigurations
    // Else: 0
    optional int32 internal_reconfig = 10;

    // Number of requests for this capture session. Only applicable to SESSION
    // action.
    optional int64 request_count = 11;
    // Number of result errors. Only applicable to SESSION action.
    optional int64 result_error_count = 12;
    // Whether the device runs into error state.
    optional bool device_error = 13;

    // If action is SESSION: Stream states
    // Else: stream_count = 0
    optional int32 stream_count = 14;
    optional android.stats.camera.CameraStreamProto stream_1 = 15
    [(android.os.statsd.log_mode) = MODE_BYTES];
    optional android.stats.camera.CameraStreamProto stream_2 = 16
    [(android.os.statsd.log_mode) = MODE_BYTES];
    optional android.stats.camera.CameraStreamProto stream_3 = 17
    [(android.os.statsd.log_mode) = MODE_BYTES];
    optional android.stats.camera.CameraStreamProto stream_4 = 18
    [(android.os.statsd.log_mode) = MODE_BYTES];
    optional android.stats.camera.CameraStreamProto stream_5 = 19
    [(android.os.statsd.log_mode) = MODE_BYTES];
}

/**
+1 −0
Original line number Diff line number Diff line
@@ -6749,6 +6749,7 @@ android.sysprop.-$$Lambda$TelephonyProperties$illdaSIVv8AlxP9uc8NqC3Ta1tA
android.sysprop.-$$Lambda$TelephonyProperties$klELuV5zVSqFveC5l6c3FSJmLAU
android.sysprop.-$$Lambda$TelephonyProperties$pFU8zg4eHAdooeRLJg1WBG52cKk
android.sysprop.-$$Lambda$TelephonyProperties$sXc3eBCFirzHWb9pvClH7EsiM_Q
android.stats.camera.nano.CameraStreamProto
android.sysprop.AdbProperties
android.sysprop.ApexProperties
android.sysprop.ContactsProperties
+202 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package android.hardware;
import android.os.Parcel;
import android.os.Parcelable;

import java.util.ArrayList;
import java.util.List;
/**
 * The camera action state used for passing camera usage information from
 * camera service to camera service proxy .
 *
 * Include camera id, facing, state, client apk name, apiLevel, isNdk,
 * and session/stream statistics.
 *
 * @hide
 */
public class CameraSessionStats implements Parcelable {
    public static final int CAMERA_STATE_OPEN = 0;
    public static final int CAMERA_STATE_ACTIVE = 1;
    public static final int CAMERA_STATE_IDLE = 2;
    public static final int CAMERA_STATE_CLOSED = 3;

    /**
     * Values for notifyCameraState facing
     */
    public static final int CAMERA_FACING_BACK = 0;
    public static final int CAMERA_FACING_FRONT = 1;
    public static final int CAMERA_FACING_EXTERNAL = 2;

    /**
     * Values for notifyCameraState api level
     */
    public static final int CAMERA_API_LEVEL_1 = 1;
    public static final int CAMERA_API_LEVEL_2 = 2;

    private String mCameraId;
    private int mFacing;
    private int mNewCameraState;
    private String mClientName;
    private int mApiLevel;
    private boolean mIsNdk;
    private int mLatencyMs;
    private int mSessionType;
    private int mInternalReconfigure;
    private long mRequestCount;
    private long mResultErrorCount;
    private boolean mDeviceError;
    private ArrayList<CameraStreamStats> mStreamStats;

    public CameraSessionStats() {
        mFacing = -1;
        mNewCameraState = -1;
        mApiLevel = -1;
        mIsNdk = false;
        mLatencyMs = -1;
        mSessionType = -1;
        mInternalReconfigure = -1;
        mRequestCount = 0;
        mResultErrorCount = 0;
        mDeviceError = false;
        mStreamStats = new ArrayList<CameraStreamStats>();
    }

    public CameraSessionStats(String cameraId, int facing, int newCameraState,
            String clientName, int apiLevel, boolean isNdk, int creationDuration,
            int sessionType, int internalReconfigure) {
        mCameraId = cameraId;
        mFacing = facing;
        mNewCameraState = newCameraState;
        mClientName = clientName;
        mApiLevel = apiLevel;
        mIsNdk = isNdk;
        mLatencyMs = creationDuration;
        mSessionType = sessionType;
        mInternalReconfigure = internalReconfigure;
        mStreamStats = new ArrayList<CameraStreamStats>();
    }

    public static final @android.annotation.NonNull Parcelable.Creator<CameraSessionStats> CREATOR =
            new Parcelable.Creator<CameraSessionStats>() {
        @Override
        public CameraSessionStats createFromParcel(Parcel in) {
            return new CameraSessionStats(in);
        }

        @Override
        public CameraSessionStats[] newArray(int size) {
            return new CameraSessionStats[size];
        }
    };

    private CameraSessionStats(Parcel in) {
        readFromParcel(in);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(mCameraId);
        dest.writeInt(mFacing);
        dest.writeInt(mNewCameraState);
        dest.writeString(mClientName);
        dest.writeInt(mApiLevel);
        dest.writeBoolean(mIsNdk);
        dest.writeInt(mLatencyMs);
        dest.writeInt(mSessionType);
        dest.writeInt(mInternalReconfigure);
        dest.writeLong(mRequestCount);
        dest.writeLong(mResultErrorCount);
        dest.writeBoolean(mDeviceError);
        dest.writeTypedList(mStreamStats);
    }

    public void readFromParcel(Parcel in) {
        mCameraId = in.readString();
        mFacing = in.readInt();
        mNewCameraState = in.readInt();
        mClientName = in.readString();
        mApiLevel = in.readInt();
        mIsNdk = in.readBoolean();
        mLatencyMs = in.readInt();
        mSessionType = in.readInt();
        mInternalReconfigure = in.readInt();
        mRequestCount = in.readLong();
        mResultErrorCount = in.readLong();
        mDeviceError = in.readBoolean();

        ArrayList<CameraStreamStats> streamStats = new ArrayList<CameraStreamStats>();
        in.readTypedList(streamStats, CameraStreamStats.CREATOR);
        mStreamStats = streamStats;
    }

    public String getCameraId() {
        return mCameraId;
    }

    public int getFacing() {
        return mFacing;
    }

    public int getNewCameraState() {
        return mNewCameraState;
    }

    public String getClientName() {
        return mClientName;
    }

    public int getApiLevel() {
        return mApiLevel;
    }

    public boolean isNdk() {
        return mIsNdk;
    }

    public int getLatencyMs() {
        return mLatencyMs;
    }

    public int getSessionType() {
        return mSessionType;
    }

    public int getInternalReconfigureCount() {
        return mInternalReconfigure;
    }

    public long getRequestCount() {
        return mRequestCount;
    }

    public long getResultErrorCount() {
        return mResultErrorCount;
    }

    public boolean getDeviceErrorFlag() {
        return mDeviceError;
    }

    public List<CameraStreamStats> getStreamStats() {
        return mStreamStats;
    }
}
+169 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package android.hardware;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

import java.util.ArrayList;
/**
 * The camera stream statistics used for passing camera stream information from
 * camera service to camera service proxy.
 *
 * Include camera stream configuration, request/error counts, startup latency,
 * and latency/jitter histograms.
 *
 * @hide
 */
public class CameraStreamStats implements Parcelable {

    private int mWidth;
    private int mHeight;
    private int mFormat;
    private int mDataSpace;
    private long mUsage;
    private long mRequestCount;
    private long mErrorCount;
    private int mStartLatencyMs;
    private int mMaxHalBuffers;
    private int mMaxAppBuffers;

    private static final String TAG = "CameraStreamStats";

    public CameraStreamStats() {
        mWidth = 0;
        mHeight = 0;
        mFormat = 0;
        mDataSpace = 0;
        mUsage = 0;
        mRequestCount = 0;
        mErrorCount = 0;
        mStartLatencyMs = 0;
        mMaxHalBuffers = 0;
        mMaxAppBuffers = 0;
    }

    public CameraStreamStats(int width, int height, int format,
            int dataSpace, long usage, long requestCount, long errorCount,
            int startLatencyMs, int maxHalBuffers, int maxAppBuffers) {
        mWidth = width;
        mHeight = height;
        mFormat = format;
        mDataSpace = dataSpace;
        mUsage = usage;
        mRequestCount = requestCount;
        mErrorCount = errorCount;
        mStartLatencyMs = startLatencyMs;
        mMaxHalBuffers = maxHalBuffers;
        mMaxAppBuffers = maxAppBuffers;
    }

    public static final @android.annotation.NonNull Parcelable.Creator<CameraStreamStats> CREATOR =
            new Parcelable.Creator<CameraStreamStats>() {
        @Override
        public CameraStreamStats createFromParcel(Parcel in) {
            try {
                CameraStreamStats streamStats = new CameraStreamStats(in);
                return streamStats;
            } catch (Exception e) {
                Log.e(TAG, "Exception creating CameraStreamStats from parcel", e);
                return null;
            }
        }

        @Override
        public CameraStreamStats[] newArray(int size) {
            return new CameraStreamStats[size];
        }
    };

    private CameraStreamStats(Parcel in) {
        readFromParcel(in);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mWidth);
        dest.writeInt(mHeight);
        dest.writeInt(mFormat);
        dest.writeInt(mDataSpace);
        dest.writeLong(mUsage);
        dest.writeLong(mRequestCount);
        dest.writeLong(mErrorCount);
        dest.writeInt(mStartLatencyMs);
        dest.writeInt(mMaxHalBuffers);
        dest.writeInt(mMaxAppBuffers);
    }

    public void readFromParcel(Parcel in) {
        mWidth = in.readInt();
        mHeight = in.readInt();
        mFormat = in.readInt();
        mDataSpace = in.readInt();
        mUsage = in.readLong();
        mRequestCount = in.readLong();
        mErrorCount = in.readLong();
        mStartLatencyMs = in.readInt();
        mMaxHalBuffers = in.readInt();
        mMaxAppBuffers = in.readInt();
    }

    public int getWidth() {
        return mWidth;
    }

    public int getHeight() {
        return mHeight;
    }

    public int getFormat() {
        return mFormat;
    }

    public int getDataSpace() {
        return mDataSpace;
    }

    public long getUsage() {
        return mUsage;
    }

    public long getRequestCount() {
        return mRequestCount;
    }

    public long getErrorCount() {
        return mErrorCount;
    }

    public int getStartLatencyMs() {
        return mStartLatencyMs;
    }

    public int getMaxHalBuffers() {
        return mMaxHalBuffers;
    }

    public int getMaxAppBuffers() {
        return mMaxAppBuffers;
    }
}
Loading