cameraservice: Log session index
For tracking camera performance, it is helpful to know the order in
which camera sessions were created.
This CL adds a sessionIndex field to CameraSessionStats which tracks
the order in which sessions were created. This field is logged by
ICameraServiceProxy.
Bug: 236318755
Test: No functional change.
`atest CtsCameraTestCases` passes
Change-Id: I5a5accdb2fd3d1de6e7ec31f3e67faaeccb0d3dc
diff --git a/core/java/android/hardware/CameraSessionStats.java b/core/java/android/hardware/CameraSessionStats.java
index 79a551a..d59295e 100644
--- a/core/java/android/hardware/CameraSessionStats.java
+++ b/core/java/android/hardware/CameraSessionStats.java
@@ -64,6 +64,7 @@
private ArrayList<CameraStreamStats> mStreamStats;
private String mUserTag;
private int mVideoStabilizationMode;
+ private int mSessionIndex;
public CameraSessionStats() {
mFacing = -1;
@@ -80,11 +81,13 @@
mDeviceError = false;
mStreamStats = new ArrayList<CameraStreamStats>();
mVideoStabilizationMode = -1;
+ mSessionIndex = 0;
}
public CameraSessionStats(String cameraId, int facing, int newCameraState,
String clientName, int apiLevel, boolean isNdk, int creationDuration,
- float maxPreviewFps, int sessionType, int internalReconfigure, long logId) {
+ float maxPreviewFps, int sessionType, int internalReconfigure, long logId,
+ int sessionIdx) {
mCameraId = cameraId;
mFacing = facing;
mNewCameraState = newCameraState;
@@ -97,6 +100,7 @@
mSessionType = sessionType;
mInternalReconfigure = internalReconfigure;
mStreamStats = new ArrayList<CameraStreamStats>();
+ mSessionIndex = sessionIdx;
}
public static final @android.annotation.NonNull Parcelable.Creator<CameraSessionStats> CREATOR =
@@ -140,6 +144,7 @@
dest.writeTypedList(mStreamStats);
dest.writeString(mUserTag);
dest.writeInt(mVideoStabilizationMode);
+ dest.writeInt(mSessionIndex);
}
public void readFromParcel(Parcel in) {
@@ -164,6 +169,7 @@
mUserTag = in.readString();
mVideoStabilizationMode = in.readInt();
+ mSessionIndex = in.readInt();
}
public String getCameraId() {
@@ -233,4 +239,8 @@
public int getVideoStabilizationMode() {
return mVideoStabilizationMode;
}
+
+ public int getSessionIndex() {
+ return mSessionIndex;
+ }
}
diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java
index e8af840..0315352 100644
--- a/services/core/java/com/android/server/camera/CameraServiceProxy.java
+++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java
@@ -244,12 +244,13 @@
public String mUserTag;
public int mVideoStabilizationMode;
public final long mLogId;
+ public final int mSessionIndex;
private long mDurationOrStartTimeMs; // Either start time, or duration once completed
CameraUsageEvent(String cameraId, int facing, String clientName, int apiLevel,
boolean isNdk, int action, int latencyMs, int operatingMode, boolean deviceError,
- long logId) {
+ long logId, int sessionIdx) {
mCameraId = cameraId;
mCameraFacing = facing;
mClientName = clientName;
@@ -262,6 +263,7 @@
mOperatingMode = operatingMode;
mDeviceError = deviceError;
mLogId = logId;
+ mSessionIndex = sessionIdx;
}
public void markCompleted(int internalReconfigure, long requestCount,
@@ -844,7 +846,8 @@
+ ", streamCount is " + streamCount
+ ", userTag is " + e.mUserTag
+ ", videoStabilizationMode " + e.mVideoStabilizationMode
- + ", logId " + e.mLogId);
+ + ", logId " + e.mLogId
+ + ", sessionIndex " + e.mSessionIndex);
}
// Convert from CameraStreamStats to CameraStreamProto
CameraStreamProto[] streamProtos = new CameraStreamProto[MAX_STREAM_STATISTICS];
@@ -904,7 +907,7 @@
MessageNano.toByteArray(streamProtos[2]),
MessageNano.toByteArray(streamProtos[3]),
MessageNano.toByteArray(streamProtos[4]),
- e.mUserTag, e.mVideoStabilizationMode, e.mLogId);
+ e.mUserTag, e.mVideoStabilizationMode, e.mLogId, e.mSessionIndex);
}
}
@@ -1094,6 +1097,7 @@
String userTag = cameraState.getUserTag();
int videoStabilizationMode = cameraState.getVideoStabilizationMode();
long logId = cameraState.getLogId();
+ int sessionIdx = cameraState.getSessionIndex();
synchronized(mLock) {
// Update active camera list and notify NFC if necessary
boolean wasEmpty = mActiveCameraUsage.isEmpty();
@@ -1115,7 +1119,7 @@
CameraUsageEvent openEvent = new CameraUsageEvent(
cameraId, facing, clientName, apiLevel, isNdk,
FrameworkStatsLog.CAMERA_ACTION_EVENT__ACTION__OPEN,
- latencyMs, sessionType, deviceError, logId);
+ latencyMs, sessionType, deviceError, logId, sessionIdx);
mCameraUsageHistory.add(openEvent);
break;
case CameraSessionStats.CAMERA_STATE_ACTIVE:
@@ -1142,7 +1146,7 @@
CameraUsageEvent newEvent = new CameraUsageEvent(
cameraId, facing, clientName, apiLevel, isNdk,
FrameworkStatsLog.CAMERA_ACTION_EVENT__ACTION__SESSION,
- latencyMs, sessionType, deviceError, logId);
+ latencyMs, sessionType, deviceError, logId, sessionIdx);
CameraUsageEvent oldEvent = mActiveCameraUsage.put(cameraId, newEvent);
if (oldEvent != null) {
Slog.w(TAG, "Camera " + cameraId + " was already marked as active");
@@ -1186,7 +1190,7 @@
CameraUsageEvent closeEvent = new CameraUsageEvent(
cameraId, facing, clientName, apiLevel, isNdk,
FrameworkStatsLog.CAMERA_ACTION_EVENT__ACTION__CLOSE,
- latencyMs, sessionType, deviceError, logId);
+ latencyMs, sessionType, deviceError, logId, sessionIdx);
mCameraUsageHistory.add(closeEvent);
}