| Index: cc/layers/layer_impl.cc
|
| diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
|
| index e6e60f5f3ef7cc1e474c2b5c4a2aef192906b3b7..893d21b8fcc2e9f53978054296c8e8702c44f37f 100644
|
| --- a/cc/layers/layer_impl.cc
|
| +++ b/cc/layers/layer_impl.cc
|
| @@ -69,7 +69,8 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, int id)
|
| needs_push_properties_(false),
|
| num_dependents_need_push_properties_(0),
|
| sorting_context_id_(0),
|
| - current_draw_mode_(DRAW_MODE_NONE) {
|
| + current_draw_mode_(DRAW_MODE_NONE),
|
| + active_render_surface_(NULL) {
|
| DCHECK_GT(layer_id_, 0);
|
| DCHECK(layer_tree_impl_);
|
| layer_tree_impl_->RegisterLayer(this);
|
| @@ -237,19 +238,20 @@ void LayerImpl::TakeCopyRequestsAndTransformToTarget(
|
| }
|
|
|
| void LayerImpl::CreateRenderSurface() {
|
| - DCHECK(!draw_properties_.render_surface);
|
| - draw_properties_.render_surface =
|
| - make_scoped_ptr(new RenderSurfaceImpl(this));
|
| + DCHECK(!render_surface_);
|
| + render_surface_ = make_scoped_ptr(new RenderSurfaceImpl(this));
|
| draw_properties_.render_target = this;
|
| + SetRenderSurfaceActive(true);
|
| }
|
|
|
| void LayerImpl::ClearRenderSurface() {
|
| - draw_properties_.render_surface.reset();
|
| + SetRenderSurfaceActive(false);
|
| + render_surface_.reset();
|
| }
|
|
|
| void LayerImpl::ClearRenderSurfaceLayerList() {
|
| - if (draw_properties_.render_surface)
|
| - draw_properties_.render_surface->layer_list().clear();
|
| + if (render_surface_)
|
| + render_surface_->layer_list().clear();
|
| }
|
|
|
| void LayerImpl::PopulateSharedQuadState(SharedQuadState* state) const {
|
| @@ -541,6 +543,7 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) {
|
| layer->SetSentScrollDelta(gfx::Vector2d());
|
| layer->Set3dSortingContextId(sorting_context_id_);
|
| layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_);
|
| + layer->SetShouldHaveRenderSurface(ShouldHaveRenderSurface());
|
|
|
| LayerImpl* scroll_parent = NULL;
|
| if (scroll_parent_) {
|
| @@ -717,8 +720,8 @@ void LayerImpl::ResetAllChangeTrackingForSubtree() {
|
| update_rect_ = gfx::RectF();
|
| damage_rect_ = gfx::RectF();
|
|
|
| - if (draw_properties_.render_surface)
|
| - draw_properties_.render_surface->ResetPropertyChangedFlag();
|
| + if (render_surface_)
|
| + render_surface_->ResetPropertyChangedFlag();
|
|
|
| if (mask_layer_)
|
| mask_layer_->ResetAllChangeTrackingForSubtree();
|
| @@ -1541,4 +1544,29 @@ void LayerImpl::NotifyAnimationFinished(
|
| layer_tree_impl_->InputScrollAnimationFinished();
|
| }
|
|
|
| +void LayerImpl::SetRenderSurfaceActive(bool active) {
|
| + if (active == !!active_render_surface_) {
|
| + return;
|
| + }
|
| +
|
| + if (active) {
|
| + active_render_surface_ = render_surface_.get();
|
| + return;
|
| + }
|
| + if (active_render_surface_) {
|
| + active_render_surface_->ClearLayerLists();
|
| + }
|
| + active_render_surface_ = NULL;
|
| +}
|
| +
|
| +void LayerImpl::SetShouldHaveRenderSurface(bool should_have_render_surface) {
|
| + if (ShouldHaveRenderSurface() == should_have_render_surface)
|
| + return;
|
| + if (should_have_render_surface) {
|
| + CreateRenderSurface();
|
| + return;
|
| + }
|
| + ClearRenderSurface();
|
| +}
|
| +
|
| } // namespace cc
|
|
|