diff options
author | Padmanabhan Komanduru <quic_pkomandu@quicinc.com> | 2022-05-19 15:30:31 +0530 |
---|---|---|
committer | Padmanabhan Komanduru <quic_pkomandu@quicinc.com> | 2022-06-14 06:05:21 +0000 |
commit | e454a37e464a7c5737814494ba6788f5c725ec5f (patch) | |
tree | 99e094df9abd103bedb3fc1ac4453106c9967198 /services/surfaceflinger/SurfaceFlinger.cpp | |
parent | 0cd2304dfad25401cf47174689d446aa0ecbbe33 (diff) |
sf: update phase offsets with extension values properly
Add change to update VsyncConfiguration with Phase Offset values
everytime the vsync configuration is reset during active display
change.
Change-Id: I5e80875f13a2d0c1229804f328170f6a1778f99d
CRs-Fixed: 3197703
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 630997cd3a..52db4c1be0 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3994,6 +3994,7 @@ void SurfaceFlinger::processDisplayChanged(const wp<IBinder>& displayToken, void SurfaceFlinger::updateInternalDisplayVsyncLocked(const sp<DisplayDevice>& activeDisplay) { mVsyncConfiguration->reset(); + updateSfPhaseOffsets(activeDisplay); const Fps refreshRate = activeDisplay->refreshRateConfigs().getCurrentRefreshRate().getFps(); updatePhaseConfiguration(refreshRate); mRefreshRateStats->setRefreshRate(refreshRate); @@ -9000,6 +9001,31 @@ void SurfaceFlinger::updateInternalDisplaysPresentationMode() { } } +void SurfaceFlinger::updateSfPhaseOffsets(const sp<DisplayDevice> &display) { +#ifdef PHASE_OFFSET_EXTN + if (!g_comp_ext_intf_.phaseOffsetExtnIntf) { + return; + } + + // Get the Advanced SF Offsets from Phase Offset Extn + std::unordered_map<float, int64_t> advancedSfOffsets; + g_comp_ext_intf_.phaseOffsetExtnIntf->GetAdvancedSfOffsets(&advancedSfOffsets); + + // Populate the fps supported on device in mOffsetCache + const auto& supportedModes = display->getSupportedModes(); + for (auto mode : supportedModes) { + mVsyncConfiguration->getConfigsForRefreshRate(mode->getFps()); + } + + // Update the Advanced SF Offsets + mVsyncConfiguration->UpdateSfOffsets(advancedSfOffsets); + const auto vsyncConfig = + mVsyncModulator->setVsyncConfigSet(mVsyncConfiguration->getCurrentConfigs()); + ALOGI("VsyncConfig sfOffset %" PRId64 "\n", vsyncConfig.sfOffset); + ALOGI("VsyncConfig appOffset %" PRId64 "\n", vsyncConfig.appOffset); +#endif +} + void SurfaceFlinger::createPhaseOffsetExtn() { #ifdef PHASE_OFFSET_EXTN if (mUseAdvanceSfOffset && mComposerExtnIntf) { @@ -9009,16 +9035,7 @@ void SurfaceFlinger::createPhaseOffsetExtn() { return; } - // Get the Advanced SF Offsets from Phase Offset Extn - std::unordered_map<float, int64_t> advancedSfOffsets; - g_comp_ext_intf_.phaseOffsetExtnIntf->GetAdvancedSfOffsets(&advancedSfOffsets); - - // Update the Advanced SF Offsets - mVsyncConfiguration->UpdateSfOffsets(advancedSfOffsets); - const auto vsyncConfig = - mVsyncModulator->setVsyncConfigSet(mVsyncConfiguration->getCurrentConfigs()); - ALOGI("VsyncConfig sfOffset %" PRId64 "\n", vsyncConfig.sfOffset); - ALOGI("VsyncConfig appOffset %" PRId64 "\n", vsyncConfig.appOffset); + updateSfPhaseOffsets(getDefaultDisplayDeviceLocked()); } #endif } |