From 9b71bc20c436eae3642ca0014d1381afaabe52d4 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Tue, 5 Jun 2018 22:23:39 -0700 Subject: [PATCH] Camera: Avoid Metadata re-allocation during shrinkCaptureResult If capture result metadata is to be shrinked, reserve enough space so that CameraMetadata isn't re-allocated when std::vector expands. If vector expansion happens, CameraMetadata is re-allocated, causing camera_metadata_t being re-allocated as well. Test: Camera CTS Bug: 109672123 Change-Id: Idaf5bf409bdbbccf617614edc96c0478260b4c30 --- camera/device/3.2/default/CameraDeviceSession.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp index 8d002646c0..69f853562c 100644 --- a/camera/device/3.2/default/CameraDeviceSession.cpp +++ b/camera/device/3.2/default/CameraDeviceSession.cpp @@ -1391,6 +1391,8 @@ void CameraDeviceSession::sShrinkCaptureResult( std::vector* physCamMdArray, bool handlePhysCam) { *dst = *src; + // Reserve maximum number of entries to avoid metadata re-allocation. + mds->reserve(1 + (handlePhysCam ? src->num_physcam_metadata : 0)); if (sShouldShrink(src->result)) { mds->emplace_back(sCreateCompactCopy(src->result)); dst->result = mds->back().getAndLock();