Index: cc/surfaces/display.cc |
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc |
index a0ffb2ce35fce3f46f4c5674d1de15016926f006..36fdddbe2a8630a99177fcb28541ba03d589e919 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_->GetWrappedSource()); |
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_->SwapWrappedSource(begin_frame_source); |
+} |
+ |
} // namespace cc |