diff options
author | Chia-I Wu <olv@google.com> | 2018-05-22 10:58:48 -0700 |
---|---|---|
committer | Chia-I Wu <olv@google.com> | 2018-05-22 15:17:50 -0700 |
commit | 09782444e3e8e0a2bb61bd44c5fed06020c314f0 (patch) | |
tree | 88e443ac727d94e20d4bc82219791dda283931b8 /graphics | |
parent | 3fea05cd400172194adfb5fe8fe5c0e25ca292ab (diff) | |
download | android_hardware_interfaces-09782444e3e8e0a2bb61bd44c5fed06020c314f0.tar.gz android_hardware_interfaces-09782444e3e8e0a2bb61bd44c5fed06020c314f0.tar.bz2 android_hardware_interfaces-09782444e3e8e0a2bb61bd44c5fed06020c314f0.zip |
graphics: fix readback buffer tests
Make readback buffer support optional. Fix incorrect use of
setReadbackBuffer and getReadbackBufferFence.
Bug: 80030364
Test: VTS
Change-Id: I278a031c3c086ac38c460b7076a2952db57a91a4
Merged-In: I278a031c3c086ac38c460b7076a2952db57a91a4
Diffstat (limited to 'graphics')
3 files changed, 46 insertions, 8 deletions
diff --git a/graphics/composer/2.2/utils/vts/ComposerVts.cpp b/graphics/composer/2.2/utils/vts/ComposerVts.cpp index 357c7725a..6a3207127 100644 --- a/graphics/composer/2.2/utils/vts/ComposerVts.cpp +++ b/graphics/composer/2.2/utils/vts/ComposerVts.cpp @@ -45,6 +45,10 @@ std::unique_ptr<ComposerClient_v2_2> Composer_v2_2::createClient_v2_2() { return client; } +sp<V2_2::IComposerClient> ComposerClient_v2_2::getRaw() const { + return mClient_v2_2; +} + std::vector<IComposerClient::PerFrameMetadataKey> ComposerClient_v2_2::getPerFrameMetadataKeys( Display display) { std::vector<IComposerClient::PerFrameMetadataKey> keys; 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 62ab83f3f..1c6d7ae00 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 @@ -63,6 +63,8 @@ class ComposerClient_v2_2 ComposerClient_v2_2(const sp<IComposerClient>& client) : V2_1::vts::ComposerClient(client), mClient_v2_2(client){}; + sp<V2_2::IComposerClient> getRaw() const; + void execute_v2_2(V2_1::vts::TestCommandReader* reader, V2_2::CommandWriterBase* writer); std::vector<IComposerClient::PerFrameMetadataKey> getPerFrameMetadataKeys(Display display); diff --git a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp index 4e41333e5..f0d22504a 100644 --- a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp +++ b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp @@ -78,6 +78,11 @@ class GraphicsComposerHidlTest : public ::testing::VtsHalHidlTargetTestBase { // explicitly disable vsync mComposerClient->setVsyncEnabled(mPrimaryDisplay, false); mComposerCallback->setVsyncAllowed(false); + + mComposerClient->getRaw()->getReadbackBufferAttributes( + mPrimaryDisplay, [&](const auto& tmpError, const auto&, const auto&) { + mHasReadbackBuffer = tmpError == Error::NONE; + }); } void TearDown() override { @@ -96,6 +101,7 @@ class GraphicsComposerHidlTest : public ::testing::VtsHalHidlTargetTestBase { sp<V2_1::vts::GraphicsComposerCallback> mComposerCallback; // the first display and is assumed never to be removed Display mPrimaryDisplay; + bool mHasReadbackBuffer; private: Display waitForFirstDisplay() { @@ -257,18 +263,44 @@ TEST_F(GraphicsComposerHidlTest, setPowerMode_2_2) { } TEST_F(GraphicsComposerHidlTest, setReadbackBuffer) { - mComposerClient->setReadbackBuffer(mPrimaryDisplay, nullptr, -1); -} - -TEST_F(GraphicsComposerHidlTest, getReadbackBufferFence) { - int32_t fence; - mComposerClient->getReadbackBufferFence(mPrimaryDisplay, &fence); -} + if (!mHasReadbackBuffer) { + return; + } -TEST_F(GraphicsComposerHidlTest, getReadbackBufferAttributes) { PixelFormat pixelFormat; Dataspace dataspace; mComposerClient->getReadbackBufferAttributes(mPrimaryDisplay, &pixelFormat, &dataspace); + ASSERT_LT(static_cast<PixelFormat>(0), pixelFormat); + ASSERT_NE(Dataspace::UNKNOWN, dataspace); + + IMapper::BufferDescriptorInfo info{}; + Config config = mComposerClient->getActiveConfig(mPrimaryDisplay); + info.width = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config, + IComposerClient::Attribute::WIDTH); + info.height = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config, + IComposerClient::Attribute::HEIGHT); + info.layerCount = 1; + info.format = pixelFormat; + // BufferUsage::COMPOSER_OUTPUT is missing + info.usage = static_cast<uint64_t>(BufferUsage::COMPOSER_OVERLAY | BufferUsage::CPU_READ_OFTEN); + + std::unique_ptr<Gralloc> gralloc; + const native_handle_t* buffer; + ASSERT_NO_FATAL_FAILURE(gralloc = std::make_unique<Gralloc>()); + ASSERT_NO_FATAL_FAILURE(buffer = gralloc->allocate(info)); + + mComposerClient->setReadbackBuffer(mPrimaryDisplay, buffer, -1); +} + +TEST_F(GraphicsComposerHidlTest, getReadbackBufferFenceInactive) { + if (!mHasReadbackBuffer) { + return; + } + + mComposerClient->getRaw()->getReadbackBufferFence( + mPrimaryDisplay, [&](const auto& tmpError, const auto&) { + ASSERT_EQ(Error::UNSUPPORTED, tmpError) << "readback buffer is active"; + }); } /** |