cameraserver: Add stream ids to last request info in dumpsys
Also dump out physical settings during dumpsys
Bug: 357913929
Flag: com.android.internal.camera.flags.dumpsys_request_stream_ids
Test: Observe adb shell dumpsys media.camera output
Change-Id: I24e3aae689d625f5db25ff05ec8e51fe84e05a43
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/camera/camera_platform.aconfig b/camera/camera_platform.aconfig
index 1f67d2d..e916985 100644
--- a/camera/camera_platform.aconfig
+++ b/camera/camera_platform.aconfig
@@ -267,3 +267,13 @@
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
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 9f6829c..11891e9 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -612,10 +612,35 @@
{
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) {
@@ -2911,13 +2936,13 @@
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;
@@ -3487,30 +3512,40 @@
if (halRequest.settings != nullptr) { // Don't update if they were unchanged
Mutex::Autolock al(mLatestRequestMutex);
- camera_metadata_t* cloned = clone_camera_metadata(halRequest.settings);
- mLatestRequest.acquire(cloned);
+ // Fill in latest request and physical request
+ camera_metadata_t *cloned = clone_camera_metadata(halRequest.settings);
+ 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],
- CameraMetadata(cloned));
+ mLatestRequestInfo.physicalRequestSettings.emplace(halRequest.physcam_id[i],
+ CameraMetadata(cloned));
}
if (parent != nullptr) {
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) {
@@ -4170,13 +4205,13 @@
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(
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index 62ae38c..6f87ca3 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -736,12 +736,19 @@
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;
@@ -992,7 +999,7 @@
* 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
@@ -1192,8 +1199,7 @@
// 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;