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

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

Issue 367833003: cc: Start using raster/eviction iterators. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 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/resources/picture_layer_tiling.h" 5 #include "cc/resources/picture_layer_tiling.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <set> 8 #include <set>
9 9
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
11 #include "cc/resources/picture_layer_tiling_set.h" 11 #include "cc/resources/picture_layer_tiling_set.h"
12 #include "cc/test/fake_output_surface.h" 12 #include "cc/test/fake_output_surface.h"
13 #include "cc/test/fake_output_surface_client.h" 13 #include "cc/test/fake_output_surface_client.h"
14 #include "cc/test/fake_picture_layer_tiling_client.h" 14 #include "cc/test/fake_picture_layer_tiling_client.h"
15 #include "cc/test/test_context_provider.h" 15 #include "cc/test/test_context_provider.h"
16 #include "cc/test/test_shared_bitmap_manager.h" 16 #include "cc/test/test_shared_bitmap_manager.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "ui/gfx/rect_conversions.h" 18 #include "ui/gfx/rect_conversions.h"
19 #include "ui/gfx/size_conversions.h" 19 #include "ui/gfx/size_conversions.h"
20 20
21 namespace cc { 21 namespace cc {
22 namespace { 22 namespace {
23 23
24 static gfx::Rect ViewportInLayerSpace( 24 static gfx::Rect ViewportInLayerSpace(const gfx::Transform& transform,
25 const gfx::Transform& transform, 25 const gfx::Size& device_viewport) {
26 const gfx::Size& device_viewport) {
27
28 gfx::Transform inverse; 26 gfx::Transform inverse;
29 if (!transform.GetInverse(&inverse)) 27 if (!transform.GetInverse(&inverse))
30 return gfx::Rect(); 28 return gfx::Rect();
31 29
32 gfx::RectF viewport_in_layer_space = MathUtil::ProjectClippedRect( 30 gfx::RectF viewport_in_layer_space = MathUtil::ProjectClippedRect(
33 inverse, gfx::RectF(gfx::Point(0, 0), device_viewport)); 31 inverse, gfx::RectF(gfx::Point(0, 0), device_viewport));
34 return ToEnclosingRect(viewport_in_layer_space); 32 return ToEnclosingRect(viewport_in_layer_space);
35 } 33 }
36 34
37 static void UpdateAllTilePriorities(PictureLayerTilingSet* set, 35 static void UpdateAllTilePriorities(PictureLayerTilingSet* set,
38 WhichTree tree, 36 WhichTree tree,
39 const gfx::Rect& visible_layer_rect, 37 const gfx::Rect& visible_layer_rect,
40 float layer_contents_scale, 38 float layer_contents_scale,
41 double current_frame_time_in_seconds) { 39 double current_frame_time_in_seconds) {
42 for (size_t i = 0; i < set->num_tilings(); ++i) { 40 for (size_t i = 0; i < set->num_tilings(); ++i) {
43 set->tiling_at(i)->UpdateTilePriorities(tree, 41 set->tiling_at(i)->UpdateTilePriorities(tree,
44 visible_layer_rect, 42 visible_layer_rect,
45 layer_contents_scale, 43 layer_contents_scale,
46 current_frame_time_in_seconds, 44 current_frame_time_in_seconds,
47 NULL, 45 NULL,
48 NULL, 46 NULL,
49 gfx::Transform()); 47 gfx::Transform());
50 } 48 }
51 } 49 }
52 50
51 static void CreateAllTiles(PictureLayerTilingSet* set) {
52 for (size_t i = 0; i < set->num_tilings(); ++i)
53 set->tiling_at(i)->CreateAllTilesForTesting();
54 }
55
53 class TestablePictureLayerTiling : public PictureLayerTiling { 56 class TestablePictureLayerTiling : public PictureLayerTiling {
54 public: 57 public:
55 using PictureLayerTiling::SetLiveTilesRect; 58 using PictureLayerTiling::SetLiveTilesRect;
56 using PictureLayerTiling::TileAt; 59 using PictureLayerTiling::TileAt;
57 60
58 static scoped_ptr<TestablePictureLayerTiling> Create( 61 static scoped_ptr<TestablePictureLayerTiling> Create(
59 float contents_scale, 62 float contents_scale,
60 const gfx::Size& layer_bounds, 63 const gfx::Size& layer_bounds,
61 PictureLayerTilingClient* client) { 64 PictureLayerTilingClient* client) {
62 return make_scoped_ptr(new TestablePictureLayerTiling( 65 return make_scoped_ptr(
63 contents_scale, 66 new TestablePictureLayerTiling(contents_scale, layer_bounds, client));
64 layer_bounds,
65 client));
66 } 67 }
67 68
68 using PictureLayerTiling::ComputeSkewport; 69 using PictureLayerTiling::ComputeSkewport;
69 70
70 protected: 71 protected:
71 TestablePictureLayerTiling(float contents_scale, 72 TestablePictureLayerTiling(float contents_scale,
72 const gfx::Size& layer_bounds, 73 const gfx::Size& layer_bounds,
73 PictureLayerTilingClient* client) 74 PictureLayerTilingClient* client)
74 : PictureLayerTiling(contents_scale, layer_bounds, client) { } 75 : PictureLayerTiling(contents_scale, layer_bounds, client) {}
75 }; 76 };
76 77
77 class PictureLayerTilingIteratorTest : public testing::Test { 78 class PictureLayerTilingIteratorTest : public testing::Test {
78 public: 79 public:
79 PictureLayerTilingIteratorTest() {} 80 PictureLayerTilingIteratorTest() {}
80 virtual ~PictureLayerTilingIteratorTest() {} 81 virtual ~PictureLayerTilingIteratorTest() {}
81 82
82 void Initialize(const gfx::Size& tile_size, 83 void Initialize(const gfx::Size& tile_size,
83 float contents_scale, 84 float contents_scale,
84 const gfx::Size& layer_bounds) { 85 const gfx::Size& layer_bounds) {
85 client_.SetTileSize(tile_size); 86 client_.SetTileSize(tile_size);
86 tiling_ = TestablePictureLayerTiling::Create(contents_scale, 87 tiling_ = TestablePictureLayerTiling::Create(
87 layer_bounds, 88 contents_scale, layer_bounds, &client_);
88 &client_);
89 } 89 }
90 90
91 void SetLiveRectAndVerifyTiles(const gfx::Rect& live_tiles_rect) { 91 void SetLiveRectAndVerifyTiles(const gfx::Rect& live_tiles_rect) {
92 tiling_->CreateAllTilesForTesting();
92 tiling_->SetLiveTilesRect(live_tiles_rect); 93 tiling_->SetLiveTilesRect(live_tiles_rect);
93 94
94 std::vector<Tile*> tiles = tiling_->AllTilesForTesting(); 95 std::vector<Tile*> tiles = tiling_->AllTilesForTesting();
95 for (std::vector<Tile*>::iterator iter = tiles.begin(); 96 for (std::vector<Tile*>::iterator iter = tiles.begin(); iter != tiles.end();
96 iter != tiles.end();
97 ++iter) { 97 ++iter) {
98 EXPECT_TRUE(live_tiles_rect.Intersects((*iter)->content_rect())); 98 EXPECT_TRUE(live_tiles_rect.Intersects((*iter)->content_rect()));
99 } 99 }
100 } 100 }
101 101
102 void VerifyTilesExactlyCoverRect( 102 void VerifyTilesExactlyCoverRect(float rect_scale,
103 float rect_scale, 103 const gfx::Rect& request_rect,
104 const gfx::Rect& request_rect, 104 const gfx::Rect& expect_rect) {
105 const gfx::Rect& expect_rect) {
106 EXPECT_TRUE(request_rect.Contains(expect_rect)); 105 EXPECT_TRUE(request_rect.Contains(expect_rect));
107 106
108 // Iterators are not valid if this ratio is too large (i.e. the 107 // Iterators are not valid if this ratio is too large (i.e. the
109 // tiling is too high-res for a low-res destination rect.) This is an 108 // tiling is too high-res for a low-res destination rect.) This is an
110 // artifact of snapping geometry to integer coordinates and then mapping 109 // artifact of snapping geometry to integer coordinates and then mapping
111 // back to floating point texture coordinates. 110 // back to floating point texture coordinates.
112 float dest_to_contents_scale = tiling_->contents_scale() / rect_scale; 111 float dest_to_contents_scale = tiling_->contents_scale() / rect_scale;
113 ASSERT_LE(dest_to_contents_scale, 2.0); 112 ASSERT_LE(dest_to_contents_scale, 2.0);
114 113
115 Region remaining = expect_rect; 114 Region remaining = expect_rect;
116 for (PictureLayerTiling::CoverageIterator 115 for (PictureLayerTiling::CoverageIterator iter(
117 iter(tiling_.get(), rect_scale, request_rect); 116 tiling_.get(), rect_scale, request_rect);
118 iter; 117 iter;
119 ++iter) { 118 ++iter) {
120 // Geometry cannot overlap previous geometry at all 119 // Geometry cannot overlap previous geometry at all
121 gfx::Rect geometry = iter.geometry_rect(); 120 gfx::Rect geometry = iter.geometry_rect();
122 EXPECT_TRUE(expect_rect.Contains(geometry)); 121 EXPECT_TRUE(expect_rect.Contains(geometry));
123 EXPECT_TRUE(remaining.Contains(geometry)); 122 EXPECT_TRUE(remaining.Contains(geometry));
124 remaining.Subtract(geometry); 123 remaining.Subtract(geometry);
125 124
126 // Sanity check that texture coords are within the texture rect. 125 // Sanity check that texture coords are within the texture rect.
127 gfx::RectF texture_rect = iter.texture_rect(); 126 gfx::RectF texture_rect = iter.texture_rect();
128 EXPECT_GE(texture_rect.x(), 0); 127 EXPECT_GE(texture_rect.x(), 0);
129 EXPECT_GE(texture_rect.y(), 0); 128 EXPECT_GE(texture_rect.y(), 0);
130 EXPECT_LE(texture_rect.right(), client_.TileSize().width()); 129 EXPECT_LE(texture_rect.right(), client_.TileSize().width());
131 EXPECT_LE(texture_rect.bottom(), client_.TileSize().height()); 130 EXPECT_LE(texture_rect.bottom(), client_.TileSize().height());
132 131
133 EXPECT_EQ(iter.texture_size(), client_.TileSize()); 132 EXPECT_EQ(iter.texture_size(), client_.TileSize());
134 } 133 }
135 134
136 // The entire rect must be filled by geometry from the tiling. 135 // The entire rect must be filled by geometry from the tiling.
137 EXPECT_TRUE(remaining.IsEmpty()); 136 EXPECT_TRUE(remaining.IsEmpty());
138 } 137 }
139 138
140 void VerifyTilesExactlyCoverRect(float rect_scale, const gfx::Rect& rect) { 139 void VerifyTilesExactlyCoverRect(float rect_scale, const gfx::Rect& rect) {
141 VerifyTilesExactlyCoverRect(rect_scale, rect, rect); 140 VerifyTilesExactlyCoverRect(rect_scale, rect, rect);
142 } 141 }
143 142
144 void VerifyTiles( 143 void VerifyTiles(
145 float rect_scale, 144 float rect_scale,
146 const gfx::Rect& rect, 145 const gfx::Rect& rect,
147 base::Callback<void(Tile* tile, 146 base::Callback<void(Tile* tile, const gfx::Rect& geometry_rect)>
148 const gfx::Rect& geometry_rect)> callback) { 147 callback) {
149 VerifyTiles(tiling_.get(), 148 VerifyTiles(tiling_.get(), rect_scale, rect, callback);
150 rect_scale,
151 rect,
152 callback);
153 } 149 }
154 150
155 void VerifyTiles( 151 void VerifyTiles(
156 PictureLayerTiling* tiling, 152 PictureLayerTiling* tiling,
157 float rect_scale, 153 float rect_scale,
158 const gfx::Rect& rect, 154 const gfx::Rect& rect,
159 base::Callback<void(Tile* tile, 155 base::Callback<void(Tile* tile, const gfx::Rect& geometry_rect)>
160 const gfx::Rect& geometry_rect)> callback) { 156 callback) {
161 Region remaining = rect; 157 Region remaining = rect;
162 for (PictureLayerTiling::CoverageIterator iter(tiling, rect_scale, rect); 158 for (PictureLayerTiling::CoverageIterator iter(tiling, rect_scale, rect);
163 iter; 159 iter;
164 ++iter) { 160 ++iter) {
165 remaining.Subtract(iter.geometry_rect()); 161 remaining.Subtract(iter.geometry_rect());
166 callback.Run(*iter, iter.geometry_rect()); 162 callback.Run(*iter, iter.geometry_rect());
167 } 163 }
168 EXPECT_TRUE(remaining.IsEmpty()); 164 EXPECT_TRUE(remaining.IsEmpty());
169 } 165 }
170 166
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 // The reason is that each tile has a one pixel border, so tile at (1, 2) 442 // The reason is that each tile has a one pixel border, so tile at (1, 2)
447 // for instance begins at (8, 16) pixels. So tile at (46, 46) will begin at 443 // for instance begins at (8, 16) pixels. So tile at (46, 46) will begin at
448 // (368, 368) and extend to the end of 1500 * 0.25 = 375 edge of the 444 // (368, 368) and extend to the end of 1500 * 0.25 = 375 edge of the
449 // tiling. 445 // tiling.
450 tiling = TestablePictureLayerTiling::Create(0.25f, layer_bounds, &client); 446 tiling = TestablePictureLayerTiling::Create(0.25f, layer_bounds, &client);
451 gfx::Rect viewport_in_content_space = 447 gfx::Rect viewport_in_content_space =
452 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); 448 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f));
453 449
454 tiling->UpdateTilePriorities( 450 tiling->UpdateTilePriorities(
455 ACTIVE_TREE, viewport, 1.f, 1.0, NULL, NULL, gfx::Transform()); 451 ACTIVE_TREE, viewport, 1.f, 1.0, NULL, NULL, gfx::Transform());
452 tiling->CreateInterestRectTilesForTesting();
456 453
457 gfx::Rect soon_rect = viewport; 454 gfx::Rect soon_rect = viewport;
458 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 455 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
459 gfx::Rect soon_rect_in_content_space = 456 gfx::Rect soon_rect_in_content_space =
460 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f)); 457 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f));
461 458
462 // Sanity checks. 459 // Sanity checks.
463 for (int i = 0; i < 47; ++i) { 460 for (int i = 0; i < 47; ++i) {
464 for (int j = 0; j < 47; ++j) { 461 for (int j = 0; j < 47; ++j) {
465 EXPECT_TRUE(tiling->TileAt(i, j)) << "i: " << i << " j: " << j; 462 EXPECT_TRUE(tiling->TileAt(i, j)) << "i: " << i << " j: " << j;
(...skipping 28 matching lines...) Expand all
494 have_eventually = true; 491 have_eventually = true;
495 } 492 }
496 } 493 }
497 } 494 }
498 495
499 EXPECT_TRUE(have_now); 496 EXPECT_TRUE(have_now);
500 EXPECT_TRUE(have_soon); 497 EXPECT_TRUE(have_soon);
501 EXPECT_TRUE(have_eventually); 498 EXPECT_TRUE(have_eventually);
502 499
503 // Spot check some distances. 500 // Spot check some distances.
504 // Tile at 5, 1 should begin at 41x9 in content space (without borders), 501 // Tile at 5, 1 should begin at 40x8 in content space (with borders),
vmpstr 2014/07/02 23:51:29 I think it makes sense for us to use bordered rect
505 // so the distance to a viewport that ends at 25x25 in content space 502 // so the distance to a viewport that ends at 25x25 in content space
506 // should be 17 (41 - 25 + 1). In layer space, then that should be 503 // should be 17 (40 - 25 + 1). In layer space, then that should be
507 // 17 / 0.25 = 68 pixels. 504 // 17 / 0.25 = 64 pixels.
508 505
509 // We can verify that the content rect (with borders) is one pixel off 506 // We can verify that the content rect is what we expect it to be.
510 // 41,9 8x8 on all sides.
511 EXPECT_EQ(tiling->TileAt(5, 1)->content_rect().ToString(), "40,8 10x10"); 507 EXPECT_EQ(tiling->TileAt(5, 1)->content_rect().ToString(), "40,8 10x10");
512 508
513 TilePriority priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 509 TilePriority priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
514 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); 510 EXPECT_FLOAT_EQ(64.f, priority.distance_to_visible);
515 511
516 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 512 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
517 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); 513 EXPECT_FLOAT_EQ(64.f, priority.distance_to_visible);
518 514
519 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 515 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
520 EXPECT_FLOAT_EQ(40.f, priority.distance_to_visible); 516 EXPECT_FLOAT_EQ(32.f, priority.distance_to_visible);
521 517
522 // Move the viewport down 40 pixels. 518 // Move the viewport down 40 pixels.
523 viewport = gfx::Rect(0, 40, 100, 100); 519 viewport = gfx::Rect(0, 40, 100, 100);
524 viewport_in_content_space = 520 viewport_in_content_space =
525 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); 521 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f));
526 gfx::Rect skewport = tiling->ComputeSkewport(2.0, viewport_in_content_space); 522 gfx::Rect skewport = tiling->ComputeSkewport(2.0, viewport_in_content_space);
527 523
528 soon_rect = viewport; 524 soon_rect = viewport;
529 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 525 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
530 soon_rect_in_content_space = 526 soon_rect_in_content_space =
531 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f)); 527 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f));
532 528
533 EXPECT_EQ(0, skewport.x()); 529 EXPECT_EQ(0, skewport.x());
534 EXPECT_EQ(10, skewport.y()); 530 EXPECT_EQ(10, skewport.y());
535 EXPECT_EQ(25, skewport.width()); 531 EXPECT_EQ(25, skewport.width());
536 EXPECT_EQ(35, skewport.height()); 532 EXPECT_EQ(35, skewport.height());
537 533
538 tiling->UpdateTilePriorities( 534 tiling->UpdateTilePriorities(
539 ACTIVE_TREE, viewport, 1.f, 2.0, NULL, NULL, gfx::Transform()); 535 ACTIVE_TREE, viewport, 1.f, 2.0, NULL, NULL, gfx::Transform());
536 tiling->CreateAllTilesForTesting();
540 537
541 have_now = false; 538 have_now = false;
542 have_eventually = false; 539 have_eventually = false;
543 have_soon = false; 540 have_soon = false;
544 541
545 // Viewport moved, so we expect to find some NOW tiles, some SOON tiles and 542 // Viewport moved, so we expect to find some NOW tiles, some SOON tiles and
546 // some EVENTUALLY tiles. 543 // some EVENTUALLY tiles.
547 for (int i = 0; i < 47; ++i) { 544 for (int i = 0; i < 47; ++i) {
548 for (int j = 0; j < 47; ++j) { 545 for (int j = 0; j < 47; ++j) {
549 Tile* tile = tiling->TileAt(i, j); 546 Tile* tile = tiling->TileAt(i, j);
(...skipping 20 matching lines...) Expand all
570 have_eventually = true; 567 have_eventually = true;
571 } 568 }
572 } 569 }
573 } 570 }
574 571
575 EXPECT_TRUE(have_now); 572 EXPECT_TRUE(have_now);
576 EXPECT_TRUE(have_soon); 573 EXPECT_TRUE(have_soon);
577 EXPECT_TRUE(have_eventually); 574 EXPECT_TRUE(have_eventually);
578 575
579 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 576 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
580 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); 577 EXPECT_FLOAT_EQ(64.f, priority.distance_to_visible);
581 578
582 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 579 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
583 EXPECT_FLOAT_EQ(28.f, priority.distance_to_visible); 580 EXPECT_FLOAT_EQ(24.f, priority.distance_to_visible);
584 581
585 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 582 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
586 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 583 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
587 584
588 // Change the underlying layer scale. 585 // Change the underlying layer scale.
589 tiling->UpdateTilePriorities( 586 tiling->UpdateTilePriorities(
590 ACTIVE_TREE, viewport, 2.0f, 3.0, NULL, NULL, gfx::Transform()); 587 ACTIVE_TREE, viewport, 2.0f, 3.0, NULL, NULL, gfx::Transform());
588 tiling->CreateAllTilesForTesting();
591 589
592 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 590 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
593 EXPECT_FLOAT_EQ(34.f, priority.distance_to_visible); 591 EXPECT_FLOAT_EQ(32.f, priority.distance_to_visible);
594 592
595 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 593 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
596 EXPECT_FLOAT_EQ(14.f, priority.distance_to_visible); 594 EXPECT_FLOAT_EQ(12.f, priority.distance_to_visible);
597 595
598 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 596 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
599 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 597 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
600 } 598 }
601 599
602 TEST(PictureLayerTilingTest, ExpandRectEqual) { 600 TEST(PictureLayerTilingTest, ExpandRectEqual) {
603 gfx::Rect in(40, 50, 100, 200); 601 gfx::Rect in(40, 50, 100, 200);
604 gfx::Rect bounds(-1000, -1000, 10000, 10000); 602 gfx::Rect bounds(-1000, -1000, 10000, 10000);
605 int64 target_area = 100 * 200; 603 int64 target_area = 100 * 200;
606 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( 604 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy(
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 EXPECT_EQ(out.bottom() - in.bottom(), in.y() - out.y()); 695 EXPECT_EQ(out.bottom() - in.bottom(), in.y() - out.y());
698 EXPECT_EQ(out.bottom() - in.bottom(), out.right() - in.right()); 696 EXPECT_EQ(out.bottom() - in.bottom(), out.right() - in.right());
699 EXPECT_LE(out.width() * out.height(), target_area); 697 EXPECT_LE(out.width() * out.height(), target_area);
700 EXPECT_GT(out.width() * out.height(), 698 EXPECT_GT(out.width() * out.height(),
701 target_area - out.width() - out.height() * 2); 699 target_area - out.width() - out.height() * 2);
702 EXPECT_TRUE(bounds.Contains(out)); 700 EXPECT_TRUE(bounds.Contains(out));
703 } 701 }
704 702
705 TEST(PictureLayerTilingTest, ExpandRectBoundedRight) { 703 TEST(PictureLayerTilingTest, ExpandRectBoundedRight) {
706 gfx::Rect in(40, 50, 100, 200); 704 gfx::Rect in(40, 50, 100, 200);
707 gfx::Rect bounds(-1000, -1000, 1000+120, 10000); 705 gfx::Rect bounds(-1000, -1000, 1000 + 120, 10000);
708 int64 target_area = 200 * 200; 706 int64 target_area = 200 * 200;
709 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( 707 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy(
710 in, target_area, bounds, NULL); 708 in, target_area, bounds, NULL);
711 EXPECT_EQ(out.bottom() - in.bottom(), in.y() - out.y()); 709 EXPECT_EQ(out.bottom() - in.bottom(), in.y() - out.y());
712 EXPECT_EQ(out.bottom() - in.bottom(), in.x() - out.x()); 710 EXPECT_EQ(out.bottom() - in.bottom(), in.x() - out.x());
713 EXPECT_LE(out.width() * out.height(), target_area); 711 EXPECT_LE(out.width() * out.height(), target_area);
714 EXPECT_GT(out.width() * out.height(), 712 EXPECT_GT(out.width() * out.height(),
715 target_area - out.width() - out.height() * 2); 713 target_area - out.width() - out.height() * 2);
716 EXPECT_TRUE(bounds.Contains(out)); 714 EXPECT_TRUE(bounds.Contains(out));
717 } 715 }
(...skipping 21 matching lines...) Expand all
739 EXPECT_EQ(out.right() - in.right(), in.x() - out.x()); 737 EXPECT_EQ(out.right() - in.right(), in.x() - out.x());
740 EXPECT_EQ(out.right() - in.right(), in.y() - out.y()); 738 EXPECT_EQ(out.right() - in.right(), in.y() - out.y());
741 EXPECT_LE(out.width() * out.height(), target_area); 739 EXPECT_LE(out.width() * out.height(), target_area);
742 EXPECT_GT(out.width() * out.height(), 740 EXPECT_GT(out.width() * out.height(),
743 target_area - out.width() * 2 - out.height()); 741 target_area - out.width() * 2 - out.height());
744 EXPECT_TRUE(bounds.Contains(out)); 742 EXPECT_TRUE(bounds.Contains(out));
745 } 743 }
746 744
747 TEST(PictureLayerTilingTest, ExpandRectSquishedHorizontally) { 745 TEST(PictureLayerTilingTest, ExpandRectSquishedHorizontally) {
748 gfx::Rect in(40, 50, 100, 200); 746 gfx::Rect in(40, 50, 100, 200);
749 gfx::Rect bounds(0, -4000, 100+40+20, 100000); 747 gfx::Rect bounds(0, -4000, 100 + 40 + 20, 100000);
750 int64 target_area = 400 * 400; 748 int64 target_area = 400 * 400;
751 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( 749 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy(
752 in, target_area, bounds, NULL); 750 in, target_area, bounds, NULL);
753 EXPECT_EQ(20, out.right() - in.right()); 751 EXPECT_EQ(20, out.right() - in.right());
754 EXPECT_EQ(40, in.x() - out.x()); 752 EXPECT_EQ(40, in.x() - out.x());
755 EXPECT_EQ(out.bottom() - in.bottom(), in.y() - out.y()); 753 EXPECT_EQ(out.bottom() - in.bottom(), in.y() - out.y());
756 EXPECT_LE(out.width() * out.height(), target_area); 754 EXPECT_LE(out.width() * out.height(), target_area);
757 EXPECT_GT(out.width() * out.height(), 755 EXPECT_GT(out.width() * out.height(), target_area - out.width() * 2);
758 target_area - out.width() * 2);
759 EXPECT_TRUE(bounds.Contains(out)); 756 EXPECT_TRUE(bounds.Contains(out));
760 } 757 }
761 758
762 TEST(PictureLayerTilingTest, ExpandRectSquishedVertically) { 759 TEST(PictureLayerTilingTest, ExpandRectSquishedVertically) {
763 gfx::Rect in(40, 50, 100, 200); 760 gfx::Rect in(40, 50, 100, 200);
764 gfx::Rect bounds(-4000, 0, 100000, 200+50+30); 761 gfx::Rect bounds(-4000, 0, 100000, 200 + 50 + 30);
765 int64 target_area = 400 * 400; 762 int64 target_area = 400 * 400;
766 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( 763 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy(
767 in, target_area, bounds, NULL); 764 in, target_area, bounds, NULL);
768 EXPECT_EQ(30, out.bottom() - in.bottom()); 765 EXPECT_EQ(30, out.bottom() - in.bottom());
769 EXPECT_EQ(50, in.y() - out.y()); 766 EXPECT_EQ(50, in.y() - out.y());
770 EXPECT_EQ(out.right() - in.right(), in.x() - out.x()); 767 EXPECT_EQ(out.right() - in.right(), in.x() - out.x());
771 EXPECT_LE(out.width() * out.height(), target_area); 768 EXPECT_LE(out.width() * out.height(), target_area);
772 EXPECT_GT(out.width() * out.height(), 769 EXPECT_GT(out.width() * out.height(), target_area - out.height() * 2);
773 target_area - out.height() * 2);
774 EXPECT_TRUE(bounds.Contains(out)); 770 EXPECT_TRUE(bounds.Contains(out));
775 } 771 }
776 772
777 TEST(PictureLayerTilingTest, ExpandRectOutOfBoundsFarAway) { 773 TEST(PictureLayerTilingTest, ExpandRectOutOfBoundsFarAway) {
778 gfx::Rect in(400, 500, 100, 200); 774 gfx::Rect in(400, 500, 100, 200);
779 gfx::Rect bounds(0, 0, 10, 10); 775 gfx::Rect bounds(0, 0, 10, 10);
780 int64 target_area = 400 * 400; 776 int64 target_area = 400 * 400;
781 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( 777 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy(
782 in, target_area, bounds, NULL); 778 in, target_area, bounds, NULL);
783 EXPECT_TRUE(out.IsEmpty()); 779 EXPECT_TRUE(out.IsEmpty());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 825
830 client.SetTileSize(gfx::Size(30, 30)); 826 client.SetTileSize(gfx::Size(30, 30));
831 827
832 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); 828 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client);
833 tiling->UpdateTilePriorities( 829 tiling->UpdateTilePriorities(
834 ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); 830 ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform());
835 831
836 PictureLayerTiling::TilingRasterTileIterator empty_iterator; 832 PictureLayerTiling::TilingRasterTileIterator empty_iterator;
837 EXPECT_FALSE(empty_iterator); 833 EXPECT_FALSE(empty_iterator);
838 834
839 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
840
841 // Sanity check.
842 EXPECT_EQ(841u, all_tiles.size());
843
844 // The explanation of each iteration is as follows: 835 // The explanation of each iteration is as follows:
845 // 1. First iteration tests that we can get all of the tiles correctly. 836 // 1. First iteration tests that we can get all of the tiles correctly.
846 // 2. Second iteration ensures that we can get all of the tiles again (first 837 // 2. Second iteration ensures that we can get all of the tiles again (first
847 // iteration didn't change any tiles), as well set all tiles to be ready to 838 // iteration didn't change any tiles), as well set all tiles to be ready to
848 // draw. 839 // draw.
849 // 3. Third iteration ensures that no tiles are returned, since they were all 840 // 3. Third iteration ensures that no tiles are returned, since they were all
850 // marked as ready to draw. 841 // marked as ready to draw.
851 for (int i = 0; i < 3; ++i) { 842 for (int i = 0; i < 3; ++i) {
852 PictureLayerTiling::TilingRasterTileIterator it(tiling.get(), ACTIVE_TREE); 843 PictureLayerTiling::TilingRasterTileIterator it(tiling.get(), ACTIVE_TREE);
853 844
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 907
917 EXPECT_GT(eventually_bin_order_correct_count, 908 EXPECT_GT(eventually_bin_order_correct_count,
918 eventually_bin_order_incorrect_count); 909 eventually_bin_order_incorrect_count);
919 910
920 // We should have now and eventually tiles, as well as soon tiles from 911 // We should have now and eventually tiles, as well as soon tiles from
921 // the border region. 912 // the border region.
922 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 913 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
923 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 914 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
924 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 915 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
925 916
917 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
918
919 // Sanity check.
920 EXPECT_EQ(841u, all_tiles.size());
926 EXPECT_EQ(unique_tiles.size(), all_tiles.size()); 921 EXPECT_EQ(unique_tiles.size(), all_tiles.size());
927 } 922 }
928 } 923 }
929 924
930 TEST(PictureLayerTilingTest, TilingRasterTileIteratorMovingViewport) { 925 TEST(PictureLayerTilingTest, TilingRasterTileIteratorMovingViewport) {
931 FakePictureLayerTilingClient client; 926 FakePictureLayerTilingClient client;
932 scoped_ptr<TestablePictureLayerTiling> tiling; 927 scoped_ptr<TestablePictureLayerTiling> tiling;
933 928
934 gfx::Rect viewport(50, 0, 100, 100); 929 gfx::Rect viewport(50, 0, 100, 100);
935 gfx::Rect moved_viewport(50, 0, 100, 500); 930 gfx::Rect moved_viewport(50, 0, 100, 500);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 } 979 }
985 980
986 EXPECT_GT(eventually_bin_order_correct_count, 981 EXPECT_GT(eventually_bin_order_correct_count,
987 eventually_bin_order_incorrect_count); 982 eventually_bin_order_incorrect_count);
988 983
989 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 984 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
990 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 985 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
991 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 986 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
992 } 987 }
993 988
994 static void TileExists(bool exists, Tile* tile, 989 static void TileExists(bool exists,
990 Tile* tile,
995 const gfx::Rect& geometry_rect) { 991 const gfx::Rect& geometry_rect) {
996 EXPECT_EQ(exists, tile != NULL) << geometry_rect.ToString(); 992 EXPECT_EQ(exists, tile != NULL) << geometry_rect.ToString();
997 } 993 }
998 994
999 TEST(PictureLayerTilingTest, TilingEvictionTileIteratorStaticViewport) { 995 TEST(PictureLayerTilingTest, TilingEvictionTileIteratorStaticViewport) {
1000 FakeOutputSurfaceClient output_surface_client; 996 FakeOutputSurfaceClient output_surface_client;
1001 scoped_ptr<FakeOutputSurface> output_surface = FakeOutputSurface::Create3d(); 997 scoped_ptr<FakeOutputSurface> output_surface = FakeOutputSurface::Create3d();
1002 CHECK(output_surface->BindToClient(&output_surface_client)); 998 CHECK(output_surface->BindToClient(&output_surface_client));
1003 TestSharedBitmapManager shared_bitmap_manager; 999 TestSharedBitmapManager shared_bitmap_manager;
1004 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create( 1000 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create(
1005 output_surface.get(), &shared_bitmap_manager, 0, false, 1, false); 1001 output_surface.get(), &shared_bitmap_manager, 0, false, 1, false);
1006 1002
1007 FakePictureLayerTilingClient client(resource_provider.get()); 1003 FakePictureLayerTilingClient client(resource_provider.get());
1008 scoped_ptr<TestablePictureLayerTiling> tiling; 1004 scoped_ptr<TestablePictureLayerTiling> tiling;
1009 1005
1010 gfx::Rect viewport(50, 50, 100, 100); 1006 gfx::Rect viewport(50, 50, 100, 100);
1011 gfx::Size layer_bounds(200, 200); 1007 gfx::Size layer_bounds(200, 200);
1012 1008
1013 client.SetTileSize(gfx::Size(30, 30)); 1009 client.SetTileSize(gfx::Size(30, 30));
1014 1010
1015 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); 1011 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client);
1016 tiling->UpdateTilePriorities( 1012 tiling->UpdateTilePriorities(
1017 ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); 1013 ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform());
1014 tiling->CreateAllTilesForTesting();
1018 1015
1019 PictureLayerTiling::TilingRasterTileIterator empty_iterator; 1016 PictureLayerTiling::TilingRasterTileIterator empty_iterator;
1020 EXPECT_FALSE(empty_iterator); 1017 EXPECT_FALSE(empty_iterator);
1021 1018
1022 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting(); 1019 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
1023 1020
1024 PictureLayerTiling::TilingEvictionTileIterator it(tiling.get(), 1021 PictureLayerTiling::TilingEvictionTileIterator it(tiling.get(),
1025 SMOOTHNESS_TAKES_PRIORITY); 1022 SMOOTHNESS_TAKES_PRIORITY);
1026 1023
1027 // Tiles don't have resources to evict. 1024 // Tiles don't have resources to evict.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1062 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1066 1063
1067 tiling_->UpdateTilePriorities( 1064 tiling_->UpdateTilePriorities(
1068 ACTIVE_TREE, 1065 ACTIVE_TREE,
1069 gfx::Rect(layer_bounds), // visible content rect 1066 gfx::Rect(layer_bounds), // visible content rect
1070 1.f, // current contents scale 1067 1.f, // current contents scale
1071 1.0, // current frame time 1068 1.0, // current frame time
1072 NULL, // occlusion tracker 1069 NULL, // occlusion tracker
1073 NULL, // render target 1070 NULL, // render target
1074 gfx::Transform()); // draw transform 1071 gfx::Transform()); // draw transform
1072 tiling_->CreateAllTilesForTesting();
1075 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1073 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1076
1077 // Make the viewport rect empty. All tiles are killed and become zombies.
1078 tiling_->UpdateTilePriorities(ACTIVE_TREE,
1079 gfx::Rect(), // visible content rect
1080 1.f, // current contents scale
1081 2.0, // current frame time
1082 NULL, // occlusion tracker
1083 NULL, // render target
1084 gfx::Transform()); // draw transform
1085 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1086 } 1074 }
1087 1075
1088 TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) { 1076 TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) {
1089 gfx::Size layer_bounds(1099, 801); 1077 gfx::Size layer_bounds(1099, 801);
1090 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 1078 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
1091 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 1079 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
1092 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1080 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1093 1081
1094 gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000); 1082 gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000);
1095 1083
1096 tiling_->UpdateTilePriorities( 1084 tiling_->UpdateTilePriorities(
1097 ACTIVE_TREE, 1085 ACTIVE_TREE,
1098 gfx::Rect(layer_bounds), // visible content rect 1086 gfx::Rect(layer_bounds), // visible content rect
1099 1.f, // current contents scale 1087 1.f, // current contents scale
1100 1.0, // current frame time 1088 1.0, // current frame time
1101 NULL, // occlusion tracker 1089 NULL, // occlusion tracker
1102 NULL, // render target 1090 NULL, // render target
1103 gfx::Transform()); // draw transform 1091 gfx::Transform()); // draw transform
1092 tiling_->CreateAllTilesForTesting();
1104 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1093 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1105 1094
1106 // If the visible content rect is empty, it should still have live tiles. 1095 // If the visible content rect is empty, it should still have live tiles.
1107 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1096 tiling_->UpdateTilePriorities(ACTIVE_TREE,
1108 giant_rect, // visible content rect 1097 giant_rect, // visible content rect
1109 1.f, // current contents scale 1098 1.f, // current contents scale
1110 2.0, // current frame time 1099 2.0, // current frame time
1111 NULL, // occlusion tracker 1100 NULL, // occlusion tracker
1112 NULL, // render target 1101 NULL, // render target
1113 gfx::Transform()); // draw transform 1102 gfx::Transform()); // draw transform
(...skipping 11 matching lines...) Expand all
1125 gfx::Rect viewport_rect(1100, 0, 1000, 1000); 1114 gfx::Rect viewport_rect(1100, 0, 1000, 1000);
1126 EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds))); 1115 EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds)));
1127 1116
1128 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1117 tiling_->UpdateTilePriorities(ACTIVE_TREE,
1129 viewport_rect, // visible content rect 1118 viewport_rect, // visible content rect
1130 1.f, // current contents scale 1119 1.f, // current contents scale
1131 1.0, // current frame time 1120 1.0, // current frame time
1132 NULL, // occlusion tracker 1121 NULL, // occlusion tracker
1133 NULL, // render target 1122 NULL, // render target
1134 gfx::Transform()); // draw transform 1123 gfx::Transform()); // draw transform
1124 tiling_->CreateAllTilesForTesting();
1135 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1125 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1136 } 1126 }
1137 1127
1138 static void TilesIntersectingRectExist(const gfx::Rect& rect, 1128 static void TilesIntersectingRectExist(const gfx::Rect& rect,
1139 bool intersect_exists, 1129 bool intersect_exists,
1140 Tile* tile, 1130 Tile* tile,
1141 const gfx::Rect& geometry_rect) { 1131 const gfx::Rect& geometry_rect) {
1142 bool intersects = rect.Intersects(geometry_rect); 1132 bool intersects = rect.Intersects(geometry_rect);
1143 bool expected_exists = intersect_exists ? intersects : !intersects; 1133 bool expected_exists = intersect_exists ? intersects : !intersects;
1144 EXPECT_EQ(expected_exists, tile != NULL) 1134 EXPECT_EQ(expected_exists, tile != NULL)
(...skipping 11 matching lines...) Expand all
1156 gfx::Rect visible_rect(8000, 8000, 50, 50); 1146 gfx::Rect visible_rect(8000, 8000, 50, 50);
1157 1147
1158 set_max_tiles_for_interest_area(1); 1148 set_max_tiles_for_interest_area(1);
1159 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1149 tiling_->UpdateTilePriorities(ACTIVE_TREE,
1160 visible_rect, // visible content rect 1150 visible_rect, // visible content rect
1161 1.f, // current contents scale 1151 1.f, // current contents scale
1162 1.0, // current frame time 1152 1.0, // current frame time
1163 NULL, // occlusion tracker 1153 NULL, // occlusion tracker
1164 NULL, // render target 1154 NULL, // render target
1165 gfx::Transform()); // draw transform 1155 gfx::Transform()); // draw transform
1156 tiling_->CreateInterestRectTilesForTesting();
1166 VerifyTiles(1.f, 1157 VerifyTiles(1.f,
1167 gfx::Rect(layer_bounds), 1158 gfx::Rect(layer_bounds),
1168 base::Bind(&TilesIntersectingRectExist, visible_rect, true)); 1159 base::Bind(&TilesIntersectingRectExist, visible_rect, true));
1169 } 1160 }
1170 1161
1171 static void CountExistingTiles(int *count, 1162 static void CountExistingTiles(int* count,
1172 Tile* tile, 1163 Tile* tile,
1173 const gfx::Rect& geometry_rect) { 1164 const gfx::Rect& geometry_rect) {
1174 if (tile != NULL) 1165 if (tile != NULL)
1175 ++(*count); 1166 ++(*count);
1176 } 1167 }
1177 1168
1178 TEST_F(PictureLayerTilingIteratorTest, 1169 TEST_F(PictureLayerTilingIteratorTest,
1179 TilesExistLargeViewportAndLayerWithLargeVisibleArea) { 1170 TilesExistLargeViewportAndLayerWithLargeVisibleArea) {
1180 gfx::Size layer_bounds(10000, 10000); 1171 gfx::Size layer_bounds(10000, 10000);
1181 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 1172 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
(...skipping 29 matching lines...) Expand all
1211 PictureLayerTilingSet active_set(&client_, layer_bounds); 1202 PictureLayerTilingSet active_set(&client_, layer_bounds);
1212 1203
1213 active_set.AddTiling(1.f); 1204 active_set.AddTiling(1.f);
1214 1205
1215 VerifyTiles(active_set.tiling_at(0), 1206 VerifyTiles(active_set.tiling_at(0),
1216 1.f, 1207 1.f,
1217 gfx::Rect(layer_bounds), 1208 gfx::Rect(layer_bounds),
1218 base::Bind(&TileExists, false)); 1209 base::Bind(&TileExists, false));
1219 1210
1220 UpdateAllTilePriorities(&active_set, 1211 UpdateAllTilePriorities(&active_set,
1221 PENDING_TREE, 1212 ACTIVE_TREE,
1222 gfx::Rect(layer_bounds), // visible content rect 1213 gfx::Rect(layer_bounds), // visible content rect
1223 1.f, // current contents scale 1214 1.f, // current contents scale
1224 1.0); // current frame time 1215 1.0); // current frame time
1216 CreateAllTiles(&active_set);
1225 1217
1226 // The active tiling has tiles now. 1218 // The active tiling has tiles now.
1227 VerifyTiles(active_set.tiling_at(0), 1219 VerifyTiles(active_set.tiling_at(0),
1228 1.f, 1220 1.f,
1229 gfx::Rect(layer_bounds), 1221 gfx::Rect(layer_bounds),
1230 base::Bind(&TileExists, true)); 1222 base::Bind(&TileExists, true));
1231 1223
1232 // Add the same tilings to the pending set. 1224 // Add the same tilings to the pending set.
1233 PictureLayerTilingSet pending_set(&client_, layer_bounds); 1225 PictureLayerTilingSet pending_set(&client_, layer_bounds);
1234 Region invalidation; 1226 Region invalidation;
1235 pending_set.SyncTilings(active_set, layer_bounds, invalidation, 0.f); 1227 pending_set.SyncTilings(active_set, layer_bounds, invalidation, 0.f);
1236 1228
1237 // The pending tiling starts with no tiles. 1229 // The pending tiling starts with no tiles.
1238 VerifyTiles(pending_set.tiling_at(0), 1230 VerifyTiles(pending_set.tiling_at(0),
1239 1.f, 1231 1.f,
1240 gfx::Rect(layer_bounds), 1232 gfx::Rect(layer_bounds),
1241 base::Bind(&TileExists, false)); 1233 base::Bind(&TileExists, false));
1242 1234
1243 // UpdateTilePriorities on the pending tiling at the same frame time. The 1235 // UpdateTilePriorities on the pending tiling at the same frame time. The
1244 // pending tiling should get tiles. 1236 // pending tiling should get tiles.
1245 UpdateAllTilePriorities(&pending_set, 1237 UpdateAllTilePriorities(&pending_set,
1246 PENDING_TREE, 1238 PENDING_TREE,
1247 gfx::Rect(layer_bounds), // visible content rect 1239 gfx::Rect(layer_bounds), // visible content rect
1248 1.f, // current contents scale 1240 1.f, // current contents scale
1249 1.0); // current frame time 1241 1.0); // current frame time
1242 CreateAllTiles(&pending_set);
1250 1243
1251 VerifyTiles(pending_set.tiling_at(0), 1244 VerifyTiles(pending_set.tiling_at(0),
1252 1.f, 1245 1.f,
1253 gfx::Rect(layer_bounds), 1246 gfx::Rect(layer_bounds),
1254 base::Bind(&TileExists, true)); 1247 base::Bind(&TileExists, true));
1255 } 1248 }
1256 1249
1257 TEST(UpdateTilePrioritiesTest, VisibleTiles) { 1250 TEST(UpdateTilePrioritiesTest, VisibleTiles) {
1258 // The TilePriority of visible tiles should have zero distance_to_visible 1251 // The TilePriority of visible tiles should have zero distance_to_visible
1259 // and time_to_visible. 1252 // and time_to_visible.
1260 1253
1261 FakePictureLayerTilingClient client; 1254 FakePictureLayerTilingClient client;
1262 scoped_ptr<TestablePictureLayerTiling> tiling; 1255 scoped_ptr<TestablePictureLayerTiling> tiling;
1263 1256
1264 gfx::Size device_viewport(800, 600); 1257 gfx::Size device_viewport(800, 600);
1265 gfx::Size last_layer_bounds(200, 200); 1258 gfx::Size last_layer_bounds(200, 200);
1266 gfx::Size current_layer_bounds(200, 200); 1259 gfx::Size current_layer_bounds(200, 200);
1267 float current_layer_contents_scale = 1.f; 1260 float current_layer_contents_scale = 1.f;
1268 gfx::Transform current_screen_transform; 1261 gfx::Transform current_screen_transform;
1269 double current_frame_time_in_seconds = 1.0; 1262 double current_frame_time_in_seconds = 1.0;
1270 1263
1271 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1264 gfx::Rect viewport_in_layer_space =
1272 current_screen_transform, device_viewport); 1265 ViewportInLayerSpace(current_screen_transform, device_viewport);
1273 1266
1274 client.SetTileSize(gfx::Size(100, 100)); 1267 client.SetTileSize(gfx::Size(100, 100));
1275 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1268 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1276 current_layer_bounds, 1269 current_layer_bounds,
1277 &client); 1270 &client);
1278 1271
1279 tiling->UpdateTilePriorities(ACTIVE_TREE, 1272 tiling->UpdateTilePriorities(ACTIVE_TREE,
1280 viewport_in_layer_space, 1273 viewport_in_layer_space,
1281 current_layer_contents_scale, 1274 current_layer_contents_scale,
1282 current_frame_time_in_seconds, 1275 current_frame_time_in_seconds,
1283 NULL, // occlusion tracker 1276 NULL, // occlusion tracker
1284 NULL, // render target 1277 NULL, // render target
1285 gfx::Transform()); // draw transform 1278 gfx::Transform()); // draw transform
1279 tiling->CreateInterestRectTilesForTesting();
1286 1280
1287 ASSERT_TRUE(tiling->TileAt(0, 0)); 1281 ASSERT_TRUE(tiling->TileAt(0, 0));
1288 ASSERT_TRUE(tiling->TileAt(0, 1)); 1282 ASSERT_TRUE(tiling->TileAt(0, 1));
1289 ASSERT_TRUE(tiling->TileAt(1, 0)); 1283 ASSERT_TRUE(tiling->TileAt(1, 0));
1290 ASSERT_TRUE(tiling->TileAt(1, 1)); 1284 ASSERT_TRUE(tiling->TileAt(1, 1));
1291 1285
1292 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1286 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1293 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1287 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1294 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1288 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1295 1289
1296 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1290 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1297 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1291 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1298 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1292 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1299 1293
1300 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1294 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1301 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1295 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1302 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1296 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1303 1297
1304 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1298 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1305 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1299 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1306 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1300 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1307 } 1301 }
1308 1302
1309 TEST(UpdateTilePrioritiesTest, OffscreenTiles) { 1303 TEST(UpdateTilePrioritiesTest, OffscreenTiles) {
1310 // The TilePriority of offscreen tiles (without movement) should have nonzero 1304 // The TilePriority of offscreen tiles (without movement) should have
1311 // distance_to_visible and infinite time_to_visible. 1305 // nonzero distance_to_visible and infinite time_to_visible.
1312
1313 FakePictureLayerTilingClient client; 1306 FakePictureLayerTilingClient client;
1314 scoped_ptr<TestablePictureLayerTiling> tiling; 1307 scoped_ptr<TestablePictureLayerTiling> tiling;
1315 1308
1316 gfx::Size device_viewport(800, 600); 1309 gfx::Size device_viewport(800, 600);
1317 gfx::Size last_layer_bounds(200, 200); 1310 gfx::Size last_layer_bounds(200, 200);
1318 gfx::Size current_layer_bounds(200, 200); 1311 gfx::Size current_layer_bounds(200, 200);
1319 float current_layer_contents_scale = 1.f; 1312 float current_layer_contents_scale = 1.f;
1320 gfx::Transform last_screen_transform; 1313 gfx::Transform last_screen_transform;
1321 gfx::Transform current_screen_transform; 1314 gfx::Transform current_screen_transform;
1322 double current_frame_time_in_seconds = 1.0; 1315 double current_frame_time_in_seconds = 1.0;
1323 1316
1324 current_screen_transform.Translate(850, 0); 1317 current_screen_transform.Translate(850, 0);
1325 last_screen_transform = current_screen_transform; 1318 last_screen_transform = current_screen_transform;
1326 1319
1327 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1320 gfx::Rect viewport_in_layer_space =
1328 current_screen_transform, device_viewport); 1321 ViewportInLayerSpace(current_screen_transform, device_viewport);
1329 1322
1330 client.SetTileSize(gfx::Size(100, 100)); 1323 client.SetTileSize(gfx::Size(100, 100));
1331 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1324 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1332 current_layer_bounds, 1325 current_layer_bounds,
1333 &client); 1326 &client);
1334 1327
1335 tiling->UpdateTilePriorities(ACTIVE_TREE, 1328 tiling->UpdateTilePriorities(ACTIVE_TREE,
1336 viewport_in_layer_space, 1329 viewport_in_layer_space,
1337 current_layer_contents_scale, 1330 current_layer_contents_scale,
1338 current_frame_time_in_seconds, 1331 current_frame_time_in_seconds,
1339 NULL, // occlusion tracker 1332 NULL, // occlusion tracker
1340 NULL, // render target 1333 NULL, // render target
1341 gfx::Transform()); // draw transform 1334 gfx::Transform()); // draw transform
1335 tiling->CreateInterestRectTilesForTesting();
1342 1336
1343 ASSERT_TRUE(tiling->TileAt(0, 0)); 1337 ASSERT_TRUE(tiling->TileAt(0, 0));
1344 ASSERT_TRUE(tiling->TileAt(0, 1)); 1338 ASSERT_TRUE(tiling->TileAt(0, 1));
1345 ASSERT_TRUE(tiling->TileAt(1, 0)); 1339 ASSERT_TRUE(tiling->TileAt(1, 0));
1346 ASSERT_TRUE(tiling->TileAt(1, 1)); 1340 ASSERT_TRUE(tiling->TileAt(1, 1));
1347 1341
1348 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1342 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1349 EXPECT_GT(priority.distance_to_visible, 0.f); 1343 EXPECT_GT(priority.distance_to_visible, 0.f);
1350 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1344 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1351 1345
(...skipping 16 matching lines...) Expand all
1368 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); 1362 EXPECT_GT(right.distance_to_visible, left.distance_to_visible);
1369 1363
1370 left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1364 left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1371 right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1365 right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1372 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); 1366 EXPECT_GT(right.distance_to_visible, left.distance_to_visible);
1373 } 1367 }
1374 1368
1375 TEST(UpdateTilePrioritiesTest, PartiallyOffscreenLayer) { 1369 TEST(UpdateTilePrioritiesTest, PartiallyOffscreenLayer) {
1376 // Sanity check that a layer with some tiles visible and others offscreen has 1370 // Sanity check that a layer with some tiles visible and others offscreen has
1377 // correct TilePriorities for each tile. 1371 // correct TilePriorities for each tile.
1378
1379 FakePictureLayerTilingClient client; 1372 FakePictureLayerTilingClient client;
1380 scoped_ptr<TestablePictureLayerTiling> tiling; 1373 scoped_ptr<TestablePictureLayerTiling> tiling;
1381 1374
1382 gfx::Size device_viewport(800, 600); 1375 gfx::Size device_viewport(800, 600);
1383 gfx::Size last_layer_bounds(200, 200); 1376 gfx::Size last_layer_bounds(200, 200);
1384 gfx::Size current_layer_bounds(200, 200); 1377 gfx::Size current_layer_bounds(200, 200);
1385 float current_layer_contents_scale = 1.f; 1378 float current_layer_contents_scale = 1.f;
1386 gfx::Transform last_screen_transform; 1379 gfx::Transform last_screen_transform;
1387 gfx::Transform current_screen_transform; 1380 gfx::Transform current_screen_transform;
1388 double current_frame_time_in_seconds = 1.0; 1381 double current_frame_time_in_seconds = 1.0;
1389 1382
1390 current_screen_transform.Translate(705, 505); 1383 current_screen_transform.Translate(705, 505);
1391 last_screen_transform = current_screen_transform; 1384 last_screen_transform = current_screen_transform;
1392 1385
1393 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1386 gfx::Rect viewport_in_layer_space =
1394 current_screen_transform, device_viewport); 1387 ViewportInLayerSpace(current_screen_transform, device_viewport);
1395 1388
1396 client.SetTileSize(gfx::Size(100, 100)); 1389 client.SetTileSize(gfx::Size(100, 100));
1397 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1390 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1398 current_layer_bounds, 1391 current_layer_bounds,
1399 &client); 1392 &client);
1400 1393
1401 tiling->UpdateTilePriorities(ACTIVE_TREE, 1394 tiling->UpdateTilePriorities(ACTIVE_TREE,
1402 viewport_in_layer_space, 1395 viewport_in_layer_space,
1403 current_layer_contents_scale, 1396 current_layer_contents_scale,
1404 current_frame_time_in_seconds, 1397 current_frame_time_in_seconds,
1405 NULL, // occlusion tracker 1398 NULL, // occlusion tracker
1406 NULL, // render target 1399 NULL, // render target
1407 gfx::Transform()); // draw transform 1400 gfx::Transform()); // draw transform
1401 tiling->CreateInterestRectTilesForTesting();
1408 1402
1409 ASSERT_TRUE(tiling->TileAt(0, 0)); 1403 ASSERT_TRUE(tiling->TileAt(0, 0));
1410 ASSERT_TRUE(tiling->TileAt(0, 1)); 1404 ASSERT_TRUE(tiling->TileAt(0, 1));
1411 ASSERT_TRUE(tiling->TileAt(1, 0)); 1405 ASSERT_TRUE(tiling->TileAt(1, 0));
1412 ASSERT_TRUE(tiling->TileAt(1, 1)); 1406 ASSERT_TRUE(tiling->TileAt(1, 1));
1413 1407
1414 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1408 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1415 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1409 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1416 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1410 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1417 1411
(...skipping 25 matching lines...) Expand all
1443 gfx::Transform last_screen_transform; 1437 gfx::Transform last_screen_transform;
1444 gfx::Transform current_screen_transform; 1438 gfx::Transform current_screen_transform;
1445 double current_frame_time_in_seconds = 1.0; 1439 double current_frame_time_in_seconds = 1.0;
1446 1440
1447 // A diagonally rotated layer that is partially off the bottom of the screen. 1441 // A diagonally rotated layer that is partially off the bottom of the screen.
1448 // In this configuration, only the top-left tile would be visible. 1442 // In this configuration, only the top-left tile would be visible.
1449 current_screen_transform.Translate(600, 750); 1443 current_screen_transform.Translate(600, 750);
1450 current_screen_transform.RotateAboutZAxis(45); 1444 current_screen_transform.RotateAboutZAxis(45);
1451 last_screen_transform = current_screen_transform; 1445 last_screen_transform = current_screen_transform;
1452 1446
1453 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1447 gfx::Rect viewport_in_layer_space =
1454 current_screen_transform, device_viewport); 1448 ViewportInLayerSpace(current_screen_transform, device_viewport);
1455 1449
1456 client.SetTileSize(gfx::Size(100, 100)); 1450 client.SetTileSize(gfx::Size(100, 100));
1457 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1451 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1458 current_layer_bounds, 1452 current_layer_bounds,
1459 &client); 1453 &client);
1460 1454
1461 tiling->UpdateTilePriorities(ACTIVE_TREE, 1455 tiling->UpdateTilePriorities(ACTIVE_TREE,
1462 viewport_in_layer_space, 1456 viewport_in_layer_space,
1463 current_layer_contents_scale, 1457 current_layer_contents_scale,
1464 current_frame_time_in_seconds, 1458 current_frame_time_in_seconds,
1465 NULL, // occlusion tracker 1459 NULL, // occlusion tracker
1466 NULL, // render target 1460 NULL, // render target
1467 gfx::Transform()); // draw transform 1461 gfx::Transform()); // draw transform
1462 tiling->CreateInterestRectTilesForTesting();
1468 1463
1469 ASSERT_TRUE(tiling->TileAt(0, 0)); 1464 ASSERT_TRUE(tiling->TileAt(0, 0));
1470 ASSERT_TRUE(tiling->TileAt(0, 1)); 1465 ASSERT_TRUE(tiling->TileAt(0, 1));
1471 ASSERT_TRUE(tiling->TileAt(1, 0)); 1466 ASSERT_TRUE(tiling->TileAt(1, 0));
1472 ASSERT_TRUE(tiling->TileAt(1, 1)); 1467 ASSERT_TRUE(tiling->TileAt(1, 1));
1473 1468
1474 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1469 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1475 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1470 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1476 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 1471 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
1477 1472
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 current_screen_transform.Translate(-100.0, -100.0); 1522 current_screen_transform.Translate(-100.0, -100.0);
1528 last_screen_transform = current_screen_transform; 1523 last_screen_transform = current_screen_transform;
1529 1524
1530 // Sanity check that this transform wouldn't cause w<0 clipping. 1525 // Sanity check that this transform wouldn't cause w<0 clipping.
1531 bool clipped; 1526 bool clipped;
1532 MathUtil::MapQuad(current_screen_transform, 1527 MathUtil::MapQuad(current_screen_transform,
1533 gfx::QuadF(gfx::RectF(0, 0, 200, 200)), 1528 gfx::QuadF(gfx::RectF(0, 0, 200, 200)),
1534 &clipped); 1529 &clipped);
1535 ASSERT_FALSE(clipped); 1530 ASSERT_FALSE(clipped);
1536 1531
1537 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1532 gfx::Rect viewport_in_layer_space =
1538 current_screen_transform, device_viewport); 1533 ViewportInLayerSpace(current_screen_transform, device_viewport);
1539 1534
1540 client.SetTileSize(gfx::Size(100, 100)); 1535 client.SetTileSize(gfx::Size(100, 100));
1541 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1536 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1542 current_layer_bounds, 1537 current_layer_bounds,
1543 &client); 1538 &client);
1544 1539
1545 tiling->UpdateTilePriorities(ACTIVE_TREE, 1540 tiling->UpdateTilePriorities(ACTIVE_TREE,
1546 viewport_in_layer_space, 1541 viewport_in_layer_space,
1547 current_layer_contents_scale, 1542 current_layer_contents_scale,
1548 current_frame_time_in_seconds, 1543 current_frame_time_in_seconds,
1549 NULL, // occlusion tracker 1544 NULL, // occlusion tracker
1550 NULL, // render target 1545 NULL, // render target
1551 gfx::Transform()); // draw transform 1546 gfx::Transform()); // draw transform
1547 tiling->CreateInterestRectTilesForTesting();
1552 1548
1553 ASSERT_TRUE(tiling->TileAt(0, 0)); 1549 ASSERT_TRUE(tiling->TileAt(0, 0));
1554 ASSERT_TRUE(tiling->TileAt(0, 1)); 1550 ASSERT_TRUE(tiling->TileAt(0, 1));
1555 ASSERT_TRUE(tiling->TileAt(1, 0)); 1551 ASSERT_TRUE(tiling->TileAt(1, 0));
1556 ASSERT_TRUE(tiling->TileAt(1, 1)); 1552 ASSERT_TRUE(tiling->TileAt(1, 1));
1557 1553
1558 // All tiles will have a positive distance_to_visible 1554 // All tiles will have a positive distance_to_visible
1559 // and an infinite time_to_visible. 1555 // and an infinite time_to_visible.
1560 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1556 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1561 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); 1557 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 MathUtil::MapQuad(current_screen_transform, 1617 MathUtil::MapQuad(current_screen_transform,
1622 gfx::QuadF(gfx::RectF(0, 0, 100, 200)), 1618 gfx::QuadF(gfx::RectF(0, 0, 100, 200)),
1623 &clipped); 1619 &clipped);
1624 ASSERT_TRUE(clipped); 1620 ASSERT_TRUE(clipped);
1625 1621
1626 MathUtil::MapQuad(current_screen_transform, 1622 MathUtil::MapQuad(current_screen_transform,
1627 gfx::QuadF(gfx::RectF(100, 0, 100, 200)), 1623 gfx::QuadF(gfx::RectF(100, 0, 100, 200)),
1628 &clipped); 1624 &clipped);
1629 ASSERT_FALSE(clipped); 1625 ASSERT_FALSE(clipped);
1630 1626
1631 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1627 gfx::Rect viewport_in_layer_space =
1632 current_screen_transform, device_viewport); 1628 ViewportInLayerSpace(current_screen_transform, device_viewport);
1633 1629
1634 client.SetTileSize(gfx::Size(100, 100)); 1630 client.SetTileSize(gfx::Size(100, 100));
1635 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1631 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1636 current_layer_bounds, 1632 current_layer_bounds,
1637 &client); 1633 &client);
1638 1634
1639 tiling->UpdateTilePriorities(ACTIVE_TREE, 1635 tiling->UpdateTilePriorities(ACTIVE_TREE,
1640 viewport_in_layer_space, 1636 viewport_in_layer_space,
1641 current_layer_contents_scale, 1637 current_layer_contents_scale,
1642 current_frame_time_in_seconds, 1638 current_frame_time_in_seconds,
1643 NULL, // occlusion tracker 1639 NULL, // occlusion tracker
1644 NULL, // render target 1640 NULL, // render target
1645 gfx::Transform()); // draw transform 1641 gfx::Transform()); // draw transform
1642 tiling->CreateInterestRectTilesForTesting();
1646 1643
1647 ASSERT_TRUE(tiling->TileAt(0, 0)); 1644 ASSERT_TRUE(tiling->TileAt(0, 0));
1648 ASSERT_TRUE(tiling->TileAt(0, 1)); 1645 ASSERT_TRUE(tiling->TileAt(0, 1));
1649 ASSERT_TRUE(tiling->TileAt(1, 0)); 1646 ASSERT_TRUE(tiling->TileAt(1, 0));
1650 ASSERT_TRUE(tiling->TileAt(1, 1)); 1647 ASSERT_TRUE(tiling->TileAt(1, 1));
1651 1648
1652 // Left-side tiles will be clipped by the transform, so we have to assume 1649 // Left-side tiles will be clipped by the transform, so we have to assume
1653 // they are visible just in case. 1650 // they are visible just in case.
1654 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1651 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1655 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1652 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
(...skipping 29 matching lines...) Expand all
1685 float current_layer_contents_scale = 1.f; 1682 float current_layer_contents_scale = 1.f;
1686 gfx::Transform last_screen_transform; 1683 gfx::Transform last_screen_transform;
1687 gfx::Transform current_screen_transform; 1684 gfx::Transform current_screen_transform;
1688 double last_frame_time_in_seconds = 1.0; 1685 double last_frame_time_in_seconds = 1.0;
1689 double current_frame_time_in_seconds = 2.0; 1686 double current_frame_time_in_seconds = 2.0;
1690 1687
1691 // Offscreen layer is coming closer to viewport at 1000 pixels per second. 1688 // Offscreen layer is coming closer to viewport at 1000 pixels per second.
1692 current_screen_transform.Translate(1800, 0); 1689 current_screen_transform.Translate(1800, 0);
1693 last_screen_transform.Translate(2800, 0); 1690 last_screen_transform.Translate(2800, 0);
1694 1691
1695 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1692 gfx::Rect viewport_in_layer_space =
1696 current_screen_transform, device_viewport); 1693 ViewportInLayerSpace(current_screen_transform, device_viewport);
1697 1694
1698 client.SetTileSize(gfx::Size(100, 100)); 1695 client.SetTileSize(gfx::Size(100, 100));
1699 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1696 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1700 current_layer_bounds, 1697 current_layer_bounds,
1701 &client); 1698 &client);
1702 1699
1703 // previous ("last") frame 1700 // previous ("last") frame
1704 tiling->UpdateTilePriorities(ACTIVE_TREE, 1701 tiling->UpdateTilePriorities(ACTIVE_TREE,
1705 viewport_in_layer_space, 1702 viewport_in_layer_space,
1706 last_layer_contents_scale, 1703 last_layer_contents_scale,
1707 last_frame_time_in_seconds, 1704 last_frame_time_in_seconds,
1708 NULL, // occlusion tracker 1705 NULL, // occlusion tracker
1709 NULL, // render target 1706 NULL, // render target
1710 gfx::Transform()); // draw transform 1707 gfx::Transform()); // draw transform
1711 1708
1712 // current frame 1709 // current frame
1713 tiling->UpdateTilePriorities(ACTIVE_TREE, 1710 tiling->UpdateTilePriorities(ACTIVE_TREE,
1714 viewport_in_layer_space, 1711 viewport_in_layer_space,
1715 current_layer_contents_scale, 1712 current_layer_contents_scale,
1716 current_frame_time_in_seconds, 1713 current_frame_time_in_seconds,
1717 NULL, // occlusion tracker 1714 NULL, // occlusion tracker
1718 NULL, // render target 1715 NULL, // render target
1719 gfx::Transform()); // draw transform 1716 gfx::Transform()); // draw transform
1717 tiling->CreateInterestRectTilesForTesting();
1720 1718
1721 ASSERT_TRUE(tiling->TileAt(0, 0)); 1719 ASSERT_TRUE(tiling->TileAt(0, 0));
1722 ASSERT_TRUE(tiling->TileAt(0, 1)); 1720 ASSERT_TRUE(tiling->TileAt(0, 1));
1723 ASSERT_TRUE(tiling->TileAt(1, 0)); 1721 ASSERT_TRUE(tiling->TileAt(1, 0));
1724 ASSERT_TRUE(tiling->TileAt(1, 1)); 1722 ASSERT_TRUE(tiling->TileAt(1, 1));
1725 1723
1726 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1724 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1727 EXPECT_GT(priority.distance_to_visible, 0.f); 1725 EXPECT_GT(priority.distance_to_visible, 0.f);
1728 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1726 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1729 1727
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1766 // - the top-left tile becomes visible on rotation 1764 // - the top-left tile becomes visible on rotation
1767 // - the top-right tile will have an infinite time_to_visible 1765 // - the top-right tile will have an infinite time_to_visible
1768 // because it is rotating away from viewport. 1766 // because it is rotating away from viewport.
1769 // - bottom-left layer will have a positive non-zero time_to_visible 1767 // - bottom-left layer will have a positive non-zero time_to_visible
1770 // because it is rotating toward the viewport. 1768 // because it is rotating toward the viewport.
1771 current_screen_transform.Translate(400, 550); 1769 current_screen_transform.Translate(400, 550);
1772 current_screen_transform.RotateAboutZAxis(45); 1770 current_screen_transform.RotateAboutZAxis(45);
1773 1771
1774 last_screen_transform.Translate(400, 550); 1772 last_screen_transform.Translate(400, 550);
1775 1773
1776 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1774 gfx::Rect viewport_in_layer_space =
1777 current_screen_transform, device_viewport); 1775 ViewportInLayerSpace(current_screen_transform, device_viewport);
1778 1776
1779 client.SetTileSize(gfx::Size(100, 100)); 1777 client.SetTileSize(gfx::Size(100, 100));
1780 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1778 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1781 current_layer_bounds, 1779 current_layer_bounds,
1782 &client); 1780 &client);
1783 1781
1784 // previous ("last") frame 1782 // previous ("last") frame
1785 tiling->UpdateTilePriorities(ACTIVE_TREE, 1783 tiling->UpdateTilePriorities(ACTIVE_TREE,
1786 viewport_in_layer_space, 1784 viewport_in_layer_space,
1787 last_layer_contents_scale, 1785 last_layer_contents_scale,
1788 last_frame_time_in_seconds, 1786 last_frame_time_in_seconds,
1789 NULL, // occlusion tracker 1787 NULL, // occlusion tracker
1790 NULL, // render target 1788 NULL, // render target
1791 gfx::Transform()); // draw transform 1789 gfx::Transform()); // draw transform
1792 1790
1793 // current frame 1791 // current frame
1794 tiling->UpdateTilePriorities(ACTIVE_TREE, 1792 tiling->UpdateTilePriorities(ACTIVE_TREE,
1795 viewport_in_layer_space, 1793 viewport_in_layer_space,
1796 current_layer_contents_scale, 1794 current_layer_contents_scale,
1797 current_frame_time_in_seconds, 1795 current_frame_time_in_seconds,
1798 NULL, // occlusion tracker 1796 NULL, // occlusion tracker
1799 NULL, // render target 1797 NULL, // render target
1800 gfx::Transform()); // draw transform 1798 gfx::Transform()); // draw transform
1799 tiling->CreateInterestRectTilesForTesting();
1801 1800
1802 ASSERT_TRUE(tiling->TileAt(0, 0)); 1801 ASSERT_TRUE(tiling->TileAt(0, 0));
1803 ASSERT_TRUE(tiling->TileAt(0, 1)); 1802 ASSERT_TRUE(tiling->TileAt(0, 1));
1804 ASSERT_TRUE(tiling->TileAt(1, 0)); 1803 ASSERT_TRUE(tiling->TileAt(1, 0));
1805 ASSERT_TRUE(tiling->TileAt(1, 1)); 1804 ASSERT_TRUE(tiling->TileAt(1, 1));
1806 1805
1807 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1806 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1808 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1807 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1809 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 1808 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
1810 1809
1811 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1810 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1812 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1811 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1813 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 1812 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
1814 1813
1815 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1814 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1816 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1815 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1817 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 1816 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
1818 } 1817 }
1819 1818
1820 } // namespace 1819 } // namespace
1821 } // namespace cc 1820 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698