OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 namespace { | 68 namespace { |
69 | 69 |
70 class LayerTreeHostTest : public LayerTreeTest {}; | 70 class LayerTreeHostTest : public LayerTreeTest {}; |
71 | 71 |
72 // Two setNeedsCommits in a row should lead to at least 1 commit and at least 1 | 72 // Two setNeedsCommits in a row should lead to at least 1 commit and at least 1 |
73 // draw with frame 0. | 73 // draw with frame 0. |
74 class LayerTreeHostTestSetNeedsCommit1 : public LayerTreeHostTest { | 74 class LayerTreeHostTestSetNeedsCommit1 : public LayerTreeHostTest { |
75 public: | 75 public: |
76 LayerTreeHostTestSetNeedsCommit1() : num_commits_(0), num_draws_(0) {} | 76 LayerTreeHostTestSetNeedsCommit1() : num_commits_(0), num_draws_(0) {} |
77 | 77 |
78 virtual void BeginTest() override { | 78 void BeginTest() override { |
79 PostSetNeedsCommitToMainThread(); | 79 PostSetNeedsCommitToMainThread(); |
80 PostSetNeedsCommitToMainThread(); | 80 PostSetNeedsCommitToMainThread(); |
81 } | 81 } |
82 | 82 |
83 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 83 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
84 num_draws_++; | 84 num_draws_++; |
85 if (!impl->active_tree()->source_frame_number()) | 85 if (!impl->active_tree()->source_frame_number()) |
86 EndTest(); | 86 EndTest(); |
87 } | 87 } |
88 | 88 |
89 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 89 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
90 num_commits_++; | 90 num_commits_++; |
91 } | 91 } |
92 | 92 |
93 virtual void AfterTest() override { | 93 void AfterTest() override { |
94 EXPECT_LE(1, num_commits_); | 94 EXPECT_LE(1, num_commits_); |
95 EXPECT_LE(1, num_draws_); | 95 EXPECT_LE(1, num_draws_); |
96 } | 96 } |
97 | 97 |
98 private: | 98 private: |
99 int num_commits_; | 99 int num_commits_; |
100 int num_draws_; | 100 int num_draws_; |
101 }; | 101 }; |
102 | 102 |
103 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsCommit1); | 103 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsCommit1); |
104 | 104 |
105 // A SetNeedsCommit should lead to 1 commit. Issuing a second commit after that | 105 // A SetNeedsCommit should lead to 1 commit. Issuing a second commit after that |
106 // first committed frame draws should lead to another commit. | 106 // first committed frame draws should lead to another commit. |
107 class LayerTreeHostTestSetNeedsCommit2 : public LayerTreeHostTest { | 107 class LayerTreeHostTestSetNeedsCommit2 : public LayerTreeHostTest { |
108 public: | 108 public: |
109 LayerTreeHostTestSetNeedsCommit2() : num_commits_(0), num_draws_(0) {} | 109 LayerTreeHostTestSetNeedsCommit2() : num_commits_(0), num_draws_(0) {} |
110 | 110 |
111 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 111 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
112 | 112 |
113 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 113 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { ++num_draws_; } |
114 ++num_draws_; | |
115 } | |
116 | 114 |
117 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 115 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
118 ++num_commits_; | 116 ++num_commits_; |
119 switch (num_commits_) { | 117 switch (num_commits_) { |
120 case 1: | 118 case 1: |
121 PostSetNeedsCommitToMainThread(); | 119 PostSetNeedsCommitToMainThread(); |
122 break; | 120 break; |
123 case 2: | 121 case 2: |
124 EndTest(); | 122 EndTest(); |
125 break; | 123 break; |
126 default: | 124 default: |
127 NOTREACHED(); | 125 NOTREACHED(); |
128 } | 126 } |
129 } | 127 } |
130 | 128 |
131 virtual void AfterTest() override { | 129 void AfterTest() override { |
132 EXPECT_EQ(2, num_commits_); | 130 EXPECT_EQ(2, num_commits_); |
133 EXPECT_LE(1, num_draws_); | 131 EXPECT_LE(1, num_draws_); |
134 } | 132 } |
135 | 133 |
136 private: | 134 private: |
137 int num_commits_; | 135 int num_commits_; |
138 int num_draws_; | 136 int num_draws_; |
139 }; | 137 }; |
140 | 138 |
141 MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsCommit2); | 139 MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsCommit2); |
142 | 140 |
143 // Verify that we pass property values in PushPropertiesTo. | 141 // Verify that we pass property values in PushPropertiesTo. |
144 class LayerTreeHostTestPushPropertiesTo : public LayerTreeHostTest { | 142 class LayerTreeHostTestPushPropertiesTo : public LayerTreeHostTest { |
145 protected: | 143 protected: |
146 virtual void SetupTree() override { | 144 void SetupTree() override { |
147 scoped_refptr<Layer> root = Layer::Create(); | 145 scoped_refptr<Layer> root = Layer::Create(); |
148 root->SetBounds(gfx::Size(10, 10)); | 146 root->SetBounds(gfx::Size(10, 10)); |
149 layer_tree_host()->SetRootLayer(root); | 147 layer_tree_host()->SetRootLayer(root); |
150 LayerTreeHostTest::SetupTree(); | 148 LayerTreeHostTest::SetupTree(); |
151 } | 149 } |
152 | 150 |
153 enum Properties { | 151 enum Properties { |
154 STARTUP, | 152 STARTUP, |
155 BOUNDS, | 153 BOUNDS, |
156 HIDE_LAYER_AND_SUBTREE, | 154 HIDE_LAYER_AND_SUBTREE, |
157 DRAWS_CONTENT, | 155 DRAWS_CONTENT, |
158 DONE, | 156 DONE, |
159 }; | 157 }; |
160 | 158 |
161 virtual void BeginTest() override { | 159 void BeginTest() override { |
162 index_ = STARTUP; | 160 index_ = STARTUP; |
163 PostSetNeedsCommitToMainThread(); | 161 PostSetNeedsCommitToMainThread(); |
164 } | 162 } |
165 | 163 |
166 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 164 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
167 VerifyAfterValues(impl->active_tree()->root_layer()); | 165 VerifyAfterValues(impl->active_tree()->root_layer()); |
168 } | 166 } |
169 | 167 |
170 virtual void DidCommitAndDrawFrame() override { | 168 void DidCommitAndDrawFrame() override { |
171 SetBeforeValues(layer_tree_host()->root_layer()); | 169 SetBeforeValues(layer_tree_host()->root_layer()); |
172 VerifyBeforeValues(layer_tree_host()->root_layer()); | 170 VerifyBeforeValues(layer_tree_host()->root_layer()); |
173 | 171 |
174 ++index_; | 172 ++index_; |
175 if (index_ == DONE) { | 173 if (index_ == DONE) { |
176 EndTest(); | 174 EndTest(); |
177 return; | 175 return; |
178 } | 176 } |
179 | 177 |
180 SetAfterValues(layer_tree_host()->root_layer()); | 178 SetAfterValues(layer_tree_host()->root_layer()); |
181 } | 179 } |
182 | 180 |
183 virtual void AfterTest() override {} | 181 void AfterTest() override {} |
184 | 182 |
185 void VerifyBeforeValues(Layer* layer) { | 183 void VerifyBeforeValues(Layer* layer) { |
186 EXPECT_EQ(gfx::Size(10, 10).ToString(), layer->bounds().ToString()); | 184 EXPECT_EQ(gfx::Size(10, 10).ToString(), layer->bounds().ToString()); |
187 EXPECT_FALSE(layer->hide_layer_and_subtree()); | 185 EXPECT_FALSE(layer->hide_layer_and_subtree()); |
188 EXPECT_FALSE(layer->DrawsContent()); | 186 EXPECT_FALSE(layer->DrawsContent()); |
189 } | 187 } |
190 | 188 |
191 void SetBeforeValues(Layer* layer) { | 189 void SetBeforeValues(Layer* layer) { |
192 layer->SetBounds(gfx::Size(10, 10)); | 190 layer->SetBounds(gfx::Size(10, 10)); |
193 layer->SetHideLayerAndSubtree(false); | 191 layer->SetHideLayerAndSubtree(false); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 }; | 230 }; |
233 | 231 |
234 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPushPropertiesTo); | 232 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPushPropertiesTo); |
235 | 233 |
236 // 1 setNeedsRedraw after the first commit has completed should lead to 1 | 234 // 1 setNeedsRedraw after the first commit has completed should lead to 1 |
237 // additional draw. | 235 // additional draw. |
238 class LayerTreeHostTestSetNeedsRedraw : public LayerTreeHostTest { | 236 class LayerTreeHostTestSetNeedsRedraw : public LayerTreeHostTest { |
239 public: | 237 public: |
240 LayerTreeHostTestSetNeedsRedraw() : num_commits_(0), num_draws_(0) {} | 238 LayerTreeHostTestSetNeedsRedraw() : num_commits_(0), num_draws_(0) {} |
241 | 239 |
242 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 240 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
243 | 241 |
244 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 242 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
245 EXPECT_EQ(0, impl->active_tree()->source_frame_number()); | 243 EXPECT_EQ(0, impl->active_tree()->source_frame_number()); |
246 if (!num_draws_) { | 244 if (!num_draws_) { |
247 // Redraw again to verify that the second redraw doesn't commit. | 245 // Redraw again to verify that the second redraw doesn't commit. |
248 PostSetNeedsRedrawToMainThread(); | 246 PostSetNeedsRedrawToMainThread(); |
249 } else { | 247 } else { |
250 EndTest(); | 248 EndTest(); |
251 } | 249 } |
252 num_draws_++; | 250 num_draws_++; |
253 } | 251 } |
254 | 252 |
255 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 253 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
256 EXPECT_EQ(0, num_draws_); | 254 EXPECT_EQ(0, num_draws_); |
257 num_commits_++; | 255 num_commits_++; |
258 } | 256 } |
259 | 257 |
260 virtual void AfterTest() override { | 258 void AfterTest() override { |
261 EXPECT_GE(2, num_draws_); | 259 EXPECT_GE(2, num_draws_); |
262 EXPECT_EQ(1, num_commits_); | 260 EXPECT_EQ(1, num_commits_); |
263 } | 261 } |
264 | 262 |
265 private: | 263 private: |
266 int num_commits_; | 264 int num_commits_; |
267 int num_draws_; | 265 int num_draws_; |
268 }; | 266 }; |
269 | 267 |
270 MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedraw); | 268 MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedraw); |
271 | 269 |
272 // After setNeedsRedrawRect(invalid_rect) the final damage_rect | 270 // After setNeedsRedrawRect(invalid_rect) the final damage_rect |
273 // must contain invalid_rect. | 271 // must contain invalid_rect. |
274 class LayerTreeHostTestSetNeedsRedrawRect : public LayerTreeHostTest { | 272 class LayerTreeHostTestSetNeedsRedrawRect : public LayerTreeHostTest { |
275 public: | 273 public: |
276 LayerTreeHostTestSetNeedsRedrawRect() | 274 LayerTreeHostTestSetNeedsRedrawRect() |
277 : num_draws_(0), | 275 : num_draws_(0), |
278 bounds_(50, 50), | 276 bounds_(50, 50), |
279 invalid_rect_(10, 10, 20, 20), | 277 invalid_rect_(10, 10, 20, 20), |
280 root_layer_(ContentLayer::Create(&client_)) {} | 278 root_layer_(ContentLayer::Create(&client_)) {} |
281 | 279 |
282 virtual void BeginTest() override { | 280 void BeginTest() override { |
283 root_layer_->SetIsDrawable(true); | 281 root_layer_->SetIsDrawable(true); |
284 root_layer_->SetBounds(bounds_); | 282 root_layer_->SetBounds(bounds_); |
285 layer_tree_host()->SetRootLayer(root_layer_); | 283 layer_tree_host()->SetRootLayer(root_layer_); |
286 layer_tree_host()->SetViewportSize(bounds_); | 284 layer_tree_host()->SetViewportSize(bounds_); |
287 PostSetNeedsCommitToMainThread(); | 285 PostSetNeedsCommitToMainThread(); |
288 } | 286 } |
289 | 287 |
290 virtual DrawResult PrepareToDrawOnThread( | 288 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
291 LayerTreeHostImpl* host_impl, | 289 LayerTreeHostImpl::FrameData* frame_data, |
292 LayerTreeHostImpl::FrameData* frame_data, | 290 DrawResult draw_result) override { |
293 DrawResult draw_result) override { | |
294 EXPECT_EQ(DRAW_SUCCESS, draw_result); | 291 EXPECT_EQ(DRAW_SUCCESS, draw_result); |
295 | 292 |
296 gfx::RectF root_damage_rect; | 293 gfx::RectF root_damage_rect; |
297 if (!frame_data->render_passes.empty()) | 294 if (!frame_data->render_passes.empty()) |
298 root_damage_rect = frame_data->render_passes.back()->damage_rect; | 295 root_damage_rect = frame_data->render_passes.back()->damage_rect; |
299 | 296 |
300 if (!num_draws_) { | 297 if (!num_draws_) { |
301 // If this is the first frame, expect full frame damage. | 298 // If this is the first frame, expect full frame damage. |
302 EXPECT_RECT_EQ(root_damage_rect, gfx::Rect(bounds_)); | 299 EXPECT_RECT_EQ(root_damage_rect, gfx::Rect(bounds_)); |
303 } else { | 300 } else { |
304 // Check that invalid_rect_ is indeed repainted. | 301 // Check that invalid_rect_ is indeed repainted. |
305 EXPECT_TRUE(root_damage_rect.Contains(invalid_rect_)); | 302 EXPECT_TRUE(root_damage_rect.Contains(invalid_rect_)); |
306 } | 303 } |
307 | 304 |
308 return draw_result; | 305 return draw_result; |
309 } | 306 } |
310 | 307 |
311 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 308 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
312 if (!num_draws_) { | 309 if (!num_draws_) { |
313 PostSetNeedsRedrawRectToMainThread(invalid_rect_); | 310 PostSetNeedsRedrawRectToMainThread(invalid_rect_); |
314 } else { | 311 } else { |
315 EndTest(); | 312 EndTest(); |
316 } | 313 } |
317 num_draws_++; | 314 num_draws_++; |
318 } | 315 } |
319 | 316 |
320 virtual void AfterTest() override { EXPECT_EQ(2, num_draws_); } | 317 void AfterTest() override { EXPECT_EQ(2, num_draws_); } |
321 | 318 |
322 private: | 319 private: |
323 int num_draws_; | 320 int num_draws_; |
324 const gfx::Size bounds_; | 321 const gfx::Size bounds_; |
325 const gfx::Rect invalid_rect_; | 322 const gfx::Rect invalid_rect_; |
326 FakeContentLayerClient client_; | 323 FakeContentLayerClient client_; |
327 scoped_refptr<ContentLayer> root_layer_; | 324 scoped_refptr<ContentLayer> root_layer_; |
328 }; | 325 }; |
329 | 326 |
330 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedrawRect); | 327 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedrawRect); |
331 | 328 |
332 class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest { | 329 class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest { |
333 public: | 330 public: |
334 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 331 void InitializeSettings(LayerTreeSettings* settings) override { |
335 settings->layer_transforms_should_scale_layer_contents = true; | 332 settings->layer_transforms_should_scale_layer_contents = true; |
336 } | 333 } |
337 | 334 |
338 virtual void SetupTree() override { | 335 void SetupTree() override { |
339 root_layer_ = Layer::Create(); | 336 root_layer_ = Layer::Create(); |
340 root_layer_->SetBounds(gfx::Size(10, 20)); | 337 root_layer_->SetBounds(gfx::Size(10, 20)); |
341 | 338 |
342 scaled_layer_ = FakeContentLayer::Create(&client_); | 339 scaled_layer_ = FakeContentLayer::Create(&client_); |
343 scaled_layer_->SetBounds(gfx::Size(1, 1)); | 340 scaled_layer_->SetBounds(gfx::Size(1, 1)); |
344 root_layer_->AddChild(scaled_layer_); | 341 root_layer_->AddChild(scaled_layer_); |
345 | 342 |
346 layer_tree_host()->SetRootLayer(root_layer_); | 343 layer_tree_host()->SetRootLayer(root_layer_); |
347 LayerTreeHostTest::SetupTree(); | 344 LayerTreeHostTest::SetupTree(); |
348 } | 345 } |
349 | 346 |
350 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 347 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
351 | 348 |
352 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 349 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
353 if (host_impl->active_tree()->source_frame_number() == 1) | 350 if (host_impl->active_tree()->source_frame_number() == 1) |
354 EndTest(); | 351 EndTest(); |
355 } | 352 } |
356 | 353 |
357 virtual void DidCommit() override { | 354 void DidCommit() override { |
358 switch (layer_tree_host()->source_frame_number()) { | 355 switch (layer_tree_host()->source_frame_number()) { |
359 case 1: | 356 case 1: |
360 // Changing the device scale factor causes a commit. It also changes | 357 // Changing the device scale factor causes a commit. It also changes |
361 // the content bounds of |scaled_layer_|, which should not generate | 358 // the content bounds of |scaled_layer_|, which should not generate |
362 // a second commit as a result. | 359 // a second commit as a result. |
363 layer_tree_host()->SetDeviceScaleFactor(4.f); | 360 layer_tree_host()->SetDeviceScaleFactor(4.f); |
364 break; | 361 break; |
365 default: | 362 default: |
366 // No extra commits. | 363 // No extra commits. |
367 EXPECT_EQ(2, layer_tree_host()->source_frame_number()); | 364 EXPECT_EQ(2, layer_tree_host()->source_frame_number()); |
368 } | 365 } |
369 } | 366 } |
370 | 367 |
371 virtual void AfterTest() override { | 368 void AfterTest() override { |
372 EXPECT_EQ(gfx::Size(4, 4).ToString(), | 369 EXPECT_EQ(gfx::Size(4, 4).ToString(), |
373 scaled_layer_->content_bounds().ToString()); | 370 scaled_layer_->content_bounds().ToString()); |
374 } | 371 } |
375 | 372 |
376 private: | 373 private: |
377 FakeContentLayerClient client_; | 374 FakeContentLayerClient client_; |
378 scoped_refptr<Layer> root_layer_; | 375 scoped_refptr<Layer> root_layer_; |
379 scoped_refptr<FakeContentLayer> scaled_layer_; | 376 scoped_refptr<FakeContentLayer> scaled_layer_; |
380 }; | 377 }; |
381 | 378 |
382 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoExtraCommitFromInvalidate); | 379 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoExtraCommitFromInvalidate); |
383 | 380 |
384 class LayerTreeHostTestNoExtraCommitFromScrollbarInvalidate | 381 class LayerTreeHostTestNoExtraCommitFromScrollbarInvalidate |
385 : public LayerTreeHostTest { | 382 : public LayerTreeHostTest { |
386 public: | 383 public: |
387 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 384 void InitializeSettings(LayerTreeSettings* settings) override { |
388 settings->layer_transforms_should_scale_layer_contents = true; | 385 settings->layer_transforms_should_scale_layer_contents = true; |
389 } | 386 } |
390 | 387 |
391 virtual void SetupTree() override { | 388 void SetupTree() override { |
392 root_layer_ = Layer::Create(); | 389 root_layer_ = Layer::Create(); |
393 root_layer_->SetBounds(gfx::Size(10, 20)); | 390 root_layer_->SetBounds(gfx::Size(10, 20)); |
394 | 391 |
395 bool paint_scrollbar = true; | 392 bool paint_scrollbar = true; |
396 bool has_thumb = false; | 393 bool has_thumb = false; |
397 scrollbar_ = FakePaintedScrollbarLayer::Create( | 394 scrollbar_ = FakePaintedScrollbarLayer::Create( |
398 paint_scrollbar, has_thumb, root_layer_->id()); | 395 paint_scrollbar, has_thumb, root_layer_->id()); |
399 scrollbar_->SetPosition(gfx::Point(0, 10)); | 396 scrollbar_->SetPosition(gfx::Point(0, 10)); |
400 scrollbar_->SetBounds(gfx::Size(10, 10)); | 397 scrollbar_->SetBounds(gfx::Size(10, 10)); |
401 | 398 |
402 root_layer_->AddChild(scrollbar_); | 399 root_layer_->AddChild(scrollbar_); |
403 | 400 |
404 layer_tree_host()->SetRootLayer(root_layer_); | 401 layer_tree_host()->SetRootLayer(root_layer_); |
405 LayerTreeHostTest::SetupTree(); | 402 LayerTreeHostTest::SetupTree(); |
406 } | 403 } |
407 | 404 |
408 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 405 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
409 | 406 |
410 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 407 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
411 if (host_impl->active_tree()->source_frame_number() == 1) | 408 if (host_impl->active_tree()->source_frame_number() == 1) |
412 EndTest(); | 409 EndTest(); |
413 } | 410 } |
414 | 411 |
415 virtual void DidCommit() override { | 412 void DidCommit() override { |
416 switch (layer_tree_host()->source_frame_number()) { | 413 switch (layer_tree_host()->source_frame_number()) { |
417 case 1: | 414 case 1: |
418 // Changing the device scale factor causes a commit. It also changes | 415 // Changing the device scale factor causes a commit. It also changes |
419 // the content bounds of |scrollbar_|, which should not generate | 416 // the content bounds of |scrollbar_|, which should not generate |
420 // a second commit as a result. | 417 // a second commit as a result. |
421 layer_tree_host()->SetDeviceScaleFactor(4.f); | 418 layer_tree_host()->SetDeviceScaleFactor(4.f); |
422 break; | 419 break; |
423 default: | 420 default: |
424 // No extra commits. | 421 // No extra commits. |
425 EXPECT_EQ(2, layer_tree_host()->source_frame_number()); | 422 EXPECT_EQ(2, layer_tree_host()->source_frame_number()); |
426 } | 423 } |
427 } | 424 } |
428 | 425 |
429 virtual void AfterTest() override { | 426 void AfterTest() override { |
430 EXPECT_EQ(gfx::Size(40, 40).ToString(), | 427 EXPECT_EQ(gfx::Size(40, 40).ToString(), |
431 scrollbar_->content_bounds().ToString()); | 428 scrollbar_->content_bounds().ToString()); |
432 } | 429 } |
433 | 430 |
434 private: | 431 private: |
435 FakeContentLayerClient client_; | 432 FakeContentLayerClient client_; |
436 scoped_refptr<Layer> root_layer_; | 433 scoped_refptr<Layer> root_layer_; |
437 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_; | 434 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_; |
438 }; | 435 }; |
439 | 436 |
440 SINGLE_AND_MULTI_THREAD_TEST_F( | 437 SINGLE_AND_MULTI_THREAD_TEST_F( |
441 LayerTreeHostTestNoExtraCommitFromScrollbarInvalidate); | 438 LayerTreeHostTestNoExtraCommitFromScrollbarInvalidate); |
442 | 439 |
443 class LayerTreeHostTestSetNextCommitForcesRedraw : public LayerTreeHostTest { | 440 class LayerTreeHostTestSetNextCommitForcesRedraw : public LayerTreeHostTest { |
444 public: | 441 public: |
445 LayerTreeHostTestSetNextCommitForcesRedraw() | 442 LayerTreeHostTestSetNextCommitForcesRedraw() |
446 : num_draws_(0), | 443 : num_draws_(0), |
447 bounds_(50, 50), | 444 bounds_(50, 50), |
448 invalid_rect_(10, 10, 20, 20), | 445 invalid_rect_(10, 10, 20, 20), |
449 root_layer_(ContentLayer::Create(&client_)) {} | 446 root_layer_(ContentLayer::Create(&client_)) {} |
450 | 447 |
451 virtual void BeginTest() override { | 448 void BeginTest() override { |
452 root_layer_->SetIsDrawable(true); | 449 root_layer_->SetIsDrawable(true); |
453 root_layer_->SetBounds(bounds_); | 450 root_layer_->SetBounds(bounds_); |
454 layer_tree_host()->SetRootLayer(root_layer_); | 451 layer_tree_host()->SetRootLayer(root_layer_); |
455 layer_tree_host()->SetViewportSize(bounds_); | 452 layer_tree_host()->SetViewportSize(bounds_); |
456 PostSetNeedsCommitToMainThread(); | 453 PostSetNeedsCommitToMainThread(); |
457 } | 454 } |
458 | 455 |
459 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 456 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
460 if (num_draws_ == 3 && host_impl->settings().impl_side_painting) | 457 if (num_draws_ == 3 && host_impl->settings().impl_side_painting) |
461 host_impl->SetNeedsRedrawRect(invalid_rect_); | 458 host_impl->SetNeedsRedrawRect(invalid_rect_); |
462 } | 459 } |
463 | 460 |
464 virtual DrawResult PrepareToDrawOnThread( | 461 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
465 LayerTreeHostImpl* host_impl, | 462 LayerTreeHostImpl::FrameData* frame_data, |
466 LayerTreeHostImpl::FrameData* frame_data, | 463 DrawResult draw_result) override { |
467 DrawResult draw_result) override { | |
468 EXPECT_EQ(DRAW_SUCCESS, draw_result); | 464 EXPECT_EQ(DRAW_SUCCESS, draw_result); |
469 | 465 |
470 gfx::RectF root_damage_rect; | 466 gfx::RectF root_damage_rect; |
471 if (!frame_data->render_passes.empty()) | 467 if (!frame_data->render_passes.empty()) |
472 root_damage_rect = frame_data->render_passes.back()->damage_rect; | 468 root_damage_rect = frame_data->render_passes.back()->damage_rect; |
473 | 469 |
474 switch (num_draws_) { | 470 switch (num_draws_) { |
475 case 0: | 471 case 0: |
476 EXPECT_RECT_EQ(gfx::Rect(bounds_), root_damage_rect); | 472 EXPECT_RECT_EQ(gfx::Rect(bounds_), root_damage_rect); |
477 break; | 473 break; |
478 case 1: | 474 case 1: |
479 case 2: | 475 case 2: |
480 EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0), root_damage_rect); | 476 EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0), root_damage_rect); |
481 break; | 477 break; |
482 case 3: | 478 case 3: |
483 EXPECT_RECT_EQ(invalid_rect_, root_damage_rect); | 479 EXPECT_RECT_EQ(invalid_rect_, root_damage_rect); |
484 break; | 480 break; |
485 case 4: | 481 case 4: |
486 EXPECT_RECT_EQ(gfx::Rect(bounds_), root_damage_rect); | 482 EXPECT_RECT_EQ(gfx::Rect(bounds_), root_damage_rect); |
487 break; | 483 break; |
488 default: | 484 default: |
489 NOTREACHED(); | 485 NOTREACHED(); |
490 } | 486 } |
491 | 487 |
492 return draw_result; | 488 return draw_result; |
493 } | 489 } |
494 | 490 |
495 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 491 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
496 switch (num_draws_) { | 492 switch (num_draws_) { |
497 case 0: | 493 case 0: |
498 case 1: | 494 case 1: |
499 // Cycle through a couple of empty commits to ensure we're observing the | 495 // Cycle through a couple of empty commits to ensure we're observing the |
500 // right behavior | 496 // right behavior |
501 PostSetNeedsCommitToMainThread(); | 497 PostSetNeedsCommitToMainThread(); |
502 break; | 498 break; |
503 case 2: | 499 case 2: |
504 // Should force full frame damage on the next commit | 500 // Should force full frame damage on the next commit |
505 PostSetNextCommitForcesRedrawToMainThread(); | 501 PostSetNextCommitForcesRedrawToMainThread(); |
506 PostSetNeedsCommitToMainThread(); | 502 PostSetNeedsCommitToMainThread(); |
507 if (host_impl->settings().impl_side_painting) | 503 if (host_impl->settings().impl_side_painting) |
508 host_impl->BlockNotifyReadyToActivateForTesting(true); | 504 host_impl->BlockNotifyReadyToActivateForTesting(true); |
509 else | 505 else |
510 num_draws_++; | 506 num_draws_++; |
511 break; | 507 break; |
512 case 3: | 508 case 3: |
513 host_impl->BlockNotifyReadyToActivateForTesting(false); | 509 host_impl->BlockNotifyReadyToActivateForTesting(false); |
514 break; | 510 break; |
515 default: | 511 default: |
516 EndTest(); | 512 EndTest(); |
517 break; | 513 break; |
518 } | 514 } |
519 num_draws_++; | 515 num_draws_++; |
520 } | 516 } |
521 | 517 |
522 virtual void AfterTest() override { EXPECT_EQ(5, num_draws_); } | 518 void AfterTest() override { EXPECT_EQ(5, num_draws_); } |
523 | 519 |
524 private: | 520 private: |
525 int num_draws_; | 521 int num_draws_; |
526 const gfx::Size bounds_; | 522 const gfx::Size bounds_; |
527 const gfx::Rect invalid_rect_; | 523 const gfx::Rect invalid_rect_; |
528 FakeContentLayerClient client_; | 524 FakeContentLayerClient client_; |
529 scoped_refptr<ContentLayer> root_layer_; | 525 scoped_refptr<ContentLayer> root_layer_; |
530 }; | 526 }; |
531 | 527 |
532 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( | 528 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( |
533 LayerTreeHostTestSetNextCommitForcesRedraw); | 529 LayerTreeHostTestSetNextCommitForcesRedraw); |
534 | 530 |
535 // Tests that if a layer is not drawn because of some reason in the parent then | 531 // Tests that if a layer is not drawn because of some reason in the parent then |
536 // its damage is preserved until the next time it is drawn. | 532 // its damage is preserved until the next time it is drawn. |
537 class LayerTreeHostTestUndrawnLayersDamageLater : public LayerTreeHostTest { | 533 class LayerTreeHostTestUndrawnLayersDamageLater : public LayerTreeHostTest { |
538 public: | 534 public: |
539 LayerTreeHostTestUndrawnLayersDamageLater() | 535 LayerTreeHostTestUndrawnLayersDamageLater() |
540 : root_layer_(ContentLayer::Create(&client_)) {} | 536 : root_layer_(ContentLayer::Create(&client_)) {} |
541 | 537 |
542 virtual void SetupTree() override { | 538 void SetupTree() override { |
543 root_layer_->SetIsDrawable(true); | 539 root_layer_->SetIsDrawable(true); |
544 root_layer_->SetBounds(gfx::Size(50, 50)); | 540 root_layer_->SetBounds(gfx::Size(50, 50)); |
545 layer_tree_host()->SetRootLayer(root_layer_); | 541 layer_tree_host()->SetRootLayer(root_layer_); |
546 | 542 |
547 // The initially transparent layer has a larger child layer, which is | 543 // The initially transparent layer has a larger child layer, which is |
548 // not initially drawn because of the this (parent) layer. | 544 // not initially drawn because of the this (parent) layer. |
549 parent_layer_ = FakeContentLayer::Create(&client_); | 545 parent_layer_ = FakeContentLayer::Create(&client_); |
550 parent_layer_->SetBounds(gfx::Size(15, 15)); | 546 parent_layer_->SetBounds(gfx::Size(15, 15)); |
551 parent_layer_->SetOpacity(0.0f); | 547 parent_layer_->SetOpacity(0.0f); |
552 root_layer_->AddChild(parent_layer_); | 548 root_layer_->AddChild(parent_layer_); |
553 | 549 |
554 child_layer_ = FakeContentLayer::Create(&client_); | 550 child_layer_ = FakeContentLayer::Create(&client_); |
555 child_layer_->SetBounds(gfx::Size(25, 25)); | 551 child_layer_->SetBounds(gfx::Size(25, 25)); |
556 parent_layer_->AddChild(child_layer_); | 552 parent_layer_->AddChild(child_layer_); |
557 | 553 |
558 LayerTreeHostTest::SetupTree(); | 554 LayerTreeHostTest::SetupTree(); |
559 } | 555 } |
560 | 556 |
561 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 557 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
562 | 558 |
563 virtual DrawResult PrepareToDrawOnThread( | 559 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
564 LayerTreeHostImpl* host_impl, | 560 LayerTreeHostImpl::FrameData* frame_data, |
565 LayerTreeHostImpl::FrameData* frame_data, | 561 DrawResult draw_result) override { |
566 DrawResult draw_result) override { | |
567 EXPECT_EQ(DRAW_SUCCESS, draw_result); | 562 EXPECT_EQ(DRAW_SUCCESS, draw_result); |
568 | 563 |
569 gfx::RectF root_damage_rect; | 564 gfx::RectF root_damage_rect; |
570 if (!frame_data->render_passes.empty()) | 565 if (!frame_data->render_passes.empty()) |
571 root_damage_rect = frame_data->render_passes.back()->damage_rect; | 566 root_damage_rect = frame_data->render_passes.back()->damage_rect; |
572 | 567 |
573 // The first time, the whole view needs be drawn. | 568 // The first time, the whole view needs be drawn. |
574 // Afterwards, just the opacity of surface_layer1 is changed a few times, | 569 // Afterwards, just the opacity of surface_layer1 is changed a few times, |
575 // and each damage should be the bounding box of it and its child. If this | 570 // and each damage should be the bounding box of it and its child. If this |
576 // was working improperly, the damage might not include its childs bounding | 571 // was working improperly, the damage might not include its childs bounding |
577 // box. | 572 // box. |
578 switch (host_impl->active_tree()->source_frame_number()) { | 573 switch (host_impl->active_tree()->source_frame_number()) { |
579 case 0: | 574 case 0: |
580 EXPECT_RECT_EQ(gfx::Rect(root_layer_->bounds()), root_damage_rect); | 575 EXPECT_RECT_EQ(gfx::Rect(root_layer_->bounds()), root_damage_rect); |
581 break; | 576 break; |
582 case 1: | 577 case 1: |
583 case 2: | 578 case 2: |
584 case 3: | 579 case 3: |
585 EXPECT_RECT_EQ(gfx::Rect(child_layer_->bounds()), root_damage_rect); | 580 EXPECT_RECT_EQ(gfx::Rect(child_layer_->bounds()), root_damage_rect); |
586 break; | 581 break; |
587 default: | 582 default: |
588 NOTREACHED(); | 583 NOTREACHED(); |
589 } | 584 } |
590 | 585 |
591 return draw_result; | 586 return draw_result; |
592 } | 587 } |
593 | 588 |
594 virtual void DidCommitAndDrawFrame() override { | 589 void DidCommitAndDrawFrame() override { |
595 switch (layer_tree_host()->source_frame_number()) { | 590 switch (layer_tree_host()->source_frame_number()) { |
596 case 1: | 591 case 1: |
597 // Test not owning the surface. | 592 // Test not owning the surface. |
598 parent_layer_->SetOpacity(1.0f); | 593 parent_layer_->SetOpacity(1.0f); |
599 break; | 594 break; |
600 case 2: | 595 case 2: |
601 parent_layer_->SetOpacity(0.0f); | 596 parent_layer_->SetOpacity(0.0f); |
602 break; | 597 break; |
603 case 3: | 598 case 3: |
604 // Test owning the surface. | 599 // Test owning the surface. |
605 parent_layer_->SetOpacity(0.5f); | 600 parent_layer_->SetOpacity(0.5f); |
606 parent_layer_->SetForceRenderSurface(true); | 601 parent_layer_->SetForceRenderSurface(true); |
607 break; | 602 break; |
608 case 4: | 603 case 4: |
609 EndTest(); | 604 EndTest(); |
610 break; | 605 break; |
611 default: | 606 default: |
612 NOTREACHED(); | 607 NOTREACHED(); |
613 } | 608 } |
614 } | 609 } |
615 | 610 |
616 virtual void AfterTest() override {} | 611 void AfterTest() override {} |
617 | 612 |
618 private: | 613 private: |
619 FakeContentLayerClient client_; | 614 FakeContentLayerClient client_; |
620 scoped_refptr<ContentLayer> root_layer_; | 615 scoped_refptr<ContentLayer> root_layer_; |
621 scoped_refptr<FakeContentLayer> parent_layer_; | 616 scoped_refptr<FakeContentLayer> parent_layer_; |
622 scoped_refptr<FakeContentLayer> child_layer_; | 617 scoped_refptr<FakeContentLayer> child_layer_; |
623 }; | 618 }; |
624 | 619 |
625 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestUndrawnLayersDamageLater); | 620 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestUndrawnLayersDamageLater); |
626 | 621 |
627 // Tests that if a layer is not drawn because of some reason in the parent, | 622 // Tests that if a layer is not drawn because of some reason in the parent, |
628 // causing its content bounds to not be computed, then when it is later drawn, | 623 // causing its content bounds to not be computed, then when it is later drawn, |
629 // its content bounds get pushed. | 624 // its content bounds get pushed. |
630 class LayerTreeHostTestUndrawnLayersPushContentBoundsLater | 625 class LayerTreeHostTestUndrawnLayersPushContentBoundsLater |
631 : public LayerTreeHostTest { | 626 : public LayerTreeHostTest { |
632 public: | 627 public: |
633 LayerTreeHostTestUndrawnLayersPushContentBoundsLater() | 628 LayerTreeHostTestUndrawnLayersPushContentBoundsLater() |
634 : root_layer_(Layer::Create()) {} | 629 : root_layer_(Layer::Create()) {} |
635 | 630 |
636 virtual void SetupTree() override { | 631 void SetupTree() override { |
637 root_layer_->SetIsDrawable(true); | 632 root_layer_->SetIsDrawable(true); |
638 root_layer_->SetBounds(gfx::Size(20, 20)); | 633 root_layer_->SetBounds(gfx::Size(20, 20)); |
639 layer_tree_host()->SetRootLayer(root_layer_); | 634 layer_tree_host()->SetRootLayer(root_layer_); |
640 | 635 |
641 parent_layer_ = Layer::Create(); | 636 parent_layer_ = Layer::Create(); |
642 parent_layer_->SetBounds(gfx::Size(20, 20)); | 637 parent_layer_->SetBounds(gfx::Size(20, 20)); |
643 parent_layer_->SetOpacity(0.0f); | 638 parent_layer_->SetOpacity(0.0f); |
644 root_layer_->AddChild(parent_layer_); | 639 root_layer_->AddChild(parent_layer_); |
645 | 640 |
646 child_layer_ = Layer::Create(); | 641 child_layer_ = Layer::Create(); |
647 child_layer_->SetBounds(gfx::Size(15, 15)); | 642 child_layer_->SetBounds(gfx::Size(15, 15)); |
648 parent_layer_->AddChild(child_layer_); | 643 parent_layer_->AddChild(child_layer_); |
649 | 644 |
650 LayerTreeHostTest::SetupTree(); | 645 LayerTreeHostTest::SetupTree(); |
651 } | 646 } |
652 | 647 |
653 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 648 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
654 | 649 |
655 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 650 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
656 LayerImpl* root = host_impl->active_tree()->root_layer(); | 651 LayerImpl* root = host_impl->active_tree()->root_layer(); |
657 LayerImpl* parent = root->children()[0]; | 652 LayerImpl* parent = root->children()[0]; |
658 LayerImpl* child = parent->children()[0]; | 653 LayerImpl* child = parent->children()[0]; |
659 | 654 |
660 switch (host_impl->active_tree()->source_frame_number()) { | 655 switch (host_impl->active_tree()->source_frame_number()) { |
661 case 0: | 656 case 0: |
662 EXPECT_EQ(0.f, parent->opacity()); | 657 EXPECT_EQ(0.f, parent->opacity()); |
663 EXPECT_EQ(gfx::SizeF(), child->content_bounds()); | 658 EXPECT_EQ(gfx::SizeF(), child->content_bounds()); |
664 break; | 659 break; |
665 case 1: | 660 case 1: |
666 EXPECT_EQ(1.f, parent->opacity()); | 661 EXPECT_EQ(1.f, parent->opacity()); |
667 EXPECT_EQ(gfx::SizeF(15.f, 15.f), child->content_bounds()); | 662 EXPECT_EQ(gfx::SizeF(15.f, 15.f), child->content_bounds()); |
668 EndTest(); | 663 EndTest(); |
669 break; | 664 break; |
670 default: | 665 default: |
671 NOTREACHED(); | 666 NOTREACHED(); |
672 } | 667 } |
673 } | 668 } |
674 | 669 |
675 virtual void DidCommit() override { | 670 void DidCommit() override { |
676 switch (layer_tree_host()->source_frame_number()) { | 671 switch (layer_tree_host()->source_frame_number()) { |
677 case 1: | 672 case 1: |
678 parent_layer_->SetOpacity(1.0f); | 673 parent_layer_->SetOpacity(1.0f); |
679 break; | 674 break; |
680 case 2: | 675 case 2: |
681 break; | 676 break; |
682 default: | 677 default: |
683 NOTREACHED(); | 678 NOTREACHED(); |
684 } | 679 } |
685 } | 680 } |
686 | 681 |
687 virtual void AfterTest() override {} | 682 void AfterTest() override {} |
688 | 683 |
689 private: | 684 private: |
690 scoped_refptr<Layer> root_layer_; | 685 scoped_refptr<Layer> root_layer_; |
691 scoped_refptr<Layer> parent_layer_; | 686 scoped_refptr<Layer> parent_layer_; |
692 scoped_refptr<Layer> child_layer_; | 687 scoped_refptr<Layer> child_layer_; |
693 }; | 688 }; |
694 | 689 |
695 SINGLE_AND_MULTI_THREAD_TEST_F( | 690 SINGLE_AND_MULTI_THREAD_TEST_F( |
696 LayerTreeHostTestUndrawnLayersPushContentBoundsLater); | 691 LayerTreeHostTestUndrawnLayersPushContentBoundsLater); |
697 | 692 |
698 // This test verifies that properties on the layer tree host are commited | 693 // This test verifies that properties on the layer tree host are commited |
699 // to the impl side. | 694 // to the impl side. |
700 class LayerTreeHostTestCommit : public LayerTreeHostTest { | 695 class LayerTreeHostTestCommit : public LayerTreeHostTest { |
701 public: | 696 public: |
702 LayerTreeHostTestCommit() {} | 697 LayerTreeHostTestCommit() {} |
703 | 698 |
704 virtual void BeginTest() override { | 699 void BeginTest() override { |
705 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); | 700 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); |
706 layer_tree_host()->set_background_color(SK_ColorGRAY); | 701 layer_tree_host()->set_background_color(SK_ColorGRAY); |
707 | 702 |
708 PostSetNeedsCommitToMainThread(); | 703 PostSetNeedsCommitToMainThread(); |
709 } | 704 } |
710 | 705 |
711 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 706 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
712 EXPECT_EQ(gfx::Size(20, 20), impl->DrawViewportSize()); | 707 EXPECT_EQ(gfx::Size(20, 20), impl->DrawViewportSize()); |
713 EXPECT_EQ(SK_ColorGRAY, impl->active_tree()->background_color()); | 708 EXPECT_EQ(SK_ColorGRAY, impl->active_tree()->background_color()); |
714 | 709 |
715 EndTest(); | 710 EndTest(); |
716 } | 711 } |
717 | 712 |
718 virtual void AfterTest() override {} | 713 void AfterTest() override {} |
719 }; | 714 }; |
720 | 715 |
721 MULTI_THREAD_TEST_F(LayerTreeHostTestCommit); | 716 MULTI_THREAD_TEST_F(LayerTreeHostTestCommit); |
722 | 717 |
723 // This test verifies that LayerTreeHostImpl's current frame time gets | 718 // This test verifies that LayerTreeHostImpl's current frame time gets |
724 // updated in consecutive frames when it doesn't draw due to tree | 719 // updated in consecutive frames when it doesn't draw due to tree |
725 // activation failure. | 720 // activation failure. |
726 class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails | 721 class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails |
727 : public LayerTreeHostTest { | 722 : public LayerTreeHostTest { |
728 public: | 723 public: |
729 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails() | 724 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails() |
730 : frame_count_with_pending_tree_(0) {} | 725 : frame_count_with_pending_tree_(0) {} |
731 | 726 |
732 virtual void BeginTest() override { | 727 void BeginTest() override { |
733 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); | 728 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); |
734 layer_tree_host()->set_background_color(SK_ColorGRAY); | 729 layer_tree_host()->set_background_color(SK_ColorGRAY); |
735 | 730 |
736 PostSetNeedsCommitToMainThread(); | 731 PostSetNeedsCommitToMainThread(); |
737 } | 732 } |
738 | 733 |
739 virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override { | 734 void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
740 EXPECT_EQ(frame_count_with_pending_tree_, 0); | 735 EXPECT_EQ(frame_count_with_pending_tree_, 0); |
741 if (impl->settings().impl_side_painting) | 736 if (impl->settings().impl_side_painting) |
742 impl->BlockNotifyReadyToActivateForTesting(true); | 737 impl->BlockNotifyReadyToActivateForTesting(true); |
743 } | 738 } |
744 | 739 |
745 virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl, | 740 void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl, |
746 const BeginFrameArgs& args) override { | 741 const BeginFrameArgs& args) override { |
747 if (impl->pending_tree()) | 742 if (impl->pending_tree()) |
748 frame_count_with_pending_tree_++; | 743 frame_count_with_pending_tree_++; |
749 | 744 |
750 if (frame_count_with_pending_tree_ == 1) { | 745 if (frame_count_with_pending_tree_ == 1) { |
751 EXPECT_EQ(first_frame_time_.ToInternalValue(), 0); | 746 EXPECT_EQ(first_frame_time_.ToInternalValue(), 0); |
752 first_frame_time_ = impl->CurrentBeginFrameArgs().frame_time; | 747 first_frame_time_ = impl->CurrentBeginFrameArgs().frame_time; |
753 } else if (frame_count_with_pending_tree_ == 2 && | 748 } else if (frame_count_with_pending_tree_ == 2 && |
754 impl->settings().impl_side_painting) { | 749 impl->settings().impl_side_painting) { |
755 impl->BlockNotifyReadyToActivateForTesting(false); | 750 impl->BlockNotifyReadyToActivateForTesting(false); |
756 } | 751 } |
757 } | 752 } |
758 | 753 |
759 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 754 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
760 if (frame_count_with_pending_tree_ > 1) { | 755 if (frame_count_with_pending_tree_ > 1) { |
761 EXPECT_NE(first_frame_time_.ToInternalValue(), 0); | 756 EXPECT_NE(first_frame_time_.ToInternalValue(), 0); |
762 EXPECT_NE(first_frame_time_.ToInternalValue(), | 757 EXPECT_NE(first_frame_time_.ToInternalValue(), |
763 impl->CurrentBeginFrameArgs().frame_time.ToInternalValue()); | 758 impl->CurrentBeginFrameArgs().frame_time.ToInternalValue()); |
764 EndTest(); | 759 EndTest(); |
765 return; | 760 return; |
766 } | 761 } |
767 | 762 |
768 EXPECT_FALSE(impl->settings().impl_side_painting); | 763 EXPECT_FALSE(impl->settings().impl_side_painting); |
769 EndTest(); | 764 EndTest(); |
770 } | 765 } |
771 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 766 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
772 if (impl->settings().impl_side_painting) | 767 if (impl->settings().impl_side_painting) |
773 EXPECT_NE(frame_count_with_pending_tree_, 1); | 768 EXPECT_NE(frame_count_with_pending_tree_, 1); |
774 } | 769 } |
775 | 770 |
776 virtual void AfterTest() override {} | 771 void AfterTest() override {} |
777 | 772 |
778 private: | 773 private: |
779 int frame_count_with_pending_tree_; | 774 int frame_count_with_pending_tree_; |
780 base::TimeTicks first_frame_time_; | 775 base::TimeTicks first_frame_time_; |
781 }; | 776 }; |
782 | 777 |
783 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( | 778 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( |
784 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails); | 779 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails); |
785 | 780 |
786 // This test verifies that LayerTreeHostImpl's current frame time gets | 781 // This test verifies that LayerTreeHostImpl's current frame time gets |
787 // updated in consecutive frames when it draws in each frame. | 782 // updated in consecutive frames when it draws in each frame. |
788 class LayerTreeHostTestFrameTimeUpdatesAfterDraw : public LayerTreeHostTest { | 783 class LayerTreeHostTestFrameTimeUpdatesAfterDraw : public LayerTreeHostTest { |
789 public: | 784 public: |
790 LayerTreeHostTestFrameTimeUpdatesAfterDraw() : frame_(0) {} | 785 LayerTreeHostTestFrameTimeUpdatesAfterDraw() : frame_(0) {} |
791 | 786 |
792 virtual void BeginTest() override { | 787 void BeginTest() override { |
793 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); | 788 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); |
794 layer_tree_host()->set_background_color(SK_ColorGRAY); | 789 layer_tree_host()->set_background_color(SK_ColorGRAY); |
795 | 790 |
796 PostSetNeedsCommitToMainThread(); | 791 PostSetNeedsCommitToMainThread(); |
797 } | 792 } |
798 | 793 |
799 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 794 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
800 frame_++; | 795 frame_++; |
801 if (frame_ == 1) { | 796 if (frame_ == 1) { |
802 first_frame_time_ = impl->CurrentBeginFrameArgs().frame_time; | 797 first_frame_time_ = impl->CurrentBeginFrameArgs().frame_time; |
803 impl->SetNeedsRedraw(); | 798 impl->SetNeedsRedraw(); |
804 | 799 |
805 // Since we might use a low-resolution clock on Windows, we need to | 800 // Since we might use a low-resolution clock on Windows, we need to |
806 // make sure that the clock has incremented past first_frame_time_. | 801 // make sure that the clock has incremented past first_frame_time_. |
807 while (first_frame_time_ == gfx::FrameTime::Now()) { | 802 while (first_frame_time_ == gfx::FrameTime::Now()) { |
808 } | 803 } |
809 | 804 |
810 return; | 805 return; |
811 } | 806 } |
812 | 807 |
813 EXPECT_NE(first_frame_time_, impl->CurrentBeginFrameArgs().frame_time); | 808 EXPECT_NE(first_frame_time_, impl->CurrentBeginFrameArgs().frame_time); |
814 EndTest(); | 809 EndTest(); |
815 } | 810 } |
816 | 811 |
817 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 812 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
818 // Ensure there isn't a commit between the two draws, to ensure that a | 813 // Ensure there isn't a commit between the two draws, to ensure that a |
819 // commit isn't required for updating the current frame time. We can | 814 // commit isn't required for updating the current frame time. We can |
820 // only check for this in the multi-threaded case, since in the single- | 815 // only check for this in the multi-threaded case, since in the single- |
821 // threaded case there will always be a commit between consecutive draws. | 816 // threaded case there will always be a commit between consecutive draws. |
822 if (HasImplThread()) | 817 if (HasImplThread()) |
823 EXPECT_EQ(0, frame_); | 818 EXPECT_EQ(0, frame_); |
824 } | 819 } |
825 | 820 |
826 virtual void AfterTest() override {} | 821 void AfterTest() override {} |
827 | 822 |
828 private: | 823 private: |
829 int frame_; | 824 int frame_; |
830 base::TimeTicks first_frame_time_; | 825 base::TimeTicks first_frame_time_; |
831 }; | 826 }; |
832 | 827 |
833 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestFrameTimeUpdatesAfterDraw); | 828 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestFrameTimeUpdatesAfterDraw); |
834 | 829 |
835 // Verifies that StartPageScaleAnimation events propagate correctly | 830 // Verifies that StartPageScaleAnimation events propagate correctly |
836 // from LayerTreeHost to LayerTreeHostImpl in the MT compositor. | 831 // from LayerTreeHost to LayerTreeHostImpl in the MT compositor. |
837 class LayerTreeHostTestStartPageScaleAnimation : public LayerTreeHostTest { | 832 class LayerTreeHostTestStartPageScaleAnimation : public LayerTreeHostTest { |
838 public: | 833 public: |
839 LayerTreeHostTestStartPageScaleAnimation() {} | 834 LayerTreeHostTestStartPageScaleAnimation() {} |
840 | 835 |
841 virtual void SetupTree() override { | 836 void SetupTree() override { |
842 LayerTreeHostTest::SetupTree(); | 837 LayerTreeHostTest::SetupTree(); |
843 | 838 |
844 if (layer_tree_host()->settings().impl_side_painting) { | 839 if (layer_tree_host()->settings().impl_side_painting) { |
845 scoped_refptr<FakePictureLayer> layer = | 840 scoped_refptr<FakePictureLayer> layer = |
846 FakePictureLayer::Create(&client_); | 841 FakePictureLayer::Create(&client_); |
847 layer->set_always_update_resources(true); | 842 layer->set_always_update_resources(true); |
848 scroll_layer_ = layer; | 843 scroll_layer_ = layer; |
849 } else { | 844 } else { |
850 scroll_layer_ = FakeContentLayer::Create(&client_); | 845 scroll_layer_ = FakeContentLayer::Create(&client_); |
851 } | 846 } |
852 | 847 |
853 Layer* root_layer = layer_tree_host()->root_layer(); | 848 Layer* root_layer = layer_tree_host()->root_layer(); |
854 scroll_layer_->SetScrollClipLayerId(root_layer->id()); | 849 scroll_layer_->SetScrollClipLayerId(root_layer->id()); |
855 scroll_layer_->SetIsContainerForFixedPositionLayers(true); | 850 scroll_layer_->SetIsContainerForFixedPositionLayers(true); |
856 scroll_layer_->SetBounds(gfx::Size(2 * root_layer->bounds().width(), | 851 scroll_layer_->SetBounds(gfx::Size(2 * root_layer->bounds().width(), |
857 2 * root_layer->bounds().height())); | 852 2 * root_layer->bounds().height())); |
858 scroll_layer_->SetScrollOffset(gfx::ScrollOffset()); | 853 scroll_layer_->SetScrollOffset(gfx::ScrollOffset()); |
859 layer_tree_host()->root_layer()->AddChild(scroll_layer_); | 854 layer_tree_host()->root_layer()->AddChild(scroll_layer_); |
860 // This test requires the page_scale and inner viewport layers to be | 855 // This test requires the page_scale and inner viewport layers to be |
861 // identified. | 856 // identified. |
862 layer_tree_host()->RegisterViewportLayers( | 857 layer_tree_host()->RegisterViewportLayers( |
863 root_layer, scroll_layer_.get(), NULL); | 858 root_layer, scroll_layer_.get(), NULL); |
864 layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.5f, 2.f); | 859 layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.5f, 2.f); |
865 } | 860 } |
866 | 861 |
867 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 862 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
868 | 863 |
869 virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, | 864 void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, |
870 float scale, | 865 float scale, |
871 float) override { | 866 float) override { |
872 gfx::ScrollOffset offset = scroll_layer_->scroll_offset(); | 867 gfx::ScrollOffset offset = scroll_layer_->scroll_offset(); |
873 scroll_layer_->SetScrollOffset(ScrollOffsetWithDelta(offset, | 868 scroll_layer_->SetScrollOffset(ScrollOffsetWithDelta(offset, |
874 scroll_delta)); | 869 scroll_delta)); |
875 layer_tree_host()->SetPageScaleFactorAndLimits(scale, 0.5f, 2.f); | 870 layer_tree_host()->SetPageScaleFactorAndLimits(scale, 0.5f, 2.f); |
876 } | 871 } |
877 | 872 |
878 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 873 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
879 // We get one commit before the first draw, and the animation doesn't happen | 874 // We get one commit before the first draw, and the animation doesn't happen |
880 // until the second draw. | 875 // until the second draw. |
881 switch (impl->active_tree()->source_frame_number()) { | 876 switch (impl->active_tree()->source_frame_number()) { |
882 case 0: | 877 case 0: |
883 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor()); | 878 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor()); |
884 // We'll start an animation when we get back to the main thread. | 879 // We'll start an animation when we get back to the main thread. |
885 break; | 880 break; |
886 case 1: | 881 case 1: |
887 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor()); | 882 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor()); |
888 break; | 883 break; |
889 case 2: | 884 case 2: |
890 EXPECT_EQ(1.25f, impl->active_tree()->page_scale_factor()); | 885 EXPECT_EQ(1.25f, impl->active_tree()->page_scale_factor()); |
891 EndTest(); | 886 EndTest(); |
892 break; | 887 break; |
893 default: | 888 default: |
894 NOTREACHED(); | 889 NOTREACHED(); |
895 } | 890 } |
896 } | 891 } |
897 | 892 |
898 virtual void DidCommitAndDrawFrame() override { | 893 void DidCommitAndDrawFrame() override { |
899 switch (layer_tree_host()->source_frame_number()) { | 894 switch (layer_tree_host()->source_frame_number()) { |
900 case 1: | 895 case 1: |
901 layer_tree_host()->StartPageScaleAnimation( | 896 layer_tree_host()->StartPageScaleAnimation( |
902 gfx::Vector2d(), false, 1.25f, base::TimeDelta()); | 897 gfx::Vector2d(), false, 1.25f, base::TimeDelta()); |
903 break; | 898 break; |
904 } | 899 } |
905 } | 900 } |
906 | 901 |
907 virtual void AfterTest() override {} | 902 void AfterTest() override {} |
908 | 903 |
909 FakeContentLayerClient client_; | 904 FakeContentLayerClient client_; |
910 scoped_refptr<Layer> scroll_layer_; | 905 scoped_refptr<Layer> scroll_layer_; |
911 }; | 906 }; |
912 | 907 |
913 MULTI_THREAD_TEST_F(LayerTreeHostTestStartPageScaleAnimation); | 908 MULTI_THREAD_TEST_F(LayerTreeHostTestStartPageScaleAnimation); |
914 | 909 |
915 class LayerTreeHostTestSetVisible : public LayerTreeHostTest { | 910 class LayerTreeHostTestSetVisible : public LayerTreeHostTest { |
916 public: | 911 public: |
917 LayerTreeHostTestSetVisible() : num_draws_(0) {} | 912 LayerTreeHostTestSetVisible() : num_draws_(0) {} |
918 | 913 |
919 virtual void BeginTest() override { | 914 void BeginTest() override { |
920 PostSetNeedsCommitToMainThread(); | 915 PostSetNeedsCommitToMainThread(); |
921 PostSetVisibleToMainThread(false); | 916 PostSetVisibleToMainThread(false); |
922 // This is suppressed while we're invisible. | 917 // This is suppressed while we're invisible. |
923 PostSetNeedsRedrawToMainThread(); | 918 PostSetNeedsRedrawToMainThread(); |
924 // Triggers the redraw. | 919 // Triggers the redraw. |
925 PostSetVisibleToMainThread(true); | 920 PostSetVisibleToMainThread(true); |
926 } | 921 } |
927 | 922 |
928 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 923 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
929 EXPECT_TRUE(impl->visible()); | 924 EXPECT_TRUE(impl->visible()); |
930 ++num_draws_; | 925 ++num_draws_; |
931 EndTest(); | 926 EndTest(); |
932 } | 927 } |
933 | 928 |
934 virtual void AfterTest() override { EXPECT_EQ(1, num_draws_); } | 929 void AfterTest() override { EXPECT_EQ(1, num_draws_); } |
935 | 930 |
936 private: | 931 private: |
937 int num_draws_; | 932 int num_draws_; |
938 }; | 933 }; |
939 | 934 |
940 MULTI_THREAD_TEST_F(LayerTreeHostTestSetVisible); | 935 MULTI_THREAD_TEST_F(LayerTreeHostTestSetVisible); |
941 | 936 |
942 class TestOpacityChangeLayerDelegate : public ContentLayerClient { | 937 class TestOpacityChangeLayerDelegate : public ContentLayerClient { |
943 public: | 938 public: |
944 TestOpacityChangeLayerDelegate() : test_layer_(0) {} | 939 TestOpacityChangeLayerDelegate() : test_layer_(0) {} |
945 | 940 |
946 void SetTestLayer(Layer* test_layer) { test_layer_ = test_layer; } | 941 void SetTestLayer(Layer* test_layer) { test_layer_ = test_layer; } |
947 | 942 |
948 virtual void PaintContents( | 943 void PaintContents( |
949 SkCanvas* canvas, | 944 SkCanvas* canvas, |
950 const gfx::Rect& clip, | 945 const gfx::Rect& clip, |
951 ContentLayerClient::GraphicsContextStatus gc_status) override { | 946 ContentLayerClient::GraphicsContextStatus gc_status) override { |
952 // Set layer opacity to 0. | 947 // Set layer opacity to 0. |
953 if (test_layer_) | 948 if (test_layer_) |
954 test_layer_->SetOpacity(0.f); | 949 test_layer_->SetOpacity(0.f); |
955 } | 950 } |
956 virtual void DidChangeLayerCanUseLCDText() override {} | 951 void DidChangeLayerCanUseLCDText() override {} |
957 virtual bool FillsBoundsCompletely() const override { return false; } | 952 bool FillsBoundsCompletely() const override { return false; } |
958 | 953 |
959 private: | 954 private: |
960 Layer* test_layer_; | 955 Layer* test_layer_; |
961 }; | 956 }; |
962 | 957 |
963 class ContentLayerWithUpdateTracking : public ContentLayer { | 958 class ContentLayerWithUpdateTracking : public ContentLayer { |
964 public: | 959 public: |
965 static scoped_refptr<ContentLayerWithUpdateTracking> Create( | 960 static scoped_refptr<ContentLayerWithUpdateTracking> Create( |
966 ContentLayerClient* client) { | 961 ContentLayerClient* client) { |
967 return make_scoped_refptr(new ContentLayerWithUpdateTracking(client)); | 962 return make_scoped_refptr(new ContentLayerWithUpdateTracking(client)); |
968 } | 963 } |
969 | 964 |
970 int PaintContentsCount() { return paint_contents_count_; } | 965 int PaintContentsCount() { return paint_contents_count_; } |
971 void ResetPaintContentsCount() { paint_contents_count_ = 0; } | 966 void ResetPaintContentsCount() { paint_contents_count_ = 0; } |
972 | 967 |
973 virtual bool Update(ResourceUpdateQueue* queue, | 968 bool Update(ResourceUpdateQueue* queue, |
974 const OcclusionTracker<Layer>* occlusion) override { | 969 const OcclusionTracker<Layer>* occlusion) override { |
975 bool updated = ContentLayer::Update(queue, occlusion); | 970 bool updated = ContentLayer::Update(queue, occlusion); |
976 paint_contents_count_++; | 971 paint_contents_count_++; |
977 return updated; | 972 return updated; |
978 } | 973 } |
979 | 974 |
980 private: | 975 private: |
981 explicit ContentLayerWithUpdateTracking(ContentLayerClient* client) | 976 explicit ContentLayerWithUpdateTracking(ContentLayerClient* client) |
982 : ContentLayer(client), paint_contents_count_(0) { | 977 : ContentLayer(client), paint_contents_count_(0) { |
983 SetBounds(gfx::Size(10, 10)); | 978 SetBounds(gfx::Size(10, 10)); |
984 SetIsDrawable(true); | 979 SetIsDrawable(true); |
985 } | 980 } |
986 virtual ~ContentLayerWithUpdateTracking() {} | 981 ~ContentLayerWithUpdateTracking() override {} |
987 | 982 |
988 int paint_contents_count_; | 983 int paint_contents_count_; |
989 }; | 984 }; |
990 | 985 |
991 // Layer opacity change during paint should not prevent compositor resources | 986 // Layer opacity change during paint should not prevent compositor resources |
992 // from being updated during commit. | 987 // from being updated during commit. |
993 class LayerTreeHostTestOpacityChange : public LayerTreeHostTest { | 988 class LayerTreeHostTestOpacityChange : public LayerTreeHostTest { |
994 public: | 989 public: |
995 LayerTreeHostTestOpacityChange() | 990 LayerTreeHostTestOpacityChange() |
996 : test_opacity_change_delegate_(), | 991 : test_opacity_change_delegate_(), |
997 update_check_layer_(ContentLayerWithUpdateTracking::Create( | 992 update_check_layer_(ContentLayerWithUpdateTracking::Create( |
998 &test_opacity_change_delegate_)) { | 993 &test_opacity_change_delegate_)) { |
999 test_opacity_change_delegate_.SetTestLayer(update_check_layer_.get()); | 994 test_opacity_change_delegate_.SetTestLayer(update_check_layer_.get()); |
1000 } | 995 } |
1001 | 996 |
1002 virtual void BeginTest() override { | 997 void BeginTest() override { |
1003 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); | 998 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); |
1004 layer_tree_host()->root_layer()->AddChild(update_check_layer_); | 999 layer_tree_host()->root_layer()->AddChild(update_check_layer_); |
1005 | 1000 |
1006 PostSetNeedsCommitToMainThread(); | 1001 PostSetNeedsCommitToMainThread(); |
1007 } | 1002 } |
1008 | 1003 |
1009 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 1004 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { EndTest(); } |
1010 EndTest(); | |
1011 } | |
1012 | 1005 |
1013 virtual void AfterTest() override { | 1006 void AfterTest() override { |
1014 // Update() should have been called once. | 1007 // Update() should have been called once. |
1015 EXPECT_EQ(1, update_check_layer_->PaintContentsCount()); | 1008 EXPECT_EQ(1, update_check_layer_->PaintContentsCount()); |
1016 } | 1009 } |
1017 | 1010 |
1018 private: | 1011 private: |
1019 TestOpacityChangeLayerDelegate test_opacity_change_delegate_; | 1012 TestOpacityChangeLayerDelegate test_opacity_change_delegate_; |
1020 scoped_refptr<ContentLayerWithUpdateTracking> update_check_layer_; | 1013 scoped_refptr<ContentLayerWithUpdateTracking> update_check_layer_; |
1021 }; | 1014 }; |
1022 | 1015 |
1023 MULTI_THREAD_TEST_F(LayerTreeHostTestOpacityChange); | 1016 MULTI_THREAD_TEST_F(LayerTreeHostTestOpacityChange); |
1024 | 1017 |
1025 class NoScaleContentLayer : public ContentLayer { | 1018 class NoScaleContentLayer : public ContentLayer { |
1026 public: | 1019 public: |
1027 static scoped_refptr<NoScaleContentLayer> Create(ContentLayerClient* client) { | 1020 static scoped_refptr<NoScaleContentLayer> Create(ContentLayerClient* client) { |
1028 return make_scoped_refptr(new NoScaleContentLayer(client)); | 1021 return make_scoped_refptr(new NoScaleContentLayer(client)); |
1029 } | 1022 } |
1030 | 1023 |
1031 virtual void CalculateContentsScale(float ideal_contents_scale, | 1024 void CalculateContentsScale(float ideal_contents_scale, |
1032 float* contents_scale_x, | 1025 float* contents_scale_x, |
1033 float* contents_scale_y, | 1026 float* contents_scale_y, |
1034 gfx::Size* contentBounds) override { | 1027 gfx::Size* contentBounds) override { |
1035 // Skip over the ContentLayer's method to the base Layer class. | 1028 // Skip over the ContentLayer's method to the base Layer class. |
1036 Layer::CalculateContentsScale(ideal_contents_scale, | 1029 Layer::CalculateContentsScale(ideal_contents_scale, |
1037 contents_scale_x, | 1030 contents_scale_x, |
1038 contents_scale_y, | 1031 contents_scale_y, |
1039 contentBounds); | 1032 contentBounds); |
1040 } | 1033 } |
1041 | 1034 |
1042 private: | 1035 private: |
1043 explicit NoScaleContentLayer(ContentLayerClient* client) | 1036 explicit NoScaleContentLayer(ContentLayerClient* client) |
1044 : ContentLayer(client) {} | 1037 : ContentLayer(client) {} |
1045 virtual ~NoScaleContentLayer() {} | 1038 ~NoScaleContentLayer() override {} |
1046 }; | 1039 }; |
1047 | 1040 |
1048 class LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers | 1041 class LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers |
1049 : public LayerTreeHostTest { | 1042 : public LayerTreeHostTest { |
1050 public: | 1043 public: |
1051 LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers() | 1044 LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers() |
1052 : root_layer_(NoScaleContentLayer::Create(&client_)), | 1045 : root_layer_(NoScaleContentLayer::Create(&client_)), |
1053 child_layer_(ContentLayer::Create(&client_)) {} | 1046 child_layer_(ContentLayer::Create(&client_)) {} |
1054 | 1047 |
1055 virtual void BeginTest() override { | 1048 void BeginTest() override { |
1056 layer_tree_host()->SetViewportSize(gfx::Size(60, 60)); | 1049 layer_tree_host()->SetViewportSize(gfx::Size(60, 60)); |
1057 layer_tree_host()->SetDeviceScaleFactor(1.5); | 1050 layer_tree_host()->SetDeviceScaleFactor(1.5); |
1058 EXPECT_EQ(gfx::Size(60, 60), layer_tree_host()->device_viewport_size()); | 1051 EXPECT_EQ(gfx::Size(60, 60), layer_tree_host()->device_viewport_size()); |
1059 | 1052 |
1060 root_layer_->AddChild(child_layer_); | 1053 root_layer_->AddChild(child_layer_); |
1061 | 1054 |
1062 root_layer_->SetIsDrawable(true); | 1055 root_layer_->SetIsDrawable(true); |
1063 root_layer_->SetBounds(gfx::Size(30, 30)); | 1056 root_layer_->SetBounds(gfx::Size(30, 30)); |
1064 | 1057 |
1065 child_layer_->SetIsDrawable(true); | 1058 child_layer_->SetIsDrawable(true); |
1066 child_layer_->SetPosition(gfx::Point(2, 2)); | 1059 child_layer_->SetPosition(gfx::Point(2, 2)); |
1067 child_layer_->SetBounds(gfx::Size(10, 10)); | 1060 child_layer_->SetBounds(gfx::Size(10, 10)); |
1068 | 1061 |
1069 layer_tree_host()->SetRootLayer(root_layer_); | 1062 layer_tree_host()->SetRootLayer(root_layer_); |
1070 | 1063 |
1071 PostSetNeedsCommitToMainThread(); | 1064 PostSetNeedsCommitToMainThread(); |
1072 } | 1065 } |
1073 | 1066 |
1074 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 1067 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
1075 // Should only do one commit. | 1068 // Should only do one commit. |
1076 EXPECT_EQ(0, impl->active_tree()->source_frame_number()); | 1069 EXPECT_EQ(0, impl->active_tree()->source_frame_number()); |
1077 // Device scale factor should come over to impl. | 1070 // Device scale factor should come over to impl. |
1078 EXPECT_NEAR(impl->device_scale_factor(), 1.5f, 0.00001f); | 1071 EXPECT_NEAR(impl->device_scale_factor(), 1.5f, 0.00001f); |
1079 | 1072 |
1080 // Both layers are on impl. | 1073 // Both layers are on impl. |
1081 ASSERT_EQ(1u, impl->active_tree()->root_layer()->children().size()); | 1074 ASSERT_EQ(1u, impl->active_tree()->root_layer()->children().size()); |
1082 | 1075 |
1083 // Device viewport is scaled. | 1076 // Device viewport is scaled. |
1084 EXPECT_EQ(gfx::Size(60, 60), impl->DrawViewportSize()); | 1077 EXPECT_EQ(gfx::Size(60, 60), impl->DrawViewportSize()); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1130 gfx::Transform child_draw_transform = child_screen_space_transform; | 1123 gfx::Transform child_draw_transform = child_screen_space_transform; |
1131 | 1124 |
1132 EXPECT_TRANSFORMATION_MATRIX_EQ(child_draw_transform, | 1125 EXPECT_TRANSFORMATION_MATRIX_EQ(child_draw_transform, |
1133 child->draw_transform()); | 1126 child->draw_transform()); |
1134 EXPECT_TRANSFORMATION_MATRIX_EQ(child_screen_space_transform, | 1127 EXPECT_TRANSFORMATION_MATRIX_EQ(child_screen_space_transform, |
1135 child->screen_space_transform()); | 1128 child->screen_space_transform()); |
1136 | 1129 |
1137 EndTest(); | 1130 EndTest(); |
1138 } | 1131 } |
1139 | 1132 |
1140 virtual void AfterTest() override {} | 1133 void AfterTest() override {} |
1141 | 1134 |
1142 private: | 1135 private: |
1143 FakeContentLayerClient client_; | 1136 FakeContentLayerClient client_; |
1144 scoped_refptr<NoScaleContentLayer> root_layer_; | 1137 scoped_refptr<NoScaleContentLayer> root_layer_; |
1145 scoped_refptr<ContentLayer> child_layer_; | 1138 scoped_refptr<ContentLayer> child_layer_; |
1146 }; | 1139 }; |
1147 | 1140 |
1148 MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers); | 1141 MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers); |
1149 | 1142 |
1150 // Verify atomicity of commits and reuse of textures. | 1143 // Verify atomicity of commits and reuse of textures. |
1151 class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest { | 1144 class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest { |
1152 public: | 1145 public: |
1153 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 1146 void InitializeSettings(LayerTreeSettings* settings) override { |
1154 settings->texture_id_allocation_chunk_size = 1; | 1147 settings->texture_id_allocation_chunk_size = 1; |
1155 // Make sure partial texture updates are turned off. | 1148 // Make sure partial texture updates are turned off. |
1156 settings->max_partial_texture_updates = 0; | 1149 settings->max_partial_texture_updates = 0; |
1157 // Linear fade animator prevents scrollbars from drawing immediately. | 1150 // Linear fade animator prevents scrollbars from drawing immediately. |
1158 settings->scrollbar_animator = LayerTreeSettings::NoAnimator; | 1151 settings->scrollbar_animator = LayerTreeSettings::NoAnimator; |
1159 } | 1152 } |
1160 | 1153 |
1161 virtual void SetupTree() override { | 1154 void SetupTree() override { |
1162 layer_ = FakeContentLayer::Create(&client_); | 1155 layer_ = FakeContentLayer::Create(&client_); |
1163 layer_->SetBounds(gfx::Size(10, 20)); | 1156 layer_->SetBounds(gfx::Size(10, 20)); |
1164 | 1157 |
1165 bool paint_scrollbar = true; | 1158 bool paint_scrollbar = true; |
1166 bool has_thumb = false; | 1159 bool has_thumb = false; |
1167 scrollbar_ = FakePaintedScrollbarLayer::Create( | 1160 scrollbar_ = FakePaintedScrollbarLayer::Create( |
1168 paint_scrollbar, has_thumb, layer_->id()); | 1161 paint_scrollbar, has_thumb, layer_->id()); |
1169 scrollbar_->SetPosition(gfx::Point(0, 10)); | 1162 scrollbar_->SetPosition(gfx::Point(0, 10)); |
1170 scrollbar_->SetBounds(gfx::Size(10, 10)); | 1163 scrollbar_->SetBounds(gfx::Size(10, 10)); |
1171 | 1164 |
1172 layer_->AddChild(scrollbar_); | 1165 layer_->AddChild(scrollbar_); |
1173 | 1166 |
1174 layer_tree_host()->SetRootLayer(layer_); | 1167 layer_tree_host()->SetRootLayer(layer_); |
1175 LayerTreeHostTest::SetupTree(); | 1168 LayerTreeHostTest::SetupTree(); |
1176 } | 1169 } |
1177 | 1170 |
1178 virtual void BeginTest() override { | 1171 void BeginTest() override { |
1179 drew_frame_ = -1; | 1172 drew_frame_ = -1; |
1180 PostSetNeedsCommitToMainThread(); | 1173 PostSetNeedsCommitToMainThread(); |
1181 } | 1174 } |
1182 | 1175 |
1183 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 1176 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
1184 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); | 1177 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); |
1185 | 1178 |
1186 TestWebGraphicsContext3D* context = TestContext(); | 1179 TestWebGraphicsContext3D* context = TestContext(); |
1187 | 1180 |
1188 switch (impl->active_tree()->source_frame_number()) { | 1181 switch (impl->active_tree()->source_frame_number()) { |
1189 case 0: | 1182 case 0: |
1190 // Number of textures should be one for each layer | 1183 // Number of textures should be one for each layer |
1191 ASSERT_EQ(2u, context->NumTextures()); | 1184 ASSERT_EQ(2u, context->NumTextures()); |
1192 // Number of textures used for commit should be one for each layer. | 1185 // Number of textures used for commit should be one for each layer. |
1193 EXPECT_EQ(2u, context->NumUsedTextures()); | 1186 EXPECT_EQ(2u, context->NumUsedTextures()); |
(...skipping 20 matching lines...) Expand all Loading... |
1214 break; | 1207 break; |
1215 case 2: | 1208 case 2: |
1216 EndTest(); | 1209 EndTest(); |
1217 break; | 1210 break; |
1218 default: | 1211 default: |
1219 NOTREACHED(); | 1212 NOTREACHED(); |
1220 break; | 1213 break; |
1221 } | 1214 } |
1222 } | 1215 } |
1223 | 1216 |
1224 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 1217 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
1225 TestWebGraphicsContext3D* context = TestContext(); | 1218 TestWebGraphicsContext3D* context = TestContext(); |
1226 | 1219 |
1227 if (drew_frame_ == impl->active_tree()->source_frame_number()) { | 1220 if (drew_frame_ == impl->active_tree()->source_frame_number()) { |
1228 EXPECT_EQ(0u, context->NumUsedTextures()) << "For frame " << drew_frame_; | 1221 EXPECT_EQ(0u, context->NumUsedTextures()) << "For frame " << drew_frame_; |
1229 return; | 1222 return; |
1230 } | 1223 } |
1231 drew_frame_ = impl->active_tree()->source_frame_number(); | 1224 drew_frame_ = impl->active_tree()->source_frame_number(); |
1232 | 1225 |
1233 // We draw/ship one texture each frame for each layer. | 1226 // We draw/ship one texture each frame for each layer. |
1234 EXPECT_EQ(2u, context->NumUsedTextures()); | 1227 EXPECT_EQ(2u, context->NumUsedTextures()); |
1235 context->ResetUsedTextures(); | 1228 context->ResetUsedTextures(); |
1236 | 1229 |
1237 if (!TestEnded()) | 1230 if (!TestEnded()) |
1238 PostSetNeedsCommitToMainThread(); | 1231 PostSetNeedsCommitToMainThread(); |
1239 } | 1232 } |
1240 | 1233 |
1241 virtual void Layout() override { | 1234 void Layout() override { |
1242 layer_->SetNeedsDisplay(); | 1235 layer_->SetNeedsDisplay(); |
1243 scrollbar_->SetNeedsDisplay(); | 1236 scrollbar_->SetNeedsDisplay(); |
1244 } | 1237 } |
1245 | 1238 |
1246 virtual void AfterTest() override {} | 1239 void AfterTest() override {} |
1247 | 1240 |
1248 protected: | 1241 protected: |
1249 FakeContentLayerClient client_; | 1242 FakeContentLayerClient client_; |
1250 scoped_refptr<FakeContentLayer> layer_; | 1243 scoped_refptr<FakeContentLayer> layer_; |
1251 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_; | 1244 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_; |
1252 int drew_frame_; | 1245 int drew_frame_; |
1253 }; | 1246 }; |
1254 | 1247 |
1255 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F( | 1248 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F( |
1256 LayerTreeHostTestDirectRendererAtomicCommit); | 1249 LayerTreeHostTestDirectRendererAtomicCommit); |
1257 | 1250 |
1258 class LayerTreeHostTestDelegatingRendererAtomicCommit | 1251 class LayerTreeHostTestDelegatingRendererAtomicCommit |
1259 : public LayerTreeHostTestDirectRendererAtomicCommit { | 1252 : public LayerTreeHostTestDirectRendererAtomicCommit { |
1260 public: | 1253 public: |
1261 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 1254 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
1262 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); | 1255 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); |
1263 | 1256 |
1264 TestWebGraphicsContext3D* context = TestContext(); | 1257 TestWebGraphicsContext3D* context = TestContext(); |
1265 | 1258 |
1266 switch (impl->active_tree()->source_frame_number()) { | 1259 switch (impl->active_tree()->source_frame_number()) { |
1267 case 0: | 1260 case 0: |
1268 // Number of textures should be one for each layer | 1261 // Number of textures should be one for each layer |
1269 ASSERT_EQ(2u, context->NumTextures()); | 1262 ASSERT_EQ(2u, context->NumTextures()); |
1270 // Number of textures used for commit should be one for each layer. | 1263 // Number of textures used for commit should be one for each layer. |
1271 EXPECT_EQ(2u, context->NumUsedTextures()); | 1264 EXPECT_EQ(2u, context->NumUsedTextures()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1318 layer->SetTransform(transform); | 1311 layer->SetTransform(transform); |
1319 layer->SetTransformOrigin(transform_origin); | 1312 layer->SetTransformOrigin(transform_origin); |
1320 layer->SetPosition(position); | 1313 layer->SetPosition(position); |
1321 layer->SetBounds(bounds); | 1314 layer->SetBounds(bounds); |
1322 layer->SetContentsOpaque(opaque); | 1315 layer->SetContentsOpaque(opaque); |
1323 } | 1316 } |
1324 | 1317 |
1325 class LayerTreeHostTestAtomicCommitWithPartialUpdate | 1318 class LayerTreeHostTestAtomicCommitWithPartialUpdate |
1326 : public LayerTreeHostTest { | 1319 : public LayerTreeHostTest { |
1327 public: | 1320 public: |
1328 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 1321 void InitializeSettings(LayerTreeSettings* settings) override { |
1329 settings->texture_id_allocation_chunk_size = 1; | 1322 settings->texture_id_allocation_chunk_size = 1; |
1330 // Allow one partial texture update. | 1323 // Allow one partial texture update. |
1331 settings->max_partial_texture_updates = 1; | 1324 settings->max_partial_texture_updates = 1; |
1332 // No partial updates when impl side painting is enabled. | 1325 // No partial updates when impl side painting is enabled. |
1333 settings->impl_side_painting = false; | 1326 settings->impl_side_painting = false; |
1334 } | 1327 } |
1335 | 1328 |
1336 virtual void SetupTree() override { | 1329 void SetupTree() override { |
1337 parent_ = FakeContentLayer::Create(&client_); | 1330 parent_ = FakeContentLayer::Create(&client_); |
1338 parent_->SetBounds(gfx::Size(10, 20)); | 1331 parent_->SetBounds(gfx::Size(10, 20)); |
1339 | 1332 |
1340 child_ = FakeContentLayer::Create(&client_); | 1333 child_ = FakeContentLayer::Create(&client_); |
1341 child_->SetPosition(gfx::Point(0, 10)); | 1334 child_->SetPosition(gfx::Point(0, 10)); |
1342 child_->SetBounds(gfx::Size(3, 10)); | 1335 child_->SetBounds(gfx::Size(3, 10)); |
1343 | 1336 |
1344 parent_->AddChild(child_); | 1337 parent_->AddChild(child_); |
1345 | 1338 |
1346 layer_tree_host()->SetRootLayer(parent_); | 1339 layer_tree_host()->SetRootLayer(parent_); |
1347 LayerTreeHostTest::SetupTree(); | 1340 LayerTreeHostTest::SetupTree(); |
1348 } | 1341 } |
1349 | 1342 |
1350 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 1343 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
1351 | 1344 |
1352 virtual void DidCommitAndDrawFrame() override { | 1345 void DidCommitAndDrawFrame() override { |
1353 switch (layer_tree_host()->source_frame_number()) { | 1346 switch (layer_tree_host()->source_frame_number()) { |
1354 case 1: | 1347 case 1: |
1355 parent_->SetNeedsDisplay(); | 1348 parent_->SetNeedsDisplay(); |
1356 child_->SetNeedsDisplay(); | 1349 child_->SetNeedsDisplay(); |
1357 break; | 1350 break; |
1358 case 2: | 1351 case 2: |
1359 // Damage part of layers. | 1352 // Damage part of layers. |
1360 parent_->SetNeedsDisplayRect(gfx::Rect(5, 5)); | 1353 parent_->SetNeedsDisplayRect(gfx::Rect(5, 5)); |
1361 child_->SetNeedsDisplayRect(gfx::Rect(5, 5)); | 1354 child_->SetNeedsDisplayRect(gfx::Rect(5, 5)); |
1362 break; | 1355 break; |
1363 case 3: | 1356 case 3: |
1364 child_->SetNeedsDisplay(); | 1357 child_->SetNeedsDisplay(); |
1365 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); | 1358 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); |
1366 break; | 1359 break; |
1367 case 4: | 1360 case 4: |
1368 layer_tree_host()->SetViewportSize(gfx::Size(10, 20)); | 1361 layer_tree_host()->SetViewportSize(gfx::Size(10, 20)); |
1369 break; | 1362 break; |
1370 case 5: | 1363 case 5: |
1371 EndTest(); | 1364 EndTest(); |
1372 break; | 1365 break; |
1373 default: | 1366 default: |
1374 NOTREACHED() << layer_tree_host()->source_frame_number(); | 1367 NOTREACHED() << layer_tree_host()->source_frame_number(); |
1375 break; | 1368 break; |
1376 } | 1369 } |
1377 } | 1370 } |
1378 | 1371 |
1379 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 1372 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
1380 ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates); | 1373 ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates); |
1381 | 1374 |
1382 TestWebGraphicsContext3D* context = TestContext(); | 1375 TestWebGraphicsContext3D* context = TestContext(); |
1383 | 1376 |
1384 switch (impl->active_tree()->source_frame_number()) { | 1377 switch (impl->active_tree()->source_frame_number()) { |
1385 case 0: | 1378 case 0: |
1386 // Number of textures should be one for each layer. | 1379 // Number of textures should be one for each layer. |
1387 ASSERT_EQ(2u, context->NumTextures()); | 1380 ASSERT_EQ(2u, context->NumTextures()); |
1388 // Number of textures used for commit should be one for each layer. | 1381 // Number of textures used for commit should be one for each layer. |
1389 EXPECT_EQ(2u, context->NumUsedTextures()); | 1382 EXPECT_EQ(2u, context->NumUsedTextures()); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 EXPECT_EQ(1u, context->NumUsedTextures()); | 1452 EXPECT_EQ(1u, context->NumUsedTextures()); |
1460 | 1453 |
1461 context->ResetUsedTextures(); | 1454 context->ResetUsedTextures(); |
1462 break; | 1455 break; |
1463 default: | 1456 default: |
1464 NOTREACHED(); | 1457 NOTREACHED(); |
1465 break; | 1458 break; |
1466 } | 1459 } |
1467 } | 1460 } |
1468 | 1461 |
1469 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 1462 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
1470 EXPECT_LT(impl->active_tree()->source_frame_number(), 5); | 1463 EXPECT_LT(impl->active_tree()->source_frame_number(), 5); |
1471 | 1464 |
1472 TestWebGraphicsContext3D* context = TestContext(); | 1465 TestWebGraphicsContext3D* context = TestContext(); |
1473 | 1466 |
1474 // Number of textures used for drawing should one per layer except for | 1467 // Number of textures used for drawing should one per layer except for |
1475 // frame 3 where the viewport only contains one layer. | 1468 // frame 3 where the viewport only contains one layer. |
1476 if (impl->active_tree()->source_frame_number() == 3) { | 1469 if (impl->active_tree()->source_frame_number() == 3) { |
1477 EXPECT_EQ(1u, context->NumUsedTextures()); | 1470 EXPECT_EQ(1u, context->NumUsedTextures()); |
1478 } else { | 1471 } else { |
1479 EXPECT_EQ(2u, context->NumUsedTextures()) | 1472 EXPECT_EQ(2u, context->NumUsedTextures()) |
1480 << "For frame " << impl->active_tree()->source_frame_number(); | 1473 << "For frame " << impl->active_tree()->source_frame_number(); |
1481 } | 1474 } |
1482 | 1475 |
1483 context->ResetUsedTextures(); | 1476 context->ResetUsedTextures(); |
1484 } | 1477 } |
1485 | 1478 |
1486 virtual void AfterTest() override {} | 1479 void AfterTest() override {} |
1487 | 1480 |
1488 private: | 1481 private: |
1489 FakeContentLayerClient client_; | 1482 FakeContentLayerClient client_; |
1490 scoped_refptr<FakeContentLayer> parent_; | 1483 scoped_refptr<FakeContentLayer> parent_; |
1491 scoped_refptr<FakeContentLayer> child_; | 1484 scoped_refptr<FakeContentLayer> child_; |
1492 }; | 1485 }; |
1493 | 1486 |
1494 // Partial updates are not possible with a delegating renderer. | 1487 // Partial updates are not possible with a delegating renderer. |
1495 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( | 1488 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( |
1496 LayerTreeHostTestAtomicCommitWithPartialUpdate); | 1489 LayerTreeHostTestAtomicCommitWithPartialUpdate); |
1497 | 1490 |
1498 class LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit | 1491 class LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit |
1499 : public LayerTreeHostTest { | 1492 : public LayerTreeHostTest { |
1500 protected: | 1493 protected: |
1501 virtual void SetupTree() override { | 1494 void SetupTree() override { |
1502 root_layer_ = FakeContentLayer::Create(&client_); | 1495 root_layer_ = FakeContentLayer::Create(&client_); |
1503 root_layer_->SetBounds(gfx::Size(100, 100)); | 1496 root_layer_->SetBounds(gfx::Size(100, 100)); |
1504 | 1497 |
1505 surface_layer1_ = FakeContentLayer::Create(&client_); | 1498 surface_layer1_ = FakeContentLayer::Create(&client_); |
1506 surface_layer1_->SetBounds(gfx::Size(100, 100)); | 1499 surface_layer1_->SetBounds(gfx::Size(100, 100)); |
1507 surface_layer1_->SetForceRenderSurface(true); | 1500 surface_layer1_->SetForceRenderSurface(true); |
1508 surface_layer1_->SetOpacity(0.5f); | 1501 surface_layer1_->SetOpacity(0.5f); |
1509 root_layer_->AddChild(surface_layer1_); | 1502 root_layer_->AddChild(surface_layer1_); |
1510 | 1503 |
1511 surface_layer2_ = FakeContentLayer::Create(&client_); | 1504 surface_layer2_ = FakeContentLayer::Create(&client_); |
1512 surface_layer2_->SetBounds(gfx::Size(100, 100)); | 1505 surface_layer2_->SetBounds(gfx::Size(100, 100)); |
1513 surface_layer2_->SetForceRenderSurface(true); | 1506 surface_layer2_->SetForceRenderSurface(true); |
1514 surface_layer2_->SetOpacity(0.5f); | 1507 surface_layer2_->SetOpacity(0.5f); |
1515 surface_layer1_->AddChild(surface_layer2_); | 1508 surface_layer1_->AddChild(surface_layer2_); |
1516 | 1509 |
1517 replica_layer1_ = FakeContentLayer::Create(&client_); | 1510 replica_layer1_ = FakeContentLayer::Create(&client_); |
1518 surface_layer1_->SetReplicaLayer(replica_layer1_.get()); | 1511 surface_layer1_->SetReplicaLayer(replica_layer1_.get()); |
1519 | 1512 |
1520 replica_layer2_ = FakeContentLayer::Create(&client_); | 1513 replica_layer2_ = FakeContentLayer::Create(&client_); |
1521 surface_layer2_->SetReplicaLayer(replica_layer2_.get()); | 1514 surface_layer2_->SetReplicaLayer(replica_layer2_.get()); |
1522 | 1515 |
1523 layer_tree_host()->SetRootLayer(root_layer_); | 1516 layer_tree_host()->SetRootLayer(root_layer_); |
1524 LayerTreeHostTest::SetupTree(); | 1517 LayerTreeHostTest::SetupTree(); |
1525 } | 1518 } |
1526 | 1519 |
1527 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 1520 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
1528 | 1521 |
1529 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 1522 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
1530 Renderer* renderer = host_impl->renderer(); | 1523 Renderer* renderer = host_impl->renderer(); |
1531 RenderPassId surface1_render_pass_id = host_impl->active_tree() | 1524 RenderPassId surface1_render_pass_id = host_impl->active_tree() |
1532 ->root_layer() | 1525 ->root_layer() |
1533 ->children()[0] | 1526 ->children()[0] |
1534 ->render_surface() | 1527 ->render_surface() |
1535 ->GetRenderPassId(); | 1528 ->GetRenderPassId(); |
1536 RenderPassId surface2_render_pass_id = host_impl->active_tree() | 1529 RenderPassId surface2_render_pass_id = host_impl->active_tree() |
1537 ->root_layer() | 1530 ->root_layer() |
1538 ->children()[0] | 1531 ->children()[0] |
1539 ->children()[0] | 1532 ->children()[0] |
(...skipping 16 matching lines...) Expand all Loading... |
1556 EXPECT_FALSE( | 1549 EXPECT_FALSE( |
1557 renderer->HasAllocatedResourcesForTesting(surface1_render_pass_id)); | 1550 renderer->HasAllocatedResourcesForTesting(surface1_render_pass_id)); |
1558 EXPECT_FALSE( | 1551 EXPECT_FALSE( |
1559 renderer->HasAllocatedResourcesForTesting(surface2_render_pass_id)); | 1552 renderer->HasAllocatedResourcesForTesting(surface2_render_pass_id)); |
1560 | 1553 |
1561 EndTest(); | 1554 EndTest(); |
1562 break; | 1555 break; |
1563 } | 1556 } |
1564 } | 1557 } |
1565 | 1558 |
1566 virtual void DidCommitAndDrawFrame() override { | 1559 void DidCommitAndDrawFrame() override { |
1567 if (layer_tree_host()->source_frame_number() < 2) | 1560 if (layer_tree_host()->source_frame_number() < 2) |
1568 root_layer_->SetNeedsDisplay(); | 1561 root_layer_->SetNeedsDisplay(); |
1569 } | 1562 } |
1570 | 1563 |
1571 virtual void AfterTest() override { | 1564 void AfterTest() override { |
1572 EXPECT_LE(2u, root_layer_->update_count()); | 1565 EXPECT_LE(2u, root_layer_->update_count()); |
1573 EXPECT_LE(2u, surface_layer1_->update_count()); | 1566 EXPECT_LE(2u, surface_layer1_->update_count()); |
1574 EXPECT_LE(2u, surface_layer2_->update_count()); | 1567 EXPECT_LE(2u, surface_layer2_->update_count()); |
1575 } | 1568 } |
1576 | 1569 |
1577 FakeContentLayerClient client_; | 1570 FakeContentLayerClient client_; |
1578 scoped_refptr<FakeContentLayer> root_layer_; | 1571 scoped_refptr<FakeContentLayer> root_layer_; |
1579 scoped_refptr<FakeContentLayer> surface_layer1_; | 1572 scoped_refptr<FakeContentLayer> surface_layer1_; |
1580 scoped_refptr<FakeContentLayer> replica_layer1_; | 1573 scoped_refptr<FakeContentLayer> replica_layer1_; |
1581 scoped_refptr<FakeContentLayer> surface_layer2_; | 1574 scoped_refptr<FakeContentLayer> surface_layer2_; |
1582 scoped_refptr<FakeContentLayer> replica_layer2_; | 1575 scoped_refptr<FakeContentLayer> replica_layer2_; |
1583 }; | 1576 }; |
1584 | 1577 |
1585 // Surfaces don't exist with a delegated renderer. | 1578 // Surfaces don't exist with a delegated renderer. |
1586 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F( | 1579 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F( |
1587 LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit); | 1580 LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit); |
1588 | 1581 |
1589 class EvictionTestLayer : public Layer { | 1582 class EvictionTestLayer : public Layer { |
1590 public: | 1583 public: |
1591 static scoped_refptr<EvictionTestLayer> Create() { | 1584 static scoped_refptr<EvictionTestLayer> Create() { |
1592 return make_scoped_refptr(new EvictionTestLayer()); | 1585 return make_scoped_refptr(new EvictionTestLayer()); |
1593 } | 1586 } |
1594 | 1587 |
1595 virtual bool Update(ResourceUpdateQueue*, | 1588 bool Update(ResourceUpdateQueue*, const OcclusionTracker<Layer>*) override; |
1596 const OcclusionTracker<Layer>*) override; | 1589 bool DrawsContent() const override { return true; } |
1597 virtual bool DrawsContent() const override { return true; } | |
1598 | 1590 |
1599 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) | 1591 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; |
1600 override; | 1592 void PushPropertiesTo(LayerImpl* impl) override; |
1601 virtual void PushPropertiesTo(LayerImpl* impl) override; | 1593 void SetTexturePriorities(const PriorityCalculator&) override; |
1602 virtual void SetTexturePriorities(const PriorityCalculator&) override; | |
1603 | 1594 |
1604 bool HaveBackingTexture() const { | 1595 bool HaveBackingTexture() const { |
1605 return texture_.get() ? texture_->have_backing_texture() : false; | 1596 return texture_.get() ? texture_->have_backing_texture() : false; |
1606 } | 1597 } |
1607 | 1598 |
1608 private: | 1599 private: |
1609 EvictionTestLayer() : Layer() {} | 1600 EvictionTestLayer() : Layer() {} |
1610 virtual ~EvictionTestLayer() {} | 1601 ~EvictionTestLayer() override {} |
1611 | 1602 |
1612 void CreateTextureIfNeeded() { | 1603 void CreateTextureIfNeeded() { |
1613 if (texture_) | 1604 if (texture_) |
1614 return; | 1605 return; |
1615 texture_ = PrioritizedResource::Create( | 1606 texture_ = PrioritizedResource::Create( |
1616 layer_tree_host()->contents_texture_manager()); | 1607 layer_tree_host()->contents_texture_manager()); |
1617 texture_->SetDimensions(gfx::Size(10, 10), RGBA_8888); | 1608 texture_->SetDimensions(gfx::Size(10, 10), RGBA_8888); |
1618 bitmap_.allocN32Pixels(10, 10); | 1609 bitmap_.allocN32Pixels(10, 10); |
1619 } | 1610 } |
1620 | 1611 |
1621 scoped_ptr<PrioritizedResource> texture_; | 1612 scoped_ptr<PrioritizedResource> texture_; |
1622 SkBitmap bitmap_; | 1613 SkBitmap bitmap_; |
1623 }; | 1614 }; |
1624 | 1615 |
1625 class EvictionTestLayerImpl : public LayerImpl { | 1616 class EvictionTestLayerImpl : public LayerImpl { |
1626 public: | 1617 public: |
1627 static scoped_ptr<EvictionTestLayerImpl> Create(LayerTreeImpl* tree_impl, | 1618 static scoped_ptr<EvictionTestLayerImpl> Create(LayerTreeImpl* tree_impl, |
1628 int id) { | 1619 int id) { |
1629 return make_scoped_ptr(new EvictionTestLayerImpl(tree_impl, id)); | 1620 return make_scoped_ptr(new EvictionTestLayerImpl(tree_impl, id)); |
1630 } | 1621 } |
1631 virtual ~EvictionTestLayerImpl() {} | 1622 ~EvictionTestLayerImpl() override {} |
1632 | 1623 |
1633 virtual void AppendQuads(RenderPass* render_pass, | 1624 void AppendQuads(RenderPass* render_pass, |
1634 const Occlusion& occlusion_in_content_space, | 1625 const Occlusion& occlusion_in_content_space, |
1635 AppendQuadsData* append_quads_data) override { | 1626 AppendQuadsData* append_quads_data) override { |
1636 ASSERT_TRUE(has_texture_); | 1627 ASSERT_TRUE(has_texture_); |
1637 ASSERT_NE(0u, layer_tree_impl()->resource_provider()->num_resources()); | 1628 ASSERT_NE(0u, layer_tree_impl()->resource_provider()->num_resources()); |
1638 } | 1629 } |
1639 | 1630 |
1640 void SetHasTexture(bool has_texture) { has_texture_ = has_texture; } | 1631 void SetHasTexture(bool has_texture) { has_texture_ = has_texture; } |
1641 | 1632 |
1642 private: | 1633 private: |
1643 EvictionTestLayerImpl(LayerTreeImpl* tree_impl, int id) | 1634 EvictionTestLayerImpl(LayerTreeImpl* tree_impl, int id) |
1644 : LayerImpl(tree_impl, id), has_texture_(false) {} | 1635 : LayerImpl(tree_impl, id), has_texture_(false) {} |
1645 | 1636 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1679 test_layer_impl->SetHasTexture(texture_->have_backing_texture()); | 1670 test_layer_impl->SetHasTexture(texture_->have_backing_texture()); |
1680 } | 1671 } |
1681 | 1672 |
1682 class LayerTreeHostTestEvictTextures : public LayerTreeHostTest { | 1673 class LayerTreeHostTestEvictTextures : public LayerTreeHostTest { |
1683 public: | 1674 public: |
1684 LayerTreeHostTestEvictTextures() | 1675 LayerTreeHostTestEvictTextures() |
1685 : layer_(EvictionTestLayer::Create()), | 1676 : layer_(EvictionTestLayer::Create()), |
1686 impl_for_evict_textures_(0), | 1677 impl_for_evict_textures_(0), |
1687 num_commits_(0) {} | 1678 num_commits_(0) {} |
1688 | 1679 |
1689 virtual void BeginTest() override { | 1680 void BeginTest() override { |
1690 layer_tree_host()->SetRootLayer(layer_); | 1681 layer_tree_host()->SetRootLayer(layer_); |
1691 layer_tree_host()->SetViewportSize(gfx::Size(10, 20)); | 1682 layer_tree_host()->SetViewportSize(gfx::Size(10, 20)); |
1692 | 1683 |
1693 gfx::Transform identity_matrix; | 1684 gfx::Transform identity_matrix; |
1694 SetLayerPropertiesForTesting(layer_.get(), | 1685 SetLayerPropertiesForTesting(layer_.get(), |
1695 0, | 1686 0, |
1696 identity_matrix, | 1687 identity_matrix, |
1697 gfx::Point3F(0.f, 0.f, 0.f), | 1688 gfx::Point3F(0.f, 0.f, 0.f), |
1698 gfx::PointF(0.f, 0.f), | 1689 gfx::PointF(0.f, 0.f), |
1699 gfx::Size(10, 20), | 1690 gfx::Size(10, 20), |
(...skipping 29 matching lines...) Expand all Loading... |
1729 // Commit 6: Triggered by the eviction, post an eviction task in | 1720 // Commit 6: Triggered by the eviction, post an eviction task in |
1730 // Layout(), which will be a noop, letting the commit (which recreates the | 1721 // Layout(), which will be a noop, letting the commit (which recreates the |
1731 // textures) go through and draw a frame, then end the test. | 1722 // textures) go through and draw a frame, then end the test. |
1732 // | 1723 // |
1733 // Commits 1+2 test the eviction recovery path where eviction happens outside | 1724 // Commits 1+2 test the eviction recovery path where eviction happens outside |
1734 // of the beginFrame/commit pair. | 1725 // of the beginFrame/commit pair. |
1735 // Commits 3+4 test the eviction recovery path where eviction happens inside | 1726 // Commits 3+4 test the eviction recovery path where eviction happens inside |
1736 // the beginFrame/commit pair. | 1727 // the beginFrame/commit pair. |
1737 // Commits 5+6 test the path where an eviction happens during the eviction | 1728 // Commits 5+6 test the path where an eviction happens during the eviction |
1738 // recovery path. | 1729 // recovery path. |
1739 virtual void DidCommit() override { | 1730 void DidCommit() override { |
1740 switch (num_commits_) { | 1731 switch (num_commits_) { |
1741 case 1: | 1732 case 1: |
1742 EXPECT_TRUE(layer_->HaveBackingTexture()); | 1733 EXPECT_TRUE(layer_->HaveBackingTexture()); |
1743 PostEvictTextures(); | 1734 PostEvictTextures(); |
1744 break; | 1735 break; |
1745 case 2: | 1736 case 2: |
1746 EXPECT_TRUE(layer_->HaveBackingTexture()); | 1737 EXPECT_TRUE(layer_->HaveBackingTexture()); |
1747 layer_tree_host()->SetNeedsCommit(); | 1738 layer_tree_host()->SetNeedsCommit(); |
1748 break; | 1739 break; |
1749 case 3: | 1740 case 3: |
1750 break; | 1741 break; |
1751 case 4: | 1742 case 4: |
1752 EXPECT_TRUE(layer_->HaveBackingTexture()); | 1743 EXPECT_TRUE(layer_->HaveBackingTexture()); |
1753 layer_tree_host()->SetNeedsCommit(); | 1744 layer_tree_host()->SetNeedsCommit(); |
1754 break; | 1745 break; |
1755 case 5: | 1746 case 5: |
1756 break; | 1747 break; |
1757 case 6: | 1748 case 6: |
1758 EXPECT_TRUE(layer_->HaveBackingTexture()); | 1749 EXPECT_TRUE(layer_->HaveBackingTexture()); |
1759 EndTest(); | 1750 EndTest(); |
1760 break; | 1751 break; |
1761 default: | 1752 default: |
1762 NOTREACHED(); | 1753 NOTREACHED(); |
1763 break; | 1754 break; |
1764 } | 1755 } |
1765 } | 1756 } |
1766 | 1757 |
1767 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 1758 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
1768 impl_for_evict_textures_ = impl; | 1759 impl_for_evict_textures_ = impl; |
1769 } | 1760 } |
1770 | 1761 |
1771 virtual void Layout() override { | 1762 void Layout() override { |
1772 ++num_commits_; | 1763 ++num_commits_; |
1773 switch (num_commits_) { | 1764 switch (num_commits_) { |
1774 case 1: | 1765 case 1: |
1775 case 2: | 1766 case 2: |
1776 break; | 1767 break; |
1777 case 3: | 1768 case 3: |
1778 PostEvictTextures(); | 1769 PostEvictTextures(); |
1779 break; | 1770 break; |
1780 case 4: | 1771 case 4: |
1781 // We couldn't check in didCommitAndDrawFrame on commit 3, | 1772 // We couldn't check in didCommitAndDrawFrame on commit 3, |
1782 // so check here. | 1773 // so check here. |
1783 EXPECT_FALSE(layer_->HaveBackingTexture()); | 1774 EXPECT_FALSE(layer_->HaveBackingTexture()); |
1784 break; | 1775 break; |
1785 case 5: | 1776 case 5: |
1786 PostEvictTextures(); | 1777 PostEvictTextures(); |
1787 break; | 1778 break; |
1788 case 6: | 1779 case 6: |
1789 // We couldn't check in didCommitAndDrawFrame on commit 5, | 1780 // We couldn't check in didCommitAndDrawFrame on commit 5, |
1790 // so check here. | 1781 // so check here. |
1791 EXPECT_FALSE(layer_->HaveBackingTexture()); | 1782 EXPECT_FALSE(layer_->HaveBackingTexture()); |
1792 PostEvictTextures(); | 1783 PostEvictTextures(); |
1793 break; | 1784 break; |
1794 default: | 1785 default: |
1795 NOTREACHED(); | 1786 NOTREACHED(); |
1796 break; | 1787 break; |
1797 } | 1788 } |
1798 } | 1789 } |
1799 | 1790 |
1800 virtual void AfterTest() override {} | 1791 void AfterTest() override {} |
1801 | 1792 |
1802 private: | 1793 private: |
1803 FakeContentLayerClient client_; | 1794 FakeContentLayerClient client_; |
1804 scoped_refptr<EvictionTestLayer> layer_; | 1795 scoped_refptr<EvictionTestLayer> layer_; |
1805 LayerTreeHostImpl* impl_for_evict_textures_; | 1796 LayerTreeHostImpl* impl_for_evict_textures_; |
1806 int num_commits_; | 1797 int num_commits_; |
1807 }; | 1798 }; |
1808 | 1799 |
1809 MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostTestEvictTextures); | 1800 MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostTestEvictTextures); |
1810 | 1801 |
1811 class LayerTreeHostTestContinuousInvalidate : public LayerTreeHostTest { | 1802 class LayerTreeHostTestContinuousInvalidate : public LayerTreeHostTest { |
1812 public: | 1803 public: |
1813 LayerTreeHostTestContinuousInvalidate() | 1804 LayerTreeHostTestContinuousInvalidate() |
1814 : num_commit_complete_(0), num_draw_layers_(0) {} | 1805 : num_commit_complete_(0), num_draw_layers_(0) {} |
1815 | 1806 |
1816 virtual void BeginTest() override { | 1807 void BeginTest() override { |
1817 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); | 1808 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); |
1818 layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10)); | 1809 layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10)); |
1819 | 1810 |
1820 content_layer_ = ContentLayer::Create(&client_); | 1811 content_layer_ = ContentLayer::Create(&client_); |
1821 content_layer_->SetBounds(gfx::Size(10, 10)); | 1812 content_layer_->SetBounds(gfx::Size(10, 10)); |
1822 content_layer_->SetPosition(gfx::PointF(0.f, 0.f)); | 1813 content_layer_->SetPosition(gfx::PointF(0.f, 0.f)); |
1823 content_layer_->SetIsDrawable(true); | 1814 content_layer_->SetIsDrawable(true); |
1824 layer_tree_host()->root_layer()->AddChild(content_layer_); | 1815 layer_tree_host()->root_layer()->AddChild(content_layer_); |
1825 | 1816 |
1826 PostSetNeedsCommitToMainThread(); | 1817 PostSetNeedsCommitToMainThread(); |
1827 } | 1818 } |
1828 | 1819 |
1829 virtual void DidCommitAndDrawFrame() override { | 1820 void DidCommitAndDrawFrame() override { |
1830 if (num_draw_layers_ == 2) | 1821 if (num_draw_layers_ == 2) |
1831 return; | 1822 return; |
1832 content_layer_->SetNeedsDisplay(); | 1823 content_layer_->SetNeedsDisplay(); |
1833 } | 1824 } |
1834 | 1825 |
1835 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 1826 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
1836 if (num_draw_layers_ == 1) | 1827 if (num_draw_layers_ == 1) |
1837 num_commit_complete_++; | 1828 num_commit_complete_++; |
1838 } | 1829 } |
1839 | 1830 |
1840 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 1831 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
1841 num_draw_layers_++; | 1832 num_draw_layers_++; |
1842 if (num_draw_layers_ == 2) | 1833 if (num_draw_layers_ == 2) |
1843 EndTest(); | 1834 EndTest(); |
1844 } | 1835 } |
1845 | 1836 |
1846 virtual void AfterTest() override { | 1837 void AfterTest() override { |
1847 // Check that we didn't commit twice between first and second draw. | 1838 // Check that we didn't commit twice between first and second draw. |
1848 EXPECT_EQ(1, num_commit_complete_); | 1839 EXPECT_EQ(1, num_commit_complete_); |
1849 } | 1840 } |
1850 | 1841 |
1851 private: | 1842 private: |
1852 FakeContentLayerClient client_; | 1843 FakeContentLayerClient client_; |
1853 scoped_refptr<Layer> content_layer_; | 1844 scoped_refptr<Layer> content_layer_; |
1854 int num_commit_complete_; | 1845 int num_commit_complete_; |
1855 int num_draw_layers_; | 1846 int num_draw_layers_; |
1856 }; | 1847 }; |
1857 | 1848 |
1858 MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostTestContinuousInvalidate); | 1849 MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostTestContinuousInvalidate); |
1859 | 1850 |
1860 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest { | 1851 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest { |
1861 public: | 1852 public: |
1862 LayerTreeHostTestDeferCommits() | 1853 LayerTreeHostTestDeferCommits() |
1863 : num_commits_deferred_(0), num_complete_commits_(0) {} | 1854 : num_commits_deferred_(0), num_complete_commits_(0) {} |
1864 | 1855 |
1865 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 1856 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
1866 | 1857 |
1867 virtual void DidDeferCommit() override { | 1858 void DidDeferCommit() override { |
1868 num_commits_deferred_++; | 1859 num_commits_deferred_++; |
1869 layer_tree_host()->SetDeferCommits(false); | 1860 layer_tree_host()->SetDeferCommits(false); |
1870 } | 1861 } |
1871 | 1862 |
1872 virtual void DidCommit() override { | 1863 void DidCommit() override { |
1873 num_complete_commits_++; | 1864 num_complete_commits_++; |
1874 switch (num_complete_commits_) { | 1865 switch (num_complete_commits_) { |
1875 case 1: | 1866 case 1: |
1876 EXPECT_EQ(0, num_commits_deferred_); | 1867 EXPECT_EQ(0, num_commits_deferred_); |
1877 layer_tree_host()->SetDeferCommits(true); | 1868 layer_tree_host()->SetDeferCommits(true); |
1878 PostSetNeedsCommitToMainThread(); | 1869 PostSetNeedsCommitToMainThread(); |
1879 break; | 1870 break; |
1880 case 2: | 1871 case 2: |
1881 EndTest(); | 1872 EndTest(); |
1882 break; | 1873 break; |
1883 default: | 1874 default: |
1884 NOTREACHED(); | 1875 NOTREACHED(); |
1885 break; | 1876 break; |
1886 } | 1877 } |
1887 } | 1878 } |
1888 | 1879 |
1889 virtual void AfterTest() override { | 1880 void AfterTest() override { |
1890 EXPECT_EQ(1, num_commits_deferred_); | 1881 EXPECT_EQ(1, num_commits_deferred_); |
1891 EXPECT_EQ(2, num_complete_commits_); | 1882 EXPECT_EQ(2, num_complete_commits_); |
1892 } | 1883 } |
1893 | 1884 |
1894 private: | 1885 private: |
1895 int num_commits_deferred_; | 1886 int num_commits_deferred_; |
1896 int num_complete_commits_; | 1887 int num_complete_commits_; |
1897 }; | 1888 }; |
1898 | 1889 |
1899 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits); | 1890 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2056 | 2047 |
2057 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted | 2048 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted |
2058 : public LayerTreeHostTest { | 2049 : public LayerTreeHostTest { |
2059 public: | 2050 public: |
2060 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted() | 2051 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted() |
2061 : root_layer_(FakeContentLayer::Create(&client_)), | 2052 : root_layer_(FakeContentLayer::Create(&client_)), |
2062 child_layer1_(FakeContentLayer::Create(&client_)), | 2053 child_layer1_(FakeContentLayer::Create(&client_)), |
2063 child_layer2_(FakeContentLayer::Create(&client_)), | 2054 child_layer2_(FakeContentLayer::Create(&client_)), |
2064 num_commits_(0) {} | 2055 num_commits_(0) {} |
2065 | 2056 |
2066 virtual void BeginTest() override { | 2057 void BeginTest() override { |
2067 layer_tree_host()->SetViewportSize(gfx::Size(100, 100)); | 2058 layer_tree_host()->SetViewportSize(gfx::Size(100, 100)); |
2068 root_layer_->SetBounds(gfx::Size(100, 100)); | 2059 root_layer_->SetBounds(gfx::Size(100, 100)); |
2069 child_layer1_->SetBounds(gfx::Size(100, 100)); | 2060 child_layer1_->SetBounds(gfx::Size(100, 100)); |
2070 child_layer2_->SetBounds(gfx::Size(100, 100)); | 2061 child_layer2_->SetBounds(gfx::Size(100, 100)); |
2071 root_layer_->AddChild(child_layer1_); | 2062 root_layer_->AddChild(child_layer1_); |
2072 root_layer_->AddChild(child_layer2_); | 2063 root_layer_->AddChild(child_layer2_); |
2073 layer_tree_host()->SetRootLayer(root_layer_); | 2064 layer_tree_host()->SetRootLayer(root_layer_); |
2074 PostSetNeedsCommitToMainThread(); | 2065 PostSetNeedsCommitToMainThread(); |
2075 } | 2066 } |
2076 | 2067 |
2077 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, | 2068 void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, |
2078 bool visible) override { | 2069 bool visible) override { |
2079 if (visible) { | 2070 if (visible) { |
2080 // One backing should remain unevicted. | 2071 // One backing should remain unevicted. |
2081 EXPECT_EQ( | 2072 EXPECT_EQ( |
2082 100u * 100u * 4u * 1u, | 2073 100u * 100u * 4u * 1u, |
2083 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); | 2074 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
2084 } else { | 2075 } else { |
2085 EXPECT_EQ( | 2076 EXPECT_EQ( |
2086 0u, layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); | 2077 0u, layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
2087 } | 2078 } |
2088 | 2079 |
2089 // Make sure that contents textures are marked as having been | 2080 // Make sure that contents textures are marked as having been |
2090 // purged. | 2081 // purged. |
2091 EXPECT_TRUE(host_impl->active_tree()->ContentsTexturesPurged()); | 2082 EXPECT_TRUE(host_impl->active_tree()->ContentsTexturesPurged()); |
2092 // End the test in this state. | 2083 // End the test in this state. |
2093 EndTest(); | 2084 EndTest(); |
2094 } | 2085 } |
2095 | 2086 |
2096 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 2087 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
2097 ++num_commits_; | 2088 ++num_commits_; |
2098 switch (num_commits_) { | 2089 switch (num_commits_) { |
2099 case 1: | 2090 case 1: |
2100 // All three backings should have memory. | 2091 // All three backings should have memory. |
2101 EXPECT_EQ( | 2092 EXPECT_EQ( |
2102 100u * 100u * 4u * 3u, | 2093 100u * 100u * 4u * 3u, |
2103 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); | 2094 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
2104 // Set a new policy that will kick out 1 of the 3 resources. | 2095 // Set a new policy that will kick out 1 of the 3 resources. |
2105 // Because a resource was evicted, a commit will be kicked off. | 2096 // Because a resource was evicted, a commit will be kicked off. |
2106 host_impl->SetMemoryPolicy( | 2097 host_impl->SetMemoryPolicy( |
(...skipping 11 matching lines...) Expand all Loading... |
2118 PostSetVisibleToMainThread(false); | 2109 PostSetVisibleToMainThread(false); |
2119 break; | 2110 break; |
2120 default: | 2111 default: |
2121 // No further commits should happen because this is not visible | 2112 // No further commits should happen because this is not visible |
2122 // anymore. | 2113 // anymore. |
2123 NOTREACHED(); | 2114 NOTREACHED(); |
2124 break; | 2115 break; |
2125 } | 2116 } |
2126 } | 2117 } |
2127 | 2118 |
2128 virtual void AfterTest() override {} | 2119 void AfterTest() override {} |
2129 | 2120 |
2130 private: | 2121 private: |
2131 FakeContentLayerClient client_; | 2122 FakeContentLayerClient client_; |
2132 scoped_refptr<FakeContentLayer> root_layer_; | 2123 scoped_refptr<FakeContentLayer> root_layer_; |
2133 scoped_refptr<FakeContentLayer> child_layer1_; | 2124 scoped_refptr<FakeContentLayer> child_layer1_; |
2134 scoped_refptr<FakeContentLayer> child_layer2_; | 2125 scoped_refptr<FakeContentLayer> child_layer2_; |
2135 int num_commits_; | 2126 int num_commits_; |
2136 }; | 2127 }; |
2137 | 2128 |
2138 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( | 2129 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( |
2139 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted); | 2130 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted); |
2140 | 2131 |
2141 class LayerTreeHostTestLCDNotification : public LayerTreeHostTest { | 2132 class LayerTreeHostTestLCDNotification : public LayerTreeHostTest { |
2142 public: | 2133 public: |
2143 class NotificationClient : public ContentLayerClient { | 2134 class NotificationClient : public ContentLayerClient { |
2144 public: | 2135 public: |
2145 NotificationClient() | 2136 NotificationClient() |
2146 : layer_(0), paint_count_(0), lcd_notification_count_(0) {} | 2137 : layer_(0), paint_count_(0), lcd_notification_count_(0) {} |
2147 | 2138 |
2148 void set_layer(Layer* layer) { layer_ = layer; } | 2139 void set_layer(Layer* layer) { layer_ = layer; } |
2149 int paint_count() const { return paint_count_; } | 2140 int paint_count() const { return paint_count_; } |
2150 int lcd_notification_count() const { return lcd_notification_count_; } | 2141 int lcd_notification_count() const { return lcd_notification_count_; } |
2151 | 2142 |
2152 virtual void PaintContents( | 2143 void PaintContents( |
2153 SkCanvas* canvas, | 2144 SkCanvas* canvas, |
2154 const gfx::Rect& clip, | 2145 const gfx::Rect& clip, |
2155 ContentLayerClient::GraphicsContextStatus gc_status) override { | 2146 ContentLayerClient::GraphicsContextStatus gc_status) override { |
2156 ++paint_count_; | 2147 ++paint_count_; |
2157 } | 2148 } |
2158 virtual void DidChangeLayerCanUseLCDText() override { | 2149 void DidChangeLayerCanUseLCDText() override { |
2159 ++lcd_notification_count_; | 2150 ++lcd_notification_count_; |
2160 layer_->SetNeedsDisplay(); | 2151 layer_->SetNeedsDisplay(); |
2161 } | 2152 } |
2162 virtual bool FillsBoundsCompletely() const override { return false; } | 2153 bool FillsBoundsCompletely() const override { return false; } |
2163 | 2154 |
2164 private: | 2155 private: |
2165 Layer* layer_; | 2156 Layer* layer_; |
2166 int paint_count_; | 2157 int paint_count_; |
2167 int lcd_notification_count_; | 2158 int lcd_notification_count_; |
2168 }; | 2159 }; |
2169 | 2160 |
2170 virtual void SetupTree() override { | 2161 void SetupTree() override { |
2171 scoped_refptr<Layer> root_layer; | 2162 scoped_refptr<Layer> root_layer; |
2172 if (layer_tree_host()->settings().impl_side_painting) | 2163 if (layer_tree_host()->settings().impl_side_painting) |
2173 root_layer = PictureLayer::Create(&client_); | 2164 root_layer = PictureLayer::Create(&client_); |
2174 else | 2165 else |
2175 root_layer = ContentLayer::Create(&client_); | 2166 root_layer = ContentLayer::Create(&client_); |
2176 root_layer->SetIsDrawable(true); | 2167 root_layer->SetIsDrawable(true); |
2177 root_layer->SetBounds(gfx::Size(1, 1)); | 2168 root_layer->SetBounds(gfx::Size(1, 1)); |
2178 | 2169 |
2179 layer_tree_host()->SetRootLayer(root_layer); | 2170 layer_tree_host()->SetRootLayer(root_layer); |
2180 client_.set_layer(root_layer.get()); | 2171 client_.set_layer(root_layer.get()); |
2181 | 2172 |
2182 // The expecations are based on the assumption that the default | 2173 // The expecations are based on the assumption that the default |
2183 // LCD settings are: | 2174 // LCD settings are: |
2184 EXPECT_TRUE(layer_tree_host()->settings().can_use_lcd_text); | 2175 EXPECT_TRUE(layer_tree_host()->settings().can_use_lcd_text); |
2185 EXPECT_FALSE(root_layer->can_use_lcd_text()); | 2176 EXPECT_FALSE(root_layer->can_use_lcd_text()); |
2186 | 2177 |
2187 LayerTreeHostTest::SetupTree(); | 2178 LayerTreeHostTest::SetupTree(); |
2188 } | 2179 } |
2189 | 2180 |
2190 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2181 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2191 virtual void AfterTest() override {} | 2182 void AfterTest() override {} |
2192 | 2183 |
2193 virtual void DidCommit() override { | 2184 void DidCommit() override { |
2194 switch (layer_tree_host()->source_frame_number()) { | 2185 switch (layer_tree_host()->source_frame_number()) { |
2195 case 1: | 2186 case 1: |
2196 // The first update consists of one LCD notification and one paint. | 2187 // The first update consists of one LCD notification and one paint. |
2197 EXPECT_EQ(1, client_.lcd_notification_count()); | 2188 EXPECT_EQ(1, client_.lcd_notification_count()); |
2198 EXPECT_EQ(1, client_.paint_count()); | 2189 EXPECT_EQ(1, client_.paint_count()); |
2199 // LCD text must have been enabled on the layer. | 2190 // LCD text must have been enabled on the layer. |
2200 EXPECT_TRUE(layer_tree_host()->root_layer()->can_use_lcd_text()); | 2191 EXPECT_TRUE(layer_tree_host()->root_layer()->can_use_lcd_text()); |
2201 PostSetNeedsCommitToMainThread(); | 2192 PostSetNeedsCommitToMainThread(); |
2202 break; | 2193 break; |
2203 case 2: | 2194 case 2: |
(...skipping 24 matching lines...) Expand all Loading... |
2228 | 2219 |
2229 private: | 2220 private: |
2230 NotificationClient client_; | 2221 NotificationClient client_; |
2231 }; | 2222 }; |
2232 | 2223 |
2233 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestLCDNotification); | 2224 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestLCDNotification); |
2234 | 2225 |
2235 // Verify that the BeginFrame notification is used to initiate rendering. | 2226 // Verify that the BeginFrame notification is used to initiate rendering. |
2236 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest { | 2227 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest { |
2237 public: | 2228 public: |
2238 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2229 void InitializeSettings(LayerTreeSettings* settings) override { |
2239 settings->begin_frame_scheduling_enabled = true; | 2230 settings->begin_frame_scheduling_enabled = true; |
2240 } | 2231 } |
2241 | 2232 |
2242 virtual void BeginTest() override { | 2233 void BeginTest() override { |
2243 // This will trigger a SetNeedsBeginFrame which will trigger a | 2234 // This will trigger a SetNeedsBeginFrame which will trigger a |
2244 // BeginFrame. | 2235 // BeginFrame. |
2245 PostSetNeedsCommitToMainThread(); | 2236 PostSetNeedsCommitToMainThread(); |
2246 } | 2237 } |
2247 | 2238 |
2248 virtual DrawResult PrepareToDrawOnThread( | 2239 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
2249 LayerTreeHostImpl* host_impl, | 2240 LayerTreeHostImpl::FrameData* frame, |
2250 LayerTreeHostImpl::FrameData* frame, | 2241 DrawResult draw_result) override { |
2251 DrawResult draw_result) override { | |
2252 EndTest(); | 2242 EndTest(); |
2253 return DRAW_SUCCESS; | 2243 return DRAW_SUCCESS; |
2254 } | 2244 } |
2255 | 2245 |
2256 virtual void AfterTest() override {} | 2246 void AfterTest() override {} |
2257 | 2247 |
2258 private: | 2248 private: |
2259 base::TimeTicks frame_time_; | 2249 base::TimeTicks frame_time_; |
2260 }; | 2250 }; |
2261 | 2251 |
2262 MULTI_THREAD_TEST_F(LayerTreeHostTestBeginFrameNotification); | 2252 MULTI_THREAD_TEST_F(LayerTreeHostTestBeginFrameNotification); |
2263 | 2253 |
2264 class LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled | 2254 class LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled |
2265 : public LayerTreeHostTest { | 2255 : public LayerTreeHostTest { |
2266 public: | 2256 public: |
2267 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2257 void InitializeSettings(LayerTreeSettings* settings) override { |
2268 settings->begin_frame_scheduling_enabled = true; | 2258 settings->begin_frame_scheduling_enabled = true; |
2269 settings->using_synchronous_renderer_compositor = true; | 2259 settings->using_synchronous_renderer_compositor = true; |
2270 } | 2260 } |
2271 | 2261 |
2272 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2262 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2273 | 2263 |
2274 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 2264 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
2275 // The BeginFrame notification is turned off now but will get enabled | 2265 // The BeginFrame notification is turned off now but will get enabled |
2276 // once we return. End test while it's enabled. | 2266 // once we return. End test while it's enabled. |
2277 ImplThreadTaskRunner()->PostTask( | 2267 ImplThreadTaskRunner()->PostTask( |
2278 FROM_HERE, | 2268 FROM_HERE, |
2279 base::Bind(&LayerTreeHostTestBeginFrameNotification::EndTest, | 2269 base::Bind(&LayerTreeHostTestBeginFrameNotification::EndTest, |
2280 base::Unretained(this))); | 2270 base::Unretained(this))); |
2281 } | 2271 } |
2282 | 2272 |
2283 virtual void AfterTest() override {} | 2273 void AfterTest() override {} |
2284 }; | 2274 }; |
2285 | 2275 |
2286 MULTI_THREAD_TEST_F( | 2276 MULTI_THREAD_TEST_F( |
2287 LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled); | 2277 LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled); |
2288 | 2278 |
2289 class LayerTreeHostTestAbortedCommitDoesntStall : public LayerTreeHostTest { | 2279 class LayerTreeHostTestAbortedCommitDoesntStall : public LayerTreeHostTest { |
2290 protected: | 2280 protected: |
2291 LayerTreeHostTestAbortedCommitDoesntStall() | 2281 LayerTreeHostTestAbortedCommitDoesntStall() |
2292 : commit_count_(0), commit_abort_count_(0), commit_complete_count_(0) {} | 2282 : commit_count_(0), commit_abort_count_(0), commit_complete_count_(0) {} |
2293 | 2283 |
2294 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2284 void InitializeSettings(LayerTreeSettings* settings) override { |
2295 settings->begin_frame_scheduling_enabled = true; | 2285 settings->begin_frame_scheduling_enabled = true; |
2296 } | 2286 } |
2297 | 2287 |
2298 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2288 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2299 | 2289 |
2300 virtual void DidCommit() override { | 2290 void DidCommit() override { |
2301 commit_count_++; | 2291 commit_count_++; |
2302 if (commit_count_ == 4) { | 2292 if (commit_count_ == 4) { |
2303 // After two aborted commits, request a real commit now to make sure a | 2293 // After two aborted commits, request a real commit now to make sure a |
2304 // real commit following an aborted commit will still complete and | 2294 // real commit following an aborted commit will still complete and |
2305 // end the test even when the Impl thread is idle. | 2295 // end the test even when the Impl thread is idle. |
2306 layer_tree_host()->SetNeedsCommit(); | 2296 layer_tree_host()->SetNeedsCommit(); |
2307 } | 2297 } |
2308 } | 2298 } |
2309 | 2299 |
2310 virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, | 2300 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
2311 bool did_handle) override { | 2301 bool did_handle) override { |
2312 commit_abort_count_++; | 2302 commit_abort_count_++; |
2313 // Initiate another abortable commit. | 2303 // Initiate another abortable commit. |
2314 host_impl->SetNeedsCommit(); | 2304 host_impl->SetNeedsCommit(); |
2315 } | 2305 } |
2316 | 2306 |
2317 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 2307 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
2318 commit_complete_count_++; | 2308 commit_complete_count_++; |
2319 if (commit_complete_count_ == 1) { | 2309 if (commit_complete_count_ == 1) { |
2320 // Initiate an abortable commit after the first commit. | 2310 // Initiate an abortable commit after the first commit. |
2321 host_impl->SetNeedsCommit(); | 2311 host_impl->SetNeedsCommit(); |
2322 } else { | 2312 } else { |
2323 EndTest(); | 2313 EndTest(); |
2324 } | 2314 } |
2325 } | 2315 } |
2326 | 2316 |
2327 virtual void AfterTest() override { | 2317 void AfterTest() override { |
2328 EXPECT_EQ(commit_count_, 5); | 2318 EXPECT_EQ(commit_count_, 5); |
2329 EXPECT_EQ(commit_abort_count_, 3); | 2319 EXPECT_EQ(commit_abort_count_, 3); |
2330 EXPECT_EQ(commit_complete_count_, 2); | 2320 EXPECT_EQ(commit_complete_count_, 2); |
2331 } | 2321 } |
2332 | 2322 |
2333 int commit_count_; | 2323 int commit_count_; |
2334 int commit_abort_count_; | 2324 int commit_abort_count_; |
2335 int commit_complete_count_; | 2325 int commit_complete_count_; |
2336 }; | 2326 }; |
2337 | 2327 |
2338 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor | 2328 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor |
2339 : public LayerTreeHostTestAbortedCommitDoesntStall { | 2329 : public LayerTreeHostTestAbortedCommitDoesntStall { |
2340 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2330 void InitializeSettings(LayerTreeSettings* settings) override { |
2341 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); | 2331 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); |
2342 settings->using_synchronous_renderer_compositor = true; | 2332 settings->using_synchronous_renderer_compositor = true; |
2343 } | 2333 } |
2344 }; | 2334 }; |
2345 | 2335 |
2346 MULTI_THREAD_TEST_F( | 2336 MULTI_THREAD_TEST_F( |
2347 LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor); | 2337 LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor); |
2348 | 2338 |
2349 class LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync | 2339 class LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync |
2350 : public LayerTreeHostTestAbortedCommitDoesntStall { | 2340 : public LayerTreeHostTestAbortedCommitDoesntStall { |
2351 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2341 void InitializeSettings(LayerTreeSettings* settings) override { |
2352 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); | 2342 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); |
2353 settings->throttle_frame_production = false; | 2343 settings->throttle_frame_production = false; |
2354 } | 2344 } |
2355 }; | 2345 }; |
2356 | 2346 |
2357 MULTI_THREAD_TEST_F(LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync); | 2347 MULTI_THREAD_TEST_F(LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync); |
2358 | 2348 |
2359 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation | 2349 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation |
2360 : public LayerTreeHostTest { | 2350 : public LayerTreeHostTest { |
2361 protected: | 2351 protected: |
2362 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2352 void InitializeSettings(LayerTreeSettings* settings) override { |
2363 settings->impl_side_painting = true; | 2353 settings->impl_side_painting = true; |
2364 } | 2354 } |
2365 | 2355 |
2366 virtual void SetupTree() override { | 2356 void SetupTree() override { |
2367 LayerTreeHostTest::SetupTree(); | 2357 LayerTreeHostTest::SetupTree(); |
2368 | 2358 |
2369 scoped_refptr<Layer> layer = PictureLayer::Create(&client_); | 2359 scoped_refptr<Layer> layer = PictureLayer::Create(&client_); |
2370 layer->SetTransform(gfx::Transform(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); | 2360 layer->SetTransform(gfx::Transform(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); |
2371 layer->SetBounds(gfx::Size(10, 10)); | 2361 layer->SetBounds(gfx::Size(10, 10)); |
2372 layer_tree_host()->root_layer()->AddChild(layer); | 2362 layer_tree_host()->root_layer()->AddChild(layer); |
2373 } | 2363 } |
2374 | 2364 |
2375 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2365 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2376 | 2366 |
2377 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 2367 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
2378 EndTest(); | 2368 EndTest(); |
2379 } | 2369 } |
2380 | 2370 |
2381 virtual void AfterTest() override {} | 2371 void AfterTest() override {} |
2382 | 2372 |
2383 FakeContentLayerClient client_; | 2373 FakeContentLayerClient client_; |
2384 }; | 2374 }; |
2385 | 2375 |
2386 MULTI_THREAD_TEST_F( | 2376 MULTI_THREAD_TEST_F( |
2387 LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation); | 2377 LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation); |
2388 | 2378 |
2389 class LayerTreeHostTestChangeLayerPropertiesInPaintContents | 2379 class LayerTreeHostTestChangeLayerPropertiesInPaintContents |
2390 : public LayerTreeHostTest { | 2380 : public LayerTreeHostTest { |
2391 public: | 2381 public: |
2392 class SetBoundsClient : public ContentLayerClient { | 2382 class SetBoundsClient : public ContentLayerClient { |
2393 public: | 2383 public: |
2394 SetBoundsClient() : layer_(0) {} | 2384 SetBoundsClient() : layer_(0) {} |
2395 | 2385 |
2396 void set_layer(Layer* layer) { layer_ = layer; } | 2386 void set_layer(Layer* layer) { layer_ = layer; } |
2397 | 2387 |
2398 virtual void PaintContents( | 2388 void PaintContents( |
2399 SkCanvas* canvas, | 2389 SkCanvas* canvas, |
2400 const gfx::Rect& clip, | 2390 const gfx::Rect& clip, |
2401 ContentLayerClient::GraphicsContextStatus gc_status) override { | 2391 ContentLayerClient::GraphicsContextStatus gc_status) override { |
2402 layer_->SetBounds(gfx::Size(2, 2)); | 2392 layer_->SetBounds(gfx::Size(2, 2)); |
2403 } | 2393 } |
2404 | 2394 |
2405 virtual void DidChangeLayerCanUseLCDText() override {} | 2395 void DidChangeLayerCanUseLCDText() override {} |
2406 | 2396 |
2407 virtual bool FillsBoundsCompletely() const override { return false; } | 2397 bool FillsBoundsCompletely() const override { return false; } |
2408 | 2398 |
2409 private: | 2399 private: |
2410 Layer* layer_; | 2400 Layer* layer_; |
2411 }; | 2401 }; |
2412 | 2402 |
2413 LayerTreeHostTestChangeLayerPropertiesInPaintContents() : num_commits_(0) {} | 2403 LayerTreeHostTestChangeLayerPropertiesInPaintContents() : num_commits_(0) {} |
2414 | 2404 |
2415 virtual void SetupTree() override { | 2405 void SetupTree() override { |
2416 if (layer_tree_host()->settings().impl_side_painting) { | 2406 if (layer_tree_host()->settings().impl_side_painting) { |
2417 scoped_refptr<PictureLayer> root_layer = PictureLayer::Create(&client_); | 2407 scoped_refptr<PictureLayer> root_layer = PictureLayer::Create(&client_); |
2418 layer_tree_host()->SetRootLayer(root_layer); | 2408 layer_tree_host()->SetRootLayer(root_layer); |
2419 } else { | 2409 } else { |
2420 scoped_refptr<ContentLayer> root_layer = ContentLayer::Create(&client_); | 2410 scoped_refptr<ContentLayer> root_layer = ContentLayer::Create(&client_); |
2421 layer_tree_host()->SetRootLayer(root_layer); | 2411 layer_tree_host()->SetRootLayer(root_layer); |
2422 } | 2412 } |
2423 Layer* root_layer = layer_tree_host()->root_layer(); | 2413 Layer* root_layer = layer_tree_host()->root_layer(); |
2424 root_layer->SetIsDrawable(true); | 2414 root_layer->SetIsDrawable(true); |
2425 root_layer->SetBounds(gfx::Size(1, 1)); | 2415 root_layer->SetBounds(gfx::Size(1, 1)); |
2426 | 2416 |
2427 client_.set_layer(root_layer); | 2417 client_.set_layer(root_layer); |
2428 | 2418 |
2429 LayerTreeHostTest::SetupTree(); | 2419 LayerTreeHostTest::SetupTree(); |
2430 } | 2420 } |
2431 | 2421 |
2432 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2422 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2433 virtual void AfterTest() override {} | 2423 void AfterTest() override {} |
2434 | 2424 |
2435 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 2425 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
2436 num_commits_++; | 2426 num_commits_++; |
2437 if (num_commits_ == 1) { | 2427 if (num_commits_ == 1) { |
2438 LayerImpl* root_layer = host_impl->active_tree()->root_layer(); | 2428 LayerImpl* root_layer = host_impl->active_tree()->root_layer(); |
2439 EXPECT_SIZE_EQ(gfx::Size(1, 1), root_layer->bounds()); | 2429 EXPECT_SIZE_EQ(gfx::Size(1, 1), root_layer->bounds()); |
2440 } else { | 2430 } else { |
2441 LayerImpl* root_layer = host_impl->active_tree()->root_layer(); | 2431 LayerImpl* root_layer = host_impl->active_tree()->root_layer(); |
2442 EXPECT_SIZE_EQ(gfx::Size(2, 2), root_layer->bounds()); | 2432 EXPECT_SIZE_EQ(gfx::Size(2, 2), root_layer->bounds()); |
2443 EndTest(); | 2433 EndTest(); |
2444 } | 2434 } |
2445 } | 2435 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2477 GLsizei count, | 2467 GLsizei count, |
2478 GLenum type, | 2468 GLenum type, |
2479 GLintptr offset)); | 2469 GLintptr offset)); |
2480 MOCK_METHOD1(deleteTexture, void(GLenum texture)); | 2470 MOCK_METHOD1(deleteTexture, void(GLenum texture)); |
2481 MOCK_METHOD2(produceTextureCHROMIUM, | 2471 MOCK_METHOD2(produceTextureCHROMIUM, |
2482 void(GLenum target, const GLbyte* mailbox)); | 2472 void(GLenum target, const GLbyte* mailbox)); |
2483 }; | 2473 }; |
2484 | 2474 |
2485 class LayerTreeHostTestIOSurfaceDrawing : public LayerTreeHostTest { | 2475 class LayerTreeHostTestIOSurfaceDrawing : public LayerTreeHostTest { |
2486 protected: | 2476 protected: |
2487 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback) | 2477 scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface( |
2488 override { | 2478 bool fallback) override { |
2489 scoped_ptr<MockIOSurfaceWebGraphicsContext3D> mock_context_owned( | 2479 scoped_ptr<MockIOSurfaceWebGraphicsContext3D> mock_context_owned( |
2490 new MockIOSurfaceWebGraphicsContext3D); | 2480 new MockIOSurfaceWebGraphicsContext3D); |
2491 mock_context_ = mock_context_owned.get(); | 2481 mock_context_ = mock_context_owned.get(); |
2492 | 2482 |
2493 if (delegating_renderer()) | 2483 if (delegating_renderer()) |
2494 return FakeOutputSurface::CreateDelegating3d(mock_context_owned.Pass()); | 2484 return FakeOutputSurface::CreateDelegating3d(mock_context_owned.Pass()); |
2495 else | 2485 else |
2496 return FakeOutputSurface::Create3d(mock_context_owned.Pass()); | 2486 return FakeOutputSurface::Create3d(mock_context_owned.Pass()); |
2497 } | 2487 } |
2498 | 2488 |
2499 virtual void SetupTree() override { | 2489 void SetupTree() override { |
2500 LayerTreeHostTest::SetupTree(); | 2490 LayerTreeHostTest::SetupTree(); |
2501 | 2491 |
2502 layer_tree_host()->root_layer()->SetIsDrawable(false); | 2492 layer_tree_host()->root_layer()->SetIsDrawable(false); |
2503 | 2493 |
2504 io_surface_id_ = 9; | 2494 io_surface_id_ = 9; |
2505 io_surface_size_ = gfx::Size(6, 7); | 2495 io_surface_size_ = gfx::Size(6, 7); |
2506 | 2496 |
2507 scoped_refptr<IOSurfaceLayer> io_surface_layer = IOSurfaceLayer::Create(); | 2497 scoped_refptr<IOSurfaceLayer> io_surface_layer = IOSurfaceLayer::Create(); |
2508 io_surface_layer->SetBounds(gfx::Size(10, 10)); | 2498 io_surface_layer->SetBounds(gfx::Size(10, 10)); |
2509 io_surface_layer->SetIsDrawable(true); | 2499 io_surface_layer->SetIsDrawable(true); |
2510 io_surface_layer->SetContentsOpaque(true); | 2500 io_surface_layer->SetContentsOpaque(true); |
2511 io_surface_layer->SetIOSurfaceProperties(io_surface_id_, io_surface_size_); | 2501 io_surface_layer->SetIOSurfaceProperties(io_surface_id_, io_surface_size_); |
2512 layer_tree_host()->root_layer()->AddChild(io_surface_layer); | 2502 layer_tree_host()->root_layer()->AddChild(io_surface_layer); |
2513 } | 2503 } |
2514 | 2504 |
2515 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2505 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2516 | 2506 |
2517 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 2507 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
2518 EXPECT_EQ(0u, host_impl->resource_provider()->num_resources()); | 2508 EXPECT_EQ(0u, host_impl->resource_provider()->num_resources()); |
2519 // In WillDraw, the IOSurfaceLayer sets up the io surface texture. | 2509 // In WillDraw, the IOSurfaceLayer sets up the io surface texture. |
2520 | 2510 |
2521 EXPECT_CALL(*mock_context_, activeTexture(_)).Times(0); | 2511 EXPECT_CALL(*mock_context_, activeTexture(_)).Times(0); |
2522 EXPECT_CALL(*mock_context_, bindTexture(GL_TEXTURE_RECTANGLE_ARB, 1)) | 2512 EXPECT_CALL(*mock_context_, bindTexture(GL_TEXTURE_RECTANGLE_ARB, 1)) |
2523 .Times(AtLeast(1)); | 2513 .Times(AtLeast(1)); |
2524 EXPECT_CALL(*mock_context_, | 2514 EXPECT_CALL(*mock_context_, |
2525 texParameteri( | 2515 texParameteri( |
2526 GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR)) | 2516 GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR)) |
2527 .Times(1); | 2517 .Times(1); |
(...skipping 17 matching lines...) Expand all Loading... |
2545 EXPECT_CALL(*mock_context_, | 2535 EXPECT_CALL(*mock_context_, |
2546 texImageIOSurface2DCHROMIUM(GL_TEXTURE_RECTANGLE_ARB, | 2536 texImageIOSurface2DCHROMIUM(GL_TEXTURE_RECTANGLE_ARB, |
2547 io_surface_size_.width(), | 2537 io_surface_size_.width(), |
2548 io_surface_size_.height(), | 2538 io_surface_size_.height(), |
2549 io_surface_id_, | 2539 io_surface_id_, |
2550 0)).Times(1); | 2540 0)).Times(1); |
2551 | 2541 |
2552 EXPECT_CALL(*mock_context_, bindTexture(_, 0)).Times(AnyNumber()); | 2542 EXPECT_CALL(*mock_context_, bindTexture(_, 0)).Times(AnyNumber()); |
2553 } | 2543 } |
2554 | 2544 |
2555 virtual DrawResult PrepareToDrawOnThread( | 2545 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
2556 LayerTreeHostImpl* host_impl, | 2546 LayerTreeHostImpl::FrameData* frame, |
2557 LayerTreeHostImpl::FrameData* frame, | 2547 DrawResult draw_result) override { |
2558 DrawResult draw_result) override { | |
2559 Mock::VerifyAndClearExpectations(&mock_context_); | 2548 Mock::VerifyAndClearExpectations(&mock_context_); |
2560 ResourceProvider* resource_provider = host_impl->resource_provider(); | 2549 ResourceProvider* resource_provider = host_impl->resource_provider(); |
2561 EXPECT_EQ(1u, resource_provider->num_resources()); | 2550 EXPECT_EQ(1u, resource_provider->num_resources()); |
2562 CHECK_EQ(1u, frame->render_passes.size()); | 2551 CHECK_EQ(1u, frame->render_passes.size()); |
2563 CHECK_LE(1u, frame->render_passes[0]->quad_list.size()); | 2552 CHECK_LE(1u, frame->render_passes[0]->quad_list.size()); |
2564 const DrawQuad* quad = frame->render_passes[0]->quad_list.front(); | 2553 const DrawQuad* quad = frame->render_passes[0]->quad_list.front(); |
2565 CHECK_EQ(DrawQuad::IO_SURFACE_CONTENT, quad->material); | 2554 CHECK_EQ(DrawQuad::IO_SURFACE_CONTENT, quad->material); |
2566 const IOSurfaceDrawQuad* io_surface_draw_quad = | 2555 const IOSurfaceDrawQuad* io_surface_draw_quad = |
2567 IOSurfaceDrawQuad::MaterialCast(quad); | 2556 IOSurfaceDrawQuad::MaterialCast(quad); |
2568 EXPECT_SIZE_EQ(io_surface_size_, io_surface_draw_quad->io_surface_size); | 2557 EXPECT_SIZE_EQ(io_surface_size_, io_surface_draw_quad->io_surface_size); |
(...skipping 11 matching lines...) Expand all Loading... |
2580 } else { | 2569 } else { |
2581 // The io surface layer's texture is drawn. | 2570 // The io surface layer's texture is drawn. |
2582 EXPECT_CALL(*mock_context_, activeTexture(GL_TEXTURE0)).Times(AtLeast(1)); | 2571 EXPECT_CALL(*mock_context_, activeTexture(GL_TEXTURE0)).Times(AtLeast(1)); |
2583 EXPECT_CALL(*mock_context_, drawElements(GL_TRIANGLES, 6, _, _)) | 2572 EXPECT_CALL(*mock_context_, drawElements(GL_TRIANGLES, 6, _, _)) |
2584 .Times(AtLeast(1)); | 2573 .Times(AtLeast(1)); |
2585 } | 2574 } |
2586 | 2575 |
2587 return draw_result; | 2576 return draw_result; |
2588 } | 2577 } |
2589 | 2578 |
2590 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 2579 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
2591 Mock::VerifyAndClearExpectations(&mock_context_); | 2580 Mock::VerifyAndClearExpectations(&mock_context_); |
2592 | 2581 |
2593 EXPECT_CALL(*mock_context_, deleteTexture(1)).Times(AtLeast(1)); | 2582 EXPECT_CALL(*mock_context_, deleteTexture(1)).Times(AtLeast(1)); |
2594 EndTest(); | 2583 EndTest(); |
2595 } | 2584 } |
2596 | 2585 |
2597 virtual void AfterTest() override {} | 2586 void AfterTest() override {} |
2598 | 2587 |
2599 int io_surface_id_; | 2588 int io_surface_id_; |
2600 MockIOSurfaceWebGraphicsContext3D* mock_context_; | 2589 MockIOSurfaceWebGraphicsContext3D* mock_context_; |
2601 gfx::Size io_surface_size_; | 2590 gfx::Size io_surface_size_; |
2602 }; | 2591 }; |
2603 | 2592 |
2604 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestIOSurfaceDrawing); | 2593 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestIOSurfaceDrawing); |
2605 | 2594 |
2606 class LayerTreeHostTestNumFramesPending : public LayerTreeHostTest { | 2595 class LayerTreeHostTestNumFramesPending : public LayerTreeHostTest { |
2607 public: | 2596 public: |
2608 virtual void BeginTest() override { | 2597 void BeginTest() override { |
2609 frame_ = 0; | 2598 frame_ = 0; |
2610 PostSetNeedsCommitToMainThread(); | 2599 PostSetNeedsCommitToMainThread(); |
2611 } | 2600 } |
2612 | 2601 |
2613 // Round 1: commit + draw | 2602 // Round 1: commit + draw |
2614 // Round 2: commit only (no draw/swap) | 2603 // Round 2: commit only (no draw/swap) |
2615 // Round 3: draw only (no commit) | 2604 // Round 3: draw only (no commit) |
2616 | 2605 |
2617 virtual void DidCommit() override { | 2606 void DidCommit() override { |
2618 int commit = layer_tree_host()->source_frame_number(); | 2607 int commit = layer_tree_host()->source_frame_number(); |
2619 switch (commit) { | 2608 switch (commit) { |
2620 case 2: | 2609 case 2: |
2621 // Round 2 done. | 2610 // Round 2 done. |
2622 EXPECT_EQ(1, frame_); | 2611 EXPECT_EQ(1, frame_); |
2623 layer_tree_host()->SetNeedsRedraw(); | 2612 layer_tree_host()->SetNeedsRedraw(); |
2624 break; | 2613 break; |
2625 } | 2614 } |
2626 } | 2615 } |
2627 | 2616 |
2628 virtual void DidCompleteSwapBuffers() override { | 2617 void DidCompleteSwapBuffers() override { |
2629 int commit = layer_tree_host()->source_frame_number(); | 2618 int commit = layer_tree_host()->source_frame_number(); |
2630 ++frame_; | 2619 ++frame_; |
2631 switch (frame_) { | 2620 switch (frame_) { |
2632 case 1: | 2621 case 1: |
2633 // Round 1 done. | 2622 // Round 1 done. |
2634 EXPECT_EQ(1, commit); | 2623 EXPECT_EQ(1, commit); |
2635 layer_tree_host()->SetNeedsCommit(); | 2624 layer_tree_host()->SetNeedsCommit(); |
2636 break; | 2625 break; |
2637 case 2: | 2626 case 2: |
2638 // Round 3 done. | 2627 // Round 3 done. |
2639 EXPECT_EQ(2, commit); | 2628 EXPECT_EQ(2, commit); |
2640 EndTest(); | 2629 EndTest(); |
2641 break; | 2630 break; |
2642 } | 2631 } |
2643 } | 2632 } |
2644 | 2633 |
2645 virtual void AfterTest() override {} | 2634 void AfterTest() override {} |
2646 | 2635 |
2647 protected: | 2636 protected: |
2648 int frame_; | 2637 int frame_; |
2649 }; | 2638 }; |
2650 | 2639 |
2651 // Flaky on all platforms: http://crbug.com/327498 | 2640 // Flaky on all platforms: http://crbug.com/327498 |
2652 TEST_F(LayerTreeHostTestNumFramesPending, DISABLED_DelegatingRenderer) { | 2641 TEST_F(LayerTreeHostTestNumFramesPending, DISABLED_DelegatingRenderer) { |
2653 RunTest(true, true, true); | 2642 RunTest(true, true, true); |
2654 } | 2643 } |
2655 | 2644 |
2656 TEST_F(LayerTreeHostTestNumFramesPending, DISABLED_GLRenderer) { | 2645 TEST_F(LayerTreeHostTestNumFramesPending, DISABLED_GLRenderer) { |
2657 RunTest(true, false, true); | 2646 RunTest(true, false, true); |
2658 } | 2647 } |
2659 | 2648 |
2660 class LayerTreeHostTestDeferredInitialize : public LayerTreeHostTest { | 2649 class LayerTreeHostTestDeferredInitialize : public LayerTreeHostTest { |
2661 public: | 2650 public: |
2662 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2651 void InitializeSettings(LayerTreeSettings* settings) override { |
2663 // PictureLayer can only be used with impl side painting enabled. | 2652 // PictureLayer can only be used with impl side painting enabled. |
2664 settings->impl_side_painting = true; | 2653 settings->impl_side_painting = true; |
2665 } | 2654 } |
2666 | 2655 |
2667 virtual void SetupTree() override { | 2656 void SetupTree() override { |
2668 layer_ = FakePictureLayer::Create(&client_); | 2657 layer_ = FakePictureLayer::Create(&client_); |
2669 // Force commits to not be aborted so new frames get drawn, otherwise | 2658 // Force commits to not be aborted so new frames get drawn, otherwise |
2670 // the renderer gets deferred initialized but nothing new needs drawing. | 2659 // the renderer gets deferred initialized but nothing new needs drawing. |
2671 layer_->set_always_update_resources(true); | 2660 layer_->set_always_update_resources(true); |
2672 layer_tree_host()->SetRootLayer(layer_); | 2661 layer_tree_host()->SetRootLayer(layer_); |
2673 LayerTreeHostTest::SetupTree(); | 2662 LayerTreeHostTest::SetupTree(); |
2674 } | 2663 } |
2675 | 2664 |
2676 virtual void BeginTest() override { | 2665 void BeginTest() override { |
2677 did_initialize_gl_ = false; | 2666 did_initialize_gl_ = false; |
2678 did_release_gl_ = false; | 2667 did_release_gl_ = false; |
2679 last_source_frame_number_drawn_ = -1; // Never drawn. | 2668 last_source_frame_number_drawn_ = -1; // Never drawn. |
2680 PostSetNeedsCommitToMainThread(); | 2669 PostSetNeedsCommitToMainThread(); |
2681 } | 2670 } |
2682 | 2671 |
2683 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback) | 2672 scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface( |
2684 override { | 2673 bool fallback) override { |
2685 scoped_ptr<TestWebGraphicsContext3D> context3d( | 2674 scoped_ptr<TestWebGraphicsContext3D> context3d( |
2686 TestWebGraphicsContext3D::Create()); | 2675 TestWebGraphicsContext3D::Create()); |
2687 | 2676 |
2688 return FakeOutputSurface::CreateDeferredGL( | 2677 return FakeOutputSurface::CreateDeferredGL( |
2689 scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice), | 2678 scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice), |
2690 delegating_renderer()); | 2679 delegating_renderer()); |
2691 } | 2680 } |
2692 | 2681 |
2693 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 2682 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
2694 ASSERT_TRUE(host_impl->RootLayer()); | 2683 ASSERT_TRUE(host_impl->RootLayer()); |
2695 FakePictureLayerImpl* layer_impl = | 2684 FakePictureLayerImpl* layer_impl = |
2696 static_cast<FakePictureLayerImpl*>(host_impl->RootLayer()); | 2685 static_cast<FakePictureLayerImpl*>(host_impl->RootLayer()); |
2697 | 2686 |
2698 // The same frame can be draw multiple times if new visible tiles are | 2687 // The same frame can be draw multiple times if new visible tiles are |
2699 // rasterized. But we want to make sure we only post DeferredInitialize | 2688 // rasterized. But we want to make sure we only post DeferredInitialize |
2700 // and ReleaseGL once, so early out if the same frame is drawn again. | 2689 // and ReleaseGL once, so early out if the same frame is drawn again. |
2701 if (last_source_frame_number_drawn_ == | 2690 if (last_source_frame_number_drawn_ == |
2702 host_impl->active_tree()->source_frame_number()) | 2691 host_impl->active_tree()->source_frame_number()) |
2703 return; | 2692 return; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2739 } | 2728 } |
2740 | 2729 |
2741 void ReleaseGLAndRedraw(LayerTreeHostImpl* host_impl) { | 2730 void ReleaseGLAndRedraw(LayerTreeHostImpl* host_impl) { |
2742 EXPECT_TRUE(did_initialize_gl_); | 2731 EXPECT_TRUE(did_initialize_gl_); |
2743 EXPECT_FALSE(did_release_gl_); | 2732 EXPECT_FALSE(did_release_gl_); |
2744 // ReleaseGL calls SetNeedsCommit. | 2733 // ReleaseGL calls SetNeedsCommit. |
2745 static_cast<FakeOutputSurface*>(host_impl->output_surface())->ReleaseGL(); | 2734 static_cast<FakeOutputSurface*>(host_impl->output_surface())->ReleaseGL(); |
2746 did_release_gl_ = true; | 2735 did_release_gl_ = true; |
2747 } | 2736 } |
2748 | 2737 |
2749 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, | 2738 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { |
2750 bool result) override { | |
2751 ASSERT_TRUE(result); | 2739 ASSERT_TRUE(result); |
2752 DelegatedFrameData* delegated_frame_data = | 2740 DelegatedFrameData* delegated_frame_data = |
2753 output_surface()->last_sent_frame().delegated_frame_data.get(); | 2741 output_surface()->last_sent_frame().delegated_frame_data.get(); |
2754 if (!delegated_frame_data) | 2742 if (!delegated_frame_data) |
2755 return; | 2743 return; |
2756 | 2744 |
2757 // Return all resources immediately. | 2745 // Return all resources immediately. |
2758 TransferableResourceArray resources_to_return = | 2746 TransferableResourceArray resources_to_return = |
2759 output_surface()->resources_held_by_parent(); | 2747 output_surface()->resources_held_by_parent(); |
2760 | 2748 |
2761 CompositorFrameAck ack; | 2749 CompositorFrameAck ack; |
2762 for (size_t i = 0; i < resources_to_return.size(); ++i) | 2750 for (size_t i = 0; i < resources_to_return.size(); ++i) |
2763 output_surface()->ReturnResource(resources_to_return[i].id, &ack); | 2751 output_surface()->ReturnResource(resources_to_return[i].id, &ack); |
2764 host_impl->ReclaimResources(&ack); | 2752 host_impl->ReclaimResources(&ack); |
2765 } | 2753 } |
2766 | 2754 |
2767 virtual void AfterTest() override { | 2755 void AfterTest() override { |
2768 EXPECT_TRUE(did_initialize_gl_); | 2756 EXPECT_TRUE(did_initialize_gl_); |
2769 EXPECT_TRUE(did_release_gl_); | 2757 EXPECT_TRUE(did_release_gl_); |
2770 } | 2758 } |
2771 | 2759 |
2772 private: | 2760 private: |
2773 FakeContentLayerClient client_; | 2761 FakeContentLayerClient client_; |
2774 scoped_refptr<FakePictureLayer> layer_; | 2762 scoped_refptr<FakePictureLayer> layer_; |
2775 bool did_initialize_gl_; | 2763 bool did_initialize_gl_; |
2776 bool did_release_gl_; | 2764 bool did_release_gl_; |
2777 int last_source_frame_number_drawn_; | 2765 int last_source_frame_number_drawn_; |
2778 }; | 2766 }; |
2779 | 2767 |
2780 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize); | 2768 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize); |
2781 | 2769 |
2782 class LayerTreeHostTestDeferredInitializeWithGpuRasterization | 2770 class LayerTreeHostTestDeferredInitializeWithGpuRasterization |
2783 : public LayerTreeHostTestDeferredInitialize { | 2771 : public LayerTreeHostTestDeferredInitialize { |
2784 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2772 void InitializeSettings(LayerTreeSettings* settings) override { |
2785 // PictureLayer can only be used with impl side painting enabled. | 2773 // PictureLayer can only be used with impl side painting enabled. |
2786 settings->impl_side_painting = true; | 2774 settings->impl_side_painting = true; |
2787 settings->gpu_rasterization_enabled = true; | 2775 settings->gpu_rasterization_enabled = true; |
2788 settings->gpu_rasterization_forced = true; | 2776 settings->gpu_rasterization_forced = true; |
2789 } | 2777 } |
2790 }; | 2778 }; |
2791 | 2779 |
2792 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitializeWithGpuRasterization); | 2780 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitializeWithGpuRasterization); |
2793 | 2781 |
2794 // Test for UI Resource management. | 2782 // Test for UI Resource management. |
2795 class LayerTreeHostTestUIResource : public LayerTreeHostTest { | 2783 class LayerTreeHostTestUIResource : public LayerTreeHostTest { |
2796 public: | 2784 public: |
2797 LayerTreeHostTestUIResource() : num_ui_resources_(0) {} | 2785 LayerTreeHostTestUIResource() : num_ui_resources_(0) {} |
2798 | 2786 |
2799 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 2787 void InitializeSettings(LayerTreeSettings* settings) override { |
2800 settings->texture_id_allocation_chunk_size = 1; | 2788 settings->texture_id_allocation_chunk_size = 1; |
2801 } | 2789 } |
2802 | 2790 |
2803 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 2791 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
2804 | 2792 |
2805 virtual void DidCommit() override { | 2793 void DidCommit() override { |
2806 int frame = layer_tree_host()->source_frame_number(); | 2794 int frame = layer_tree_host()->source_frame_number(); |
2807 switch (frame) { | 2795 switch (frame) { |
2808 case 1: | 2796 case 1: |
2809 CreateResource(); | 2797 CreateResource(); |
2810 CreateResource(); | 2798 CreateResource(); |
2811 PostSetNeedsCommitToMainThread(); | 2799 PostSetNeedsCommitToMainThread(); |
2812 break; | 2800 break; |
2813 case 2: | 2801 case 2: |
2814 // Usually ScopedUIResource are deleted from the manager in their | 2802 // Usually ScopedUIResource are deleted from the manager in their |
2815 // destructor. Here we just want to test that a direct call to | 2803 // destructor. Here we just want to test that a direct call to |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2856 ASSERT_EQ(1u, context->NumTextures()); | 2844 ASSERT_EQ(1u, context->NumTextures()); |
2857 break; | 2845 break; |
2858 case 4: | 2846 case 4: |
2859 // Creation after deletion: two more creates should total up to | 2847 // Creation after deletion: two more creates should total up to |
2860 // three textures. | 2848 // three textures. |
2861 ASSERT_EQ(3u, context->NumTextures()); | 2849 ASSERT_EQ(3u, context->NumTextures()); |
2862 break; | 2850 break; |
2863 } | 2851 } |
2864 } | 2852 } |
2865 | 2853 |
2866 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 2854 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
2867 if (!layer_tree_host()->settings().impl_side_painting) | 2855 if (!layer_tree_host()->settings().impl_side_painting) |
2868 PerformTest(impl); | 2856 PerformTest(impl); |
2869 } | 2857 } |
2870 | 2858 |
2871 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 2859 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
2872 if (layer_tree_host()->settings().impl_side_painting) | 2860 if (layer_tree_host()->settings().impl_side_painting) |
2873 PerformTest(impl); | 2861 PerformTest(impl); |
2874 } | 2862 } |
2875 | 2863 |
2876 virtual void AfterTest() override {} | 2864 void AfterTest() override {} |
2877 | 2865 |
2878 private: | 2866 private: |
2879 // Must clear all resources before exiting. | 2867 // Must clear all resources before exiting. |
2880 void ClearResources() { | 2868 void ClearResources() { |
2881 for (int i = 0; i < num_ui_resources_; i++) | 2869 for (int i = 0; i < num_ui_resources_; i++) |
2882 ui_resources_[i] = nullptr; | 2870 ui_resources_[i] = nullptr; |
2883 } | 2871 } |
2884 | 2872 |
2885 void CreateResource() { | 2873 void CreateResource() { |
2886 ui_resources_[num_ui_resources_++] = | 2874 ui_resources_[num_ui_resources_++] = |
2887 FakeScopedUIResource::Create(layer_tree_host()); | 2875 FakeScopedUIResource::Create(layer_tree_host()); |
2888 } | 2876 } |
2889 | 2877 |
2890 scoped_ptr<FakeScopedUIResource> ui_resources_[5]; | 2878 scoped_ptr<FakeScopedUIResource> ui_resources_[5]; |
2891 int num_ui_resources_; | 2879 int num_ui_resources_; |
2892 }; | 2880 }; |
2893 | 2881 |
2894 MULTI_THREAD_TEST_F(LayerTreeHostTestUIResource); | 2882 MULTI_THREAD_TEST_F(LayerTreeHostTestUIResource); |
2895 | 2883 |
2896 class PushPropertiesCountingLayerImpl : public LayerImpl { | 2884 class PushPropertiesCountingLayerImpl : public LayerImpl { |
2897 public: | 2885 public: |
2898 static scoped_ptr<PushPropertiesCountingLayerImpl> Create( | 2886 static scoped_ptr<PushPropertiesCountingLayerImpl> Create( |
2899 LayerTreeImpl* tree_impl, int id) { | 2887 LayerTreeImpl* tree_impl, int id) { |
2900 return make_scoped_ptr(new PushPropertiesCountingLayerImpl(tree_impl, id)); | 2888 return make_scoped_ptr(new PushPropertiesCountingLayerImpl(tree_impl, id)); |
2901 } | 2889 } |
2902 | 2890 |
2903 virtual ~PushPropertiesCountingLayerImpl() {} | 2891 ~PushPropertiesCountingLayerImpl() override {} |
2904 | 2892 |
2905 virtual void PushPropertiesTo(LayerImpl* layer) override { | 2893 void PushPropertiesTo(LayerImpl* layer) override { |
2906 LayerImpl::PushPropertiesTo(layer); | 2894 LayerImpl::PushPropertiesTo(layer); |
2907 push_properties_count_++; | 2895 push_properties_count_++; |
2908 // Push state to the active tree because we can only access it from there. | 2896 // Push state to the active tree because we can only access it from there. |
2909 static_cast<PushPropertiesCountingLayerImpl*>( | 2897 static_cast<PushPropertiesCountingLayerImpl*>( |
2910 layer)->push_properties_count_ = push_properties_count_; | 2898 layer)->push_properties_count_ = push_properties_count_; |
2911 } | 2899 } |
2912 | 2900 |
2913 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) | 2901 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override { |
2914 override { | |
2915 return PushPropertiesCountingLayerImpl::Create(tree_impl, id()); | 2902 return PushPropertiesCountingLayerImpl::Create(tree_impl, id()); |
2916 } | 2903 } |
2917 | 2904 |
2918 size_t push_properties_count() const { return push_properties_count_; } | 2905 size_t push_properties_count() const { return push_properties_count_; } |
2919 void reset_push_properties_count() { push_properties_count_ = 0; } | 2906 void reset_push_properties_count() { push_properties_count_ = 0; } |
2920 | 2907 |
2921 private: | 2908 private: |
2922 size_t push_properties_count_; | 2909 size_t push_properties_count_; |
2923 | 2910 |
2924 PushPropertiesCountingLayerImpl(LayerTreeImpl* tree_impl, int id) | 2911 PushPropertiesCountingLayerImpl(LayerTreeImpl* tree_impl, int id) |
2925 : LayerImpl(tree_impl, id), | 2912 : LayerImpl(tree_impl, id), |
2926 push_properties_count_(0) { | 2913 push_properties_count_(0) { |
2927 SetBounds(gfx::Size(1, 1)); | 2914 SetBounds(gfx::Size(1, 1)); |
2928 } | 2915 } |
2929 }; | 2916 }; |
2930 | 2917 |
2931 class PushPropertiesCountingLayer : public Layer { | 2918 class PushPropertiesCountingLayer : public Layer { |
2932 public: | 2919 public: |
2933 static scoped_refptr<PushPropertiesCountingLayer> Create() { | 2920 static scoped_refptr<PushPropertiesCountingLayer> Create() { |
2934 return new PushPropertiesCountingLayer(); | 2921 return new PushPropertiesCountingLayer(); |
2935 } | 2922 } |
2936 | 2923 |
2937 virtual void PushPropertiesTo(LayerImpl* layer) override { | 2924 void PushPropertiesTo(LayerImpl* layer) override { |
2938 Layer::PushPropertiesTo(layer); | 2925 Layer::PushPropertiesTo(layer); |
2939 push_properties_count_++; | 2926 push_properties_count_++; |
2940 if (persist_needs_push_properties_) | 2927 if (persist_needs_push_properties_) |
2941 needs_push_properties_ = true; | 2928 needs_push_properties_ = true; |
2942 } | 2929 } |
2943 | 2930 |
2944 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) | 2931 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override { |
2945 override { | |
2946 return PushPropertiesCountingLayerImpl::Create(tree_impl, id()); | 2932 return PushPropertiesCountingLayerImpl::Create(tree_impl, id()); |
2947 } | 2933 } |
2948 | 2934 |
2949 void SetDrawsContent(bool draws_content) { SetIsDrawable(draws_content); } | 2935 void SetDrawsContent(bool draws_content) { SetIsDrawable(draws_content); } |
2950 | 2936 |
2951 size_t push_properties_count() const { return push_properties_count_; } | 2937 size_t push_properties_count() const { return push_properties_count_; } |
2952 void reset_push_properties_count() { push_properties_count_ = 0; } | 2938 void reset_push_properties_count() { push_properties_count_ = 0; } |
2953 | 2939 |
2954 void set_persist_needs_push_properties(bool persist) { | 2940 void set_persist_needs_push_properties(bool persist) { |
2955 persist_needs_push_properties_ = persist; | 2941 persist_needs_push_properties_ = persist; |
2956 } | 2942 } |
2957 | 2943 |
2958 private: | 2944 private: |
2959 PushPropertiesCountingLayer() | 2945 PushPropertiesCountingLayer() |
2960 : push_properties_count_(0), persist_needs_push_properties_(false) { | 2946 : push_properties_count_(0), persist_needs_push_properties_(false) { |
2961 SetBounds(gfx::Size(1, 1)); | 2947 SetBounds(gfx::Size(1, 1)); |
2962 } | 2948 } |
2963 virtual ~PushPropertiesCountingLayer() {} | 2949 ~PushPropertiesCountingLayer() override {} |
2964 | 2950 |
2965 size_t push_properties_count_; | 2951 size_t push_properties_count_; |
2966 bool persist_needs_push_properties_; | 2952 bool persist_needs_push_properties_; |
2967 }; | 2953 }; |
2968 | 2954 |
2969 class LayerTreeHostTestLayersPushProperties : public LayerTreeHostTest { | 2955 class LayerTreeHostTestLayersPushProperties : public LayerTreeHostTest { |
2970 protected: | 2956 protected: |
2971 virtual void BeginTest() override { | 2957 void BeginTest() override { |
2972 num_commits_ = 0; | 2958 num_commits_ = 0; |
2973 expected_push_properties_root_ = 0; | 2959 expected_push_properties_root_ = 0; |
2974 expected_push_properties_child_ = 0; | 2960 expected_push_properties_child_ = 0; |
2975 expected_push_properties_grandchild_ = 0; | 2961 expected_push_properties_grandchild_ = 0; |
2976 expected_push_properties_child2_ = 0; | 2962 expected_push_properties_child2_ = 0; |
2977 expected_push_properties_other_root_ = 0; | 2963 expected_push_properties_other_root_ = 0; |
2978 expected_push_properties_leaf_layer_ = 0; | 2964 expected_push_properties_leaf_layer_ = 0; |
2979 PostSetNeedsCommitToMainThread(); | 2965 PostSetNeedsCommitToMainThread(); |
2980 } | 2966 } |
2981 | 2967 |
2982 virtual void SetupTree() override { | 2968 void SetupTree() override { |
2983 root_ = PushPropertiesCountingLayer::Create(); | 2969 root_ = PushPropertiesCountingLayer::Create(); |
2984 child_ = PushPropertiesCountingLayer::Create(); | 2970 child_ = PushPropertiesCountingLayer::Create(); |
2985 child2_ = PushPropertiesCountingLayer::Create(); | 2971 child2_ = PushPropertiesCountingLayer::Create(); |
2986 grandchild_ = PushPropertiesCountingLayer::Create(); | 2972 grandchild_ = PushPropertiesCountingLayer::Create(); |
2987 leaf_always_pushing_layer_ = PushPropertiesCountingLayer::Create(); | 2973 leaf_always_pushing_layer_ = PushPropertiesCountingLayer::Create(); |
2988 leaf_always_pushing_layer_->set_persist_needs_push_properties(true); | 2974 leaf_always_pushing_layer_->set_persist_needs_push_properties(true); |
2989 | 2975 |
2990 root_->AddChild(child_); | 2976 root_->AddChild(child_); |
2991 root_->AddChild(child2_); | 2977 root_->AddChild(child2_); |
2992 child_->AddChild(grandchild_); | 2978 child_->AddChild(grandchild_); |
2993 child2_->AddChild(leaf_always_pushing_layer_); | 2979 child2_->AddChild(leaf_always_pushing_layer_); |
2994 | 2980 |
2995 other_root_ = PushPropertiesCountingLayer::Create(); | 2981 other_root_ = PushPropertiesCountingLayer::Create(); |
2996 | 2982 |
2997 // Don't set the root layer here. | 2983 // Don't set the root layer here. |
2998 LayerTreeHostTest::SetupTree(); | 2984 LayerTreeHostTest::SetupTree(); |
2999 } | 2985 } |
3000 | 2986 |
3001 virtual void DidCommitAndDrawFrame() override { | 2987 void DidCommitAndDrawFrame() override { |
3002 ++num_commits_; | 2988 ++num_commits_; |
3003 | 2989 |
3004 EXPECT_EQ(expected_push_properties_root_, root_->push_properties_count()); | 2990 EXPECT_EQ(expected_push_properties_root_, root_->push_properties_count()); |
3005 EXPECT_EQ(expected_push_properties_child_, child_->push_properties_count()); | 2991 EXPECT_EQ(expected_push_properties_child_, child_->push_properties_count()); |
3006 EXPECT_EQ(expected_push_properties_grandchild_, | 2992 EXPECT_EQ(expected_push_properties_grandchild_, |
3007 grandchild_->push_properties_count()); | 2993 grandchild_->push_properties_count()); |
3008 EXPECT_EQ(expected_push_properties_child2_, | 2994 EXPECT_EQ(expected_push_properties_child2_, |
3009 child2_->push_properties_count()); | 2995 child2_->push_properties_count()); |
3010 EXPECT_EQ(expected_push_properties_other_root_, | 2996 EXPECT_EQ(expected_push_properties_other_root_, |
3011 other_root_->push_properties_count()); | 2997 other_root_->push_properties_count()); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3131 case 17: | 3117 case 17: |
3132 EndTest(); | 3118 EndTest(); |
3133 break; | 3119 break; |
3134 } | 3120 } |
3135 | 3121 |
3136 // The leaf layer always pushes. | 3122 // The leaf layer always pushes. |
3137 if (leaf_always_pushing_layer_->layer_tree_host()) | 3123 if (leaf_always_pushing_layer_->layer_tree_host()) |
3138 ++expected_push_properties_leaf_layer_; | 3124 ++expected_push_properties_leaf_layer_; |
3139 } | 3125 } |
3140 | 3126 |
3141 virtual void AfterTest() override {} | 3127 void AfterTest() override {} |
3142 | 3128 |
3143 int num_commits_; | 3129 int num_commits_; |
3144 FakeContentLayerClient client_; | 3130 FakeContentLayerClient client_; |
3145 scoped_refptr<PushPropertiesCountingLayer> root_; | 3131 scoped_refptr<PushPropertiesCountingLayer> root_; |
3146 scoped_refptr<PushPropertiesCountingLayer> child_; | 3132 scoped_refptr<PushPropertiesCountingLayer> child_; |
3147 scoped_refptr<PushPropertiesCountingLayer> child2_; | 3133 scoped_refptr<PushPropertiesCountingLayer> child2_; |
3148 scoped_refptr<PushPropertiesCountingLayer> grandchild_; | 3134 scoped_refptr<PushPropertiesCountingLayer> grandchild_; |
3149 scoped_refptr<PushPropertiesCountingLayer> other_root_; | 3135 scoped_refptr<PushPropertiesCountingLayer> other_root_; |
3150 scoped_refptr<PushPropertiesCountingLayer> leaf_always_pushing_layer_; | 3136 scoped_refptr<PushPropertiesCountingLayer> leaf_always_pushing_layer_; |
3151 size_t expected_push_properties_root_; | 3137 size_t expected_push_properties_root_; |
3152 size_t expected_push_properties_child_; | 3138 size_t expected_push_properties_child_; |
3153 size_t expected_push_properties_child2_; | 3139 size_t expected_push_properties_child2_; |
3154 size_t expected_push_properties_grandchild_; | 3140 size_t expected_push_properties_grandchild_; |
3155 size_t expected_push_properties_other_root_; | 3141 size_t expected_push_properties_other_root_; |
3156 size_t expected_push_properties_leaf_layer_; | 3142 size_t expected_push_properties_leaf_layer_; |
3157 }; | 3143 }; |
3158 | 3144 |
3159 MULTI_THREAD_TEST_F(LayerTreeHostTestLayersPushProperties); | 3145 MULTI_THREAD_TEST_F(LayerTreeHostTestLayersPushProperties); |
3160 | 3146 |
3161 class LayerTreeHostTestImplLayersPushProperties | 3147 class LayerTreeHostTestImplLayersPushProperties |
3162 : public LayerTreeHostTestLayersPushProperties { | 3148 : public LayerTreeHostTestLayersPushProperties { |
3163 protected: | 3149 protected: |
3164 virtual void BeginTest() override { | 3150 void BeginTest() override { |
3165 expected_push_properties_root_impl_ = 0; | 3151 expected_push_properties_root_impl_ = 0; |
3166 expected_push_properties_child_impl_ = 0; | 3152 expected_push_properties_child_impl_ = 0; |
3167 expected_push_properties_grandchild_impl_ = 0; | 3153 expected_push_properties_grandchild_impl_ = 0; |
3168 expected_push_properties_child2_impl_ = 0; | 3154 expected_push_properties_child2_impl_ = 0; |
3169 expected_push_properties_grandchild2_impl_ = 0; | 3155 expected_push_properties_grandchild2_impl_ = 0; |
3170 LayerTreeHostTestLayersPushProperties::BeginTest(); | 3156 LayerTreeHostTestLayersPushProperties::BeginTest(); |
3171 } | 3157 } |
3172 | 3158 |
3173 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 3159 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
3174 // These commits are in response to the changes made in | 3160 // These commits are in response to the changes made in |
3175 // LayerTreeHostTestLayersPushProperties::DidCommitAndDrawFrame() | 3161 // LayerTreeHostTestLayersPushProperties::DidCommitAndDrawFrame() |
3176 switch (num_commits_) { | 3162 switch (num_commits_) { |
3177 case 0: | 3163 case 0: |
3178 // Tree hasn't been setup yet don't bother to check anything. | 3164 // Tree hasn't been setup yet don't bother to check anything. |
3179 return; | 3165 return; |
3180 case 1: | 3166 case 1: |
3181 // Root gets set up, Everyone is initialized. | 3167 // Root gets set up, Everyone is initialized. |
3182 ++expected_push_properties_root_impl_; | 3168 ++expected_push_properties_root_impl_; |
3183 ++expected_push_properties_child_impl_; | 3169 ++expected_push_properties_child_impl_; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3354 size_t expected_push_properties_grandchild2_impl_; | 3340 size_t expected_push_properties_grandchild2_impl_; |
3355 }; | 3341 }; |
3356 | 3342 |
3357 TEST_F(LayerTreeHostTestImplLayersPushProperties, DelegatingRenderer) { | 3343 TEST_F(LayerTreeHostTestImplLayersPushProperties, DelegatingRenderer) { |
3358 RunTestWithImplSidePainting(); | 3344 RunTestWithImplSidePainting(); |
3359 } | 3345 } |
3360 | 3346 |
3361 class LayerTreeHostTestPropertyChangesDuringUpdateArePushed | 3347 class LayerTreeHostTestPropertyChangesDuringUpdateArePushed |
3362 : public LayerTreeHostTest { | 3348 : public LayerTreeHostTest { |
3363 protected: | 3349 protected: |
3364 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 3350 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
3365 | 3351 |
3366 virtual void SetupTree() override { | 3352 void SetupTree() override { |
3367 root_ = Layer::Create(); | 3353 root_ = Layer::Create(); |
3368 root_->SetBounds(gfx::Size(1, 1)); | 3354 root_->SetBounds(gfx::Size(1, 1)); |
3369 | 3355 |
3370 bool paint_scrollbar = true; | 3356 bool paint_scrollbar = true; |
3371 bool has_thumb = false; | 3357 bool has_thumb = false; |
3372 scrollbar_layer_ = FakePaintedScrollbarLayer::Create( | 3358 scrollbar_layer_ = FakePaintedScrollbarLayer::Create( |
3373 paint_scrollbar, has_thumb, root_->id()); | 3359 paint_scrollbar, has_thumb, root_->id()); |
3374 | 3360 |
3375 root_->AddChild(scrollbar_layer_); | 3361 root_->AddChild(scrollbar_layer_); |
3376 | 3362 |
3377 layer_tree_host()->SetRootLayer(root_); | 3363 layer_tree_host()->SetRootLayer(root_); |
3378 LayerTreeHostTest::SetupTree(); | 3364 LayerTreeHostTest::SetupTree(); |
3379 } | 3365 } |
3380 | 3366 |
3381 virtual void DidCommitAndDrawFrame() override { | 3367 void DidCommitAndDrawFrame() override { |
3382 switch (layer_tree_host()->source_frame_number()) { | 3368 switch (layer_tree_host()->source_frame_number()) { |
3383 case 0: | 3369 case 0: |
3384 break; | 3370 break; |
3385 case 1: { | 3371 case 1: { |
3386 // During update, the ignore_set_needs_commit_ bit is set to true to | 3372 // During update, the ignore_set_needs_commit_ bit is set to true to |
3387 // avoid causing a second commit to be scheduled. If a property change | 3373 // avoid causing a second commit to be scheduled. If a property change |
3388 // is made during this, however, it needs to be pushed in the upcoming | 3374 // is made during this, however, it needs to be pushed in the upcoming |
3389 // commit. | 3375 // commit. |
3390 scoped_ptr<base::AutoReset<bool>> ignore = | 3376 scoped_ptr<base::AutoReset<bool>> ignore = |
3391 scrollbar_layer_->IgnoreSetNeedsCommit(); | 3377 scrollbar_layer_->IgnoreSetNeedsCommit(); |
3392 | 3378 |
3393 scrollbar_layer_->SetBounds(gfx::Size(30, 30)); | 3379 scrollbar_layer_->SetBounds(gfx::Size(30, 30)); |
3394 | 3380 |
3395 EXPECT_TRUE(scrollbar_layer_->needs_push_properties()); | 3381 EXPECT_TRUE(scrollbar_layer_->needs_push_properties()); |
3396 EXPECT_TRUE(root_->descendant_needs_push_properties()); | 3382 EXPECT_TRUE(root_->descendant_needs_push_properties()); |
3397 layer_tree_host()->SetNeedsCommit(); | 3383 layer_tree_host()->SetNeedsCommit(); |
3398 | 3384 |
3399 scrollbar_layer_->reset_push_properties_count(); | 3385 scrollbar_layer_->reset_push_properties_count(); |
3400 EXPECT_EQ(0u, scrollbar_layer_->push_properties_count()); | 3386 EXPECT_EQ(0u, scrollbar_layer_->push_properties_count()); |
3401 break; | 3387 break; |
3402 } | 3388 } |
3403 case 2: | 3389 case 2: |
3404 EXPECT_EQ(1u, scrollbar_layer_->push_properties_count()); | 3390 EXPECT_EQ(1u, scrollbar_layer_->push_properties_count()); |
3405 EndTest(); | 3391 EndTest(); |
3406 break; | 3392 break; |
3407 } | 3393 } |
3408 } | 3394 } |
3409 | 3395 |
3410 virtual void AfterTest() override {} | 3396 void AfterTest() override {} |
3411 | 3397 |
3412 scoped_refptr<Layer> root_; | 3398 scoped_refptr<Layer> root_; |
3413 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer_; | 3399 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer_; |
3414 }; | 3400 }; |
3415 | 3401 |
3416 MULTI_THREAD_TEST_F(LayerTreeHostTestPropertyChangesDuringUpdateArePushed); | 3402 MULTI_THREAD_TEST_F(LayerTreeHostTestPropertyChangesDuringUpdateArePushed); |
3417 | 3403 |
3418 class LayerTreeHostTestSetDrawableCausesCommit : public LayerTreeHostTest { | 3404 class LayerTreeHostTestSetDrawableCausesCommit : public LayerTreeHostTest { |
3419 protected: | 3405 protected: |
3420 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 3406 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
3421 | 3407 |
3422 virtual void SetupTree() override { | 3408 void SetupTree() override { |
3423 root_ = PushPropertiesCountingLayer::Create(); | 3409 root_ = PushPropertiesCountingLayer::Create(); |
3424 child_ = PushPropertiesCountingLayer::Create(); | 3410 child_ = PushPropertiesCountingLayer::Create(); |
3425 root_->AddChild(child_); | 3411 root_->AddChild(child_); |
3426 | 3412 |
3427 layer_tree_host()->SetRootLayer(root_); | 3413 layer_tree_host()->SetRootLayer(root_); |
3428 LayerTreeHostTest::SetupTree(); | 3414 LayerTreeHostTest::SetupTree(); |
3429 } | 3415 } |
3430 | 3416 |
3431 virtual void DidCommitAndDrawFrame() override { | 3417 void DidCommitAndDrawFrame() override { |
3432 switch (layer_tree_host()->source_frame_number()) { | 3418 switch (layer_tree_host()->source_frame_number()) { |
3433 case 0: | 3419 case 0: |
3434 break; | 3420 break; |
3435 case 1: { | 3421 case 1: { |
3436 // During update, the ignore_set_needs_commit_ bit is set to true to | 3422 // During update, the ignore_set_needs_commit_ bit is set to true to |
3437 // avoid causing a second commit to be scheduled. If a property change | 3423 // avoid causing a second commit to be scheduled. If a property change |
3438 // is made during this, however, it needs to be pushed in the upcoming | 3424 // is made during this, however, it needs to be pushed in the upcoming |
3439 // commit. | 3425 // commit. |
3440 EXPECT_FALSE(root_->needs_push_properties()); | 3426 EXPECT_FALSE(root_->needs_push_properties()); |
3441 EXPECT_FALSE(child_->needs_push_properties()); | 3427 EXPECT_FALSE(child_->needs_push_properties()); |
(...skipping 11 matching lines...) Expand all Loading... |
3453 case 2: | 3439 case 2: |
3454 EXPECT_EQ(1u, root_->push_properties_count()); | 3440 EXPECT_EQ(1u, root_->push_properties_count()); |
3455 EXPECT_EQ(1u, child_->push_properties_count()); | 3441 EXPECT_EQ(1u, child_->push_properties_count()); |
3456 EXPECT_FALSE(root_->needs_push_properties()); | 3442 EXPECT_FALSE(root_->needs_push_properties()); |
3457 EXPECT_FALSE(child_->needs_push_properties()); | 3443 EXPECT_FALSE(child_->needs_push_properties()); |
3458 EndTest(); | 3444 EndTest(); |
3459 break; | 3445 break; |
3460 } | 3446 } |
3461 } | 3447 } |
3462 | 3448 |
3463 virtual void AfterTest() override {} | 3449 void AfterTest() override {} |
3464 | 3450 |
3465 scoped_refptr<PushPropertiesCountingLayer> root_; | 3451 scoped_refptr<PushPropertiesCountingLayer> root_; |
3466 scoped_refptr<PushPropertiesCountingLayer> child_; | 3452 scoped_refptr<PushPropertiesCountingLayer> child_; |
3467 }; | 3453 }; |
3468 | 3454 |
3469 MULTI_THREAD_TEST_F(LayerTreeHostTestSetDrawableCausesCommit); | 3455 MULTI_THREAD_TEST_F(LayerTreeHostTestSetDrawableCausesCommit); |
3470 | 3456 |
3471 class LayerTreeHostTestCasePushPropertiesThreeGrandChildren | 3457 class LayerTreeHostTestCasePushPropertiesThreeGrandChildren |
3472 : public LayerTreeHostTest { | 3458 : public LayerTreeHostTest { |
3473 protected: | 3459 protected: |
3474 virtual void BeginTest() override { | 3460 void BeginTest() override { |
3475 expected_push_properties_root_ = 0; | 3461 expected_push_properties_root_ = 0; |
3476 expected_push_properties_child_ = 0; | 3462 expected_push_properties_child_ = 0; |
3477 expected_push_properties_grandchild1_ = 0; | 3463 expected_push_properties_grandchild1_ = 0; |
3478 expected_push_properties_grandchild2_ = 0; | 3464 expected_push_properties_grandchild2_ = 0; |
3479 expected_push_properties_grandchild3_ = 0; | 3465 expected_push_properties_grandchild3_ = 0; |
3480 PostSetNeedsCommitToMainThread(); | 3466 PostSetNeedsCommitToMainThread(); |
3481 } | 3467 } |
3482 | 3468 |
3483 virtual void SetupTree() override { | 3469 void SetupTree() override { |
3484 root_ = PushPropertiesCountingLayer::Create(); | 3470 root_ = PushPropertiesCountingLayer::Create(); |
3485 child_ = PushPropertiesCountingLayer::Create(); | 3471 child_ = PushPropertiesCountingLayer::Create(); |
3486 grandchild1_ = PushPropertiesCountingLayer::Create(); | 3472 grandchild1_ = PushPropertiesCountingLayer::Create(); |
3487 grandchild2_ = PushPropertiesCountingLayer::Create(); | 3473 grandchild2_ = PushPropertiesCountingLayer::Create(); |
3488 grandchild3_ = PushPropertiesCountingLayer::Create(); | 3474 grandchild3_ = PushPropertiesCountingLayer::Create(); |
3489 | 3475 |
3490 root_->AddChild(child_); | 3476 root_->AddChild(child_); |
3491 child_->AddChild(grandchild1_); | 3477 child_->AddChild(grandchild1_); |
3492 child_->AddChild(grandchild2_); | 3478 child_->AddChild(grandchild2_); |
3493 child_->AddChild(grandchild3_); | 3479 child_->AddChild(grandchild3_); |
3494 | 3480 |
3495 // Don't set the root layer here. | 3481 // Don't set the root layer here. |
3496 LayerTreeHostTest::SetupTree(); | 3482 LayerTreeHostTest::SetupTree(); |
3497 } | 3483 } |
3498 | 3484 |
3499 virtual void AfterTest() override {} | 3485 void AfterTest() override {} |
3500 | 3486 |
3501 FakeContentLayerClient client_; | 3487 FakeContentLayerClient client_; |
3502 scoped_refptr<PushPropertiesCountingLayer> root_; | 3488 scoped_refptr<PushPropertiesCountingLayer> root_; |
3503 scoped_refptr<PushPropertiesCountingLayer> child_; | 3489 scoped_refptr<PushPropertiesCountingLayer> child_; |
3504 scoped_refptr<PushPropertiesCountingLayer> grandchild1_; | 3490 scoped_refptr<PushPropertiesCountingLayer> grandchild1_; |
3505 scoped_refptr<PushPropertiesCountingLayer> grandchild2_; | 3491 scoped_refptr<PushPropertiesCountingLayer> grandchild2_; |
3506 scoped_refptr<PushPropertiesCountingLayer> grandchild3_; | 3492 scoped_refptr<PushPropertiesCountingLayer> grandchild3_; |
3507 size_t expected_push_properties_root_; | 3493 size_t expected_push_properties_root_; |
3508 size_t expected_push_properties_child_; | 3494 size_t expected_push_properties_child_; |
3509 size_t expected_push_properties_grandchild1_; | 3495 size_t expected_push_properties_grandchild1_; |
3510 size_t expected_push_properties_grandchild2_; | 3496 size_t expected_push_properties_grandchild2_; |
3511 size_t expected_push_properties_grandchild3_; | 3497 size_t expected_push_properties_grandchild3_; |
3512 }; | 3498 }; |
3513 | 3499 |
3514 class LayerTreeHostTestPushPropertiesAddingToTreeRequiresPush | 3500 class LayerTreeHostTestPushPropertiesAddingToTreeRequiresPush |
3515 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { | 3501 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { |
3516 protected: | 3502 protected: |
3517 virtual void DidCommitAndDrawFrame() override { | 3503 void DidCommitAndDrawFrame() override { |
3518 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; | 3504 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; |
3519 switch (last_source_frame_number) { | 3505 switch (last_source_frame_number) { |
3520 case 0: | 3506 case 0: |
3521 EXPECT_FALSE(root_->needs_push_properties()); | 3507 EXPECT_FALSE(root_->needs_push_properties()); |
3522 EXPECT_FALSE(root_->descendant_needs_push_properties()); | 3508 EXPECT_FALSE(root_->descendant_needs_push_properties()); |
3523 EXPECT_FALSE(child_->needs_push_properties()); | 3509 EXPECT_FALSE(child_->needs_push_properties()); |
3524 EXPECT_FALSE(child_->descendant_needs_push_properties()); | 3510 EXPECT_FALSE(child_->descendant_needs_push_properties()); |
3525 EXPECT_FALSE(grandchild1_->needs_push_properties()); | 3511 EXPECT_FALSE(grandchild1_->needs_push_properties()); |
3526 EXPECT_FALSE(grandchild1_->descendant_needs_push_properties()); | 3512 EXPECT_FALSE(grandchild1_->descendant_needs_push_properties()); |
3527 EXPECT_FALSE(grandchild2_->needs_push_properties()); | 3513 EXPECT_FALSE(grandchild2_->needs_push_properties()); |
(...skipping 19 matching lines...) Expand all Loading... |
3547 break; | 3533 break; |
3548 } | 3534 } |
3549 } | 3535 } |
3550 }; | 3536 }; |
3551 | 3537 |
3552 MULTI_THREAD_TEST_F(LayerTreeHostTestPushPropertiesAddingToTreeRequiresPush); | 3538 MULTI_THREAD_TEST_F(LayerTreeHostTestPushPropertiesAddingToTreeRequiresPush); |
3553 | 3539 |
3554 class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion | 3540 class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion |
3555 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { | 3541 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { |
3556 protected: | 3542 protected: |
3557 virtual void DidCommitAndDrawFrame() override { | 3543 void DidCommitAndDrawFrame() override { |
3558 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; | 3544 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; |
3559 switch (last_source_frame_number) { | 3545 switch (last_source_frame_number) { |
3560 case 0: | 3546 case 0: |
3561 layer_tree_host()->SetRootLayer(root_); | 3547 layer_tree_host()->SetRootLayer(root_); |
3562 break; | 3548 break; |
3563 case 1: | 3549 case 1: |
3564 EXPECT_FALSE(root_->needs_push_properties()); | 3550 EXPECT_FALSE(root_->needs_push_properties()); |
3565 EXPECT_FALSE(root_->descendant_needs_push_properties()); | 3551 EXPECT_FALSE(root_->descendant_needs_push_properties()); |
3566 EXPECT_FALSE(child_->needs_push_properties()); | 3552 EXPECT_FALSE(child_->needs_push_properties()); |
3567 EXPECT_FALSE(child_->descendant_needs_push_properties()); | 3553 EXPECT_FALSE(child_->descendant_needs_push_properties()); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3630 break; | 3616 break; |
3631 } | 3617 } |
3632 } | 3618 } |
3633 }; | 3619 }; |
3634 | 3620 |
3635 MULTI_THREAD_TEST_F(LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion); | 3621 MULTI_THREAD_TEST_F(LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion); |
3636 | 3622 |
3637 class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursionWithPersistence | 3623 class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursionWithPersistence |
3638 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { | 3624 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { |
3639 protected: | 3625 protected: |
3640 virtual void DidCommitAndDrawFrame() override { | 3626 void DidCommitAndDrawFrame() override { |
3641 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; | 3627 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; |
3642 switch (last_source_frame_number) { | 3628 switch (last_source_frame_number) { |
3643 case 0: | 3629 case 0: |
3644 layer_tree_host()->SetRootLayer(root_); | 3630 layer_tree_host()->SetRootLayer(root_); |
3645 grandchild1_->set_persist_needs_push_properties(true); | 3631 grandchild1_->set_persist_needs_push_properties(true); |
3646 grandchild2_->set_persist_needs_push_properties(true); | 3632 grandchild2_->set_persist_needs_push_properties(true); |
3647 break; | 3633 break; |
3648 case 1: | 3634 case 1: |
3649 EXPECT_FALSE(root_->needs_push_properties()); | 3635 EXPECT_FALSE(root_->needs_push_properties()); |
3650 EXPECT_TRUE(root_->descendant_needs_push_properties()); | 3636 EXPECT_TRUE(root_->descendant_needs_push_properties()); |
(...skipping 27 matching lines...) Expand all Loading... |
3678 } | 3664 } |
3679 } | 3665 } |
3680 }; | 3666 }; |
3681 | 3667 |
3682 MULTI_THREAD_TEST_F( | 3668 MULTI_THREAD_TEST_F( |
3683 LayerTreeHostTestPushPropertiesRemovingChildStopsRecursionWithPersistence); | 3669 LayerTreeHostTestPushPropertiesRemovingChildStopsRecursionWithPersistence); |
3684 | 3670 |
3685 class LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree | 3671 class LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree |
3686 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { | 3672 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { |
3687 protected: | 3673 protected: |
3688 virtual void DidCommitAndDrawFrame() override { | 3674 void DidCommitAndDrawFrame() override { |
3689 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; | 3675 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; |
3690 switch (last_source_frame_number) { | 3676 switch (last_source_frame_number) { |
3691 case 0: | 3677 case 0: |
3692 layer_tree_host()->SetRootLayer(root_); | 3678 layer_tree_host()->SetRootLayer(root_); |
3693 break; | 3679 break; |
3694 case 1: | 3680 case 1: |
3695 EXPECT_FALSE(root_->needs_push_properties()); | 3681 EXPECT_FALSE(root_->needs_push_properties()); |
3696 EXPECT_FALSE(root_->descendant_needs_push_properties()); | 3682 EXPECT_FALSE(root_->descendant_needs_push_properties()); |
3697 EXPECT_FALSE(child_->needs_push_properties()); | 3683 EXPECT_FALSE(child_->needs_push_properties()); |
3698 EXPECT_FALSE(child_->descendant_needs_push_properties()); | 3684 EXPECT_FALSE(child_->descendant_needs_push_properties()); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3746 } | 3732 } |
3747 } | 3733 } |
3748 }; | 3734 }; |
3749 | 3735 |
3750 MULTI_THREAD_TEST_F( | 3736 MULTI_THREAD_TEST_F( |
3751 LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree); | 3737 LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree); |
3752 | 3738 |
3753 class LayerTreeHostTestPushPropertiesSetPropertyInParentThenChild | 3739 class LayerTreeHostTestPushPropertiesSetPropertyInParentThenChild |
3754 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { | 3740 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { |
3755 protected: | 3741 protected: |
3756 virtual void DidCommitAndDrawFrame() override { | 3742 void DidCommitAndDrawFrame() override { |
3757 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; | 3743 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; |
3758 switch (last_source_frame_number) { | 3744 switch (last_source_frame_number) { |
3759 case 0: | 3745 case 0: |
3760 layer_tree_host()->SetRootLayer(root_); | 3746 layer_tree_host()->SetRootLayer(root_); |
3761 break; | 3747 break; |
3762 case 1: | 3748 case 1: |
3763 EXPECT_FALSE(root_->needs_push_properties()); | 3749 EXPECT_FALSE(root_->needs_push_properties()); |
3764 EXPECT_FALSE(root_->descendant_needs_push_properties()); | 3750 EXPECT_FALSE(root_->descendant_needs_push_properties()); |
3765 EXPECT_FALSE(child_->needs_push_properties()); | 3751 EXPECT_FALSE(child_->needs_push_properties()); |
3766 EXPECT_FALSE(child_->descendant_needs_push_properties()); | 3752 EXPECT_FALSE(child_->descendant_needs_push_properties()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3810 } | 3796 } |
3811 } | 3797 } |
3812 }; | 3798 }; |
3813 | 3799 |
3814 MULTI_THREAD_TEST_F( | 3800 MULTI_THREAD_TEST_F( |
3815 LayerTreeHostTestPushPropertiesSetPropertyInParentThenChild); | 3801 LayerTreeHostTestPushPropertiesSetPropertyInParentThenChild); |
3816 | 3802 |
3817 class LayerTreeHostTestPushPropertiesSetPropertyInChildThenParent | 3803 class LayerTreeHostTestPushPropertiesSetPropertyInChildThenParent |
3818 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { | 3804 : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren { |
3819 protected: | 3805 protected: |
3820 virtual void DidCommitAndDrawFrame() override { | 3806 void DidCommitAndDrawFrame() override { |
3821 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; | 3807 int last_source_frame_number = layer_tree_host()->source_frame_number() - 1; |
3822 switch (last_source_frame_number) { | 3808 switch (last_source_frame_number) { |
3823 case 0: | 3809 case 0: |
3824 layer_tree_host()->SetRootLayer(root_); | 3810 layer_tree_host()->SetRootLayer(root_); |
3825 break; | 3811 break; |
3826 case 1: | 3812 case 1: |
3827 EXPECT_FALSE(root_->needs_push_properties()); | 3813 EXPECT_FALSE(root_->needs_push_properties()); |
3828 EXPECT_FALSE(root_->descendant_needs_push_properties()); | 3814 EXPECT_FALSE(root_->descendant_needs_push_properties()); |
3829 EXPECT_FALSE(child_->needs_push_properties()); | 3815 EXPECT_FALSE(child_->needs_push_properties()); |
3830 EXPECT_FALSE(child_->descendant_needs_push_properties()); | 3816 EXPECT_FALSE(child_->descendant_needs_push_properties()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3877 | 3863 |
3878 MULTI_THREAD_TEST_F( | 3864 MULTI_THREAD_TEST_F( |
3879 LayerTreeHostTestPushPropertiesSetPropertyInChildThenParent); | 3865 LayerTreeHostTestPushPropertiesSetPropertyInChildThenParent); |
3880 | 3866 |
3881 // This test verifies that the tree activation callback is invoked correctly. | 3867 // This test verifies that the tree activation callback is invoked correctly. |
3882 class LayerTreeHostTestTreeActivationCallback : public LayerTreeHostTest { | 3868 class LayerTreeHostTestTreeActivationCallback : public LayerTreeHostTest { |
3883 public: | 3869 public: |
3884 LayerTreeHostTestTreeActivationCallback() | 3870 LayerTreeHostTestTreeActivationCallback() |
3885 : num_commits_(0), callback_count_(0) {} | 3871 : num_commits_(0), callback_count_(0) {} |
3886 | 3872 |
3887 virtual void BeginTest() override { | 3873 void BeginTest() override { |
3888 EXPECT_TRUE(HasImplThread()); | 3874 EXPECT_TRUE(HasImplThread()); |
3889 PostSetNeedsCommitToMainThread(); | 3875 PostSetNeedsCommitToMainThread(); |
3890 } | 3876 } |
3891 | 3877 |
3892 virtual DrawResult PrepareToDrawOnThread( | 3878 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
3893 LayerTreeHostImpl* host_impl, | 3879 LayerTreeHostImpl::FrameData* frame_data, |
3894 LayerTreeHostImpl::FrameData* frame_data, | 3880 DrawResult draw_result) override { |
3895 DrawResult draw_result) override { | |
3896 ++num_commits_; | 3881 ++num_commits_; |
3897 switch (num_commits_) { | 3882 switch (num_commits_) { |
3898 case 1: | 3883 case 1: |
3899 EXPECT_EQ(0, callback_count_); | 3884 EXPECT_EQ(0, callback_count_); |
3900 callback_count_ = 0; | 3885 callback_count_ = 0; |
3901 SetCallback(true); | 3886 SetCallback(true); |
3902 PostSetNeedsCommitToMainThread(); | 3887 PostSetNeedsCommitToMainThread(); |
3903 break; | 3888 break; |
3904 case 2: | 3889 case 2: |
3905 EXPECT_EQ(1, callback_count_); | 3890 EXPECT_EQ(1, callback_count_); |
3906 callback_count_ = 0; | 3891 callback_count_ = 0; |
3907 SetCallback(false); | 3892 SetCallback(false); |
3908 PostSetNeedsCommitToMainThread(); | 3893 PostSetNeedsCommitToMainThread(); |
3909 break; | 3894 break; |
3910 case 3: | 3895 case 3: |
3911 EXPECT_EQ(0, callback_count_); | 3896 EXPECT_EQ(0, callback_count_); |
3912 callback_count_ = 0; | 3897 callback_count_ = 0; |
3913 EndTest(); | 3898 EndTest(); |
3914 break; | 3899 break; |
3915 default: | 3900 default: |
3916 ADD_FAILURE() << num_commits_; | 3901 ADD_FAILURE() << num_commits_; |
3917 EndTest(); | 3902 EndTest(); |
3918 break; | 3903 break; |
3919 } | 3904 } |
3920 return LayerTreeHostTest::PrepareToDrawOnThread( | 3905 return LayerTreeHostTest::PrepareToDrawOnThread( |
3921 host_impl, frame_data, draw_result); | 3906 host_impl, frame_data, draw_result); |
3922 } | 3907 } |
3923 | 3908 |
3924 virtual void AfterTest() override { EXPECT_EQ(3, num_commits_); } | 3909 void AfterTest() override { EXPECT_EQ(3, num_commits_); } |
3925 | 3910 |
3926 void SetCallback(bool enable) { | 3911 void SetCallback(bool enable) { |
3927 output_surface()->SetTreeActivationCallback( | 3912 output_surface()->SetTreeActivationCallback( |
3928 enable | 3913 enable |
3929 ? base::Bind( | 3914 ? base::Bind( |
3930 &LayerTreeHostTestTreeActivationCallback::ActivationCallback, | 3915 &LayerTreeHostTestTreeActivationCallback::ActivationCallback, |
3931 base::Unretained(this)) | 3916 base::Unretained(this)) |
3932 : base::Closure()); | 3917 : base::Closure()); |
3933 } | 3918 } |
3934 | 3919 |
3935 void ActivationCallback() { ++callback_count_; } | 3920 void ActivationCallback() { ++callback_count_; } |
3936 | 3921 |
3937 int num_commits_; | 3922 int num_commits_; |
3938 int callback_count_; | 3923 int callback_count_; |
3939 }; | 3924 }; |
3940 | 3925 |
3941 TEST_F(LayerTreeHostTestTreeActivationCallback, DirectRenderer) { | 3926 TEST_F(LayerTreeHostTestTreeActivationCallback, DirectRenderer) { |
3942 RunTest(true, false, true); | 3927 RunTest(true, false, true); |
3943 } | 3928 } |
3944 | 3929 |
3945 TEST_F(LayerTreeHostTestTreeActivationCallback, DelegatingRenderer) { | 3930 TEST_F(LayerTreeHostTestTreeActivationCallback, DelegatingRenderer) { |
3946 RunTest(true, true, true); | 3931 RunTest(true, true, true); |
3947 } | 3932 } |
3948 | 3933 |
3949 class LayerInvalidateCausesDraw : public LayerTreeHostTest { | 3934 class LayerInvalidateCausesDraw : public LayerTreeHostTest { |
3950 public: | 3935 public: |
3951 LayerInvalidateCausesDraw() : num_commits_(0), num_draws_(0) {} | 3936 LayerInvalidateCausesDraw() : num_commits_(0), num_draws_(0) {} |
3952 | 3937 |
3953 virtual void BeginTest() override { | 3938 void BeginTest() override { |
3954 ASSERT_TRUE(!!invalidate_layer_.get()) | 3939 ASSERT_TRUE(!!invalidate_layer_.get()) |
3955 << "Derived tests must set this in SetupTree"; | 3940 << "Derived tests must set this in SetupTree"; |
3956 | 3941 |
3957 // One initial commit. | 3942 // One initial commit. |
3958 PostSetNeedsCommitToMainThread(); | 3943 PostSetNeedsCommitToMainThread(); |
3959 } | 3944 } |
3960 | 3945 |
3961 virtual void DidCommitAndDrawFrame() override { | 3946 void DidCommitAndDrawFrame() override { |
3962 // After commit, invalidate the layer. This should cause a commit. | 3947 // After commit, invalidate the layer. This should cause a commit. |
3963 if (layer_tree_host()->source_frame_number() == 1) | 3948 if (layer_tree_host()->source_frame_number() == 1) |
3964 invalidate_layer_->SetNeedsDisplay(); | 3949 invalidate_layer_->SetNeedsDisplay(); |
3965 } | 3950 } |
3966 | 3951 |
3967 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 3952 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
3968 num_draws_++; | 3953 num_draws_++; |
3969 if (impl->active_tree()->source_frame_number() == 1) | 3954 if (impl->active_tree()->source_frame_number() == 1) |
3970 EndTest(); | 3955 EndTest(); |
3971 } | 3956 } |
3972 | 3957 |
3973 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 3958 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
3974 num_commits_++; | 3959 num_commits_++; |
3975 } | 3960 } |
3976 | 3961 |
3977 virtual void AfterTest() override { | 3962 void AfterTest() override { |
3978 EXPECT_GE(2, num_commits_); | 3963 EXPECT_GE(2, num_commits_); |
3979 EXPECT_GE(2, num_draws_); | 3964 EXPECT_GE(2, num_draws_); |
3980 } | 3965 } |
3981 | 3966 |
3982 protected: | 3967 protected: |
3983 scoped_refptr<Layer> invalidate_layer_; | 3968 scoped_refptr<Layer> invalidate_layer_; |
3984 | 3969 |
3985 private: | 3970 private: |
3986 int num_commits_; | 3971 int num_commits_; |
3987 int num_draws_; | 3972 int num_draws_; |
3988 }; | 3973 }; |
3989 | 3974 |
3990 // VideoLayer must support being invalidated and then passing that along | 3975 // VideoLayer must support being invalidated and then passing that along |
3991 // to the compositor thread, even though no resources are updated in | 3976 // to the compositor thread, even though no resources are updated in |
3992 // response to that invalidation. | 3977 // response to that invalidation. |
3993 class LayerTreeHostTestVideoLayerInvalidate : public LayerInvalidateCausesDraw { | 3978 class LayerTreeHostTestVideoLayerInvalidate : public LayerInvalidateCausesDraw { |
3994 public: | 3979 public: |
3995 virtual void SetupTree() override { | 3980 void SetupTree() override { |
3996 LayerTreeHostTest::SetupTree(); | 3981 LayerTreeHostTest::SetupTree(); |
3997 scoped_refptr<VideoLayer> video_layer = | 3982 scoped_refptr<VideoLayer> video_layer = |
3998 VideoLayer::Create(&provider_, media::VIDEO_ROTATION_0); | 3983 VideoLayer::Create(&provider_, media::VIDEO_ROTATION_0); |
3999 video_layer->SetBounds(gfx::Size(10, 10)); | 3984 video_layer->SetBounds(gfx::Size(10, 10)); |
4000 video_layer->SetIsDrawable(true); | 3985 video_layer->SetIsDrawable(true); |
4001 layer_tree_host()->root_layer()->AddChild(video_layer); | 3986 layer_tree_host()->root_layer()->AddChild(video_layer); |
4002 | 3987 |
4003 invalidate_layer_ = video_layer; | 3988 invalidate_layer_ = video_layer; |
4004 } | 3989 } |
4005 | 3990 |
4006 private: | 3991 private: |
4007 FakeVideoFrameProvider provider_; | 3992 FakeVideoFrameProvider provider_; |
4008 }; | 3993 }; |
4009 | 3994 |
4010 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestVideoLayerInvalidate); | 3995 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestVideoLayerInvalidate); |
4011 | 3996 |
4012 // IOSurfaceLayer must support being invalidated and then passing that along | 3997 // IOSurfaceLayer must support being invalidated and then passing that along |
4013 // to the compositor thread, even though no resources are updated in | 3998 // to the compositor thread, even though no resources are updated in |
4014 // response to that invalidation. | 3999 // response to that invalidation. |
4015 class LayerTreeHostTestIOSurfaceLayerInvalidate | 4000 class LayerTreeHostTestIOSurfaceLayerInvalidate |
4016 : public LayerInvalidateCausesDraw { | 4001 : public LayerInvalidateCausesDraw { |
4017 public: | 4002 public: |
4018 virtual void SetupTree() override { | 4003 void SetupTree() override { |
4019 LayerTreeHostTest::SetupTree(); | 4004 LayerTreeHostTest::SetupTree(); |
4020 scoped_refptr<IOSurfaceLayer> layer = IOSurfaceLayer::Create(); | 4005 scoped_refptr<IOSurfaceLayer> layer = IOSurfaceLayer::Create(); |
4021 layer->SetBounds(gfx::Size(10, 10)); | 4006 layer->SetBounds(gfx::Size(10, 10)); |
4022 uint32_t fake_io_surface_id = 7; | 4007 uint32_t fake_io_surface_id = 7; |
4023 layer->SetIOSurfaceProperties(fake_io_surface_id, layer->bounds()); | 4008 layer->SetIOSurfaceProperties(fake_io_surface_id, layer->bounds()); |
4024 layer->SetIsDrawable(true); | 4009 layer->SetIsDrawable(true); |
4025 layer_tree_host()->root_layer()->AddChild(layer); | 4010 layer_tree_host()->root_layer()->AddChild(layer); |
4026 | 4011 |
4027 invalidate_layer_ = layer; | 4012 invalidate_layer_ = layer; |
4028 } | 4013 } |
4029 }; | 4014 }; |
4030 | 4015 |
4031 // TODO(danakj): IOSurface layer can not be transported. crbug.com/239335 | 4016 // TODO(danakj): IOSurface layer can not be transported. crbug.com/239335 |
4032 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( | 4017 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( |
4033 LayerTreeHostTestIOSurfaceLayerInvalidate); | 4018 LayerTreeHostTestIOSurfaceLayerInvalidate); |
4034 | 4019 |
4035 class LayerTreeHostTestPushHiddenLayer : public LayerTreeHostTest { | 4020 class LayerTreeHostTestPushHiddenLayer : public LayerTreeHostTest { |
4036 protected: | 4021 protected: |
4037 virtual void SetupTree() override { | 4022 void SetupTree() override { |
4038 root_layer_ = Layer::Create(); | 4023 root_layer_ = Layer::Create(); |
4039 root_layer_->SetPosition(gfx::Point()); | 4024 root_layer_->SetPosition(gfx::Point()); |
4040 root_layer_->SetBounds(gfx::Size(10, 10)); | 4025 root_layer_->SetBounds(gfx::Size(10, 10)); |
4041 | 4026 |
4042 parent_layer_ = SolidColorLayer::Create(); | 4027 parent_layer_ = SolidColorLayer::Create(); |
4043 parent_layer_->SetPosition(gfx::Point()); | 4028 parent_layer_->SetPosition(gfx::Point()); |
4044 parent_layer_->SetBounds(gfx::Size(10, 10)); | 4029 parent_layer_->SetBounds(gfx::Size(10, 10)); |
4045 parent_layer_->SetIsDrawable(true); | 4030 parent_layer_->SetIsDrawable(true); |
4046 root_layer_->AddChild(parent_layer_); | 4031 root_layer_->AddChild(parent_layer_); |
4047 | 4032 |
4048 child_layer_ = SolidColorLayer::Create(); | 4033 child_layer_ = SolidColorLayer::Create(); |
4049 child_layer_->SetPosition(gfx::Point()); | 4034 child_layer_->SetPosition(gfx::Point()); |
4050 child_layer_->SetBounds(gfx::Size(10, 10)); | 4035 child_layer_->SetBounds(gfx::Size(10, 10)); |
4051 child_layer_->SetIsDrawable(true); | 4036 child_layer_->SetIsDrawable(true); |
4052 parent_layer_->AddChild(child_layer_); | 4037 parent_layer_->AddChild(child_layer_); |
4053 | 4038 |
4054 layer_tree_host()->SetRootLayer(root_layer_); | 4039 layer_tree_host()->SetRootLayer(root_layer_); |
4055 LayerTreeHostTest::SetupTree(); | 4040 LayerTreeHostTest::SetupTree(); |
4056 } | 4041 } |
4057 | 4042 |
4058 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4043 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4059 | 4044 |
4060 virtual void DidCommitAndDrawFrame() override { | 4045 void DidCommitAndDrawFrame() override { |
4061 switch (layer_tree_host()->source_frame_number()) { | 4046 switch (layer_tree_host()->source_frame_number()) { |
4062 case 1: | 4047 case 1: |
4063 // The layer type used does not need to push properties every frame. | 4048 // The layer type used does not need to push properties every frame. |
4064 EXPECT_FALSE(child_layer_->needs_push_properties()); | 4049 EXPECT_FALSE(child_layer_->needs_push_properties()); |
4065 | 4050 |
4066 // Change the bounds of the child layer, but make it skipped | 4051 // Change the bounds of the child layer, but make it skipped |
4067 // by CalculateDrawProperties. | 4052 // by CalculateDrawProperties. |
4068 parent_layer_->SetOpacity(0.f); | 4053 parent_layer_->SetOpacity(0.f); |
4069 child_layer_->SetBounds(gfx::Size(5, 5)); | 4054 child_layer_->SetBounds(gfx::Size(5, 5)); |
4070 break; | 4055 break; |
4071 case 2: | 4056 case 2: |
4072 // The bounds of the child layer were pushed to the impl side. | 4057 // The bounds of the child layer were pushed to the impl side. |
4073 EXPECT_FALSE(child_layer_->needs_push_properties()); | 4058 EXPECT_FALSE(child_layer_->needs_push_properties()); |
4074 | 4059 |
4075 EndTest(); | 4060 EndTest(); |
4076 break; | 4061 break; |
4077 } | 4062 } |
4078 } | 4063 } |
4079 | 4064 |
4080 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 4065 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
4081 LayerImpl* root = impl->active_tree()->root_layer(); | 4066 LayerImpl* root = impl->active_tree()->root_layer(); |
4082 LayerImpl* parent = root->children()[0]; | 4067 LayerImpl* parent = root->children()[0]; |
4083 LayerImpl* child = parent->children()[0]; | 4068 LayerImpl* child = parent->children()[0]; |
4084 | 4069 |
4085 switch (impl->active_tree()->source_frame_number()) { | 4070 switch (impl->active_tree()->source_frame_number()) { |
4086 case 1: | 4071 case 1: |
4087 EXPECT_EQ(gfx::Size(5, 5).ToString(), child->bounds().ToString()); | 4072 EXPECT_EQ(gfx::Size(5, 5).ToString(), child->bounds().ToString()); |
4088 break; | 4073 break; |
4089 } | 4074 } |
4090 } | 4075 } |
4091 | 4076 |
4092 virtual void AfterTest() override {} | 4077 void AfterTest() override {} |
4093 | 4078 |
4094 scoped_refptr<Layer> root_layer_; | 4079 scoped_refptr<Layer> root_layer_; |
4095 scoped_refptr<SolidColorLayer> parent_layer_; | 4080 scoped_refptr<SolidColorLayer> parent_layer_; |
4096 scoped_refptr<SolidColorLayer> child_layer_; | 4081 scoped_refptr<SolidColorLayer> child_layer_; |
4097 }; | 4082 }; |
4098 | 4083 |
4099 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPushHiddenLayer); | 4084 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPushHiddenLayer); |
4100 | 4085 |
4101 class LayerTreeHostTestUpdateLayerInEmptyViewport : public LayerTreeHostTest { | 4086 class LayerTreeHostTestUpdateLayerInEmptyViewport : public LayerTreeHostTest { |
4102 protected: | 4087 protected: |
4103 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 4088 void InitializeSettings(LayerTreeSettings* settings) override { |
4104 settings->impl_side_painting = true; | 4089 settings->impl_side_painting = true; |
4105 } | 4090 } |
4106 | 4091 |
4107 virtual void SetupTree() override { | 4092 void SetupTree() override { |
4108 root_layer_ = FakePictureLayer::Create(&client_); | 4093 root_layer_ = FakePictureLayer::Create(&client_); |
4109 root_layer_->SetBounds(gfx::Size(10, 10)); | 4094 root_layer_->SetBounds(gfx::Size(10, 10)); |
4110 | 4095 |
4111 layer_tree_host()->SetRootLayer(root_layer_); | 4096 layer_tree_host()->SetRootLayer(root_layer_); |
4112 LayerTreeHostTest::SetupTree(); | 4097 LayerTreeHostTest::SetupTree(); |
4113 } | 4098 } |
4114 | 4099 |
4115 virtual void BeginTest() override { | 4100 void BeginTest() override { |
4116 // The viewport is empty, but we still need to update layers on the main | 4101 // The viewport is empty, but we still need to update layers on the main |
4117 // thread. | 4102 // thread. |
4118 layer_tree_host()->SetViewportSize(gfx::Size(0, 0)); | 4103 layer_tree_host()->SetViewportSize(gfx::Size(0, 0)); |
4119 PostSetNeedsCommitToMainThread(); | 4104 PostSetNeedsCommitToMainThread(); |
4120 } | 4105 } |
4121 | 4106 |
4122 virtual void DidCommit() override { | 4107 void DidCommit() override { |
4123 // The layer should be updated even though the viewport is empty, so we | 4108 // The layer should be updated even though the viewport is empty, so we |
4124 // are capable of drawing it on the impl tree. | 4109 // are capable of drawing it on the impl tree. |
4125 EXPECT_GT(root_layer_->update_count(), 0u); | 4110 EXPECT_GT(root_layer_->update_count(), 0u); |
4126 EndTest(); | 4111 EndTest(); |
4127 } | 4112 } |
4128 | 4113 |
4129 virtual void AfterTest() override {} | 4114 void AfterTest() override {} |
4130 | 4115 |
4131 FakeContentLayerClient client_; | 4116 FakeContentLayerClient client_; |
4132 scoped_refptr<FakePictureLayer> root_layer_; | 4117 scoped_refptr<FakePictureLayer> root_layer_; |
4133 }; | 4118 }; |
4134 | 4119 |
4135 MULTI_THREAD_TEST_F(LayerTreeHostTestUpdateLayerInEmptyViewport); | 4120 MULTI_THREAD_TEST_F(LayerTreeHostTestUpdateLayerInEmptyViewport); |
4136 | 4121 |
4137 class LayerTreeHostTestAbortEvictedTextures : public LayerTreeHostTest { | 4122 class LayerTreeHostTestAbortEvictedTextures : public LayerTreeHostTest { |
4138 public: | 4123 public: |
4139 LayerTreeHostTestAbortEvictedTextures() | 4124 LayerTreeHostTestAbortEvictedTextures() |
4140 : num_will_begin_main_frames_(0), num_impl_commits_(0) {} | 4125 : num_will_begin_main_frames_(0), num_impl_commits_(0) {} |
4141 | 4126 |
4142 protected: | 4127 protected: |
4143 virtual void SetupTree() override { | 4128 void SetupTree() override { |
4144 scoped_refptr<SolidColorLayer> root_layer = SolidColorLayer::Create(); | 4129 scoped_refptr<SolidColorLayer> root_layer = SolidColorLayer::Create(); |
4145 root_layer->SetBounds(gfx::Size(200, 200)); | 4130 root_layer->SetBounds(gfx::Size(200, 200)); |
4146 root_layer->SetIsDrawable(true); | 4131 root_layer->SetIsDrawable(true); |
4147 | 4132 |
4148 layer_tree_host()->SetRootLayer(root_layer); | 4133 layer_tree_host()->SetRootLayer(root_layer); |
4149 LayerTreeHostTest::SetupTree(); | 4134 LayerTreeHostTest::SetupTree(); |
4150 } | 4135 } |
4151 | 4136 |
4152 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4137 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4153 | 4138 |
4154 virtual void WillBeginMainFrame() override { | 4139 void WillBeginMainFrame() override { |
4155 num_will_begin_main_frames_++; | 4140 num_will_begin_main_frames_++; |
4156 switch (num_will_begin_main_frames_) { | 4141 switch (num_will_begin_main_frames_) { |
4157 case 2: | 4142 case 2: |
4158 // Send a redraw to the compositor thread. This will (wrongly) be | 4143 // Send a redraw to the compositor thread. This will (wrongly) be |
4159 // ignored unless aborting resets the texture state. | 4144 // ignored unless aborting resets the texture state. |
4160 layer_tree_host()->SetNeedsRedraw(); | 4145 layer_tree_host()->SetNeedsRedraw(); |
4161 break; | 4146 break; |
4162 } | 4147 } |
4163 } | 4148 } |
4164 | 4149 |
4165 virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override { | 4150 void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
4166 num_impl_commits_++; | 4151 num_impl_commits_++; |
4167 } | 4152 } |
4168 | 4153 |
4169 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 4154 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
4170 switch (impl->SourceAnimationFrameNumber()) { | 4155 switch (impl->SourceAnimationFrameNumber()) { |
4171 case 1: | 4156 case 1: |
4172 // Prevent draws until commit. | 4157 // Prevent draws until commit. |
4173 impl->active_tree()->SetContentsTexturesPurged(); | 4158 impl->active_tree()->SetContentsTexturesPurged(); |
4174 EXPECT_FALSE(impl->CanDraw()); | 4159 EXPECT_FALSE(impl->CanDraw()); |
4175 // Trigger an abortable commit. | 4160 // Trigger an abortable commit. |
4176 impl->SetNeedsCommit(); | 4161 impl->SetNeedsCommit(); |
4177 break; | 4162 break; |
4178 case 2: | 4163 case 2: |
4179 EndTest(); | 4164 EndTest(); |
4180 break; | 4165 break; |
4181 } | 4166 } |
4182 } | 4167 } |
4183 | 4168 |
4184 virtual void AfterTest() override { | 4169 void AfterTest() override { |
4185 // Ensure that the commit was truly aborted. | 4170 // Ensure that the commit was truly aborted. |
4186 EXPECT_EQ(2, num_will_begin_main_frames_); | 4171 EXPECT_EQ(2, num_will_begin_main_frames_); |
4187 EXPECT_EQ(1, num_impl_commits_); | 4172 EXPECT_EQ(1, num_impl_commits_); |
4188 } | 4173 } |
4189 | 4174 |
4190 private: | 4175 private: |
4191 int num_will_begin_main_frames_; | 4176 int num_will_begin_main_frames_; |
4192 int num_impl_commits_; | 4177 int num_impl_commits_; |
4193 }; | 4178 }; |
4194 | 4179 |
4195 // Commits can only be aborted when using the thread proxy. | 4180 // Commits can only be aborted when using the thread proxy. |
4196 MULTI_THREAD_TEST_F(LayerTreeHostTestAbortEvictedTextures); | 4181 MULTI_THREAD_TEST_F(LayerTreeHostTestAbortEvictedTextures); |
4197 | 4182 |
4198 class LayerTreeHostTestMaxTransferBufferUsageBytes : public LayerTreeHostTest { | 4183 class LayerTreeHostTestMaxTransferBufferUsageBytes : public LayerTreeHostTest { |
4199 protected: | 4184 protected: |
4200 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 4185 void InitializeSettings(LayerTreeSettings* settings) override { |
4201 settings->impl_side_painting = true; | 4186 settings->impl_side_painting = true; |
4202 } | 4187 } |
4203 | 4188 |
4204 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback) | 4189 scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface( |
4205 override { | 4190 bool fallback) override { |
4206 scoped_refptr<TestContextProvider> context_provider = | 4191 scoped_refptr<TestContextProvider> context_provider = |
4207 TestContextProvider::Create(); | 4192 TestContextProvider::Create(); |
4208 context_provider->SetMaxTransferBufferUsageBytes(1024 * 1024); | 4193 context_provider->SetMaxTransferBufferUsageBytes(1024 * 1024); |
4209 if (delegating_renderer()) | 4194 if (delegating_renderer()) |
4210 return FakeOutputSurface::CreateDelegating3d(context_provider); | 4195 return FakeOutputSurface::CreateDelegating3d(context_provider); |
4211 else | 4196 else |
4212 return FakeOutputSurface::Create3d(context_provider); | 4197 return FakeOutputSurface::Create3d(context_provider); |
4213 } | 4198 } |
4214 | 4199 |
4215 virtual void SetupTree() override { | 4200 void SetupTree() override { |
4216 client_.set_fill_with_nonsolid_color(true); | 4201 client_.set_fill_with_nonsolid_color(true); |
4217 scoped_refptr<FakePictureLayer> root_layer = | 4202 scoped_refptr<FakePictureLayer> root_layer = |
4218 FakePictureLayer::Create(&client_); | 4203 FakePictureLayer::Create(&client_); |
4219 root_layer->SetBounds(gfx::Size(6000, 6000)); | 4204 root_layer->SetBounds(gfx::Size(6000, 6000)); |
4220 root_layer->SetIsDrawable(true); | 4205 root_layer->SetIsDrawable(true); |
4221 | 4206 |
4222 layer_tree_host()->SetRootLayer(root_layer); | 4207 layer_tree_host()->SetRootLayer(root_layer); |
4223 LayerTreeHostTest::SetupTree(); | 4208 LayerTreeHostTest::SetupTree(); |
4224 } | 4209 } |
4225 | 4210 |
4226 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4211 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4227 | 4212 |
4228 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 4213 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
4229 TestWebGraphicsContext3D* context = TestContext(); | 4214 TestWebGraphicsContext3D* context = TestContext(); |
4230 | 4215 |
4231 // Expect that the transfer buffer memory used is equal to the | 4216 // Expect that the transfer buffer memory used is equal to the |
4232 // MaxTransferBufferUsageBytes value set in CreateOutputSurface. | 4217 // MaxTransferBufferUsageBytes value set in CreateOutputSurface. |
4233 EXPECT_EQ(1024 * 1024u, context->max_used_transfer_buffer_usage_bytes()); | 4218 EXPECT_EQ(1024 * 1024u, context->max_used_transfer_buffer_usage_bytes()); |
4234 EndTest(); | 4219 EndTest(); |
4235 } | 4220 } |
4236 | 4221 |
4237 virtual void AfterTest() override {} | 4222 void AfterTest() override {} |
4238 | 4223 |
4239 private: | 4224 private: |
4240 FakeContentLayerClient client_; | 4225 FakeContentLayerClient client_; |
4241 }; | 4226 }; |
4242 | 4227 |
4243 // Impl-side painting is a multi-threaded compositor feature. | 4228 // Impl-side painting is a multi-threaded compositor feature. |
4244 MULTI_THREAD_TEST_F(LayerTreeHostTestMaxTransferBufferUsageBytes); | 4229 MULTI_THREAD_TEST_F(LayerTreeHostTestMaxTransferBufferUsageBytes); |
4245 | 4230 |
4246 // Test ensuring that memory limits are sent to the prioritized resource | 4231 // Test ensuring that memory limits are sent to the prioritized resource |
4247 // manager. | 4232 // manager. |
4248 class LayerTreeHostTestMemoryLimits : public LayerTreeHostTest { | 4233 class LayerTreeHostTestMemoryLimits : public LayerTreeHostTest { |
4249 public: | 4234 public: |
4250 LayerTreeHostTestMemoryLimits() : num_commits_(0) {} | 4235 LayerTreeHostTestMemoryLimits() : num_commits_(0) {} |
4251 | 4236 |
4252 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4237 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4253 | 4238 |
4254 virtual void WillCommit() override { | 4239 void WillCommit() override { |
4255 // Some commits are aborted, so increment number of attempted commits here. | 4240 // Some commits are aborted, so increment number of attempted commits here. |
4256 num_commits_++; | 4241 num_commits_++; |
4257 } | 4242 } |
4258 | 4243 |
4259 virtual void DidCommit() override { | 4244 void DidCommit() override { |
4260 switch (num_commits_) { | 4245 switch (num_commits_) { |
4261 case 1: | 4246 case 1: |
4262 // Verify default values. | 4247 // Verify default values. |
4263 EXPECT_EQ(PrioritizedResourceManager::DefaultMemoryAllocationLimit(), | 4248 EXPECT_EQ(PrioritizedResourceManager::DefaultMemoryAllocationLimit(), |
4264 layer_tree_host() | 4249 layer_tree_host() |
4265 ->contents_texture_manager() | 4250 ->contents_texture_manager() |
4266 ->MaxMemoryLimitBytes()); | 4251 ->MaxMemoryLimitBytes()); |
4267 EXPECT_EQ(PriorityCalculator::AllowEverythingCutoff(), | 4252 EXPECT_EQ(PriorityCalculator::AllowEverythingCutoff(), |
4268 layer_tree_host() | 4253 layer_tree_host() |
4269 ->contents_texture_manager() | 4254 ->contents_texture_manager() |
(...skipping 24 matching lines...) Expand all Loading... |
4294 ->ExternalPriorityCutoff()); | 4279 ->ExternalPriorityCutoff()); |
4295 EndTest(); | 4280 EndTest(); |
4296 break; | 4281 break; |
4297 case 4: | 4282 case 4: |
4298 // Make sure no extra commits happen. | 4283 // Make sure no extra commits happen. |
4299 NOTREACHED(); | 4284 NOTREACHED(); |
4300 break; | 4285 break; |
4301 } | 4286 } |
4302 } | 4287 } |
4303 | 4288 |
4304 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 4289 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
4305 switch (num_commits_) { | 4290 switch (num_commits_) { |
4306 case 1: | 4291 case 1: |
4307 break; | 4292 break; |
4308 case 2: | 4293 case 2: |
4309 // This will trigger a commit because the priority cutoff has changed. | 4294 // This will trigger a commit because the priority cutoff has changed. |
4310 impl->SetMemoryPolicy(ManagedMemoryPolicy( | 4295 impl->SetMemoryPolicy(ManagedMemoryPolicy( |
4311 16u * 1024u * 1024u, | 4296 16u * 1024u * 1024u, |
4312 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, | 4297 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, |
4313 1000)); | 4298 1000)); |
4314 break; | 4299 break; |
4315 case 3: | 4300 case 3: |
4316 // This will not trigger a commit because the priority cutoff has not | 4301 // This will not trigger a commit because the priority cutoff has not |
4317 // changed, and there is already enough memory for all allocations. | 4302 // changed, and there is already enough memory for all allocations. |
4318 impl->SetMemoryPolicy(ManagedMemoryPolicy( | 4303 impl->SetMemoryPolicy(ManagedMemoryPolicy( |
4319 32u * 1024u * 1024u, | 4304 32u * 1024u * 1024u, |
4320 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, | 4305 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, |
4321 1000)); | 4306 1000)); |
4322 break; | 4307 break; |
4323 case 4: | 4308 case 4: |
4324 NOTREACHED(); | 4309 NOTREACHED(); |
4325 break; | 4310 break; |
4326 } | 4311 } |
4327 } | 4312 } |
4328 | 4313 |
4329 virtual void AfterTest() override {} | 4314 void AfterTest() override {} |
4330 | 4315 |
4331 private: | 4316 private: |
4332 int num_commits_; | 4317 int num_commits_; |
4333 }; | 4318 }; |
4334 | 4319 |
4335 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostTestMemoryLimits); | 4320 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostTestMemoryLimits); |
4336 | 4321 |
4337 } // namespace | 4322 } // namespace |
4338 | 4323 |
4339 class LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface | 4324 class LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface |
4340 : public LayerTreeHostTest { | 4325 : public LayerTreeHostTest { |
4341 protected: | 4326 protected: |
4342 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface() | 4327 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface() |
4343 : first_output_surface_memory_limit_(4321234), | 4328 : first_output_surface_memory_limit_(4321234), |
4344 second_output_surface_memory_limit_(1234321) {} | 4329 second_output_surface_memory_limit_(1234321) {} |
4345 | 4330 |
4346 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback) | 4331 scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface( |
4347 override { | 4332 bool fallback) override { |
4348 if (!first_context_provider_.get()) { | 4333 if (!first_context_provider_.get()) { |
4349 first_context_provider_ = TestContextProvider::Create(); | 4334 first_context_provider_ = TestContextProvider::Create(); |
4350 } else { | 4335 } else { |
4351 EXPECT_FALSE(second_context_provider_.get()); | 4336 EXPECT_FALSE(second_context_provider_.get()); |
4352 second_context_provider_ = TestContextProvider::Create(); | 4337 second_context_provider_ = TestContextProvider::Create(); |
4353 } | 4338 } |
4354 | 4339 |
4355 scoped_refptr<TestContextProvider> provider(second_context_provider_.get() | 4340 scoped_refptr<TestContextProvider> provider(second_context_provider_.get() |
4356 ? second_context_provider_ | 4341 ? second_context_provider_ |
4357 : first_context_provider_); | 4342 : first_context_provider_); |
4358 scoped_ptr<FakeOutputSurface> output_surface; | 4343 scoped_ptr<FakeOutputSurface> output_surface; |
4359 if (delegating_renderer()) | 4344 if (delegating_renderer()) |
4360 output_surface = FakeOutputSurface::CreateDelegating3d(provider); | 4345 output_surface = FakeOutputSurface::CreateDelegating3d(provider); |
4361 else | 4346 else |
4362 output_surface = FakeOutputSurface::Create3d(provider); | 4347 output_surface = FakeOutputSurface::Create3d(provider); |
4363 output_surface->SetMemoryPolicyToSetAtBind( | 4348 output_surface->SetMemoryPolicyToSetAtBind( |
4364 make_scoped_ptr(new ManagedMemoryPolicy( | 4349 make_scoped_ptr(new ManagedMemoryPolicy( |
4365 second_context_provider_.get() ? second_output_surface_memory_limit_ | 4350 second_context_provider_.get() ? second_output_surface_memory_limit_ |
4366 : first_output_surface_memory_limit_, | 4351 : first_output_surface_memory_limit_, |
4367 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, | 4352 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, |
4368 ManagedMemoryPolicy::kDefaultNumResourcesLimit))); | 4353 ManagedMemoryPolicy::kDefaultNumResourcesLimit))); |
4369 return output_surface.Pass(); | 4354 return output_surface.Pass(); |
4370 } | 4355 } |
4371 | 4356 |
4372 virtual void SetupTree() override { | 4357 void SetupTree() override { |
4373 root_ = FakeContentLayer::Create(&client_); | 4358 root_ = FakeContentLayer::Create(&client_); |
4374 root_->SetBounds(gfx::Size(20, 20)); | 4359 root_->SetBounds(gfx::Size(20, 20)); |
4375 layer_tree_host()->SetRootLayer(root_); | 4360 layer_tree_host()->SetRootLayer(root_); |
4376 LayerTreeHostTest::SetupTree(); | 4361 LayerTreeHostTest::SetupTree(); |
4377 } | 4362 } |
4378 | 4363 |
4379 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4364 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4380 | 4365 |
4381 virtual void DidCommitAndDrawFrame() override { | 4366 void DidCommitAndDrawFrame() override { |
4382 // Lost context sometimes takes two frames to recreate. The third frame | 4367 // Lost context sometimes takes two frames to recreate. The third frame |
4383 // is sometimes aborted, so wait until the fourth frame to verify that | 4368 // is sometimes aborted, so wait until the fourth frame to verify that |
4384 // the memory has been set, and the fifth frame to end the test. | 4369 // the memory has been set, and the fifth frame to end the test. |
4385 if (layer_tree_host()->source_frame_number() < 5) { | 4370 if (layer_tree_host()->source_frame_number() < 5) { |
4386 layer_tree_host()->SetNeedsCommit(); | 4371 layer_tree_host()->SetNeedsCommit(); |
4387 } else if (layer_tree_host()->source_frame_number() == 5) { | 4372 } else if (layer_tree_host()->source_frame_number() == 5) { |
4388 EndTest(); | 4373 EndTest(); |
4389 } | 4374 } |
4390 } | 4375 } |
4391 | 4376 |
4392 virtual void SwapBuffersOnThread(LayerTreeHostImpl* impl, | 4377 void SwapBuffersOnThread(LayerTreeHostImpl* impl, bool result) override { |
4393 bool result) override { | |
4394 switch (impl->active_tree()->source_frame_number()) { | 4378 switch (impl->active_tree()->source_frame_number()) { |
4395 case 1: | 4379 case 1: |
4396 EXPECT_EQ(first_output_surface_memory_limit_, | 4380 EXPECT_EQ(first_output_surface_memory_limit_, |
4397 impl->memory_allocation_limit_bytes()); | 4381 impl->memory_allocation_limit_bytes()); |
4398 // Lose the output surface. | 4382 // Lose the output surface. |
4399 first_context_provider_->TestContext3d()->loseContextCHROMIUM( | 4383 first_context_provider_->TestContext3d()->loseContextCHROMIUM( |
4400 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); | 4384 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
4401 break; | 4385 break; |
4402 case 4: | 4386 case 4: |
4403 EXPECT_EQ(second_output_surface_memory_limit_, | 4387 EXPECT_EQ(second_output_surface_memory_limit_, |
4404 impl->memory_allocation_limit_bytes()); | 4388 impl->memory_allocation_limit_bytes()); |
4405 break; | 4389 break; |
4406 } | 4390 } |
4407 } | 4391 } |
4408 | 4392 |
4409 virtual void AfterTest() override {} | 4393 void AfterTest() override {} |
4410 | 4394 |
4411 scoped_refptr<TestContextProvider> first_context_provider_; | 4395 scoped_refptr<TestContextProvider> first_context_provider_; |
4412 scoped_refptr<TestContextProvider> second_context_provider_; | 4396 scoped_refptr<TestContextProvider> second_context_provider_; |
4413 size_t first_output_surface_memory_limit_; | 4397 size_t first_output_surface_memory_limit_; |
4414 size_t second_output_surface_memory_limit_; | 4398 size_t second_output_surface_memory_limit_; |
4415 FakeContentLayerClient client_; | 4399 FakeContentLayerClient client_; |
4416 scoped_refptr<FakeContentLayer> root_; | 4400 scoped_refptr<FakeContentLayer> root_; |
4417 }; | 4401 }; |
4418 | 4402 |
4419 // No output to copy for delegated renderers. | 4403 // No output to copy for delegated renderers. |
(...skipping 11 matching lines...) Expand all Loading... |
4431 bool did_not_swap_called; | 4415 bool did_not_swap_called; |
4432 bool dtor_called; | 4416 bool dtor_called; |
4433 SwapPromise::DidNotSwapReason reason; | 4417 SwapPromise::DidNotSwapReason reason; |
4434 base::Lock lock; | 4418 base::Lock lock; |
4435 }; | 4419 }; |
4436 | 4420 |
4437 class TestSwapPromise : public SwapPromise { | 4421 class TestSwapPromise : public SwapPromise { |
4438 public: | 4422 public: |
4439 explicit TestSwapPromise(TestSwapPromiseResult* result) : result_(result) {} | 4423 explicit TestSwapPromise(TestSwapPromiseResult* result) : result_(result) {} |
4440 | 4424 |
4441 virtual ~TestSwapPromise() { | 4425 ~TestSwapPromise() override { |
4442 base::AutoLock lock(result_->lock); | 4426 base::AutoLock lock(result_->lock); |
4443 result_->dtor_called = true; | 4427 result_->dtor_called = true; |
4444 } | 4428 } |
4445 | 4429 |
4446 virtual void DidSwap(CompositorFrameMetadata* metadata) override { | 4430 void DidSwap(CompositorFrameMetadata* metadata) override { |
4447 base::AutoLock lock(result_->lock); | 4431 base::AutoLock lock(result_->lock); |
4448 EXPECT_FALSE(result_->did_swap_called); | 4432 EXPECT_FALSE(result_->did_swap_called); |
4449 EXPECT_FALSE(result_->did_not_swap_called); | 4433 EXPECT_FALSE(result_->did_not_swap_called); |
4450 result_->did_swap_called = true; | 4434 result_->did_swap_called = true; |
4451 } | 4435 } |
4452 | 4436 |
4453 virtual void DidNotSwap(DidNotSwapReason reason) override { | 4437 void DidNotSwap(DidNotSwapReason reason) override { |
4454 base::AutoLock lock(result_->lock); | 4438 base::AutoLock lock(result_->lock); |
4455 EXPECT_FALSE(result_->did_swap_called); | 4439 EXPECT_FALSE(result_->did_swap_called); |
4456 EXPECT_FALSE(result_->did_not_swap_called); | 4440 EXPECT_FALSE(result_->did_not_swap_called); |
4457 result_->did_not_swap_called = true; | 4441 result_->did_not_swap_called = true; |
4458 result_->reason = reason; | 4442 result_->reason = reason; |
4459 } | 4443 } |
4460 | 4444 |
4461 virtual int64 TraceId() const override { return 0; } | 4445 int64 TraceId() const override { return 0; } |
4462 | 4446 |
4463 private: | 4447 private: |
4464 // Not owned. | 4448 // Not owned. |
4465 TestSwapPromiseResult* result_; | 4449 TestSwapPromiseResult* result_; |
4466 }; | 4450 }; |
4467 | 4451 |
4468 class LayerTreeHostTestBreakSwapPromise : public LayerTreeHostTest { | 4452 class LayerTreeHostTestBreakSwapPromise : public LayerTreeHostTest { |
4469 protected: | 4453 protected: |
4470 LayerTreeHostTestBreakSwapPromise() | 4454 LayerTreeHostTestBreakSwapPromise() |
4471 : commit_count_(0), commit_complete_count_(0) {} | 4455 : commit_count_(0), commit_complete_count_(0) {} |
4472 | 4456 |
4473 virtual void WillBeginMainFrame() override { | 4457 void WillBeginMainFrame() override { |
4474 ASSERT_LE(commit_count_, 2); | 4458 ASSERT_LE(commit_count_, 2); |
4475 scoped_ptr<SwapPromise> swap_promise( | 4459 scoped_ptr<SwapPromise> swap_promise( |
4476 new TestSwapPromise(&swap_promise_result_[commit_count_])); | 4460 new TestSwapPromise(&swap_promise_result_[commit_count_])); |
4477 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); | 4461 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); |
4478 } | 4462 } |
4479 | 4463 |
4480 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4464 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4481 | 4465 |
4482 virtual void DidCommit() override { | 4466 void DidCommit() override { |
4483 commit_count_++; | 4467 commit_count_++; |
4484 if (commit_count_ == 2) { | 4468 if (commit_count_ == 2) { |
4485 // This commit will finish. | 4469 // This commit will finish. |
4486 layer_tree_host()->SetNeedsCommit(); | 4470 layer_tree_host()->SetNeedsCommit(); |
4487 } | 4471 } |
4488 } | 4472 } |
4489 | 4473 |
4490 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 4474 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
4491 commit_complete_count_++; | 4475 commit_complete_count_++; |
4492 if (commit_complete_count_ == 1) { | 4476 if (commit_complete_count_ == 1) { |
4493 // This commit will be aborted because no actual update. | 4477 // This commit will be aborted because no actual update. |
4494 PostSetNeedsUpdateLayersToMainThread(); | 4478 PostSetNeedsUpdateLayersToMainThread(); |
4495 } else { | 4479 } else { |
4496 EndTest(); | 4480 EndTest(); |
4497 } | 4481 } |
4498 } | 4482 } |
4499 | 4483 |
4500 virtual void AfterTest() override { | 4484 void AfterTest() override { |
4501 // 3 commits are scheduled. 2 completes. 1 is aborted. | 4485 // 3 commits are scheduled. 2 completes. 1 is aborted. |
4502 EXPECT_EQ(commit_count_, 3); | 4486 EXPECT_EQ(commit_count_, 3); |
4503 EXPECT_EQ(commit_complete_count_, 2); | 4487 EXPECT_EQ(commit_complete_count_, 2); |
4504 | 4488 |
4505 { | 4489 { |
4506 // The first commit completes and causes swap buffer which finishes | 4490 // The first commit completes and causes swap buffer which finishes |
4507 // the promise. | 4491 // the promise. |
4508 base::AutoLock lock(swap_promise_result_[0].lock); | 4492 base::AutoLock lock(swap_promise_result_[0].lock); |
4509 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); | 4493 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); |
4510 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); | 4494 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); |
(...skipping 23 matching lines...) Expand all Loading... |
4534 int commit_count_; | 4518 int commit_count_; |
4535 int commit_complete_count_; | 4519 int commit_complete_count_; |
4536 TestSwapPromiseResult swap_promise_result_[3]; | 4520 TestSwapPromiseResult swap_promise_result_[3]; |
4537 }; | 4521 }; |
4538 | 4522 |
4539 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise); | 4523 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise); |
4540 | 4524 |
4541 class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit | 4525 class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit |
4542 : public LayerTreeHostTest { | 4526 : public LayerTreeHostTest { |
4543 protected: | 4527 protected: |
4544 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4528 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4545 | 4529 |
4546 virtual void DidCommit() override { | 4530 void DidCommit() override { |
4547 layer_tree_host()->SetDeferCommits(true); | 4531 layer_tree_host()->SetDeferCommits(true); |
4548 layer_tree_host()->SetNeedsCommit(); | 4532 layer_tree_host()->SetNeedsCommit(); |
4549 } | 4533 } |
4550 | 4534 |
4551 virtual void DidDeferCommit() override { | 4535 void DidDeferCommit() override { |
4552 layer_tree_host()->SetVisible(false); | 4536 layer_tree_host()->SetVisible(false); |
4553 scoped_ptr<SwapPromise> swap_promise( | 4537 scoped_ptr<SwapPromise> swap_promise( |
4554 new TestSwapPromise(&swap_promise_result_)); | 4538 new TestSwapPromise(&swap_promise_result_)); |
4555 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); | 4539 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); |
4556 layer_tree_host()->SetDeferCommits(false); | 4540 layer_tree_host()->SetDeferCommits(false); |
4557 } | 4541 } |
4558 | 4542 |
4559 virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, | 4543 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
4560 bool did_handle) override { | 4544 bool did_handle) override { |
4561 EndTest(); | 4545 EndTest(); |
4562 } | 4546 } |
4563 | 4547 |
4564 virtual void AfterTest() override { | 4548 void AfterTest() override { |
4565 { | 4549 { |
4566 base::AutoLock lock(swap_promise_result_.lock); | 4550 base::AutoLock lock(swap_promise_result_.lock); |
4567 EXPECT_FALSE(swap_promise_result_.did_swap_called); | 4551 EXPECT_FALSE(swap_promise_result_.did_swap_called); |
4568 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); | 4552 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); |
4569 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); | 4553 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); |
4570 EXPECT_TRUE(swap_promise_result_.dtor_called); | 4554 EXPECT_TRUE(swap_promise_result_.dtor_called); |
4571 } | 4555 } |
4572 } | 4556 } |
4573 | 4557 |
4574 TestSwapPromiseResult swap_promise_result_; | 4558 TestSwapPromiseResult swap_promise_result_; |
4575 }; | 4559 }; |
4576 | 4560 |
4577 SINGLE_AND_MULTI_THREAD_TEST_F( | 4561 SINGLE_AND_MULTI_THREAD_TEST_F( |
4578 LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit); | 4562 LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit); |
4579 | 4563 |
4580 class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit | 4564 class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit |
4581 : public LayerTreeHostTest { | 4565 : public LayerTreeHostTest { |
4582 protected: | 4566 protected: |
4583 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4567 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4584 | 4568 |
4585 virtual void DidCommit() override { | 4569 void DidCommit() override { |
4586 if (TestEnded()) | 4570 if (TestEnded()) |
4587 return; | 4571 return; |
4588 layer_tree_host()->SetDeferCommits(true); | 4572 layer_tree_host()->SetDeferCommits(true); |
4589 layer_tree_host()->SetNeedsCommit(); | 4573 layer_tree_host()->SetNeedsCommit(); |
4590 } | 4574 } |
4591 | 4575 |
4592 virtual void DidDeferCommit() override { | 4576 void DidDeferCommit() override { |
4593 layer_tree_host()->DidLoseOutputSurface(); | 4577 layer_tree_host()->DidLoseOutputSurface(); |
4594 scoped_ptr<SwapPromise> swap_promise( | 4578 scoped_ptr<SwapPromise> swap_promise( |
4595 new TestSwapPromise(&swap_promise_result_)); | 4579 new TestSwapPromise(&swap_promise_result_)); |
4596 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); | 4580 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); |
4597 layer_tree_host()->SetDeferCommits(false); | 4581 layer_tree_host()->SetDeferCommits(false); |
4598 } | 4582 } |
4599 | 4583 |
4600 virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, | 4584 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
4601 bool did_handle) override { | 4585 bool did_handle) override { |
4602 EndTest(); | 4586 EndTest(); |
4603 // This lets the test finally commit and exit. | 4587 // This lets the test finally commit and exit. |
4604 MainThreadTaskRunner()->PostTask( | 4588 MainThreadTaskRunner()->PostTask( |
4605 FROM_HERE, | 4589 FROM_HERE, |
4606 base::Bind(&LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit:: | 4590 base::Bind(&LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit:: |
4607 FindOutputSurface, | 4591 FindOutputSurface, |
4608 base::Unretained(this))); | 4592 base::Unretained(this))); |
4609 } | 4593 } |
4610 | 4594 |
4611 void FindOutputSurface() { | 4595 void FindOutputSurface() { |
4612 layer_tree_host()->OnCreateAndInitializeOutputSurfaceAttempted(true); | 4596 layer_tree_host()->OnCreateAndInitializeOutputSurfaceAttempted(true); |
4613 } | 4597 } |
4614 | 4598 |
4615 virtual void AfterTest() override { | 4599 void AfterTest() override { |
4616 { | 4600 { |
4617 base::AutoLock lock(swap_promise_result_.lock); | 4601 base::AutoLock lock(swap_promise_result_.lock); |
4618 EXPECT_FALSE(swap_promise_result_.did_swap_called); | 4602 EXPECT_FALSE(swap_promise_result_.did_swap_called); |
4619 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); | 4603 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); |
4620 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); | 4604 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); |
4621 EXPECT_TRUE(swap_promise_result_.dtor_called); | 4605 EXPECT_TRUE(swap_promise_result_.dtor_called); |
4622 } | 4606 } |
4623 } | 4607 } |
4624 | 4608 |
4625 TestSwapPromiseResult swap_promise_result_; | 4609 TestSwapPromiseResult swap_promise_result_; |
4626 }; | 4610 }; |
4627 | 4611 |
4628 SINGLE_AND_MULTI_THREAD_TEST_F( | 4612 SINGLE_AND_MULTI_THREAD_TEST_F( |
4629 LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit); | 4613 LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit); |
4630 | 4614 |
4631 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { | 4615 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
4632 public: | 4616 public: |
4633 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, | 4617 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, |
4634 LayerTreeHostImpl* layer_tree_host_impl, | 4618 LayerTreeHostImpl* layer_tree_host_impl, |
4635 int* set_needs_commit_count, | 4619 int* set_needs_commit_count, |
4636 int* set_needs_redraw_count) | 4620 int* set_needs_redraw_count) |
4637 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), | 4621 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), |
4638 set_needs_commit_count_(set_needs_commit_count) {} | 4622 set_needs_commit_count_(set_needs_commit_count) {} |
4639 | 4623 |
4640 virtual ~SimpleSwapPromiseMonitor() {} | 4624 ~SimpleSwapPromiseMonitor() override {} |
4641 | 4625 |
4642 virtual void OnSetNeedsCommitOnMain() override { | 4626 void OnSetNeedsCommitOnMain() override { (*set_needs_commit_count_)++; } |
4643 (*set_needs_commit_count_)++; | |
4644 } | |
4645 | 4627 |
4646 virtual void OnSetNeedsRedrawOnImpl() override { | 4628 void OnSetNeedsRedrawOnImpl() override { |
4647 ADD_FAILURE() << "Should not get called on main thread."; | 4629 ADD_FAILURE() << "Should not get called on main thread."; |
4648 } | 4630 } |
4649 | 4631 |
4650 virtual void OnForwardScrollUpdateToMainThreadOnImpl() override { | 4632 void OnForwardScrollUpdateToMainThreadOnImpl() override { |
4651 ADD_FAILURE() << "Should not get called on main thread."; | 4633 ADD_FAILURE() << "Should not get called on main thread."; |
4652 } | 4634 } |
4653 | 4635 |
4654 private: | 4636 private: |
4655 int* set_needs_commit_count_; | 4637 int* set_needs_commit_count_; |
4656 }; | 4638 }; |
4657 | 4639 |
4658 class LayerTreeHostTestSimpleSwapPromiseMonitor : public LayerTreeHostTest { | 4640 class LayerTreeHostTestSimpleSwapPromiseMonitor : public LayerTreeHostTest { |
4659 public: | 4641 public: |
4660 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4642 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4661 | 4643 |
4662 virtual void WillBeginMainFrame() override { | 4644 void WillBeginMainFrame() override { |
4663 if (TestEnded()) | 4645 if (TestEnded()) |
4664 return; | 4646 return; |
4665 | 4647 |
4666 int set_needs_commit_count = 0; | 4648 int set_needs_commit_count = 0; |
4667 int set_needs_redraw_count = 0; | 4649 int set_needs_redraw_count = 0; |
4668 | 4650 |
4669 { | 4651 { |
4670 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( | 4652 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( |
4671 new SimpleSwapPromiseMonitor(layer_tree_host(), | 4653 new SimpleSwapPromiseMonitor(layer_tree_host(), |
4672 NULL, | 4654 NULL, |
(...skipping 28 matching lines...) Expand all Loading... |
4701 &set_needs_commit_count, | 4683 &set_needs_commit_count, |
4702 &set_needs_redraw_count)); | 4684 &set_needs_redraw_count)); |
4703 layer_tree_host()->SetNeedsAnimate(); | 4685 layer_tree_host()->SetNeedsAnimate(); |
4704 EXPECT_EQ(3, set_needs_commit_count); | 4686 EXPECT_EQ(3, set_needs_commit_count); |
4705 EXPECT_EQ(0, set_needs_redraw_count); | 4687 EXPECT_EQ(0, set_needs_redraw_count); |
4706 } | 4688 } |
4707 | 4689 |
4708 EndTest(); | 4690 EndTest(); |
4709 } | 4691 } |
4710 | 4692 |
4711 virtual void AfterTest() override {} | 4693 void AfterTest() override {} |
4712 }; | 4694 }; |
4713 | 4695 |
4714 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSimpleSwapPromiseMonitor); | 4696 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSimpleSwapPromiseMonitor); |
4715 | 4697 |
4716 class LayerTreeHostTestHighResRequiredAfterEvictingUIResources | 4698 class LayerTreeHostTestHighResRequiredAfterEvictingUIResources |
4717 : public LayerTreeHostTest { | 4699 : public LayerTreeHostTest { |
4718 protected: | 4700 protected: |
4719 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 4701 void InitializeSettings(LayerTreeSettings* settings) override { |
4720 settings->impl_side_painting = true; | 4702 settings->impl_side_painting = true; |
4721 } | 4703 } |
4722 | 4704 |
4723 virtual void SetupTree() override { | 4705 void SetupTree() override { |
4724 LayerTreeHostTest::SetupTree(); | 4706 LayerTreeHostTest::SetupTree(); |
4725 ui_resource_ = FakeScopedUIResource::Create(layer_tree_host()); | 4707 ui_resource_ = FakeScopedUIResource::Create(layer_tree_host()); |
4726 } | 4708 } |
4727 | 4709 |
4728 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4710 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4729 | 4711 |
4730 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 4712 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
4731 host_impl->EvictAllUIResources(); | 4713 host_impl->EvictAllUIResources(); |
4732 // Existence of evicted UI resources will trigger NEW_CONTENT_TAKES_PRIORITY | 4714 // Existence of evicted UI resources will trigger NEW_CONTENT_TAKES_PRIORITY |
4733 // mode. Active tree should require high-res to draw after entering this | 4715 // mode. Active tree should require high-res to draw after entering this |
4734 // mode to ensure that high-res tiles are also required for a pending tree | 4716 // mode to ensure that high-res tiles are also required for a pending tree |
4735 // to be activated. | 4717 // to be activated. |
4736 EXPECT_TRUE(host_impl->RequiresHighResToDraw()); | 4718 EXPECT_TRUE(host_impl->RequiresHighResToDraw()); |
4737 } | 4719 } |
4738 | 4720 |
4739 virtual void DidCommit() override { | 4721 void DidCommit() override { |
4740 int frame = layer_tree_host()->source_frame_number(); | 4722 int frame = layer_tree_host()->source_frame_number(); |
4741 switch (frame) { | 4723 switch (frame) { |
4742 case 1: | 4724 case 1: |
4743 PostSetNeedsCommitToMainThread(); | 4725 PostSetNeedsCommitToMainThread(); |
4744 break; | 4726 break; |
4745 case 2: | 4727 case 2: |
4746 ui_resource_ = nullptr; | 4728 ui_resource_ = nullptr; |
4747 EndTest(); | 4729 EndTest(); |
4748 break; | 4730 break; |
4749 } | 4731 } |
4750 } | 4732 } |
4751 | 4733 |
4752 virtual void AfterTest() override {} | 4734 void AfterTest() override {} |
4753 | 4735 |
4754 FakeContentLayerClient client_; | 4736 FakeContentLayerClient client_; |
4755 scoped_ptr<FakeScopedUIResource> ui_resource_; | 4737 scoped_ptr<FakeScopedUIResource> ui_resource_; |
4756 }; | 4738 }; |
4757 | 4739 |
4758 // This test is flaky, see http://crbug.com/386199 | 4740 // This test is flaky, see http://crbug.com/386199 |
4759 // MULTI_THREAD_TEST_F(LayerTreeHostTestHighResRequiredAfterEvictingUIResources) | 4741 // MULTI_THREAD_TEST_F(LayerTreeHostTestHighResRequiredAfterEvictingUIResources) |
4760 | 4742 |
4761 class LayerTreeHostTestGpuRasterizationDefault : public LayerTreeHostTest { | 4743 class LayerTreeHostTestGpuRasterizationDefault : public LayerTreeHostTest { |
4762 protected: | 4744 protected: |
4763 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 4745 void InitializeSettings(LayerTreeSettings* settings) override { |
4764 settings->impl_side_painting = true; | 4746 settings->impl_side_painting = true; |
4765 | 4747 |
4766 EXPECT_FALSE(settings->gpu_rasterization_enabled); | 4748 EXPECT_FALSE(settings->gpu_rasterization_enabled); |
4767 EXPECT_FALSE(settings->gpu_rasterization_forced); | 4749 EXPECT_FALSE(settings->gpu_rasterization_forced); |
4768 } | 4750 } |
4769 | 4751 |
4770 virtual void SetupTree() override { | 4752 void SetupTree() override { |
4771 LayerTreeHostTest::SetupTree(); | 4753 LayerTreeHostTest::SetupTree(); |
4772 | 4754 |
4773 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_); | 4755 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_); |
4774 layer->SetBounds(gfx::Size(10, 10)); | 4756 layer->SetBounds(gfx::Size(10, 10)); |
4775 layer->SetIsDrawable(true); | 4757 layer->SetIsDrawable(true); |
4776 layer_tree_host()->root_layer()->AddChild(layer); | 4758 layer_tree_host()->root_layer()->AddChild(layer); |
4777 } | 4759 } |
4778 | 4760 |
4779 virtual void BeginTest() override { | 4761 void BeginTest() override { |
4780 Layer* root = layer_tree_host()->root_layer(); | 4762 Layer* root = layer_tree_host()->root_layer(); |
4781 PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0)); | 4763 PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0)); |
4782 PicturePile* pile = layer->GetPicturePileForTesting(); | 4764 PicturePile* pile = layer->GetPicturePileForTesting(); |
4783 | 4765 |
4784 // Verify default values. | 4766 // Verify default values. |
4785 EXPECT_TRUE(root->IsSuitableForGpuRasterization()); | 4767 EXPECT_TRUE(root->IsSuitableForGpuRasterization()); |
4786 EXPECT_TRUE(layer->IsSuitableForGpuRasterization()); | 4768 EXPECT_TRUE(layer->IsSuitableForGpuRasterization()); |
4787 EXPECT_TRUE(pile->is_suitable_for_gpu_rasterization()); | 4769 EXPECT_TRUE(pile->is_suitable_for_gpu_rasterization()); |
4788 EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); | 4770 EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); |
4789 EXPECT_FALSE(layer_tree_host()->UseGpuRasterization()); | 4771 EXPECT_FALSE(layer_tree_host()->UseGpuRasterization()); |
4790 | 4772 |
4791 // Setting gpu rasterization trigger does not enable gpu rasterization. | 4773 // Setting gpu rasterization trigger does not enable gpu rasterization. |
4792 layer_tree_host()->SetHasGpuRasterizationTrigger(true); | 4774 layer_tree_host()->SetHasGpuRasterizationTrigger(true); |
4793 EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); | 4775 EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); |
4794 EXPECT_FALSE(layer_tree_host()->UseGpuRasterization()); | 4776 EXPECT_FALSE(layer_tree_host()->UseGpuRasterization()); |
4795 | 4777 |
4796 PostSetNeedsCommitToMainThread(); | 4778 PostSetNeedsCommitToMainThread(); |
4797 } | 4779 } |
4798 | 4780 |
4799 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 4781 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
4800 EXPECT_FALSE(host_impl->pending_tree()->use_gpu_rasterization()); | 4782 EXPECT_FALSE(host_impl->pending_tree()->use_gpu_rasterization()); |
4801 EXPECT_FALSE(host_impl->use_gpu_rasterization()); | 4783 EXPECT_FALSE(host_impl->use_gpu_rasterization()); |
4802 } | 4784 } |
4803 | 4785 |
4804 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 4786 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
4805 EXPECT_FALSE(host_impl->active_tree()->use_gpu_rasterization()); | 4787 EXPECT_FALSE(host_impl->active_tree()->use_gpu_rasterization()); |
4806 EXPECT_FALSE(host_impl->use_gpu_rasterization()); | 4788 EXPECT_FALSE(host_impl->use_gpu_rasterization()); |
4807 EndTest(); | 4789 EndTest(); |
4808 } | 4790 } |
4809 | 4791 |
4810 virtual void AfterTest() override {} | 4792 void AfterTest() override {} |
4811 | 4793 |
4812 FakeContentLayerClient layer_client_; | 4794 FakeContentLayerClient layer_client_; |
4813 }; | 4795 }; |
4814 | 4796 |
4815 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationDefault); | 4797 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationDefault); |
4816 | 4798 |
4817 class LayerTreeHostTestGpuRasterizationEnabled : public LayerTreeHostTest { | 4799 class LayerTreeHostTestGpuRasterizationEnabled : public LayerTreeHostTest { |
4818 protected: | 4800 protected: |
4819 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 4801 void InitializeSettings(LayerTreeSettings* settings) override { |
4820 settings->impl_side_painting = true; | 4802 settings->impl_side_painting = true; |
4821 | 4803 |
4822 EXPECT_FALSE(settings->gpu_rasterization_enabled); | 4804 EXPECT_FALSE(settings->gpu_rasterization_enabled); |
4823 settings->gpu_rasterization_enabled = true; | 4805 settings->gpu_rasterization_enabled = true; |
4824 } | 4806 } |
4825 | 4807 |
4826 virtual void SetupTree() override { | 4808 void SetupTree() override { |
4827 LayerTreeHostTest::SetupTree(); | 4809 LayerTreeHostTest::SetupTree(); |
4828 | 4810 |
4829 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_); | 4811 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_); |
4830 layer->SetBounds(gfx::Size(10, 10)); | 4812 layer->SetBounds(gfx::Size(10, 10)); |
4831 layer->SetIsDrawable(true); | 4813 layer->SetIsDrawable(true); |
4832 layer_tree_host()->root_layer()->AddChild(layer); | 4814 layer_tree_host()->root_layer()->AddChild(layer); |
4833 } | 4815 } |
4834 | 4816 |
4835 virtual void BeginTest() override { | 4817 void BeginTest() override { |
4836 Layer* root = layer_tree_host()->root_layer(); | 4818 Layer* root = layer_tree_host()->root_layer(); |
4837 PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0)); | 4819 PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0)); |
4838 PicturePile* pile = layer->GetPicturePileForTesting(); | 4820 PicturePile* pile = layer->GetPicturePileForTesting(); |
4839 | 4821 |
4840 // Verify default values. | 4822 // Verify default values. |
4841 EXPECT_TRUE(root->IsSuitableForGpuRasterization()); | 4823 EXPECT_TRUE(root->IsSuitableForGpuRasterization()); |
4842 EXPECT_TRUE(layer->IsSuitableForGpuRasterization()); | 4824 EXPECT_TRUE(layer->IsSuitableForGpuRasterization()); |
4843 EXPECT_TRUE(pile->is_suitable_for_gpu_rasterization()); | 4825 EXPECT_TRUE(pile->is_suitable_for_gpu_rasterization()); |
4844 EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); | 4826 EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); |
4845 EXPECT_FALSE(layer_tree_host()->UseGpuRasterization()); | 4827 EXPECT_FALSE(layer_tree_host()->UseGpuRasterization()); |
4846 | 4828 |
4847 // Gpu rasterization trigger is relevant. | 4829 // Gpu rasterization trigger is relevant. |
4848 layer_tree_host()->SetHasGpuRasterizationTrigger(true); | 4830 layer_tree_host()->SetHasGpuRasterizationTrigger(true); |
4849 EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); | 4831 EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); |
4850 EXPECT_TRUE(layer_tree_host()->UseGpuRasterization()); | 4832 EXPECT_TRUE(layer_tree_host()->UseGpuRasterization()); |
4851 | 4833 |
4852 // Content-based veto is relevant as well. | 4834 // Content-based veto is relevant as well. |
4853 pile->SetUnsuitableForGpuRasterizationForTesting(); | 4835 pile->SetUnsuitableForGpuRasterizationForTesting(); |
4854 EXPECT_FALSE(pile->is_suitable_for_gpu_rasterization()); | 4836 EXPECT_FALSE(pile->is_suitable_for_gpu_rasterization()); |
4855 EXPECT_FALSE(layer->IsSuitableForGpuRasterization()); | 4837 EXPECT_FALSE(layer->IsSuitableForGpuRasterization()); |
4856 // Veto will take effect when layers are updated. | 4838 // Veto will take effect when layers are updated. |
4857 // The results will be verified after commit is completed below. | 4839 // The results will be verified after commit is completed below. |
4858 // Since we are manually marking picture pile as unsuitable, | 4840 // Since we are manually marking picture pile as unsuitable, |
4859 // make sure that the layer gets a chance to update. | 4841 // make sure that the layer gets a chance to update. |
4860 layer->SetNeedsDisplay(); | 4842 layer->SetNeedsDisplay(); |
4861 PostSetNeedsCommitToMainThread(); | 4843 PostSetNeedsCommitToMainThread(); |
4862 } | 4844 } |
4863 | 4845 |
4864 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 4846 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
4865 EXPECT_FALSE(host_impl->pending_tree()->use_gpu_rasterization()); | 4847 EXPECT_FALSE(host_impl->pending_tree()->use_gpu_rasterization()); |
4866 EXPECT_FALSE(host_impl->use_gpu_rasterization()); | 4848 EXPECT_FALSE(host_impl->use_gpu_rasterization()); |
4867 } | 4849 } |
4868 | 4850 |
4869 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 4851 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
4870 EXPECT_FALSE(host_impl->active_tree()->use_gpu_rasterization()); | 4852 EXPECT_FALSE(host_impl->active_tree()->use_gpu_rasterization()); |
4871 EXPECT_FALSE(host_impl->use_gpu_rasterization()); | 4853 EXPECT_FALSE(host_impl->use_gpu_rasterization()); |
4872 EndTest(); | 4854 EndTest(); |
4873 } | 4855 } |
4874 | 4856 |
4875 virtual void AfterTest() override {} | 4857 void AfterTest() override {} |
4876 | 4858 |
4877 FakeContentLayerClient layer_client_; | 4859 FakeContentLayerClient layer_client_; |
4878 }; | 4860 }; |
4879 | 4861 |
4880 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationEnabled); | 4862 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationEnabled); |
4881 | 4863 |
4882 class LayerTreeHostTestGpuRasterizationForced : public LayerTreeHostTest { | 4864 class LayerTreeHostTestGpuRasterizationForced : public LayerTreeHostTest { |
4883 protected: | 4865 protected: |
4884 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 4866 void InitializeSettings(LayerTreeSettings* settings) override { |
4885 settings->impl_side_painting = true; | 4867 settings->impl_side_painting = true; |
4886 | 4868 |
4887 EXPECT_FALSE(settings->gpu_rasterization_forced); | 4869 EXPECT_FALSE(settings->gpu_rasterization_forced); |
4888 settings->gpu_rasterization_forced = true; | 4870 settings->gpu_rasterization_forced = true; |
4889 } | 4871 } |
4890 | 4872 |
4891 virtual void SetupTree() override { | 4873 void SetupTree() override { |
4892 LayerTreeHostTest::SetupTree(); | 4874 LayerTreeHostTest::SetupTree(); |
4893 | 4875 |
4894 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_); | 4876 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_); |
4895 layer->SetBounds(gfx::Size(10, 10)); | 4877 layer->SetBounds(gfx::Size(10, 10)); |
4896 layer->SetIsDrawable(true); | 4878 layer->SetIsDrawable(true); |
4897 layer_tree_host()->root_layer()->AddChild(layer); | 4879 layer_tree_host()->root_layer()->AddChild(layer); |
4898 } | 4880 } |
4899 | 4881 |
4900 virtual void BeginTest() override { | 4882 void BeginTest() override { |
4901 Layer* root = layer_tree_host()->root_layer(); | 4883 Layer* root = layer_tree_host()->root_layer(); |
4902 PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0)); | 4884 PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0)); |
4903 PicturePile* pile = layer->GetPicturePileForTesting(); | 4885 PicturePile* pile = layer->GetPicturePileForTesting(); |
4904 | 4886 |
4905 // Verify default values. | 4887 // Verify default values. |
4906 EXPECT_TRUE(root->IsSuitableForGpuRasterization()); | 4888 EXPECT_TRUE(root->IsSuitableForGpuRasterization()); |
4907 EXPECT_TRUE(layer->IsSuitableForGpuRasterization()); | 4889 EXPECT_TRUE(layer->IsSuitableForGpuRasterization()); |
4908 EXPECT_TRUE(pile->is_suitable_for_gpu_rasterization()); | 4890 EXPECT_TRUE(pile->is_suitable_for_gpu_rasterization()); |
4909 EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); | 4891 EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); |
4910 | 4892 |
4911 // With gpu rasterization forced, gpu rasterization trigger is irrelevant. | 4893 // With gpu rasterization forced, gpu rasterization trigger is irrelevant. |
4912 EXPECT_TRUE(layer_tree_host()->UseGpuRasterization()); | 4894 EXPECT_TRUE(layer_tree_host()->UseGpuRasterization()); |
4913 layer_tree_host()->SetHasGpuRasterizationTrigger(true); | 4895 layer_tree_host()->SetHasGpuRasterizationTrigger(true); |
4914 EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); | 4896 EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); |
4915 EXPECT_TRUE(layer_tree_host()->UseGpuRasterization()); | 4897 EXPECT_TRUE(layer_tree_host()->UseGpuRasterization()); |
4916 | 4898 |
4917 // Content-based veto is irrelevant as well. | 4899 // Content-based veto is irrelevant as well. |
4918 pile->SetUnsuitableForGpuRasterizationForTesting(); | 4900 pile->SetUnsuitableForGpuRasterizationForTesting(); |
4919 EXPECT_FALSE(pile->is_suitable_for_gpu_rasterization()); | 4901 EXPECT_FALSE(pile->is_suitable_for_gpu_rasterization()); |
4920 EXPECT_FALSE(layer->IsSuitableForGpuRasterization()); | 4902 EXPECT_FALSE(layer->IsSuitableForGpuRasterization()); |
4921 // Veto will take effect when layers are updated. | 4903 // Veto will take effect when layers are updated. |
4922 // The results will be verified after commit is completed below. | 4904 // The results will be verified after commit is completed below. |
4923 // Since we are manually marking picture pile as unsuitable, | 4905 // Since we are manually marking picture pile as unsuitable, |
4924 // make sure that the layer gets a chance to update. | 4906 // make sure that the layer gets a chance to update. |
4925 layer->SetNeedsDisplay(); | 4907 layer->SetNeedsDisplay(); |
4926 PostSetNeedsCommitToMainThread(); | 4908 PostSetNeedsCommitToMainThread(); |
4927 } | 4909 } |
4928 | 4910 |
4929 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 4911 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
4930 EXPECT_TRUE(host_impl->pending_tree()->use_gpu_rasterization()); | 4912 EXPECT_TRUE(host_impl->pending_tree()->use_gpu_rasterization()); |
4931 EXPECT_TRUE(host_impl->use_gpu_rasterization()); | 4913 EXPECT_TRUE(host_impl->use_gpu_rasterization()); |
4932 } | 4914 } |
4933 | 4915 |
4934 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 4916 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
4935 EXPECT_TRUE(host_impl->active_tree()->use_gpu_rasterization()); | 4917 EXPECT_TRUE(host_impl->active_tree()->use_gpu_rasterization()); |
4936 EXPECT_TRUE(host_impl->use_gpu_rasterization()); | 4918 EXPECT_TRUE(host_impl->use_gpu_rasterization()); |
4937 EndTest(); | 4919 EndTest(); |
4938 } | 4920 } |
4939 | 4921 |
4940 virtual void AfterTest() override {} | 4922 void AfterTest() override {} |
4941 | 4923 |
4942 FakeContentLayerClient layer_client_; | 4924 FakeContentLayerClient layer_client_; |
4943 }; | 4925 }; |
4944 | 4926 |
4945 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationForced); | 4927 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationForced); |
4946 | 4928 |
4947 class LayerTreeHostTestContinuousPainting : public LayerTreeHostTest { | 4929 class LayerTreeHostTestContinuousPainting : public LayerTreeHostTest { |
4948 public: | 4930 public: |
4949 LayerTreeHostTestContinuousPainting() | 4931 LayerTreeHostTestContinuousPainting() |
4950 : num_commits_(0), num_draws_(0), bounds_(20, 20), child_layer_(NULL) {} | 4932 : num_commits_(0), num_draws_(0), bounds_(20, 20), child_layer_(NULL) {} |
4951 | 4933 |
4952 protected: | 4934 protected: |
4953 enum { kExpectedNumCommits = 10 }; | 4935 enum { kExpectedNumCommits = 10 }; |
4954 | 4936 |
4955 virtual void SetupTree() override { | 4937 void SetupTree() override { |
4956 scoped_refptr<Layer> root_layer = Layer::Create(); | 4938 scoped_refptr<Layer> root_layer = Layer::Create(); |
4957 root_layer->SetBounds(bounds_); | 4939 root_layer->SetBounds(bounds_); |
4958 | 4940 |
4959 if (layer_tree_host()->settings().impl_side_painting) { | 4941 if (layer_tree_host()->settings().impl_side_painting) { |
4960 picture_layer_ = FakePictureLayer::Create(&client_); | 4942 picture_layer_ = FakePictureLayer::Create(&client_); |
4961 child_layer_ = picture_layer_.get(); | 4943 child_layer_ = picture_layer_.get(); |
4962 } else { | 4944 } else { |
4963 content_layer_ = ContentLayerWithUpdateTracking::Create(&client_); | 4945 content_layer_ = ContentLayerWithUpdateTracking::Create(&client_); |
4964 child_layer_ = content_layer_.get(); | 4946 child_layer_ = content_layer_.get(); |
4965 } | 4947 } |
4966 child_layer_->SetBounds(bounds_); | 4948 child_layer_->SetBounds(bounds_); |
4967 child_layer_->SetIsDrawable(true); | 4949 child_layer_->SetIsDrawable(true); |
4968 root_layer->AddChild(child_layer_); | 4950 root_layer->AddChild(child_layer_); |
4969 | 4951 |
4970 layer_tree_host()->SetRootLayer(root_layer); | 4952 layer_tree_host()->SetRootLayer(root_layer); |
4971 layer_tree_host()->SetViewportSize(bounds_); | 4953 layer_tree_host()->SetViewportSize(bounds_); |
4972 LayerTreeHostTest::SetupTree(); | 4954 LayerTreeHostTest::SetupTree(); |
4973 } | 4955 } |
4974 | 4956 |
4975 virtual void BeginTest() override { | 4957 void BeginTest() override { |
4976 MainThreadTaskRunner()->PostTask( | 4958 MainThreadTaskRunner()->PostTask( |
4977 FROM_HERE, | 4959 FROM_HERE, |
4978 base::Bind( | 4960 base::Bind( |
4979 &LayerTreeHostTestContinuousPainting::EnableContinuousPainting, | 4961 &LayerTreeHostTestContinuousPainting::EnableContinuousPainting, |
4980 base::Unretained(this))); | 4962 base::Unretained(this))); |
4981 // Wait 50x longer than expected. | 4963 // Wait 50x longer than expected. |
4982 double milliseconds_per_frame = | 4964 double milliseconds_per_frame = |
4983 1000.0 / layer_tree_host()->settings().refresh_rate; | 4965 1000.0 / layer_tree_host()->settings().refresh_rate; |
4984 MainThreadTaskRunner()->PostDelayedTask( | 4966 MainThreadTaskRunner()->PostDelayedTask( |
4985 FROM_HERE, | 4967 FROM_HERE, |
4986 base::Bind( | 4968 base::Bind( |
4987 &LayerTreeHostTestContinuousPainting::DisableContinuousPainting, | 4969 &LayerTreeHostTestContinuousPainting::DisableContinuousPainting, |
4988 base::Unretained(this)), | 4970 base::Unretained(this)), |
4989 base::TimeDelta::FromMilliseconds(50 * kExpectedNumCommits * | 4971 base::TimeDelta::FromMilliseconds(50 * kExpectedNumCommits * |
4990 milliseconds_per_frame)); | 4972 milliseconds_per_frame)); |
4991 } | 4973 } |
4992 | 4974 |
4993 virtual void BeginMainFrame(const BeginFrameArgs& args) override { | 4975 void BeginMainFrame(const BeginFrameArgs& args) override { |
4994 child_layer_->SetNeedsDisplay(); | 4976 child_layer_->SetNeedsDisplay(); |
4995 } | 4977 } |
4996 | 4978 |
4997 virtual void AfterTest() override { | 4979 void AfterTest() override { |
4998 EXPECT_LE(kExpectedNumCommits, num_commits_); | 4980 EXPECT_LE(kExpectedNumCommits, num_commits_); |
4999 EXPECT_LE(kExpectedNumCommits, num_draws_); | 4981 EXPECT_LE(kExpectedNumCommits, num_draws_); |
5000 int update_count = content_layer_.get() | 4982 int update_count = content_layer_.get() |
5001 ? content_layer_->PaintContentsCount() | 4983 ? content_layer_->PaintContentsCount() |
5002 : picture_layer_->update_count(); | 4984 : picture_layer_->update_count(); |
5003 EXPECT_LE(kExpectedNumCommits, update_count); | 4985 EXPECT_LE(kExpectedNumCommits, update_count); |
5004 } | 4986 } |
5005 | 4987 |
5006 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 4988 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
5007 if (++num_draws_ == kExpectedNumCommits) | 4989 if (++num_draws_ == kExpectedNumCommits) |
5008 EndTest(); | 4990 EndTest(); |
5009 } | 4991 } |
5010 | 4992 |
5011 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 4993 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
5012 ++num_commits_; | 4994 ++num_commits_; |
5013 } | 4995 } |
5014 | 4996 |
5015 private: | 4997 private: |
5016 void EnableContinuousPainting() { | 4998 void EnableContinuousPainting() { |
5017 LayerTreeDebugState debug_state = layer_tree_host()->debug_state(); | 4999 LayerTreeDebugState debug_state = layer_tree_host()->debug_state(); |
5018 debug_state.continuous_painting = true; | 5000 debug_state.continuous_painting = true; |
5019 layer_tree_host()->SetDebugState(debug_state); | 5001 layer_tree_host()->SetDebugState(debug_state); |
5020 } | 5002 } |
5021 | 5003 |
(...skipping 13 matching lines...) Expand all Loading... |
5035 Layer* child_layer_; | 5017 Layer* child_layer_; |
5036 }; | 5018 }; |
5037 | 5019 |
5038 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousPainting); | 5020 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousPainting); |
5039 | 5021 |
5040 class LayerTreeHostTestActivateOnInvisible : public LayerTreeHostTest { | 5022 class LayerTreeHostTestActivateOnInvisible : public LayerTreeHostTest { |
5041 public: | 5023 public: |
5042 LayerTreeHostTestActivateOnInvisible() | 5024 LayerTreeHostTestActivateOnInvisible() |
5043 : activation_count_(0), visible_(true) {} | 5025 : activation_count_(0), visible_(true) {} |
5044 | 5026 |
5045 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 5027 void InitializeSettings(LayerTreeSettings* settings) override { |
5046 settings->impl_side_painting = true; | 5028 settings->impl_side_painting = true; |
5047 } | 5029 } |
5048 | 5030 |
5049 virtual void BeginTest() override { | 5031 void BeginTest() override { |
5050 // Kick off the test with a commit. | 5032 // Kick off the test with a commit. |
5051 PostSetNeedsCommitToMainThread(); | 5033 PostSetNeedsCommitToMainThread(); |
5052 } | 5034 } |
5053 | 5035 |
5054 virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override { | 5036 void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override { |
5055 // Make sure we don't activate using the notify signal from tile manager. | 5037 // Make sure we don't activate using the notify signal from tile manager. |
5056 host_impl->BlockNotifyReadyToActivateForTesting(true); | 5038 host_impl->BlockNotifyReadyToActivateForTesting(true); |
5057 } | 5039 } |
5058 | 5040 |
5059 virtual void DidCommit() override { layer_tree_host()->SetVisible(false); } | 5041 void DidCommit() override { layer_tree_host()->SetVisible(false); } |
5060 | 5042 |
5061 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, | 5043 void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, |
5062 bool visible) override { | 5044 bool visible) override { |
5063 visible_ = visible; | 5045 visible_ = visible; |
5064 | 5046 |
5065 // Once invisible, we can go visible again. | 5047 // Once invisible, we can go visible again. |
5066 if (!visible) { | 5048 if (!visible) { |
5067 PostSetVisibleToMainThread(true); | 5049 PostSetVisibleToMainThread(true); |
5068 } else { | 5050 } else { |
5069 EXPECT_TRUE(host_impl->RequiresHighResToDraw()); | 5051 EXPECT_TRUE(host_impl->RequiresHighResToDraw()); |
5070 EndTest(); | 5052 EndTest(); |
5071 } | 5053 } |
5072 } | 5054 } |
5073 | 5055 |
5074 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 5056 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
5075 ++activation_count_; | 5057 ++activation_count_; |
5076 EXPECT_FALSE(visible_); | 5058 EXPECT_FALSE(visible_); |
5077 } | 5059 } |
5078 | 5060 |
5079 virtual void AfterTest() override { | 5061 void AfterTest() override { |
5080 // Ensure we activated even though the signal was blocked. | 5062 // Ensure we activated even though the signal was blocked. |
5081 EXPECT_EQ(1, activation_count_); | 5063 EXPECT_EQ(1, activation_count_); |
5082 EXPECT_TRUE(visible_); | 5064 EXPECT_TRUE(visible_); |
5083 } | 5065 } |
5084 | 5066 |
5085 private: | 5067 private: |
5086 int activation_count_; | 5068 int activation_count_; |
5087 bool visible_; | 5069 bool visible_; |
5088 | 5070 |
5089 FakeContentLayerClient client_; | 5071 FakeContentLayerClient client_; |
5090 scoped_refptr<FakePictureLayer> picture_layer_; | 5072 scoped_refptr<FakePictureLayer> picture_layer_; |
5091 }; | 5073 }; |
5092 | 5074 |
5093 // TODO(vmpstr): Enable with single thread impl-side painting. | 5075 // TODO(vmpstr): Enable with single thread impl-side painting. |
5094 MULTI_THREAD_TEST_F(LayerTreeHostTestActivateOnInvisible); | 5076 MULTI_THREAD_TEST_F(LayerTreeHostTestActivateOnInvisible); |
5095 | 5077 |
5096 // Do a synchronous composite and assert that the swap promise succeeds. | 5078 // Do a synchronous composite and assert that the swap promise succeeds. |
5097 class LayerTreeHostTestSynchronousCompositeSwapPromise | 5079 class LayerTreeHostTestSynchronousCompositeSwapPromise |
5098 : public LayerTreeHostTest { | 5080 : public LayerTreeHostTest { |
5099 public: | 5081 public: |
5100 LayerTreeHostTestSynchronousCompositeSwapPromise() : commit_count_(0) {} | 5082 LayerTreeHostTestSynchronousCompositeSwapPromise() : commit_count_(0) {} |
5101 | 5083 |
5102 virtual void InitializeSettings(LayerTreeSettings* settings) override { | 5084 void InitializeSettings(LayerTreeSettings* settings) override { |
5103 settings->single_thread_proxy_scheduler = false; | 5085 settings->single_thread_proxy_scheduler = false; |
5104 } | 5086 } |
5105 | 5087 |
5106 virtual void BeginTest() override { | 5088 void BeginTest() override { |
5107 // Successful composite. | 5089 // Successful composite. |
5108 scoped_ptr<SwapPromise> swap_promise0( | 5090 scoped_ptr<SwapPromise> swap_promise0( |
5109 new TestSwapPromise(&swap_promise_result_[0])); | 5091 new TestSwapPromise(&swap_promise_result_[0])); |
5110 layer_tree_host()->QueueSwapPromise(swap_promise0.Pass()); | 5092 layer_tree_host()->QueueSwapPromise(swap_promise0.Pass()); |
5111 layer_tree_host()->Composite(gfx::FrameTime::Now()); | 5093 layer_tree_host()->Composite(gfx::FrameTime::Now()); |
5112 | 5094 |
5113 // Fail to swap (no damage). | 5095 // Fail to swap (no damage). |
5114 scoped_ptr<SwapPromise> swap_promise1( | 5096 scoped_ptr<SwapPromise> swap_promise1( |
5115 new TestSwapPromise(&swap_promise_result_[1])); | 5097 new TestSwapPromise(&swap_promise_result_[1])); |
5116 layer_tree_host()->QueueSwapPromise(swap_promise1.Pass()); | 5098 layer_tree_host()->QueueSwapPromise(swap_promise1.Pass()); |
5117 layer_tree_host()->SetNeedsCommit(); | 5099 layer_tree_host()->SetNeedsCommit(); |
5118 layer_tree_host()->Composite(gfx::FrameTime::Now()); | 5100 layer_tree_host()->Composite(gfx::FrameTime::Now()); |
5119 | 5101 |
5120 // Fail to draw (not visible). | 5102 // Fail to draw (not visible). |
5121 scoped_ptr<SwapPromise> swap_promise2( | 5103 scoped_ptr<SwapPromise> swap_promise2( |
5122 new TestSwapPromise(&swap_promise_result_[2])); | 5104 new TestSwapPromise(&swap_promise_result_[2])); |
5123 layer_tree_host()->QueueSwapPromise(swap_promise2.Pass()); | 5105 layer_tree_host()->QueueSwapPromise(swap_promise2.Pass()); |
5124 layer_tree_host()->SetNeedsDisplayOnAllLayers(); | 5106 layer_tree_host()->SetNeedsDisplayOnAllLayers(); |
5125 layer_tree_host()->SetVisible(false); | 5107 layer_tree_host()->SetVisible(false); |
5126 layer_tree_host()->Composite(gfx::FrameTime::Now()); | 5108 layer_tree_host()->Composite(gfx::FrameTime::Now()); |
5127 | 5109 |
5128 EndTest(); | 5110 EndTest(); |
5129 } | 5111 } |
5130 | 5112 |
5131 virtual void DidCommit() override { | 5113 void DidCommit() override { |
5132 commit_count_++; | 5114 commit_count_++; |
5133 ASSERT_LE(commit_count_, 3); | 5115 ASSERT_LE(commit_count_, 3); |
5134 } | 5116 } |
5135 | 5117 |
5136 virtual void AfterTest() override { | 5118 void AfterTest() override { |
5137 EXPECT_EQ(3, commit_count_); | 5119 EXPECT_EQ(3, commit_count_); |
5138 | 5120 |
5139 // Initial swap promise should have succeded. | 5121 // Initial swap promise should have succeded. |
5140 { | 5122 { |
5141 base::AutoLock lock(swap_promise_result_[0].lock); | 5123 base::AutoLock lock(swap_promise_result_[0].lock); |
5142 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); | 5124 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); |
5143 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); | 5125 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); |
5144 EXPECT_TRUE(swap_promise_result_[0].dtor_called); | 5126 EXPECT_TRUE(swap_promise_result_[0].dtor_called); |
5145 } | 5127 } |
5146 | 5128 |
(...skipping 17 matching lines...) Expand all Loading... |
5164 } | 5146 } |
5165 | 5147 |
5166 int commit_count_; | 5148 int commit_count_; |
5167 TestSwapPromiseResult swap_promise_result_[3]; | 5149 TestSwapPromiseResult swap_promise_result_[3]; |
5168 }; | 5150 }; |
5169 | 5151 |
5170 // Impl-side painting is not supported for synchronous compositing. | 5152 // Impl-side painting is not supported for synchronous compositing. |
5171 SINGLE_THREAD_NOIMPL_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise); | 5153 SINGLE_THREAD_NOIMPL_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise); |
5172 | 5154 |
5173 } // namespace cc | 5155 } // namespace cc |
OLD | NEW |