Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Unified Diff: content/browser/compositor/gpu_vsync_begin_frame_source.cc

Issue 2897263003: Fix Omnibox.CharTypedToRepaintLatency regression with D3DVsync experiment (Closed)
Patch Set: Addressed feedback Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/compositor/gpu_vsync_begin_frame_source.cc
diff --git a/content/browser/compositor/gpu_vsync_begin_frame_source.cc b/content/browser/compositor/gpu_vsync_begin_frame_source.cc
index 7e43be479adc6b1ff83bc7337b8cf60b29b15855..e4f039a782e5d99eb0121fd177d3b9d23dc6ffcb 100644
--- a/content/browser/compositor/gpu_vsync_begin_frame_source.cc
+++ b/content/browser/compositor/gpu_vsync_begin_frame_source.cc
@@ -22,7 +22,7 @@ void GpuVSyncBeginFrameSource::OnVSync(base::TimeTicks timestamp,
if (!needs_begin_frames_)
return;
- base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks now = Now();
base::TimeTicks deadline = now.SnappedToNextTick(timestamp, interval);
TRACE_EVENT1("cc", "GpuVSyncBeginFrameSource::OnVSync", "latency",
@@ -39,4 +39,43 @@ void GpuVSyncBeginFrameSource::OnNeedsBeginFrames(bool needs_begin_frames) {
vsync_control_->SetNeedsVSync(needs_begin_frames);
}
+base::TimeTicks GpuVSyncBeginFrameSource::Now() const {
+ return base::TimeTicks::Now();
+}
+
+cc::BeginFrameArgs GpuVSyncBeginFrameSource::GetMissedBeginFrameArgs(
+ cc::BeginFrameObserver* obs) {
+ if (!last_begin_frame_args_.IsValid())
+ return cc::BeginFrameArgs();
+
+ base::TimeTicks now = Now();
+ base::TimeTicks estimated_next_timestamp = now.SnappedToNextTick(
+ last_begin_frame_args_.frame_time, last_begin_frame_args_.interval);
+ base::TimeTicks missed_timestamp =
+ estimated_next_timestamp - last_begin_frame_args_.interval;
+
+ if (missed_timestamp > last_begin_frame_args_.frame_time) {
+ // The projected missed timestamp is newer than the last known timestamp.
+ // In this case create BeginFrameArgs with a new sequence number.
+ next_sequence_number_++;
+ last_begin_frame_args_ = cc::BeginFrameArgs::Create(
+ BEGINFRAME_FROM_HERE, source_id(), next_sequence_number_,
+ missed_timestamp, estimated_next_timestamp,
+ last_begin_frame_args_.interval, cc::BeginFrameArgs::MISSED);
+ return last_begin_frame_args_;
+ }
+
+ // The last known args object is up-to-date. Skip sending notification
+ // if the observer has already seen it.
+ const cc::BeginFrameArgs& last_observer_args = obs->LastUsedBeginFrameArgs();
+ if (last_observer_args.IsValid() &&
+ last_begin_frame_args_.frame_time <= last_observer_args.frame_time) {
+ return cc::BeginFrameArgs();
+ }
+
+ cc::BeginFrameArgs missed_args = last_begin_frame_args_;
+ missed_args.type = cc::BeginFrameArgs::MISSED;
+ return missed_args;
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698