Index: cc/surfaces/display.cc |
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc |
index dd776fb1bc4d118408d8557c20a7b2eefc75389b..7cd9d6d126b566dd5547595523d92a181a2d466d 100644 |
--- a/cc/surfaces/display.cc |
+++ b/cc/surfaces/display.cc |
@@ -131,8 +131,8 @@ void Display::InitializeRenderer() { |
// overlays. |
bool output_partial_list = renderer_->Capabilities().using_partial_swap && |
!output_surface_->GetOverlayCandidateValidator(); |
- aggregator_.reset(new SurfaceAggregator(manager_, resource_provider_.get(), |
- output_partial_list)); |
+ aggregator_.reset(new SurfaceAggregator( |
+ this, manager_, resource_provider_.get(), output_partial_list)); |
} |
void Display::DidLoseOutputSurface() { |
@@ -150,6 +150,31 @@ void Display::UpdateRootSurfaceResourcesLocked() { |
scheduler_->SetRootSurfaceResourcesLocked(root_surface_resources_locked); |
} |
+void Display::AddSurface(Surface* surface) { |
+ // Checking for the output_surface ensures Display::Initialize has been |
+ // called and that scheduler_ won't change its value. |
+ DCHECK(output_surface_); |
+ |
+ // WebView's HardwareRenderer will never have a scheduler. |
+ if (!scheduler_) |
+ return; |
+ |
+ surface->AddBeginFrameSource(scheduler_->begin_frame_source_for_children()); |
+} |
+ |
+void Display::RemoveSurface(Surface* surface) { |
+ // Checking for the output_surface ensures Display::Initialize has been |
+ // called and that scheduler_ won't change its value. |
+ DCHECK(output_surface_); |
+ |
+ // WebView's HardwareRenderer will never have a scheduler. |
+ if (!scheduler_) |
+ return; |
+ |
+ surface->RemoveBeginFrameSource( |
+ scheduler_->begin_frame_source_for_children()); |
+} |
+ |
bool Display::DrawAndSwap() { |
TRACE_EVENT0("cc", "Display::DrawAndSwap"); |