Chromium Code Reviews| Index: cc/layers/layer_impl.cc |
| diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc |
| index 14ffa6f826fc2fd6c41349fec759bcf9a0c50a3c..551de29797416814d9cdd37cc879f5743d996a27 100644 |
| --- a/cc/layers/layer_impl.cc |
| +++ b/cc/layers/layer_impl.cc |
| @@ -60,7 +60,6 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, int id) |
| draw_checkerboard_for_missing_tiles_(false), |
| draws_content_(false), |
| hide_layer_and_subtree_(false), |
| - force_render_surface_(false), |
| transform_is_invertible_(true), |
| is_container_for_fixed_position_layers_(false), |
| background_color_(0), |
| @@ -71,7 +70,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); |
| @@ -239,19 +239,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; |
|
danakj
2014/08/26 18:06:13
Can this move to CalcDrawProps?
awoloszyn
2014/08/28 19:31:43
Done.
|
| + 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 { |
| @@ -510,7 +511,6 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) { |
| layer->SetDoubleSided(double_sided_); |
| layer->SetDrawCheckerboardForMissingTiles( |
| draw_checkerboard_for_missing_tiles_); |
| - layer->SetForceRenderSurface(force_render_surface_); |
| layer->SetDrawsContent(DrawsContent()); |
| layer->SetHideLayerAndSubtree(hide_layer_and_subtree_); |
| layer->SetFilters(filters()); |
| @@ -542,6 +542,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_) { |
| @@ -718,8 +719,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 +1542,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(); |
|
danakj
2014/08/26 18:06:13
Can you explain what is going on here, why do you
awoloszyn
2014/08/28 19:31:43
This has been re-worked so that the existence of o
|
| + 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 |