Chromium Code Reviews| 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_pool.h" | 10 #include "cc/resources/resource_pool.h" |
| 11 #include "cc/resources/resource_provider.h" | 11 #include "cc/resources/resource_provider.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/fake_tile_manager.h" | |
| 15 #include "cc/test/fake_tile_manager_client.h" | 16 #include "cc/test/fake_tile_manager_client.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "ui/gfx/size_conversions.h" | 18 #include "ui/gfx/size_conversions.h" |
| 18 | 19 |
| 19 namespace cc { | 20 namespace cc { |
| 20 namespace { | 21 namespace { |
| 21 | 22 |
| 22 TEST(PictureLayerTilingSetTest, NoResources) { | 23 TEST(PictureLayerTilingSetTest, NoResources) { |
| 23 FakePictureLayerTilingClient client; | 24 FakeTileManagerClient tile_manager_client; |
| 25 FakeTileManager tile_manager(&tile_manager_client); | |
| 26 FakePictureLayerTilingClient client(&tile_manager); | |
| 24 gfx::Size layer_bounds(1000, 800); | 27 gfx::Size layer_bounds(1000, 800); |
| 25 PictureLayerTilingSet set(&client, layer_bounds); | 28 PictureLayerTilingSet set(&client, layer_bounds); |
| 26 client.SetTileSize(gfx::Size(256, 256)); | 29 client.SetTileSize(gfx::Size(256, 256)); |
| 27 | 30 |
| 28 set.AddTiling(1.0); | 31 set.AddTiling(1.0); |
| 29 set.AddTiling(1.5); | 32 set.AddTiling(1.5); |
| 30 set.AddTiling(2.0); | 33 set.AddTiling(2.0); |
| 31 | 34 |
| 32 float contents_scale = 2.0; | 35 float contents_scale = 2.0; |
| 33 gfx::Size content_bounds( | 36 gfx::Size content_bounds( |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 61 float ideal_contents_scale, | 64 float ideal_contents_scale, |
| 62 float expected_scale) { | 65 float expected_scale) { |
| 63 FakeOutputSurfaceClient output_surface_client; | 66 FakeOutputSurfaceClient output_surface_client; |
| 64 scoped_ptr<FakeOutputSurface> output_surface = | 67 scoped_ptr<FakeOutputSurface> output_surface = |
| 65 FakeOutputSurface::Create3d(); | 68 FakeOutputSurface::Create3d(); |
| 66 CHECK(output_surface->BindToClient(&output_surface_client)); | 69 CHECK(output_surface->BindToClient(&output_surface_client)); |
| 67 | 70 |
| 68 scoped_ptr<ResourceProvider> resource_provider = | 71 scoped_ptr<ResourceProvider> resource_provider = |
| 69 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1); | 72 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1); |
| 70 | 73 |
| 71 FakePictureLayerTilingClient client(resource_provider.get()); | 74 FakeTileManagerClient tile_manager_client; |
| 75 FakeTileManager tile_manager(&tile_manager_client, resource_provider.get()); | |
| 76 | |
| 77 FakePictureLayerTilingClient client(&tile_manager); | |
| 72 client.SetTileSize(gfx::Size(256, 256)); | 78 client.SetTileSize(gfx::Size(256, 256)); |
| 73 gfx::Size layer_bounds(1000, 800); | 79 gfx::Size layer_bounds(1000, 800); |
| 74 PictureLayerTilingSet set(&client, layer_bounds); | 80 PictureLayerTilingSet set(&client, layer_bounds); |
| 75 | 81 |
| 76 float scale = min_scale; | 82 float scale = min_scale; |
| 77 for (int i = 0; i < num_tilings; ++i, scale += scale_increment) { | 83 for (int i = 0; i < num_tilings; ++i, scale += scale_increment) { |
| 78 PictureLayerTiling* tiling = set.AddTiling(scale); | 84 PictureLayerTiling* tiling = set.AddTiling(scale); |
| 79 tiling->CreateAllTilesForTesting(); | 85 tiling->CreateAllTilesForTesting(); |
| 80 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | 86 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); |
| 81 client.tile_manager()->InitializeTilesWithResourcesForTesting( | 87 client.tile_manager()->InitializeTilesWithResourcesForTesting( |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings_NotEqual) { | 149 TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings_NotEqual) { |
| 144 runTest(10, 1.f, 1.f, 4.5f, 5.f); | 150 runTest(10, 1.f, 1.f, 4.5f, 5.f); |
| 145 } | 151 } |
| 146 | 152 |
| 147 class PictureLayerTilingSetSyncTest : public testing::Test { | 153 class PictureLayerTilingSetSyncTest : public testing::Test { |
| 148 public: | 154 public: |
| 149 PictureLayerTilingSetSyncTest() | 155 PictureLayerTilingSetSyncTest() |
| 150 : tile_size_(gfx::Size(10, 10)), | 156 : tile_size_(gfx::Size(10, 10)), |
| 151 source_bounds_(gfx::Size(30, 20)), | 157 source_bounds_(gfx::Size(30, 20)), |
| 152 target_bounds_(gfx::Size(30, 30)) { | 158 target_bounds_(gfx::Size(30, 30)) { |
| 153 source_client_.SetTileSize(tile_size_); | 159 output_surface_ = FakeOutputSurface::Create3d(); |
| 154 target_client_.SetTileSize(tile_size_); | 160 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 155 source_.reset(new PictureLayerTilingSet(&source_client_, source_bounds_)); | 161 resource_provider_ = |
| 156 target_.reset(new PictureLayerTilingSet(&target_client_, target_bounds_)); | 162 ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1); |
| 163 tile_manager_ = make_scoped_ptr( | |
| 164 new FakeTileManager(&tile_manager_client_, resource_provider_.get())); | |
| 165 source_client_ = | |
| 166 make_scoped_ptr(new FakePictureLayerTilingClient(tile_manager_.get())); | |
| 167 target_client_ = | |
| 168 make_scoped_ptr(new FakePictureLayerTilingClient(tile_manager_.get())); | |
| 169 | |
| 170 source_client_->SetTileSize(tile_size_); | |
| 171 target_client_->SetTileSize(tile_size_); | |
| 172 | |
| 173 source_.reset( | |
| 174 new PictureLayerTilingSet(source_client_.get(), source_bounds_)); | |
| 175 target_.reset( | |
| 176 new PictureLayerTilingSet(target_client_.get(), target_bounds_)); | |
| 177 } | |
| 178 | |
| 179 ~PictureLayerTilingSetSyncTest() { | |
|
enne (OOO)
2013/12/03 02:28:37
Could you just order these variables differently i
vmpstr
2013/12/03 18:44:43
Done.
| |
| 180 source_.reset(NULL); | |
| 181 target_.reset(NULL); | |
| 182 tile_manager_.reset(NULL); | |
| 183 resource_provider_.reset(NULL); | |
| 157 } | 184 } |
| 158 | 185 |
| 159 // Sync from source to target. | 186 // Sync from source to target. |
| 160 void SyncTilings(gfx::Size new_bounds, | 187 void SyncTilings(gfx::Size new_bounds, |
| 161 const Region& invalidation, | 188 const Region& invalidation, |
| 162 float minimum_scale) { | 189 float minimum_scale) { |
| 163 for (size_t i = 0; i < source_->num_tilings(); ++i) | 190 for (size_t i = 0; i < source_->num_tilings(); ++i) |
| 164 source_->tiling_at(i)->CreateAllTilesForTesting(); | 191 source_->tiling_at(i)->CreateTilesForTesting(ACTIVE_TREE); |
| 165 for (size_t i = 0; i < target_->num_tilings(); ++i) | 192 for (size_t i = 0; i < target_->num_tilings(); ++i) |
| 166 target_->tiling_at(i)->CreateAllTilesForTesting(); | 193 target_->tiling_at(i)->CreateTilesForTesting(PENDING_TREE); |
| 167 | 194 |
| 168 target_->SyncTilings( | 195 target_->SyncTilings( |
| 169 *source_.get(), new_bounds, invalidation, minimum_scale); | 196 *source_.get(), new_bounds, invalidation, minimum_scale); |
| 170 } | 197 } |
| 171 void SyncTilings(gfx::Size new_bounds) { | 198 void SyncTilings(gfx::Size new_bounds) { |
| 172 Region invalidation; | 199 Region invalidation; |
| 173 SyncTilings(new_bounds, invalidation, 0.f); | 200 SyncTilings(new_bounds, invalidation, 0.f); |
| 174 } | 201 } |
| 175 void SyncTilings(gfx::Size new_bounds, const Region& invalidation) { | 202 void SyncTilings(gfx::Size new_bounds, const Region& invalidation) { |
| 176 SyncTilings(new_bounds, invalidation, 0.f); | 203 SyncTilings(new_bounds, invalidation, 0.f); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 188 for (size_t i = 0; i < target_->num_tilings(); ++i) { | 215 for (size_t i = 0; i < target_->num_tilings(); ++i) { |
| 189 ASSERT_GT(source_->num_tilings(), i); | 216 ASSERT_GT(source_->num_tilings(), i); |
| 190 const PictureLayerTiling* source_tiling = source_->tiling_at(i); | 217 const PictureLayerTiling* source_tiling = source_->tiling_at(i); |
| 191 const PictureLayerTiling* target_tiling = target_->tiling_at(i); | 218 const PictureLayerTiling* target_tiling = target_->tiling_at(i); |
| 192 EXPECT_EQ(target_tiling->layer_bounds().ToString(), | 219 EXPECT_EQ(target_tiling->layer_bounds().ToString(), |
| 193 new_bounds.ToString()); | 220 new_bounds.ToString()); |
| 194 EXPECT_EQ(source_tiling->contents_scale(), | 221 EXPECT_EQ(source_tiling->contents_scale(), |
| 195 target_tiling->contents_scale()); | 222 target_tiling->contents_scale()); |
| 196 } | 223 } |
| 197 | 224 |
| 198 EXPECT_EQ(source_->client(), &source_client_); | 225 EXPECT_EQ(source_->client(), source_client_.get()); |
| 199 EXPECT_EQ(target_->client(), &target_client_); | 226 EXPECT_EQ(target_->client(), target_client_.get()); |
| 200 ValidateTargetTilingSet(); | 227 ValidateTargetTilingSet(); |
| 201 } | 228 } |
| 202 | 229 |
| 203 void ValidateTargetTilingSet() const { | 230 void ValidateTargetTilingSet() const { |
| 204 // Tilings should be sorted largest to smallest. | 231 // Tilings should be sorted largest to smallest. |
| 205 if (target_->num_tilings() > 0) { | 232 if (target_->num_tilings() > 0) { |
| 206 float last_scale = target_->tiling_at(0)->contents_scale(); | 233 float last_scale = target_->tiling_at(0)->contents_scale(); |
| 207 for (size_t i = 1; i < target_->num_tilings(); ++i) { | 234 for (size_t i = 1; i < target_->num_tilings(); ++i) { |
| 208 const PictureLayerTiling* target_tiling = target_->tiling_at(i); | 235 const PictureLayerTiling* target_tiling = target_->tiling_at(i); |
| 209 EXPECT_LT(target_tiling->contents_scale(), last_scale); | 236 EXPECT_LT(target_tiling->contents_scale(), last_scale); |
| 210 last_scale = target_tiling->contents_scale(); | 237 last_scale = target_tiling->contents_scale(); |
| 211 } | 238 } |
| 212 } | 239 } |
| 213 | 240 |
| 214 for (size_t i = 0; i < target_->num_tilings(); ++i) | 241 for (size_t i = 0; i < target_->num_tilings(); ++i) |
| 215 ValidateTiling(target_->tiling_at(i), target_client_.pile()); | 242 ValidateTiling(target_->tiling_at(i), target_client_->pile()); |
| 216 } | 243 } |
| 217 | 244 |
| 218 void ValidateTiling(const PictureLayerTiling* tiling, | 245 void ValidateTiling(const PictureLayerTiling* tiling, |
| 219 const PicturePileImpl* pile) const { | 246 const PicturePileImpl* pile) const { |
| 220 if (tiling->ContentRect().IsEmpty()) | 247 if (tiling->ContentRect().IsEmpty()) |
| 221 EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty()); | 248 EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty()); |
| 222 else if (!tiling->live_tiles_rect().IsEmpty()) | 249 else if (!tiling->live_tiles_rect().IsEmpty()) |
| 223 EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect())); | 250 EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect())); |
| 224 | 251 |
| 225 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | 252 std::vector<Tile*> tiles = tiling->TilesForTesting(PENDING_TREE); |
| 226 for (size_t i = 0; i < tiles.size(); ++i) { | 253 for (size_t i = 0; i < tiles.size(); ++i) { |
| 227 const Tile* tile = tiles[i]; | 254 const Tile* tile = tiles[i]; |
| 228 ASSERT_TRUE(!!tile); | 255 ASSERT_TRUE(!!tile); |
| 229 EXPECT_EQ(tile->picture_pile(), pile); | 256 EXPECT_EQ(tile->picture_pile(), pile); |
| 230 EXPECT_TRUE(tile->content_rect().Intersects(tiling->live_tiles_rect())) | 257 EXPECT_TRUE(tile->content_rect().Intersects(tiling->live_tiles_rect())) |
| 231 << "All tiles must be inside the live tiles rect."; | 258 << "All tiles must be inside the live tiles rect."; |
| 232 } | 259 } |
| 233 | 260 |
| 234 for (PictureLayerTiling::CoverageIterator iter( | 261 for (PictureLayerTiling::CoverageIterator iter( |
| 235 tiling, tiling->contents_scale(), tiling->live_tiles_rect()); | 262 tiling, tiling->contents_scale(), tiling->live_tiles_rect()); |
| 236 iter; | 263 iter; |
| 237 ++iter) { | 264 ++iter) { |
| 238 EXPECT_TRUE(*iter) << "The live tiles rect must be full."; | 265 EXPECT_TRUE(*iter) << "The live tiles rect must be full."; |
| 239 } | 266 } |
| 240 } | 267 } |
| 241 | 268 |
| 242 gfx::Size tile_size_; | 269 gfx::Size tile_size_; |
| 243 | 270 |
| 244 FakePictureLayerTilingClient source_client_; | 271 scoped_ptr<FakePictureLayerTilingClient> source_client_; |
| 245 gfx::Size source_bounds_; | 272 gfx::Size source_bounds_; |
| 246 scoped_ptr<PictureLayerTilingSet> source_; | 273 scoped_ptr<PictureLayerTilingSet> source_; |
| 247 | 274 |
| 248 FakePictureLayerTilingClient target_client_; | 275 scoped_ptr<FakePictureLayerTilingClient> target_client_; |
| 249 gfx::Size target_bounds_; | 276 gfx::Size target_bounds_; |
| 250 scoped_ptr<PictureLayerTilingSet> target_; | 277 scoped_ptr<PictureLayerTilingSet> target_; |
| 278 | |
| 279 FakeTileManagerClient tile_manager_client_; | |
| 280 scoped_ptr<FakeTileManager> tile_manager_; | |
| 281 scoped_ptr<ResourceProvider> resource_provider_; | |
| 282 scoped_ptr<FakeOutputSurface> output_surface_; | |
| 283 FakeOutputSurfaceClient output_surface_client_; | |
| 251 }; | 284 }; |
| 252 | 285 |
| 253 TEST_F(PictureLayerTilingSetSyncTest, EmptyBounds) { | 286 TEST_F(PictureLayerTilingSetSyncTest, EmptyBounds) { |
| 254 float source_scales[] = {1.f, 1.2f}; | 287 float source_scales[] = {1.f, 1.2f}; |
| 255 for (size_t i = 0; i < arraysize(source_scales); ++i) | 288 for (size_t i = 0; i < arraysize(source_scales); ++i) |
| 256 source_->AddTiling(source_scales[i]); | 289 source_->AddTiling(source_scales[i]); |
| 257 | 290 |
| 258 gfx::Size new_bounds; | 291 gfx::Size new_bounds; |
| 259 SyncTilings(new_bounds); | 292 SyncTilings(new_bounds); |
| 260 EXPECT_EQ(target_->num_tilings(), 0u); | 293 EXPECT_EQ(target_->num_tilings(), 0u); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 341 SyncTilings(new_bounds, minimum_scale); | 374 SyncTilings(new_bounds, minimum_scale); |
| 342 | 375 |
| 343 EXPECT_EQ(target_->num_tilings(), 1u); | 376 EXPECT_EQ(target_->num_tilings(), 1u); |
| 344 EXPECT_EQ(target_->tiling_at(0)->contents_scale(), 2.f); | 377 EXPECT_EQ(target_->tiling_at(0)->contents_scale(), 2.f); |
| 345 ValidateTargetTilingSet(); | 378 ValidateTargetTilingSet(); |
| 346 } | 379 } |
| 347 | 380 |
| 348 TEST_F(PictureLayerTilingSetSyncTest, Invalidation) { | 381 TEST_F(PictureLayerTilingSetSyncTest, Invalidation) { |
| 349 source_->AddTiling(2.f); | 382 source_->AddTiling(2.f); |
| 350 target_->AddTiling(2.f); | 383 target_->AddTiling(2.f); |
| 351 target_->tiling_at(0)->CreateAllTilesForTesting(); | 384 target_->tiling_at(0)->CreateTilesForTesting(PENDING_TREE); |
| 352 | 385 |
| 353 Region layer_invalidation; | 386 Region layer_invalidation; |
| 354 layer_invalidation.Union(gfx::Rect(0, 0, 1, 1)); | 387 layer_invalidation.Union(gfx::Rect(0, 0, 1, 1)); |
| 355 layer_invalidation.Union(gfx::Rect(0, 15, 1, 1)); | 388 layer_invalidation.Union(gfx::Rect(0, 15, 1, 1)); |
| 356 // Out of bounds layer_invalidation. | 389 // Out of bounds layer_invalidation. |
| 357 layer_invalidation.Union(gfx::Rect(100, 100, 1, 1)); | 390 layer_invalidation.Union(gfx::Rect(100, 100, 1, 1)); |
| 358 | 391 |
| 359 Region content_invalidation; | 392 Region content_invalidation; |
| 360 for (Region::Iterator iter(layer_invalidation); iter.has_rect(); | 393 for (Region::Iterator iter(layer_invalidation); iter.has_rect(); |
| 361 iter.next()) { | 394 iter.next()) { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 385 | 418 |
| 386 TEST_F(PictureLayerTilingSetSyncTest, TileSizeChange) { | 419 TEST_F(PictureLayerTilingSetSyncTest, TileSizeChange) { |
| 387 source_->AddTiling(1.f); | 420 source_->AddTiling(1.f); |
| 388 target_->AddTiling(1.f); | 421 target_->AddTiling(1.f); |
| 389 | 422 |
| 390 target_->tiling_at(0)->CreateAllTilesForTesting(); | 423 target_->tiling_at(0)->CreateAllTilesForTesting(); |
| 391 std::vector<Tile*> original_tiles = | 424 std::vector<Tile*> original_tiles = |
| 392 target_->tiling_at(0)->AllTilesForTesting(); | 425 target_->tiling_at(0)->AllTilesForTesting(); |
| 393 EXPECT_GT(original_tiles.size(), 0u); | 426 EXPECT_GT(original_tiles.size(), 0u); |
| 394 gfx::Size new_tile_size(100, 100); | 427 gfx::Size new_tile_size(100, 100); |
| 395 target_client_.SetTileSize(new_tile_size); | 428 target_client_->SetTileSize(new_tile_size); |
| 396 EXPECT_NE(target_->tiling_at(0)->tile_size().ToString(), | 429 EXPECT_NE(target_->tiling_at(0)->tile_size().ToString(), |
| 397 new_tile_size.ToString()); | 430 new_tile_size.ToString()); |
| 398 | 431 |
| 399 gfx::Size new_bounds(15, 40); | 432 gfx::Size new_bounds(15, 40); |
| 400 SyncTilings(new_bounds); | 433 SyncTilings(new_bounds); |
| 401 VerifyTargetEqualsSource(new_bounds); | 434 VerifyTargetEqualsSource(new_bounds); |
| 402 | 435 |
| 403 EXPECT_EQ(target_->tiling_at(0)->tile_size().ToString(), | 436 EXPECT_EQ(target_->tiling_at(0)->tile_size().ToString(), |
| 404 new_tile_size.ToString()); | 437 new_tile_size.ToString()); |
| 405 | 438 |
| 406 // All old tiles should not be present in new tiles. | 439 // All old tiles should not be present in new tiles. |
| 407 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); | 440 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); |
| 408 for (size_t i = 0; i < original_tiles.size(); ++i) { | 441 for (size_t i = 0; i < original_tiles.size(); ++i) { |
| 409 std::vector<Tile*>::iterator find = | 442 std::vector<Tile*>::iterator find = |
| 410 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); | 443 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); |
| 411 EXPECT_TRUE(find == new_tiles.end()); | 444 EXPECT_TRUE(find == new_tiles.end()); |
| 412 } | 445 } |
| 413 } | 446 } |
| 414 | 447 |
| 415 } // namespace | 448 } // namespace |
| 416 } // namespace cc | 449 } // namespace cc |
| OLD | NEW |