Mac: Recompute vsync parameters every 10 seconds
Continuously running the display link thread is expensive, but the vsync
parameters skew very quickly (about 0.1 msec per second, which will get
you a half-vsync off in a minute).
Strike a compromise by running the display link for a single tick, every
ten seconds.
BUG=510252
Review URL: https://codereview.chromium.org/1298513004
Cr-Commit-Position: refs/heads/master@{#343739}
diff --git a/ui/accelerated_widget_mac/display_link_mac.cc b/ui/accelerated_widget_mac/display_link_mac.cc
index ec479d8..1945d2bc 100644
--- a/ui/accelerated_widget_mac/display_link_mac.cc
+++ b/ui/accelerated_widget_mac/display_link_mac.cc
@@ -108,6 +108,11 @@
return true;
}
+void DisplayLinkMac::NotifyCurrentTime(const base::TimeTicks& now) {
+ if (now >= recalculate_time_)
+ StartOrContinueDisplayLink();
+}
+
void DisplayLinkMac::Tick(const CVTimeStamp& cv_time) {
TRACE_EVENT0("ui", "DisplayLinkMac::Tick");
@@ -128,6 +133,9 @@
1000000 * static_cast<int64>(numerator) / denominator);
timebase_and_interval_valid_ = true;
+ // Don't restart the display link for 10 seconds.
+ recalculate_time_ = base::TimeTicks::Now() +
+ base::TimeDelta::FromSeconds(10);
StopDisplayLink();
}