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

Commit 30d25738 authored by Ady Abraham's avatar Ady Abraham
Browse files

composer: 2.4: fix VTS usage of desired time

Test_setActiveConfigWithConstraints is setting the desired time
for a config change to be before the test starts.
This causes the test to use the same value for all configurations,
which becomes stale the more configurations the device supports.
This fix is setting the desired time before calling
to setActiveConfigWithConstraints.

Bug: 161023185
Test: adb shell data/nativetest64/VtsHalGraphicsComposerV2_4TargetTest/VtsHalGraphicsComposerV2_4TargetTest
Change-Id: I236e5c9c16b4ba730677cd4c980a7071ba25840e
parent 32e3cd9a
Loading
Loading
Loading
Loading
+17 −23
Original line number Diff line number Diff line
@@ -201,8 +201,12 @@ class GraphicsComposerHidlCommandTest : public GraphicsComposerHidlTest {

    void execute() { mComposerClient->execute(mReader.get(), mWriter.get()); }

    void Test_setActiveConfigWithConstraints(
            const IComposerClient::VsyncPeriodChangeConstraints& constraints, bool refreshMiss);
    struct TestParameters {
        nsecs_t delayForChange;
        bool refreshMiss;
    };

    void Test_setActiveConfigWithConstraints(const TestParameters& params);

    void sendRefreshFrame(const VsyncPeriodChangeTimeline*);

@@ -453,9 +457,7 @@ void GraphicsComposerHidlCommandTest::waitForVsyncPeriodChange(
}

void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
        const IComposerClient::VsyncPeriodChangeConstraints& constraints, bool refreshMiss) {
    VsyncPeriodChangeTimeline timeline = {};

        const TestParameters& params) {
    for (Display display : mComposerCallback->getDisplays()) {
        forEachTwoConfigs(display, [&](Config config1, Config config2) {
            mComposerClient->setActiveConfig(display, config1);
@@ -470,6 +472,10 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
                return;  // continue
            }

            VsyncPeriodChangeTimeline timeline;
            IComposerClient::VsyncPeriodChangeConstraints constraints = {
                    .desiredTimeNanos = systemTime() + params.delayForChange,
                    .seamlessRequired = false};
            EXPECT_EQ(Error::NONE, mComposerClient->setActiveConfigWithConstraints(
                                           display, config2, constraints, &timeline));

@@ -480,7 +486,7 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
                        kReasonableTimeForChange.count());

            if (timeline.refreshRequired) {
                if (refreshMiss) {
                if (params.refreshMiss) {
                    // Miss the refresh frame on purpose to make sure the implementation sends a
                    // callback
                    std::this_thread::sleep_until(toTimePoint(timeline.refreshTimeNanos) + 100ms);
@@ -494,7 +500,7 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
            // cases the implementation might have missed the deadline. In this case a new
            // timeline should have been provided.
            auto newTimeline = mComposerCallback->takeLastVsyncPeriodChangeTimeline();
            if (timeline.refreshRequired && refreshMiss) {
            if (timeline.refreshRequired && params.refreshMiss) {
                EXPECT_TRUE(newTimeline.has_value());
            }

@@ -515,28 +521,16 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
}

TEST_P(GraphicsComposerHidlCommandTest, setActiveConfigWithConstraints) {
    IComposerClient::VsyncPeriodChangeConstraints constraints;

    constraints.seamlessRequired = false;
    constraints.desiredTimeNanos = systemTime();
    Test_setActiveConfigWithConstraints(constraints, false);
    Test_setActiveConfigWithConstraints({.delayForChange = 0, .refreshMiss = false});
}

TEST_P(GraphicsComposerHidlCommandTest, setActiveConfigWithConstraints_Delayed) {
    IComposerClient::VsyncPeriodChangeConstraints constraints;

    constexpr nsecs_t kDelayForChange = 300'000'000;  // 300ms
    constraints.seamlessRequired = false;
    constraints.desiredTimeNanos = systemTime() + kDelayForChange;
    Test_setActiveConfigWithConstraints(constraints, false);
    Test_setActiveConfigWithConstraints({.delayForChange = 300'000'000,  // 300ms
                                         .refreshMiss = false});
}

TEST_P(GraphicsComposerHidlCommandTest, setActiveConfigWithConstraints_MissRefresh) {
    IComposerClient::VsyncPeriodChangeConstraints constraints;

    constraints.seamlessRequired = false;
    constraints.desiredTimeNanos = systemTime();
    Test_setActiveConfigWithConstraints(constraints, true);
    Test_setActiveConfigWithConstraints({.delayForChange = 0, .refreshMiss = true});
}

TEST_P(GraphicsComposerHidlTest, setAutoLowLatencyModeBadDisplay) {