summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceControl.cpp
diff options
context:
space:
mode:
author Leon Scroggins III <scroggo@google.com> 2022-11-18 16:42:53 -0500
committer Leon Scroggins III <scroggo@google.com> 2023-02-01 12:44:06 -0500
commit31d41415101ff3483ce1cc5a9c2ef322490a05bd (patch)
tree51feecfad099fa5912b1f8dda8bc3260b644bfa4 /libs/gui/SurfaceControl.cpp
parent1d104209a2f9958241459813a5cb48f254699ac2 (diff)
Create a VsyncSchedule per display
In order to determine the vsync offsets between displays, keep track of a VsyncSchedule for each display. Store the VsyncSchedules in a SmallMap. Update getVsyncSchedule with a parameter to choose the display. The default parameter uses the leader's display, which is what current external callers want. Update VsyncDispatches when the leader changes, so that they are always listening to the leader. Enable and disable vsync callbacks per display. Earlier attempts to turn them on and off together could leave a secondary display on a bad schedule. Move state and logic for enabling/disabling the callbacks into VsyncSchedule. Add a method for resyncing all displays at once. Use std::shared_ptrs for VsyncDispatches. This prevents lifetime issues if a VsyncSchedule gets removed while its VsyncDispatch is still in use. Same for VsyncTracker, which is referenced by VsyncDispatch. When the leader VsyncSchedule changes, call cancel on VsyncCallbackRegistrations and replace them with new ones using the new VsyncDispatches. If a callback was scheduled, schedule a new one. Update VsyncSchedule's members' traces so that there is a separate track for each display. Move SF's record of the last HWC Vsync states into VsyncSchedule, so it sits with other related logic. Remove the pending HWC Vsync state, which did not affect behavior. For refresh rate changes, modulate vsync config based on the leader display. When switching leaders, force a period transition to ensure that a potential refresh rate change is completed. Bug: 255601557 Bug: 256196556 Bug: 241285473 Bug: 241286146 Test: libsurfaceflinger_unittest Test: manual (look at perfetto traces) Change-Id: If60218e85292c786b9fa70ecb33ee374d3a385e0
Diffstat (limited to 'libs/gui/SurfaceControl.cpp')
0 files changed, 0 insertions, 0 deletions