From 32b4f494fb4c032a8c9e8f3b8c9ed1d7ccd8ef22 Mon Sep 17 00:00:00 2001 From: Jayant Chowdhary Date: Wed, 14 Nov 2018 18:38:21 -0800 Subject: [PATCH 1/2] libmediautils: move AImageReader_getHGBPFromHandle from libmediandk. This allows us to remove camerserver's dependency on libmediandk, thereby reducing its vss increase (brought about due to many of libmediandk's dependencies, which cameraserver does not need) Bug: 119582723 Test: mm -j64 Test: showmap vss before change: 50628 Test: showmap vss after change: 31256 Test: AImageReaderWindowHandleTest Change-Id: I8dec6430adda538cb293cdd0d087b9ae1767b900 Signed-off-by: Jayant Chowdhary --- media/ndk/Android.bp | 1 + media/ndk/NdkImageReader.cpp | 25 --------- media/ndk/NdkImageReaderPriv.h | 4 -- .../tests/AImageReaderWindowHandleTest.cpp | 3 ++ media/utils/AImageReaderUtils.cpp | 52 +++++++++++++++++++ media/utils/Android.bp | 4 ++ .../include/mediautils/AImageReaderUtils.h | 35 +++++++++++++ 7 files changed, 95 insertions(+), 29 deletions(-) create mode 100644 media/utils/AImageReaderUtils.cpp create mode 100644 media/utils/include/mediautils/AImageReaderUtils.h diff --git a/media/ndk/Android.bp b/media/ndk/Android.bp index b21a1bb13e..541ba3eeee 100644 --- a/media/ndk/Android.bp +++ b/media/ndk/Android.bp @@ -161,6 +161,7 @@ cc_test { shared_libs: [ "libbinder", "libmediandk", + "libmediautils", "libnativewindow", "libgui", "libutils", diff --git a/media/ndk/NdkImageReader.cpp b/media/ndk/NdkImageReader.cpp index 1adecb969b..b86ab424e0 100644 --- a/media/ndk/NdkImageReader.cpp +++ b/media/ndk/NdkImageReader.cpp @@ -647,31 +647,6 @@ static native_handle_t *convertHalTokenToNativeHandle( return nh; } -static sp convertNativeHandleToHGBP ( - const native_handle_t *handle) { - // Read the size of the halToken vec - hidl_vec halToken; - halToken.setToExternal( - reinterpret_cast(const_cast(&(handle->data[1]))), - handle->data[0]); - sp hgbp = - HGraphicBufferProducer::castFrom(retrieveHalInterface(halToken)); - return hgbp; -} - -EXPORT -sp AImageReader_getHGBPFromHandle( - const native_handle_t *handle) { - if (handle == nullptr) { - return nullptr; - } - if (handle->numFds != 0 || - handle->numInts < ceil(sizeof(size_t) / sizeof(int))) { - return nullptr; - } - return convertNativeHandleToHGBP(handle); -} - EXPORT media_status_t AImageReader_new( int32_t width, int32_t height, int32_t format, int32_t maxImages, diff --git a/media/ndk/NdkImageReaderPriv.h b/media/ndk/NdkImageReaderPriv.h index d9ddfd9302..78152d2946 100644 --- a/media/ndk/NdkImageReaderPriv.h +++ b/media/ndk/NdkImageReaderPriv.h @@ -169,8 +169,4 @@ struct AImageReader : public RefBase { Mutex mLock; }; -// Retrieves HGraphicBufferProducer corresponding to the native_handle_t -// provided (this native handle MUST have been obtained by AImageReader_getWindowNativeHandle()). -sp AImageReader_getHGBPFromHandle(const native_handle_t *handle); - #endif // _NDK_IMAGE_READER_PRIV_H diff --git a/media/ndk/tests/AImageReaderWindowHandleTest.cpp b/media/ndk/tests/AImageReaderWindowHandleTest.cpp index 3b5e3585b9..ef0ff675a5 100644 --- a/media/ndk/tests/AImageReaderWindowHandleTest.cpp +++ b/media/ndk/tests/AImageReaderWindowHandleTest.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,8 @@ namespace android { using hardware::graphics::bufferqueue::V1_0::utils::H2BGraphicBufferProducer; +using aimg::AImageReader_getHGBPFromHandle; + typedef IGraphicBufferProducer::QueueBufferInput QueueBufferInput; typedef IGraphicBufferProducer::QueueBufferOutput QueueBufferOutput; diff --git a/media/utils/AImageReaderUtils.cpp b/media/utils/AImageReaderUtils.cpp new file mode 100644 index 0000000000..d97c3409c5 --- /dev/null +++ b/media/utils/AImageReaderUtils.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include + +namespace android { +namespace aimg { + +using hardware::hidl_vec; + +static sp convertNativeHandleToHGBP ( + const native_handle_t *handle) { + // Read the size of the halToken vec + hidl_vec halToken; + halToken.setToExternal( + reinterpret_cast(const_cast(&(handle->data[1]))), + handle->data[0]); + sp hgbp = + HGraphicBufferProducer::castFrom(retrieveHalInterface(halToken)); + return hgbp; +} + +sp AImageReader_getHGBPFromHandle( + const native_handle_t *handle) { + if (handle == nullptr) { + return nullptr; + } + if (handle->numFds != 0 || + handle->numInts < std::ceil(sizeof(size_t) / sizeof(int))) { + return nullptr; + } + return convertNativeHandleToHGBP(handle); +} + +} //namespace aimg +} //namespace android diff --git a/media/utils/Android.bp b/media/utils/Android.bp index f5b3f929c2..b05e022862 100644 --- a/media/utils/Android.bp +++ b/media/utils/Android.bp @@ -16,6 +16,7 @@ cc_library { name: "libmediautils", srcs: [ + "AImageReaderUtils.cpp", "BatteryNotifier.cpp", "ISchedulingPolicyService.cpp", "MemoryLeakTrackUtil.cpp", @@ -30,6 +31,9 @@ cc_library { "liblog", "libutils", "libmemunreachable", + "libhidlbase", + "android.hardware.graphics.bufferqueue@1.0", + "android.hidl.token@1.0-utils", ], logtags: ["EventLogTags.logtags"], diff --git a/media/utils/include/mediautils/AImageReaderUtils.h b/media/utils/include/mediautils/AImageReaderUtils.h new file mode 100644 index 0000000000..c9bde1fa50 --- /dev/null +++ b/media/utils/include/mediautils/AImageReaderUtils.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AIMAGE_READER_UTILS_H +#define AIMAGE_READER_UTILS_H + +#include +#include + +namespace android { +namespace aimg { + +using HGraphicBufferProducer = hardware::graphics::bufferqueue::V1_0::IGraphicBufferProducer; + +// Retrieves HGraphicBufferProducer corresponding to the native_handle_t +// provided (this native handle MUST have been obtained by AImageReader_getWindowNativeHandle()). +sp AImageReader_getHGBPFromHandle(const native_handle_t *handle); + +}// namespace aimg +}// namespace android + +#endif //AIMAGE_READER_UTILS_H From e0bb61b64b14eabd8ab8c7667ba2a7ab4a82b7e1 Mon Sep 17 00:00:00 2001 From: Jayant Chowdhary Date: Wed, 14 Nov 2018 23:59:12 -0800 Subject: [PATCH 2/2] camerserver: Remove dependency on libmediandk. libmediandk brings in many unneeded dependencies which results in an abnormal increase in vss. AImageReader_getHGBPFromHandle has been moved to libmediautils. Test: mm -j64 Test: showmap vss before change: 50628 Test: showmap vss after change: 31256 Change-Id: I4de95d08ae514c252a1e01f3b03e0021c821b72a Signed-off-by: Jayant Chowdhary --- services/camera/libcameraservice/Android.bp | 1 - services/camera/libcameraservice/hidl/Convert.cpp | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp index 9f2515ebb0..025f0b2b21 100644 --- a/services/camera/libcameraservice/Android.bp +++ b/services/camera/libcameraservice/Android.bp @@ -72,7 +72,6 @@ cc_library_shared { "libbinder", "libcutils", "libmedia", - "libmediandk", "libmediautils", "libcamera_client", "libcamera_metadata", diff --git a/services/camera/libcameraservice/hidl/Convert.cpp b/services/camera/libcameraservice/hidl/Convert.cpp index 22e879e69a..d2a4ed660b 100644 --- a/services/camera/libcameraservice/hidl/Convert.cpp +++ b/services/camera/libcameraservice/hidl/Convert.cpp @@ -16,7 +16,8 @@ #include #include -#include +#include +#include namespace android { namespace hardware { @@ -25,6 +26,7 @@ namespace utils { namespace conversion { using hardware::graphics::bufferqueue::V1_0::utils::H2BGraphicBufferProducer; +using aimg::AImageReader_getHGBPFromHandle; // Note: existing data in dst will be gone. Caller still owns the memory of src void convertToHidl(const camera_metadata_t *src, HCameraMetadata* dst) {