TagMonitor: don't allocate a set of stream ids if monitoring is not enabled.
Bug: 196264836
Test: adb shell dumpsys media.camera -m "android.control.zoomRatio" shows stream ids requests/
Change-Id: I1e722235724f25114fa30d77a6d6486c6d6b638c
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 7c3c6b7..368c39c 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -3084,10 +3084,11 @@
void Camera3Device::monitorMetadata(TagMonitor::eventSource source,
int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata,
const std::unordered_map<std::string, CameraMetadata>& physicalMetadata,
- const std::set<int32_t> &outputStreamIds, int32_t inputStreamId) {
+ const camera_stream_buffer_t *outputBuffers, uint32_t numOutputBuffers,
+ int32_t inputStreamId) {
mTagMonitor.monitorMetadata(source, frameNumber, timestamp, metadata,
- physicalMetadata, outputStreamIds, inputStreamId);
+ physicalMetadata, outputBuffers, numOutputBuffers, inputStreamId);
}
/**
@@ -4590,12 +4591,6 @@
sp<Camera3Device> parent = mParent.promote();
if (parent != NULL) {
- std::set<int32_t> outputStreamIds;
- for (size_t i = 0; i < halRequest.num_output_buffers; i++) {
- const camera_stream_buffer_t *src = halRequest.output_buffers + i;
- int32_t streamId = Camera3Stream::cast(src->stream)->getId();
- outputStreamIds.emplace(streamId);
- }
int32_t inputStreamId = -1;
if (halRequest.input_buffer != nullptr) {
inputStreamId = Camera3Stream::cast(halRequest.input_buffer->stream)->getId();
@@ -4603,7 +4598,8 @@
parent->monitorMetadata(TagMonitor::REQUEST,
halRequest.frame_number,
- 0, mLatestRequest, mLatestPhysicalRequest, outputStreamIds, inputStreamId);
+ 0, mLatestRequest, mLatestPhysicalRequest, halRequest.output_buffers,
+ halRequest.num_output_buffers, inputStreamId);
}
}
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index c0dc6f8..ffc239b 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -1250,7 +1250,8 @@
void monitorMetadata(TagMonitor::eventSource source, int64_t frameNumber,
nsecs_t timestamp, const CameraMetadata& metadata,
const std::unordered_map<std::string, CameraMetadata>& physicalMetadata,
- const std::set<int32_t> &outputStreamIds, int32_t inputStreamId);
+ const camera_stream_buffer_t *outputBuffers, uint32_t numOutputBuffers,
+ int32_t inputStreamId);
metadata_vendor_id_t mVendorTagId;
diff --git a/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp b/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp
index ef51ada..9f225d0 100644
--- a/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp
+++ b/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp
@@ -368,7 +368,7 @@
}
states.tagMonitor.monitorMetadata(TagMonitor::RESULT,
frameNumber, sensorTimestamp, captureResult.mMetadata,
- monitoredPhysicalMetadata, std::set<int32_t>());
+ monitoredPhysicalMetadata);
insertResultLocked(states, &captureResult, frameNumber);
}
diff --git a/services/camera/libcameraservice/device3/Camera3OutputUtils.h b/services/camera/libcameraservice/device3/Camera3OutputUtils.h
index 142889a..3f54ac5 100644
--- a/services/camera/libcameraservice/device3/Camera3OutputUtils.h
+++ b/services/camera/libcameraservice/device3/Camera3OutputUtils.h
@@ -42,66 +42,6 @@
namespace camera3 {
- typedef struct camera_stream_configuration {
- uint32_t num_streams;
- camera_stream_t **streams;
- uint32_t operation_mode;
- bool input_is_multi_resolution;
- } camera_stream_configuration_t;
-
- typedef struct camera_capture_request {
- uint32_t frame_number;
- const camera_metadata_t *settings;
- camera_stream_buffer_t *input_buffer;
- uint32_t num_output_buffers;
- const camera_stream_buffer_t *output_buffers;
- uint32_t num_physcam_settings;
- const char **physcam_id;
- const camera_metadata_t **physcam_settings;
- int32_t input_width;
- int32_t input_height;
- } camera_capture_request_t;
-
- typedef struct camera_capture_result {
- uint32_t frame_number;
- const camera_metadata_t *result;
- uint32_t num_output_buffers;
- const camera_stream_buffer_t *output_buffers;
- const camera_stream_buffer_t *input_buffer;
- uint32_t partial_result;
- uint32_t num_physcam_metadata;
- const char **physcam_ids;
- const camera_metadata_t **physcam_metadata;
- } camera_capture_result_t;
-
- typedef struct camera_shutter_msg {
- uint32_t frame_number;
- uint64_t timestamp;
- } camera_shutter_msg_t;
-
- typedef struct camera_error_msg {
- uint32_t frame_number;
- camera_stream_t *error_stream;
- int error_code;
- } camera_error_msg_t;
-
- typedef enum camera_error_msg_code {
- CAMERA_MSG_ERROR_DEVICE = 1,
- CAMERA_MSG_ERROR_REQUEST = 2,
- CAMERA_MSG_ERROR_RESULT = 3,
- CAMERA_MSG_ERROR_BUFFER = 4,
- CAMERA_MSG_NUM_ERRORS
- } camera_error_msg_code_t;
-
- typedef struct camera_notify_msg {
- int type;
-
- union {
- camera_error_msg_t error;
- camera_shutter_msg_t shutter;
- } message;
- } camera_notify_msg_t;
-
/**
* Helper methods shared between Camera3Device/Camera3OfflineSession for HAL callbacks
*/
diff --git a/services/camera/libcameraservice/device3/InFlightRequest.h b/services/camera/libcameraservice/device3/InFlightRequest.h
index 523a2c7..85e809c 100644
--- a/services/camera/libcameraservice/device3/InFlightRequest.h
+++ b/services/camera/libcameraservice/device3/InFlightRequest.h
@@ -30,6 +30,66 @@
namespace camera3 {
+typedef struct camera_stream_configuration {
+ uint32_t num_streams;
+ camera_stream_t **streams;
+ uint32_t operation_mode;
+ bool input_is_multi_resolution;
+} camera_stream_configuration_t;
+
+typedef struct camera_capture_request {
+ uint32_t frame_number;
+ const camera_metadata_t *settings;
+ camera_stream_buffer_t *input_buffer;
+ uint32_t num_output_buffers;
+ const camera_stream_buffer_t *output_buffers;
+ uint32_t num_physcam_settings;
+ const char **physcam_id;
+ const camera_metadata_t **physcam_settings;
+ int32_t input_width;
+ int32_t input_height;
+} camera_capture_request_t;
+
+typedef struct camera_capture_result {
+ uint32_t frame_number;
+ const camera_metadata_t *result;
+ uint32_t num_output_buffers;
+ const camera_stream_buffer_t *output_buffers;
+ const camera_stream_buffer_t *input_buffer;
+ uint32_t partial_result;
+ uint32_t num_physcam_metadata;
+ const char **physcam_ids;
+ const camera_metadata_t **physcam_metadata;
+} camera_capture_result_t;
+
+typedef struct camera_shutter_msg {
+ uint32_t frame_number;
+ uint64_t timestamp;
+} camera_shutter_msg_t;
+
+typedef struct camera_error_msg {
+ uint32_t frame_number;
+ camera_stream_t *error_stream;
+ int error_code;
+} camera_error_msg_t;
+
+typedef enum camera_error_msg_code {
+ CAMERA_MSG_ERROR_DEVICE = 1,
+ CAMERA_MSG_ERROR_REQUEST = 2,
+ CAMERA_MSG_ERROR_RESULT = 3,
+ CAMERA_MSG_ERROR_BUFFER = 4,
+ CAMERA_MSG_NUM_ERRORS
+} camera_error_msg_code_t;
+
+typedef struct camera_notify_msg {
+ int type;
+
+ union {
+ camera_error_msg_t error;
+ camera_shutter_msg_t shutter;
+ } message;
+} camera_notify_msg_t;
+
typedef enum {
// Cache the buffers with STATUS_ERROR within InFlightRequest
ERROR_BUF_CACHE,
diff --git a/services/camera/libcameraservice/utils/TagMonitor.cpp b/services/camera/libcameraservice/utils/TagMonitor.cpp
index 53a92e9..4488098 100644
--- a/services/camera/libcameraservice/utils/TagMonitor.cpp
+++ b/services/camera/libcameraservice/utils/TagMonitor.cpp
@@ -24,6 +24,7 @@
#include <utils/Log.h>
#include <camera/VendorTagDescriptor.h>
#include <camera_metadata_hidden.h>
+#include <device3/Camera3Stream.h>
namespace android {
@@ -119,7 +120,8 @@
void TagMonitor::monitorMetadata(eventSource source, int64_t frameNumber, nsecs_t timestamp,
const CameraMetadata& metadata,
const std::unordered_map<std::string, CameraMetadata>& physicalMetadata,
- const std::set<int32_t> &outputStreamIds, int32_t inputStreamId) {
+ const camera3::camera_stream_buffer_t *outputBuffers, uint32_t numOutputBuffers,
+ int32_t inputStreamId) {
if (!mMonitoringEnabled) return;
std::lock_guard<std::mutex> lock(mMonitorMutex);
@@ -127,7 +129,12 @@
if (timestamp == 0) {
timestamp = systemTime(SYSTEM_TIME_BOOTTIME);
}
-
+ std::unordered_set<int32_t> outputStreamIds;
+ for (size_t i = 0; i < numOutputBuffers; i++) {
+ const camera3::camera_stream_buffer_t *src = outputBuffers + i;
+ int32_t streamId = camera3::Camera3Stream::cast(src->stream)->getId();
+ outputStreamIds.emplace(streamId);
+ }
std::string emptyId;
for (auto tag : mMonitoredTagList) {
monitorSingleMetadata(source, frameNumber, timestamp, emptyId, tag, metadata,
@@ -142,7 +149,7 @@
void TagMonitor::monitorSingleMetadata(eventSource source, int64_t frameNumber, nsecs_t timestamp,
const std::string& cameraId, uint32_t tag, const CameraMetadata& metadata,
- const std::set<int32_t> &outputStreamIds, int32_t inputStreamId) {
+ const std::unordered_set<int32_t> &outputStreamIds, int32_t inputStreamId) {
CameraMetadata &lastValues = (source == REQUEST) ?
(cameraId.empty() ? mLastMonitoredRequestValues :
@@ -186,7 +193,8 @@
// Also monitor when the stream ids change, this helps visually see what
// monitored metadata values are for capture requests with different
// stream ids.
- if (inputStreamId != mLastInputStreamId || outputStreamIds != mLastStreamIds) {
+ if (source == REQUEST &&
+ (inputStreamId != mLastInputStreamId || outputStreamIds != mLastStreamIds)) {
mLastInputStreamId = inputStreamId;
mLastStreamIds = outputStreamIds;
isDifferent = true;
@@ -261,7 +269,7 @@
#define CAMERA_METADATA_ENUM_STRING_MAX_SIZE 29
void TagMonitor::printData(int fd, const uint8_t *data_ptr, uint32_t tag,
- int type, int count, int indentation, const std::set<int32_t> &outputStreamIds,
+ int type, int count, int indentation, const std::unordered_set<int32_t> &outputStreamIds,
int32_t inputStreamId) {
static int values_per_line[NUM_TYPES] = {
[TYPE_BYTE] = 16,
@@ -353,7 +361,8 @@
template<typename T>
TagMonitor::MonitorEvent::MonitorEvent(eventSource src, uint32_t frameNumber, nsecs_t timestamp,
- const T &value, const std::string& cameraId, const std::set<int32_t> &outputStreamIds,
+ const T &value, const std::string& cameraId,
+ const std::unordered_set<int32_t> &outputStreamIds,
int32_t inputStreamId) :
source(src),
frameNumber(frameNumber),
diff --git a/services/camera/libcameraservice/utils/TagMonitor.h b/services/camera/libcameraservice/utils/TagMonitor.h
index dfc424e..f6df4b7 100644
--- a/services/camera/libcameraservice/utils/TagMonitor.h
+++ b/services/camera/libcameraservice/utils/TagMonitor.h
@@ -20,7 +20,6 @@
#include <vector>
#include <atomic>
#include <mutex>
-#include <set>
#include <unordered_map>
#include <utils/RefBase.h>
@@ -31,6 +30,7 @@
#include <system/camera_metadata.h>
#include <system/camera_vendor_tags.h>
#include <camera/CameraMetadata.h>
+#include <device3/InFlightRequest.h>
namespace android {
@@ -68,7 +68,8 @@
void monitorMetadata(eventSource source, int64_t frameNumber,
nsecs_t timestamp, const CameraMetadata& metadata,
const std::unordered_map<std::string, CameraMetadata>& physicalMetadata,
- const std::set<int32_t> &outputStreamIds, int32_t inputStreamId = -1);
+ const camera3::camera_stream_buffer_t *outputBuffers = nullptr,
+ uint32_t numOutputBuffers = 0, int32_t inputStreamId = -1);
// Dump current event log to the provided fd
void dumpMonitoredMetadata(int fd);
@@ -76,12 +77,12 @@
private:
static void printData(int fd, const uint8_t *data_ptr, uint32_t tag,
- int type, int count, int indentation, const std::set<int32_t> &outputStreamIds,
- int32_t inputStreamId);
+ int type, int count, int indentation,
+ const std::unordered_set<int32_t> &outputStreamIds, int32_t inputStreamId);
void monitorSingleMetadata(TagMonitor::eventSource source, int64_t frameNumber,
nsecs_t timestamp, const std::string& cameraId, uint32_t tag,
- const CameraMetadata& metadata, const std::set<int32_t> &outputStreamIds,
+ const CameraMetadata& metadata, const std::unordered_set<int32_t> &outputStreamIds,
int32_t inputStreamId);
std::atomic<bool> mMonitoringEnabled;
@@ -98,7 +99,7 @@
std::unordered_map<std::string, CameraMetadata> mLastMonitoredPhysicalResultKeys;
int32_t mLastInputStreamId = -1;
- std::set<int32_t> mLastStreamIds;
+ std::unordered_set<int32_t> mLastStreamIds;
/**
* A monitoring event
@@ -109,7 +110,7 @@
template<typename T>
MonitorEvent(eventSource src, uint32_t frameNumber, nsecs_t timestamp,
const T &newValue, const std::string& cameraId,
- const std::set<int32_t> &outputStreamIds, int32_t inputStreamId);
+ const std::unordered_set<int32_t> &outputStreamIds, int32_t inputStreamId);
~MonitorEvent();
eventSource source;
@@ -119,7 +120,7 @@
uint8_t type;
std::vector<uint8_t> newData;
std::string cameraId;
- std::set<int32_t> outputStreamIds;
+ std::unordered_set<int32_t> outputStreamIds;
int32_t inputStreamId = 1;
};