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

Commit 26f08b4b authored by ramindani's avatar ramindani
Browse files

Avoid calling onVsyncGenerated when vrrConfig is not available

Test: atest VSyncPredictorTest
BUG: 318537314
Change-Id: I7705a572e761fd595298afb980b00f8638fa9763
parent b02ac540
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -313,7 +313,7 @@ nsecs_t VSyncPredictor::nextAnticipatedVSyncTimeFrom(nsecs_t timePoint,
            ? std::max(timePoint, *lastVsyncOpt + minFramePeriod - threshold)
            : timePoint;
    const auto vsyncTime = snapToVsyncAlignedWithRenderRate(baseTime);
    if (FlagManager::getInstance().vrr_config()) {
    if (FlagManager::getInstance().vrr_config() && mDisplayModePtr->getVrrConfig()) {
        const auto vsyncTimePoint = TimePoint::fromNs(vsyncTime);
        const Fps renderRate = mRenderRateOpt ? *mRenderRateOpt : mDisplayModePtr->getPeakFps();
        mVsyncTrackerCallback.onVsyncGenerated(vsyncTimePoint, mDisplayModePtr, renderRate);
+22 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <gtest/gtest.h>
#include <algorithm>
#include <chrono>
#include <optional>
#include <utility>

#include <com_android_graphics_surfaceflinger_flags.h>
@@ -733,6 +734,27 @@ TEST_F(VSyncPredictorTest, adjustsVrrTimeline) {
    EXPECT_EQ(6000, vrrTracker.nextAnticipatedVSyncTimeFrom(5000, 5000));
}

TEST_F(VSyncPredictorTest, absentVrrConfigNoVsyncTrackerCallback) {
    SET_FLAG_FOR_TEST(flags::vrr_config, true);
    const auto refreshRate = Fps::fromPeriodNsecs(mPeriod);
    const std::optional<hal::VrrConfig> vrrConfigOpt = std::nullopt;
    constexpr int32_t kGroup = 0;
    constexpr auto kResolution = ui::Size(1920, 1080);
    const auto mode =
            ftl::as_non_null(createVrrDisplayMode(DisplayModeId(0), refreshRate, vrrConfigOpt,
                                                  kGroup, kResolution, DEFAULT_DISPLAY_ID));
    tracker.setDisplayModePtr(mode);

    auto last = mNow;
    for (auto i = 0u; i < kMinimumSamplesForPrediction; i++) {
        EXPECT_CALL(mVsyncTrackerCallback, onVsyncGenerated(_, _, _)).Times(0);
        EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(mNow), Eq(last + mPeriod));
        mNow += mPeriod;
        last = mNow;
        tracker.addVsyncTimestamp(mNow);
    }
}

} // namespace android::scheduler

// TODO(b/129481165): remove the #pragma below and fix conversion issues
+2 −2
Original line number Diff line number Diff line
@@ -45,8 +45,8 @@ inline DisplayModePtr createDisplayMode(PhysicalDisplayId displayId, DisplayMode
}

inline DisplayModePtr createVrrDisplayMode(
        DisplayModeId modeId, Fps displayRefreshRate, hal::VrrConfig vrrConfig, int32_t group = 0,
        ui::Size resolution = ui::Size(1920, 1080),
        DisplayModeId modeId, Fps displayRefreshRate, std::optional<hal::VrrConfig> vrrConfig,
        int32_t group = 0, ui::Size resolution = ui::Size(1920, 1080),
        PhysicalDisplayId displayId = PhysicalDisplayId::fromPort(0)) {
    return createDisplayModeBuilder(modeId, displayRefreshRate, group, resolution, displayId)
            .setVrrConfig(std::move(vrrConfig))