diff options
Diffstat (limited to 'services/surfaceflinger/tests/DisplayConfigs_test.cpp')
-rw-r--r-- | services/surfaceflinger/tests/DisplayConfigs_test.cpp | 142 |
1 files changed, 100 insertions, 42 deletions
diff --git a/services/surfaceflinger/tests/DisplayConfigs_test.cpp b/services/surfaceflinger/tests/DisplayConfigs_test.cpp index debfe83577..2dc96b8511 100644 --- a/services/surfaceflinger/tests/DisplayConfigs_test.cpp +++ b/services/surfaceflinger/tests/DisplayConfigs_test.cpp @@ -16,13 +16,20 @@ // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wconversion" +#pragma clang diagnostic ignored "-Wextra" -#include <thread> -#include "LayerTransactionTest.h" -namespace android { +#include <gtest/gtest.h> +#include <gui/ISurfaceComposer.h> +#include <gui/SurfaceComposerClient.h> +#include <private/gui/ComposerService.h> +#include <ui/DisplayMode.h> +#include <ui/DynamicDisplayInfo.h> +#include <utils/Errors.h> +#include <utils/Vector.h> + +#include "utils/TransactionUtils.h" -using android::hardware::graphics::common::V1_1::BufferUsage; +namespace android { ::testing::Environment* const binderEnv = ::testing::AddGlobalTestEnvironment(new BinderEnvironment()); @@ -31,64 +38,115 @@ using android::hardware::graphics::common::V1_1::BufferUsage; * Test class for setting display configs and passing around refresh rate ranges. */ class RefreshRateRangeTest : public ::testing::Test { +private: + ui::DisplayModeId initialDefaultMode; + bool initialAllowGroupSwitching; + float initialPrimaryMin; + float initialPrimaryMax; + float initialAppRequestMin; + float initialAppRequestMax; + protected: - void SetUp() override { mDisplayToken = SurfaceComposerClient::getInternalDisplayToken(); } + void SetUp() override { + mDisplayToken = SurfaceComposerClient::getInternalDisplayToken(); + status_t res = + SurfaceComposerClient::getDesiredDisplayModeSpecs(mDisplayToken, + &initialDefaultMode, + &initialAllowGroupSwitching, + &initialPrimaryMin, + &initialPrimaryMax, + &initialAppRequestMin, + &initialAppRequestMax); + ASSERT_EQ(res, NO_ERROR); + } + + void TearDown() override { + status_t res = + SurfaceComposerClient::setDesiredDisplayModeSpecs(mDisplayToken, initialDefaultMode, + initialAllowGroupSwitching, + initialPrimaryMin, + initialPrimaryMax, + initialAppRequestMin, + initialAppRequestMax); + ASSERT_EQ(res, NO_ERROR); + } + + void testSetAllowGroupSwitching(bool allowGroupSwitching); sp<IBinder> mDisplayToken; }; TEST_F(RefreshRateRangeTest, setAllConfigs) { - int32_t initialDefaultConfig; - float initialPrimaryMin; - float initialPrimaryMax; - float initialAppRequestMin; - float initialAppRequestMax; - status_t res = SurfaceComposerClient::getDesiredDisplayConfigSpecs(mDisplayToken, - &initialDefaultConfig, - &initialPrimaryMin, - &initialPrimaryMax, - &initialAppRequestMin, - &initialAppRequestMax); - ASSERT_EQ(res, NO_ERROR); - - Vector<DisplayConfig> configs; - res = SurfaceComposerClient::getDisplayConfigs(mDisplayToken, &configs); + ui::DynamicDisplayInfo info; + status_t res = SurfaceComposerClient::getDynamicDisplayInfo(mDisplayToken, &info); + const auto& modes = info.supportedDisplayModes; ASSERT_EQ(res, NO_ERROR); + ASSERT_GT(modes.size(), 0); - for (size_t i = 0; i < configs.size(); i++) { - res = SurfaceComposerClient::setDesiredDisplayConfigSpecs(mDisplayToken, i, - configs[i].refreshRate, - configs[i].refreshRate, - configs[i].refreshRate, - configs[i].refreshRate); + for (size_t i = 0; i < modes.size(); i++) { + res = SurfaceComposerClient::setDesiredDisplayModeSpecs(mDisplayToken, modes[i].id, false, + modes[i].refreshRate, + modes[i].refreshRate, + modes[i].refreshRate, + modes[i].refreshRate); ASSERT_EQ(res, NO_ERROR); - int defaultConfig; + ui::DisplayModeId defaultConfig; + bool allowGroupSwitching; float primaryRefreshRateMin; float primaryRefreshRateMax; float appRequestRefreshRateMin; float appRequestRefreshRateMax; - res = SurfaceComposerClient::getDesiredDisplayConfigSpecs(mDisplayToken, &defaultConfig, - &primaryRefreshRateMin, - &primaryRefreshRateMax, - &appRequestRefreshRateMin, - &appRequestRefreshRateMax); + res = SurfaceComposerClient::getDesiredDisplayModeSpecs(mDisplayToken, &defaultConfig, + &allowGroupSwitching, + &primaryRefreshRateMin, + &primaryRefreshRateMax, + &appRequestRefreshRateMin, + &appRequestRefreshRateMax); ASSERT_EQ(res, NO_ERROR); ASSERT_EQ(defaultConfig, i); - ASSERT_EQ(primaryRefreshRateMin, configs[i].refreshRate); - ASSERT_EQ(primaryRefreshRateMax, configs[i].refreshRate); - ASSERT_EQ(appRequestRefreshRateMin, configs[i].refreshRate); - ASSERT_EQ(appRequestRefreshRateMax, configs[i].refreshRate); + ASSERT_EQ(allowGroupSwitching, false); + ASSERT_EQ(primaryRefreshRateMin, modes[i].refreshRate); + ASSERT_EQ(primaryRefreshRateMax, modes[i].refreshRate); + ASSERT_EQ(appRequestRefreshRateMin, modes[i].refreshRate); + ASSERT_EQ(appRequestRefreshRateMax, modes[i].refreshRate); } +} + +void RefreshRateRangeTest::testSetAllowGroupSwitching(bool allowGroupSwitching) { + status_t res = + SurfaceComposerClient::setDesiredDisplayModeSpecs(mDisplayToken, 0, allowGroupSwitching, + 0.f, 90.f, 0.f, 90.f); + ASSERT_EQ(res, NO_ERROR); + ui::DisplayModeId defaultConfig; + bool newAllowGroupSwitching; + float primaryRefreshRateMin; + float primaryRefreshRateMax; + float appRequestRefreshRateMin; + float appRequestRefreshRateMax; - res = SurfaceComposerClient::setDesiredDisplayConfigSpecs(mDisplayToken, initialDefaultConfig, - initialPrimaryMin, initialPrimaryMax, - initialAppRequestMin, - initialAppRequestMax); + res = SurfaceComposerClient::getDesiredDisplayModeSpecs(mDisplayToken, &defaultConfig, + &newAllowGroupSwitching, + &primaryRefreshRateMin, + &primaryRefreshRateMax, + &appRequestRefreshRateMin, + &appRequestRefreshRateMax); ASSERT_EQ(res, NO_ERROR); + ASSERT_EQ(defaultConfig, 0); + ASSERT_EQ(newAllowGroupSwitching, allowGroupSwitching); + ASSERT_EQ(primaryRefreshRateMin, 0.f); + ASSERT_EQ(primaryRefreshRateMax, 90.f); + ASSERT_EQ(appRequestRefreshRateMin, 0.f); + ASSERT_EQ(appRequestRefreshRateMax, 90.f); +} + +TEST_F(RefreshRateRangeTest, setAllowGroupSwitching) { + testSetAllowGroupSwitching(true); + testSetAllowGroupSwitching(false); + testSetAllowGroupSwitching(true); } } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues -#pragma clang diagnostic pop // ignored "-Wconversion"
\ No newline at end of file +#pragma clang diagnostic pop // ignored "-Wextra"
\ No newline at end of file |