diff --git a/graphics/composer/2.1/utils/vts/ComposerVts.cpp b/graphics/composer/2.1/utils/vts/ComposerVts.cpp index 4b6b7c86b8..55aaf12b8e 100644 --- a/graphics/composer/2.1/utils/vts/ComposerVts.cpp +++ b/graphics/composer/2.1/utils/vts/ComposerVts.cpp @@ -308,6 +308,12 @@ void ComposerClient::execute(TestCommandReader* reader, CommandWriterBase* write writer->reset(); } +NativeHandleWrapper::~NativeHandleWrapper() { + if (mHandle) { + mGralloc.freeBuffer(mHandle); + } +} + Gralloc::Gralloc() { [this] { ASSERT_NO_FATAL_FAILURE(mGralloc4 = std::make_shared("default", "default", @@ -324,9 +330,10 @@ Gralloc::Gralloc() { }(); } -const native_handle_t* Gralloc::allocate(uint32_t width, uint32_t height, uint32_t layerCount, - PixelFormat format, uint64_t usage, bool import, - uint32_t* outStride) { +const NativeHandleWrapper Gralloc::allocate(uint32_t width, uint32_t height, uint32_t layerCount, + PixelFormat format, uint64_t usage, bool import, + uint32_t* outStride) { + const native_handle_t* handle; if (mGralloc4) { IMapper4::BufferDescriptorInfo info{}; info.width = width; @@ -334,7 +341,7 @@ const native_handle_t* Gralloc::allocate(uint32_t width, uint32_t height, uint32 info.layerCount = layerCount; info.format = static_cast(format); info.usage = usage; - return mGralloc4->allocate(info, import, outStride); + handle = mGralloc4->allocate(info, import, outStride); } else if (mGralloc3) { IMapper3::BufferDescriptorInfo info{}; info.width = width; @@ -342,7 +349,7 @@ const native_handle_t* Gralloc::allocate(uint32_t width, uint32_t height, uint32 info.layerCount = layerCount; info.format = static_cast(format); info.usage = usage; - return mGralloc3->allocate(info, import, outStride); + handle = mGralloc3->allocate(info, import, outStride); } else { IMapper2::BufferDescriptorInfo info{}; info.width = width; @@ -350,8 +357,9 @@ const native_handle_t* Gralloc::allocate(uint32_t width, uint32_t height, uint32 info.layerCount = layerCount; info.format = format; info.usage = usage; - return mGralloc2->allocate(info, import, outStride); + handle = mGralloc2->allocate(info, import, outStride); } + return NativeHandleWrapper(*this, handle); } void* Gralloc::lock(const native_handle_t* bufferHandle, uint64_t cpuUsage, diff --git a/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/ComposerVts.h b/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/ComposerVts.h index 63aa713e54..2949823364 100644 --- a/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/ComposerVts.h +++ b/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/ComposerVts.h @@ -136,13 +136,30 @@ class AccessRegion { int32_t height; }; +class Gralloc; + +// RAII wrapper around native_handle_t* +class NativeHandleWrapper { + public: + NativeHandleWrapper(Gralloc& gralloc, const native_handle_t* handle) + : mGralloc(gralloc), mHandle(handle) {} + + ~NativeHandleWrapper(); + + const native_handle_t* get() { return mHandle; } + + private: + Gralloc& mGralloc; + const native_handle_t* mHandle; +}; + class Gralloc { public: explicit Gralloc(); - const native_handle_t* allocate(uint32_t width, uint32_t height, uint32_t layerCount, - PixelFormat format, uint64_t usage, bool import = true, - uint32_t* outStride = nullptr); + const NativeHandleWrapper allocate(uint32_t width, uint32_t height, uint32_t layerCount, + PixelFormat format, uint64_t usage, bool import = true, + uint32_t* outStride = nullptr); void* lock(const native_handle_t* bufferHandle, uint64_t cpuUsage, const AccessRegion& accessRegionRect, int acquireFence); diff --git a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp index f0250c07f3..48226785d5 100644 --- a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp +++ b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp @@ -666,7 +666,7 @@ class GraphicsComposerHidlCommandTest : public GraphicsComposerHidlTest { ASSERT_NO_FATAL_FAILURE(GraphicsComposerHidlTest::TearDown()); } - const native_handle_t* allocate() { + NativeHandleWrapper allocate() { uint64_t usage = static_cast(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN | BufferUsage::COMPOSER_OVERLAY); @@ -727,11 +727,11 @@ TEST_P(GraphicsComposerHidlCommandTest, SET_OUTPUT_BUFFER) { display = mComposerClient->createVirtualDisplay(64, 64, PixelFormat::IMPLEMENTATION_DEFINED, kBufferSlotCount, &format)); - const native_handle_t* handle; - ASSERT_NO_FATAL_FAILURE(handle = allocate()); + std::unique_ptr handle; + ASSERT_NO_FATAL_FAILURE(handle.reset(new NativeHandleWrapper(allocate()))); mWriter->selectDisplay(display); - mWriter->setOutputBuffer(0, handle, -1); + mWriter->setOutputBuffer(0, handle->get(), -1); execute(); } @@ -783,7 +783,7 @@ TEST_P(GraphicsComposerHidlCommandTest, PRESENT_DISPLAY_NO_LAYER_STATE_CHANGES) mComposerClient->setColorMode(mPrimaryDisplay, ColorMode::NATIVE); auto handle = allocate(); - ASSERT_NE(nullptr, handle); + ASSERT_NE(nullptr, handle.get()); IComposerClient::Rect displayFrame{0, 0, mDisplayWidth, mDisplayHeight}; @@ -800,7 +800,7 @@ TEST_P(GraphicsComposerHidlCommandTest, PRESENT_DISPLAY_NO_LAYER_STATE_CHANGES) mWriter->setLayerZOrder(10); mWriter->setLayerBlendMode(IComposerClient::BlendMode::NONE); mWriter->setLayerSurfaceDamage(std::vector(1, displayFrame)); - mWriter->setLayerBuffer(0, handle, -1); + mWriter->setLayerBuffer(0, handle.get(), -1); mWriter->setLayerDataspace(Dataspace::UNKNOWN); mWriter->validateDisplay(); @@ -817,8 +817,8 @@ TEST_P(GraphicsComposerHidlCommandTest, PRESENT_DISPLAY_NO_LAYER_STATE_CHANGES) mWriter->selectLayer(layer); auto handle2 = allocate(); - ASSERT_NE(nullptr, handle2); - mWriter->setLayerBuffer(0, handle2, -1); + ASSERT_NE(nullptr, handle2.get()); + mWriter->setLayerBuffer(0, handle2.get(), -1); mWriter->setLayerSurfaceDamage(std::vector(1, {0, 0, 10, 10})); mWriter->presentDisplay(); execute(); @@ -833,12 +833,12 @@ TEST_P(GraphicsComposerHidlCommandTest, SET_LAYER_CURSOR_POSITION) { mComposerClient->createLayer(mPrimaryDisplay, kBufferSlotCount)); auto handle = allocate(); - ASSERT_NE(nullptr, handle); + ASSERT_NE(nullptr, handle.get()); IComposerClient::Rect displayFrame{0, 0, mDisplayWidth, mDisplayHeight}; mWriter->selectDisplay(mPrimaryDisplay); mWriter->selectLayer(layer); - mWriter->setLayerBuffer(0, handle, -1); + mWriter->setLayerBuffer(0, handle.get(), -1); mWriter->setLayerCompositionType(IComposerClient::Composition::CURSOR); mWriter->setLayerDisplayFrame(displayFrame); mWriter->setLayerPlaneAlpha(1); @@ -871,7 +871,7 @@ TEST_P(GraphicsComposerHidlCommandTest, SET_LAYER_CURSOR_POSITION) { */ TEST_P(GraphicsComposerHidlCommandTest, SET_LAYER_BUFFER) { auto handle = allocate(); - ASSERT_NE(nullptr, handle); + ASSERT_NE(nullptr, handle.get()); Layer layer; ASSERT_NO_FATAL_FAILURE(layer = @@ -879,7 +879,7 @@ TEST_P(GraphicsComposerHidlCommandTest, SET_LAYER_BUFFER) { mWriter->selectDisplay(mPrimaryDisplay); mWriter->selectLayer(layer); - mWriter->setLayerBuffer(0, handle, -1); + mWriter->setLayerBuffer(0, handle.get(), -1); execute(); } @@ -1003,7 +1003,7 @@ TEST_P(GraphicsComposerHidlCommandTest, SET_LAYER_SIDEBAND_STREAM) { } auto handle = allocate(); - ASSERT_NE(nullptr, handle); + ASSERT_NE(nullptr, handle.get()); Layer layer; ASSERT_NO_FATAL_FAILURE(layer = @@ -1011,7 +1011,7 @@ TEST_P(GraphicsComposerHidlCommandTest, SET_LAYER_SIDEBAND_STREAM) { mWriter->selectDisplay(mPrimaryDisplay); mWriter->selectLayer(layer); - mWriter->setLayerSidebandStream(handle); + mWriter->setLayerSidebandStream(handle.get()); execute(); } diff --git a/graphics/composer/2.2/utils/vts/ReadbackVts.cpp b/graphics/composer/2.2/utils/vts/ReadbackVts.cpp index 19f5e8c614..30596fc4c9 100644 --- a/graphics/composer/2.2/utils/vts/ReadbackVts.cpp +++ b/graphics/composer/2.2/utils/vts/ReadbackVts.cpp @@ -208,22 +208,13 @@ ReadbackBuffer::ReadbackBuffer(Display display, const std::shared_ptrfreeBuffer(mBufferHandle); - } -} - void ReadbackBuffer::setReadbackBuffer() { - if (mBufferHandle != nullptr) { - mGralloc->freeBuffer(mBufferHandle); - mBufferHandle = nullptr; - } - mBufferHandle = mGralloc->allocate(mWidth, mHeight, mLayerCount, mFormat, mUsage, - /*import*/ true, &mStride); - ASSERT_NE(false, mGralloc->validateBufferSize(mBufferHandle, mWidth, mHeight, mLayerCount, - mFormat, mUsage, mStride)); - ASSERT_NO_FATAL_FAILURE(mComposerClient->setReadbackBuffer(mDisplay, mBufferHandle, -1)); + mBufferHandle.reset(new Gralloc::NativeHandleWrapper( + mGralloc->allocate(mWidth, mHeight, mLayerCount, mFormat, mUsage, + /*import*/ true, &mStride))); + ASSERT_NE(false, mGralloc->validateBufferSize(mBufferHandle->get(), mWidth, mHeight, + mLayerCount, mFormat, mUsage, mStride)); + ASSERT_NO_FATAL_FAILURE(mComposerClient->setReadbackBuffer(mDisplay, mBufferHandle->get(), -1)); } void ReadbackBuffer::checkReadbackBuffer(std::vector expectedColors) { @@ -231,11 +222,11 @@ void ReadbackBuffer::checkReadbackBuffer(std::vector exp int32_t fenceHandle; ASSERT_NO_FATAL_FAILURE(mComposerClient->getReadbackBufferFence(mDisplay, &fenceHandle)); - void* bufData = mGralloc->lock(mBufferHandle, mUsage, mAccessRegion, fenceHandle); + void* bufData = mGralloc->lock(mBufferHandle->get(), mUsage, mAccessRegion, fenceHandle); ASSERT_TRUE(mPixelFormat == PixelFormat::RGB_888 || mPixelFormat == PixelFormat::RGBA_8888); ReadbackHelper::compareColorBuffers(expectedColors, bufData, mStride, mWidth, mHeight, mPixelFormat); - int32_t unlockFence = mGralloc->unlock(mBufferHandle); + int32_t unlockFence = mGralloc->unlock(mBufferHandle->get()); if (unlockFence != -1) { sync_wait(unlockFence, -1); close(unlockFence); @@ -281,23 +272,17 @@ TestBufferLayer::TestBufferLayer(const std::shared_ptr& client, setSourceCrop({0, 0, (float)width, (float)height}); } -TestBufferLayer::~TestBufferLayer() { - if (mBufferHandle != nullptr) { - mGralloc->freeBuffer(mBufferHandle); - } -} - void TestBufferLayer::write(const std::shared_ptr& writer) { TestLayer::write(writer); writer->setLayerCompositionType(mComposition); writer->setLayerVisibleRegion(std::vector(1, mDisplayFrame)); - if (mBufferHandle != nullptr) writer->setLayerBuffer(0, mBufferHandle, mFillFence); + if (mBufferHandle != nullptr) writer->setLayerBuffer(0, mBufferHandle->get(), mFillFence); } LayerSettings TestBufferLayer::toRenderEngineLayerSettings() { LayerSettings layerSettings = TestLayer::toRenderEngineLayerSettings(); layerSettings.source.buffer.buffer = std::make_shared( - new GraphicBuffer(mBufferHandle, GraphicBuffer::CLONE_HANDLE, mWidth, mHeight, + new GraphicBuffer(mBufferHandle->get(), GraphicBuffer::CLONE_HANDLE, mWidth, mHeight, static_cast(mFormat), 1, mUsage, mStride), mRenderEngine.getInternalRenderEngine(), renderengine::ExternalTexture::Usage::READABLE); @@ -318,10 +303,10 @@ LayerSettings TestBufferLayer::toRenderEngineLayerSettings() { } void TestBufferLayer::fillBuffer(std::vector expectedColors) { - void* bufData = mGralloc->lock(mBufferHandle, mUsage, mAccessRegion, -1); + void* bufData = mGralloc->lock(mBufferHandle->get(), mUsage, mAccessRegion, -1); ASSERT_NO_FATAL_FAILURE( ReadbackHelper::fillBuffer(mWidth, mHeight, mStride, bufData, mFormat, expectedColors)); - mFillFence = mGralloc->unlock(mBufferHandle); + mFillFence = mGralloc->unlock(mBufferHandle->get()); if (mFillFence != -1) { sync_wait(mFillFence, -1); close(mFillFence); @@ -329,16 +314,13 @@ void TestBufferLayer::fillBuffer(std::vector expectedCol } void TestBufferLayer::setBuffer(std::vector colors) { - if (mBufferHandle != nullptr) { - mGralloc->freeBuffer(mBufferHandle); - mBufferHandle = nullptr; - } - mBufferHandle = mGralloc->allocate(mWidth, mHeight, mLayerCount, mFormat, mUsage, - /*import*/ true, &mStride); - ASSERT_NE(nullptr, mBufferHandle); + mBufferHandle.reset(new Gralloc::NativeHandleWrapper( + mGralloc->allocate(mWidth, mHeight, mLayerCount, mFormat, mUsage, + /*import*/ true, &mStride))); + ASSERT_NE(nullptr, mBufferHandle->get()); ASSERT_NO_FATAL_FAILURE(fillBuffer(colors)); - ASSERT_NE(false, mGralloc->validateBufferSize(mBufferHandle, mWidth, mHeight, mLayerCount, - mFormat, mUsage, mStride)); + ASSERT_NE(false, mGralloc->validateBufferSize(mBufferHandle->get(), mWidth, mHeight, + mLayerCount, mFormat, mUsage, mStride)); } void TestBufferLayer::setDataspace(Dataspace dataspace, diff --git a/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ComposerVts.h b/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ComposerVts.h index 6bc2732d7d..d3bba17ed3 100644 --- a/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ComposerVts.h +++ b/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ComposerVts.h @@ -93,10 +93,12 @@ class ComposerClient : public V2_1::vts::ComposerClient { class Gralloc : public V2_1::vts::Gralloc { public: + using NativeHandleWrapper = V2_1::vts::NativeHandleWrapper; + Gralloc(); - const native_handle_t* allocate(uint32_t width, uint32_t height, uint32_t layerCount, - PixelFormat format, uint64_t usage, bool import = true, - uint32_t* outStride = nullptr) { + const NativeHandleWrapper allocate(uint32_t width, uint32_t height, uint32_t layerCount, + PixelFormat format, uint64_t usage, bool import = true, + uint32_t* outStride = nullptr) { return V2_1::vts::Gralloc::allocate( width, height, layerCount, static_cast(format), usage, diff --git a/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ReadbackVts.h b/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ReadbackVts.h index b24e3b63bd..58efde9b5a 100644 --- a/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ReadbackVts.h +++ b/graphics/composer/2.2/utils/vts/include/composer-vts/2.2/ReadbackVts.h @@ -25,6 +25,8 @@ #include #include +#include + namespace android { namespace hardware { namespace graphics { @@ -116,8 +118,6 @@ class TestBufferLayer : public TestLayer { PixelFormat format, IComposerClient::Composition composition = IComposerClient::Composition::DEVICE); - ~TestBufferLayer(); - void write(const std::shared_ptr& writer) override; LayerSettings toRenderEngineLayerSettings() override; @@ -143,7 +143,7 @@ class TestBufferLayer : public TestLayer { std::shared_ptr mGralloc; TestRenderEngine& mRenderEngine; int32_t mFillFence; - const native_handle_t* mBufferHandle = nullptr; + std::unique_ptr mBufferHandle; }; class ReadbackHelper { @@ -182,7 +182,6 @@ class ReadbackBuffer { ReadbackBuffer(Display display, const std::shared_ptr& client, const std::shared_ptr& gralloc, uint32_t width, uint32_t height, PixelFormat pixelFormat, Dataspace dataspace); - ~ReadbackBuffer(); void setReadbackBuffer(); @@ -196,7 +195,7 @@ class ReadbackBuffer { uint64_t mUsage; AccessRegion mAccessRegion; uint32_t mStride; - const native_handle_t* mBufferHandle = nullptr; + std::unique_ptr mBufferHandle = nullptr; PixelFormat mPixelFormat; Dataspace mDataspace; Display mDisplay; diff --git a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2ReadbackTest.cpp b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2ReadbackTest.cpp index 8d52173e59..7a1568bd9f 100644 --- a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2ReadbackTest.cpp +++ b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2ReadbackTest.cpp @@ -39,15 +39,13 @@ namespace V2_2 { namespace vts { namespace { -using android::GraphicBuffer; using android::Rect; -using android::hardware::hidl_handle; using common::V1_1::BufferUsage; using common::V1_1::Dataspace; using common::V1_1::PixelFormat; -using mapper::V2_1::IMapper; using V2_1::Config; using V2_1::Display; +using V2_1::vts::NativeHandleWrapper; using V2_1::vts::TestCommandReader; using vts::Gralloc; @@ -355,9 +353,9 @@ TEST_P(GraphicsCompositionTest, SetLayerBufferNoEffect) { // This following buffer call should have no effect uint64_t usage = static_cast(BufferUsage::CPU_READ_OFTEN | BufferUsage::CPU_WRITE_OFTEN); - const native_handle_t* bufferHandle = + NativeHandleWrapper bufferHandle = mGralloc->allocate(mDisplayWidth, mDisplayHeight, 1, PixelFormat::RGBA_8888, usage); - mWriter->setLayerBuffer(0, bufferHandle, -1); + mWriter->setLayerBuffer(0, bufferHandle.get(), -1); // expected color for each pixel std::vector expectedColors(mDisplayWidth * mDisplayHeight); @@ -465,24 +463,24 @@ TEST_P(GraphicsCompositionTest, ClientComposition) { // create client target buffer uint32_t clientStride; - const native_handle_t* clientBufferHandle = + NativeHandleWrapper clientBufferHandle = mGralloc->allocate(layer->mWidth, layer->mHeight, layer->mLayerCount, clientFormat, clientUsage, /*import*/ true, &clientStride); - ASSERT_NE(nullptr, clientBufferHandle); + ASSERT_NE(nullptr, clientBufferHandle.get()); void* clientBufData = - mGralloc->lock(clientBufferHandle, clientUsage, layer->mAccessRegion, -1); + mGralloc->lock(clientBufferHandle.get(), clientUsage, layer->mAccessRegion, -1); ASSERT_NO_FATAL_FAILURE(ReadbackHelper::fillBuffer(layer->mWidth, layer->mHeight, clientStride, clientBufData, clientFormat, expectedColors)); - int clientFence = mGralloc->unlock(clientBufferHandle); + int clientFence = mGralloc->unlock(clientBufferHandle.get()); if (clientFence != -1) { sync_wait(clientFence, -1); close(clientFence); } - mWriter->setClientTarget(0, clientBufferHandle, clientFence, clientDataspace, + mWriter->setClientTarget(0, clientBufferHandle.get(), clientFence, clientDataspace, std::vector(1, damage)); layer->setToClientComposition(mWriter); @@ -593,12 +591,12 @@ TEST_P(GraphicsCompositionTest, DeviceAndClientComposition) { // create client target buffer ASSERT_EQ(1, mReader->mCompositionChanges[0].second); uint32_t clientStride; - const native_handle_t* clientBufferHandle = + NativeHandleWrapper clientBufferHandle = mGralloc->allocate(mDisplayWidth, mDisplayHeight, clientLayer->mLayerCount, clientFormat, clientUsage, /*import*/ true, &clientStride); - ASSERT_NE(nullptr, clientBufferHandle); + ASSERT_NE(nullptr, clientBufferHandle.get()); - void* clientBufData = mGralloc->lock(clientBufferHandle, clientUsage, + void* clientBufData = mGralloc->lock(clientBufferHandle.get(), clientUsage, {0, 0, mDisplayWidth, mDisplayHeight}, -1); std::vector clientColors(mDisplayWidth * mDisplayHeight); @@ -606,13 +604,13 @@ TEST_P(GraphicsCompositionTest, DeviceAndClientComposition) { ASSERT_NO_FATAL_FAILURE(ReadbackHelper::fillBuffer(mDisplayWidth, mDisplayHeight, clientStride, clientBufData, clientFormat, clientColors)); - int clientFence = mGralloc->unlock(clientBufferHandle); + int clientFence = mGralloc->unlock(clientBufferHandle.get()); if (clientFence != -1) { sync_wait(clientFence, -1); close(clientFence); } - mWriter->setClientTarget(0, clientBufferHandle, clientFence, clientDataspace, + mWriter->setClientTarget(0, clientBufferHandle.get(), clientFence, clientDataspace, std::vector(1, clientFrame)); clientLayer->setToClientComposition(mWriter); mWriter->validateDisplay(); diff --git a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp index 31ec88513c..7e25a2e125 100644 --- a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp +++ b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp @@ -36,13 +36,11 @@ namespace vts { namespace { using common::V1_0::BufferUsage; -using common::V1_0::ColorTransform; -using common::V1_0::Transform; using common::V1_1::ColorMode; using common::V1_1::Dataspace; using common::V1_1::PixelFormat; using common::V1_1::RenderIntent; -using mapper::V2_0::IMapper; +using V2_1::vts::NativeHandleWrapper; class GraphicsComposerHidlTest : public ::testing::TestWithParam { protected: @@ -154,7 +152,7 @@ class GraphicsComposerHidlCommandTest : public GraphicsComposerHidlTest { ASSERT_NO_FATAL_FAILURE(GraphicsComposerHidlTest::TearDown()); } - const native_handle_t* allocate() { + NativeHandleWrapper allocate() { uint64_t usage = static_cast(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN); return mGralloc->allocate(/*width*/ 64, /*height*/ 64, /*layerCount*/ 1, @@ -440,12 +438,12 @@ TEST_P(GraphicsComposerHidlTest, SetReadbackBuffer) { static_cast(BufferUsage::COMPOSER_OVERLAY | BufferUsage::CPU_READ_OFTEN); std::unique_ptr gralloc; - const native_handle_t* buffer; + std::unique_ptr buffer; ASSERT_NO_FATAL_FAILURE(gralloc = std::make_unique()); - ASSERT_NO_FATAL_FAILURE(buffer = gralloc->allocate(mDisplayWidth, mDisplayHeight, 1, - mReadbackPixelFormat, usage)); + ASSERT_NO_FATAL_FAILURE(buffer.reset(new NativeHandleWrapper( + gralloc->allocate(mDisplayWidth, mDisplayHeight, 1, mReadbackPixelFormat, usage)))); - mComposerClient->setReadbackBuffer(mPrimaryDisplay, buffer, -1); + mComposerClient->setReadbackBuffer(mPrimaryDisplay, buffer->get(), -1); } /** @@ -463,12 +461,13 @@ TEST_P(GraphicsComposerHidlTest, SetReadbackBufferBadDisplay) { static_cast(BufferUsage::COMPOSER_OVERLAY | BufferUsage::CPU_READ_OFTEN); std::unique_ptr gralloc; - const native_handle_t* buffer; + std::unique_ptr buffer; ASSERT_NO_FATAL_FAILURE(gralloc = std::make_unique()); - ASSERT_NO_FATAL_FAILURE(buffer = gralloc->allocate(mDisplayWidth, mDisplayHeight, 1, - mReadbackPixelFormat, usage)); + ASSERT_NO_FATAL_FAILURE(buffer.reset(new NativeHandleWrapper( + gralloc->allocate(mDisplayWidth, mDisplayHeight, 1, mReadbackPixelFormat, usage)))); - Error error = mComposerClient->getRaw()->setReadbackBuffer(mInvalidDisplayId, buffer, nullptr); + Error error = + mComposerClient->getRaw()->setReadbackBuffer(mInvalidDisplayId, buffer->get(), nullptr); ASSERT_EQ(Error::BAD_DISPLAY, error); } diff --git a/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp b/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp index 8b42654a55..54ba79dcc1 100644 --- a/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp +++ b/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp @@ -38,12 +38,10 @@ namespace V2_3 { namespace vts { namespace { -using common::V1_0::BufferUsage; using common::V1_1::RenderIntent; using common::V1_2::ColorMode; using common::V1_2::Dataspace; using common::V1_2::PixelFormat; -using mapper::V2_0::IMapper; using V2_2::vts::Gralloc; class GraphicsComposerHidlTest : public ::testing::TestWithParam { @@ -140,12 +138,6 @@ class GraphicsComposerHidlCommandTest : public GraphicsComposerHidlTest { ASSERT_NO_FATAL_FAILURE(GraphicsComposerHidlTest::TearDown()); } - const native_handle_t* allocate() { - return mGralloc->allocate( - 64, 64, 1, static_cast(PixelFormat::RGBA_8888), - static_cast(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN)); - } - void execute() { mComposerClient->execute(mReader.get(), mWriter.get()); } std::unique_ptr mWriter; diff --git a/graphics/composer/2.4/vts/functional/VtsHalGraphicsComposerV2_4TargetTest.cpp b/graphics/composer/2.4/vts/functional/VtsHalGraphicsComposerV2_4TargetTest.cpp index 2f0429c01c..5aceda721e 100644 --- a/graphics/composer/2.4/vts/functional/VtsHalGraphicsComposerV2_4TargetTest.cpp +++ b/graphics/composer/2.4/vts/functional/VtsHalGraphicsComposerV2_4TargetTest.cpp @@ -52,8 +52,8 @@ using common::V1_1::RenderIntent; using common::V1_2::ColorMode; using common::V1_2::Dataspace; using common::V1_2::PixelFormat; -using mapper::V2_0::IMapper; using V2_1::Layer; +using V2_1::vts::NativeHandleWrapper; using V2_2::Transform; using V2_2::vts::Gralloc; @@ -159,7 +159,7 @@ class GraphicsComposerHidlTest : public ::testing::TestWithParam { void execute() { mComposerClient->execute(mReader.get(), mWriter.get()); } - const native_handle_t* allocate(int32_t width, int32_t height) { + NativeHandleWrapper allocate(int32_t width, int32_t height) { return mGralloc->allocate( width, height, /*layerCount*/ 1, static_cast(PixelFormat::RGBA_8888), @@ -493,46 +493,53 @@ void GraphicsComposerHidlTest::sendRefreshFrame(const VtsDisplay& display, IComposerClient::FRect displayCrop = display.getCrop(); int32_t displayWidth = static_cast(std::ceilf(displayCrop.right - displayCrop.left)); int32_t displayHeight = static_cast(std::ceilf(displayCrop.bottom - displayCrop.top)); - auto handle = allocate(displayWidth, displayHeight); - ASSERT_NE(nullptr, handle); - Layer layer; ASSERT_NO_FATAL_FAILURE(layer = mComposerClient->createLayer(display.get(), kBufferSlotCount)); - mWriter->selectLayer(layer); - mWriter->setLayerCompositionType(IComposerClient::Composition::DEVICE); - mWriter->setLayerDisplayFrame(display.getFrameRect()); - mWriter->setLayerPlaneAlpha(1); - mWriter->setLayerSourceCrop(display.getCrop()); - mWriter->setLayerTransform(static_cast(0)); - mWriter->setLayerVisibleRegion(std::vector(1, display.getFrameRect())); - mWriter->setLayerZOrder(10); - mWriter->setLayerBlendMode(IComposerClient::BlendMode::NONE); - mWriter->setLayerSurfaceDamage(std::vector(1, display.getFrameRect())); - mWriter->setLayerBuffer(0, handle, -1); - mWriter->setLayerDataspace(Dataspace::UNKNOWN); - mWriter->validateDisplay(); - execute(); - ASSERT_EQ(0, mReader->mErrors.size()); - mReader->mCompositionChanges.clear(); + { + auto handle = allocate(displayWidth, displayHeight); + ASSERT_NE(nullptr, handle.get()); - mWriter->presentDisplay(); - execute(); - ASSERT_EQ(0, mReader->mErrors.size()); + mWriter->selectLayer(layer); + mWriter->setLayerCompositionType(IComposerClient::Composition::DEVICE); + mWriter->setLayerDisplayFrame(display.getFrameRect()); + mWriter->setLayerPlaneAlpha(1); + mWriter->setLayerSourceCrop(display.getCrop()); + mWriter->setLayerTransform(static_cast(0)); + mWriter->setLayerVisibleRegion( + std::vector(1, display.getFrameRect())); + mWriter->setLayerZOrder(10); + mWriter->setLayerBlendMode(IComposerClient::BlendMode::NONE); + mWriter->setLayerSurfaceDamage( + std::vector(1, display.getFrameRect())); + mWriter->setLayerBuffer(0, handle.get(), -1); + mWriter->setLayerDataspace(Dataspace::UNKNOWN); - mWriter->selectLayer(layer); - auto handle2 = allocate(displayWidth, displayHeight); - ASSERT_NE(nullptr, handle2); + mWriter->validateDisplay(); + execute(); + ASSERT_EQ(0, mReader->mErrors.size()); + mReader->mCompositionChanges.clear(); - mWriter->setLayerBuffer(0, handle2, -1); - mWriter->setLayerSurfaceDamage(std::vector(1, {0, 0, 10, 10})); - mWriter->validateDisplay(); - execute(); - ASSERT_EQ(0, mReader->mErrors.size()); - mReader->mCompositionChanges.clear(); + mWriter->presentDisplay(); + execute(); + ASSERT_EQ(0, mReader->mErrors.size()); + } - mWriter->presentDisplay(); - execute(); + { + auto handle = allocate(displayWidth, displayHeight); + ASSERT_NE(nullptr, handle.get()); + + mWriter->selectLayer(layer); + mWriter->setLayerBuffer(0, handle.get(), -1); + mWriter->setLayerSurfaceDamage(std::vector(1, {0, 0, 10, 10})); + mWriter->validateDisplay(); + execute(); + ASSERT_EQ(0, mReader->mErrors.size()); + mReader->mCompositionChanges.clear(); + + mWriter->presentDisplay(); + execute(); + } ASSERT_NO_FATAL_FAILURE(mComposerClient->destroyLayer(display.get(), layer)); }