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

Commit 6679baf6 authored by Ady Abraham's avatar Ady Abraham
Browse files

composer: add DisplayCapability::SUSPEND

Also remove the redundant APIs getDisplayBrightnessSupport
and getDozeSupport.

Bug: 209889459
Test: VTS
Change-Id: Id7e4da62fdcf65b279656a9f115e60b6145e8b5d
parent d82549d0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -40,4 +40,5 @@ enum DisplayCapability {
  BRIGHTNESS = 3,
  PROTECTED_CONTENTS = 4,
  AUTO_LOW_LATENCY_MODE = 5,
  SUSPEND = 6,
}
+0 −2
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ interface IComposerClient {
  android.hardware.graphics.composer3.ColorMode[] getColorModes(long display);
  float[] getDataspaceSaturationMatrix(android.hardware.graphics.common.Dataspace dataspace);
  int getDisplayAttribute(long display, int config, android.hardware.graphics.composer3.DisplayAttribute attribute);
  boolean getDisplayBrightnessSupport(long display);
  android.hardware.graphics.composer3.DisplayCapability[] getDisplayCapabilities(long display);
  int[] getDisplayConfigs(long display);
  android.hardware.graphics.composer3.DisplayConnectionType getDisplayConnectionType(long display);
@@ -52,7 +51,6 @@ interface IComposerClient {
  int getDisplayVsyncPeriod(long display);
  android.hardware.graphics.composer3.DisplayContentSample getDisplayedContentSample(long display, long maxFrames, long timestamp);
  android.hardware.graphics.composer3.DisplayContentSamplingAttributes getDisplayedContentSamplingAttributes(long display);
  boolean getDozeSupport(long display);
  android.hardware.graphics.composer3.HdrCapabilities getHdrCapabilities(long display);
  android.hardware.graphics.composer3.LayerGenericMetadataKey[] getLayerGenericMetadataKeys();
  int getMaxVirtualDisplayCount();
+10 −1
Original line number Diff line number Diff line
@@ -42,7 +42,8 @@ enum DisplayCapability {
    SKIP_CLIENT_COLOR_TRANSFORM = 1,
    /**
     * Indicates that the display supports PowerMode::DOZE and
     * PowerMode::DOZE_SUSPEND. DOZE_SUSPEND may not provide any benefit
     * potentially PowerMode::DOZE_SUSPEND if DisplayCapability.SUSPEND is also
     * supported. DOZE_SUSPEND may not provide any benefit
     * over DOZE (see the definition of PowerMode for more information),
     * but if both DOZE and DOZE_SUSPEND are no different from
     * PowerMode::ON, the device must not claim support.
@@ -66,4 +67,12 @@ enum DisplayCapability {
     * support a low latency mode, such as HDMI 2.1 Auto Low Latency Mode.
     */
    AUTO_LOW_LATENCY_MODE = 5,
    /**
     * Indicates that the display supports PowerMode.ON_SUSPEND.
     * If PowerMode.ON_SUSPEND is no different from PowerMode.ON, the device must not
     * claim support.
     * If the display supports DisplayCapability.DOZE and DisplayCapability.SUSPEND, then
     * PowerMode.ON_SUSPEND and PowerMode.DOZE_SUSPEND must be supported.
     */
    SUSPEND = 6,
}
+0 −31
Original line number Diff line number Diff line
@@ -246,22 +246,6 @@ interface IComposerClient {
     */
    int getDisplayAttribute(long display, int config, DisplayAttribute attribute);

    /**
     * Use getDisplayCapabilities instead. If brightness is supported, must return
     * DisplayCapability::BRIGHTNESS as one of the display capabilities via getDisplayCapabilities.
     * Only use getDisplayCapabilities as the source of truth to query brightness support.
     *
     * Gets whether brightness operations are supported on a display.
     *
     * @param display The display.
     *
     * @return Whether brightness operations are supported on the display.
     *
     * @exception EX_BAD_DISPLAY   when the display is invalid, or
     * @exception EX_BAD_PARAMETER when the output parameter is invalid.
     */
    boolean getDisplayBrightnessSupport(long display);

    /**
     * Provides a list of supported capabilities (as described in the
     * definition of DisplayCapability above). This list must not change after
@@ -370,21 +354,6 @@ interface IComposerClient {
     */
    DisplayContentSamplingAttributes getDisplayedContentSamplingAttributes(long display);

    /**
     * Returns whether the given display supports PowerMode::DOZE and
     * PowerMode::DOZE_SUSPEND. DOZE_SUSPEND may not provide any benefit over
     * DOZE (see the definition of PowerMode for more information), but if
     * both DOZE and DOZE_SUSPEND are no different from PowerMode::ON, the
     * device must not claim support.
     *
     * @param display is the display to query.
     *
     * @return is true only when the display supports doze modes.
     *
     * @exception EX_BAD_DISPLAY when an invalid display handle was passed in.
     */
    boolean getDozeSupport(long display);

    /**
     * Returns the high dynamic range (HDR) capabilities of the given display,
     * which are invariant with regard to the active configuration.
+50 −38
Original line number Diff line number Diff line
@@ -566,25 +566,6 @@ TEST_P(GraphicsComposerAidlTest, GetDisplayedContentSample) {
    }
}

TEST_P(GraphicsComposerAidlTest, getDisplayCapabilitiesBasic) {
    std::vector<DisplayCapability> capabilities;
    const auto error = mComposerClient->getDisplayCapabilities(mPrimaryDisplay, &capabilities);
    ASSERT_TRUE(error.isOk());
    const bool hasDozeSupport = std::find(capabilities.begin(), capabilities.end(),
                                          DisplayCapability::DOZE) != capabilities.end();
    bool isDozeSupported = false;
    EXPECT_TRUE(mComposerClient->getDozeSupport(mPrimaryDisplay, &isDozeSupported).isOk());
    EXPECT_EQ(hasDozeSupport, isDozeSupported);

    bool hasBrightnessSupport = std::find(capabilities.begin(), capabilities.end(),
                                          DisplayCapability::BRIGHTNESS) != capabilities.end();
    bool isBrightnessSupported = false;
    EXPECT_TRUE(
            mComposerClient->getDisplayBrightnessSupport(mPrimaryDisplay, &isBrightnessSupported)
                    .isOk());
    EXPECT_EQ(isBrightnessSupported, hasBrightnessSupport);
}

/*
 * Test that if brightness operations are supported, setDisplayBrightness works as expected.
 */
@@ -1009,16 +990,14 @@ TEST_P(GraphicsComposerAidlTest, SetActiveConfigPowerCycle) {
    }
}

TEST_P(GraphicsComposerAidlTest, GetDozeSupportBadDisplay) {
    bool isDozeSupport;
    const auto error = mComposerClient->getDozeSupport(mInvalidDisplayId, &isDozeSupport);
    EXPECT_FALSE(error.isOk());
    ASSERT_EQ(IComposerClient::EX_BAD_DISPLAY, error.getServiceSpecificError());
}

TEST_P(GraphicsComposerAidlTest, SetPowerModeUnsupported) {
    bool isDozeSupported;
    mComposerClient->getDozeSupport(mPrimaryDisplay, &isDozeSupported).isOk();
    std::vector<DisplayCapability> capabilities;
    const auto error = mComposerClient->getDisplayCapabilities(mPrimaryDisplay, &capabilities);
    ASSERT_TRUE(error.isOk());
    const bool isDozeSupported = std::find(capabilities.begin(), capabilities.end(),
                                           DisplayCapability::DOZE) != capabilities.end();
    const bool isSuspendSupported = std::find(capabilities.begin(), capabilities.end(),
                                              DisplayCapability::SUSPEND) != capabilities.end();
    if (!isDozeSupported) {
        auto error = mComposerClient->setPowerMode(mPrimaryDisplay, PowerMode::DOZE);
        EXPECT_FALSE(error.isOk());
@@ -1028,6 +1007,16 @@ TEST_P(GraphicsComposerAidlTest, SetPowerModeUnsupported) {
        EXPECT_FALSE(error.isOk());
        EXPECT_EQ(IComposerClient::EX_UNSUPPORTED, error.getServiceSpecificError());
    }

    if (!isSuspendSupported) {
        auto error = mComposerClient->setPowerMode(mPrimaryDisplay, PowerMode::ON_SUSPEND);
        EXPECT_FALSE(error.isOk());
        EXPECT_EQ(IComposerClient::EX_UNSUPPORTED, error.getServiceSpecificError());

        error = mComposerClient->setPowerMode(mPrimaryDisplay, PowerMode::DOZE_SUSPEND);
        EXPECT_FALSE(error.isOk());
        EXPECT_EQ(IComposerClient::EX_UNSUPPORTED, error.getServiceSpecificError());
    }
}

TEST_P(GraphicsComposerAidlTest, SetVsyncEnabled) {
@@ -1041,15 +1030,27 @@ TEST_P(GraphicsComposerAidlTest, SetVsyncEnabled) {
}

TEST_P(GraphicsComposerAidlTest, SetPowerMode) {
    std::vector<DisplayCapability> capabilities;
    const auto error = mComposerClient->getDisplayCapabilities(mPrimaryDisplay, &capabilities);
    ASSERT_TRUE(error.isOk());
    const bool isDozeSupported = std::find(capabilities.begin(), capabilities.end(),
                                           DisplayCapability::DOZE) != capabilities.end();
    const bool isSuspendSupported = std::find(capabilities.begin(), capabilities.end(),
                                              DisplayCapability::SUSPEND) != capabilities.end();

    std::vector<PowerMode> modes;
    modes.push_back(PowerMode::OFF);
    modes.push_back(PowerMode::ON_SUSPEND);
    modes.push_back(PowerMode::ON);

    bool isDozeSupported;
    EXPECT_TRUE(mComposerClient->getDozeSupport(mPrimaryDisplay, &isDozeSupported).isOk());
    if (isSuspendSupported) {
        modes.push_back(PowerMode::ON_SUSPEND);
    }

    if (isDozeSupported) {
        modes.push_back(PowerMode::DOZE);
    }

    if (isSuspendSupported && isDozeSupported) {
        modes.push_back(PowerMode::DOZE_SUSPEND);
    }

@@ -1059,6 +1060,14 @@ TEST_P(GraphicsComposerAidlTest, SetPowerMode) {
}

TEST_P(GraphicsComposerAidlTest, SetPowerModeVariations) {
    std::vector<DisplayCapability> capabilities;
    const auto error = mComposerClient->getDisplayCapabilities(mPrimaryDisplay, &capabilities);
    ASSERT_TRUE(error.isOk());
    const bool isDozeSupported = std::find(capabilities.begin(), capabilities.end(),
                                           DisplayCapability::DOZE) != capabilities.end();
    const bool isSuspendSupported = std::find(capabilities.begin(), capabilities.end(),
                                              DisplayCapability::SUSPEND) != capabilities.end();

    std::vector<PowerMode> modes;

    modes.push_back(PowerMode::OFF);
@@ -1083,15 +1092,15 @@ TEST_P(GraphicsComposerAidlTest, SetPowerModeVariations) {
    }
    modes.clear();

    if (isSuspendSupported) {
        modes.push_back(PowerMode::ON_SUSPEND);
        modes.push_back(PowerMode::ON_SUSPEND);
        for (auto mode : modes) {
            EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
        }
        modes.clear();
    }

    bool isDozeSupported = false;
    ASSERT_TRUE(mComposerClient->getDozeSupport(mPrimaryDisplay, &isDozeSupported).isOk());
    if (isDozeSupported) {
        modes.push_back(PowerMode::DOZE);
        modes.push_back(PowerMode::DOZE);
@@ -1099,12 +1108,15 @@ TEST_P(GraphicsComposerAidlTest, SetPowerModeVariations) {
            EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
        }
        modes.clear();
    }

    if (isSuspendSupported && isDozeSupported) {
        modes.push_back(PowerMode::DOZE_SUSPEND);
        modes.push_back(PowerMode::DOZE_SUSPEND);
        for (auto mode : modes) {
            EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
        }
        modes.clear();
    }
}