Loading libs/gui/include/gui/DisplayEventReceiver.h +5 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,11 @@ private: std::optional<status_t> mInitError; }; 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 Loading services/surfaceflinger/Scheduler/FrameRateOverrideMappings.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -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(), Loading @@ -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()) { Loading services/surfaceflinger/Scheduler/FrameRateOverrideMappings.h +2 −1 Original line number Diff line number Diff line Loading @@ -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); Loading services/surfaceflinger/Scheduler/Scheduler.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -263,8 +263,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; { Loading Loading @@ -682,10 +686,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, Loading services/surfaceflinger/tests/unittests/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ cc_test { "FpsReporterTest.cpp", "FpsTest.cpp", "FramebufferSurfaceTest.cpp", "FrameRateOverrideMappingsTest.cpp", "FrameTimelineTest.cpp", "GameModeTest.cpp", "HWComposerTest.cpp", Loading Loading
libs/gui/include/gui/DisplayEventReceiver.h +5 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,11 @@ private: std::optional<status_t> mInitError; }; 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 Loading
services/surfaceflinger/Scheduler/FrameRateOverrideMappings.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -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(), Loading @@ -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()) { Loading
services/surfaceflinger/Scheduler/FrameRateOverrideMappings.h +2 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
services/surfaceflinger/Scheduler/Scheduler.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -263,8 +263,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; { Loading Loading @@ -682,10 +686,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, Loading
services/surfaceflinger/tests/unittests/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ cc_test { "FpsReporterTest.cpp", "FpsTest.cpp", "FramebufferSurfaceTest.cpp", "FrameRateOverrideMappingsTest.cpp", "FrameTimelineTest.cpp", "GameModeTest.cpp", "HWComposerTest.cpp", Loading