From 76630c6567ba8de44afac957fa6d6f7360120ea7 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 22 May 2018 12:52:36 -0700 Subject: [PATCH] graphics: fix readback buffer tests Make readback buffer support optional. Fix incorrect use of setReadbackBuffer and getReadbackBufferFence. Bug: 80030364 Test: VTS Change-Id: I278a031c3c086ac38c460b7076a2952db57a91a4 --- .../composer/2.2/utils/vts/ComposerVts.cpp | 4 ++ .../include/composer-vts/2.2/ComposerVts.h | 2 + .../VtsHalGraphicsComposerV2_2TargetTest.cpp | 48 +++++++++++++++---- 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 ae9e430545..f2596a462a 100644 --- a/graphics/composer/2.2/utils/vts/ComposerVts.cpp +++ b/graphics/composer/2.2/utils/vts/ComposerVts.cpp @@ -44,6 +44,10 @@ std::unique_ptr Composer::createClient() { return client; } +sp ComposerClient::getRaw() const { + return mClient; +} + std::vector ComposerClient::getPerFrameMetadataKeys( Display display) { std::vector 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 f8bc1d9465..263302124f 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 @@ -58,6 +58,8 @@ class ComposerClient : public V2_1::vts::ComposerClient { explicit ComposerClient(const sp& client) : V2_1::vts::ComposerClient(client), mClient(client) {} + sp getRaw() const; + void execute(V2_1::vts::TestCommandReader* reader, CommandWriterBase* writer); std::vector 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 342b215c53..2f1c66eae3 100644 --- a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp +++ b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp @@ -76,6 +76,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 { @@ -94,6 +99,7 @@ class GraphicsComposerHidlTest : public ::testing::VtsHalHidlTargetTestBase { sp mComposerCallback; // the first display and is assumed never to be removed Display mPrimaryDisplay; + bool mHasReadbackBuffer; private: Display waitForFirstDisplay() { @@ -255,18 +261,44 @@ TEST_F(GraphicsComposerHidlTest, setPowerMode_2_2) { } TEST_F(GraphicsComposerHidlTest, setReadbackBuffer) { - mComposerClient->setReadbackBuffer(mPrimaryDisplay, nullptr, -1); -} + if (!mHasReadbackBuffer) { + return; + } -TEST_F(GraphicsComposerHidlTest, getReadbackBufferFence) { - int32_t fence; - mComposerClient->getReadbackBufferFence(mPrimaryDisplay, &fence); -} - -TEST_F(GraphicsComposerHidlTest, getReadbackBufferAttributes) { PixelFormat pixelFormat; Dataspace dataspace; mComposerClient->getReadbackBufferAttributes(mPrimaryDisplay, &pixelFormat, &dataspace); + ASSERT_LT(static_cast(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(BufferUsage::COMPOSER_OVERLAY | BufferUsage::CPU_READ_OFTEN); + + std::unique_ptr gralloc; + const native_handle_t* buffer; + ASSERT_NO_FATAL_FAILURE(gralloc = std::make_unique()); + 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"; + }); } /**