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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/CompositorMutableStateTest.cpp

Issue 2765053002: Avoid exposing cc::Layer tree to CompositorProxy (Closed)
Patch Set: Rebase onto blink reformat Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/graphics/CompositorMutableState.h" 5 #include "platform/graphics/CompositorMutableState.h"
6 6
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "cc/test/fake_compositor_frame_sink.h"
9 #include "cc/test/fake_impl_task_runner_provider.h"
10 #include "cc/test/fake_layer_tree_host_impl.h"
11 #include "cc/test/test_shared_bitmap_manager.h"
12 #include "cc/test/test_task_graph_runner.h"
13 #include "cc/trees/layer_tree_host_impl.h"
14 #include "cc/trees/layer_tree_impl.h"
15 #include "platform/graphics/CompositorElementId.h"
16 #include "platform/graphics/CompositorMutableProperties.h" 8 #include "platform/graphics/CompositorMutableProperties.h"
17 #include "platform/graphics/CompositorMutableStateProvider.h" 9 #include "platform/graphics/CompositorMutableStateProvider.h"
18 #include "platform/graphics/CompositorMutation.h" 10 #include "platform/graphics/CompositorMutation.h"
19 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
20 #include <memory> 12 #include <memory>
21 13
22 namespace blink { 14 namespace blink {
23 15
24 using cc::FakeImplTaskRunnerProvider; 16 TEST(CompositorMutableStateTest, NoMutableState) {
25 using cc::FakeLayerTreeHostImpl; 17 // In this test, there are no proxies with either an element id or mutable
26 using cc::FakeCompositorFrameSink;
27 using cc::LayerImpl;
28 using cc::LayerTreeSettings;
29 using cc::TestTaskGraphRunner;
30 using cc::TestSharedBitmapManager;
31
32 class CompositorMutableStateTest : public testing::Test {
33 public:
34 CompositorMutableStateTest()
35 : compositor_frame_sink_(FakeCompositorFrameSink::Create3d()) {
36 LayerTreeSettings settings;
37 settings.layer_transforms_should_scale_layer_contents = true;
38 host_impl_.reset(new FakeLayerTreeHostImpl(settings, &task_runner_provider_,
39 &task_graph_runner_));
40 host_impl_->SetVisible(true);
41 EXPECT_TRUE(host_impl_->InitializeRenderer(compositor_frame_sink_.get()));
42 }
43
44 void SetLayerPropertiesForTesting(LayerImpl* layer) {
45 layer->test_properties()->transform = gfx::Transform();
46 layer->SetPosition(gfx::PointF());
47 layer->SetBounds(gfx::Size(100, 100));
48 layer->SetDrawsContent(true);
49 }
50
51 FakeLayerTreeHostImpl& HostImpl() { return *host_impl_; }
52
53 LayerImpl* RootLayer() {
54 return host_impl_->active_tree()->root_layer_for_testing();
55 }
56
57 private:
58 // The cc testing machinery has fairly deep dependency on having a main
59 // message loop (one example is the task runner provider). We construct one
60 // here so that it's installed in TLA and can be found by other cc classes.
61 base::MessageLoop message_loop_;
62 TestTaskGraphRunner task_graph_runner_;
63 FakeImplTaskRunnerProvider task_runner_provider_;
64 std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink_;
65 std::unique_ptr<FakeLayerTreeHostImpl> host_impl_;
66 };
67
68 TEST_F(CompositorMutableStateTest, NoMutableState) {
69 // In this test, there are no layers with either an element id or mutable
70 // properties. We should not be able to get any mutable state. 18 // properties. We should not be able to get any mutable state.
71 std::unique_ptr<LayerImpl> root = 19 ProxyCompositorMutablePropertiesMap empty_map;
72 LayerImpl::Create(HostImpl().active_tree(), 42);
73 SetLayerPropertiesForTesting(root.get());
74
75 HostImpl().SetViewportSize(root->bounds());
76 HostImpl().active_tree()->SetRootLayerForTesting(std::move(root));
77 HostImpl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
78
79 CompositorMutations mutations; 20 CompositorMutations mutations;
80 CompositorMutableStateProvider provider(HostImpl().active_tree(), &mutations); 21 CompositorMutableStateProvider provider(&empty_map, &mutations);
81 std::unique_ptr<CompositorMutableState> state( 22 std::unique_ptr<CompositorMutableState> state(
82 provider.GetMutableStateFor(42)); 23 provider.GetMutableStateFor(42));
83 EXPECT_FALSE(state); 24 EXPECT_FALSE(state);
84 } 25 }
85 26
86 TEST_F(CompositorMutableStateTest, MutableStateMutableProperties) { 27 TEST(CompositorMutableStateTest, MutableStateMutableProperties) {
87 // In this test, there is a layer with an element id and mutable properties. 28 // In this test, there is a proxy with an element id and mutable properties.
88 // In this case, we should get a valid mutable state for this element id that 29 // In this case, we should get a valid mutable state for this element id and
89 // has a real effect on the corresponding layer. 30 // mutations should be updated accordingly.
90 std::unique_ptr<LayerImpl> root = 31 int proxy_id = 12;
91 LayerImpl::Create(HostImpl().active_tree(), 42); 32 int element_id = 15;
92 33
93 std::unique_ptr<LayerImpl> scoped_layer = 34 ProxyCompositorMutablePropertiesMap input_properties;
94 LayerImpl::Create(HostImpl().active_tree(), 11); 35 input_properties[proxy_id].element_id = element_id;
95 LayerImpl* layer = scoped_layer.get(); 36 input_properties[proxy_id].opacity = 1.0;
96 layer->SetScrollClipLayer(root->id()); 37 input_properties[proxy_id].transform = SkMatrix44::I();
97 38 input_properties[proxy_id].scroll_left = 0;
98 root->test_properties()->AddChild(std::move(scoped_layer)); 39 input_properties[proxy_id].scroll_top = 0;
99
100 SetLayerPropertiesForTesting(layer);
101
102 int primary_id = 12;
103 root->SetElementId(
104 CreateCompositorElementId(primary_id, CompositorSubElementId::kPrimary));
105 layer->SetElementId(
106 CreateCompositorElementId(primary_id, CompositorSubElementId::kScroll));
107
108 root->SetMutableProperties(CompositorMutableProperty::kOpacity |
109 CompositorMutableProperty::kTransform);
110 layer->SetMutableProperties(CompositorMutableProperty::kScrollLeft |
111 CompositorMutableProperty::kScrollTop);
112
113 HostImpl().SetViewportSize(layer->bounds());
114 HostImpl().active_tree()->SetRootLayerForTesting(std::move(root));
115 HostImpl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
116 40
117 CompositorMutations mutations; 41 CompositorMutations mutations;
118 CompositorMutableStateProvider provider(HostImpl().active_tree(), &mutations); 42 CompositorMutableStateProvider provider(&input_properties, &mutations);
119 43
120 std::unique_ptr<CompositorMutableState> state( 44 std::unique_ptr<CompositorMutableState> state(
121 provider.GetMutableStateFor(primary_id)); 45 provider.GetMutableStateFor(proxy_id));
122 EXPECT_TRUE(state.get()); 46 EXPECT_TRUE(state.get());
123 47
124 EXPECT_EQ(1.0, RootLayer()->Opacity()); 48 EXPECT_EQ(1.0, state->Opacity());
125 EXPECT_EQ(gfx::Transform().ToString(), RootLayer()->Transform().ToString()); 49 EXPECT_EQ(SkMatrix44::I(), state->Transform());
126 EXPECT_EQ(0.0, layer->CurrentScrollOffset().x()); 50 EXPECT_EQ(0.0, state->ScrollTop());
127 EXPECT_EQ(0.0, layer->CurrentScrollOffset().y()); 51 EXPECT_EQ(0.0, state->ScrollLeft());
128 52
129 gfx::Transform zero(0, 0, 0, 0, 0, 0); 53 SkMatrix44 zero;
130 state->SetOpacity(0.5); 54 state->SetOpacity(0.5);
131 state->SetTransform(zero.matrix()); 55 state->SetTransform(zero);
132 state->SetScrollLeft(1.0); 56 state->SetScrollLeft(0.75);
133 state->SetScrollTop(1.0); 57 state->SetScrollTop(0.25);
134 58
135 EXPECT_EQ(0.5, RootLayer()->Opacity()); 59 EXPECT_EQ(0.5, state->Opacity());
136 EXPECT_EQ(zero.ToString(), RootLayer()->Transform().ToString()); 60 EXPECT_EQ(zero, state->Transform());
137 EXPECT_EQ(1.0, layer->CurrentScrollOffset().x()); 61 EXPECT_EQ(0.25, state->ScrollTop());
138 EXPECT_EQ(1.0, layer->CurrentScrollOffset().y()); 62 EXPECT_EQ(0.75, state->ScrollLeft());
139 63
140 // The corresponding mutation should reflect the changed values. 64 // The corresponding mutation should reflect the changed values.
141 EXPECT_EQ(1ul, mutations.map.size()); 65 EXPECT_EQ(1ul, mutations.map.size());
142 66
143 const CompositorMutation& mutation = *mutations.map.Find(primary_id)->value; 67 const CompositorMutation& mutation = *mutations.map.Find(element_id)->value;
144 EXPECT_TRUE(mutation.IsOpacityMutated()); 68 EXPECT_TRUE(mutation.IsOpacityMutated());
145 EXPECT_TRUE(mutation.IsTransformMutated()); 69 EXPECT_TRUE(mutation.IsTransformMutated());
146 EXPECT_TRUE(mutation.IsScrollLeftMutated()); 70 EXPECT_TRUE(mutation.IsScrollLeftMutated());
147 EXPECT_TRUE(mutation.IsScrollTopMutated()); 71 EXPECT_TRUE(mutation.IsScrollTopMutated());
148 72
149 EXPECT_EQ(0.5, mutation.Opacity()); 73 EXPECT_EQ(0.5, mutation.Opacity());
150 EXPECT_EQ(zero.ToString(), gfx::Transform(mutation.Transform()).ToString()); 74 EXPECT_EQ(zero, mutation.Transform());
151 EXPECT_EQ(1.0, mutation.ScrollLeft()); 75 EXPECT_EQ(0.75, mutation.ScrollLeft());
152 EXPECT_EQ(1.0, mutation.ScrollTop()); 76 EXPECT_EQ(0.25, mutation.ScrollTop());
153 } 77 }
154 78
155 } // namespace blink 79 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698