Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c6e9ebf authored by Kriti Dang's avatar Kriti Dang
Browse files

Composer hal changes for boot time display mode

Bug: 203520442
Test: m
Test: atest VtsHalGraphicsComposer3_TargetTest

Change-Id: I530d7f52acaaee8c728dbd9a95ecca017804304a
parent 22938ddc
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);
+52 −0
Original line number Diff line number Diff line
@@ -548,6 +548,58 @@ interface IComposerClient {
    VsyncPeriodChangeTimeline setActiveConfigWithConstraints(
            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.
     *
+55 −0
Original line number Diff line number Diff line
@@ -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)