diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-02-26 03:07:07 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-02-26 03:07:07 +0000 |
commit | 42f3d53a37964ea43ef268e4c479bb125b74fcb6 (patch) | |
tree | 0723d1318564a93c5644a83918b7f18a3b40bb96 | |
parent | f04e66cdf89c20deeff1b32000095a075d8654c5 (diff) | |
parent | b649d51c96a3e0a565c7ab40bed10784cb2ceeff (diff) | |
download | display-42f3d53a37964ea43ef268e4c479bb125b74fcb6.tar.gz |
Merge cherrypicks of [10421308, 10421309, 10421362, 10421364, 10421365, 10421534] into qt-d4-release
Change-Id: I1279d33100b06b2cf16791110cd56bbb4fea157b
-rw-r--r-- | config/display-board.mk | 2 | ||||
-rw-r--r-- | config/display-product.mk | 2 | ||||
-rw-r--r-- | config/talos.mk | 4 | ||||
-rw-r--r-- | gralloc/Android.mk | 21 | ||||
-rw-r--r-- | gralloc/QtiAllocator.cpp | 6 | ||||
-rw-r--r-- | gralloc/QtiAllocator.h | 20 | ||||
-rw-r--r-- | gralloc/QtiMapper.cpp | 52 | ||||
-rw-r--r-- | gralloc/QtiMapper.h | 42 | ||||
-rw-r--r-- | gralloc/QtiMapperExtensions.h | 6 | ||||
-rw-r--r-- | gralloc/gr_buf_descriptor.h | 8 | ||||
-rw-r--r-- | gralloc/gr_buf_mgr.cpp | 8 | ||||
-rw-r--r-- | gralloc/gr_buf_mgr.h | 6 | ||||
-rw-r--r-- | gralloc/gr_utils.cpp | 28 | ||||
-rw-r--r-- | gralloc/gr_utils.h | 5 | ||||
-rw-r--r-- | gralloc/service.cpp | 6 | ||||
-rw-r--r-- | sdm/libs/hwc2/Android.mk | 2 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_buffer_allocator.cpp | 270 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_buffer_allocator.h | 17 |
18 files changed, 326 insertions, 179 deletions
diff --git a/config/display-board.mk b/config/display-board.mk index 29f540b9..3c28fdc2 100644 --- a/config/display-board.mk +++ b/config/display-board.mk @@ -15,5 +15,5 @@ TARGET_HAS_HDR_DISPLAY := true TARGET_USES_DISPLAY_RENDER_INTENTS := true TARGET_USE_COLOR_MANAGEMENT := true SF_WCG_COMPOSITION_DATA_SPACE := 143261696 -TARGET_USES_QTI_MAPPER_2_0 := true +TARGET_USES_QTI_MAPPER_3_0 := true TARGET_USES_QTI_MAPPER_EXTENSIONS_1_1 := true diff --git a/config/display-product.mk b/config/display-product.mk index 7ffa9617..f27e6b10 100644 --- a/config/display-product.mk +++ b/config/display-product.mk @@ -2,7 +2,7 @@ PRODUCT_PACKAGES += \ android.hardware.graphics.composer@2.3-impl \ android.hardware.graphics.composer@2.3-service-sm7150 \ - android.hardware.graphics.mapper@2.0-impl-qti-display \ + android.hardware.graphics.mapper@3.0-impl-qti-display \ vendor.qti.hardware.display.allocator-service \ android.hardware.memtrack@1.0-impl \ android.hardware.memtrack@1.0-service \ diff --git a/config/talos.mk b/config/talos.mk index c80ece7b..2ea56aab 100644 --- a/config/talos.mk +++ b/config/talos.mk @@ -3,7 +3,7 @@ PRODUCT_PACKAGES += \ android.hardware.graphics.composer@2.3-impl \ android.hardware.graphics.composer@2.3-service \ - android.hardware.graphics.mapper@2.0-impl-qti-display \ + android.hardware.graphics.mapper@3.0-impl-qti-display \ vendor.qti.hardware.display.allocator-service \ android.hardware.memtrack@1.0-impl \ android.hardware.memtrack@1.0-service \ @@ -49,7 +49,7 @@ TARGET_USES_HWC2 := true TARGET_USES_QCOM_DISPLAY_BSP := true TARGET_USES_COLOR_METADATA := true TARGET_USES_DISPLAY_RENDER_INTENTS := true -TARGET_USES_QTI_MAPPER_2_0 := true +TARGET_USES_QTI_MAPPER_3_0 := true TARGET_USES_QTI_MAPPER_EXTENSIONS_1_1 := true PRODUCT_PROPERTY_OVERRIDES += \ diff --git a/gralloc/Android.mk b/gralloc/Android.mk index 9ad44e52..6f23493c 100644 --- a/gralloc/Android.mk +++ b/gralloc/Android.mk @@ -13,7 +13,8 @@ LOCAL_HEADER_LIBRARIES := display_headers LOCAL_SHARED_LIBRARIES := $(common_libs) libqdMetaData libsync libgrallocutils \ libgralloccore \ android.hardware.graphics.mapper@2.0 \ - android.hardware.graphics.mapper@2.1 + android.hardware.graphics.mapper@2.1 \ + android.hardware.graphics.mapper@3.0 LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wall -Werror LOCAL_CLANG := true LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) @@ -29,7 +30,8 @@ LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes) LOCAL_HEADER_LIBRARIES := display_headers LOCAL_SHARED_LIBRARIES := $(common_libs) libqdMetaData libdl \ android.hardware.graphics.mapper@2.0 \ - android.hardware.graphics.mapper@2.1 + android.hardware.graphics.mapper@2.1 \ + android.hardware.graphics.mapper@3.0 LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) LOCAL_SRC_FILES := gr_utils.cpp gr_adreno_info.cpp @@ -47,7 +49,8 @@ LOCAL_C_INCLUDES := $(common_includes) \ LOCAL_HEADER_LIBRARIES := display_headers LOCAL_SHARED_LIBRARIES := $(common_libs) libqdMetaData libdl libgrallocutils libion \ - android.hardware.graphics.mapper@2.1 + android.hardware.graphics.mapper@2.1 \ + android.hardware.graphics.mapper@3.0 LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) LOCAL_SRC_FILES := gr_allocator.cpp gr_buf_mgr.cpp gr_ion_alloc.cpp @@ -55,7 +58,7 @@ include $(BUILD_SHARED_LIBRARY) #mapper include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.graphics.mapper@2.0-impl-qti-display +LOCAL_MODULE := android.hardware.graphics.mapper@3.0-impl-qti-display LOCAL_VENDOR_MODULE := true LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_MODULE_TAGS := optional @@ -68,11 +71,12 @@ LOCAL_SHARED_LIBRARIES := $(common_libs) \ libgrallocutils \ libgralloccore \ libsync \ - vendor.qti.hardware.display.mapper@2.0 \ + vendor.qti.hardware.display.mapper@3.0 \ vendor.qti.hardware.display.mapperextensions@1.0 \ android.hardware.graphics.mapper@2.0 \ android.hardware.graphics.mapper@2.1 \ - vendor.qti.hardware.display.mapperextensions@1.1 + vendor.qti.hardware.display.mapperextensions@1.1 \ + android.hardware.graphics.mapper@3.0 LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) LOCAL_SRC_FILES := QtiMapper.cpp QtiMapperExtensions.cpp @@ -91,9 +95,10 @@ LOCAL_SHARED_LIBRARIES := $(common_libs) \ libqdMetaData \ libgrallocutils \ libgralloccore \ - vendor.qti.hardware.display.allocator@1.0 \ + vendor.qti.hardware.display.allocator@3.0 \ + android.hardware.graphics.mapper@3.0 \ android.hardware.graphics.mapper@2.1 \ - android.hardware.graphics.allocator@2.0 + android.hardware.graphics.allocator@3.0 LOCAL_CFLAGS := -DLOG_TAG=\"qdgralloc\" $(common_flags) LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps) LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes) diff --git a/gralloc/QtiAllocator.cpp b/gralloc/QtiAllocator.cpp index bdb8ebe4..e623e814 100644 --- a/gralloc/QtiAllocator.cpp +++ b/gralloc/QtiAllocator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -40,7 +40,7 @@ namespace qti { namespace hardware { namespace display { namespace allocator { -namespace V1_0 { +namespace V3_0 { namespace implementation { using android::hardware::hidl_handle; @@ -105,7 +105,7 @@ IQtiAllocator *HIDL_FETCH_IQtiAllocator(const char * /* name */) { } } // namespace implementation -} // namespace V1_0 +} // namespace V3_0 } // namespace allocator } // namespace display } // namespace hardware diff --git a/gralloc/QtiAllocator.h b/gralloc/QtiAllocator.h index 2f3add8a..76ee392f 100644 --- a/gralloc/QtiAllocator.h +++ b/gralloc/QtiAllocator.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -32,7 +32,7 @@ #include <hidl/MQDescriptor.h> #include <hidl/Status.h> -#include <vendor/qti/hardware/display/allocator/1.0/IQtiAllocator.h> +#include <vendor/qti/hardware/display/allocator/3.0/IQtiAllocator.h> #include "gr_buf_mgr.h" @@ -41,22 +41,22 @@ namespace qti { namespace hardware { namespace display { namespace allocator { -namespace V1_0 { +namespace V3_0 { namespace implementation { -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::hardware::graphics::allocator::V2_0::IAllocator; -using ::android::hardware::graphics::mapper::V2_0::Error; +using ::android::sp; using ::android::hardware::hidl_array; using ::android::hardware::hidl_memory; using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::graphics::allocator::V3_0::IAllocator; +using ::android::hardware::graphics::mapper::V3_0::Error; using ::android::hidl::base::V1_0::DebugInfo; using ::android::hidl::base::V1_0::IBase; -using ::android::sp; -using ::vendor::qti::hardware::display::allocator::V1_0::IQtiAllocator; using gralloc::BufferManager; +using ::vendor::qti::hardware::display::allocator::V3_0::IQtiAllocator; class QtiAllocator : public IQtiAllocator { public: @@ -74,7 +74,7 @@ class QtiAllocator : public IQtiAllocator { extern "C" IQtiAllocator *HIDL_FETCH_IQtiAllocator(const char *name); } // namespace implementation -} // namespace V1_0 +} // namespace V3_0 } // namespace allocator } // namespace display } // namespace hardware diff --git a/gralloc/QtiMapper.cpp b/gralloc/QtiMapper.cpp index c9790c26..27f91c14 100644 --- a/gralloc/QtiMapper.cpp +++ b/gralloc/QtiMapper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -50,7 +50,7 @@ QtiMapper::QtiMapper() { ALOGD_IF(DEBUG, "Created QtiMapper instance"); } -bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_2_1 &bd) { +bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_3_0 &bd) { if (bd.width == 0 || bd.height == 0 || (static_cast<int32_t>(bd.format) <= 0) || bd.layerCount <= 0) { return false; @@ -59,7 +59,7 @@ bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_2_1 &bd) { return true; } -Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_info, +Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info, IMapperBufferDescriptor *descriptor) { ALOGD_IF(DEBUG, "BufferDescriptorInfo: wxh: %dx%d usage: 0x%" PRIu64 " format: %d layer_count: %d", @@ -76,17 +76,17 @@ Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_inf } // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow. -Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_2_0 &descriptor_info, +Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info, createDescriptor_cb hidl_cb) { IMapperBufferDescriptor descriptor; - auto info_2_1 = BufferDescriptorInfo_2_1 { + auto info_3_0 = BufferDescriptorInfo_3_0{ descriptor_info.width, descriptor_info.height, descriptor_info.layerCount, static_cast<PixelFormat>(descriptor_info.format), descriptor_info.usage, }; - auto err = CreateDescriptor(info_2_1, &descriptor); + auto err = CreateDescriptor(info_3_0, &descriptor); hidl_cb(err, descriptor); return Void(); } @@ -177,13 +177,13 @@ Return<void> QtiMapper::lock(void *buffer, uint64_t cpu_usage, const hidl_handle &acquire_fence, lock_cb hidl_cb) { auto err = LockBuffer(buffer, cpu_usage, acquire_fence); if (err != Error::NONE) { - hidl_cb(err, nullptr); + hidl_cb(err, nullptr, -1, -1); return Void(); } auto hnd = PRIV_HANDLE_CONST(buffer); auto *out_data = reinterpret_cast<void *>(hnd->base); - hidl_cb(Error::NONE, out_data); + hidl_cb(err, out_data, gralloc::GetBpp(hnd->format), hnd->width); return Void(); } @@ -222,8 +222,8 @@ Return<void> QtiMapper::unlock(void *buffer, unlock_cb hidl_cb) { return Void(); } -Return<Error> QtiMapper::validateBufferSize(void* buffer, - const BufferDescriptorInfo_2_1& descriptor_info, +Return<Error> QtiMapper::validateBufferSize(void *buffer, + const BufferDescriptorInfo_3_0 &descriptor_info, uint32_t /*stride*/) { auto err = Error::BAD_BUFFER; auto hnd = static_cast<private_handle_t *>(buffer); @@ -240,8 +240,7 @@ Return<Error> QtiMapper::validateBufferSize(void* buffer, return err; } -Return<void> QtiMapper::getTransportSize(void *buffer, - IMapper_2_1::getTransportSize_cb hidl_cb) { +Return<void> QtiMapper::getTransportSize(void *buffer, IMapper_3_0::getTransportSize_cb hidl_cb) { auto err = Error::BAD_BUFFER; auto hnd = static_cast<private_handle_t *>(buffer); uint32_t num_fds = 0, num_ints = 0; @@ -260,11 +259,30 @@ Return<void> QtiMapper::getTransportSize(void *buffer, return Void(); } -Return<void> QtiMapper::createDescriptor_2_1(const BufferDescriptorInfo_2_1& descriptor_info, - IMapper_2_1::createDescriptor_2_1_cb hidl_cb) { +Return<void> QtiMapper::isSupported(const BufferDescriptorInfo_3_0 &descriptor_info, + IMapper_3_0::isSupported_cb hidl_cb) { IMapperBufferDescriptor descriptor; auto err = CreateDescriptor(descriptor_info, &descriptor); - hidl_cb(err, descriptor); + if (err != Error::NONE) { + hidl_cb(err, false); + return Void(); + } + + gralloc::BufferDescriptor desc; + err = desc.Decode(descriptor); + if (err != Error::NONE) { + hidl_cb(err, false); + return Void(); + } + + buffer_handle_t buffer; + err = buf_mgr_->AllocateBuffer(desc, &buffer, 0, true); + if (err != Error::NONE) { + hidl_cb(err, false); + } else { + hidl_cb(err, true); + } + return Void(); } @@ -281,10 +299,10 @@ Return<void> QtiMapper::getMapperExtensions(QtiMapper::getMapperExtensions_cb hi // When we are in passthrough mode, this method is used // by hidl to obtain the SP HAL object -IMapper_2_1 *HIDL_FETCH_IMapper(const char * /* name */) { +IMapper_3_0 *HIDL_FETCH_IMapper(const char * /* name */) { ALOGD_IF(DEBUG, "Fetching IMapper from QtiMapper"); auto mapper = new QtiMapper(); - return static_cast<IMapper_2_1 *>(mapper); + return static_cast<IMapper_3_0 *>(mapper); } IQtiMapper *HIDL_FETCH_IQtiMapper(const char * /* name */) { diff --git a/gralloc/QtiMapper.h b/gralloc/QtiMapper.h index 7302e5e3..09e29c0b 100644 --- a/gralloc/QtiMapper.h +++ b/gralloc/QtiMapper.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -32,7 +32,7 @@ #include <hidl/MQDescriptor.h> #include <hidl/Status.h> -#include <vendor/qti/hardware/display/mapper/2.0/IQtiMapper.h> +#include <vendor/qti/hardware/display/mapper/3.0/IQtiMapper.h> #include "QtiMapperExtensions.h" #include "gr_buf_mgr.h" @@ -51,29 +51,27 @@ using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; using ::android::hardware::Return; using ::android::hardware::Void; -using ::android::hardware::graphics::common::V1_1::PixelFormat; -using ::android::hardware::graphics::mapper::V2_0::Error; -using ::android::hardware::graphics::mapper::V2_0::IMapper; -using ::android::hardware::graphics::mapper::V2_0::YCbCrLayout; +using ::android::hardware::graphics::common::V1_2::PixelFormat; +using ::android::hardware::graphics::mapper::V3_0::Error; +using ::android::hardware::graphics::mapper::V3_0::IMapper; +using ::android::hardware::graphics::mapper::V3_0::YCbCrLayout; using ::android::hidl::base::V1_0::DebugInfo; using ::android::hidl::base::V1_0::IBase; using gralloc::BufferManager; -using ::vendor::qti::hardware::display::mapper::V2_0::IQtiMapper; +using ::vendor::qti::hardware::display::mapper::V3_0::IQtiMapper; using ::vendor::qti::hardware::display::mapperextensions::V1_1::IQtiMapperExtensions; using ::vendor::qti::hardware::display::mapperextensions::V1_1::implementation::QtiMapperExtensions; -using IMapper_2_1 = android::hardware::graphics::mapper::V2_1::IMapper; -using BufferDescriptorInfo_2_0 = -android::hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo; -using BufferDescriptorInfo_2_1 = -android::hardware::graphics::mapper::V2_1::IMapper::BufferDescriptorInfo; -using IMapperBufferDescriptor = android::hardware::graphics::mapper::V2_0::BufferDescriptor; +using IMapper_3_0 = android::hardware::graphics::mapper::V3_0::IMapper; +using BufferDescriptorInfo_3_0 = + android::hardware::graphics::mapper::V3_0::IMapper::BufferDescriptorInfo; +using IMapperBufferDescriptor = android::hardware::graphics::mapper::V3_0::BufferDescriptor; class QtiMapper : public IQtiMapper { public: QtiMapper(); // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow. - Return<void> createDescriptor(const BufferDescriptorInfo_2_0 &descriptor_info, + Return<void> createDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info, createDescriptor_cb hidl_cb) override; Return<void> importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) override; Return<Error> freeBuffer(void *buffer) override; @@ -84,27 +82,27 @@ class QtiMapper : public IQtiMapper { Return<void> unlock(void *buffer, unlock_cb hidl_cb) override; // Methods from ::android::hardware::graphics::mapper::V2_1::IMapper follow. - Return<Error> validateBufferSize(void* buffer, - const BufferDescriptorInfo_2_1& descriptorInfo, + Return<Error> validateBufferSize(void *buffer, const BufferDescriptorInfo_3_0 &descriptorInfo, uint32_t stride) override; - Return<void> getTransportSize(void* buffer, IMapper_2_1::getTransportSize_cb hidl_cb) override; - Return<void> createDescriptor_2_1(const BufferDescriptorInfo_2_1& descriptorInfo, - createDescriptor_2_1_cb _hidl_cb) override; + Return<void> getTransportSize(void *buffer, IMapper_3_0::getTransportSize_cb hidl_cb) override; + + Return<void> isSupported(const BufferDescriptorInfo_3_0 &descriptor_info, + IMapper_3_0::isSupported_cb hidl_cb) override; Return<void> getMapperExtensions(getMapperExtensions_cb hidl_cb); sp<mapperextensions::V1_1::IQtiMapperExtensions> extensions_ = nullptr; private: BufferManager *buf_mgr_ = nullptr; - Error CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_info, - IMapperBufferDescriptor * descriptor); + Error CreateDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info, + IMapperBufferDescriptor *descriptor); bool ValidDescriptor(const IMapper::BufferDescriptorInfo &bd); bool GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd); void WaitFenceFd(int fence_fd); Error LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence); }; -extern "C" IMapper_2_1 *HIDL_FETCH_IMapper(const char *name); +extern "C" IMapper_3_0 *HIDL_FETCH_IMapper(const char *name); extern "C" IQtiMapper *HIDL_FETCH_IQtiMapper(const char *name); } // namespace implementation diff --git a/gralloc/QtiMapperExtensions.h b/gralloc/QtiMapperExtensions.h index b3333123..b3c05009 100644 --- a/gralloc/QtiMapperExtensions.h +++ b/gralloc/QtiMapperExtensions.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -51,8 +51,8 @@ using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; using ::android::hardware::Return; using ::android::hardware::Void; -using ::android::hardware::graphics::common::V1_1::PixelFormat; -using ::android::hardware::graphics::mapper::V2_0::IMapper; +using ::android::hardware::graphics::common::V1_2::PixelFormat; +using ::android::hardware::graphics::mapper::V3_0::IMapper; using ::android::hidl::base::V1_0::DebugInfo; using ::android::hidl::base::V1_0::IBase; using gralloc::BufferManager; diff --git a/gralloc/gr_buf_descriptor.h b/gralloc/gr_buf_descriptor.h index 2d426da2..f608d8ad 100644 --- a/gralloc/gr_buf_descriptor.h +++ b/gralloc/gr_buf_descriptor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2018, 2020 The Linux Foundation. All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -30,13 +30,13 @@ #ifndef __GR_BUF_DESCRIPTOR_H__ #define __GR_BUF_DESCRIPTOR_H__ -#include <android/hardware/graphics/mapper/2.1/IMapper.h> +#include <android/hardware/graphics/mapper/3.0/IMapper.h> #include <atomic> namespace gralloc { -using android::hardware::graphics::mapper::V2_0::Error; -using android::hardware::graphics::mapper::V2_1::IMapper; using android::hardware::hidl_vec; +using android::hardware::graphics::mapper::V3_0::Error; +using android::hardware::graphics::mapper::V3_0::IMapper; const uint32_t kBufferDescriptorSize = 7; const uint32_t kMagicVersion = 0x76312E30; // v1.0 diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp index cd36c137..e0538628 100644 --- a/gralloc/gr_buf_mgr.cpp +++ b/gralloc/gr_buf_mgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2018, 2020 The Linux Foundation. All rights reserved. * Not a Contribution * * Copyright (C) 2010 The Android Open Source Project @@ -262,7 +262,7 @@ Error BufferManager::UnlockBuffer(const private_handle_t *handle) { } Error BufferManager::AllocateBuffer(const BufferDescriptor &descriptor, buffer_handle_t *handle, - unsigned int bufferSize) { + unsigned int bufferSize, bool testAlloc) { if (!handle) return Error::BAD_BUFFER; std::lock_guard<std::mutex> buffer_lock(buffer_lock_); @@ -286,6 +286,10 @@ Error BufferManager::AllocateBuffer(const BufferDescriptor &descriptor, buffer_h return Error::BAD_DESCRIPTOR; } + if (testAlloc) { + return Error::NONE; + } + size = (bufferSize >= size) ? bufferSize : size; uint64_t flags = 0; auto page_size = UINT(getpagesize()); diff --git a/gralloc/gr_buf_mgr.h b/gralloc/gr_buf_mgr.h index 6c5f365d..5f0f8962 100644 --- a/gralloc/gr_buf_mgr.h +++ b/gralloc/gr_buf_mgr.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2018, 2020 The Linux Foundation. All rights reserved. * Not a Contribution * * Copyright (C) 2008 The Android Open Source Project @@ -33,14 +33,14 @@ namespace gralloc { -using android::hardware::graphics::mapper::V2_0::Error; +using android::hardware::graphics::mapper::V3_0::Error; class BufferManager { public: ~BufferManager(); Error AllocateBuffer(const BufferDescriptor &descriptor, buffer_handle_t *handle, - unsigned int bufferSize = 0); + unsigned int bufferSize = 0, bool testAlloc = false); Error RetainBuffer(private_handle_t const *hnd); Error ReleaseBuffer(private_handle_t const *hnd); Error LockBuffer(const private_handle_t *hnd, uint64_t usage); diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp index 2f8f5505..997c8b94 100644 --- a/gralloc/gr_utils.cpp +++ b/gralloc/gr_utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -235,6 +235,32 @@ bool IsGPUFlagSupported(uint64_t usage) { return ret; } +int GetBpp(int format) { + if (IsUncompressedRGBFormat(format)) { + return GetBppForUncompressedRGB(format); + } + switch (format) { + case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR: + case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: + case HAL_PIXEL_FORMAT_RAW8: + case HAL_PIXEL_FORMAT_Y8: + return 1; + case HAL_PIXEL_FORMAT_RAW16: + case HAL_PIXEL_FORMAT_Y16: + case HAL_PIXEL_FORMAT_YCbCr_422_SP: + case HAL_PIXEL_FORMAT_YCrCb_422_SP: + case HAL_PIXEL_FORMAT_YCbCr_422_I: + case HAL_PIXEL_FORMAT_YCrCb_422_I: + case HAL_PIXEL_FORMAT_CbYCrY_422_I: + return 2; + case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS: + case HAL_PIXEL_FORMAT_YCbCr_420_P010: + return 3; + default: + return -1; + } +} + // Returns the final buffer size meant to be allocated with ion unsigned int GetSize(const BufferInfo &info, unsigned int alignedw, unsigned int alignedh) { unsigned int size = 0; diff --git a/gralloc/gr_utils.h b/gralloc/gr_utils.h index 39d7e9bd..6b86ee63 100644 --- a/gralloc/gr_utils.h +++ b/gralloc/gr_utils.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016,2018-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2016,2018-2020, The Linux Foundation. All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -30,7 +30,7 @@ #ifndef __GR_UTILS_H__ #define __GR_UTILS_H__ -#include <android/hardware/graphics/common/1.1/types.h> +#include <android/hardware/graphics/common/1.2/types.h> #include "gralloc_priv.h" #include "qdMetaData.h" @@ -132,6 +132,7 @@ uint32_t GetBppForUncompressedRGB(int format); bool CpuCanAccess(uint64_t usage); bool CpuCanRead(uint64_t usage); bool CpuCanWrite(uint64_t usage); +int GetBpp(int format); unsigned int GetSize(const BufferInfo &d, unsigned int alignedw, unsigned int alignedh); int GetBufferSizeAndDimensions(const BufferInfo &d, unsigned int *size, unsigned int *alignedw, unsigned int *alignedh); diff --git a/gralloc/service.cpp b/gralloc/service.cpp index ecc86805..3431a1d6 100644 --- a/gralloc/service.cpp +++ b/gralloc/service.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -31,8 +31,8 @@ using android::hardware::configureRpcThreadpool; using android::hardware::joinRpcThreadpool; -using vendor::qti::hardware::display::allocator::V1_0::IQtiAllocator; -using vendor::qti::hardware::display::allocator::V1_0::implementation::QtiAllocator; +using vendor::qti::hardware::display::allocator::V3_0::IQtiAllocator; +using vendor::qti::hardware::display::allocator::V3_0::implementation::QtiAllocator; int main(int, char **) { android::sp<IQtiAllocator> service = new QtiAllocator(); diff --git a/sdm/libs/hwc2/Android.mk b/sdm/libs/hwc2/Android.mk index 4d423279..7dd763f8 100644 --- a/sdm/libs/hwc2/Android.mk +++ b/sdm/libs/hwc2/Android.mk @@ -25,7 +25,9 @@ LOCAL_SHARED_LIBRARIES := libsdmcore libqservice libbinder libhardware li vendor.display.config@1.0 \ android.hardware.graphics.mapper@2.0 \ android.hardware.graphics.mapper@2.1 \ + android.hardware.graphics.mapper@3.0 \ android.hardware.graphics.allocator@2.0 \ + android.hardware.graphics.allocator@3.0 \ android.hardware.graphics.composer@2.2 \ android.hardware.graphics.composer@2.3 \ hardware.google.light@1.0 \ diff --git a/sdm/libs/hwc2/hwc_buffer_allocator.cpp b/sdm/libs/hwc2/hwc_buffer_allocator.cpp index 896c5276..3ea5a61c 100644 --- a/sdm/libs/hwc2/hwc_buffer_allocator.cpp +++ b/sdm/libs/hwc2/hwc_buffer_allocator.cpp @@ -1,31 +1,31 @@ /* -* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are -* met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of The Linux Foundation nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #include <gralloc_priv.h> @@ -39,9 +39,10 @@ #define __CLASS__ "HWCBufferAllocator" -using android::hardware::graphics::common::V1_0::PixelFormat; -using android::hardware::graphics::mapper::V2_0::BufferDescriptor; using android::hardware::graphics::mapper::V2_0::Error; +using MapperV3Error = android::hardware::graphics::mapper::V3_0::Error; +using android::hardware::graphics::mapper::V2_0::BufferDescriptor; +using MapperV3BufferDescriptor = android::hardware::graphics::mapper::V3_0::BufferDescriptor; using android::hardware::hidl_handle; using android::hardware::hidl_vec; @@ -49,17 +50,29 @@ namespace sdm { DisplayError HWCBufferAllocator::GetGrallocInstance() { // Lazy initialization of gralloc HALs - if (mapper_ != nullptr || allocator_ != nullptr) { + if (mapper_V3_ != nullptr || mapper_V2_ != nullptr || allocator_V3_ != nullptr || + allocator_V2_ != nullptr) { return kErrorNone; } - allocator_ = IAllocator::getService(); - mapper_ = IMapper::getService(); + allocator_V3_ = IAllocatorV3::getService(); + if (allocator_V3_ == nullptr) { + allocator_V2_ = IAllocatorV2::getService(); + if (allocator_V2_ == nullptr) { + DLOGE("Unable to get allocator"); + return kErrorCriticalResource; + } + } - if (mapper_ == nullptr || allocator_ == nullptr) { - DLOGE("Unable to get mapper or allocator"); - return kErrorCriticalResource; + mapper_V3_ = IMapperV3::getService(); + if (mapper_V3_ == nullptr) { + mapper_V2_ = IMapperV2::getService(); + if (mapper_V2_ == nullptr) { + DLOGE("Unable to get mapper"); + return kErrorCriticalResource; + } } + return kErrorNone; } @@ -96,48 +109,99 @@ DisplayError HWCBufferAllocator::AllocateBuffer(BufferInfo *buffer_info) { alloc_flags |= BufferUsage::COMPOSER_OVERLAY; - IMapper::BufferDescriptorInfo descriptor_info; - descriptor_info.width = buffer_config.width; - descriptor_info.height = buffer_config.height; - descriptor_info.layerCount = 1; - descriptor_info.format = static_cast<PixelFormat>(format); - descriptor_info.usage = alloc_flags; - auto descriptor = BufferDescriptor(); - auto hidl_err = Error::NONE; - - mapper_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) { - hidl_err = _error; - descriptor = _descriptor; - }); - if (hidl_err != Error::NONE) { - DLOGE("Failed to create descriptor"); - return kErrorMemory; - } - - hidl_handle raw_handle = nullptr; - private_handle_t *hnd = nullptr; - - allocator_->allocate(descriptor, 1, - [&](const auto &_error, const auto &_stride, const auto &_buffers) { - hidl_err = _error; - raw_handle = _buffers[0]; - }); - if (hidl_err != Error::NONE) { - DLOGE("Failed to allocate buffer"); - return kErrorMemory; - } - const native_handle_t *buf = nullptr; - mapper_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) { - hidl_err = _error; - buf = static_cast<const native_handle_t *>(_buffer); - }); - - if (hidl_err != Error::NONE) { - DLOGE("Failed to import buffer into HWC"); - return kErrorMemory; + + if (mapper_V3_ != nullptr) { + IMapperV3::BufferDescriptorInfo descriptor_info; + descriptor_info.width = buffer_config.width; + descriptor_info.height = buffer_config.height; + descriptor_info.layerCount = 1; + descriptor_info.format = + static_cast<android::hardware::graphics::common::V1_2::PixelFormat>(format); + descriptor_info.usage = alloc_flags; + + auto hidl_err = MapperV3Error::NONE; + + auto descriptor = BufferDescriptor(); + mapper_V3_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) { + hidl_err = _error; + descriptor = _descriptor; + }); + + if (hidl_err != MapperV3Error::NONE) { + DLOGE("Failed to create descriptor"); + return kErrorMemory; + } + + hidl_handle raw_handle = nullptr; + + allocator_V3_->allocate(descriptor, 1, + [&](const auto &_error, const auto &_stride, const auto &_buffers) { + hidl_err = _error; + raw_handle = _buffers[0]; + }); + + if (hidl_err != MapperV3Error::NONE) { + DLOGE("Failed to allocate buffer"); + return kErrorMemory; + } + + mapper_V3_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) { + hidl_err = _error; + buf = static_cast<const native_handle_t *>(_buffer); + }); + + if (hidl_err != MapperV3Error::NONE) { + DLOGE("Failed to import buffer into HWC"); + return kErrorMemory; + } + } else { + IMapperV2::BufferDescriptorInfo descriptor_info; + descriptor_info.width = buffer_config.width; + descriptor_info.height = buffer_config.height; + descriptor_info.layerCount = 1; + descriptor_info.format = + static_cast<android::hardware::graphics::common::V1_0::PixelFormat>(format); + descriptor_info.usage = alloc_flags; + + auto hidl_err = Error::NONE; + + auto descriptor = BufferDescriptor(); + mapper_V2_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) { + hidl_err = _error; + descriptor = _descriptor; + }); + + if (hidl_err != Error::NONE) { + DLOGE("Failed to create descriptor"); + return kErrorMemory; + } + + hidl_handle raw_handle = nullptr; + + allocator_V2_->allocate(descriptor, 1, + [&](const auto &_error, const auto &_stride, const auto &_buffers) { + hidl_err = _error; + raw_handle = _buffers[0]; + }); + + if (hidl_err != Error::NONE) { + DLOGE("Failed to allocate buffer"); + return kErrorMemory; + } + + mapper_V2_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) { + hidl_err = _error; + buf = static_cast<const native_handle_t *>(_buffer); + }); + + if (hidl_err != Error::NONE) { + DLOGE("Failed to import buffer into HWC"); + return kErrorMemory; + } } + private_handle_t *hnd = nullptr; hnd = (private_handle_t *)buf; // NOLINT alloc_buffer_info->fd = hnd->fd; alloc_buffer_info->stride = UINT32(hnd->width); @@ -153,7 +217,11 @@ DisplayError HWCBufferAllocator::AllocateBuffer(BufferInfo *buffer_info) { DisplayError HWCBufferAllocator::FreeBuffer(BufferInfo *buffer_info) { DisplayError err = kErrorNone; auto hnd = reinterpret_cast<void *>(buffer_info->private_data); - mapper_->freeBuffer(hnd); + if (mapper_V3_ != nullptr) { + mapper_V3_->freeBuffer(hnd); + } else { + mapper_V2_->freeBuffer(hnd); + } AllocatedBufferInfo &alloc_buffer_info = buffer_info->alloc_buffer_info; alloc_buffer_info.fd = -1; @@ -411,9 +479,6 @@ DisplayError HWCBufferAllocator::MapBuffer(const private_handle_t *handle, int a if (err != kErrorNone) { return err; } - void *buffer_ptr = NULL; - const IMapper::Rect access_region = {.left = 0, .top = 0, .width = 0, .height = 0}; - NATIVE_HANDLE_DECLARE_STORAGE(acquire_fence_storage, 1, 0); hidl_handle acquire_fence_handle; if (acquire_fence >= 0) { @@ -423,13 +488,27 @@ DisplayError HWCBufferAllocator::MapBuffer(const private_handle_t *handle, int a } auto hnd = const_cast<private_handle_t *>(handle); - mapper_->lock(reinterpret_cast<void *>(hnd), (uint64_t)BufferUsage::CPU_READ_OFTEN, - access_region, acquire_fence_handle, [&](const auto &_error, const auto &_buffer) { - if (_error == Error::NONE) { - buffer_ptr = _buffer; - } - }); - + void *buffer_ptr = NULL; + if (mapper_V3_ != nullptr) { + const IMapperV3::Rect access_region = {.left = 0, .top = 0, .width = 0, .height = 0}; + mapper_V3_->lock( + reinterpret_cast<void *>(hnd), (uint64_t)BufferUsage::CPU_READ_OFTEN, access_region, + acquire_fence_handle, + [&](const auto &_error, const auto &_buffer, const auto &_bpp, const auto &_stride) { + if (_error == MapperV3Error::NONE) { + buffer_ptr = _buffer; + } + }); + } else { + const IMapperV2::Rect access_region = {.left = 0, .top = 0, .width = 0, .height = 0}; + mapper_V2_->lock(reinterpret_cast<void *>(hnd), (uint64_t)BufferUsage::CPU_READ_OFTEN, + access_region, acquire_fence_handle, + [&](const auto &_error, const auto &_buffer) { + if (_error == Error::NONE) { + buffer_ptr = _buffer; + } + }); + } if (!buffer_ptr) { return kErrorUndefined; } @@ -440,12 +519,21 @@ DisplayError HWCBufferAllocator::UnmapBuffer(const private_handle_t *handle, int DisplayError err = kErrorNone; *release_fence = -1; auto hnd = const_cast<private_handle_t *>(handle); - mapper_->unlock(reinterpret_cast<void *>(hnd), - [&](const auto &_error, const auto &_release_fence) { - if (_error != Error::NONE) { - err = kErrorUndefined; - } - }); + if (mapper_V3_ != nullptr) { + mapper_V3_->unlock(reinterpret_cast<void *>(hnd), + [&](const auto &_error, const auto &_release_fence) { + if (_error != MapperV3Error::NONE) { + err = kErrorUndefined; + } + }); + } else { + mapper_V2_->unlock(reinterpret_cast<void *>(hnd), + [&](const auto &_error, const auto &_release_fence) { + if (_error != Error::NONE) { + err = kErrorUndefined; + } + }); + } return err; } diff --git a/sdm/libs/hwc2/hwc_buffer_allocator.h b/sdm/libs/hwc2/hwc_buffer_allocator.h index cec5614c..b412542a 100644 --- a/sdm/libs/hwc2/hwc_buffer_allocator.h +++ b/sdm/libs/hwc2/hwc_buffer_allocator.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -33,12 +33,15 @@ #include <sys/mman.h> #include <android/hardware/graphics/allocator/2.0/IAllocator.h> +#include <android/hardware/graphics/allocator/3.0/IAllocator.h> #include <android/hardware/graphics/mapper/2.1/IMapper.h> +#include <android/hardware/graphics/mapper/3.0/IMapper.h> #include "gralloc_priv.h" -using android::hardware::graphics::allocator::V2_0::IAllocator; -using android::hardware::graphics::mapper::V2_0::IMapper; - +using IAllocatorV3 = android::hardware::graphics::allocator::V3_0::IAllocator; +using IAllocatorV2 = android::hardware::graphics::allocator::V2_0::IAllocator; +using IMapperV3 = android::hardware::graphics::mapper::V3_0::IMapper; +using IMapperV2 = android::hardware::graphics::mapper::V2_0::IMapper; namespace sdm { template <class Type> @@ -65,8 +68,10 @@ class HWCBufferAllocator : public BufferAllocator { private: DisplayError GetGrallocInstance(); - android::sp<IMapper> mapper_; - android::sp<IAllocator> allocator_; + android::sp<IMapperV2> mapper_V2_; + android::sp<IMapperV3> mapper_V3_; + android::sp<IAllocatorV2> allocator_V2_; + android::sp<IAllocatorV3> allocator_V3_; }; } // namespace sdm |