diff --git a/components/viz/service/frame_sinks/external_begin_frame_source_mac.cc b/components/viz/service/frame_sinks/external_begin_frame_source_mac.cc index 818a46df8059fe..1070c95dcf1d93 100644 --- a/components/viz/service/frame_sinks/external_begin_frame_source_mac.cc +++ b/components/viz/service/frame_sinks/external_begin_frame_source_mac.cc @@ -135,4 +135,14 @@ void DelayBasedBeginFrameSourceMac::OnTimeSourceParamsUpdate( OnUpdateVSyncParameters(params.display_timebase, params.display_interval); } +void DelayBasedBeginFrameSourceMac::OnTimerTick() { + // The VSync parameters skew over time (astonishingly quickly -- 0.1 msec per + // second). If too much time has elapsed since the last time the vsync + // parameters were calculated, re-calculate them. + if (base::TimeTicks::Now() >= time_source_next_update_time_) { + RequestTimeSourceParamsUpdate(); + } + DelayBasedBeginFrameSource::OnTimerTick(); +} + } // namespace viz diff --git a/components/viz/service/frame_sinks/external_begin_frame_source_mac.h b/components/viz/service/frame_sinks/external_begin_frame_source_mac.h index 8148fd996402f9..15290954940a8c 100644 --- a/components/viz/service/frame_sinks/external_begin_frame_source_mac.h +++ b/components/viz/service/frame_sinks/external_begin_frame_source_mac.h @@ -86,6 +86,7 @@ class VIZ_COMMON_EXPORT DelayBasedBeginFrameSourceMac // BeginFrameSource implementation. void SetVSyncDisplayID(int64_t display_id) override; + void OnTimerTick() override; private: // Request a callback from DisplayLinkMac, and the callback function.