| 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 | 
|  |