Loading services/surfaceflinger/Scheduler/Scheduler.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -318,12 +318,24 @@ void Scheduler::withPrimaryDispSync(std::function<void(DispSync&)> const& fn) { void Scheduler::updateFpsBasedOnContent() { uint32_t refreshRate = std::round(mLayerHistory.getDesiredRefreshRate()); ATRACE_INT("ContentFPS", refreshRate); if (refreshRate > 0) { contentChangeRefreshRate(ContentFeatureState::CONTENT_DETECTION_ON, refreshRate); } else { contentChangeRefreshRate(ContentFeatureState::CONTENT_DETECTION_OFF, 0); RefreshRateType newRefreshRateType; { std::lock_guard<std::mutex> lock(mFeatureStateLock); if (mContentRefreshRate == refreshRate) { return; } mContentRefreshRate = refreshRate; ATRACE_INT("ContentFPS", mContentRefreshRate); mCurrentContentFeatureState = refreshRate > 0 ? ContentFeatureState::CONTENT_DETECTION_ON : ContentFeatureState::CONTENT_DETECTION_OFF; newRefreshRateType = calculateRefreshRateType(); if (mRefreshRateType == newRefreshRateType) { return; } mRefreshRateType = newRefreshRateType; } changeRefreshRate(newRefreshRateType, ConfigEvent::Changed); } void Scheduler::setChangeRefreshRateCallback( Loading Loading @@ -365,24 +377,19 @@ std::string Scheduler::doDump() { return stream.str(); } void Scheduler::contentChangeRefreshRate(ContentFeatureState contentFeatureState, uint32_t refreshRate) { RefreshRateType newRefreshRateType; { std::lock_guard<std::mutex> lock(mFeatureStateLock); mCurrentContentFeatureState = contentFeatureState; mContentRefreshRate = refreshRate; newRefreshRateType = calculateRefreshRateType(); } changeRefreshRate(newRefreshRateType, ConfigEvent::Changed); } void Scheduler::timerChangeRefreshRate(IdleTimerState idleTimerState) { RefreshRateType newRefreshRateType; { std::lock_guard<std::mutex> lock(mFeatureStateLock); if (mCurrentIdleTimerState == idleTimerState) { return; } mCurrentIdleTimerState = idleTimerState; newRefreshRateType = calculateRefreshRateType(); if (mRefreshRateType == newRefreshRateType) { return; } mRefreshRateType = newRefreshRateType; } changeRefreshRate(newRefreshRateType, ConfigEvent::None); } Loading services/surfaceflinger/Scheduler/Scheduler.h +2 −3 Original line number Diff line number Diff line Loading @@ -193,8 +193,6 @@ private: void expiredTimerCallback(); // Sets vsync period. void setVsyncPeriod(const nsecs_t period); // Media feature's function to change the refresh rate. void contentChangeRefreshRate(ContentFeatureState contentFeatureState, uint32_t refreshRate); // Idle timer feature's function to change the refresh rate. void timerChangeRefreshRate(IdleTimerState idleTimerState); // Calculate the new refresh rate type Loading Loading @@ -254,7 +252,8 @@ private: ContentFeatureState mCurrentContentFeatureState GUARDED_BY(mFeatureStateLock) = ContentFeatureState::CONTENT_DETECTION_OFF; IdleTimerState mCurrentIdleTimerState GUARDED_BY(mFeatureStateLock) = IdleTimerState::RESET; uint32_t mContentRefreshRate; uint32_t mContentRefreshRate GUARDED_BY(mFeatureStateLock); RefreshRateType mRefreshRateType GUARDED_BY(mFeatureStateLock); const scheduler::RefreshRateConfigs& mRefreshRateConfigs; }; Loading services/surfaceflinger/SurfaceFlinger.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -1005,6 +1005,7 @@ bool SurfaceFlinger::performSetActiveConfig() { // display is not valid or we are already in the requested mode // on both cases there is nothing left to do std::lock_guard<std::mutex> lock(mActiveConfigLock); mDesiredActiveConfig.event = Scheduler::ConfigEvent::None; mDesiredActiveConfigChanged = false; ATRACE_INT("DesiredActiveConfigChanged", mDesiredActiveConfigChanged); return false; Loading @@ -1017,6 +1018,8 @@ bool SurfaceFlinger::performSetActiveConfig() { std::lock_guard<std::mutex> lock(mActiveConfigLock); mDesiredActiveConfig.event = Scheduler::ConfigEvent::None; mDesiredActiveConfig.configId = display->getActiveConfig(); mDesiredActiveConfigChanged = false; ATRACE_INT("DesiredActiveConfigChanged", mDesiredActiveConfigChanged); return false; } mUpcomingActiveConfig = desiredActiveConfig; Loading Loading
services/surfaceflinger/Scheduler/Scheduler.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -318,12 +318,24 @@ void Scheduler::withPrimaryDispSync(std::function<void(DispSync&)> const& fn) { void Scheduler::updateFpsBasedOnContent() { uint32_t refreshRate = std::round(mLayerHistory.getDesiredRefreshRate()); ATRACE_INT("ContentFPS", refreshRate); if (refreshRate > 0) { contentChangeRefreshRate(ContentFeatureState::CONTENT_DETECTION_ON, refreshRate); } else { contentChangeRefreshRate(ContentFeatureState::CONTENT_DETECTION_OFF, 0); RefreshRateType newRefreshRateType; { std::lock_guard<std::mutex> lock(mFeatureStateLock); if (mContentRefreshRate == refreshRate) { return; } mContentRefreshRate = refreshRate; ATRACE_INT("ContentFPS", mContentRefreshRate); mCurrentContentFeatureState = refreshRate > 0 ? ContentFeatureState::CONTENT_DETECTION_ON : ContentFeatureState::CONTENT_DETECTION_OFF; newRefreshRateType = calculateRefreshRateType(); if (mRefreshRateType == newRefreshRateType) { return; } mRefreshRateType = newRefreshRateType; } changeRefreshRate(newRefreshRateType, ConfigEvent::Changed); } void Scheduler::setChangeRefreshRateCallback( Loading Loading @@ -365,24 +377,19 @@ std::string Scheduler::doDump() { return stream.str(); } void Scheduler::contentChangeRefreshRate(ContentFeatureState contentFeatureState, uint32_t refreshRate) { RefreshRateType newRefreshRateType; { std::lock_guard<std::mutex> lock(mFeatureStateLock); mCurrentContentFeatureState = contentFeatureState; mContentRefreshRate = refreshRate; newRefreshRateType = calculateRefreshRateType(); } changeRefreshRate(newRefreshRateType, ConfigEvent::Changed); } void Scheduler::timerChangeRefreshRate(IdleTimerState idleTimerState) { RefreshRateType newRefreshRateType; { std::lock_guard<std::mutex> lock(mFeatureStateLock); if (mCurrentIdleTimerState == idleTimerState) { return; } mCurrentIdleTimerState = idleTimerState; newRefreshRateType = calculateRefreshRateType(); if (mRefreshRateType == newRefreshRateType) { return; } mRefreshRateType = newRefreshRateType; } changeRefreshRate(newRefreshRateType, ConfigEvent::None); } Loading
services/surfaceflinger/Scheduler/Scheduler.h +2 −3 Original line number Diff line number Diff line Loading @@ -193,8 +193,6 @@ private: void expiredTimerCallback(); // Sets vsync period. void setVsyncPeriod(const nsecs_t period); // Media feature's function to change the refresh rate. void contentChangeRefreshRate(ContentFeatureState contentFeatureState, uint32_t refreshRate); // Idle timer feature's function to change the refresh rate. void timerChangeRefreshRate(IdleTimerState idleTimerState); // Calculate the new refresh rate type Loading Loading @@ -254,7 +252,8 @@ private: ContentFeatureState mCurrentContentFeatureState GUARDED_BY(mFeatureStateLock) = ContentFeatureState::CONTENT_DETECTION_OFF; IdleTimerState mCurrentIdleTimerState GUARDED_BY(mFeatureStateLock) = IdleTimerState::RESET; uint32_t mContentRefreshRate; uint32_t mContentRefreshRate GUARDED_BY(mFeatureStateLock); RefreshRateType mRefreshRateType GUARDED_BY(mFeatureStateLock); const scheduler::RefreshRateConfigs& mRefreshRateConfigs; }; Loading
services/surfaceflinger/SurfaceFlinger.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -1005,6 +1005,7 @@ bool SurfaceFlinger::performSetActiveConfig() { // display is not valid or we are already in the requested mode // on both cases there is nothing left to do std::lock_guard<std::mutex> lock(mActiveConfigLock); mDesiredActiveConfig.event = Scheduler::ConfigEvent::None; mDesiredActiveConfigChanged = false; ATRACE_INT("DesiredActiveConfigChanged", mDesiredActiveConfigChanged); return false; Loading @@ -1017,6 +1018,8 @@ bool SurfaceFlinger::performSetActiveConfig() { std::lock_guard<std::mutex> lock(mActiveConfigLock); mDesiredActiveConfig.event = Scheduler::ConfigEvent::None; mDesiredActiveConfig.configId = display->getActiveConfig(); mDesiredActiveConfigChanged = false; ATRACE_INT("DesiredActiveConfigChanged", mDesiredActiveConfigChanged); return false; } mUpcomingActiveConfig = desiredActiveConfig; Loading