Chromium Code Reviews| Index: cc/resources/picture_layer_tiling_unittest.cc |
| diff --git a/cc/resources/picture_layer_tiling_unittest.cc b/cc/resources/picture_layer_tiling_unittest.cc |
| index 6adc61164548d426416a27156d9c5e4048207160..dcc5deeab6ceeeec2c7abd8ef1e0ae73b22577a6 100644 |
| --- a/cc/resources/picture_layer_tiling_unittest.cc |
| +++ b/cc/resources/picture_layer_tiling_unittest.cc |
| @@ -5,10 +5,13 @@ |
| #include "cc/resources/picture_layer_tiling.h" |
| #include <limits> |
| +#include <set> |
| #include "cc/base/math_util.h" |
| #include "cc/resources/picture_layer_tiling_set.h" |
| #include "cc/test/fake_picture_layer_tiling_client.h" |
| +#include "cc/test/fake_tile_manager.h" |
| +#include "cc/test/fake_tile_manager_client.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/gfx/rect_conversions.h" |
| #include "ui/gfx/size_conversions.h" |
| @@ -16,6 +19,12 @@ |
| namespace cc { |
| namespace { |
| +const int kTileBundleWidth = 2; |
| +const int kTileBundleHeight = 2; |
| +std::pair<int, int> ComputeTileBundleIndex(int i, int j) { |
| + return std::make_pair(i / kTileBundleWidth, j / kTileBundleHeight); |
| +} |
| + |
| static gfx::Rect ViewportInLayerSpace( |
| const gfx::Transform& transform, |
| gfx::Size device_viewport) { |
| @@ -34,6 +43,7 @@ class TestablePictureLayerTiling : public PictureLayerTiling { |
| public: |
| using PictureLayerTiling::SetLiveTilesRect; |
| using PictureLayerTiling::TileAt; |
| + using PictureLayerTiling::TileBundleAt; |
| static scoped_ptr<TestablePictureLayerTiling> Create( |
| float contents_scale, |
| @@ -45,6 +55,9 @@ class TestablePictureLayerTiling : public PictureLayerTiling { |
| client)); |
| } |
| + TilingData tiling_data() const { return tiling_data_; } |
| + TilingData bundle_tiling_data() const { return bundle_tiling_data_; } |
| + |
| protected: |
| TestablePictureLayerTiling(float contents_scale, |
| gfx::Size layer_bounds, |
| @@ -54,7 +67,9 @@ class TestablePictureLayerTiling : public PictureLayerTiling { |
| class PictureLayerTilingIteratorTest : public testing::Test { |
| public: |
| - PictureLayerTilingIteratorTest() {} |
| + PictureLayerTilingIteratorTest() |
| + : tile_manager_(&tile_manager_client_), client_(&tile_manager_) {} |
| + |
| virtual ~PictureLayerTilingIteratorTest() {} |
| void Initialize(gfx::Size tile_size, |
| @@ -67,6 +82,7 @@ class PictureLayerTilingIteratorTest : public testing::Test { |
| } |
| void SetLiveRectAndVerifyTiles(gfx::Rect live_tiles_rect) { |
| + tiling_->SetTreeForTesting(ACTIVE_TREE); |
| tiling_->SetLiveTilesRect(live_tiles_rect); |
| std::vector<Tile*> tiles = tiling_->AllTilesForTesting(); |
| @@ -153,6 +169,8 @@ class PictureLayerTilingIteratorTest : public testing::Test { |
| } |
| protected: |
| + FakeTileManagerClient tile_manager_client_; |
| + FakeTileManager tile_manager_; |
| FakePictureLayerTilingClient client_; |
| scoped_ptr<TestablePictureLayerTiling> tiling_; |
| @@ -261,6 +279,63 @@ TEST_F(PictureLayerTilingIteratorTest, NonContainedDestRect) { |
| VerifyTilesCoverNonContainedRect(0.5f, gfx::Rect(-1000, 100, 2000, 100)); |
| } |
| +TEST(PictureLayerTilingTest, BundleAtContainsTileAt) { |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| + |
| + gfx::Size current_layer_bounds(400, 400); |
| + client.SetTileSize(gfx::Size(100, 100)); |
| + scoped_ptr<TestablePictureLayerTiling> tiling = |
| + TestablePictureLayerTiling::Create(1.0f, current_layer_bounds, &client); |
| + |
| + tiling->CreateTilesForTesting(ACTIVE_TREE); |
| + for (int bundle_y = 0; bundle_y < 2; ++bundle_y) { |
| + for (int bundle_x = 0; bundle_x < 2; ++bundle_x) { |
| + EXPECT_TRUE(tiling->TileBundleAt(bundle_x, bundle_y)) |
| + << "bundle_x " << bundle_x << " bundle_y " << bundle_y; |
| + |
| + TileBundle* bundle = tiling->TileBundleAt(bundle_x, bundle_y); |
| + for (int tile_y = 0; tile_y < 2; ++tile_y) { |
|
enne (OOO)
2013/12/03 02:28:37
Is it possible to not make this depend on the magi
vmpstr
2013/12/03 18:44:43
I changed this to be kTileBundle{Width,Height} whi
|
| + for (int tile_x = 0; tile_x < 2; ++tile_x) { |
| + int global_tile_x = bundle_x * 2 + tile_x; |
| + int global_tile_y = bundle_y * 2 + tile_y; |
| + |
| + EXPECT_TRUE(tiling->TileAt(ACTIVE_TREE, global_tile_x, global_tile_y)) |
| + << "x " << global_tile_x << " y " << global_tile_y; |
| + EXPECT_EQ(tiling->TileAt(ACTIVE_TREE, global_tile_x, global_tile_y), |
| + bundle->TileAt(ACTIVE_TREE, global_tile_x, global_tile_y)) |
| + << "x " << global_tile_x << " y " << global_tile_y; |
| + } |
| + } |
| + } |
| + } |
| +} |
| + |
| +TEST(PictureLayerTilingTest, DidBecomeActiveSwapsTiles) { |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| + |
| + gfx::Size current_layer_bounds(400, 400); |
| + client.SetTileSize(gfx::Size(100, 100)); |
| + scoped_ptr<TestablePictureLayerTiling> tiling = |
| + TestablePictureLayerTiling::Create(1.0f, current_layer_bounds, &client); |
| + |
| + tiling->CreateTilesForTesting(ACTIVE_TREE); |
| + std::vector<Tile*> old_active_tiles = tiling->TilesForTesting(ACTIVE_TREE); |
| + tiling->DidBecomeActive(); |
| + std::vector<Tile*> pending_tiles = tiling->TilesForTesting(PENDING_TREE); |
| + EXPECT_EQ(old_active_tiles.size(), pending_tiles.size()); |
| + std::vector<Tile*>::const_iterator old_it = old_active_tiles.begin(); |
| + for (std::vector<Tile*>::const_iterator it = pending_tiles.begin(); |
| + it != pending_tiles.end(); |
| + ++it) { |
| + EXPECT_EQ(*it, *old_it); |
| + ++old_it; |
| + } |
| +} |
| + |
| TEST(PictureLayerTilingTest, ExpandRectEqual) { |
| gfx::Rect in(40, 50, 100, 200); |
| gfx::Rect bounds(-1000, -1000, 10000, 10000); |
| @@ -732,11 +807,74 @@ TEST_F(PictureLayerTilingIteratorTest, AddTilingsToMatchScale) { |
| base::Bind(&TileExists, true)); |
| } |
| +TEST_F(PictureLayerTilingIteratorTest, BundlesAndTilesAlign) { |
| + Initialize(gfx::Size(100, 100), 1, gfx::Size(850, 850)); |
| + bool success = true; |
| + for (int y = -20; (y <= 102) && success; ++y) { |
| + for (int x = 0; (x <= 103) && success; ++x) { |
| + for (int size = 1; (size <= 201) && success; size += 50) { |
| + gfx::Rect rect(x, y, size, size); |
| + |
| + TilingData tiling_data = tiling_->tiling_data(); |
| + |
| + std::set<std::pair<int, int> > tile_positions; |
| + std::set<std::pair<int, int> > predicted_bundle_positions; |
| + size_t iteration_count = 0; |
| + for (TilingData::Iterator iter(&tiling_data, rect); iter; ++iter) { |
| + ++iteration_count; |
| + tile_positions.insert(std::make_pair(iter.index_x(), iter.index_y())); |
| + predicted_bundle_positions.insert( |
| + ComputeTileBundleIndex(iter.index_x(), iter.index_y())); |
| + } |
| + |
| + EXPECT_EQ(tile_positions.size(), iteration_count) << rect.ToString(); |
| + if (tile_positions.size() != iteration_count) |
| + success = false; |
|
enne (OOO)
2013/12/03 02:28:37
Why do you need this success variable with EXPECT_
vmpstr
2013/12/03 18:44:43
Oh this is just so it doesn't spam a lot of lines
enne (OOO)
2013/12/03 20:49:01
You could make them ASSERT instead of EXPECT and i
vmpstr
2013/12/03 22:01:36
Done.
|
| + |
| + TilingData bundle_tiling_data = tiling_->bundle_tiling_data(); |
| + std::set<std::pair<int, int> > bundle_positions; |
| + iteration_count = 0; |
| + for (TilingData::Iterator iter(&bundle_tiling_data, rect); |
| + iter; |
| + ++iter) { |
| + ++iteration_count; |
| + bundle_positions.insert( |
| + std::make_pair(iter.index_x(), iter.index_y())); |
| + } |
| + |
| + EXPECT_EQ(bundle_positions.size(), iteration_count) << rect.ToString(); |
| + EXPECT_EQ(predicted_bundle_positions.size(), iteration_count) |
| + << rect.ToString(); |
| + if ((bundle_positions.size() != iteration_count) || |
| + (predicted_bundle_positions.size() != iteration_count)) |
| + success = false; |
| + |
| + std::set<std::pair<int, int> >::const_iterator predicted_iterator = |
| + predicted_bundle_positions.begin(); |
| + for (std::set<std::pair<int, int> >::const_iterator actual_iterator = |
| + bundle_positions.begin(); |
| + actual_iterator != bundle_positions.end(); |
| + ++actual_iterator) { |
| + EXPECT_EQ(*actual_iterator, *predicted_iterator) << rect.ToString(); |
| + if (*actual_iterator != *predicted_iterator) |
| + success = false; |
| + |
| + ++predicted_iterator; |
| + } |
| + } |
| + } |
| + } |
| + EXPECT_TRUE(success); |
| +} |
| + |
| + |
| TEST(UpdateTilePrioritiesTest, VisibleTiles) { |
| // The TilePriority of visible tiles should have zero distance_to_visible |
| // and time_to_visible. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| @@ -772,24 +910,13 @@ TEST(UpdateTilePrioritiesTest, VisibleTiles) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| - |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| - EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| - EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| - |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| - EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| - EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| - |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| - EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| - EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 0, 0)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 0, 1)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 1, 0)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| } |
| @@ -798,13 +925,15 @@ TEST(UpdateTilePrioritiesTest, OffscreenTiles) { |
| // The TilePriority of offscreen tiles (without movement) should have nonzero |
| // distance_to_visible and infinite time_to_visible. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscreen; nothing is visible. |
| - gfx::Size last_layer_bounds(200, 200); |
| - gfx::Size current_layer_bounds(200, 200); |
| + gfx::Size last_layer_bounds(400, 400); |
| + gfx::Size current_layer_bounds(400, 400); |
| float last_layer_contents_scale = 1.f; |
| float current_layer_contents_scale = 1.f; |
| gfx::Transform last_screen_transform; |
| @@ -837,40 +966,34 @@ TEST(UpdateTilePrioritiesTest, OffscreenTiles) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| - |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| - EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| - EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| - priority.time_to_visible_in_seconds); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 0, 0)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 0, 1)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 1, 0)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| - EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| - EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| - priority.time_to_visible_in_seconds); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 2, 2)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 2, 3)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 3, 2)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 3, 3)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| - EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| - EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| - priority.time_to_visible_in_seconds); |
| - |
| - // Furthermore, in this scenario tiles on the right hand side should have a |
| + // Furthermore, in this scenario bundles on the right hand side should have a |
| // larger distance to visible. |
| - TilePriority left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| - TilePriority right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + TilePriority left = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| + TilePriority right = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(right.distance_to_visible_in_pixels, |
| left.distance_to_visible_in_pixels); |
| - left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| - right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + left = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| + right = tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(right.distance_to_visible_in_pixels, |
| left.distance_to_visible_in_pixels); |
| } |
| @@ -879,13 +1002,15 @@ TEST(UpdateTilePrioritiesTest, PartiallyOffscreenLayer) { |
| // Sanity check that a layer with some tiles visible and others offscreen has |
| // correct TilePriorities for each tile. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| gfx::Rect visible_layer_rect(0, 0, 100, 100); // only top quarter. |
| - gfx::Size last_layer_bounds(200, 200); |
| - gfx::Size current_layer_bounds(200, 200); |
| + gfx::Size last_layer_bounds(400, 400); |
| + gfx::Size current_layer_bounds(400, 400); |
| float last_layer_contents_scale = 1.f; |
| float current_layer_contents_scale = 1.f; |
| gfx::Transform last_screen_transform; |
| @@ -918,26 +1043,30 @@ TEST(UpdateTilePrioritiesTest, PartiallyOffscreenLayer) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 0, 0)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 0, 1)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 1, 0)); |
| + ASSERT_TRUE(tiling->TileAt(ACTIVE_TREE, 1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| @@ -948,13 +1077,15 @@ TEST(UpdateTilePrioritiesTest, PartiallyOffscreenRotatedLayer) { |
| // that UpdateTilePriorities correctly accounts for the transform between |
| // layer space and screen space. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| gfx::Rect visible_layer_rect(0, 0, 100, 100); // only top-left quarter. |
| - gfx::Size last_layer_bounds(200, 200); |
| - gfx::Size current_layer_bounds(200, 200); |
| + gfx::Size last_layer_bounds(400, 400); |
| + gfx::Size current_layer_bounds(400, 400); |
| float last_layer_contents_scale = 1.f; |
| float current_layer_contents_scale = 1.f; |
| gfx::Transform last_screen_transform; |
| @@ -990,36 +1121,38 @@ TEST(UpdateTilePrioritiesTest, PartiallyOffscreenRotatedLayer) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| // Furthermore, in this scenario the bottom-right tile should have the larger |
| // distance to visible. |
| - TilePriority top_left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| - TilePriority top_right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| - TilePriority bottom_left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| - TilePriority bottom_right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + TilePriority top_left = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| + TilePriority top_right = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| + TilePriority bottom_left = |
| + tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| + TilePriority bottom_right = |
| + tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(top_right.distance_to_visible_in_pixels, |
| top_left.distance_to_visible_in_pixels); |
| EXPECT_GT(bottom_left.distance_to_visible_in_pixels, |
| @@ -1035,13 +1168,15 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayer) { |
| // Perspective transforms need to take a different code path. |
| // This test checks tile priorities of a perspective layer. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscreen. |
| - gfx::Size last_layer_bounds(200, 200); |
| - gfx::Size current_layer_bounds(200, 200); |
| + gfx::Size last_layer_bounds(400, 400); |
| + gfx::Size current_layer_bounds(400, 400); |
| float last_layer_contents_scale = 1.f; |
| float current_layer_contents_scale = 1.f; |
| gfx::Transform last_screen_transform; |
| @@ -1092,29 +1227,29 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayer) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| // All tiles will have a positive distance_to_visible |
| // and an infinite time_to_visible. |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| @@ -1122,10 +1257,12 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayer) { |
| // Furthermore, in this scenario the top-left distance_to_visible |
| // will be smallest, followed by top-right. The bottom layers |
| // will of course be further than the top layers. |
| - TilePriority top_left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| - TilePriority top_right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| - TilePriority bottom_left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| - TilePriority bottom_right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + TilePriority top_left = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| + TilePriority top_right = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| + TilePriority bottom_left = |
| + tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| + TilePriority bottom_right = |
| + tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(top_right.distance_to_visible_in_pixels, |
| top_left.distance_to_visible_in_pixels); |
| @@ -1140,13 +1277,15 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayerClippedByW) { |
| // Perspective transforms need to take a different code path. |
| // This test checks tile priorities of a perspective layer. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscreen. |
| - gfx::Size last_layer_bounds(200, 200); |
| - gfx::Size current_layer_bounds(200, 200); |
| + gfx::Size last_layer_bounds(400, 400); |
| + gfx::Size current_layer_bounds(400, 400); |
| float last_layer_contents_scale = 1.f; |
| float current_layer_contents_scale = 1.f; |
| gfx::Transform last_screen_transform; |
| @@ -1162,22 +1301,22 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayerClippedByW) { |
| // Translate layer to offscreen |
| current_screen_transform.Translate(400.0, 970.0); |
| // Apply perspective and rotation about the center of the layer |
| - current_screen_transform.Translate(100.0, 100.0); |
| + current_screen_transform.Translate(200.0, 200.0); |
| current_screen_transform.ApplyPerspectiveDepth(10.0); |
| current_screen_transform.RotateAboutYAxis(10.0); |
| - current_screen_transform.Translate(-100.0, -100.0); |
| + current_screen_transform.Translate(-200.0, -200.0); |
| last_screen_transform = current_screen_transform; |
| // Sanity check that this transform does cause w<0 clipping for the left side |
| // of the layer, but not the right side. |
| bool clipped; |
| MathUtil::MapQuad(current_screen_transform, |
| - gfx::QuadF(gfx::RectF(0, 0, 100, 200)), |
| + gfx::QuadF(gfx::RectF(0, 0, 200, 400)), |
| &clipped); |
| ASSERT_TRUE(clipped); |
| MathUtil::MapQuad(current_screen_transform, |
| - gfx::QuadF(gfx::RectF(100, 0, 100, 200)), |
| + gfx::QuadF(gfx::RectF(200, 0, 200, 400)), |
| &clipped); |
| ASSERT_FALSE(clipped); |
| @@ -1203,29 +1342,29 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayerClippedByW) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| // Left-side tiles will be clipped by the transform, so we have to assume |
| // they are visible just in case. |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| // Right-side tiles will have a positive distance_to_visible |
| // and an infinite time_to_visible. |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |
| @@ -1235,7 +1374,9 @@ TEST(UpdateTilePrioritiesTest, BasicMotion) { |
| // Test that time_to_visible is computed correctly when |
| // there is some motion. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| @@ -1257,7 +1398,7 @@ TEST(UpdateTilePrioritiesTest, BasicMotion) { |
| gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( |
| current_screen_transform, device_viewport); |
| - client.SetTileSize(gfx::Size(100, 100)); |
| + client.SetTileSize(gfx::Size(50, 50)); |
| tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale |
| current_layer_bounds, |
| &client); |
| @@ -1292,31 +1433,32 @@ TEST(UpdateTilePrioritiesTest, BasicMotion) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(1.f, |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(1.f, |
| priority.time_to_visible_in_seconds); |
| - // time_to_visible for the right hand side layers needs an extra 0.099 |
| - // seconds because this tile is 99 pixels further away. |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + // time_to_visible for the right hand side layers needs an extra 0.097 |
| + // seconds because this bundle is |
| + // |(50 - 2 * border_texels) * 2 + border_texels| = 97 pixels further away. |
| + priority = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| - EXPECT_FLOAT_EQ(1.099f, |
| + EXPECT_FLOAT_EQ(1.097f, |
| priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| - EXPECT_FLOAT_EQ(1.099f, |
| + EXPECT_FLOAT_EQ(1.097f, |
| priority.time_to_visible_in_seconds); |
| } |
| @@ -1325,7 +1467,9 @@ TEST(UpdateTilePrioritiesTest, RotationMotion) { |
| // that UpdateTilePriorities correctly accounts for the transform between |
| // layer space and screen space. |
| - FakePictureLayerTilingClient client; |
| + FakeTileManagerClient tile_manager_client; |
| + FakeTileManager tile_manager(&tile_manager_client); |
| + FakePictureLayerTilingClient client(&tile_manager); |
| scoped_ptr<TestablePictureLayerTiling> tiling; |
| gfx::Size device_viewport(800, 600); |
| @@ -1355,7 +1499,7 @@ TEST(UpdateTilePrioritiesTest, RotationMotion) { |
| gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( |
| current_screen_transform, device_viewport); |
| - client.SetTileSize(gfx::Size(100, 100)); |
| + client.SetTileSize(gfx::Size(50, 50)); |
| tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale |
| current_layer_bounds, |
| &client); |
| @@ -1390,20 +1534,20 @@ TEST(UpdateTilePrioritiesTest, RotationMotion) { |
| current_frame_time_in_seconds, |
| max_tiles_for_interest_area); |
| - ASSERT_TRUE(tiling->TileAt(0, 0)); |
| - ASSERT_TRUE(tiling->TileAt(0, 1)); |
| - ASSERT_TRUE(tiling->TileAt(1, 0)); |
| - ASSERT_TRUE(tiling->TileAt(1, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(0, 1)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 0)); |
| + ASSERT_TRUE(tiling->TileBundleAt(1, 1)); |
| - TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); |
| + TilePriority priority = tiling->TileBundleAt(0, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible_in_pixels); |
| EXPECT_FLOAT_EQ(0.f, priority.time_to_visible_in_seconds); |
| - priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(0, 1)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_GT(priority.time_to_visible_in_seconds, 0.f); |
| - priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); |
| + priority = tiling->TileBundleAt(1, 0)->GetPriority(ACTIVE_TREE); |
| EXPECT_GT(priority.distance_to_visible_in_pixels, 0.f); |
| EXPECT_FLOAT_EQ(std::numeric_limits<float>::infinity(), |
| priority.time_to_visible_in_seconds); |