| 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..20b50133b69a7b69dbf79ed7db510249a5ee3f65 100644
|
| --- a/content/browser/renderer_host/browser_compositor_view_mac.mm
|
| +++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
|
| @@ -279,8 +279,33 @@ 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 latest_confirmed_frame = frame.metadata.latest_confirmed_frame;
|
| +
|
| delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id,
|
| std::move(frame));
|
| +
|
| + // 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 BrowserCompositorMac::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 BrowserCompositorMac::SetHasTransparentBackground(bool transparent) {
|
| @@ -460,6 +485,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.
|
| + DCHECK_LT(cc::BeginFrameArgs::kInvalidFrameNumber, args.sequence_number);
|
| + latest_confirmed_frame_ = args.sequence_number - 1;
|
| + }
|
| +
|
| client_->BrowserCompositorMacSendBeginFrame(args);
|
| last_begin_frame_args_ = args;
|
| }
|
|
|