diff options
author | sunxd <sunxd@chromium.org> | 2016-01-11 13:01:02 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-11 21:02:26 +0000 |
commit | ed58688e7629fa3c56470a241bc758fb5fabf081 (patch) | |
tree | f6ff71f020fca9532faa6c66548894fa126cd900 /cc/layers/layer.cc | |
parent | 41a523c0dbdf29bf1353036e35004cb35c345b17 (diff) | |
download | chromium_src-ed58688e7629fa3c56470a241bc758fb5fabf081.zip chromium_src-ed58688e7629fa3c56470a241bc758fb5fabf081.tar.gz chromium_src-ed58688e7629fa3c56470a241bc758fb5fabf081.tar.bz2 |
cc: Use effect tree to track the number of copy requests
Move num_layer_or_descendants_with_copy_requestfrom layer_tree to
effect_tree.
This update introduces false positives to the variable:
if a layer owns no effect node, it returns the value of its nearest
ancestor who owns a effect node.
BUG=574192
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1566913004
Cr-Commit-Position: refs/heads/master@{#368664}
Diffstat (limited to 'cc/layers/layer.cc')
-rw-r--r-- | cc/layers/layer.cc | 39 |
1 files changed, 7 insertions, 32 deletions
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index 9d82b58..9fa2731 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc @@ -65,7 +65,6 @@ Layer::Layer(const LayerSettings& settings) effect_tree_index_(-1), clip_tree_index_(-1), property_tree_sequence_number_(-1), - num_layer_or_descendants_with_copy_request_(0), element_id_(0), mutable_properties_(kMutablePropertyNone), should_flatten_transform_from_property_tree_(false), @@ -272,15 +271,7 @@ void Layer::SetParent(Layer* layer) { layer->AddDependentNeedsPushProperties(); } - if (parent_) { - parent_->UpdateNumCopyRequestsForSubtree( - -num_layer_or_descendants_with_copy_request_); - } parent_ = layer; - if (parent_) { - parent_->UpdateNumCopyRequestsForSubtree( - num_layer_or_descendants_with_copy_request_); - } SetLayerTreeHost(parent_ ? parent_->layer_tree_host() : nullptr); if (!layer_tree_host_) @@ -422,7 +413,6 @@ bool Layer::HasAncestor(const Layer* ancestor) const { void Layer::RequestCopyOfOutput( scoped_ptr<CopyOutputRequest> request) { DCHECK(IsPropertyChangeAllowed()); - bool had_no_copy_requests = copy_requests_.empty(); if (void* source = request->source()) { auto it = std::find_if(copy_requests_.begin(), copy_requests_.end(), [source](const scoped_ptr<CopyOutputRequest>& x) { @@ -434,22 +424,9 @@ void Layer::RequestCopyOfOutput( if (request->IsEmpty()) return; copy_requests_.push_back(std::move(request)); - if (had_no_copy_requests) { - UpdateNumCopyRequestsForSubtree(1); - } SetNeedsCommit(); } -void Layer::UpdateNumCopyRequestsForSubtree(int delta) { - if (!delta) - return; - for (Layer* layer = this; layer; layer = layer->parent()) { - layer->num_layer_or_descendants_with_copy_request_ += delta; - layer->SetNeedsPushProperties(); - DCHECK_GE(layer->num_layer_or_descendants_with_copy_request_, 0); - } -} - void Layer::SetBackgroundColor(SkColor background_color) { DCHECK(IsPropertyChangeAllowed()); if (background_color_ == background_color) @@ -1238,8 +1215,6 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { layer->SetShouldFlattenTransform(should_flatten_transform_); layer->set_should_flatten_transform_from_property_tree( should_flatten_transform_from_property_tree_); - layer->set_num_layer_or_descendant_with_copy_request( - num_layer_or_descendants_with_copy_request_); layer->set_draw_blend_mode(draw_blend_mode_); layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); if (!layer->TransformIsAnimatingOnImplOnly() && !TransformIsAnimating()) @@ -1311,7 +1286,6 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { layer->SetScrollCompensationAdjustment(ScrollCompensationAdjustment()); // Wrap the copy_requests_ in a PostTask to the main thread. - bool had_copy_requests = !copy_requests_.empty(); std::vector<scoped_ptr<CopyOutputRequest>> main_thread_copy_requests; for (auto it = copy_requests_.begin(); it != copy_requests_.end(); ++it) { scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = @@ -1328,8 +1302,6 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { } if (!copy_requests_.empty() && layer_tree_host_) layer_tree_host_->property_trees()->needs_rebuild = true; - if (had_copy_requests) - UpdateNumCopyRequestsForSubtree(-1); copy_requests_.clear(); layer->PassCopyRequests(&main_thread_copy_requests); @@ -1512,8 +1484,6 @@ void Layer::LayerSpecificPropertiesToProto(proto::LayerProperties* proto) { base->set_should_flatten_transform(should_flatten_transform_); base->set_should_flatten_transform_from_property_tree( should_flatten_transform_from_property_tree_); - base->set_num_layer_or_descendants_with_copy_request( - num_layer_or_descendants_with_copy_request_); base->set_draw_blend_mode(SkXfermodeModeToProto(draw_blend_mode_)); base->set_use_parent_backface_visibility(use_parent_backface_visibility_); TransformToProto(transform_, base->mutable_transform()); @@ -1600,8 +1570,6 @@ void Layer::FromLayerSpecificPropertiesProto( should_flatten_transform_ = base.should_flatten_transform(); should_flatten_transform_from_property_tree_ = base.should_flatten_transform_from_property_tree(); - num_layer_or_descendants_with_copy_request_ = - base.num_layer_or_descendants_with_copy_request(); draw_blend_mode_ = SkXfermodeModeFromProto(base.draw_blend_mode()); use_parent_backface_visibility_ = base.use_parent_backface_visibility(); transform_ = ProtoToTransform(base.transform()); @@ -2001,6 +1969,13 @@ void Layer::DidBeginTracing() { SetNeedsPushProperties(); } +int Layer::num_copy_requests_in_target_subtree() { + return layer_tree_host() + ->property_trees() + ->effect_tree.Node(effect_tree_index()) + ->data.num_copy_requests_in_subtree; +} + void Layer::set_visited(bool visited) { visited_tracker_ = visited ? layer_tree_host()->meta_information_sequence_number() : 0; |