Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 819643004: Cache viewport rect for tile priority in UpdateTiles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cache the return value of GetViewportForTilePriorityInContentSpace Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 viewport, 420 viewport,
421 viewport_rect_for_tile_priority, 421 viewport_rect_for_tile_priority,
422 transform_for_tile_priority, 422 transform_for_tile_priority,
423 resourceless_software_draw); 423 resourceless_software_draw);
424 host_impl_.active_tree()->UpdateDrawProperties(); 424 host_impl_.active_tree()->UpdateDrawProperties();
425 425
426 gfx::Rect viewport_rect_for_tile_priority_in_view_space = 426 gfx::Rect viewport_rect_for_tile_priority_in_view_space =
427 viewport_rect_for_tile_priority; 427 viewport_rect_for_tile_priority;
428 428
429 // Verify the viewport rect for tile priority is used in picture layer tiling. 429 // Verify the viewport rect for tile priority is used in picture layer tiling.
430 EXPECT_EQ(viewport_rect_for_tile_priority_in_view_space, 430 EXPECT_EQ(
431 active_layer_->GetViewportForTilePriorityInContentSpace()); 431 viewport_rect_for_tile_priority_in_view_space,
432 active_layer_->GetViewportForTilePriorityInContentSpaceForTesting());
432 PictureLayerTilingSet* tilings = active_layer_->tilings(); 433 PictureLayerTilingSet* tilings = active_layer_->tilings();
433 for (size_t i = 0; i < tilings->num_tilings(); i++) { 434 for (size_t i = 0; i < tilings->num_tilings(); i++) {
434 PictureLayerTiling* tiling = tilings->tiling_at(i); 435 PictureLayerTiling* tiling = tilings->tiling_at(i);
435 EXPECT_EQ( 436 EXPECT_EQ(
436 tiling->GetCurrentVisibleRectForTesting(), 437 tiling->GetCurrentVisibleRectForTesting(),
437 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space, 438 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
438 tiling->contents_scale())); 439 tiling->contents_scale()));
439 } 440 }
440 441
441 // Update tiles with viewport for tile priority as (200, 200, 100, 100) in 442 // Update tiles with viewport for tile priority as (200, 200, 100, 100) in
(...skipping 20 matching lines...) Expand all
462 EXPECT_TRUE(success); 463 EXPECT_TRUE(success);
463 464
464 // Note that we don't clip this to the layer bounds, since it is expected that 465 // Note that we don't clip this to the layer bounds, since it is expected that
465 // the rect will sometimes be outside of the layer bounds. If we clip to 466 // the rect will sometimes be outside of the layer bounds. If we clip to
466 // bounds, then tile priorities will end up being incorrect in cases of fully 467 // bounds, then tile priorities will end up being incorrect in cases of fully
467 // offscreen layer. 468 // offscreen layer.
468 viewport_rect_for_tile_priority_in_view_space = 469 viewport_rect_for_tile_priority_in_view_space =
469 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 470 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
470 screen_to_view, viewport_rect_for_tile_priority)); 471 screen_to_view, viewport_rect_for_tile_priority));
471 472
472 EXPECT_EQ(viewport_rect_for_tile_priority_in_view_space, 473 EXPECT_EQ(
473 active_layer_->GetViewportForTilePriorityInContentSpace()); 474 viewport_rect_for_tile_priority_in_view_space,
475 active_layer_->GetViewportForTilePriorityInContentSpaceForTesting());
474 tilings = active_layer_->tilings(); 476 tilings = active_layer_->tilings();
475 for (size_t i = 0; i < tilings->num_tilings(); i++) { 477 for (size_t i = 0; i < tilings->num_tilings(); i++) {
476 PictureLayerTiling* tiling = tilings->tiling_at(i); 478 PictureLayerTiling* tiling = tilings->tiling_at(i);
477 EXPECT_EQ( 479 EXPECT_EQ(
478 tiling->GetCurrentVisibleRectForTesting(), 480 tiling->GetCurrentVisibleRectForTesting(),
479 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space, 481 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
480 tiling->contents_scale())); 482 tiling->contents_scale()));
481 } 483 }
482 } 484 }
483 485
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 viewport, 559 viewport,
558 transform, 560 transform,
559 resourceless_software_draw); 561 resourceless_software_draw);
560 active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw); 562 active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
561 563
562 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, 564 EXPECT_TRANSFORMATION_MATRIX_EQ(transform,
563 active_layer_->screen_space_transform()); 565 active_layer_->screen_space_transform());
564 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); 566 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
565 } 567 }
566 568
569 TEST_F(PictureLayerImplTest, ViewportRectForTilePriorityIsCached) {
570 base::TimeTicks time_ticks;
571 time_ticks += base::TimeDelta::FromMilliseconds(1);
572 host_impl_.SetCurrentBeginFrameArgs(
573 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
574 gfx::Size tile_size(100, 100);
575 gfx::Size layer_bounds(400, 400);
576
577 scoped_refptr<FakePicturePileImpl> pending_pile =
578 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
579 scoped_refptr<FakePicturePileImpl> active_pile =
580 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
581
582 SetupTreesWithInvalidation(pending_pile, active_pile, Region());
583
584 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false);
585
586 time_ticks += base::TimeDelta::FromMilliseconds(200);
587 host_impl_.SetCurrentBeginFrameArgs(
588 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
589
590 bool resourceless_software_draw = false;
591 gfx::Rect viewport = gfx::Rect(layer_bounds);
592 gfx::Rect viewport_rect_for_tile_priority(0, 0, 100, 100);
593 gfx::Transform transform, transform_for_tile_priority;
594
595 host_impl_.SetExternalDrawConstraints(
596 transform, viewport, viewport, viewport_rect_for_tile_priority,
597 transform_for_tile_priority, resourceless_software_draw);
598 host_impl_.active_tree()->UpdateDrawProperties();
599
600 EXPECT_EQ(
601 viewport_rect_for_tile_priority,
602 active_layer_->GetViewportForTilePriorityInContentSpaceForTesting());
603
604 time_ticks += base::TimeDelta::FromMilliseconds(200);
605 host_impl_.SetCurrentBeginFrameArgs(
606 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
607
608 gfx::Rect another_viewport_rect_for_tile_priority(11, 11, 50, 50);
609 host_impl_.SetExternalDrawConstraints(
610 transform, viewport, viewport, another_viewport_rect_for_tile_priority,
611 transform_for_tile_priority, resourceless_software_draw);
612
613 // Didn't call UpdateDrawProperties yet. The viewport rect for tile priority
614 // should remain to be the previously cached value.
615 EXPECT_EQ(
616 viewport_rect_for_tile_priority,
617 active_layer_->GetViewportForTilePriorityInContentSpaceForTesting());
618 host_impl_.active_tree()->UpdateDrawProperties();
619
620 // Now the UpdateDrawProperties is called. The viewport rect for tile
621 // priority should be the latest value.
622 EXPECT_EQ(
623 another_viewport_rect_for_tile_priority,
624 active_layer_->GetViewportForTilePriorityInContentSpaceForTesting());
625 }
626
567 TEST_F(PictureLayerImplTest, ClonePartialInvalidation) { 627 TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
568 gfx::Size tile_size(100, 100); 628 gfx::Size tile_size(100, 100);
569 gfx::Size layer_bounds(400, 400); 629 gfx::Size layer_bounds(400, 400);
570 gfx::Rect layer_invalidation(150, 200, 30, 180); 630 gfx::Rect layer_invalidation(150, 200, 30, 180);
571 631
572 scoped_refptr<FakePicturePileImpl> pending_pile = 632 scoped_refptr<FakePicturePileImpl> pending_pile =
573 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 633 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
574 scoped_refptr<FakePicturePileImpl> active_pile = 634 scoped_refptr<FakePicturePileImpl> active_pile =
575 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 635 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
576 scoped_refptr<FakePicturePileImpl> lost_pile = 636 scoped_refptr<FakePicturePileImpl> lost_pile =
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 // external_viewport_for_tile_priority. 1734 // external_viewport_for_tile_priority.
1675 pending_layer_->draw_properties().visible_content_rect = visible_content_rect; 1735 pending_layer_->draw_properties().visible_content_rect = visible_content_rect;
1676 time_ticks += base::TimeDelta::FromMilliseconds(200); 1736 time_ticks += base::TimeDelta::FromMilliseconds(200);
1677 host_impl_.SetCurrentBeginFrameArgs( 1737 host_impl_.SetCurrentBeginFrameArgs(
1678 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 1738 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
1679 pending_layer_->UpdateTiles(Occlusion(), resourceless_software_draw); 1739 pending_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
1680 1740
1681 // Intersect the two rects. Any tile outside should not be required for 1741 // Intersect the two rects. Any tile outside should not be required for
1682 // activation. 1742 // activation.
1683 gfx::Rect viewport_for_tile_priority = 1743 gfx::Rect viewport_for_tile_priority =
1684 pending_layer_->GetViewportForTilePriorityInContentSpace(); 1744 pending_layer_->GetViewportForTilePriorityInContentSpaceForTesting();
1685 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect()); 1745 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect());
1686 1746
1687 int num_inside = 0; 1747 int num_inside = 0;
1688 int num_outside = 0; 1748 int num_outside = 0;
1689 for (PictureLayerTiling::CoverageIterator iter( 1749 for (PictureLayerTiling::CoverageIterator iter(
1690 pending_layer_->HighResTiling(), 1.f, gfx::Rect(layer_bounds)); 1750 pending_layer_->HighResTiling(), 1.f, gfx::Rect(layer_bounds));
1691 iter; ++iter) { 1751 iter; ++iter) {
1692 if (!*iter) 1752 if (!*iter)
1693 continue; 1753 continue;
1694 Tile* tile = *iter; 1754 Tile* tile = *iter;
(...skipping 3129 matching lines...) Expand 10 before | Expand all | Expand 10 after
4824 result = layer->CalculateTileSize(gfx::Size(447, 400)); 4884 result = layer->CalculateTileSize(gfx::Size(447, 400));
4825 EXPECT_EQ(result.width(), 448); 4885 EXPECT_EQ(result.width(), 448);
4826 EXPECT_EQ(result.height(), 448); 4886 EXPECT_EQ(result.height(), 448);
4827 result = layer->CalculateTileSize(gfx::Size(500, 499)); 4887 result = layer->CalculateTileSize(gfx::Size(500, 499));
4828 EXPECT_EQ(result.width(), 512); 4888 EXPECT_EQ(result.width(), 512);
4829 EXPECT_EQ(result.height(), 500 + 2); 4889 EXPECT_EQ(result.height(), 500 + 2);
4830 } 4890 }
4831 4891
4832 } // namespace 4892 } // namespace
4833 } // namespace cc 4893 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698