Merge "Camera: Trace still capture requests"

gugelfrei
TreeHugger Robot 6 years ago committed by Android (Google) Code Review
commit d3dcfbe703

@ -2738,13 +2738,13 @@ void Camera3Device::setErrorStateLockedV(const char *fmt, va_list args) {
status_t Camera3Device::registerInFlight(uint32_t frameNumber, status_t Camera3Device::registerInFlight(uint32_t frameNumber,
int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
bool hasAppCallback, nsecs_t maxExpectedDuration, bool hasAppCallback, nsecs_t maxExpectedDuration,
std::set<String8>& physicalCameraIds) { std::set<String8>& physicalCameraIds, bool isStillCapture) {
ATRACE_CALL(); ATRACE_CALL();
Mutex::Autolock l(mInFlightLock); Mutex::Autolock l(mInFlightLock);
ssize_t res; ssize_t res;
res = mInFlightMap.add(frameNumber, InFlightRequest(numBuffers, resultExtras, hasInput, res = mInFlightMap.add(frameNumber, InFlightRequest(numBuffers, resultExtras, hasInput,
hasAppCallback, maxExpectedDuration, physicalCameraIds)); hasAppCallback, maxExpectedDuration, physicalCameraIds, isStillCapture));
if (res < 0) return res; if (res < 0) return res;
if (mInFlightMap.size() == 1) { if (mInFlightMap.size() == 1) {
@ -2810,6 +2810,10 @@ void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {
if (request.numBuffersLeft == 0 && if (request.numBuffersLeft == 0 &&
(request.skipResultMetadata || (request.skipResultMetadata ||
(request.haveResultMetadata && shutterTimestamp != 0))) { (request.haveResultMetadata && shutterTimestamp != 0))) {
if (request.stillCapture) {
ATRACE_ASYNC_END("still capture", frameNumber);
}
ATRACE_ASYNC_END("frame capture", frameNumber); ATRACE_ASYNC_END("frame capture", frameNumber);
// Sanity check - if sensor timestamp matches shutter timestamp in the // Sanity check - if sensor timestamp matches shutter timestamp in the
@ -4939,12 +4943,21 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
if (batchedRequest && i != mNextRequests.size()-1) { if (batchedRequest && i != mNextRequests.size()-1) {
hasCallback = false; 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, res = parent->registerInFlight(halRequest->frame_number,
totalNumBuffers, captureRequest->mResultExtras, totalNumBuffers, captureRequest->mResultExtras,
/*hasInput*/halRequest->input_buffer != NULL, /*hasInput*/halRequest->input_buffer != NULL,
hasCallback, hasCallback,
calculateMaxExpectedDuration(halRequest->settings), calculateMaxExpectedDuration(halRequest->settings),
requestedPhysicalCameras); requestedPhysicalCameras, isStillCapture);
ALOGVV("%s: registered in flight requestId = %" PRId32 ", frameNumber = %" PRId64 ALOGVV("%s: registered in flight requestId = %" PRId32 ", frameNumber = %" PRId64
", burstId = %" PRId32 ".", ", burstId = %" PRId32 ".",
__FUNCTION__, __FUNCTION__,

@ -994,6 +994,9 @@ class Camera3Device :
// Map of physicalCameraId <-> Metadata // Map of physicalCameraId <-> Metadata
std::vector<PhysicalCaptureResultInfo> physicalMetadatas; std::vector<PhysicalCaptureResultInfo> physicalMetadatas;
// Indicates a still capture request.
bool stillCapture;
// Default constructor needed by KeyedVector // Default constructor needed by KeyedVector
InFlightRequest() : InFlightRequest() :
shutterTimestamp(0), shutterTimestamp(0),
@ -1004,12 +1007,13 @@ class Camera3Device :
hasInputBuffer(false), hasInputBuffer(false),
hasCallback(true), hasCallback(true),
maxExpectedDuration(kDefaultExpectedDuration), maxExpectedDuration(kDefaultExpectedDuration),
skipResultMetadata(false) { skipResultMetadata(false),
stillCapture(false) {
} }
InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput, InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput,
bool hasAppCallback, nsecs_t maxDuration, bool hasAppCallback, nsecs_t maxDuration,
const std::set<String8>& physicalCameraIdSet) : const std::set<String8>& physicalCameraIdSet, bool isStillCapture) :
shutterTimestamp(0), shutterTimestamp(0),
sensorTimestamp(0), sensorTimestamp(0),
requestStatus(OK), requestStatus(OK),
@ -1020,7 +1024,8 @@ class Camera3Device :
hasCallback(hasAppCallback), hasCallback(hasAppCallback),
maxExpectedDuration(maxDuration), maxExpectedDuration(maxDuration),
skipResultMetadata(false), skipResultMetadata(false),
physicalCameraIds(physicalCameraIdSet) { physicalCameraIds(physicalCameraIdSet),
stillCapture(isStillCapture) {
} }
}; };
@ -1034,10 +1039,10 @@ class Camera3Device :
nsecs_t mExpectedInflightDuration = 0; nsecs_t mExpectedInflightDuration = 0;
int mInFlightStatusId; int mInFlightStatusId;
status_t registerInFlight(uint32_t frameNumber, status_t registerInFlight(uint32_t frameNumber,
int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, 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 * Returns the maximum expected time it'll take for all currently in-flight

Loading…
Cancel
Save