diff options
Diffstat (limited to 'graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp')
-rw-r--r-- | graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp b/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp index 1030ddc9db..3ca21aa093 100644 --- a/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp +++ b/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp @@ -33,6 +33,11 @@ namespace V2_3 { namespace vts { namespace { +using common::V1_1::PixelFormat; +using common::V1_1::RenderIntent; +using common::V1_2::ColorMode; +using common::V1_2::Dataspace; + // Test environment for graphics.composer class GraphicsComposerHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase { public: @@ -64,6 +69,8 @@ class GraphicsComposerHidlTest : public ::testing::VtsHalHidlTargetTestBase { // assume the first display is primary and is never removed mPrimaryDisplay = waitForFirstDisplay(); + mInvalidDisplayId = GetInvalidDisplayId(); + // explicitly disable vsync mComposerClient->setVsyncEnabled(mPrimaryDisplay, false); mComposerCallback->setVsyncAllowed(false); @@ -80,6 +87,22 @@ class GraphicsComposerHidlTest : public ::testing::VtsHalHidlTargetTestBase { } } + // returns an invalid display id (one that has not been registered to a + // display. Currently assuming that a device will never have close to + // std::numeric_limit<uint64_t>::max() displays registered while running tests + Display GetInvalidDisplayId() { + std::vector<Display> validDisplays = mComposerCallback->getDisplays(); + uint64_t id = std::numeric_limits<uint64_t>::max(); + while (id > 0) { + if (std::find(validDisplays.begin(), validDisplays.end(), id) == validDisplays.end()) { + return id; + } + id--; + } + + return 0; + } + void execute() { mComposerClient->execute(mReader.get(), mWriter.get()); } // use the slot count usually set by SF @@ -90,6 +113,7 @@ class GraphicsComposerHidlTest : public ::testing::VtsHalHidlTargetTestBase { sp<V2_1::vts::GraphicsComposerCallback> mComposerCallback; // the first display and is assumed never to be removed Display mPrimaryDisplay; + Display mInvalidDisplayId; std::unique_ptr<CommandWriterBase> mWriter; std::unique_ptr<V2_1::vts::TestCommandReader> mReader; @@ -128,6 +152,185 @@ TEST_F(GraphicsComposerHidlTest, GetDisplayIdentificationData) { } /** + * TestIComposerClient::getReadbackBufferAttributes_2_3 + */ +TEST_F(GraphicsComposerHidlTest, GetReadbackBufferAttributes_2_3) { + Dataspace dataspace; + PixelFormat pixelFormat; + + ASSERT_NO_FATAL_FAILURE(mComposerClient->getReadbackBufferAttributes_2_3( + mPrimaryDisplay, &pixelFormat, &dataspace)); +} + +/** + * Test IComposerClient::getClientTargetSupport_2_3 + */ +TEST_F(GraphicsComposerHidlTest, GetClientTargetSupport_2_3) { + std::vector<V2_1::Config> configs = mComposerClient->getDisplayConfigs(mPrimaryDisplay); + for (auto config : configs) { + int32_t width = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config, + IComposerClient::Attribute::WIDTH); + int32_t height = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config, + IComposerClient::Attribute::HEIGHT); + ASSERT_LT(0, width); + ASSERT_LT(0, height); + + mComposerClient->setActiveConfig(mPrimaryDisplay, config); + + ASSERT_TRUE(mComposerClient->getClientTargetSupport_2_3( + mPrimaryDisplay, width, height, PixelFormat::RGBA_8888, Dataspace::UNKNOWN)); + } +} +/** + * Test IComposerClient::getClientTargetSupport_2_3 + * + * Test that IComposerClient::getClientTargetSupport_2_3 returns + * Error::BAD_DISPLAY when passed in an invalid display handle + */ + +TEST_F(GraphicsComposerHidlTest, GetClientTargetSupport_2_3BadDisplay) { + std::vector<V2_1::Config> configs = mComposerClient->getDisplayConfigs(mPrimaryDisplay); + for (auto config : configs) { + int32_t width = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config, + IComposerClient::Attribute::WIDTH); + int32_t height = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config, + IComposerClient::Attribute::HEIGHT); + ASSERT_LT(0, width); + ASSERT_LT(0, height); + + mComposerClient->setActiveConfig(mPrimaryDisplay, config); + + Error error = mComposerClient->getRaw()->getClientTargetSupport_2_3( + mInvalidDisplayId, width, height, PixelFormat::RGBA_8888, Dataspace::UNKNOWN); + + EXPECT_EQ(Error::BAD_DISPLAY, error); + } +} + +/** + * Test IComposerClient::getRenderIntents_2_3 + */ +TEST_F(GraphicsComposerHidlTest, GetRenderIntents_2_3) { + std::vector<ColorMode> modes = mComposerClient->getColorModes_2_3(mPrimaryDisplay); + for (auto mode : modes) { + std::vector<RenderIntent> intents = + mComposerClient->getRenderIntents_2_3(mPrimaryDisplay, mode); + + bool isHdr; + switch (mode) { + case ColorMode::BT2100_PQ: + case ColorMode::BT2100_HLG: + isHdr = true; + break; + default: + isHdr = false; + break; + } + RenderIntent requiredIntent = + isHdr ? RenderIntent::TONE_MAP_COLORIMETRIC : RenderIntent::COLORIMETRIC; + + auto iter = std::find(intents.cbegin(), intents.cend(), requiredIntent); + EXPECT_NE(intents.cend(), iter); + } +} + +/* + * Test IComposerClient::getRenderIntents_2_3 + * + * Test that IComposerClient::getRenderIntents_2_3 returns Error::BAD_DISPLAY when + * passed an invalid display handle + */ +TEST_F(GraphicsComposerHidlTest, GetRenderIntents_2_3BadDisplay) { + std::vector<ColorMode> modes = mComposerClient->getColorModes_2_3(mPrimaryDisplay); + for (auto mode : modes) { + mComposerClient->getRaw()->getRenderIntents_2_3( + mInvalidDisplayId, mode, + [&](const auto& tmpError, const auto&) { EXPECT_EQ(Error::BAD_DISPLAY, tmpError); }); + } +} + +/* + * Test IComposerClient::getRenderIntents_2_3 + * + * Test that IComposerClient::getRenderIntents_2_3 returns Error::BAD_PARAMETER when + * pased either an invalid Color mode or an invalid Render Intent + */ +TEST_F(GraphicsComposerHidlTest, GetRenderIntents_2_3BadParameter) { + mComposerClient->getRaw()->getRenderIntents_2_3( + mPrimaryDisplay, static_cast<ColorMode>(-1), + [&](const auto& tmpError, const auto&) { EXPECT_EQ(Error::BAD_PARAMETER, tmpError); }); +} + +/** + * IComposerClient::getColorModes_2_3 + */ +TEST_F(GraphicsComposerHidlTest, GetColorModes_2_3) { + std::vector<ColorMode> colorModes = mComposerClient->getColorModes_2_3(mPrimaryDisplay); + + auto native = std::find(colorModes.cbegin(), colorModes.cend(), ColorMode::NATIVE); + ASSERT_NE(colorModes.cend(), native); +} + +/* + * Test IComposerClient::getColorModes_2_3 + * + * Test that IComposerClient::getColorModes_2_3 returns Error::BAD_DISPLAY when + * passed an invalid display handle + */ +TEST_F(GraphicsComposerHidlTest, GetColorMode_2_3BadDisplay) { + mComposerClient->getRaw()->getColorModes_2_3( + mInvalidDisplayId, + [&](const auto& tmpError, const auto&) { ASSERT_EQ(Error::BAD_DISPLAY, tmpError); }); +} + +/** + * IComposerClient::setColorMode_2_3 + */ +TEST_F(GraphicsComposerHidlTest, SetColorMode_2_3) { + std::vector<ColorMode> colorModes = mComposerClient->getColorModes_2_3(mPrimaryDisplay); + for (auto mode : colorModes) { + std::vector<RenderIntent> intents = + mComposerClient->getRenderIntents_2_3(mPrimaryDisplay, mode); + for (auto intent : intents) { + ASSERT_NO_FATAL_FAILURE( + mComposerClient->setColorMode_2_3(mPrimaryDisplay, mode, intent)); + } + } + + ASSERT_NO_FATAL_FAILURE(mComposerClient->setColorMode_2_3(mPrimaryDisplay, ColorMode::NATIVE, + RenderIntent::COLORIMETRIC)); +} + +/* + * Test IComposerClient::setColorMode_2_3 + * + * Test that IComposerClient::setColorMode_2_3 returns an Error::BAD_DISPLAY + * when passed an invalid display handle + */ +TEST_F(GraphicsComposerHidlTest, SetColorMode_2_3BadDisplay) { + Error error = mComposerClient->getRaw()->setColorMode_2_3(mInvalidDisplayId, ColorMode::NATIVE, + RenderIntent::COLORIMETRIC); + + ASSERT_EQ(Error::BAD_DISPLAY, error); +} + +/* + * Test IComposerClient::setColorMode_2_3 + * + * Test that IComposerClient::setColorMode_2_3 returns Error::BAD_PARAMETER when + * passed an invalid Color mode or an invalid render intent + */ +TEST_F(GraphicsComposerHidlTest, SetColorMode_2_3BadParameter) { + Error colorModeError = mComposerClient->getRaw()->setColorMode_2_3( + mPrimaryDisplay, static_cast<ColorMode>(-1), RenderIntent::COLORIMETRIC); + EXPECT_EQ(Error::BAD_PARAMETER, colorModeError); + + Error renderIntentError = mComposerClient->getRaw()->setColorMode_2_3( + mPrimaryDisplay, ColorMode::NATIVE, static_cast<RenderIntent>(-1)); + EXPECT_EQ(Error::BAD_PARAMETER, renderIntentError); +} + +/** * Test IComposerClient::Command::SET_LAYER_COLOR_TRANSFORM. * TODO Add color to the layer, use matrix to keep only red component, * and check. |