Index: cc/layers/layer.cc |
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc |
index 737a26103dbbf4b3a9eda03a8682d823da76c29a..dde2b37448e1388bb15c297d9884783f6f27c772 100644 |
--- a/cc/layers/layer.cc |
+++ b/cc/layers/layer.cc |
@@ -66,6 +66,7 @@ Layer::Layer() |
draw_checkerboard_for_missing_tiles_(false), |
force_render_surface_(false), |
transform_is_invertible_(true), |
+ should_have_render_surface_(false), |
background_color_(0), |
opacity_(1.f), |
blend_mode_(SkXfermode::kSrcOver_Mode), |
@@ -909,6 +910,7 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { |
layer->SetScrollClipLayer(scroll_clip_layer_id_); |
layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); |
layer->set_user_scrollable_vertical(user_scrollable_vertical_); |
+ layer->SetShouldHaveRenderSurface(ShouldHaveRenderSurface()); |
LayerImpl* scroll_parent = NULL; |
if (scroll_parent_) { |
@@ -1078,18 +1080,18 @@ scoped_refptr<base::debug::ConvertableToTraceFormat> Layer::TakeDebugInfo() { |
} |
void Layer::CreateRenderSurface() { |
- DCHECK(!draw_properties_.render_surface); |
- draw_properties_.render_surface = make_scoped_ptr(new RenderSurface(this)); |
+ DCHECK(!render_surface_); |
+ render_surface_ = make_scoped_ptr(new RenderSurface(this)); |
draw_properties_.render_target = this; |
} |
void Layer::ClearRenderSurface() { |
- draw_properties_.render_surface.reset(); |
+ render_surface_.reset(); |
} |
void Layer::ClearRenderSurfaceLayerList() { |
- if (draw_properties_.render_surface) |
- draw_properties_.render_surface->layer_list().clear(); |
+ if (render_surface_) |
+ render_surface_->layer_list().clear(); |
} |
gfx::Vector2dF Layer::ScrollOffsetForAnimation() const { |
@@ -1242,4 +1244,20 @@ bool Layer::HasDelegatedContent() const { |
return false; |
} |
+void Layer::SetShouldHaveRenderSurface(bool should_have) { |
+ if (should_have_render_surface_ == should_have) |
+ return; |
+ should_have_render_surface_ = should_have; |
+ SetNeedsPushProperties(); |
+} |
+ |
+void Layer::SetRenderSurfaceActive(bool active) { |
+ if (active) { |
+ if (!render_surface_) |
+ CreateRenderSurface(); |
+ return; |
+ } |
+ ClearRenderSurface(); |
+} |
+ |
} // namespace cc |