| 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/eviction_tile_priority_queue.h" | 5 #include "cc/resources/eviction_tile_priority_queue.h" |
| 6 #include "cc/resources/raster_tile_priority_queue.h" | 6 #include "cc/resources/raster_tile_priority_queue.h" |
| 7 #include "cc/resources/tile.h" | 7 #include "cc/resources/tile.h" |
| 8 #include "cc/resources/tile_priority.h" | 8 #include "cc/resources/tile_priority.h" |
| 9 #include "cc/test/begin_frame_args_test.h" |
| 9 #include "cc/test/fake_impl_proxy.h" | 10 #include "cc/test/fake_impl_proxy.h" |
| 10 #include "cc/test/fake_layer_tree_host_impl.h" | 11 #include "cc/test/fake_layer_tree_host_impl.h" |
| 11 #include "cc/test/fake_output_surface.h" | 12 #include "cc/test/fake_output_surface.h" |
| 12 #include "cc/test/fake_output_surface_client.h" | 13 #include "cc/test/fake_output_surface_client.h" |
| 13 #include "cc/test/fake_picture_layer_impl.h" | 14 #include "cc/test/fake_picture_layer_impl.h" |
| 14 #include "cc/test/fake_picture_pile_impl.h" | 15 #include "cc/test/fake_picture_pile_impl.h" |
| 15 #include "cc/test/fake_tile_manager.h" | 16 #include "cc/test/fake_tile_manager.h" |
| 16 #include "cc/test/impl_side_painting_settings.h" | 17 #include "cc/test/impl_side_painting_settings.h" |
| 17 #include "cc/test/test_shared_bitmap_manager.h" | 18 #include "cc/test/test_shared_bitmap_manager.h" |
| 18 #include "cc/test/test_tile_priorities.h" | 19 #include "cc/test/test_tile_priorities.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 pending_layer = | 115 pending_layer = |
| 115 FakePictureLayerImpl::CreateWithRasterSource(pending_tree, id_, pile); | 116 FakePictureLayerImpl::CreateWithRasterSource(pending_tree, id_, pile); |
| 116 pending_layer->SetDrawsContent(true); | 117 pending_layer->SetDrawsContent(true); |
| 117 } | 118 } |
| 118 // The bounds() just mirror the pile size. | 119 // The bounds() just mirror the pile size. |
| 119 pending_layer->SetBounds(pending_layer->raster_source()->GetSize()); | 120 pending_layer->SetBounds(pending_layer->raster_source()->GetSize()); |
| 120 pending_tree->SetRootLayer(pending_layer.Pass()); | 121 pending_tree->SetRootLayer(pending_layer.Pass()); |
| 121 | 122 |
| 122 pending_layer_ = static_cast<FakePictureLayerImpl*>( | 123 pending_layer_ = static_cast<FakePictureLayerImpl*>( |
| 123 host_impl_.pending_tree()->LayerById(id_)); | 124 host_impl_.pending_tree()->LayerById(id_)); |
| 125 |
| 126 // Add tilings/tiles for the layer. |
| 127 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 124 } | 128 } |
| 125 | 129 |
| 126 TileManager* tile_manager() { return host_impl_.tile_manager(); } | 130 TileManager* tile_manager() { return host_impl_.tile_manager(); } |
| 127 | 131 |
| 128 protected: | 132 protected: |
| 129 GlobalStateThatImpactsTilePriority global_state_; | 133 GlobalStateThatImpactsTilePriority global_state_; |
| 130 | 134 |
| 131 TestSharedBitmapManager shared_bitmap_manager_; | 135 TestSharedBitmapManager shared_bitmap_manager_; |
| 132 TileMemoryLimitPolicy memory_limit_policy_; | 136 TileMemoryLimitPolicy memory_limit_policy_; |
| 133 int max_tiles_; | 137 int max_tiles_; |
| 134 bool ready_to_activate_; | 138 bool ready_to_activate_; |
| 135 int id_; | 139 int id_; |
| 136 FakeImplProxy proxy_; | 140 FakeImplProxy proxy_; |
| 137 FakeLayerTreeHostImpl host_impl_; | 141 FakeLayerTreeHostImpl host_impl_; |
| 138 FakePictureLayerImpl* pending_layer_; | 142 FakePictureLayerImpl* pending_layer_; |
| 139 FakePictureLayerImpl* active_layer_; | 143 FakePictureLayerImpl* active_layer_; |
| 140 }; | 144 }; |
| 141 | 145 |
| 142 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { | 146 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { |
| 143 const gfx::Size layer_bounds(1000, 1000); | 147 const gfx::Size layer_bounds(1000, 1000); |
| 144 host_impl_.SetViewportSize(layer_bounds); | 148 host_impl_.SetViewportSize(layer_bounds); |
| 145 SetupDefaultTrees(layer_bounds); | 149 SetupDefaultTrees(layer_bounds); |
| 146 | 150 |
| 147 active_layer_->CreateDefaultTilingsAndTiles(); | |
| 148 pending_layer_->CreateDefaultTilingsAndTiles(); | |
| 149 | |
| 150 RasterTilePriorityQueue queue; | 151 RasterTilePriorityQueue queue; |
| 151 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); | 152 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); |
| 152 EXPECT_FALSE(queue.IsEmpty()); | 153 EXPECT_FALSE(queue.IsEmpty()); |
| 153 | 154 |
| 154 size_t tile_count = 0; | 155 size_t tile_count = 0; |
| 155 std::set<Tile*> all_tiles; | 156 std::set<Tile*> all_tiles; |
| 156 while (!queue.IsEmpty()) { | 157 while (!queue.IsEmpty()) { |
| 157 EXPECT_TRUE(queue.Top()); | 158 EXPECT_TRUE(queue.Top()); |
| 158 all_tiles.insert(queue.Top()); | 159 all_tiles.insert(queue.Top()); |
| 159 ++tile_count; | 160 ++tile_count; |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 } | 319 } |
| 319 | 320 |
| 320 EXPECT_EQ(tile_count, new_content_tiles.size()); | 321 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 321 EXPECT_EQ(high_res_tiles, new_content_tiles); | 322 EXPECT_EQ(high_res_tiles, new_content_tiles); |
| 322 // Since we don't guarantee increasing distance due to spiral iterator, we | 323 // Since we don't guarantee increasing distance due to spiral iterator, we |
| 323 // should check that we're _mostly_ right. | 324 // should check that we're _mostly_ right. |
| 324 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); | 325 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); |
| 325 } | 326 } |
| 326 | 327 |
| 327 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { | 328 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { |
| 328 SetupDefaultTrees(gfx::Size(1000, 1000)); | 329 base::TimeTicks time_ticks; |
| 330 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 331 host_impl_.SetCurrentBeginFrameArgs( |
| 332 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 329 | 333 |
| 330 active_layer_->CreateDefaultTilingsAndTiles(); | 334 gfx::Size layer_bounds(1000, 1000); |
| 331 pending_layer_->CreateDefaultTilingsAndTiles(); | 335 SetupDefaultTrees(layer_bounds); |
| 332 | 336 |
| 333 // Create a pending child layer. | 337 // Create a pending child layer. |
| 334 gfx::Size tile_size(256, 256); | 338 gfx::Size tile_size(256, 256); |
| 335 scoped_refptr<FakePicturePileImpl> pending_pile = | 339 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 336 FakePicturePileImpl::CreateFilledPile(tile_size, gfx::Size(1000, 1000)); | 340 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 337 scoped_ptr<FakePictureLayerImpl> pending_child = | 341 scoped_ptr<FakePictureLayerImpl> pending_child = |
| 338 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), | 342 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), |
| 339 id_ + 1, pending_pile); | 343 id_ + 1, pending_pile); |
| 344 FakePictureLayerImpl* pending_child_raw = pending_child.get(); |
| 345 pending_child_raw->SetDrawsContent(true); |
| 340 pending_layer_->AddChild(pending_child.Pass()); | 346 pending_layer_->AddChild(pending_child.Pass()); |
| 341 FakePictureLayerImpl* pending_child_raw = static_cast<FakePictureLayerImpl*>( | |
| 342 host_impl_.pending_tree()->LayerById(id_ + 1)); | |
| 343 ASSERT_TRUE(pending_child_raw); | |
| 344 | |
| 345 pending_child_raw->SetDrawsContent(true); | |
| 346 pending_child_raw->CreateDefaultTilingsAndTiles(); | |
| 347 ASSERT_TRUE(pending_child_raw->HighResTiling()); | |
| 348 | 347 |
| 349 // Set a small viewport, so we have soon and eventually tiles. | 348 // Set a small viewport, so we have soon and eventually tiles. |
| 350 gfx::Rect viewport(200, 200); | 349 host_impl_.SetViewportSize(gfx::Size(200, 200)); |
| 351 active_layer_->draw_properties().visible_content_rect = viewport; | 350 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 352 active_layer_->UpdateTiles(Occlusion(), false); | 351 host_impl_.SetCurrentBeginFrameArgs( |
| 353 pending_layer_->draw_properties().visible_content_rect = viewport; | 352 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 354 pending_layer_->UpdateTiles(Occlusion(), false); | 353 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 355 pending_child_raw->draw_properties().visible_content_rect = viewport; | |
| 356 pending_child_raw->UpdateTiles(Occlusion(), false); | |
| 357 | 354 |
| 358 RasterTilePriorityQueue queue; | 355 RasterTilePriorityQueue queue; |
| 359 host_impl_.SetRequiresHighResToDraw(); | 356 host_impl_.SetRequiresHighResToDraw(); |
| 360 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); | 357 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); |
| 361 EXPECT_FALSE(queue.IsEmpty()); | 358 EXPECT_FALSE(queue.IsEmpty()); |
| 362 | 359 |
| 363 // Get all the tiles that are NOW or SOON and make sure they are ready to | 360 // Get all the tiles that are NOW or SOON and make sure they are ready to |
| 364 // draw. | 361 // draw. |
| 365 std::vector<Tile*> all_tiles; | 362 std::vector<Tile*> all_tiles; |
| 366 while (!queue.IsEmpty()) { | 363 while (!queue.IsEmpty()) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 378 // Ensure we can activate. | 375 // Ensure we can activate. |
| 379 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 376 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
| 380 EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw()); | 377 EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw()); |
| 381 } | 378 } |
| 382 | 379 |
| 383 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { | 380 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { |
| 384 const gfx::Size layer_bounds(1000, 1000); | 381 const gfx::Size layer_bounds(1000, 1000); |
| 385 host_impl_.SetViewportSize(layer_bounds); | 382 host_impl_.SetViewportSize(layer_bounds); |
| 386 SetupDefaultTrees(layer_bounds); | 383 SetupDefaultTrees(layer_bounds); |
| 387 | 384 |
| 388 active_layer_->CreateDefaultTilingsAndTiles(); | |
| 389 pending_layer_->CreateDefaultTilingsAndTiles(); | |
| 390 | |
| 391 EvictionTilePriorityQueue empty_queue; | 385 EvictionTilePriorityQueue empty_queue; |
| 392 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); | 386 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); |
| 393 EXPECT_TRUE(empty_queue.IsEmpty()); | 387 EXPECT_TRUE(empty_queue.IsEmpty()); |
| 394 std::set<Tile*> all_tiles; | 388 std::set<Tile*> all_tiles; |
| 395 size_t tile_count = 0; | 389 size_t tile_count = 0; |
| 396 | 390 |
| 397 RasterTilePriorityQueue raster_queue; | 391 RasterTilePriorityQueue raster_queue; |
| 398 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); | 392 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); |
| 399 while (!raster_queue.IsEmpty()) { | 393 while (!raster_queue.IsEmpty()) { |
| 400 ++tile_count; | 394 ++tile_count; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 413 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); | 407 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); |
| 414 EXPECT_FALSE(queue.IsEmpty()); | 408 EXPECT_FALSE(queue.IsEmpty()); |
| 415 | 409 |
| 416 // Sanity check, all tiles should be visible. | 410 // Sanity check, all tiles should be visible. |
| 417 std::set<Tile*> smoothness_tiles; | 411 std::set<Tile*> smoothness_tiles; |
| 418 while (!queue.IsEmpty()) { | 412 while (!queue.IsEmpty()) { |
| 419 Tile* tile = queue.Top(); | 413 Tile* tile = queue.Top(); |
| 420 EXPECT_TRUE(tile); | 414 EXPECT_TRUE(tile); |
| 421 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); | 415 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); |
| 422 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); | 416 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); |
| 423 EXPECT_TRUE(tile->HasResources()); | 417 EXPECT_TRUE(tile->HasResource()); |
| 424 smoothness_tiles.insert(tile); | 418 smoothness_tiles.insert(tile); |
| 425 queue.Pop(); | 419 queue.Pop(); |
| 426 } | 420 } |
| 427 EXPECT_EQ(all_tiles, smoothness_tiles); | 421 EXPECT_EQ(all_tiles, smoothness_tiles); |
| 428 | 422 |
| 429 tile_manager()->ReleaseTileResourcesForTesting( | 423 tile_manager()->ReleaseTileResourcesForTesting( |
| 430 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); | 424 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); |
| 431 | 425 |
| 432 Region invalidation(gfx::Rect(0, 0, 500, 500)); | 426 Region invalidation(gfx::Rect(0, 0, 500, 500)); |
| 433 | 427 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 smoothness_tiles.clear(); | 473 smoothness_tiles.clear(); |
| 480 tile_count = 0; | 474 tile_count = 0; |
| 481 // Here we expect to get increasing ACTIVE_TREE priority_bin. | 475 // Here we expect to get increasing ACTIVE_TREE priority_bin. |
| 482 queue.Reset(); | 476 queue.Reset(); |
| 483 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); | 477 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); |
| 484 int distance_increasing = 0; | 478 int distance_increasing = 0; |
| 485 int distance_decreasing = 0; | 479 int distance_decreasing = 0; |
| 486 while (!queue.IsEmpty()) { | 480 while (!queue.IsEmpty()) { |
| 487 Tile* tile = queue.Top(); | 481 Tile* tile = queue.Top(); |
| 488 EXPECT_TRUE(tile); | 482 EXPECT_TRUE(tile); |
| 489 EXPECT_TRUE(tile->HasResources()); | 483 EXPECT_TRUE(tile->HasResource()); |
| 490 | 484 |
| 491 if (!last_tile) | 485 if (!last_tile) |
| 492 last_tile = tile; | 486 last_tile = tile; |
| 493 | 487 |
| 494 EXPECT_GE(last_tile->priority(ACTIVE_TREE).priority_bin, | 488 EXPECT_GE(last_tile->priority(ACTIVE_TREE).priority_bin, |
| 495 tile->priority(ACTIVE_TREE).priority_bin); | 489 tile->priority(ACTIVE_TREE).priority_bin); |
| 496 if (last_tile->priority(ACTIVE_TREE).priority_bin == | 490 if (last_tile->priority(ACTIVE_TREE).priority_bin == |
| 497 tile->priority(ACTIVE_TREE).priority_bin) { | 491 tile->priority(ACTIVE_TREE).priority_bin) { |
| 498 EXPECT_LE(last_tile->required_for_activation(), | 492 EXPECT_LE(last_tile->required_for_activation(), |
| 499 tile->required_for_activation()); | 493 tile->required_for_activation()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 } | 548 } |
| 555 | 549 |
| 556 EXPECT_EQ(3, distance_increasing); | 550 EXPECT_EQ(3, distance_increasing); |
| 557 EXPECT_EQ(16, distance_decreasing); | 551 EXPECT_EQ(16, distance_decreasing); |
| 558 EXPECT_EQ(tile_count, new_content_tiles.size()); | 552 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 559 EXPECT_EQ(all_tiles, new_content_tiles); | 553 EXPECT_EQ(all_tiles, new_content_tiles); |
| 560 } | 554 } |
| 561 | 555 |
| 562 TEST_F(TileManagerTilePriorityQueueTest, | 556 TEST_F(TileManagerTilePriorityQueueTest, |
| 563 EvictionTilePriorityQueueWithOcclusion) { | 557 EvictionTilePriorityQueueWithOcclusion) { |
| 558 base::TimeTicks time_ticks; |
| 559 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 560 host_impl_.SetCurrentBeginFrameArgs( |
| 561 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 562 |
| 564 gfx::Size tile_size(102, 102); | 563 gfx::Size tile_size(102, 102); |
| 565 gfx::Size layer_bounds(1000, 1000); | 564 gfx::Size layer_bounds(1000, 1000); |
| 566 | 565 |
| 567 host_impl_.SetViewportSize(layer_bounds); | 566 host_impl_.SetViewportSize(layer_bounds); |
| 568 | 567 |
| 569 scoped_refptr<FakePicturePileImpl> pending_pile = | 568 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 570 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 569 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 571 SetupPendingTree(pending_pile); | 570 SetupPendingTree(pending_pile); |
| 572 pending_layer_->CreateDefaultTilingsAndTiles(); | |
| 573 | 571 |
| 574 scoped_ptr<FakePictureLayerImpl> pending_child = | 572 scoped_ptr<FakePictureLayerImpl> pending_child = |
| 575 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), 2, | 573 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), 2, |
| 576 pending_pile); | 574 pending_pile); |
| 577 pending_layer_->AddChild(pending_child.Pass()); | 575 pending_layer_->AddChild(pending_child.Pass()); |
| 578 | 576 |
| 579 FakePictureLayerImpl* pending_child_layer = | 577 FakePictureLayerImpl* pending_child_layer = |
| 580 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); | 578 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); |
| 581 pending_child_layer->SetDrawsContent(true); | 579 pending_child_layer->SetDrawsContent(true); |
| 582 pending_child_layer->CreateDefaultTilingsAndTiles(); | 580 |
| 581 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 582 host_impl_.SetCurrentBeginFrameArgs( |
| 583 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 584 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 583 | 585 |
| 584 std::set<Tile*> all_tiles; | 586 std::set<Tile*> all_tiles; |
| 585 size_t tile_count = 0; | 587 size_t tile_count = 0; |
| 586 RasterTilePriorityQueue raster_queue; | 588 RasterTilePriorityQueue raster_queue; |
| 587 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); | 589 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); |
| 588 while (!raster_queue.IsEmpty()) { | 590 while (!raster_queue.IsEmpty()) { |
| 589 ++tile_count; | 591 ++tile_count; |
| 590 EXPECT_TRUE(raster_queue.Top()); | 592 EXPECT_TRUE(raster_queue.Top()); |
| 591 all_tiles.insert(raster_queue.Top()); | 593 all_tiles.insert(raster_queue.Top()); |
| 592 raster_queue.Pop(); | 594 raster_queue.Pop(); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 last_tile = tile; | 671 last_tile = tile; |
| 670 queue.Pop(); | 672 queue.Pop(); |
| 671 } | 673 } |
| 672 size_t expected_occluded_count = | 674 size_t expected_occluded_count = |
| 673 pending_child_high_res_tiles.size() + pending_child_low_res_tiles.size(); | 675 pending_child_high_res_tiles.size() + pending_child_low_res_tiles.size(); |
| 674 EXPECT_EQ(expected_occluded_count, occluded_count); | 676 EXPECT_EQ(expected_occluded_count, occluded_count); |
| 675 } | 677 } |
| 676 | 678 |
| 677 TEST_F(TileManagerTilePriorityQueueTest, | 679 TEST_F(TileManagerTilePriorityQueueTest, |
| 678 EvictionTilePriorityQueueWithTransparentLayer) { | 680 EvictionTilePriorityQueueWithTransparentLayer) { |
| 681 base::TimeTicks time_ticks; |
| 682 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 683 host_impl_.SetCurrentBeginFrameArgs( |
| 684 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 685 |
| 679 gfx::Size tile_size(102, 102); | 686 gfx::Size tile_size(102, 102); |
| 680 gfx::Size layer_bounds(1000, 1000); | 687 gfx::Size layer_bounds(1000, 1000); |
| 681 | 688 |
| 682 scoped_refptr<FakePicturePileImpl> pending_pile = | 689 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 683 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 690 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 684 SetupPendingTree(pending_pile); | 691 SetupPendingTree(pending_pile); |
| 685 pending_layer_->CreateDefaultTilingsAndTiles(); | |
| 686 | 692 |
| 687 scoped_ptr<FakePictureLayerImpl> pending_child = | 693 scoped_ptr<FakePictureLayerImpl> pending_child = |
| 688 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), 2, | 694 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), 2, |
| 689 pending_pile); | 695 pending_pile); |
| 696 FakePictureLayerImpl* pending_child_layer = pending_child.get(); |
| 690 pending_layer_->AddChild(pending_child.Pass()); | 697 pending_layer_->AddChild(pending_child.Pass()); |
| 691 | 698 |
| 692 // Create a fully transparent child layer so that its tile priorities are not | 699 // Create a fully transparent child layer so that its tile priorities are not |
| 693 // considered to be valid. | 700 // considered to be valid. |
| 694 FakePictureLayerImpl* pending_child_layer = | |
| 695 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); | |
| 696 pending_child_layer->SetDrawsContent(true); | 701 pending_child_layer->SetDrawsContent(true); |
| 697 pending_child_layer->CreateDefaultTilingsAndTiles(); | 702 |
| 703 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 704 host_impl_.SetCurrentBeginFrameArgs( |
| 705 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 706 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 707 |
| 698 pending_child_layer->SetOpacity(0.0); | 708 pending_child_layer->SetOpacity(0.0); |
| 699 pending_child_layer->layer_tree_impl()->UpdateDrawProperties(); | 709 |
| 710 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 711 host_impl_.SetCurrentBeginFrameArgs( |
| 712 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 713 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 700 | 714 |
| 701 // Renew all of the tile priorities. | 715 // Renew all of the tile priorities. |
| 702 gfx::Rect viewport(layer_bounds); | 716 gfx::Rect viewport(layer_bounds); |
| 703 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, | 717 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, |
| 704 Occlusion()); | 718 Occlusion()); |
| 705 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, | 719 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, |
| 706 Occlusion()); | 720 Occlusion()); |
| 707 pending_child_layer->HighResTiling()->ComputeTilePriorityRects( | 721 pending_child_layer->HighResTiling()->ComputeTilePriorityRects( |
| 708 viewport, 1.0f, 1.0, Occlusion()); | 722 viewport, 1.0f, 1.0, Occlusion()); |
| 709 pending_child_layer->LowResTiling()->ComputeTilePriorityRects( | 723 pending_child_layer->LowResTiling()->ComputeTilePriorityRects( |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 769 } | 783 } |
| 770 EXPECT_EQ(tile_count, new_content_tiles.size()); | 784 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 771 EXPECT_EQ(all_tiles, new_content_tiles); | 785 EXPECT_EQ(all_tiles, new_content_tiles); |
| 772 } | 786 } |
| 773 | 787 |
| 774 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { | 788 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { |
| 775 const gfx::Size layer_bounds(1000, 1000); | 789 const gfx::Size layer_bounds(1000, 1000); |
| 776 host_impl_.SetViewportSize(layer_bounds); | 790 host_impl_.SetViewportSize(layer_bounds); |
| 777 SetupDefaultTrees(layer_bounds); | 791 SetupDefaultTrees(layer_bounds); |
| 778 | 792 |
| 779 active_layer_->CreateDefaultTilingsAndTiles(); | |
| 780 pending_layer_->CreateDefaultTilingsAndTiles(); | |
| 781 | |
| 782 RasterTilePriorityQueue queue; | 793 RasterTilePriorityQueue queue; |
| 783 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); | 794 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); |
| 784 EXPECT_FALSE(queue.IsEmpty()); | 795 EXPECT_FALSE(queue.IsEmpty()); |
| 785 | 796 |
| 786 size_t tile_count = 0; | 797 size_t tile_count = 0; |
| 787 std::set<Tile*> all_tiles; | 798 std::set<Tile*> all_tiles; |
| 788 while (!queue.IsEmpty()) { | 799 while (!queue.IsEmpty()) { |
| 789 EXPECT_TRUE(queue.Top()); | 800 EXPECT_TRUE(queue.Top()); |
| 790 all_tiles.insert(queue.Top()); | 801 all_tiles.insert(queue.Top()); |
| 791 ++tile_count; | 802 ++tile_count; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 817 } | 828 } |
| 818 EXPECT_EQ(tile_count, all_tiles.size()); | 829 EXPECT_EQ(tile_count, all_tiles.size()); |
| 819 EXPECT_EQ(16u, tile_count); | 830 EXPECT_EQ(16u, tile_count); |
| 820 } | 831 } |
| 821 | 832 |
| 822 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { | 833 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { |
| 823 const gfx::Size layer_bounds(1000, 1000); | 834 const gfx::Size layer_bounds(1000, 1000); |
| 824 host_impl_.SetViewportSize(layer_bounds); | 835 host_impl_.SetViewportSize(layer_bounds); |
| 825 SetupDefaultTrees(layer_bounds); | 836 SetupDefaultTrees(layer_bounds); |
| 826 | 837 |
| 827 active_layer_->CreateDefaultTilingsAndTiles(); | |
| 828 pending_layer_->CreateDefaultTilingsAndTiles(); | |
| 829 | |
| 830 RasterTilePriorityQueue raster_queue; | 838 RasterTilePriorityQueue raster_queue; |
| 831 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); | 839 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); |
| 832 EXPECT_FALSE(raster_queue.IsEmpty()); | 840 EXPECT_FALSE(raster_queue.IsEmpty()); |
| 833 | 841 |
| 834 size_t tile_count = 0; | 842 size_t tile_count = 0; |
| 835 std::set<Tile*> all_tiles; | 843 std::set<Tile*> all_tiles; |
| 836 while (!raster_queue.IsEmpty()) { | 844 while (!raster_queue.IsEmpty()) { |
| 837 EXPECT_TRUE(raster_queue.Top()); | 845 EXPECT_TRUE(raster_queue.Top()); |
| 838 all_tiles.insert(raster_queue.Top()); | 846 all_tiles.insert(raster_queue.Top()); |
| 839 ++tile_count; | 847 ++tile_count; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 864 all_tiles.insert(queue.Top()); | 872 all_tiles.insert(queue.Top()); |
| 865 ++tile_count; | 873 ++tile_count; |
| 866 queue.Pop(); | 874 queue.Pop(); |
| 867 } | 875 } |
| 868 EXPECT_EQ(tile_count, all_tiles.size()); | 876 EXPECT_EQ(tile_count, all_tiles.size()); |
| 869 EXPECT_EQ(16u, tile_count); | 877 EXPECT_EQ(16u, tile_count); |
| 870 } | 878 } |
| 871 | 879 |
| 872 } // namespace | 880 } // namespace |
| 873 } // namespace cc | 881 } // namespace cc |
| OLD | NEW |