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

Side by Side Diff: cc/resources/picture_pile_unittest.cc

Issue 504513002: cc: Fix CanRaster dcheck failures ONCE AND FOR ALL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: canraster: evenbetter Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <map> 5 #include <map>
6 #include <utility> 6 #include <utility>
7 7
8 #include "cc/resources/picture_pile.h" 8 #include "cc/resources/picture_pile.h"
9 #include "cc/test/fake_content_layer_client.h" 9 #include "cc/test/fake_content_layer_client.h"
10 #include "cc/test/fake_rendering_stats_instrumentation.h" 10 #include "cc/test/fake_rendering_stats_instrumentation.h"
(...skipping 18 matching lines...) Expand all
29 } 29 }
30 30
31 typedef PicturePile::PictureInfo PictureInfo; 31 typedef PicturePile::PictureInfo PictureInfo;
32 typedef PicturePile::PictureMapKey PictureMapKey; 32 typedef PicturePile::PictureMapKey PictureMapKey;
33 typedef PicturePile::PictureMap PictureMap; 33 typedef PicturePile::PictureMap PictureMap;
34 34
35 protected: 35 protected:
36 virtual ~TestPicturePile() {} 36 virtual ~TestPicturePile() {}
37 }; 37 };
38 38
39 class PicturePileTest : public testing::Test { 39 class PicturePileTestBase {
40 public: 40 public:
41 PicturePileTest() 41 PicturePileTestBase()
42 : pile_(new TestPicturePile()), 42 : pile_(new TestPicturePile()),
43 background_color_(SK_ColorBLUE), 43 background_color_(SK_ColorBLUE),
44 min_scale_(0.125), 44 min_scale_(0.125),
45 frame_number_(0), 45 frame_number_(0),
46 contents_opaque_(false) { 46 contents_opaque_(false) {
47 pile_->SetTileGridSize(gfx::Size(1000, 1000)); 47 pile_->SetTileGridSize(gfx::Size(1000, 1000));
48 pile_->SetMinContentsScale(min_scale_); 48 pile_->SetMinContentsScale(min_scale_);
49 SetTilingSize(pile_->tiling().max_texture_size()); 49 SetTilingSize(pile_->tiling().max_texture_size());
50 } 50 }
51 51
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 84
85 FakeContentLayerClient client_; 85 FakeContentLayerClient client_;
86 FakeRenderingStatsInstrumentation stats_instrumentation_; 86 FakeRenderingStatsInstrumentation stats_instrumentation_;
87 scoped_refptr<TestPicturePile> pile_; 87 scoped_refptr<TestPicturePile> pile_;
88 SkColor background_color_; 88 SkColor background_color_;
89 float min_scale_; 89 float min_scale_;
90 int frame_number_; 90 int frame_number_;
91 bool contents_opaque_; 91 bool contents_opaque_;
92 }; 92 };
93 93
94 class PicturePileTest : public PicturePileTestBase, public testing::Test {};
95
94 TEST_F(PicturePileTest, SmallInvalidateInflated) { 96 TEST_F(PicturePileTest, SmallInvalidateInflated) {
95 // Invalidate something inside a tile. 97 // Invalidate something inside a tile.
96 Region invalidate_rect(gfx::Rect(50, 50, 1, 1)); 98 Region invalidate_rect(gfx::Rect(50, 50, 1, 1));
97 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect()); 99 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect());
98 EXPECT_EQ(gfx::Rect(50, 50, 1, 1).ToString(), invalidate_rect.ToString()); 100 EXPECT_EQ(gfx::Rect(50, 50, 1, 1).ToString(), invalidate_rect.ToString());
99 101
100 EXPECT_EQ(1, pile_->tiling().num_tiles_x()); 102 EXPECT_EQ(1, pile_->tiling().num_tiles_x());
101 EXPECT_EQ(1, pile_->tiling().num_tiles_y()); 103 EXPECT_EQ(1, pile_->tiling().num_tiles_y());
102 104
103 TestPicturePile::PictureInfo& picture_info = 105 TestPicturePile::PictureInfo& picture_info =
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 recorded_over_tiles.right(), recorded_over_tiles.y(), 30, 30); 379 recorded_over_tiles.right(), recorded_over_tiles.y(), 30, 30);
378 invalidation = invalidation_outside; 380 invalidation = invalidation_outside;
379 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport); 381 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport);
380 gfx::Rect expanded_recorded_viewport = 382 gfx::Rect expanded_recorded_viewport =
381 pile_->tiling().ExpandRectToTileBounds(pile_->recorded_viewport()); 383 pile_->tiling().ExpandRectToTileBounds(pile_->recorded_viewport());
382 Region expected_invalidation = 384 Region expected_invalidation =
383 pile_->tiling().ExpandRectToTileBounds(invalidation_outside); 385 pile_->tiling().ExpandRectToTileBounds(invalidation_outside);
384 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 386 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
385 } 387 }
386 388
387 TEST_F(PicturePileTest, ResizePileOutsideInterestRect) { 389 enum Corner {
390 TOP_LEFT,
391 TOP_RIGHT,
392 BOTTOM_LEFT,
393 BOTTOM_RIGHT,
394 };
395
396 class PicturePileResizeCornerTest : public PicturePileTestBase,
397 public testing::TestWithParam<Corner> {
398 protected:
399 static gfx::Rect CornerSinglePixelRect(Corner corner, const gfx::Size& s) {
400 switch (corner) {
401 case TOP_LEFT:
402 return gfx::Rect(0, 0, 1, 1);
403 case TOP_RIGHT:
404 return gfx::Rect(s.width() - 1, 0, 1, 1);
405 case BOTTOM_LEFT:
406 return gfx::Rect(0, s.height() - 1, 1, 1);
407 case BOTTOM_RIGHT:
408 return gfx::Rect(s.width() - 1, s.height() - 1, 1, 1);
409 }
410 NOTREACHED();
411 return gfx::Rect();
412 }
413 };
414
415 TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
416 Corner corner = GetParam();
417
388 // This size chosen to be larger than the interest rect size, which is 418 // This size chosen to be larger than the interest rect size, which is
389 // at least kPixelDistanceToRecord * 2 in each dimension. 419 // at least kPixelDistanceToRecord * 2 in each dimension.
390 int tile_size = 100000; 420 int tile_size = 100000;
391 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size); 421 // The small number subtracted keeps the last tile in each axis larger than
392 gfx::Size grow_down_tiling_size(5 * tile_size, 7 * tile_size); 422 // the interest rect also.
393 gfx::Size grow_right_tiling_size(7 * tile_size, 5 * tile_size); 423 int offset = -100;
394 gfx::Size grow_both_tiling_size(7 * tile_size, 7 * tile_size); 424 gfx::Size base_tiling_size(6 * tile_size + offset, 6 * tile_size + offset);
425 gfx::Size grow_down_tiling_size(6 * tile_size + offset,
426 8 * tile_size + offset);
427 gfx::Size grow_right_tiling_size(8 * tile_size + offset,
428 6 * tile_size + offset);
429 gfx::Size grow_both_tiling_size(8 * tile_size + offset,
430 8 * tile_size + offset);
395 431
396 Region invalidation; 432 Region invalidation;
397 Region expected_invalidation; 433 Region expected_invalidation;
398 434
399 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size)); 435 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size));
400 SetTilingSize(base_tiling_size); 436 SetTilingSize(base_tiling_size);
401 437
402 // We should have a recording for every tile. 438 // We should have a recording for every tile.
403 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 439 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
404 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 440 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
405 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 441 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
406 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 442 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
407 TestPicturePile::PictureMapKey key(i, j); 443 TestPicturePile::PictureMapKey key(i, j);
408 TestPicturePile::PictureMap& map = pile_->picture_map(); 444 TestPicturePile::PictureMap& map = pile_->picture_map();
409 TestPicturePile::PictureMap::iterator it = map.find(key); 445 TestPicturePile::PictureMap::iterator it = map.find(key);
410 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 446 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
411 } 447 }
412 } 448 }
413 449
414 UpdateAndExpandInvalidation( 450 UpdateAndExpandInvalidation(
415 &invalidation, grow_down_tiling_size, gfx::Rect(1, 1)); 451 &invalidation,
452 grow_down_tiling_size,
453 CornerSinglePixelRect(corner, grow_down_tiling_size));
416 454
417 // We should have lost the recordings in the bottom row. 455 // We should have lost the recordings in the bottom row.
418 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 456 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
419 EXPECT_EQ(8, pile_->tiling().num_tiles_y()); 457 EXPECT_EQ(8, pile_->tiling().num_tiles_y());
420 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 458 for (int i = 0; i < 6; ++i) {
421 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 459 for (int j = 0; j < 6; ++j) {
422 TestPicturePile::PictureMapKey key(i, j); 460 TestPicturePile::PictureMapKey key(i, j);
423 TestPicturePile::PictureMap& map = pile_->picture_map(); 461 TestPicturePile::PictureMap& map = pile_->picture_map();
424 TestPicturePile::PictureMap::iterator it = map.find(key); 462 TestPicturePile::PictureMap::iterator it = map.find(key);
425 EXPECT_EQ(j < 5, it != map.end() && it->second.GetPicture()); 463 EXPECT_EQ(j < 5, it != map.end() && it->second.GetPicture());
426 } 464 }
427 } 465 }
428 466
429 // We invalidated the old bottom row. 467 // We invalidated the old bottom row.
430 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 468 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
431 pile_->tiling().TileBounds(5, 5)); 469 pile_->tiling().TileBounds(5, 5));
432 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 470 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
433 invalidation.Clear(); 471 invalidation.Clear();
434 472
435 UpdateWholePile(); 473 UpdateWholePile();
436 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 474 UpdateAndExpandInvalidation(&invalidation,
475 base_tiling_size,
476 CornerSinglePixelRect(corner, base_tiling_size));
437 477
438 // We should have lost the recordings that are now outside the tiling only. 478 // We should have lost the recordings that are now outside the tiling only.
439 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 479 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
440 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 480 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
441 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 481 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
442 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 482 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
443 TestPicturePile::PictureMapKey key(i, j); 483 TestPicturePile::PictureMapKey key(i, j);
444 TestPicturePile::PictureMap& map = pile_->picture_map(); 484 TestPicturePile::PictureMap& map = pile_->picture_map();
445 TestPicturePile::PictureMap::iterator it = map.find(key); 485 TestPicturePile::PictureMap::iterator it = map.find(key);
446 EXPECT_EQ(j < 6, it != map.end() && it->second.GetPicture()); 486 EXPECT_EQ(j < 6, it != map.end() && it->second.GetPicture());
447 } 487 }
448 } 488 }
449 489
450 // No invalidation when shrinking. 490 // No invalidation when shrinking.
451 expected_invalidation.Clear(); 491 expected_invalidation.Clear();
452 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 492 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
453 invalidation.Clear(); 493 invalidation.Clear();
454 494
455 UpdateWholePile(); 495 UpdateWholePile();
456 UpdateAndExpandInvalidation( 496 UpdateAndExpandInvalidation(
457 &invalidation, grow_right_tiling_size, gfx::Rect(1, 1)); 497 &invalidation,
498 grow_right_tiling_size,
499 CornerSinglePixelRect(corner, grow_right_tiling_size));
458 500
459 // We should have lost the recordings in the right column. 501 // We should have lost the recordings in the right column.
460 EXPECT_EQ(8, pile_->tiling().num_tiles_x()); 502 EXPECT_EQ(8, pile_->tiling().num_tiles_x());
461 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 503 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
462 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 504 for (int i = 0; i < 6; ++i) {
463 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 505 for (int j = 0; j < 6; ++j) {
464 TestPicturePile::PictureMapKey key(i, j); 506 TestPicturePile::PictureMapKey key(i, j);
465 TestPicturePile::PictureMap& map = pile_->picture_map(); 507 TestPicturePile::PictureMap& map = pile_->picture_map();
466 TestPicturePile::PictureMap::iterator it = map.find(key); 508 TestPicturePile::PictureMap::iterator it = map.find(key);
467 EXPECT_EQ(i < 5, it != map.end() && it->second.GetPicture()); 509 EXPECT_EQ(i < 5, it != map.end() && it->second.GetPicture());
468 } 510 }
469 } 511 }
470 512
471 // We invalidated the old right column. 513 // We invalidated the old right column.
472 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 514 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
473 pile_->tiling().TileBounds(5, 5)); 515 pile_->tiling().TileBounds(5, 5));
474 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 516 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
475 invalidation.Clear(); 517 invalidation.Clear();
476 518
477 UpdateWholePile(); 519 UpdateWholePile();
478 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 520 UpdateAndExpandInvalidation(&invalidation,
521 base_tiling_size,
522 CornerSinglePixelRect(corner, base_tiling_size));
479 523
480 // We should have lost the recordings that are now outside the tiling only. 524 // We should have lost the recordings that are now outside the tiling only.
481 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 525 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
482 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 526 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
483 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 527 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
484 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 528 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
485 TestPicturePile::PictureMapKey key(i, j); 529 TestPicturePile::PictureMapKey key(i, j);
486 TestPicturePile::PictureMap& map = pile_->picture_map(); 530 TestPicturePile::PictureMap& map = pile_->picture_map();
487 TestPicturePile::PictureMap::iterator it = map.find(key); 531 TestPicturePile::PictureMap::iterator it = map.find(key);
488 EXPECT_EQ(i < 6, it != map.end() && it->second.GetPicture()); 532 EXPECT_EQ(i < 6, it != map.end() && it->second.GetPicture());
489 } 533 }
490 } 534 }
491 535
492 // No invalidation when shrinking. 536 // No invalidation when shrinking.
493 expected_invalidation.Clear(); 537 expected_invalidation.Clear();
494 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 538 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
495 invalidation.Clear(); 539 invalidation.Clear();
496 540
497 UpdateWholePile(); 541 UpdateWholePile();
498 UpdateAndExpandInvalidation( 542 UpdateAndExpandInvalidation(
499 &invalidation, grow_both_tiling_size, gfx::Rect(1, 1)); 543 &invalidation,
544 grow_both_tiling_size,
545 CornerSinglePixelRect(corner, grow_both_tiling_size));
500 546
501 // We should have lost the recordings in the right column and bottom row. 547 // We should have lost the recordings in the right column and bottom row.
502 EXPECT_EQ(8, pile_->tiling().num_tiles_x()); 548 EXPECT_EQ(8, pile_->tiling().num_tiles_x());
503 EXPECT_EQ(8, pile_->tiling().num_tiles_y()); 549 EXPECT_EQ(8, pile_->tiling().num_tiles_y());
504 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 550 for (int i = 0; i < 6; ++i) {
505 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 551 for (int j = 0; j < 6; ++j) {
506 TestPicturePile::PictureMapKey key(i, j); 552 TestPicturePile::PictureMapKey key(i, j);
507 TestPicturePile::PictureMap& map = pile_->picture_map(); 553 TestPicturePile::PictureMap& map = pile_->picture_map();
508 TestPicturePile::PictureMap::iterator it = map.find(key); 554 TestPicturePile::PictureMap::iterator it = map.find(key);
509 EXPECT_EQ(i < 5 && j < 5, it != map.end() && it->second.GetPicture()); 555 EXPECT_EQ(i < 5 && j < 5, it != map.end() && it->second.GetPicture());
510 } 556 }
511 } 557 }
512 558
513 // We invalidated the old right column and the old bottom row. 559 // We invalidated the old right column and the old bottom row.
514 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 560 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
515 pile_->tiling().TileBounds(5, 5)); 561 pile_->tiling().TileBounds(5, 5));
(...skipping 16 matching lines...) Expand all
532 EXPECT_EQ(i < 6 && j < 6, it != map.end() && it->second.GetPicture()); 578 EXPECT_EQ(i < 6 && j < 6, it != map.end() && it->second.GetPicture());
533 } 579 }
534 } 580 }
535 581
536 // No invalidation when shrinking. 582 // No invalidation when shrinking.
537 expected_invalidation.Clear(); 583 expected_invalidation.Clear();
538 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 584 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
539 invalidation.Clear(); 585 invalidation.Clear();
540 } 586 }
541 587
542 TEST_F(PicturePileTest, SmallResizePileOutsideInterestRect) { 588 TEST_P(PicturePileResizeCornerTest, SmallResizePileOutsideInterestRect) {
589 Corner corner = GetParam();
590
543 // This size chosen to be larger than the interest rect size, which is 591 // This size chosen to be larger than the interest rect size, which is
544 // at least kPixelDistanceToRecord * 2 in each dimension. 592 // at least kPixelDistanceToRecord * 2 in each dimension.
545 int tile_size = 100000; 593 int tile_size = 100000;
546 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size); 594 // The small number subtracted keeps the last tile in each axis larger than
547 gfx::Size grow_down_tiling_size(5 * tile_size, 5 * tile_size + 5); 595 // the interest rect also.
548 gfx::Size grow_right_tiling_size(5 * tile_size + 5, 5 * tile_size); 596 int offset = -100;
549 gfx::Size grow_both_tiling_size(5 * tile_size + 5, 5 * tile_size + 5); 597 gfx::Size base_tiling_size(6 * tile_size + offset, 6 * tile_size + offset);
598 gfx::Size grow_down_tiling_size(6 * tile_size + offset,
599 6 * tile_size + offset + 5);
600 gfx::Size grow_right_tiling_size(6 * tile_size + offset + 5,
601 6 * tile_size + offset);
602 gfx::Size grow_both_tiling_size(6 * tile_size + offset + 5,
603 6 * tile_size + offset + 5);
550 604
551 Region invalidation; 605 Region invalidation;
552 Region expected_invalidation; 606 Region expected_invalidation;
553 607
554 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size)); 608 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size));
555 SetTilingSize(base_tiling_size); 609 SetTilingSize(base_tiling_size);
556 610
557 // We should have a recording for every tile. 611 // We should have a recording for every tile.
558 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 612 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
559 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 613 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
560 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 614 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
561 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 615 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
562 TestPicturePile::PictureMapKey key(i, j); 616 TestPicturePile::PictureMapKey key(i, j);
563 TestPicturePile::PictureMap& map = pile_->picture_map(); 617 TestPicturePile::PictureMap& map = pile_->picture_map();
564 TestPicturePile::PictureMap::iterator it = map.find(key); 618 TestPicturePile::PictureMap::iterator it = map.find(key);
565 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 619 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
566 } 620 }
567 } 621 }
568 622
569 UpdateAndExpandInvalidation( 623 UpdateAndExpandInvalidation(
570 &invalidation, grow_down_tiling_size, gfx::Rect(1, 1)); 624 &invalidation,
625 grow_down_tiling_size,
626 CornerSinglePixelRect(corner, grow_down_tiling_size));
571 627
572 // We should have lost the recordings in the bottom row. 628 // We should have lost the recordings in the bottom row that do not intersect
629 // the interest rect.
573 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 630 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
574 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 631 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
575 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 632 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
576 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 633 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
577 TestPicturePile::PictureMapKey key(i, j); 634 TestPicturePile::PictureMapKey key(i, j);
578 TestPicturePile::PictureMap& map = pile_->picture_map(); 635 TestPicturePile::PictureMap& map = pile_->picture_map();
579 TestPicturePile::PictureMap::iterator it = map.find(key); 636 TestPicturePile::PictureMap::iterator it = map.find(key);
580 EXPECT_EQ(j < 5, it != map.end() && it->second.GetPicture()); 637 bool expect_tile;
638 switch (corner) {
639 case TOP_LEFT:
640 case TOP_RIGHT:
641 expect_tile = j < 5;
642 break;
643 case BOTTOM_LEFT:
644 // The interest rect in the bottom left tile means we'll record it.
645 expect_tile = j < 5 || (j == 5 && i == 0);
646 break;
647 case BOTTOM_RIGHT:
648 // The interest rect in the bottom right tile means we'll record it.
649 expect_tile = j < 5 || (j == 5 && i == 5);
650 break;
651 }
652 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture());
581 } 653 }
582 } 654 }
583 655
584 // We invalidated the bottom row. 656 // We invalidated the bottom row outside the new interest rect. The tile that
585 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 657 // insects the interest rect in invalidated only on its new pixels.
586 pile_->tiling().TileBounds(5, 5)); 658 switch (corner) {
659 case TOP_LEFT:
660 case TOP_RIGHT:
661 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
662 pile_->tiling().TileBounds(5, 5));
663 break;
664 case BOTTOM_LEFT:
665 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(1, 5),
666 pile_->tiling().TileBounds(5, 5));
667 expected_invalidation.Union(SubtractRects(
668 pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
669 break;
670 case BOTTOM_RIGHT:
671 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
672 pile_->tiling().TileBounds(4, 5));
673 expected_invalidation.Union(SubtractRects(
674 pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
675 break;
676 }
587 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 677 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
588 invalidation.Clear(); 678 invalidation.Clear();
589 679
590 UpdateWholePile(); 680 UpdateWholePile();
591 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 681 UpdateAndExpandInvalidation(&invalidation,
682 base_tiling_size,
683 CornerSinglePixelRect(corner, base_tiling_size));
592 684
593 // We should have lost nothing. 685 // We should have lost nothing.
594 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 686 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
595 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 687 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
596 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 688 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
597 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 689 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
598 TestPicturePile::PictureMapKey key(i, j); 690 TestPicturePile::PictureMapKey key(i, j);
599 TestPicturePile::PictureMap& map = pile_->picture_map(); 691 TestPicturePile::PictureMap& map = pile_->picture_map();
600 TestPicturePile::PictureMap::iterator it = map.find(key); 692 TestPicturePile::PictureMap::iterator it = map.find(key);
601 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 693 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
602 } 694 }
603 } 695 }
604 696
605 // We invalidated nothing. 697 // We invalidated nothing.
606 expected_invalidation.Clear(); 698 expected_invalidation.Clear();
607 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 699 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
608 invalidation.Clear(); 700 invalidation.Clear();
609 701
610 UpdateWholePile(); 702 UpdateWholePile();
611 UpdateAndExpandInvalidation( 703 UpdateAndExpandInvalidation(
612 &invalidation, grow_right_tiling_size, gfx::Rect(1, 1)); 704 &invalidation,
705 grow_right_tiling_size,
706 CornerSinglePixelRect(corner, grow_right_tiling_size));
613 707
614 // We should have lost the recordings in the right column. 708 // We should have lost the recordings in the right column.
615 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 709 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
616 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 710 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
617 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 711 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
618 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 712 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
619 TestPicturePile::PictureMapKey key(i, j); 713 TestPicturePile::PictureMapKey key(i, j);
620 TestPicturePile::PictureMap& map = pile_->picture_map(); 714 TestPicturePile::PictureMap& map = pile_->picture_map();
621 TestPicturePile::PictureMap::iterator it = map.find(key); 715 TestPicturePile::PictureMap::iterator it = map.find(key);
622 EXPECT_EQ(i < 5, it != map.end() && it->second.GetPicture()); 716 bool expect_tile;
717 switch (corner) {
718 case TOP_LEFT:
719 case BOTTOM_LEFT:
720 expect_tile = i < 5;
721 break;
722 case TOP_RIGHT:
723 // The interest rect in the top right tile means we'll record it.
724 expect_tile = i < 5 || (j == 0 && i == 5);
725 break;
726 case BOTTOM_RIGHT:
727 // The interest rect in the bottom right tile means we'll record it.
728 expect_tile = i < 5 || (j == 5 && i == 5);
729 break;
730 }
731 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture());
623 } 732 }
624 } 733 }
625 734
626 // We invalidated the right column. 735 // We invalidated the right column outside the new interest rect. The tile
627 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 736 // that insects the interest rect in invalidated only on its new pixels.
628 pile_->tiling().TileBounds(5, 5)); 737 switch (corner) {
738 case TOP_LEFT:
739 case BOTTOM_LEFT:
740 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
741 pile_->tiling().TileBounds(5, 5));
742 break;
743 case TOP_RIGHT:
744 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 1),
745 pile_->tiling().TileBounds(5, 5));
746 expected_invalidation.Union(SubtractRects(
747 pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
748 break;
749 case BOTTOM_RIGHT:
750 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
751 pile_->tiling().TileBounds(5, 4));
752 expected_invalidation.Union(SubtractRects(
753 pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
754 break;
755 }
629 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 756 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
630 invalidation.Clear(); 757 invalidation.Clear();
631 758
632 UpdateWholePile(); 759 UpdateWholePile();
633 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 760 UpdateAndExpandInvalidation(&invalidation,
761 base_tiling_size,
762 CornerSinglePixelRect(corner, base_tiling_size));
634 763
635 // We should have lost nothing. 764 // We should have lost nothing.
636 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 765 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
637 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 766 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
638 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 767 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
639 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 768 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
640 TestPicturePile::PictureMapKey key(i, j); 769 TestPicturePile::PictureMapKey key(i, j);
641 TestPicturePile::PictureMap& map = pile_->picture_map(); 770 TestPicturePile::PictureMap& map = pile_->picture_map();
642 TestPicturePile::PictureMap::iterator it = map.find(key); 771 TestPicturePile::PictureMap::iterator it = map.find(key);
643 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 772 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
644 } 773 }
645 } 774 }
646 775
647 // We invalidated nothing. 776 // We invalidated nothing.
648 expected_invalidation.Clear(); 777 expected_invalidation.Clear();
649 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 778 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
650 invalidation.Clear(); 779 invalidation.Clear();
651 780
652 UpdateWholePile(); 781 UpdateWholePile();
653 UpdateAndExpandInvalidation( 782 UpdateAndExpandInvalidation(
654 &invalidation, grow_both_tiling_size, gfx::Rect(1, 1)); 783 &invalidation,
784 grow_both_tiling_size,
785 CornerSinglePixelRect(corner, grow_both_tiling_size));
655 786
656 // We should have lost the recordings in the right column and bottom row. 787 // We should have lost the recordings in the right column and bottom row. The
788 // tile that insects the interest rect in invalidated only on its new pixels.
657 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 789 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
658 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 790 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
659 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 791 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
660 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 792 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
661 TestPicturePile::PictureMapKey key(i, j); 793 TestPicturePile::PictureMapKey key(i, j);
662 TestPicturePile::PictureMap& map = pile_->picture_map(); 794 TestPicturePile::PictureMap& map = pile_->picture_map();
663 TestPicturePile::PictureMap::iterator it = map.find(key); 795 TestPicturePile::PictureMap::iterator it = map.find(key);
664 EXPECT_EQ(i < 5 && j < 5, it != map.end() && it->second.GetPicture()); 796 bool expect_tile;
797 switch (corner) {
798 case TOP_LEFT:
799 expect_tile = i < 5 && j < 5;
800 break;
801 case TOP_RIGHT:
802 // The interest rect in the top right tile means we'll record it.
803 expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5);
804 break;
805 case BOTTOM_LEFT:
806 // The interest rect in the bottom left tile means we'll record it.
807 expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0);
808 break;
809 case BOTTOM_RIGHT:
810 // The interest rect in the bottom right tile means we'll record it.
811 expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5);
812 break;
813 }
814 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture())
815 << i << "," << j;
665 } 816 }
666 } 817 }
667 818
668 // We invalidated the right column and the bottom row. 819 // We invalidated the right column and the bottom row outside the new interest
669 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 820 // rect. The tile that insects the interest rect in invalidated only on its
670 pile_->tiling().TileBounds(5, 5)); 821 // new pixels.
671 expected_invalidation.Union(gfx::UnionRects( 822 switch (corner) {
672 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5))); 823 case TOP_LEFT:
824 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
825 pile_->tiling().TileBounds(5, 5));
826 expected_invalidation.Union(gfx::UnionRects(
827 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5)));
828 break;
829 case TOP_RIGHT:
830 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 1),
831 pile_->tiling().TileBounds(5, 5));
832 expected_invalidation.Union(gfx::UnionRects(
833 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5)));
834 expected_invalidation.Union(SubtractRects(
835 pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
836 break;
837 case BOTTOM_LEFT:
838 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
839 pile_->tiling().TileBounds(5, 5));
840 expected_invalidation.Union(gfx::UnionRects(
841 pile_->tiling().TileBounds(1, 5), pile_->tiling().TileBounds(5, 5)));
842 expected_invalidation.Union(SubtractRects(
843 pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
844 break;
845 case BOTTOM_RIGHT:
846 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
847 pile_->tiling().TileBounds(5, 4));
848 expected_invalidation.Union(gfx::UnionRects(
849 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(4, 5)));
850 expected_invalidation.Union(SubtractRegions(
851 pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
852 break;
853 }
673 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 854 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
674 invalidation.Clear(); 855 invalidation.Clear();
675 856
676 UpdateWholePile(); 857 UpdateWholePile();
677 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 858 UpdateAndExpandInvalidation(&invalidation,
859 base_tiling_size,
860 CornerSinglePixelRect(corner, base_tiling_size));
678 861
679 // We should have lost nothing. 862 // We should have lost nothing.
680 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 863 EXPECT_EQ(6, pile_->tiling().num_tiles_x());
681 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 864 EXPECT_EQ(6, pile_->tiling().num_tiles_y());
682 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 865 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
683 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 866 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
684 TestPicturePile::PictureMapKey key(i, j); 867 TestPicturePile::PictureMapKey key(i, j);
685 TestPicturePile::PictureMap& map = pile_->picture_map(); 868 TestPicturePile::PictureMap& map = pile_->picture_map();
686 TestPicturePile::PictureMap::iterator it = map.find(key); 869 TestPicturePile::PictureMap::iterator it = map.find(key);
687 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 870 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
688 } 871 }
689 } 872 }
690 873
691 // We invalidated nothing. 874 // We invalidated nothing.
692 expected_invalidation.Clear(); 875 expected_invalidation.Clear();
693 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 876 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
694 invalidation.Clear(); 877 invalidation.Clear();
695 } 878 }
696 879
880 INSTANTIATE_TEST_CASE_P(
881 PicturePileResizeCornerTests,
882 PicturePileResizeCornerTest,
883 ::testing::Values(TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT));
884
697 TEST_F(PicturePileTest, ResizePileInsideInterestRect) { 885 TEST_F(PicturePileTest, ResizePileInsideInterestRect) {
698 // This size chosen to be small enough that all the rects below fit inside the 886 // This size chosen to be small enough that all the rects below fit inside the
699 // the interest rect, so they are smaller than kPixelDistanceToRecord in each 887 // the interest rect, so they are smaller than kPixelDistanceToRecord in each
700 // dimension. 888 // dimension.
701 int tile_size = 100; 889 int tile_size = 100;
702 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size); 890 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size);
703 gfx::Size grow_down_tiling_size(5 * tile_size, 7 * tile_size); 891 gfx::Size grow_down_tiling_size(5 * tile_size, 7 * tile_size);
704 gfx::Size grow_right_tiling_size(7 * tile_size, 5 * tile_size); 892 gfx::Size grow_right_tiling_size(7 * tile_size, 5 * tile_size);
705 gfx::Size grow_both_tiling_size(7 * tile_size, 7 * tile_size); 893 gfx::Size grow_both_tiling_size(7 * tile_size, 7 * tile_size);
706 894
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 } 1186 }
999 } 1187 }
1000 1188
1001 // No invalidation when shrinking. 1189 // No invalidation when shrinking.
1002 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1190 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1003 invalidation.Clear(); 1191 invalidation.Clear();
1004 } 1192 }
1005 1193
1006 } // namespace 1194 } // namespace
1007 } // namespace cc 1195 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698