Camera: Trace still capture requests
Trace any requests that include a still capture
intent.
Bug: 112008412
Test: Camera CTS
Change-Id: I6e11feff24a69f91eaa9f82410dd551b3fabc872
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 491ed72..4c6718c 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -2738,13 +2738,13 @@
status_t Camera3Device::registerInFlight(uint32_t frameNumber,
int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
bool hasAppCallback, nsecs_t maxExpectedDuration,
- std::set<String8>& physicalCameraIds) {
+ std::set<String8>& physicalCameraIds, bool isStillCapture) {
ATRACE_CALL();
Mutex::Autolock l(mInFlightLock);
ssize_t res;
res = mInFlightMap.add(frameNumber, InFlightRequest(numBuffers, resultExtras, hasInput,
- hasAppCallback, maxExpectedDuration, physicalCameraIds));
+ hasAppCallback, maxExpectedDuration, physicalCameraIds, isStillCapture));
if (res < 0) return res;
if (mInFlightMap.size() == 1) {
@@ -2810,6 +2810,10 @@
if (request.numBuffersLeft == 0 &&
(request.skipResultMetadata ||
(request.haveResultMetadata && shutterTimestamp != 0))) {
+ if (request.stillCapture) {
+ ATRACE_ASYNC_END("still capture", frameNumber);
+ }
+
ATRACE_ASYNC_END("frame capture", frameNumber);
// Sanity check - if sensor timestamp matches shutter timestamp in the
@@ -4939,12 +4943,21 @@
if (batchedRequest && i != mNextRequests.size()-1) {
hasCallback = false;
}
+ bool isStillCapture = false;
+ if (!mNextRequests[0].captureRequest->mSettingsList.begin()->metadata.isEmpty()) {
+ camera_metadata_ro_entry_t e = camera_metadata_ro_entry_t();
+ find_camera_metadata_ro_entry(halRequest->settings, ANDROID_CONTROL_CAPTURE_INTENT, &e);
+ if ((e.count > 0) && (e.data.u8[0] == ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE)) {
+ isStillCapture = true;
+ ATRACE_ASYNC_BEGIN("still capture", mNextRequests[i].halRequest.frame_number);
+ }
+ }
res = parent->registerInFlight(halRequest->frame_number,
totalNumBuffers, captureRequest->mResultExtras,
/*hasInput*/halRequest->input_buffer != NULL,
hasCallback,
calculateMaxExpectedDuration(halRequest->settings),
- requestedPhysicalCameras);
+ requestedPhysicalCameras, isStillCapture);
ALOGVV("%s: registered in flight requestId = %" PRId32 ", frameNumber = %" PRId64
", burstId = %" PRId32 ".",
__FUNCTION__,
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index 96212ab..51e1fb0 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -994,6 +994,9 @@
// Map of physicalCameraId <-> Metadata
std::vector<PhysicalCaptureResultInfo> physicalMetadatas;
+ // Indicates a still capture request.
+ bool stillCapture;
+
// Default constructor needed by KeyedVector
InFlightRequest() :
shutterTimestamp(0),
@@ -1004,12 +1007,13 @@
hasInputBuffer(false),
hasCallback(true),
maxExpectedDuration(kDefaultExpectedDuration),
- skipResultMetadata(false) {
+ skipResultMetadata(false),
+ stillCapture(false) {
}
InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput,
bool hasAppCallback, nsecs_t maxDuration,
- const std::set<String8>& physicalCameraIdSet) :
+ const std::set<String8>& physicalCameraIdSet, bool isStillCapture) :
shutterTimestamp(0),
sensorTimestamp(0),
requestStatus(OK),
@@ -1020,7 +1024,8 @@
hasCallback(hasAppCallback),
maxExpectedDuration(maxDuration),
skipResultMetadata(false),
- physicalCameraIds(physicalCameraIdSet) {
+ physicalCameraIds(physicalCameraIdSet),
+ stillCapture(isStillCapture) {
}
};
@@ -1034,10 +1039,10 @@
nsecs_t mExpectedInflightDuration = 0;
int mInFlightStatusId;
-
status_t registerInFlight(uint32_t frameNumber,
int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
- bool callback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds);
+ bool callback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds,
+ bool isStillCapture);
/**
* Returns the maximum expected time it'll take for all currently in-flight