| OLD | NEW |
| 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_set.h" | 5 #include "cc/resources/picture_layer_tiling_set.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "cc/resources/resource_provider.h" | 10 #include "cc/resources/resource_provider.h" |
| 11 #include "cc/test/fake_output_surface.h" | 11 #include "cc/test/fake_output_surface.h" |
| 12 #include "cc/test/fake_output_surface_client.h" | 12 #include "cc/test/fake_output_surface_client.h" |
| 13 #include "cc/test/fake_picture_layer_tiling_client.h" | 13 #include "cc/test/fake_picture_layer_tiling_client.h" |
| 14 #include "cc/test/test_shared_bitmap_manager.h" | 14 #include "cc/test/test_shared_bitmap_manager.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "ui/gfx/geometry/size_conversions.h" | 16 #include "ui/gfx/geometry/size_conversions.h" |
| 17 | 17 |
| 18 namespace cc { | 18 namespace cc { |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 scoped_ptr<PictureLayerTilingSet> CreateTilingSet( |
| 22 PictureLayerTilingClient* client) { |
| 23 LayerTreeSettings defaults; |
| 24 return PictureLayerTilingSet::Create( |
| 25 client, defaults.max_tiles_for_interest_area, |
| 26 defaults.skewport_target_time_in_seconds, |
| 27 defaults.skewport_extrapolation_limit_in_content_pixels); |
| 28 } |
| 29 |
| 21 TEST(PictureLayerTilingSetTest, NoResources) { | 30 TEST(PictureLayerTilingSetTest, NoResources) { |
| 22 FakePictureLayerTilingClient client; | 31 FakePictureLayerTilingClient client; |
| 23 gfx::Size layer_bounds(1000, 800); | 32 gfx::Size layer_bounds(1000, 800); |
| 24 auto set = PictureLayerTilingSet::Create(&client); | 33 auto set = CreateTilingSet(&client); |
| 25 client.SetTileSize(gfx::Size(256, 256)); | 34 client.SetTileSize(gfx::Size(256, 256)); |
| 26 | 35 |
| 27 set->AddTiling(1.0, layer_bounds); | 36 set->AddTiling(1.0, layer_bounds); |
| 28 set->AddTiling(1.5, layer_bounds); | 37 set->AddTiling(1.5, layer_bounds); |
| 29 set->AddTiling(2.0, layer_bounds); | 38 set->AddTiling(2.0, layer_bounds); |
| 30 | 39 |
| 31 float contents_scale = 2.0; | 40 float contents_scale = 2.0; |
| 32 gfx::Size content_bounds( | 41 gfx::Size content_bounds( |
| 33 gfx::ToCeiledSize(gfx::ScaleSize(layer_bounds, contents_scale))); | 42 gfx::ToCeiledSize(gfx::ScaleSize(layer_bounds, contents_scale))); |
| 34 gfx::Rect content_rect(content_bounds); | 43 gfx::Rect content_rect(content_bounds); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 52 FakePictureLayerTilingClient client; | 61 FakePictureLayerTilingClient client; |
| 53 gfx::Size layer_bounds(10, 10); | 62 gfx::Size layer_bounds(10, 10); |
| 54 PictureLayerTilingSet::TilingRange higher_than_high_res_range(0, 0); | 63 PictureLayerTilingSet::TilingRange higher_than_high_res_range(0, 0); |
| 55 PictureLayerTilingSet::TilingRange high_res_range(0, 0); | 64 PictureLayerTilingSet::TilingRange high_res_range(0, 0); |
| 56 PictureLayerTilingSet::TilingRange between_high_and_low_res_range(0, 0); | 65 PictureLayerTilingSet::TilingRange between_high_and_low_res_range(0, 0); |
| 57 PictureLayerTilingSet::TilingRange low_res_range(0, 0); | 66 PictureLayerTilingSet::TilingRange low_res_range(0, 0); |
| 58 PictureLayerTilingSet::TilingRange lower_than_low_res_range(0, 0); | 67 PictureLayerTilingSet::TilingRange lower_than_low_res_range(0, 0); |
| 59 PictureLayerTiling* high_res_tiling; | 68 PictureLayerTiling* high_res_tiling; |
| 60 PictureLayerTiling* low_res_tiling; | 69 PictureLayerTiling* low_res_tiling; |
| 61 | 70 |
| 62 auto set = PictureLayerTilingSet::Create(&client); | 71 auto set = CreateTilingSet(&client); |
| 63 set->AddTiling(2.0, layer_bounds); | 72 set->AddTiling(2.0, layer_bounds); |
| 64 high_res_tiling = set->AddTiling(1.0, layer_bounds); | 73 high_res_tiling = set->AddTiling(1.0, layer_bounds); |
| 65 high_res_tiling->set_resolution(HIGH_RESOLUTION); | 74 high_res_tiling->set_resolution(HIGH_RESOLUTION); |
| 66 set->AddTiling(0.5, layer_bounds); | 75 set->AddTiling(0.5, layer_bounds); |
| 67 low_res_tiling = set->AddTiling(0.25, layer_bounds); | 76 low_res_tiling = set->AddTiling(0.25, layer_bounds); |
| 68 low_res_tiling->set_resolution(LOW_RESOLUTION); | 77 low_res_tiling->set_resolution(LOW_RESOLUTION); |
| 69 set->AddTiling(0.125, layer_bounds); | 78 set->AddTiling(0.125, layer_bounds); |
| 70 | 79 |
| 71 higher_than_high_res_range = | 80 higher_than_high_res_range = |
| 72 set->GetTilingRange(PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); | 81 set->GetTilingRange(PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 84 | 93 |
| 85 low_res_range = set->GetTilingRange(PictureLayerTilingSet::LOW_RES); | 94 low_res_range = set->GetTilingRange(PictureLayerTilingSet::LOW_RES); |
| 86 EXPECT_EQ(3u, low_res_range.start); | 95 EXPECT_EQ(3u, low_res_range.start); |
| 87 EXPECT_EQ(4u, low_res_range.end); | 96 EXPECT_EQ(4u, low_res_range.end); |
| 88 | 97 |
| 89 lower_than_low_res_range = | 98 lower_than_low_res_range = |
| 90 set->GetTilingRange(PictureLayerTilingSet::LOWER_THAN_LOW_RES); | 99 set->GetTilingRange(PictureLayerTilingSet::LOWER_THAN_LOW_RES); |
| 91 EXPECT_EQ(4u, lower_than_low_res_range.start); | 100 EXPECT_EQ(4u, lower_than_low_res_range.start); |
| 92 EXPECT_EQ(5u, lower_than_low_res_range.end); | 101 EXPECT_EQ(5u, lower_than_low_res_range.end); |
| 93 | 102 |
| 94 auto set_without_low_res = PictureLayerTilingSet::Create(&client); | 103 auto set_without_low_res = CreateTilingSet(&client); |
| 95 set_without_low_res->AddTiling(2.0, layer_bounds); | 104 set_without_low_res->AddTiling(2.0, layer_bounds); |
| 96 high_res_tiling = set_without_low_res->AddTiling(1.0, layer_bounds); | 105 high_res_tiling = set_without_low_res->AddTiling(1.0, layer_bounds); |
| 97 high_res_tiling->set_resolution(HIGH_RESOLUTION); | 106 high_res_tiling->set_resolution(HIGH_RESOLUTION); |
| 98 set_without_low_res->AddTiling(0.5, layer_bounds); | 107 set_without_low_res->AddTiling(0.5, layer_bounds); |
| 99 set_without_low_res->AddTiling(0.25, layer_bounds); | 108 set_without_low_res->AddTiling(0.25, layer_bounds); |
| 100 | 109 |
| 101 higher_than_high_res_range = set_without_low_res->GetTilingRange( | 110 higher_than_high_res_range = set_without_low_res->GetTilingRange( |
| 102 PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); | 111 PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); |
| 103 EXPECT_EQ(0u, higher_than_high_res_range.start); | 112 EXPECT_EQ(0u, higher_than_high_res_range.start); |
| 104 EXPECT_EQ(1u, higher_than_high_res_range.end); | 113 EXPECT_EQ(1u, higher_than_high_res_range.end); |
| 105 | 114 |
| 106 high_res_range = | 115 high_res_range = |
| 107 set_without_low_res->GetTilingRange(PictureLayerTilingSet::HIGH_RES); | 116 set_without_low_res->GetTilingRange(PictureLayerTilingSet::HIGH_RES); |
| 108 EXPECT_EQ(1u, high_res_range.start); | 117 EXPECT_EQ(1u, high_res_range.start); |
| 109 EXPECT_EQ(2u, high_res_range.end); | 118 EXPECT_EQ(2u, high_res_range.end); |
| 110 | 119 |
| 111 between_high_and_low_res_range = set_without_low_res->GetTilingRange( | 120 between_high_and_low_res_range = set_without_low_res->GetTilingRange( |
| 112 PictureLayerTilingSet::BETWEEN_HIGH_AND_LOW_RES); | 121 PictureLayerTilingSet::BETWEEN_HIGH_AND_LOW_RES); |
| 113 EXPECT_EQ(2u, between_high_and_low_res_range.start); | 122 EXPECT_EQ(2u, between_high_and_low_res_range.start); |
| 114 EXPECT_EQ(4u, between_high_and_low_res_range.end); | 123 EXPECT_EQ(4u, between_high_and_low_res_range.end); |
| 115 | 124 |
| 116 low_res_range = | 125 low_res_range = |
| 117 set_without_low_res->GetTilingRange(PictureLayerTilingSet::LOW_RES); | 126 set_without_low_res->GetTilingRange(PictureLayerTilingSet::LOW_RES); |
| 118 EXPECT_EQ(0u, low_res_range.end - low_res_range.start); | 127 EXPECT_EQ(0u, low_res_range.end - low_res_range.start); |
| 119 | 128 |
| 120 lower_than_low_res_range = set_without_low_res->GetTilingRange( | 129 lower_than_low_res_range = set_without_low_res->GetTilingRange( |
| 121 PictureLayerTilingSet::LOWER_THAN_LOW_RES); | 130 PictureLayerTilingSet::LOWER_THAN_LOW_RES); |
| 122 EXPECT_EQ(0u, lower_than_low_res_range.end - lower_than_low_res_range.start); | 131 EXPECT_EQ(0u, lower_than_low_res_range.end - lower_than_low_res_range.start); |
| 123 | 132 |
| 124 auto set_with_only_high_and_low_res = PictureLayerTilingSet::Create(&client); | 133 auto set_with_only_high_and_low_res = CreateTilingSet(&client); |
| 125 high_res_tiling = | 134 high_res_tiling = |
| 126 set_with_only_high_and_low_res->AddTiling(1.0, layer_bounds); | 135 set_with_only_high_and_low_res->AddTiling(1.0, layer_bounds); |
| 127 high_res_tiling->set_resolution(HIGH_RESOLUTION); | 136 high_res_tiling->set_resolution(HIGH_RESOLUTION); |
| 128 low_res_tiling = set_with_only_high_and_low_res->AddTiling(0.5, layer_bounds); | 137 low_res_tiling = set_with_only_high_and_low_res->AddTiling(0.5, layer_bounds); |
| 129 low_res_tiling->set_resolution(LOW_RESOLUTION); | 138 low_res_tiling->set_resolution(LOW_RESOLUTION); |
| 130 | 139 |
| 131 higher_than_high_res_range = set_with_only_high_and_low_res->GetTilingRange( | 140 higher_than_high_res_range = set_with_only_high_and_low_res->GetTilingRange( |
| 132 PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); | 141 PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); |
| 133 EXPECT_EQ(0u, | 142 EXPECT_EQ(0u, |
| 134 higher_than_high_res_range.end - higher_than_high_res_range.start); | 143 higher_than_high_res_range.end - higher_than_high_res_range.start); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 146 | 155 |
| 147 low_res_range = set_with_only_high_and_low_res->GetTilingRange( | 156 low_res_range = set_with_only_high_and_low_res->GetTilingRange( |
| 148 PictureLayerTilingSet::LOW_RES); | 157 PictureLayerTilingSet::LOW_RES); |
| 149 EXPECT_EQ(1u, low_res_range.start); | 158 EXPECT_EQ(1u, low_res_range.start); |
| 150 EXPECT_EQ(2u, low_res_range.end); | 159 EXPECT_EQ(2u, low_res_range.end); |
| 151 | 160 |
| 152 lower_than_low_res_range = set_with_only_high_and_low_res->GetTilingRange( | 161 lower_than_low_res_range = set_with_only_high_and_low_res->GetTilingRange( |
| 153 PictureLayerTilingSet::LOWER_THAN_LOW_RES); | 162 PictureLayerTilingSet::LOWER_THAN_LOW_RES); |
| 154 EXPECT_EQ(0u, lower_than_low_res_range.end - lower_than_low_res_range.start); | 163 EXPECT_EQ(0u, lower_than_low_res_range.end - lower_than_low_res_range.start); |
| 155 | 164 |
| 156 auto set_with_only_high_res = PictureLayerTilingSet::Create(&client); | 165 auto set_with_only_high_res = CreateTilingSet(&client); |
| 157 high_res_tiling = set_with_only_high_res->AddTiling(1.0, layer_bounds); | 166 high_res_tiling = set_with_only_high_res->AddTiling(1.0, layer_bounds); |
| 158 high_res_tiling->set_resolution(HIGH_RESOLUTION); | 167 high_res_tiling->set_resolution(HIGH_RESOLUTION); |
| 159 | 168 |
| 160 higher_than_high_res_range = set_with_only_high_res->GetTilingRange( | 169 higher_than_high_res_range = set_with_only_high_res->GetTilingRange( |
| 161 PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); | 170 PictureLayerTilingSet::HIGHER_THAN_HIGH_RES); |
| 162 EXPECT_EQ(0u, | 171 EXPECT_EQ(0u, |
| 163 higher_than_high_res_range.end - higher_than_high_res_range.start); | 172 higher_than_high_res_range.end - higher_than_high_res_range.start); |
| 164 | 173 |
| 165 high_res_range = | 174 high_res_range = |
| 166 set_with_only_high_res->GetTilingRange(PictureLayerTilingSet::HIGH_RES); | 175 set_with_only_high_res->GetTilingRange(PictureLayerTilingSet::HIGH_RES); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 NULL, | 211 NULL, |
| 203 NULL, | 212 NULL, |
| 204 0, | 213 0, |
| 205 false, | 214 false, |
| 206 1); | 215 1); |
| 207 | 216 |
| 208 FakePictureLayerTilingClient client(resource_provider.get()); | 217 FakePictureLayerTilingClient client(resource_provider.get()); |
| 209 client.SetTileSize(gfx::Size(256, 256)); | 218 client.SetTileSize(gfx::Size(256, 256)); |
| 210 client.set_tree(PENDING_TREE); | 219 client.set_tree(PENDING_TREE); |
| 211 gfx::Size layer_bounds(1000, 800); | 220 gfx::Size layer_bounds(1000, 800); |
| 212 auto set = PictureLayerTilingSet::Create(&client); | 221 auto set = CreateTilingSet(&client); |
| 213 | 222 |
| 214 float scale = min_scale; | 223 float scale = min_scale; |
| 215 for (int i = 0; i < num_tilings; ++i, scale += scale_increment) { | 224 for (int i = 0; i < num_tilings; ++i, scale += scale_increment) { |
| 216 PictureLayerTiling* tiling = set->AddTiling(scale, layer_bounds); | 225 PictureLayerTiling* tiling = set->AddTiling(scale, layer_bounds); |
| 217 tiling->CreateAllTilesForTesting(); | 226 tiling->CreateAllTilesForTesting(); |
| 218 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | 227 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); |
| 219 client.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); | 228 client.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); |
| 220 } | 229 } |
| 221 | 230 |
| 222 float max_contents_scale = scale; | 231 float max_contents_scale = scale; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 class PictureLayerTilingSetSyncTest : public testing::Test { | 290 class PictureLayerTilingSetSyncTest : public testing::Test { |
| 282 public: | 291 public: |
| 283 PictureLayerTilingSetSyncTest() | 292 PictureLayerTilingSetSyncTest() |
| 284 : tile_size_(gfx::Size(10, 10)), | 293 : tile_size_(gfx::Size(10, 10)), |
| 285 source_bounds_(gfx::Size(30, 20)), | 294 source_bounds_(gfx::Size(30, 20)), |
| 286 target_bounds_(gfx::Size(30, 30)) { | 295 target_bounds_(gfx::Size(30, 30)) { |
| 287 source_client_.SetTileSize(tile_size_); | 296 source_client_.SetTileSize(tile_size_); |
| 288 source_client_.set_tree(PENDING_TREE); | 297 source_client_.set_tree(PENDING_TREE); |
| 289 target_client_.SetTileSize(tile_size_); | 298 target_client_.SetTileSize(tile_size_); |
| 290 target_client_.set_tree(PENDING_TREE); | 299 target_client_.set_tree(PENDING_TREE); |
| 291 source_ = PictureLayerTilingSet::Create(&source_client_); | 300 source_ = CreateTilingSet(&source_client_); |
| 292 target_ = PictureLayerTilingSet::Create(&target_client_); | 301 target_ = CreateTilingSet(&target_client_); |
| 293 } | 302 } |
| 294 | 303 |
| 295 // Sync from source to target. | 304 // Sync from source to target. |
| 296 void SyncTilings(const gfx::Size& new_bounds, | 305 void SyncTilings(const gfx::Size& new_bounds, |
| 297 const Region& invalidation, | 306 const Region& invalidation, |
| 298 float minimum_scale) { | 307 float minimum_scale) { |
| 299 for (size_t i = 0; i < source_->num_tilings(); ++i) | 308 for (size_t i = 0; i < source_->num_tilings(); ++i) |
| 300 source_->tiling_at(i)->CreateAllTilesForTesting(); | 309 source_->tiling_at(i)->CreateAllTilesForTesting(); |
| 301 for (size_t i = 0; i < target_->num_tilings(); ++i) | 310 for (size_t i = 0; i < target_->num_tilings(); ++i) |
| 302 target_->tiling_at(i)->CreateAllTilesForTesting(); | 311 target_->tiling_at(i)->CreateAllTilesForTesting(); |
| 303 | 312 |
| 304 target_->SyncTilings(*source_.get(), new_bounds, invalidation, | 313 target_->SyncTilingsForTesting(*source_.get(), new_bounds, invalidation, |
| 305 minimum_scale, target_client_.raster_source()); | 314 minimum_scale, |
| 315 target_client_.raster_source()); |
| 306 } | 316 } |
| 307 void SyncTilings(const gfx::Size& new_bounds) { | 317 void SyncTilings(const gfx::Size& new_bounds) { |
| 308 Region invalidation; | 318 Region invalidation; |
| 309 SyncTilings(new_bounds, invalidation, 0.f); | 319 SyncTilings(new_bounds, invalidation, 0.f); |
| 310 } | 320 } |
| 311 void SyncTilings(const gfx::Size& new_bounds, const Region& invalidation) { | 321 void SyncTilings(const gfx::Size& new_bounds, const Region& invalidation) { |
| 312 SyncTilings(new_bounds, invalidation, 0.f); | 322 SyncTilings(new_bounds, invalidation, 0.f); |
| 313 } | 323 } |
| 314 void SyncTilings(const gfx::Size& new_bounds, float minimum_scale) { | 324 void SyncTilings(const gfx::Size& new_bounds, float minimum_scale) { |
| 315 Region invalidation; | 325 Region invalidation; |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); | 556 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); |
| 547 for (size_t i = 0; i < original_tiles.size(); ++i) { | 557 for (size_t i = 0; i < original_tiles.size(); ++i) { |
| 548 std::vector<Tile*>::iterator find = | 558 std::vector<Tile*>::iterator find = |
| 549 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); | 559 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); |
| 550 EXPECT_TRUE(find == new_tiles.end()); | 560 EXPECT_TRUE(find == new_tiles.end()); |
| 551 } | 561 } |
| 552 } | 562 } |
| 553 | 563 |
| 554 } // namespace | 564 } // namespace |
| 555 } // namespace cc | 565 } // namespace cc |
| OLD | NEW |