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

Commit 496ce114 authored by Kriti Dang's avatar Kriti Dang Committed by Android (Google) Code Review
Browse files

Merge "Composer hal changes for boot time display mode"

parents 2bdf6534 4c6e9ebf
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)