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

Commit 11f8ba8b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "composer: update VtsDisplay dimensions" into sc-dev

parents de90f671 bd7ea386
Loading
Loading
Loading
Loading
+42 −12
Original line number Original line Diff line number Diff line
@@ -73,10 +73,15 @@ class VtsDisplay {


    IComposerClient::Rect getFrameRect() const { return {0, 0, mDisplayWidth, mDisplayHeight}; }
    IComposerClient::Rect getFrameRect() const { return {0, 0, mDisplayWidth, mDisplayHeight}; }


    void setDimensions(int32_t displayWidth, int32_t displayHeight) const {
        mDisplayWidth = displayWidth;
        mDisplayHeight = displayHeight;
    }

  private:
  private:
    const Display mDisplay;
    const Display mDisplay;
    const int32_t mDisplayWidth;
    mutable int32_t mDisplayWidth;
    const int32_t mDisplayHeight;
    mutable int32_t mDisplayHeight;
};
};


class GraphicsComposerHidlTest : public ::testing::TestWithParam<std::string> {
class GraphicsComposerHidlTest : public ::testing::TestWithParam<std::string> {
@@ -194,6 +199,31 @@ class GraphicsComposerHidlTest : public ::testing::TestWithParam<std::string> {
                                       const std::vector<ContentType>& capabilities,
                                       const std::vector<ContentType>& capabilities,
                                       const ContentType& contentType, const char* contentTypeStr);
                                       const ContentType& contentType, const char* contentTypeStr);


    Error setActiveConfigWithConstraints(
            const VtsDisplay& display, Config config,
            const IComposerClient::VsyncPeriodChangeConstraints& constraints,
            VsyncPeriodChangeTimeline* timeline) {
        const auto error = mComposerClient->setActiveConfigWithConstraints(display.get(), config,
                                                                           constraints, timeline);
        if (error == Error::NONE) {
            const int32_t displayWidth = mComposerClient->getDisplayAttribute_2_4(
                    display.get(), config, IComposerClient::Attribute::WIDTH);
            const int32_t displayHeight = mComposerClient->getDisplayAttribute_2_4(
                    display.get(), config, IComposerClient::Attribute::HEIGHT);
            display.setDimensions(displayWidth, displayHeight);
        }
        return error;
    }

    void setActiveConfig(const VtsDisplay& display, Config config) {
        mComposerClient->setActiveConfig(display.get(), config);
        const int32_t displayWidth = mComposerClient->getDisplayAttribute_2_4(
                display.get(), config, IComposerClient::Attribute::WIDTH);
        const int32_t displayHeight = mComposerClient->getDisplayAttribute_2_4(
                display.get(), config, IComposerClient::Attribute::HEIGHT);
        display.setDimensions(displayWidth, displayHeight);
    }

