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

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

Merge "SurfaceFlinger: fix SFFakeHWC_test"

parents 84a11c3b dfa3736f
Loading
Loading
Loading
Loading
+37 −37
Original line number Diff line number Diff line
@@ -209,6 +209,32 @@ static nsecs_t appDurationToOffset(nsecs_t appDuration, nsecs_t sfDuration, nsec
                            : vsyncDuration - (appDuration + sfDuration) % vsyncDuration;
}

PhaseDurations::Offsets PhaseDurations::constructOffsets(nsecs_t vsyncDuration) const {
    return Offsets{
            {
                    mSfEarlyDuration < vsyncDuration
                            ? sfDurationToOffset(mSfEarlyDuration, vsyncDuration)
                            : sfDurationToOffset(mSfEarlyDuration, vsyncDuration) - vsyncDuration,

                    appDurationToOffset(mAppEarlyDuration, mSfEarlyDuration, vsyncDuration),
            },
            {
                    mSfEarlyGlDuration < vsyncDuration
                            ? sfDurationToOffset(mSfEarlyGlDuration, vsyncDuration)
                            : sfDurationToOffset(mSfEarlyGlDuration, vsyncDuration) - vsyncDuration,

                    appDurationToOffset(mAppEarlyGlDuration, mSfEarlyGlDuration, vsyncDuration),
            },
            {
                    mSfDuration < vsyncDuration
                            ? sfDurationToOffset(mSfDuration, vsyncDuration)
                            : sfDurationToOffset(mSfDuration, vsyncDuration) - vsyncDuration,

                    appDurationToOffset(mAppDuration, mSfDuration, vsyncDuration),
            },
    };
}

static std::vector<float> getRefreshRatesFromConfigs(
        const android::scheduler::RefreshRateConfigs& refreshRateConfigs) {
    const auto& allRefreshRates = refreshRateConfigs.getAllRefreshRates();
@@ -227,41 +253,7 @@ std::unordered_map<float, PhaseDurations::Offsets> PhaseDurations::initializeOff
    std::unordered_map<float, Offsets> offsets;

    for (const auto fps : refreshRates) {
        const nsecs_t vsyncDuration = static_cast<nsecs_t>(1e9f / fps);
        offsets.emplace(fps,
                        Offsets{
                                {
                                        mSfEarlyDuration < vsyncDuration
                                                ? sfDurationToOffset(mSfEarlyDuration,
                                                                     vsyncDuration)
                                                : sfDurationToOffset(mSfEarlyDuration,
                                                                     vsyncDuration) -
                                                        vsyncDuration,

                                        appDurationToOffset(mAppEarlyDuration, mSfEarlyDuration,
                                                            vsyncDuration),
                                },
                                {
                                        mSfEarlyGlDuration < vsyncDuration
                                                ? sfDurationToOffset(mSfEarlyGlDuration,
                                                                     vsyncDuration)
                                                : sfDurationToOffset(mSfEarlyGlDuration,
                                                                     vsyncDuration) -
                                                        vsyncDuration,

                                        appDurationToOffset(mAppEarlyGlDuration, mSfEarlyGlDuration,
                                                            vsyncDuration),
                                },
                                {
                                        mSfDuration < vsyncDuration
                                                ? sfDurationToOffset(mSfDuration, vsyncDuration)
                                                : sfDurationToOffset(mSfDuration, vsyncDuration) -
                                                        vsyncDuration,

                                        appDurationToOffset(mAppDuration, mSfDuration,
                                                            vsyncDuration),
                                },
                        });
        offsets.emplace(fps, constructOffsets(static_cast<nsecs_t>(1e9f / fps)));
    }
    return offsets;
}
@@ -295,10 +287,18 @@ PhaseOffsets::Offsets PhaseDurations::getOffsetsForRefreshRate(float fps) const
    const auto iter = std::find_if(mOffsets.begin(), mOffsets.end(), [=](const auto& 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 the default display.
    // This happens only during tests and not during regular device operation.
    // In this case just construct the offset.
    ALOGW("Can't find offset for %.2f fps", fps);
    return constructOffsets(static_cast<nsecs_t>(1e9f / fps));
}

void PhaseDurations::dump(std::string& result) const {
    const auto [early, earlyGl, late] = getCurrentOffsets();
    using base::StringAppendF;
+1 −0
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ protected:

private:
    std::unordered_map<float, Offsets> initializeOffsets(const std::vector<float>&) const;
    PhaseDurations::Offsets constructOffsets(nsecs_t vsyncDuration) const;

    const nsecs_t mSfDuration;
    const nsecs_t mAppDuration;
+3 −4
Original line number Diff line number Diff line
@@ -5620,11 +5620,10 @@ status_t SurfaceFlinger::setDesiredDisplayConfigSpecsInternal(const sp<DisplayDe
            repaintEverythingForHWC();
        }

        auto configId = HwcConfigIndexType(defaultConfig);
        display->setActiveConfig(configId);
        display->setActiveConfig(defaultConfig);
        const nsecs_t vsyncPeriod =
                mRefreshRateConfigs->getRefreshRateFromConfigId(configId).vsyncPeriod;
        mScheduler->onConfigChanged(mAppConnectionHandle, display->getId()->value, configId,
                getHwComposer().getConfigs(*displayId)[defaultConfig.value()]->getVsyncPeriod();
        mScheduler->onConfigChanged(mAppConnectionHandle, display->getId()->value, defaultConfig,
                                    vsyncPeriod);
        return NO_ERROR;
    }