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

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

Issue 2740833005: [cc] Pass on BeginFrameAcks from CompositorEBFS through RWHVAura, DFH. (Closed)
Patch Set: Created 3 years, 9 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/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 1000c12f3f4f68d67ca1f1d5ad571e50f92963a4..89e0e002fb3fd5b7a60516bda4ae0384f82c0632 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -387,6 +387,8 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host,
is_loading_(false),
has_composition_text_(false),
begin_frame_source_(nullptr),
+ latest_confirmed_begin_frame_sequence_number_(
+ cc::BeginFrameArgs::kInvalidFrameNumber),
needs_begin_frames_(false),
needs_flush_input_(false),
added_frame_observer_(false),
@@ -675,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) {
+ // Source changed, we don't know our freshness anymore.
+ latest_confirmed_begin_frame_sequence_number_ =
+ cc::BeginFrameArgs::kInvalidFrameNumber;
+ }
+
needs_flush_input_ = false;
host_->FlushInput();
UpdateNeedsBeginFramesInternal();
@@ -950,6 +957,37 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame(
}
selection_controller_->OnSelectionBoundsChanged(selection.start,
selection.end);
+
+ cc::BeginFrameAck ack(frame.metadata.begin_frame_ack);
+ DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
+ // The CompositorFrame's damage was only incorporated if it wasn't skipped.
+ if (delegated_frame_host_->skipped_frames()) {
+ ack.has_damage = false;
+ ack.latest_confirmed_sequence_number =
+ latest_confirmed_begin_frame_sequence_number_;
+ } else {
+ DCHECK(ack.has_damage);
+ latest_confirmed_begin_frame_sequence_number_ =
+ ack.latest_confirmed_sequence_number;
+ }
+
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(this, ack);
Eric Seckler 2017/03/14 11:13:41 +fsamuel, +brianderson: Regarding the discussion
Fady Samuel 2017/03/14 11:31:38 Could we do this from Surface::ActivateFrame then,
+}
+
+void RenderWidgetHostViewAura::OnBeginFrameDidNotDraw(
+ const cc::BeginFrameAck& ack) {
+ DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
+ DCHECK(!ack.has_damage);
+ cc::BeginFrameAck modified_ack = ack;
+ if (delegated_frame_host_->skipped_frames()) {
+ // If DelegatedFrameHost skipped the last frame(s), we need to wait for a
+ // newly submitted CompositorFrame before confirming newer sequence numbers.
+ modified_ack.latest_confirmed_sequence_number =
+ latest_confirmed_begin_frame_sequence_number_;
+ }
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(this, modified_ack);
}
void RenderWidgetHostViewAura::ClearCompositorFrame() {

Powered by Google App Engine
This is Rietveld 408576698