  private:
  private:
    // use the slot count usually set by SF
    // use the slot count usually set by SF
    static constexpr uint32_t kBufferSlotCount = 64;
    static constexpr uint32_t kBufferSlotCount = 64;
@@ -358,8 +388,8 @@ TEST_P(GraphicsComposerHidlTest, getDisplayVsyncPeriod) {


            constraints.desiredTimeNanos = systemTime();
            constraints.desiredTimeNanos = systemTime();
            constraints.seamlessRequired = false;
            constraints.seamlessRequired = false;
            EXPECT_EQ(Error::NONE, mComposerClient->setActiveConfigWithConstraints(
            EXPECT_EQ(Error::NONE,
                                           display.get(), config, constraints, &timeline));
                      setActiveConfigWithConstraints(display, config, constraints, &timeline));


            if (timeline.refreshRequired) {
            if (timeline.refreshRequired) {
                sendRefreshFrame(display, &timeline);
                sendRefreshFrame(display, &timeline);
@@ -414,8 +444,7 @@ TEST_P(GraphicsComposerHidlTest, setActiveConfigWithConstraints_BadConfig) {
    for (const auto& display : mDisplays) {
    for (const auto& display : mDisplays) {
        Config invalidConfigId = GetInvalidConfigId(display.get());
        Config invalidConfigId = GetInvalidConfigId(display.get());
        EXPECT_EQ(Error::BAD_CONFIG,
        EXPECT_EQ(Error::BAD_CONFIG,
                  mComposerClient->setActiveConfigWithConstraints(display.get(), invalidConfigId,
                  setActiveConfigWithConstraints(display, invalidConfigId, constraints, &timeline));
                                                                  constraints, &timeline));
    }
    }
}
}


@@ -435,11 +464,10 @@ TEST_P(GraphicsComposerHidlTest, setActiveConfigWithConstraints_SeamlessNotAllow
                    display.get(), config2,
                    display.get(), config2,
                    IComposerClient::IComposerClient::Attribute::CONFIG_GROUP);
                    IComposerClient::IComposerClient::Attribute::CONFIG_GROUP);
            if (configGroup1 != configGroup2) {
            if (configGroup1 != configGroup2) {
                mComposerClient->setActiveConfig(display.get(), config1);
                setActiveConfig(display, config1);
                sendRefreshFrame(display, nullptr);
                sendRefreshFrame(display, nullptr);
                EXPECT_EQ(Error::SEAMLESS_NOT_ALLOWED,
                EXPECT_EQ(Error::SEAMLESS_NOT_ALLOWED,
                          mComposerClient->setActiveConfigWithConstraints(display.get(), config2,
                          setActiveConfigWithConstraints(display, config2, constraints, &timeline));
                                                                          constraints, &timeline));
            }
            }
        });
        });
    }
    }
@@ -505,6 +533,8 @@ void GraphicsComposerHidlTest::sendRefreshFrame(const VtsDisplay& display,


    mWriter->presentDisplay();
    mWriter->presentDisplay();
    execute();
    execute();

    ASSERT_NO_FATAL_FAILURE(mComposerClient->destroyLayer(display.get(), layer));
}
}


void GraphicsComposerHidlTest::waitForVsyncPeriodChange(Display display,
void GraphicsComposerHidlTest::waitForVsyncPeriodChange(Display display,
@@ -528,7 +558,7 @@ void GraphicsComposerHidlTest::waitForVsyncPeriodChange(Display display,
void GraphicsComposerHidlTest::Test_setActiveConfigWithConstraints(const TestParameters& params) {
void GraphicsComposerHidlTest::Test_setActiveConfigWithConstraints(const TestParameters& params) {
    for (const auto& display : mDisplays) {
    for (const auto& display : mDisplays) {
        forEachTwoConfigs(display.get(), [&](Config config1, Config config2) {
        forEachTwoConfigs(display.get(), [&](Config config1, Config config2) {
            mComposerClient->setActiveConfig(display.get(), config1);
            setActiveConfig(display, config1);
            sendRefreshFrame(display, nullptr);
            sendRefreshFrame(display, nullptr);


            int32_t vsyncPeriod1 = mComposerClient->getDisplayAttribute_2_4(
            int32_t vsyncPeriod1 = mComposerClient->getDisplayAttribute_2_4(
@@ -546,8 +576,8 @@ void GraphicsComposerHidlTest::Test_setActiveConfigWithConstraints(const TestPar
            IComposerClient::VsyncPeriodChangeConstraints constraints = {
            IComposerClient::VsyncPeriodChangeConstraints constraints = {
                    .desiredTimeNanos = systemTime() + params.delayForChange,
                    .desiredTimeNanos = systemTime() + params.delayForChange,
                    .seamlessRequired = false};
                    .seamlessRequired = false};
            EXPECT_EQ(Error::NONE, mComposerClient->setActiveConfigWithConstraints(
            EXPECT_EQ(Error::NONE,
                                           display.get(), config2, constraints, &timeline));
                      setActiveConfigWithConstraints(display, config2, constraints, &timeline));


            EXPECT_TRUE(timeline.newVsyncAppliedTimeNanos >= constraints.desiredTimeNanos);
            EXPECT_TRUE(timeline.newVsyncAppliedTimeNanos >= constraints.desiredTimeNanos);
            // Refresh rate should change within a reasonable time
            // Refresh rate should change within a reasonable time