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

Unified Diff: cc/layers/layer_impl.cc

Issue 465853004: Moving RenderSurface creation outside of CalcDrawProps (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated unit tests Created 6 years, 4 months 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
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

Powered by Google App Engine
This is Rietveld 408576698