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

Commit d6a36206 authored by Andy Yu's avatar Andy Yu
Browse files

Add FrameRateOverrideMappings unit test

- Add unit test
- Modify Scheduler and FrameRateOverrideMappings to check
  supportFrameRateOverrideByContent in getAllFrameRateOverrides
- Remove flag usage in Scheduler to keep it within
  FrameRateOverrideMappings class
- Add operator== for FrameRateOverride event to enable ASSERT_EQ

Bug: b/204322816, b/216445833
Test: atest libsurfaceflinger_unittest:FrameRateOverrideMappingsTest
Change-Id: Ie8717e76cb1bcfeefac93a7093ee30581767c18b
parent 8fd90ad3
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -177,6 +177,11 @@ private:
    std::unique_ptr<gui::BitTube> mDataChannel;
};

inline bool operator==(DisplayEventReceiver::Event::FrameRateOverride lhs,
                       DisplayEventReceiver::Event::FrameRateOverride rhs) {
    return (lhs.uid == rhs.uid) && std::abs(lhs.frameRateHz - rhs.frameRateHz) < 0.001f;
}

// ----------------------------------------------------------------------------
}; // namespace android

+7 −1
Original line number Diff line number Diff line
@@ -51,7 +51,8 @@ std::optional<Fps> FrameRateOverrideMappings::getFrameRateOverrideForUid(
    return std::nullopt;
}

std::vector<FrameRateOverride> FrameRateOverrideMappings::getAllFrameRateOverrides() {
std::vector<FrameRateOverride> FrameRateOverrideMappings::getAllFrameRateOverrides(
        bool supportsFrameRateOverrideByContent) {
    std::lock_guard lock(mFrameRateOverridesLock);
    std::vector<FrameRateOverride> overrides;
    overrides.reserve(std::max({mFrameRateOverridesFromGameManager.size(),
@@ -67,6 +68,11 @@ std::vector<FrameRateOverride> FrameRateOverrideMappings::getAllFrameRateOverrid
            overrides.emplace_back(FrameRateOverride{uid, frameRate.getValue()});
        }
    }

    if (!supportsFrameRateOverrideByContent) {
        return overrides;
    }

    for (const auto& [uid, frameRate] : mFrameRateOverridesByContent) {
        if (std::find_if(overrides.begin(), overrides.end(),
                         [uid = uid](auto i) { return i.uid == uid; }) == overrides.end()) {
+2 −1
Original line number Diff line number Diff line
@@ -32,7 +32,8 @@ public:
    std::optional<Fps> getFrameRateOverrideForUid(uid_t uid,
                                                  bool supportsFrameRateOverrideByContent) const
            EXCLUDES(mFrameRateOverridesLock);
    std::vector<FrameRateOverride> getAllFrameRateOverrides() EXCLUDES(mFrameRateOverridesLock);
    std::vector<FrameRateOverride> getAllFrameRateOverrides(bool supportsFrameRateOverrideByContent)
            EXCLUDES(mFrameRateOverridesLock);
    void dump(std::string& result) const;
    bool updateFrameRateOverridesByContent(const UidToFrameRateOverride& frameRateOverrides)
            EXCLUDES(mFrameRateOverridesLock);
+8 −4
Original line number Diff line number Diff line
@@ -262,8 +262,12 @@ void Scheduler::onScreenReleased(ConnectionHandle handle) {
}

void Scheduler::onFrameRateOverridesChanged(ConnectionHandle handle, PhysicalDisplayId displayId) {
    const auto refreshRateConfigs = holdRefreshRateConfigs();
    const bool supportsFrameRateOverrideByContent =
            refreshRateConfigs->supportsFrameRateOverrideByContent();

    std::vector<FrameRateOverride> overrides =
            mFrameRateOverrideMappings.getAllFrameRateOverrides();
            mFrameRateOverrideMappings.getAllFrameRateOverrides(supportsFrameRateOverrideByContent);

    android::EventThread* thread;
    {
@@ -681,10 +685,10 @@ void Scheduler::dumpVsync(std::string& out) const {

bool Scheduler::updateFrameRateOverrides(GlobalSignals consideredSignals, Fps displayRefreshRate) {
    const auto refreshRateConfigs = holdRefreshRateConfigs();
    if (!refreshRateConfigs->supportsFrameRateOverrideByContent()) {
        return false;
    }

    // we always update mFrameRateOverridesByContent here
    // supportsFrameRateOverridesByContent will be checked
    // when getting FrameRateOverrides from mFrameRateOverrideMappings
    if (!consideredSignals.idle) {
        const auto frameRateOverrides =
                refreshRateConfigs->getFrameRateOverrides(mPolicy.contentRequirements,
+1 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ cc_test {
        "FpsReporterTest.cpp",
        "FpsTest.cpp",
        "FramebufferSurfaceTest.cpp",
        "FrameRateOverrideMappingsTest.cpp",
        "FrameTimelineTest.cpp",
        "GameModeTest.cpp",
        "HWComposerTest.cpp",
Loading