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

Commit 2704c5fe authored by ramindani's avatar ramindani
Browse files

[Composer VTS] Adds VTS for the vrr configuration

Test getDisplayConfigurations with vrr parameters
Test notifyExpectedPresent does not return error

Test: atest VtsHalGraphicsComposer3_TargetTest
BUG: 287517352
BUG: 284881912
Change-Id: I49d6876922e9fde47e531200a29413495458b8a5
parent bc41c5fb
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -312,7 +312,14 @@ std::pair<ScopedAStatus, std::vector<int32_t>> VtsComposerClient::getDisplayConf
std::pair<ScopedAStatus, std::vector<DisplayConfiguration>>
VtsComposerClient::getDisplayConfigurations(int64_t display) {
    std::vector<DisplayConfiguration> outConfigs;
    return {mComposerClient->getDisplayConfigurations(display, &outConfigs), outConfigs};
    return {mComposerClient->getDisplayConfigurations(display, kMaxFrameIntervalNs, &outConfigs),
            outConfigs};
}

ScopedAStatus VtsComposerClient::notifyExpectedPresent(int64_t display,
                                                       ClockMonotonicTimestamp expectedPresentTime,
                                                       int frameIntervalNs) {
    return mComposerClient->notifyExpectedPresent(display, expectedPresentTime, frameIntervalNs);
}

std::pair<ScopedAStatus, int32_t> VtsComposerClient::getDisplayVsyncPeriod(int64_t display) {
+6 −0
Original line number Diff line number Diff line
@@ -145,6 +145,10 @@ class VtsComposerClient {
    std::pair<ScopedAStatus, std::vector<DisplayConfiguration>> getDisplayConfigurations(
            int64_t display);

    ScopedAStatus notifyExpectedPresent(int64_t display,
                                        ClockMonotonicTimestamp expectedPresentTime,
                                        int frameIntervalNs);

    std::pair<ScopedAStatus, int32_t> getDisplayVsyncPeriod(int64_t display);

    ScopedAStatus setAutoLowLatencyMode(int64_t display, bool isEnabled);
@@ -192,6 +196,8 @@ class VtsComposerClient {

    std::vector<RefreshRateChangedDebugData> takeListOfRefreshRateChangedDebugData();

    static constexpr int32_t kMaxFrameIntervalNs = 50000000;  // 20fps

  private:
    void addDisplayConfigs(VtsDisplay*, const std::vector<DisplayConfiguration>&);
    ScopedAStatus addDisplayConfigLegacy(VtsDisplay*, int32_t config);
+48 −0
Original line number Diff line number Diff line
@@ -1234,6 +1234,43 @@ TEST_P(GraphicsComposerAidlV3Test, GetDisplayConfigurations) {
                EXPECT_NE(-1, displayConfig.dpi->x);
                EXPECT_NE(-1, displayConfig.dpi->y);
            }
            if (displayConfig.vrrConfig) {
                const auto& vrrConfig = *displayConfig.vrrConfig;
                EXPECT_GE(vrrConfig.minFrameIntervalNs, displayConfig.vsyncPeriod);

                const auto verifyFrameIntervalIsDivisorOfVsync = [&](int32_t frameIntervalNs) {
                    constexpr auto kThreshold = 0.05f;  // 5%
                    const auto ratio =
                            static_cast<float>(frameIntervalNs) / displayConfig.vsyncPeriod;
                    return ratio - std::round(ratio) <= kThreshold;
                };

                EXPECT_TRUE(verifyFrameIntervalIsDivisorOfVsync(vrrConfig.minFrameIntervalNs));

                if (vrrConfig.frameIntervalPowerHints) {
                    const auto& frameIntervalPowerHints = *vrrConfig.frameIntervalPowerHints;
                    EXPECT_FALSE(frameIntervalPowerHints.empty());

                    const auto minFrameInterval = *min_element(frameIntervalPowerHints.cbegin(),
                                                               frameIntervalPowerHints.cend());
                    EXPECT_LE(minFrameInterval->frameIntervalNs,
                              VtsComposerClient::kMaxFrameIntervalNs);

                    EXPECT_TRUE(std::all_of(frameIntervalPowerHints.cbegin(),
                                            frameIntervalPowerHints.cend(),
                                            [&](const auto& frameIntervalPowerHint) {
                                                return verifyFrameIntervalIsDivisorOfVsync(
                                                        frameIntervalPowerHint->frameIntervalNs);
                                            }));
                }

                if (vrrConfig.notifyExpectedPresentConfig) {
                    const auto& notifyExpectedPresentConfig =
                            *vrrConfig.notifyExpectedPresentConfig;
                    EXPECT_GT(0, notifyExpectedPresentConfig.notifyExpectedPresentHeadsUpNs);
                    EXPECT_GE(0, notifyExpectedPresentConfig.notifyExpectedPresentTimeoutNs);
                }
            }
        }
    }
}
@@ -1312,6 +1349,17 @@ TEST_P(GraphicsComposerAidlV3Test, GetDisplayConfigsIsSubsetOfGetDisplayConfigur
    }
}

// TODO(b/291792736) Add detailed VTS test cases for NotifyExpectedPresent
TEST_P(GraphicsComposerAidlV3Test, NotifyExpectedPresent) {
    for (const auto& display : mDisplays) {
        EXPECT_TRUE(mComposerClient
                            ->notifyExpectedPresent(display.getDisplayId(),
                                                    ClockMonotonicTimestamp{0},
                                                    std::chrono::nanoseconds{8ms}.count())
                            .isOk());
    }
}

// Tests for Command.
class GraphicsComposerAidlCommandTest : public GraphicsComposerAidlTest {
  protected: