1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package android.hardware; 17 import android.os.Parcel; 18 import android.os.Parcelable; 19 20 import java.util.ArrayList; 21 import java.util.List; 22 /** 23 * The camera action state used for passing camera usage information from 24 * camera service to camera service proxy . 25 * 26 * Include camera id, facing, state, client apk name, apiLevel, isNdk, 27 * and session/stream statistics. 28 * 29 * @hide 30 */ 31 public class CameraSessionStats implements Parcelable { 32 public static final int CAMERA_STATE_OPEN = 0; 33 public static final int CAMERA_STATE_ACTIVE = 1; 34 public static final int CAMERA_STATE_IDLE = 2; 35 public static final int CAMERA_STATE_CLOSED = 3; 36 37 /** 38 * Values for notifyCameraState facing 39 */ 40 public static final int CAMERA_FACING_BACK = 0; 41 public static final int CAMERA_FACING_FRONT = 1; 42 public static final int CAMERA_FACING_EXTERNAL = 2; 43 44 /** 45 * Values for notifyCameraState api level 46 */ 47 public static final int CAMERA_API_LEVEL_1 = 1; 48 public static final int CAMERA_API_LEVEL_2 = 2; 49 50 private String mCameraId; 51 private int mFacing; 52 private int mNewCameraState; 53 private String mClientName; 54 private int mApiLevel; 55 private boolean mIsNdk; 56 private int mLatencyMs; 57 private int mSessionType; 58 private int mInternalReconfigure; 59 private long mRequestCount; 60 private long mResultErrorCount; 61 private boolean mDeviceError; 62 private ArrayList<CameraStreamStats> mStreamStats; 63 CameraSessionStats()64 public CameraSessionStats() { 65 mFacing = -1; 66 mNewCameraState = -1; 67 mApiLevel = -1; 68 mIsNdk = false; 69 mLatencyMs = -1; 70 mSessionType = -1; 71 mInternalReconfigure = -1; 72 mRequestCount = 0; 73 mResultErrorCount = 0; 74 mDeviceError = false; 75 mStreamStats = new ArrayList<CameraStreamStats>(); 76 } 77 CameraSessionStats(String cameraId, int facing, int newCameraState, String clientName, int apiLevel, boolean isNdk, int creationDuration, int sessionType, int internalReconfigure)78 public CameraSessionStats(String cameraId, int facing, int newCameraState, 79 String clientName, int apiLevel, boolean isNdk, int creationDuration, 80 int sessionType, int internalReconfigure) { 81 mCameraId = cameraId; 82 mFacing = facing; 83 mNewCameraState = newCameraState; 84 mClientName = clientName; 85 mApiLevel = apiLevel; 86 mIsNdk = isNdk; 87 mLatencyMs = creationDuration; 88 mSessionType = sessionType; 89 mInternalReconfigure = internalReconfigure; 90 mStreamStats = new ArrayList<CameraStreamStats>(); 91 } 92 93 public static final @android.annotation.NonNull Parcelable.Creator<CameraSessionStats> CREATOR = 94 new Parcelable.Creator<CameraSessionStats>() { 95 @Override 96 public CameraSessionStats createFromParcel(Parcel in) { 97 return new CameraSessionStats(in); 98 } 99 100 @Override 101 public CameraSessionStats[] newArray(int size) { 102 return new CameraSessionStats[size]; 103 } 104 }; 105 CameraSessionStats(Parcel in)106 private CameraSessionStats(Parcel in) { 107 readFromParcel(in); 108 } 109 110 @Override describeContents()111 public int describeContents() { 112 return 0; 113 } 114 115 @Override writeToParcel(Parcel dest, int flags)116 public void writeToParcel(Parcel dest, int flags) { 117 dest.writeString(mCameraId); 118 dest.writeInt(mFacing); 119 dest.writeInt(mNewCameraState); 120 dest.writeString(mClientName); 121 dest.writeInt(mApiLevel); 122 dest.writeBoolean(mIsNdk); 123 dest.writeInt(mLatencyMs); 124 dest.writeInt(mSessionType); 125 dest.writeInt(mInternalReconfigure); 126 dest.writeLong(mRequestCount); 127 dest.writeLong(mResultErrorCount); 128 dest.writeBoolean(mDeviceError); 129 dest.writeTypedList(mStreamStats); 130 } 131 readFromParcel(Parcel in)132 public void readFromParcel(Parcel in) { 133 mCameraId = in.readString(); 134 mFacing = in.readInt(); 135 mNewCameraState = in.readInt(); 136 mClientName = in.readString(); 137 mApiLevel = in.readInt(); 138 mIsNdk = in.readBoolean(); 139 mLatencyMs = in.readInt(); 140 mSessionType = in.readInt(); 141 mInternalReconfigure = in.readInt(); 142 mRequestCount = in.readLong(); 143 mResultErrorCount = in.readLong(); 144 mDeviceError = in.readBoolean(); 145 146 ArrayList<CameraStreamStats> streamStats = new ArrayList<CameraStreamStats>(); 147 in.readTypedList(streamStats, CameraStreamStats.CREATOR); 148 mStreamStats = streamStats; 149 } 150 getCameraId()151 public String getCameraId() { 152 return mCameraId; 153 } 154 getFacing()155 public int getFacing() { 156 return mFacing; 157 } 158 getNewCameraState()159 public int getNewCameraState() { 160 return mNewCameraState; 161 } 162 getClientName()163 public String getClientName() { 164 return mClientName; 165 } 166 getApiLevel()167 public int getApiLevel() { 168 return mApiLevel; 169 } 170 isNdk()171 public boolean isNdk() { 172 return mIsNdk; 173 } 174 getLatencyMs()175 public int getLatencyMs() { 176 return mLatencyMs; 177 } 178 getSessionType()179 public int getSessionType() { 180 return mSessionType; 181 } 182 getInternalReconfigureCount()183 public int getInternalReconfigureCount() { 184 return mInternalReconfigure; 185 } 186 getRequestCount()187 public long getRequestCount() { 188 return mRequestCount; 189 } 190 getResultErrorCount()191 public long getResultErrorCount() { 192 return mResultErrorCount; 193 } 194 getDeviceErrorFlag()195 public boolean getDeviceErrorFlag() { 196 return mDeviceError; 197 } 198 getStreamStats()199 public List<CameraStreamStats> getStreamStats() { 200 return mStreamStats; 201 } 202 } 203