Index: cc/layers/layer_impl.cc |
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc |
index b20cb3ddb105dbb1a36f437525f2d582e53e07e3..6892f39c45344ece19c7b9daf3ebd44440a2362d 100644 |
--- a/cc/layers/layer_impl.cc |
+++ b/cc/layers/layer_impl.cc |
@@ -88,6 +88,7 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, |
current_draw_mode_(DRAW_MODE_NONE), |
element_id_(0), |
mutable_properties_(kMutablePropertyNone), |
+ force_render_surface_(false), |
num_layer_or_descendants_with_copy_request_(0), |
frame_timing_requests_dirty_(false), |
visited_(false), |
@@ -280,7 +281,6 @@ void LayerImpl::PassCopyRequests( |
if (requests->empty()) |
return; |
- DCHECK(render_surface()); |
bool was_empty = copy_requests_.empty(); |
for (auto& request : *requests) |
copy_requests_.push_back(std::move(request)); |
@@ -573,7 +573,14 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) { |
layer->SetDoubleSided(double_sided_); |
layer->SetDrawsContent(DrawsContent()); |
layer->SetHideLayerAndSubtree(hide_layer_and_subtree_); |
+ // If whether layer has render surface changes, we need to update draw |
+ // properties. |
+ // TODO(weiliangc): Should be safely removed after impl side is able to |
+ // update render surfaces without rebuilding property trees. |
+ if (layer->has_render_surface() != has_render_surface()) |
+ layer->layer_tree_impl()->set_needs_update_draw_properties(); |
layer->SetHasRenderSurface(!!render_surface()); |
+ layer->SetForceRenderSurface(force_render_surface_); |
layer->SetFilters(filters()); |
layer->SetBackgroundFilters(background_filters()); |
layer->SetMasksToBounds(masks_to_bounds_); |
@@ -1355,6 +1362,12 @@ bool LayerImpl::HasOnlyTranslationTransforms() const { |
observer_type); |
} |
+bool LayerImpl::AnimationsPreserveAxisAlignment() const { |
+ return layer_animation_controller_ |
+ ? layer_animation_controller_->AnimationsPreserveAxisAlignment() |
+ : layer_tree_impl_->AnimationsPreserveAxisAlignment(this); |
+} |
+ |
bool LayerImpl::MaximumTargetScale(float* max_scale) const { |
if (!layer_animation_controller_) |
return layer_tree_impl_->MaximumTargetScale(this, max_scale); |
@@ -1799,7 +1812,6 @@ void LayerImpl::SetHasRenderSurface(bool should_have_render_surface) { |
return; |
SetNeedsPushProperties(); |
- layer_tree_impl()->set_needs_update_draw_properties(); |
if (should_have_render_surface) { |
render_surface_ = make_scoped_ptr(new RenderSurfaceImpl(this)); |
return; |
@@ -1836,6 +1848,14 @@ gfx::Transform LayerImpl::ScreenSpaceTransform() const { |
return draw_properties().screen_space_transform; |
} |
+void LayerImpl::SetForceRenderSurface(bool force_render_surface) { |
+ if (force_render_surface == force_render_surface_) |
+ return; |
+ |
+ force_render_surface_ = force_render_surface; |
+ NoteLayerPropertyChanged(); |
+} |
+ |
Region LayerImpl::GetInvalidationRegion() { |
return Region(update_rect_); |
} |