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

Commit 5a47d4a3 authored by Ady Abraham's avatar Ady Abraham Committed by Automerger Merge Worker
Browse files

Merge "sf: Construct Phase Offsets for unknown fps" into rvc-dev am:...

Merge "sf: Construct Phase Offsets for unknown fps" into rvc-dev am: 0002e6c4 am: 5e503f2d am: 1bceee12

Change-Id: I247cd126c5b3c829ac4ffc590589a823c6502c64
parents 83eb842b 1bceee12
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -71,15 +71,20 @@ std::unordered_map<float, PhaseOffsets::Offsets> PhaseOffsets::initializeOffsets
    std::unordered_map<float, Offsets> offsets;

    for (const auto& [ignored, refreshRate] : refreshRateConfigs.getAllRefreshRates()) {
        if (refreshRate->fps > 65.0f) {
            offsets.emplace(refreshRate->fps, getHighFpsOffsets(refreshRate->vsyncPeriod));
        } else {
            offsets.emplace(refreshRate->fps, getDefaultOffsets(refreshRate->vsyncPeriod));
        }
        const float fps = refreshRate->fps;
        offsets.emplace(fps, getPhaseOffsets(fps, refreshRate->vsyncPeriod));
    }
    return offsets;
}

PhaseOffsets::Offsets PhaseOffsets::getPhaseOffsets(float fps, nsecs_t vsyncPeriod) const {
    if (fps > 65.0f) {
        return getHighFpsOffsets(vsyncPeriod);
    } else {
        return getDefaultOffsets(vsyncPeriod);
    }
}

PhaseOffsets::Offsets PhaseOffsets::getDefaultOffsets(nsecs_t vsyncDuration) const {
    const int64_t vsyncPhaseOffsetNs = sysprop::vsync_event_phase_offset_ns(1000000);
    const int64_t sfVsyncPhaseOffsetNs = sysprop::vsync_sf_event_phase_offset_ns(1000000);
@@ -159,10 +164,17 @@ PhaseOffsets::Offsets PhaseOffsets::getOffsetsForRefreshRate(float fps) const {
                                   [&fps](const std::pair<float, Offsets>& candidateFps) {
                                       return fpsEqualsWithMargin(fps, candidateFps.first);
                                   });
    LOG_ALWAYS_FATAL_IF(iter == mOffsets.end());

    if (iter != mOffsets.end()) {
        return iter->second;
    }

    // Unknown refresh rate. This might happen if we get a hotplug event for an external display.
    // In this case just construct the offset.
    ALOGW("Can't find offset for %.2f fps", fps);
    return getPhaseOffsets(fps, static_cast<nsecs_t>(1e9f / fps));
}

static void validateSysprops() {
    const auto validatePropertyBool = [](const char* prop) {
        LOG_ALWAYS_FATAL_IF(!property_get_bool(prop, false), "%s is false", prop);
@@ -288,8 +300,7 @@ PhaseOffsets::Offsets PhaseDurations::getOffsetsForRefreshRate(float fps) const
        return iter->second;
    }

    // Unknown refresh rate. This might happen if we get a hotplug event for the default display.
    // This happens only during tests and not during regular device operation.
    // Unknown refresh rate. This might happen if we get a hotplug event for an external display.
    // In this case just construct the offset.
    ALOGW("Can't find offset for %.2f fps", fps);
    return constructOffsets(static_cast<nsecs_t>(1e9f / fps));
+3 −2
Original line number Diff line number Diff line
@@ -69,8 +69,9 @@ public:
private:
    std::unordered_map<float, Offsets> initializeOffsets(
            const scheduler::RefreshRateConfigs&) const;
    Offsets getDefaultOffsets(nsecs_t vsyncDuration) const;
    Offsets getHighFpsOffsets(nsecs_t vsyncDuration) const;
    Offsets getDefaultOffsets(nsecs_t vsyncPeriod) const;
    Offsets getHighFpsOffsets(nsecs_t vsyncPeriod) const;
    Offsets getPhaseOffsets(float fps, nsecs_t vsyncPeriod) const;

    const nsecs_t mThresholdForNextVsync;
    const std::unordered_map<float, Offsets> mOffsets;