summaryrefslogtreecommitdiffstats
path: root/cc/surfaces/display.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/surfaces/display.cc')
-rw-r--r--cc/surfaces/display.cc29
1 files changed, 27 insertions, 2 deletions
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index dd776fb..7cd9d6d 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");