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

Unified Diff: cc/surfaces/display.cc

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: . 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: cc/surfaces/display.cc
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index a0ffb2ce35fce3f46f4c5674d1de15016926f006..7a6d473cfe44e4afd5e0b8a2d63d5e97742f4da6 100644
--- a/cc/surfaces/display.cc
+++ b/cc/surfaces/display.cc
@@ -42,15 +42,18 @@ Display::Display(SharedBitmapManager* bitmap_manager,
gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
settings_(settings),
frame_sink_id_(frame_sink_id),
- begin_frame_source_(std::move(begin_frame_source)),
+ begin_frame_source_(
+ new DisplayBeginFrameSource(std::move(begin_frame_source))),
output_surface_(std::move(output_surface)),
scheduler_(std::move(scheduler)),
texture_mailbox_deleter_(std::move(texture_mailbox_deleter)) {
DCHECK(output_surface_);
- DCHECK_EQ(!scheduler_, !begin_frame_source_);
+ DCHECK_EQ(!scheduler_, !begin_frame_source_->GetTargetSource());
DCHECK(frame_sink_id_.is_valid());
- if (scheduler_)
+ if (scheduler_) {
scheduler_->SetClient(this);
+ scheduler_->SetBeginFrameSource(begin_frame_source_.get());
+ }
}
Display::~Display() {
@@ -58,8 +61,7 @@ Display::~Display() {
if (client_) {
if (auto* context = output_surface_->context_provider())
context->SetLostContextCallback(base::Closure());
- if (begin_frame_source_)
- surface_manager_->UnregisterBeginFrameSource(begin_frame_source_.get());
+ surface_manager_->UnregisterBeginFrameSource(begin_frame_source_.get());
surface_manager_->RemoveObserver(this);
}
if (aggregator_) {
@@ -82,10 +84,8 @@ void Display::Initialize(DisplayClient* client,
// This must be done in Initialize() so that the caller can delay this until
// they are ready to receive a BeginFrameSource.
- if (begin_frame_source_) {
- surface_manager_->RegisterBeginFrameSource(begin_frame_source_.get(),
- frame_sink_id_);
- }
+ surface_manager_->RegisterBeginFrameSource(begin_frame_source_.get(),
+ frame_sink_id_);
output_surface_->BindToClient(this);
InitializeRenderer();
@@ -403,4 +403,9 @@ void Display::ForceImmediateDrawAndSwapIfPossible() {
scheduler_->ForceImmediateSwapIfPossible();
}
+void Display::SwapBeginFrameSource(
+ std::unique_ptr<BeginFrameSource>* begin_frame_source) {
+ begin_frame_source_->SwapTargetSource(begin_frame_source);
+}
+
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698