Commit 8fceabf0 authored by wkorman's avatar wkorman Committed by Commit bot

Apply filter mutation to effect tree directly for SPv2.

BUG=709137
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2874083002
Cr-Commit-Position: refs/heads/master@{#471180}
parent 080d5b71
...@@ -1263,6 +1263,13 @@ void LayerTreeHost::SetMutatorsNeedRebuildPropertyTrees() { ...@@ -1263,6 +1263,13 @@ void LayerTreeHost::SetMutatorsNeedRebuildPropertyTrees() {
void LayerTreeHost::SetElementFilterMutated(ElementId element_id, void LayerTreeHost::SetElementFilterMutated(ElementId element_id,
ElementListType list_type, ElementListType list_type,
const FilterOperations& filters) { const FilterOperations& filters) {
if (settings_.use_layer_lists) {
// In SPv2 we always have property trees and can set the filter
// directly on the effect node.
property_trees_.effect_tree.OnFilterAnimated(element_id, filters);
return;
}
Layer* layer = LayerByElementId(element_id); Layer* layer = LayerByElementId(element_id);
DCHECK(layer); DCHECK(layer);
layer->OnFilterAnimated(filters); layer->OnFilterAnimated(filters);
......
...@@ -1180,6 +1180,95 @@ class LayerTreeHostTestPropertyTreesChangedSync : public LayerTreeHostTest { ...@@ -1180,6 +1180,95 @@ class LayerTreeHostTestPropertyTreesChangedSync : public LayerTreeHostTest {
SINGLE_THREAD_TEST_F(LayerTreeHostTestPropertyTreesChangedSync); SINGLE_THREAD_TEST_F(LayerTreeHostTestPropertyTreesChangedSync);
class LayerTreeHostTestAnimationFilterMutatedNotUsingLayerLists
: public LayerTreeHostTest {
public:
void InitializeSettings(LayerTreeSettings* settings) override {
settings->use_layer_lists = false;
}
protected:
void SetupTree() override {
root_ = Layer::Create();
layer_tree_host()->SetRootLayer(root_);
LayerTreeHostTest::SetupTree();
}
void BeginTest() override {
FilterOperations filters;
EXPECT_EQ(FilterOperations(), root_->filters());
filters.Append(FilterOperation::CreateOpacityFilter(0.5f));
layer_tree_host()->SetElementFilterMutated(
root_->element_id(), ElementListType::ACTIVE, filters);
// When not using layer lists, filters are just stored directly on the
// layer.
EXPECT_EQ(filters, root_->filters());
EndTest();
}
void AfterTest() override {}
private:
scoped_refptr<Layer> root_;
};
SINGLE_THREAD_TEST_F(LayerTreeHostTestAnimationFilterMutatedNotUsingLayerLists);
class LayerTreeHostTestAnimationFilterMutatedUsingLayerLists
: public LayerTreeHostTest {
public:
void InitializeSettings(LayerTreeSettings* settings) override {
settings->use_layer_lists = true;
}
protected:
void SetupTree() override {
root_ = Layer::Create();
layer_tree_host()->SetRootLayer(root_);
LayerTreeHostTest::SetupTree();
}
void BeginTest() override {
// Insert a dummy effect node to observe its mutation. This would
// normally have been created by PaintArtifactCompositor.
int effect_node_id =
layer_tree_host()->property_trees()->effect_tree.Insert(
EffectNode(), EffectTree::kInvalidNodeId);
layer_tree_host()
->property_trees()
->element_id_to_effect_node_index[root_->element_id()] = effect_node_id;
EXPECT_EQ(FilterOperations(), root_->filters());
EXPECT_EQ(FilterOperations(),
layer_tree_host()
->property_trees()
->effect_tree.FindNodeFromElementId(root_->element_id())
->filters);
FilterOperations filters;
filters.Append(FilterOperation::CreateOpacityFilter(0.5f));
layer_tree_host()->SetElementFilterMutated(
root_->element_id(), ElementListType::ACTIVE, filters);
// When using layer lists, we don't have to store the filters on the layer.
EXPECT_EQ(FilterOperations(), root_->filters());
// The filter should have been set directly on the effect node instead.
EXPECT_EQ(filters,
layer_tree_host()
->property_trees()
->effect_tree.FindNodeFromElementId(root_->element_id())
->filters);
EndTest();
}
void AfterTest() override {}
private:
scoped_refptr<Layer> root_;
};
SINGLE_THREAD_TEST_F(LayerTreeHostTestAnimationFilterMutatedUsingLayerLists);
class LayerTreeHostTestEffectTreeSync : public LayerTreeHostTest { class LayerTreeHostTestEffectTreeSync : public LayerTreeHostTest {
protected: protected:
void SetupTree() override { void SetupTree() override {
...@@ -1377,7 +1466,7 @@ class LayerTreeHostTestTransformTreeDamageIsUpdated : public LayerTreeHostTest { ...@@ -1377,7 +1466,7 @@ class LayerTreeHostTestTransformTreeDamageIsUpdated : public LayerTreeHostTest {
root_->SetBounds(gfx::Size(50, 50)); root_->SetBounds(gfx::Size(50, 50));
// Make sure child is registerd for animation. // Make sure child is registered for animation.
child_->SetElementId(ElementId(2)); child_->SetElementId(ElementId(2));
// Make sure child and grand_child have transform nodes. // Make sure child and grand_child have transform nodes.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment