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

Unified Diff: content/browser/renderer_host/browser_compositor_view_mac.mm

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Sami's comments, DisplayScheduler observes while BFSObservers exist. 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/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;
}

Powered by Google App Engine
This is Rietveld 408576698