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

Side by Side Diff: cc/trees/layer_tree_host_unittest_damage.cc

Issue 1143223006: cc: Convert LayerTreeHostDamage tests to using PictureLayer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "cc/test/fake_content_layer.h" 12 #include "cc/layers/solid_color_layer.h"
13 #include "cc/test/fake_content_layer_client.h" 13 #include "cc/test/fake_content_layer_client.h"
14 #include "cc/test/fake_painted_scrollbar_layer.h" 14 #include "cc/test/fake_painted_scrollbar_layer.h"
15 #include "cc/test/fake_picture_layer.h" 15 #include "cc/test/fake_picture_layer.h"
16 #include "cc/test/layer_tree_test.h" 16 #include "cc/test/layer_tree_test.h"
17 #include "cc/trees/damage_tracker.h" 17 #include "cc/trees/damage_tracker.h"
18 #include "cc/trees/layer_tree_impl.h" 18 #include "cc/trees/layer_tree_impl.h"
19 19
20 namespace cc { 20 namespace cc {
21 namespace { 21 namespace {
22 22
23 // These tests deal with damage tracking. 23 // These tests deal with damage tracking.
24 class LayerTreeHostDamageTest : public LayerTreeTest {}; 24 class LayerTreeHostDamageTest : public LayerTreeTest {};
25 25
26 // LayerTreeHost::SetNeedsRedraw should damage the whole viewport. 26 // LayerTreeHost::SetNeedsRedraw should damage the whole viewport.
27 class LayerTreeHostDamageTestSetNeedsRedraw 27 class LayerTreeHostDamageTestSetNeedsRedraw
28 : public LayerTreeHostDamageTest { 28 : public LayerTreeHostDamageTest {
29 void SetupTree() override { 29 void SetupTree() override {
30 // Viewport is 10x10. 30 // Viewport is 10x10.
31 scoped_refptr<FakeContentLayer> root = 31 scoped_refptr<FakePictureLayer> root =
32 FakeContentLayer::Create(layer_settings(), &client_); 32 FakePictureLayer::Create(layer_settings(), &client_);
33 root->SetBounds(gfx::Size(10, 10)); 33 root->SetBounds(gfx::Size(10, 10));
34 34
35 layer_tree_host()->SetRootLayer(root); 35 layer_tree_host()->SetRootLayer(root);
36 LayerTreeHostDamageTest::SetupTree(); 36 LayerTreeHostDamageTest::SetupTree();
37 } 37 }
38 38
39 void BeginTest() override { 39 void BeginTest() override {
40 draw_count_ = 0; 40 draw_count_ = 0;
41 PostSetNeedsCommitToMainThread(); 41 PostSetNeedsCommitToMainThread();
42 } 42 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 FakeContentLayerClient client_; 83 FakeContentLayerClient client_;
84 }; 84 };
85 85
86 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetNeedsRedraw); 86 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetNeedsRedraw);
87 87
88 // LayerTreeHost::SetViewportSize should damage the whole viewport. 88 // LayerTreeHost::SetViewportSize should damage the whole viewport.
89 class LayerTreeHostDamageTestSetViewportSize 89 class LayerTreeHostDamageTestSetViewportSize
90 : public LayerTreeHostDamageTest { 90 : public LayerTreeHostDamageTest {
91 void SetupTree() override { 91 void SetupTree() override {
92 // Viewport is 10x10. 92 // Viewport is 10x10.
93 scoped_refptr<FakeContentLayer> root = 93 scoped_refptr<FakePictureLayer> root =
94 FakeContentLayer::Create(layer_settings(), &client_); 94 FakePictureLayer::Create(layer_settings(), &client_);
95 root->SetBounds(gfx::Size(10, 10)); 95 root->SetBounds(gfx::Size(10, 10));
96 96
97 layer_tree_host()->SetRootLayer(root); 97 layer_tree_host()->SetRootLayer(root);
98 LayerTreeHostDamageTest::SetupTree(); 98 LayerTreeHostDamageTest::SetupTree();
99 } 99 }
100 100
101 void BeginTest() override { 101 void BeginTest() override {
102 draw_count_ = 0; 102 draw_count_ = 0;
103 PostSetNeedsCommitToMainThread(); 103 PostSetNeedsCommitToMainThread();
104 } 104 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 class LayerTreeHostDamageTestNoDamageDoesNotSwap 150 class LayerTreeHostDamageTestNoDamageDoesNotSwap
151 : public LayerTreeHostDamageTest { 151 : public LayerTreeHostDamageTest {
152 void BeginTest() override { 152 void BeginTest() override {
153 expect_swap_and_succeed_ = 0; 153 expect_swap_and_succeed_ = 0;
154 did_swaps_ = 0; 154 did_swaps_ = 0;
155 did_swap_and_succeed_ = 0; 155 did_swap_and_succeed_ = 0;
156 PostSetNeedsCommitToMainThread(); 156 PostSetNeedsCommitToMainThread();
157 } 157 }
158 158
159 void SetupTree() override { 159 void SetupTree() override {
160 scoped_refptr<FakeContentLayer> root = 160 scoped_refptr<FakePictureLayer> root =
161 FakeContentLayer::Create(layer_settings(), &client_); 161 FakePictureLayer::Create(layer_settings(), &client_);
162 root->SetBounds(gfx::Size(10, 10)); 162 root->SetBounds(gfx::Size(10, 10));
163 163
164 // Most of the layer isn't visible. 164 // Most of the layer isn't visible.
165 content_ = FakeContentLayer::Create(layer_settings(), &client_); 165 content_ = FakePictureLayer::Create(layer_settings(), &client_);
166 content_->SetBounds(gfx::Size(2000, 100)); 166 content_->SetBounds(gfx::Size(2000, 100));
167 root->AddChild(content_); 167 root->AddChild(content_);
168 168
169 layer_tree_host()->SetRootLayer(root); 169 layer_tree_host()->SetRootLayer(root);
170 LayerTreeHostDamageTest::SetupTree(); 170 LayerTreeHostDamageTest::SetupTree();
171 } 171 }
172 172
173 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 173 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
174 LayerTreeHostImpl::FrameData* frame_data, 174 LayerTreeHostImpl::FrameData* frame_data,
175 DrawResult draw_result) override { 175 DrawResult draw_result) override {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 } 223 }
224 } 224 }
225 225
226 void AfterTest() override { 226 void AfterTest() override {
227 EXPECT_EQ(4, did_swaps_); 227 EXPECT_EQ(4, did_swaps_);
228 EXPECT_EQ(2, expect_swap_and_succeed_); 228 EXPECT_EQ(2, expect_swap_and_succeed_);
229 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_); 229 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
230 } 230 }
231 231
232 FakeContentLayerClient client_; 232 FakeContentLayerClient client_;
233 scoped_refptr<FakeContentLayer> content_; 233 scoped_refptr<FakePictureLayer> content_;
234 int expect_swap_and_succeed_; 234 int expect_swap_and_succeed_;
235 int did_swaps_; 235 int did_swaps_;
236 int did_swap_and_succeed_; 236 int did_swap_and_succeed_;
237 }; 237 };
238 238
239 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( 239 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostDamageTestNoDamageDoesNotSwap);
240 LayerTreeHostDamageTestNoDamageDoesNotSwap);
241 240
242 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest { 241 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest {
243 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 242 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
244 243
245 void SetupTree() override { 244 void SetupTree() override {
246 root_ = FakeContentLayer::Create(layer_settings(), &client_); 245 root_ = FakePictureLayer::Create(layer_settings(), &client_);
247 child_ = FakeContentLayer::Create(layer_settings(), &client_); 246 child_ = FakePictureLayer::Create(layer_settings(), &client_);
248 247
249 root_->SetBounds(gfx::Size(500, 500)); 248 root_->SetBounds(gfx::Size(500, 500));
250 child_->SetPosition(gfx::Point(100, 100)); 249 child_->SetPosition(gfx::Point(100, 100));
251 child_->SetBounds(gfx::Size(30, 30)); 250 child_->SetBounds(gfx::Size(30, 30));
252 251
253 root_->AddChild(child_); 252 root_->AddChild(child_);
254 layer_tree_host()->SetRootLayer(root_); 253 layer_tree_host()->SetRootLayer(root_);
255 LayerTreeHostDamageTest::SetupTree(); 254 LayerTreeHostDamageTest::SetupTree();
256 } 255 }
257 256
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 EXPECT_FALSE(frame_data->has_no_damage); 288 EXPECT_FALSE(frame_data->has_no_damage);
290 289
291 // Just a part of the next frame should be damaged. 290 // Just a part of the next frame should be damaged.
292 child_damage_rect_ = gfx::Rect(10, 11, 12, 13); 291 child_damage_rect_ = gfx::Rect(10, 11, 12, 13);
293 break; 292 break;
294 case 3: 293 case 3:
295 // The update rect in the child should be damaged and the damaged area 294 // The update rect in the child should be damaged and the damaged area
296 // should match the invalidation. 295 // should match the invalidation.
297 EXPECT_EQ(gfx::RectF(100+10, 100+11, 12, 13).ToString(), 296 EXPECT_EQ(gfx::RectF(100+10, 100+11, 12, 13).ToString(),
298 root_damage.ToString()); 297 root_damage.ToString());
299
300 // TODO(danakj): Remove this when impl side painting is always on.
301 if (delegating_renderer() ||
302 host_impl->settings().impl_side_painting) {
303 // When using a delegating renderer, or using impl side painting, the
304 // entire child is considered damaged as we need to replace its
305 // resources with newly created ones. The damaged area is kept as it
306 // is, but entire child is painted.
307
308 // The paint rect should match the layer bounds.
309 gfx::RectF paint_rect = child_->LastPaintRect();
enne (OOO) 2015/06/05 22:17:10 Why is this not needed anymore?
danakj 2015/06/05 23:09:08 This is testing a specific change to TiledLayer. h
310 paint_rect.set_origin(child_->position());
311 EXPECT_EQ(gfx::RectF(100, 100, 30, 30).ToString(),
312 paint_rect.ToString());
313 }
314 EXPECT_FALSE(frame_data->has_no_damage); 298 EXPECT_FALSE(frame_data->has_no_damage);
315 299
316 // If we damage part of the frame, but also damage the full 300 // If we damage part of the frame, but also damage the full
317 // frame, then the whole frame should be damaged. 301 // frame, then the whole frame should be damaged.
318 child_damage_rect_ = gfx::Rect(10, 11, 12, 13); 302 child_damage_rect_ = gfx::Rect(10, 11, 12, 13);
319 host_impl->SetFullRootLayerDamage(); 303 host_impl->SetFullRootLayerDamage();
320 break; 304 break;
321 case 4: 305 case 4:
322 // The whole frame is damaged. 306 // The whole frame is damaged.
323 EXPECT_EQ(gfx::RectF(root_surface->content_rect()).ToString(), 307 EXPECT_EQ(gfx::RectF(root_surface->content_rect()).ToString(),
(...skipping 12 matching lines...) Expand all
336 320
337 if (!child_damage_rect_.IsEmpty()) { 321 if (!child_damage_rect_.IsEmpty()) {
338 child_->SetNeedsDisplayRect(child_damage_rect_); 322 child_->SetNeedsDisplayRect(child_damage_rect_);
339 child_damage_rect_ = gfx::Rect(); 323 child_damage_rect_ = gfx::Rect();
340 } 324 }
341 } 325 }
342 326
343 void AfterTest() override {} 327 void AfterTest() override {}
344 328
345 FakeContentLayerClient client_; 329 FakeContentLayerClient client_;
346 scoped_refptr<FakeContentLayer> root_; 330 scoped_refptr<FakePictureLayer> root_;
347 scoped_refptr<FakeContentLayer> child_; 331 scoped_refptr<FakePictureLayer> child_;
348 gfx::Rect child_damage_rect_; 332 gfx::Rect child_damage_rect_;
349 }; 333 };
350 334
351 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostDamageTestForcedFullDamage); 335 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostDamageTestForcedFullDamage);
352 336
353 class LayerTreeHostScrollbarDamageTest : public LayerTreeHostDamageTest { 337 class LayerTreeHostScrollbarDamageTest : public LayerTreeHostDamageTest {
354 void SetupTree() override { 338 void SetupTree() override {
355 scoped_refptr<Layer> root_layer = Layer::Create(layer_settings()); 339 scoped_refptr<Layer> root_layer = Layer::Create(layer_settings());
356 root_layer->SetBounds(gfx::Size(400, 400)); 340 root_layer->SetBounds(gfx::Size(400, 400));
357 root_layer->SetMasksToBounds(true); 341 root_layer->SetMasksToBounds(true);
358 layer_tree_host()->SetRootLayer(root_layer); 342 layer_tree_host()->SetRootLayer(root_layer);
359 343
360 scoped_refptr<Layer> scroll_clip_layer = Layer::Create(layer_settings()); 344 scoped_refptr<Layer> scroll_clip_layer = Layer::Create(layer_settings());
361 scoped_refptr<Layer> content_layer = 345 scoped_refptr<Layer> content_layer =
362 FakeContentLayer::Create(layer_settings(), &client_); 346 FakePictureLayer::Create(layer_settings(), &client_);
363 content_layer->SetScrollClipLayerId(scroll_clip_layer->id()); 347 content_layer->SetScrollClipLayerId(scroll_clip_layer->id());
364 content_layer->SetScrollOffset(gfx::ScrollOffset(10, 20)); 348 content_layer->SetScrollOffset(gfx::ScrollOffset(10, 20));
365 content_layer->SetBounds(gfx::Size(100, 200)); 349 content_layer->SetBounds(gfx::Size(100, 200));
350 content_layer->SetIsDrawable(true);
366 scroll_clip_layer->SetBounds( 351 scroll_clip_layer->SetBounds(
367 gfx::Size(content_layer->bounds().width() - 30, 352 gfx::Size(content_layer->bounds().width() - 30,
368 content_layer->bounds().height() - 50)); 353 content_layer->bounds().height() - 50));
369 scroll_clip_layer->AddChild(content_layer); 354 scroll_clip_layer->AddChild(content_layer);
370 root_layer->AddChild(scroll_clip_layer); 355 root_layer->AddChild(scroll_clip_layer);
371 356
372 scoped_refptr<Layer> scrollbar_layer = FakePaintedScrollbarLayer::Create( 357 scoped_refptr<Layer> scrollbar_layer = FakePaintedScrollbarLayer::Create(
373 layer_settings(), false, true, content_layer->id()); 358 layer_settings(), false, true, content_layer->id());
374 scrollbar_layer->SetPosition(gfx::Point(300, 300)); 359 scrollbar_layer->SetPosition(gfx::Point(300, 300));
375 scrollbar_layer->SetBounds(gfx::Size(10, 100)); 360 scrollbar_layer->SetBounds(gfx::Size(10, 100));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 scroll_layer->SetPosition(gfx::Point(1, 1)); 425 scroll_layer->SetPosition(gfx::Point(1, 1));
441 scroll_layer->PushScrollOffsetFromMainThread( 426 scroll_layer->PushScrollOffsetFromMainThread(
442 scroll_layer->BaseScrollOffset()); 427 scroll_layer->BaseScrollOffset());
443 host_impl->SetNeedsRedraw(); 428 host_impl->SetNeedsRedraw();
444 break; 429 break;
445 case 2: 430 case 2:
446 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f)); 431 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f));
447 host_impl->SetNeedsRedraw(); 432 host_impl->SetNeedsRedraw();
448 break; 433 break;
449 case 3: 434 case 3:
450 scroll_layer->SetBounds(gfx::Size(root->bounds().width() + 60, 435 // We will resize the content layer, on the main thread.
451 root->bounds().height() + 100)); 436 MainThreadTaskRunner()->PostTask(
452 host_impl->SetNeedsRedraw(); 437 FROM_HERE,
438 base::Bind(
439 &LayerTreeHostDamageTestScrollbarDoesDamage::ResizeScrollLayer,
440 base::Unretained(this)));
453 break; 441 break;
454 } 442 }
455 } 443 }
456 444
445 void ResizeScrollLayer() {
446 EXPECT_EQ(3, did_swaps_);
447 Layer* root = layer_tree_host()->root_layer();
448 Layer* scroll_clip_layer = root->child_at(0);
449 Layer* scroll_layer = scroll_clip_layer->child_at(0);
450 scroll_layer->SetBounds(
451 gfx::Size(root->bounds().width() + 60, root->bounds().height() + 100));
452 }
453
457 void AfterTest() override { EXPECT_EQ(4, did_swaps_); } 454 void AfterTest() override { EXPECT_EQ(4, did_swaps_); }
458 455
459 int did_swaps_; 456 int did_swaps_;
460 }; 457 };
461 458
462 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarDoesDamage); 459 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarDoesDamage);
463 460
464 class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage 461 class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage
465 : public LayerTreeHostScrollbarDamageTest { 462 : public LayerTreeHostScrollbarDamageTest {
466 void BeginTest() override { 463 void BeginTest() override {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 526
530 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } 527 void AfterTest() override { EXPECT_EQ(3, did_swaps_); }
531 528
532 int did_swaps_; 529 int did_swaps_;
533 }; 530 };
534 531
535 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); 532 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage);
536 533
537 } // namespace 534 } // namespace
538 } // namespace cc 535 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698