Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1155)

Unified Diff: cc/layers/layer_impl.cc

Issue 1491033002: Create RenderSurface on Effect Tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@alwayspt
Patch Set: fix for crash Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/layer_impl.h ('k') | cc/layers/layer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_);
}
« no previous file with comments | « cc/layers/layer_impl.h ('k') | cc/layers/layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698