Chromium Code Reviews| Index: content/browser/renderer_host/browser_compositor_view_mac.mm |
| diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm |
| index 93944dc85ad8f932bca73699111991cfd9af903f..35a9cde3afad9134a758c534e4f8a0480fc863e8 100644 |
| --- a/content/browser/renderer_host/browser_compositor_view_mac.mm |
| +++ b/content/browser/renderer_host/browser_compositor_view_mac.mm |
| @@ -279,8 +279,31 @@ void BrowserCompositorMac::SwapCompositorFrame( |
| recyclable_compositor_->compositor()->SetScaleAndSize(scale_factor, |
| pixel_size); |
| } |
| + uint64_t begin_frame_source_id = frame.metadata.begin_frame_source_id; |
| + uint64_t begin_frame_number = frame.metadata.begin_frame_number; |
| + uint64_t oldest_incorporated_frame = frame.metadata.oldest_incorporated_frame; |
| + |
| delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, |
| std::move(frame)); |
| + |
| + // The CompositorFrame's updates were only incorporated if it wasn't skipped. |
| + bool has_updates = false; |
| + if (!delegated_frame_host_->skipped_frames()) { |
| + oldest_incorporated_frame_ = oldest_incorporated_frame; |
| + has_updates = true; |
| + } |
| + |
| + cc::BeginFrameAck ack(begin_frame_source_id, begin_frame_number, |
| + oldest_incorporated_frame_, 0, has_updates); |
| + if (begin_frame_source_) |
| + begin_frame_source_->DidFinishFrame(this, ack); |
| +} |
| + |
| +void BrowserCompositorMac::OnBeginFrameDidNotDraw(cc::BeginFrameAck ack) { |
| + // DelegatedFrameHost may have skipped the last frame(s). |
| + ack.oldest_incorporated_frame = oldest_incorporated_frame_; |
| + if (begin_frame_source_) |
| + begin_frame_source_->DidFinishFrame(this, ack); |
| } |
| void BrowserCompositorMac::SetHasTransparentBackground(bool transparent) { |
| @@ -460,6 +483,12 @@ bool BrowserCompositorMac::IsAutoResizeEnabled() const { |
| // cc::BeginFrameSourceBase, public: |
| void BrowserCompositorMac::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. |
| + oldest_incorporated_frame_ = |
| + args.sequence_number > 0 ? args.sequence_number - 1 : 0; |
|
Sami
2016/12/07 16:59:40
Zero-check not needed anymore? (Could be a DCHECK
Eric Seckler
2016/12/08 17:54:28
Done, also in RWHVAura.
|
| + } |
| + |
| client_->BrowserCompositorMacSendBeginFrame(args); |
| last_begin_frame_args_ = args; |
| } |