| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/resources/tile.h" | 5 #include "cc/resources/tile.h" |
| 6 #include "cc/resources/tile_priority.h" | 6 #include "cc/resources/tile_priority.h" |
| 7 #include "cc/test/fake_impl_proxy.h" | 7 #include "cc/test/fake_impl_proxy.h" |
| 8 #include "cc/test/fake_layer_tree_host_impl.h" | 8 #include "cc/test/fake_layer_tree_host_impl.h" |
| 9 #include "cc/test/fake_output_surface.h" | 9 #include "cc/test/fake_output_surface.h" |
| 10 #include "cc/test/fake_output_surface_client.h" | 10 #include "cc/test/fake_output_surface_client.h" |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 | 411 |
| 412 // The pending tree is now more important. Active tiles will take higher | 412 // The pending tree is now more important. Active tiles will take higher |
| 413 // priority if they are ready-to-draw in practice. Importantly though, | 413 // priority if they are ready-to-draw in practice. Importantly though, |
| 414 // pending tiles also utilize the hard-limit. | 414 // pending tiles also utilize the hard-limit. |
| 415 SetTreePriority(NEW_CONTENT_TAKES_PRIORITY); | 415 SetTreePriority(NEW_CONTENT_TAKES_PRIORITY); |
| 416 tile_manager()->AssignMemoryToTiles(global_state_); | 416 tile_manager()->AssignMemoryToTiles(global_state_); |
| 417 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles)); | 417 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles)); |
| 418 EXPECT_EQ(10, AssignedMemoryCount(pending_tree_tiles)); | 418 EXPECT_EQ(10, AssignedMemoryCount(pending_tree_tiles)); |
| 419 } | 419 } |
| 420 | 420 |
| 421 TEST_P(TileManagerTest, RespectMemoryLimit) { | |
| 422 if (UsingResourceLimit()) | |
| 423 return; | |
| 424 | |
| 425 Initialize(5, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); | |
| 426 | |
| 427 // We use double the tiles since the hard-limit is double. | |
| 428 TileVector large_tiles = | |
| 429 CreateTiles(10, TilePriorityForNowBin(), TilePriority()); | |
| 430 | |
| 431 size_t memory_required_bytes; | |
| 432 size_t memory_nice_to_have_bytes; | |
| 433 size_t memory_allocated_bytes; | |
| 434 size_t memory_used_bytes; | |
| 435 | |
| 436 tile_manager()->AssignMemoryToTiles(global_state_); | |
| 437 tile_manager()->GetMemoryStats(&memory_required_bytes, | |
| 438 &memory_nice_to_have_bytes, | |
| 439 &memory_allocated_bytes, | |
| 440 &memory_used_bytes); | |
| 441 // Allocated bytes should never be more than the memory limit. | |
| 442 EXPECT_LE(memory_allocated_bytes, global_state_.hard_memory_limit_in_bytes); | |
| 443 | |
| 444 // Finish raster of large tiles. | |
| 445 tile_manager()->UpdateVisibleTiles(); | |
| 446 | |
| 447 // Remove all large tiles. This will leave the memory currently | |
| 448 // used by these tiles as unused when AssignMemoryToTiles() is called. | |
| 449 large_tiles.clear(); | |
| 450 | |
| 451 // Create a new set of tiles using a different size. These tiles | |
| 452 // can use the memory currently assigned to the large tiles but | |
| 453 // they can't use the same resources as the size doesn't match. | |
| 454 TileVector small_tiles = CreateTilesWithSize( | |
| 455 10, TilePriorityForNowBin(), TilePriority(), gfx::Size(128, 128)); | |
| 456 | |
| 457 tile_manager()->AssignMemoryToTiles(global_state_); | |
| 458 tile_manager()->GetMemoryStats(&memory_required_bytes, | |
| 459 &memory_nice_to_have_bytes, | |
| 460 &memory_allocated_bytes, | |
| 461 &memory_used_bytes); | |
| 462 // Allocated bytes should never be more than the memory limit. | |
| 463 EXPECT_LE(memory_allocated_bytes, global_state_.hard_memory_limit_in_bytes); | |
| 464 } | |
| 465 | |
| 466 // If true, the max tile limit should be applied as bytes; if false, | 421 // If true, the max tile limit should be applied as bytes; if false, |
| 467 // as num_resources_limit. | 422 // as num_resources_limit. |
| 468 INSTANTIATE_TEST_CASE_P(TileManagerTests, | 423 INSTANTIATE_TEST_CASE_P(TileManagerTests, |
| 469 TileManagerTest, | 424 TileManagerTest, |
| 470 ::testing::Values(true, false)); | 425 ::testing::Values(true, false)); |
| 471 | 426 |
| 472 class TileManagerTileIteratorTest : public testing::Test { | 427 class TileManagerTileIteratorTest : public testing::Test { |
| 473 public: | 428 public: |
| 474 TileManagerTileIteratorTest() | 429 TileManagerTileIteratorTest() |
| 475 : memory_limit_policy_(ALLOW_ANYTHING), | 430 : memory_limit_policy_(ALLOW_ANYTHING), |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 | 902 |
| 948 last_tile = tile; | 903 last_tile = tile; |
| 949 new_content_tiles.insert(tile); | 904 new_content_tiles.insert(tile); |
| 950 } | 905 } |
| 951 | 906 |
| 952 EXPECT_EQ(tile_count, new_content_tiles.size()); | 907 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 953 EXPECT_EQ(all_tiles, new_content_tiles); | 908 EXPECT_EQ(all_tiles, new_content_tiles); |
| 954 } | 909 } |
| 955 } // namespace | 910 } // namespace |
| 956 } // namespace cc | 911 } // namespace cc |
| OLD | NEW |