diff options
author | Kriti Dang <kritidang@google.com> | 2021-11-17 14:56:29 +0100 |
---|---|---|
committer | Kriti Dang <kritidang@google.com> | 2022-01-13 14:41:03 +0100 |
commit | 4c6e9ebf1ee7fbfda9a0997c7dc509db1bdbc29c (patch) | |
tree | 1b93ff20d885289fe7a72b7fbb406f52f71648a4 | |
parent | 22938ddca66c1d94137c3b523638c7ed6de370f8 (diff) |
Composer hal changes for boot time display mode
Bug: 203520442
Test: m
Test: atest VtsHalGraphicsComposer3_TargetTest
Change-Id: I530d7f52acaaee8c728dbd9a95ecca017804304a
3 files changed, 110 insertions, 0 deletions
diff --git a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl index e9d9745dff..a8239cd052 100644 --- a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl +++ b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl @@ -61,6 +61,9 @@ interface IComposerClient { void registerCallback(in android.hardware.graphics.composer3.IComposerCallback callback); void setActiveConfig(long display, int config); android.hardware.graphics.composer3.VsyncPeriodChangeTimeline setActiveConfigWithConstraints(long display, int config, in android.hardware.graphics.composer3.VsyncPeriodChangeConstraints vsyncPeriodChangeConstraints); + void setBootDisplayConfig(long display, int config); + void clearBootDisplayConfig(long display); + int getPreferredBootDisplayConfig(long display); void setAutoLowLatencyMode(long display, boolean on); void setClientTargetSlotCount(long display, int clientTargetSlotCount); void setColorMode(long display, android.hardware.graphics.composer3.ColorMode mode, android.hardware.graphics.composer3.RenderIntent intent); diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl index 3ab6329bff..9a29e7e23e 100644 --- a/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl +++ b/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl @@ -549,6 +549,58 @@ interface IComposerClient { long display, int config, in VsyncPeriodChangeConstraints vsyncPeriodChangeConstraints); /** + * Sets the display config in which the device boots. + * + * If the device is unable to boot in this config for any reason (example HDMI display changed), + * the implementation should try to find a config which matches the resolution and refresh-rate + * of this config. If no such config exists, the implementation's preferred display config + * should be used. + * + * @param display is the display for which the boot config is set. + * @param config is the new boot config for the display. + * + * @exception EX_BAD_DISPLAY when an invalid display handle was passed in. + * @exception EX_BAD_CONFIG when an invalid config id was passed in. + * + * @see getDisplayConfigs + * @see clearBootDisplayConfig + * @see getPreferredBootDisplayConfig + */ + void setBootDisplayConfig(long display, int config); + + /** + * Clears the boot display config. + * + * The device should boot in the implementation's preferred display config. + * + * @param display is the display for which the cached boot config is cleared. + * + * @exception EX_BAD_DISPLAY when an invalid display handle was passed in. + * + * @see getDisplayConfigs + * @see setBootDisplayConfig + * @see getPreferredBootDisplayConfig + */ + void clearBootDisplayConfig(long display); + + /** + * Returns the implementation's preferred display config. + * + * This is the display config used by the implementation at boot time, if the boot display + * config has not been requested yet, or if it has been previously cleared. + * + * @param display is the display to which the preferred config is queried. + * @return the implementation's preferred display config. + * + * @exception EX_BAD_DISPLAY when an invalid display handle was passed in. + * + * @see getDisplayConfigs + * @see setBootDisplayConfig + * @see clearBootDisplayConfig + */ + int getPreferredBootDisplayConfig(long display); + + /** * Requests the display to enable/disable its low latency mode. * * If the display is connected via HDMI 2.1, then Auto Low Latency Mode should be triggered. If diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp index c61693e458..a59a090b27 100644 --- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp +++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp @@ -716,6 +716,61 @@ TEST_P(GraphicsComposerAidlTest, setActiveConfigWithConstraints_BadConfig) { } } +TEST_P(GraphicsComposerAidlTest, setBootDisplayConfig_BadDisplay) { + int32_t config = 0; + auto const error = mComposerClient->setBootDisplayConfig(mInvalidDisplayId, config); + + EXPECT_FALSE(error.isOk()); + EXPECT_EQ(IComposerClient::EX_BAD_DISPLAY, error.getServiceSpecificError()); +} + +TEST_P(GraphicsComposerAidlTest, setBootDisplayConfig_BadConfig) { + for (VtsDisplay& display : mDisplays) { + int32_t invalidConfigId = GetInvalidConfigId(); + const auto error = mComposerClient->setBootDisplayConfig(display.get(), invalidConfigId); + EXPECT_FALSE(error.isOk()); + EXPECT_EQ(IComposerClient::EX_BAD_CONFIG, error.getServiceSpecificError()); + } +} + +TEST_P(GraphicsComposerAidlTest, setBootDisplayConfig) { + std::vector<int32_t> configs; + EXPECT_TRUE(mComposerClient->getDisplayConfigs(mPrimaryDisplay, &configs).isOk()); + for (auto config : configs) { + EXPECT_TRUE(mComposerClient->setBootDisplayConfig(mPrimaryDisplay, config).isOk()); + } +} + +TEST_P(GraphicsComposerAidlTest, clearBootDisplayConfig_BadDisplay) { + auto const error = mComposerClient->clearBootDisplayConfig(mInvalidDisplayId); + + EXPECT_FALSE(error.isOk()); + EXPECT_EQ(IComposerClient::EX_BAD_DISPLAY, error.getServiceSpecificError()); +} + +TEST_P(GraphicsComposerAidlTest, clearBootDisplayConfig) { + EXPECT_TRUE(mComposerClient->clearBootDisplayConfig(mPrimaryDisplay).isOk()); +} + +TEST_P(GraphicsComposerAidlTest, getPreferredBootDisplayConfig_BadDisplay) { + int32_t config; + auto const error = mComposerClient->getPreferredBootDisplayConfig(mInvalidDisplayId, &config); + + EXPECT_FALSE(error.isOk()); + EXPECT_EQ(IComposerClient::EX_BAD_DISPLAY, error.getServiceSpecificError()); +} + +TEST_P(GraphicsComposerAidlTest, getPreferredBootDisplayConfig) { + int32_t preferredDisplayConfig = 0; + auto const error = mComposerClient->getPreferredBootDisplayConfig(mPrimaryDisplay, + &preferredDisplayConfig); + EXPECT_TRUE(error.isOk()); + + std::vector<int32_t> configs; + EXPECT_TRUE(mComposerClient->getDisplayConfigs(mPrimaryDisplay, &configs).isOk()); + EXPECT_NE(configs.end(), std::find(configs.begin(), configs.end(), preferredDisplayConfig)); +} + TEST_P(GraphicsComposerAidlTest, setAutoLowLatencyModeBadDisplay) { EXPECT_EQ(IComposerClient::EX_BAD_DISPLAY, mComposerClient->setAutoLowLatencyMode(mInvalidDisplayId, true) |