Index: content/browser/frame_host/render_widget_host_view_child_frame.cc |
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.cc b/content/browser/frame_host/render_widget_host_view_child_frame.cc |
index 56e95b8775151d8ae88efa65e29b402e7919ef80..8fc135be1426b49917ad15bb1a89fbd755c76172 100644 |
--- a/content/browser/frame_host/render_widget_host_view_child_frame.cc |
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.cc |
@@ -404,6 +404,10 @@ void RenderWidgetHostViewChildFrame::OnSwapCompositorFrame( |
allocated_new_local_frame_id = true; |
} |
+ 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; |
+ |
cc::SurfaceFactory::DrawCallback ack_callback = |
base::Bind(&RenderWidgetHostViewChildFrame::SurfaceDrawn, AsWeakPtr(), |
compositor_frame_sink_id); |
@@ -426,6 +430,14 @@ void RenderWidgetHostViewChildFrame::OnSwapCompositorFrame( |
scale_factor, sequence); |
} |
ProcessFrameSwappedCallbacks(); |
+ DidSwapFrame(begin_frame_source_id, begin_frame_number, |
+ latest_confirmed_frame); |
+} |
+ |
+void RenderWidgetHostViewChildFrame::OnBeginFrameDidNotDraw( |
+ const cc::BeginFrameAck& ack) { |
+ if (begin_frame_source_) |
+ begin_frame_source_->DidFinishFrame(this, ack); |
} |
void RenderWidgetHostViewChildFrame::ProcessFrameSwappedCallbacks() { |
@@ -437,6 +449,16 @@ void RenderWidgetHostViewChildFrame::ProcessFrameSwappedCallbacks() { |
callback->Run(); |
} |
+void RenderWidgetHostViewChildFrame::DidSwapFrame( |
+ uint64_t source_id, |
+ uint64_t sequence_number, |
+ uint64_t latest_confirmed_frame) { |
+ cc::BeginFrameAck ack(source_id, sequence_number, latest_confirmed_frame, |
+ 0, true); |
+ if (begin_frame_source_) |
+ begin_frame_source_->DidFinishFrame(this, ack); |
+} |
+ |
gfx::Rect RenderWidgetHostViewChildFrame::GetBoundsInRootWindow() { |
gfx::Rect rect; |
if (frame_connector_) { |