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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Brian's comments. Created 4 years 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/renderer_host/render_widget_host_view_aura.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 508ae90e472c19683073aa2263ec6d6b8b3ce764..e51b45f863680a11c24b7bab921e3ccd225b9349 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -370,6 +370,7 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host,
is_loading_(false),
has_composition_text_(false),
begin_frame_source_(nullptr),
+ latest_confirmed_frame_(cc::BeginFrameArgs::kInvalidFrameNumber),
needs_begin_frames_(false),
needs_flush_input_(false),
added_frame_observer_(false),
@@ -676,8 +677,13 @@ void RenderWidgetHostViewAura::UpdateNeedsBeginFramesInternal() {
begin_frame_source_->RemoveObserver(this);
}
-void RenderWidgetHostViewAura::OnBeginFrame(
- const cc::BeginFrameArgs& args) {
+void RenderWidgetHostViewAura::OnBeginFrame(const cc::BeginFrameArgs& args) {
+ if (args.source_id != last_begin_frame_args_.source_id) {
+ // Consider us up to date up to the previous BeginFrame.
+ DCHECK_LT(cc::BeginFrameArgs::kInvalidFrameNumber, args.sequence_number);
+ latest_confirmed_frame_ = args.sequence_number - 1;
+ }
+
needs_flush_input_ = false;
host_->FlushInput();
UpdateNeedsBeginFramesInternal();
@@ -935,10 +941,35 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame(
selection.end.SetEdge(end_edge_top, end_edge_bottom);
}
+ uint64_t begin_frame_source_id = frame.metadata.begin_frame_source_id;
+ uint64_t begin_frame_number = frame.metadata.begin_frame_number;
+ uint64_t latest_confirmed_frame = frame.metadata.latest_confirmed_frame;
+
delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id,
std::move(frame));
SelectionUpdated(selection.is_editable, selection.is_empty_text_form_control,
selection.start, selection.end);
+
+ // The CompositorFrame's damage was only incorporated if it wasn't skipped.
+ bool has_damage = false;
+ if (!delegated_frame_host_->skipped_frames()) {
+ latest_confirmed_frame_ = latest_confirmed_frame;
+ has_damage = true;
+ }
+
+ cc::BeginFrameAck ack(begin_frame_source_id, begin_frame_number,
+ latest_confirmed_frame_, 0, has_damage);
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(this, ack);
+}
+
+void RenderWidgetHostViewAura::OnBeginFrameDidNotDraw(
+ const cc::BeginFrameAck& ack) {
+ // DelegatedFrameHost may have skipped the last frame(s).
+ cc::BeginFrameAck modified_ack = ack;
+ modified_ack.latest_confirmed_frame = latest_confirmed_frame_;
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(this, modified_ack);
}
void RenderWidgetHostViewAura::ClearCompositorFrame() {

Powered by Google App Engine
This is Rietveld 408576698