OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/message_loop/message_loop_proxy.h" | 5 #include "base/message_loop/message_loop_proxy.h" |
6 #include "cc/layers/solid_color_layer.h" | 6 #include "cc/layers/solid_color_layer.h" |
7 #include "cc/layers/surface_layer.h" | 7 #include "cc/layers/surface_layer.h" |
8 #include "cc/test/fake_impl_proxy.h" | 8 #include "cc/test/fake_impl_proxy.h" |
9 #include "cc/test/fake_layer_tree_host.h" | 9 #include "cc/test/fake_layer_tree_host.h" |
10 #include "cc/test/fake_layer_tree_host_client.h" | 10 #include "cc/test/fake_layer_tree_host_client.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 // Check that one surface can be referenced by multiple LayerTreeHosts, and | 58 // Check that one surface can be referenced by multiple LayerTreeHosts, and |
59 // each will create its own SurfaceSequence that's satisfied on destruction. | 59 // each will create its own SurfaceSequence that's satisfied on destruction. |
60 TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) { | 60 TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) { |
61 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. | 61 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. |
62 | 62 |
63 SurfaceId required_id; | 63 SurfaceId required_id; |
64 std::set<SurfaceSequence> required_seq; | 64 std::set<SurfaceSequence> required_seq; |
65 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( | 65 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( |
66 base::Bind(&SatisfyCallback, &blank_change), | 66 base::Bind(&SatisfyCallback, &blank_change), |
67 base::Bind(&RequireCallback, &required_id, &required_seq))); | 67 base::Bind(&RequireCallback, &required_id, &required_seq))); |
68 layer->SetSurfaceId(SurfaceId(1), gfx::Size(1, 1)); | 68 layer->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
69 layer_tree_host_->set_surface_id_namespace(1); | 69 layer_tree_host_->set_surface_id_namespace(1); |
70 layer_tree_host_->SetRootLayer(layer); | 70 layer_tree_host_->SetRootLayer(layer); |
71 | 71 |
72 scoped_ptr<FakeLayerTreeHost> layer_tree_host2 = | 72 scoped_ptr<FakeLayerTreeHost> layer_tree_host2 = |
73 FakeLayerTreeHost::Create(&fake_client_); | 73 FakeLayerTreeHost::Create(&fake_client_); |
74 scoped_refptr<SurfaceLayer> layer2(SurfaceLayer::Create( | 74 scoped_refptr<SurfaceLayer> layer2(SurfaceLayer::Create( |
75 base::Bind(&SatisfyCallback, &blank_change), | 75 base::Bind(&SatisfyCallback, &blank_change), |
76 base::Bind(&RequireCallback, &required_id, &required_seq))); | 76 base::Bind(&RequireCallback, &required_id, &required_seq))); |
77 layer2->SetSurfaceId(SurfaceId(1), gfx::Size(1, 1)); | 77 layer2->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
78 layer_tree_host2->set_surface_id_namespace(2); | 78 layer_tree_host2->set_surface_id_namespace(2); |
79 layer_tree_host2->SetRootLayer(layer2); | 79 layer_tree_host2->SetRootLayer(layer2); |
80 | 80 |
81 // Layers haven't been removed, so no sequence should be satisfied. | 81 // Layers haven't been removed, so no sequence should be satisfied. |
82 EXPECT_TRUE(blank_change.is_null()); | 82 EXPECT_TRUE(blank_change.is_null()); |
83 | 83 |
84 SurfaceSequence expected1(1u, 1u); | 84 SurfaceSequence expected1(1u, 1u); |
85 SurfaceSequence expected2(2u, 1u); | 85 SurfaceSequence expected2(2u, 1u); |
86 | 86 |
87 layer_tree_host2->SetRootLayer(nullptr); | 87 layer_tree_host2->SetRootLayer(nullptr); |
(...skipping 15 matching lines...) Expand all Loading... |
103 | 103 |
104 // Layer was removed so sequence from first LayerTreeHost should be | 104 // Layer was removed so sequence from first LayerTreeHost should be |
105 // satisfied. | 105 // satisfied. |
106 EXPECT_TRUE(blank_change == expected1); | 106 EXPECT_TRUE(blank_change == expected1); |
107 | 107 |
108 // No more SurfaceSequences should have been generated that need to have be | 108 // No more SurfaceSequences should have been generated that need to have be |
109 // satisfied. | 109 // satisfied. |
110 EXPECT_EQ(2u, required_seq.size()); | 110 EXPECT_EQ(2u, required_seq.size()); |
111 } | 111 } |
112 | 112 |
| 113 static void CalcDrawProps(FakeLayerTreeHost* host, float device_scale_factor) { |
| 114 RenderSurfaceLayerList render_surface_layer_list; |
| 115 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
| 116 host->root_layer(), gfx::Size(500, 500), &render_surface_layer_list); |
| 117 inputs.device_scale_factor = device_scale_factor; |
| 118 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
| 119 } |
| 120 |
113 // Check that setting content scale on the surface works. | 121 // Check that setting content scale on the surface works. |
114 TEST_F(SurfaceLayerTest, ScaleSurface) { | 122 TEST_F(SurfaceLayerTest, ScaleSurface) { |
115 SurfaceSequence blank_change; | 123 SurfaceSequence blank_change; |
116 SurfaceId required_id; | 124 SurfaceId required_id; |
117 std::set<SurfaceSequence> required_seq; | 125 std::set<SurfaceSequence> required_seq; |
118 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( | 126 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( |
119 base::Bind(&SatisfyCallback, &blank_change), | 127 base::Bind(&SatisfyCallback, &blank_change), |
120 base::Bind(&RequireCallback, &required_id, &required_seq))); | 128 base::Bind(&RequireCallback, &required_id, &required_seq))); |
121 gfx::Size surface_size(10, 15); | 129 gfx::Size surface_size(10, 15); |
122 layer->SetSurfaceId(SurfaceId(1), surface_size); | 130 layer->SetSurfaceId(SurfaceId(1), 2.f, surface_size); |
123 layer->SetBounds(gfx::Size(25, 45)); | 131 layer->SetBounds(gfx::Size(25, 45)); |
| 132 layer_tree_host_->SetRootLayer(layer); |
124 | 133 |
125 float scale_x; | 134 CalcDrawProps(layer_tree_host_.get(), 5.f); |
126 float scale_y; | 135 EXPECT_EQ(2.f, layer->contents_scale_x()); |
127 gfx::Size bounds; | 136 EXPECT_EQ(2.f, layer->contents_scale_y()); |
128 layer->CalculateContentsScale(2.f, &scale_x, &scale_y, &bounds); | 137 EXPECT_EQ(surface_size.ToString(), layer->content_bounds().ToString()); |
129 EXPECT_EQ(10.f / 25.f, scale_x); | |
130 EXPECT_EQ(15.f / 45.f, scale_y); | |
131 EXPECT_EQ(surface_size.ToString(), bounds.ToString()); | |
132 | 138 |
133 layer->SetBounds(gfx::Size(0, 0)); | 139 layer_tree_host_->SetRootLayer(nullptr); |
134 layer->CalculateContentsScale(2.f, &scale_x, &scale_y, &bounds); | 140 layer_tree_host_.reset(); |
135 EXPECT_EQ(1.f, scale_x); | |
136 EXPECT_EQ(1.f, scale_y); | |
137 EXPECT_EQ(surface_size.ToString(), bounds.ToString()); | |
138 } | 141 } |
139 | 142 |
140 // Check that SurfaceSequence is sent through swap promise. | 143 // Check that SurfaceSequence is sent through swap promise. |
141 class SurfaceLayerSwapPromise : public LayerTreeTest { | 144 class SurfaceLayerSwapPromise : public LayerTreeTest { |
142 public: | 145 public: |
143 SurfaceLayerSwapPromise() | 146 SurfaceLayerSwapPromise() |
144 : commit_count_(0), sequence_was_satisfied_(false) {} | 147 : commit_count_(0), sequence_was_satisfied_(false) {} |
145 | 148 |
146 void BeginTest() override { | 149 void BeginTest() override { |
147 layer_tree_host()->set_surface_id_namespace(1); | 150 layer_tree_host()->set_surface_id_namespace(1); |
148 layer_ = SurfaceLayer::Create( | 151 layer_ = SurfaceLayer::Create( |
149 base::Bind(&SatisfyCallback, &satisfied_sequence_), | 152 base::Bind(&SatisfyCallback, &satisfied_sequence_), |
150 base::Bind(&RequireCallback, &required_id_, &required_set_)); | 153 base::Bind(&RequireCallback, &required_id_, &required_set_)); |
151 layer_->SetSurfaceId(SurfaceId(1), gfx::Size(1, 1)); | 154 layer_->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
152 | 155 |
153 // Layer hasn't been added to tree so no SurfaceSequence generated yet. | 156 // Layer hasn't been added to tree so no SurfaceSequence generated yet. |
154 EXPECT_EQ(0u, required_set_.size()); | 157 EXPECT_EQ(0u, required_set_.size()); |
155 | 158 |
156 layer_tree_host()->SetRootLayer(layer_); | 159 layer_tree_host()->SetRootLayer(layer_); |
157 | 160 |
158 // Should have SurfaceSequence from first tree. | 161 // Should have SurfaceSequence from first tree. |
159 SurfaceSequence expected(1u, 1u); | 162 SurfaceSequence expected(1u, 1u); |
160 EXPECT_TRUE(required_id_ == SurfaceId(1)); | 163 EXPECT_TRUE(required_id_ == SurfaceId(1)); |
161 EXPECT_EQ(1u, required_set_.size()); | 164 EXPECT_EQ(1u, required_set_.size()); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 SurfaceId required_id_; | 227 SurfaceId required_id_; |
225 std::set<SurfaceSequence> required_set_; | 228 std::set<SurfaceSequence> required_set_; |
226 }; | 229 }; |
227 | 230 |
228 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is | 231 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is |
229 // fixed. | 232 // fixed. |
230 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); | 233 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); |
231 | 234 |
232 } // namespace | 235 } // namespace |
233 } // namespace cc | 236 } // namespace cc |
OLD | NEW |