Loading camera/camera_platform.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -267,3 +267,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { namespace: "camera_platform" name: "dumpsys_request_stream_ids" description: "Add stream id information to last request dumpsys" bug: "357913929" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file services/camera/libcameraservice/device3/Camera3Device.cpp +49 −14 Original line number Diff line number Diff line Loading @@ -612,10 +612,35 @@ status_t Camera3Device::dump(int fd, [[maybe_unused]] const Vector<String16> &ar { lines = " Last request sent:\n"; LatestRequestInfo lastRequestInfo = getLatestRequestInfoLocked(); // Print out output and input stream ids if (flags::dumpsys_request_stream_ids()) { if (lastRequestInfo.outputStreamIds.size() != 0) { lines += " Output Stream Ids:\n"; for (const auto &streamId: lastRequestInfo.outputStreamIds) { lines += " " + std::to_string(streamId) + "\n"; } } if (lastRequestInfo.inputStreamId != -1) { lines += " Input Stream Id: " + std::to_string(lastRequestInfo.inputStreamId) + "\n"; } } // Keeping this write() outside the flagged if makes it easier while // removing the flag. write(fd, lines.c_str(), lines.size()); lines = " Logical request settings:\n"; CameraMetadata lastRequestSettings = lastRequestInfo.requestSettings; write(fd, lines.c_str(), lines.size()); CameraMetadata lastRequest = getLatestRequestLocked(); lastRequest.dump(fd, /*verbosity*/2, /*indentation*/6); lastRequestSettings.dump(fd, /*verbosity=all info*/2, /*indentation*/6); if (flags::dumpsys_request_stream_ids()) { for (const auto& pair: lastRequestInfo.physicalRequestSettings) { lines = " Physical request settings for camera id " + pair.first + ":\n"; write(fd, lines.c_str(), lines.size()); pair.second.dump(fd, /*verbosity=all info*/2, /*indentation*/8); } } } if (dumpTemplates) { Loading Loading @@ -2911,13 +2936,13 @@ void Camera3Device::flushInflightRequests() { camera3::flushInflightRequests(states); } CameraMetadata Camera3Device::getLatestRequestLocked() { Camera3Device::LatestRequestInfo Camera3Device::getLatestRequestInfoLocked() { ALOGV("%s", __FUNCTION__); CameraMetadata retVal; LatestRequestInfo retVal; if (mRequestThread != NULL) { retVal = mRequestThread->getLatestRequest(); retVal = mRequestThread->getLatestRequestInfo(); } return retVal; Loading Loading @@ -3487,13 +3512,15 @@ void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) { if (halRequest.settings != nullptr) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); // Fill in latest request and physical request camera_metadata_t *cloned = clone_camera_metadata(halRequest.settings); mLatestRequest.acquire(cloned); mLatestRequestInfo.requestSettings.acquire(cloned); mLatestPhysicalRequest.clear(); mLatestRequestInfo.physicalRequestSettings.clear(); mLatestRequestInfo.outputStreamIds.clear(); for (uint32_t i = 0; i < halRequest.num_physcam_settings; i++) { cloned = clone_camera_metadata(halRequest.physcam_settings[i]); mLatestPhysicalRequest.emplace(halRequest.physcam_id[i], mLatestRequestInfo.physicalRequestSettings.emplace(halRequest.physcam_id[i], CameraMetadata(cloned)); } Loading @@ -3501,16 +3528,24 @@ void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) { int32_t inputStreamId = -1; if (halRequest.input_buffer != nullptr) { inputStreamId = Camera3Stream::cast(halRequest.input_buffer->stream)->getId(); mLatestRequestInfo.inputStreamId = inputStreamId; } for (size_t i = 0; i < halRequest.num_output_buffers; i++) { int32_t outputStreamId = Camera3Stream::cast(halRequest.output_buffers[i].stream)->getId(); mLatestRequestInfo.outputStreamIds.emplace(outputStreamId); } parent->monitorMetadata(TagMonitor::REQUEST, halRequest.frame_number, 0, mLatestRequest, mLatestPhysicalRequest, halRequest.output_buffers, 0, mLatestRequestInfo.requestSettings, mLatestRequestInfo.physicalRequestSettings, halRequest.output_buffers, halRequest.num_output_buffers, inputStreamId); } } if (parent != nullptr) { parent->collectRequestStats(halRequest.frame_number, mLatestRequest); parent->collectRequestStats(halRequest.frame_number, mLatestRequestInfo.requestSettings); } if (halRequest.settings != nullptr) { Loading Loading @@ -4170,13 +4205,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { return OK; } CameraMetadata Camera3Device::RequestThread::getLatestRequest() const { Camera3Device::LatestRequestInfo Camera3Device::RequestThread::getLatestRequestInfo() const { ATRACE_CALL(); Mutex::Autolock al(mLatestRequestMutex); ALOGV("RequestThread::%s", __FUNCTION__); return mLatestRequest; return mLatestRequestInfo; } bool Camera3Device::RequestThread::isStreamPending( Loading services/camera/libcameraservice/device3/Camera3Device.h +10 −4 Original line number Diff line number Diff line Loading @@ -736,12 +736,19 @@ class Camera3Device : virtual void applyMaxBatchSizeLocked( RequestList* requestList, const sp<camera3::Camera3OutputStreamInterface>& stream) = 0; struct LatestRequestInfo { CameraMetadata requestSettings; std::unordered_map<std::string, CameraMetadata> physicalRequestSettings; int32_t inputStreamId = -1; std::set<int32_t> outputStreamIds; }; /** * Get the last request submitted to the hal by the request thread. * * Must be called with mLock held. */ virtual CameraMetadata getLatestRequestLocked(); virtual LatestRequestInfo getLatestRequestInfoLocked(); virtual status_t injectionCameraInitialize(const std::string &injectCamId, sp<CameraProviderManager> manager) = 0; Loading Loading @@ -992,7 +999,7 @@ class Camera3Device : * Get the latest request that was sent to the HAL * with process_capture_request. */ CameraMetadata getLatestRequest() const; LatestRequestInfo getLatestRequestInfo() const; /** * Returns true if the stream is a target of any queued or repeating Loading Loading @@ -1192,8 +1199,7 @@ class Camera3Device : // android.request.id for latest process_capture_request int32_t mLatestRequestId; int32_t mLatestFailedRequestId; CameraMetadata mLatestRequest; std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest; LatestRequestInfo mLatestRequestInfo; typedef KeyedVector<uint32_t/*tag*/, RequestTrigger> TriggerMap; Mutex mTriggerMutex; Loading Loading
camera/camera_platform.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -267,3 +267,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { namespace: "camera_platform" name: "dumpsys_request_stream_ids" description: "Add stream id information to last request dumpsys" bug: "357913929" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file
services/camera/libcameraservice/device3/Camera3Device.cpp +49 −14 Original line number Diff line number Diff line Loading @@ -612,10 +612,35 @@ status_t Camera3Device::dump(int fd, [[maybe_unused]] const Vector<String16> &ar { lines = " Last request sent:\n"; LatestRequestInfo lastRequestInfo = getLatestRequestInfoLocked(); // Print out output and input stream ids if (flags::dumpsys_request_stream_ids()) { if (lastRequestInfo.outputStreamIds.size() != 0) { lines += " Output Stream Ids:\n"; for (const auto &streamId: lastRequestInfo.outputStreamIds) { lines += " " + std::to_string(streamId) + "\n"; } } if (lastRequestInfo.inputStreamId != -1) { lines += " Input Stream Id: " + std::to_string(lastRequestInfo.inputStreamId) + "\n"; } } // Keeping this write() outside the flagged if makes it easier while // removing the flag. write(fd, lines.c_str(), lines.size()); lines = " Logical request settings:\n"; CameraMetadata lastRequestSettings = lastRequestInfo.requestSettings; write(fd, lines.c_str(), lines.size()); CameraMetadata lastRequest = getLatestRequestLocked(); lastRequest.dump(fd, /*verbosity*/2, /*indentation*/6); lastRequestSettings.dump(fd, /*verbosity=all info*/2, /*indentation*/6); if (flags::dumpsys_request_stream_ids()) { for (const auto& pair: lastRequestInfo.physicalRequestSettings) { lines = " Physical request settings for camera id " + pair.first + ":\n"; write(fd, lines.c_str(), lines.size()); pair.second.dump(fd, /*verbosity=all info*/2, /*indentation*/8); } } } if (dumpTemplates) { Loading Loading @@ -2911,13 +2936,13 @@ void Camera3Device::flushInflightRequests() { camera3::flushInflightRequests(states); } CameraMetadata Camera3Device::getLatestRequestLocked() { Camera3Device::LatestRequestInfo Camera3Device::getLatestRequestInfoLocked() { ALOGV("%s", __FUNCTION__); CameraMetadata retVal; LatestRequestInfo retVal; if (mRequestThread != NULL) { retVal = mRequestThread->getLatestRequest(); retVal = mRequestThread->getLatestRequestInfo(); } return retVal; Loading Loading @@ -3487,13 +3512,15 @@ void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) { if (halRequest.settings != nullptr) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); // Fill in latest request and physical request camera_metadata_t *cloned = clone_camera_metadata(halRequest.settings); mLatestRequest.acquire(cloned); mLatestRequestInfo.requestSettings.acquire(cloned); mLatestPhysicalRequest.clear(); mLatestRequestInfo.physicalRequestSettings.clear(); mLatestRequestInfo.outputStreamIds.clear(); for (uint32_t i = 0; i < halRequest.num_physcam_settings; i++) { cloned = clone_camera_metadata(halRequest.physcam_settings[i]); mLatestPhysicalRequest.emplace(halRequest.physcam_id[i], mLatestRequestInfo.physicalRequestSettings.emplace(halRequest.physcam_id[i], CameraMetadata(cloned)); } Loading @@ -3501,16 +3528,24 @@ void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) { int32_t inputStreamId = -1; if (halRequest.input_buffer != nullptr) { inputStreamId = Camera3Stream::cast(halRequest.input_buffer->stream)->getId(); mLatestRequestInfo.inputStreamId = inputStreamId; } for (size_t i = 0; i < halRequest.num_output_buffers; i++) { int32_t outputStreamId = Camera3Stream::cast(halRequest.output_buffers[i].stream)->getId(); mLatestRequestInfo.outputStreamIds.emplace(outputStreamId); } parent->monitorMetadata(TagMonitor::REQUEST, halRequest.frame_number, 0, mLatestRequest, mLatestPhysicalRequest, halRequest.output_buffers, 0, mLatestRequestInfo.requestSettings, mLatestRequestInfo.physicalRequestSettings, halRequest.output_buffers, halRequest.num_output_buffers, inputStreamId); } } if (parent != nullptr) { parent->collectRequestStats(halRequest.frame_number, mLatestRequest); parent->collectRequestStats(halRequest.frame_number, mLatestRequestInfo.requestSettings); } if (halRequest.settings != nullptr) { Loading Loading @@ -4170,13 +4205,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { return OK; } CameraMetadata Camera3Device::RequestThread::getLatestRequest() const { Camera3Device::LatestRequestInfo Camera3Device::RequestThread::getLatestRequestInfo() const { ATRACE_CALL(); Mutex::Autolock al(mLatestRequestMutex); ALOGV("RequestThread::%s", __FUNCTION__); return mLatestRequest; return mLatestRequestInfo; } bool Camera3Device::RequestThread::isStreamPending( Loading
services/camera/libcameraservice/device3/Camera3Device.h +10 −4 Original line number Diff line number Diff line Loading @@ -736,12 +736,19 @@ class Camera3Device : virtual void applyMaxBatchSizeLocked( RequestList* requestList, const sp<camera3::Camera3OutputStreamInterface>& stream) = 0; struct LatestRequestInfo { CameraMetadata requestSettings; std::unordered_map<std::string, CameraMetadata> physicalRequestSettings; int32_t inputStreamId = -1; std::set<int32_t> outputStreamIds; }; /** * Get the last request submitted to the hal by the request thread. * * Must be called with mLock held. */ virtual CameraMetadata getLatestRequestLocked(); virtual LatestRequestInfo getLatestRequestInfoLocked(); virtual status_t injectionCameraInitialize(const std::string &injectCamId, sp<CameraProviderManager> manager) = 0; Loading Loading @@ -992,7 +999,7 @@ class Camera3Device : * Get the latest request that was sent to the HAL * with process_capture_request. */ CameraMetadata getLatestRequest() const; LatestRequestInfo getLatestRequestInfo() const; /** * Returns true if the stream is a target of any queued or repeating Loading Loading @@ -1192,8 +1199,7 @@ class Camera3Device : // android.request.id for latest process_capture_request int32_t mLatestRequestId; int32_t mLatestFailedRequestId; CameraMetadata mLatestRequest; std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest; LatestRequestInfo mLatestRequestInfo; typedef KeyedVector<uint32_t/*tag*/, RequestTrigger> TriggerMap; Mutex mTriggerMutex; Loading