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

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

Issue 1591513002: cc: Early out of UpdateTiles for resoureceless draw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix perftests Created 4 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
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/test/fake_picture_layer_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 260
261 pending_layer_ = static_cast<FakePictureLayerImpl*>( 261 pending_layer_ = static_cast<FakePictureLayerImpl*>(
262 host_impl_.pending_tree()->LayerById(id_)); 262 host_impl_.pending_tree()->LayerById(id_));
263 263
264 // Add tilings/tiles for the layer. 264 // Add tilings/tiles for the layer.
265 bool update_lcd_text = false; 265 bool update_lcd_text = false;
266 RebuildPropertyTreesOnPendingTree(); 266 RebuildPropertyTreesOnPendingTree();
267 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 267 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
268 } 268 }
269 269
270 void SetupDrawPropertiesAndUpdateTiles( 270 void SetupDrawProperties(FakePictureLayerImpl* layer,
271 FakePictureLayerImpl* layer, 271 float ideal_contents_scale,
272 float ideal_contents_scale, 272 float device_scale_factor,
273 float device_scale_factor, 273 float page_scale_factor,
274 float page_scale_factor, 274 float maximum_animation_contents_scale,
275 float maximum_animation_contents_scale, 275 float starting_animation_contents_scale,
276 float starting_animation_contents_scale, 276 bool animating_transform_to_screen) {
277 bool animating_transform_to_screen) {
278 layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); 277 layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor);
279 host_impl_.active_tree()->SetPageScaleOnActiveTree(page_scale_factor); 278 host_impl_.active_tree()->SetPageScaleOnActiveTree(page_scale_factor);
280 279
281 gfx::Transform scale_transform; 280 gfx::Transform scale_transform;
282 scale_transform.Scale(ideal_contents_scale, ideal_contents_scale); 281 scale_transform.Scale(ideal_contents_scale, ideal_contents_scale);
283 layer->draw_properties().target_space_transform = scale_transform; 282 layer->draw_properties().target_space_transform = scale_transform;
284 DCHECK_EQ(layer->GetIdealContentsScale(), ideal_contents_scale); 283 DCHECK_EQ(layer->GetIdealContentsScale(), ideal_contents_scale);
285 layer->draw_properties().maximum_animation_contents_scale = 284 layer->draw_properties().maximum_animation_contents_scale =
286 maximum_animation_contents_scale; 285 maximum_animation_contents_scale;
287 layer->draw_properties().starting_animation_contents_scale = 286 layer->draw_properties().starting_animation_contents_scale =
288 starting_animation_contents_scale; 287 starting_animation_contents_scale;
289 layer->draw_properties().screen_space_transform_is_animating = 288 layer->draw_properties().screen_space_transform_is_animating =
290 animating_transform_to_screen; 289 animating_transform_to_screen;
291 bool resourceless_software_draw = false;
292 layer->UpdateTiles(resourceless_software_draw);
293 } 290 }
291
292 void SetupDrawPropertiesAndUpdateTiles(
293 FakePictureLayerImpl* layer,
294 float ideal_contents_scale,
295 float device_scale_factor,
296 float page_scale_factor,
297 float maximum_animation_contents_scale,
298 float starting_animation_contents_scale,
299 bool animating_transform_to_screen) {
300 SetupDrawProperties(layer, ideal_contents_scale, device_scale_factor,
301 page_scale_factor, maximum_animation_contents_scale,
302 starting_animation_contents_scale,
303 animating_transform_to_screen);
304 layer->UpdateTiles();
305 }
306
294 static void VerifyAllPrioritizedTilesExistAndHaveRasterSource( 307 static void VerifyAllPrioritizedTilesExistAndHaveRasterSource(
295 const PictureLayerTiling* tiling, 308 const PictureLayerTiling* tiling,
296 DisplayListRasterSource* raster_source) { 309 DisplayListRasterSource* raster_source) {
297 auto prioritized_tiles = 310 auto prioritized_tiles =
298 tiling->UpdateAndGetAllPrioritizedTilesForTesting(); 311 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
299 for (PictureLayerTiling::CoverageIterator iter( 312 for (PictureLayerTiling::CoverageIterator iter(
300 tiling, 313 tiling,
301 tiling->contents_scale(), 314 tiling->contents_scale(),
302 gfx::Rect(tiling->tiling_size())); 315 gfx::Rect(tiling->tiling_size()));
303 iter; 316 iter;
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 tilings = active_layer_->tilings(); 552 tilings = active_layer_->tilings();
540 for (size_t i = 0; i < tilings->num_tilings(); i++) { 553 for (size_t i = 0; i < tilings->num_tilings(); i++) {
541 PictureLayerTiling* tiling = tilings->tiling_at(i); 554 PictureLayerTiling* tiling = tilings->tiling_at(i);
542 EXPECT_EQ( 555 EXPECT_EQ(
543 tiling->GetCurrentVisibleRectForTesting(), 556 tiling->GetCurrentVisibleRectForTesting(),
544 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space, 557 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
545 tiling->contents_scale())); 558 tiling->contents_scale()));
546 } 559 }
547 } 560 }
548 561
549 TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
550 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
551 gfx::Size layer_bounds(400, 400);
552 SetupDefaultTrees(layer_bounds);
553
554 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f,
555 false);
556
557 // UpdateTiles with valid viewport. Should update tile viewport.
558 // Note viewport is considered invalid if and only if in resourceless
559 // software draw.
560 bool resourceless_software_draw = false;
561 gfx::Rect viewport = gfx::Rect(layer_bounds);
562 gfx::Transform draw_transform;
563 gfx::Transform tile_priority_transform;
564 host_impl_.SetExternalTilePriorityConstraints(viewport,
565 tile_priority_transform);
566 active_layer_->draw_properties().visible_layer_rect = viewport;
567 active_layer_->draw_properties().screen_space_transform = draw_transform;
568 active_layer_->UpdateTiles(resourceless_software_draw);
569
570 gfx::Rect visible_rect_for_tile_priority =
571 active_layer_->visible_rect_for_tile_priority();
572 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
573 gfx::Transform screen_space_transform_for_tile_priority =
574 active_layer_->draw_properties().screen_space_transform;
575
576 // Expand viewport and set it as invalid for prioritizing tiles.
577 // Should update viewport and transform, but not update visible rect.
578 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
579 resourceless_software_draw = true;
580 viewport = gfx::ScaleToEnclosingRect(viewport, 2);
581 tile_priority_transform.Translate(1.f, 0.f);
582 draw_transform.Translate(0.f, 1.f);
583 active_layer_->draw_properties().visible_layer_rect = viewport;
584 active_layer_->draw_properties().screen_space_transform = draw_transform;
585 host_impl_.SetExternalTilePriorityConstraints(viewport,
586 tile_priority_transform);
587 active_layer_->UpdateTiles(resourceless_software_draw);
588
589 // Transform for tile priority is not updated.
590 EXPECT_TRANSFORMATION_MATRIX_EQ(
591 screen_space_transform_for_tile_priority,
592 active_layer_->screen_space_transform_for_tile_priority());
593 // Visible rect for tile priority retains old value.
594 EXPECT_EQ(visible_rect_for_tile_priority,
595 active_layer_->visible_rect_for_tile_priority());
596 ASSERT_GT(active_layer_->picture_layer_tiling_set()->num_tilings(), 0u);
597 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority_in_content_space(),
598 active_layer_->picture_layer_tiling_set()
599 ->tiling_at(0)
600 ->GetCurrentVisibleRectForTesting());
601
602 // Keep expanded viewport but mark it valid. Should update tile viewport.
603 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
604 resourceless_software_draw = false;
605 host_impl_.SetExternalTilePriorityConstraints(viewport,
606 tile_priority_transform);
607 active_layer_->UpdateTiles(resourceless_software_draw);
608
609 EXPECT_TRANSFORMATION_MATRIX_EQ(
610 draw_transform,
611 active_layer_->screen_space_transform_for_tile_priority());
612 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
613
614 gfx::RectF visible_rect_in_content_space(viewport);
615 gfx::Transform inverse_draw_transform;
616 gfx::Transform inverse_tile_priority_transform;
617 EXPECT_TRUE(draw_transform.GetInverse(&inverse_draw_transform));
618 EXPECT_TRUE(
619 tile_priority_transform.GetInverse(&inverse_tile_priority_transform));
620 visible_rect_in_content_space = MathUtil::ProjectClippedRect(
621 inverse_tile_priority_transform, visible_rect_in_content_space);
622 visible_rect_in_content_space = MathUtil::ProjectClippedRect(
623 inverse_draw_transform, visible_rect_in_content_space);
624
625 ASSERT_GT(active_layer_->picture_layer_tiling_set()->num_tilings(), 0u);
626 EXPECT_EQ(gfx::ToEnclosingRect(visible_rect_in_content_space),
627 active_layer_->picture_layer_tiling_set()
628 ->tiling_at(0)
629 ->GetCurrentVisibleRectForTesting());
630 }
631
632 TEST_F(PictureLayerImplTest, ViewportRectForTilePriorityIsCached) { 562 TEST_F(PictureLayerImplTest, ViewportRectForTilePriorityIsCached) {
633 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); 563 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
634 gfx::Size layer_bounds(400, 400); 564 gfx::Size layer_bounds(400, 400);
635 SetupDefaultTrees(layer_bounds); 565 SetupDefaultTrees(layer_bounds);
636 566
637 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, 567 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f,
638 false); 568 false);
639 569
640 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); 570 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
641 571
(...skipping 1162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 // tilings. 1734 // tilings.
1805 ActivateTree(); 1735 ActivateTree();
1806 EXPECT_TRUE(active_layer_->CanHaveTilings()); 1736 EXPECT_TRUE(active_layer_->CanHaveTilings());
1807 EXPECT_GT(active_layer_->ideal_contents_scale(), 0.f); 1737 EXPECT_GT(active_layer_->ideal_contents_scale(), 0.f);
1808 } 1738 }
1809 1739
1810 TEST_F(NoLowResPictureLayerImplTest, MarkRequiredOffscreenTiles) { 1740 TEST_F(NoLowResPictureLayerImplTest, MarkRequiredOffscreenTiles) {
1811 gfx::Size layer_bounds(200, 200); 1741 gfx::Size layer_bounds(200, 200);
1812 1742
1813 gfx::Transform transform; 1743 gfx::Transform transform;
1814 bool resourceless_software_draw = false;
1815 gfx::Rect viewport(0, 0, 100, 200); 1744 gfx::Rect viewport(0, 0, 100, 200);
1816 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); 1745 host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
1817 1746
1818 scoped_refptr<FakeDisplayListRasterSource> pending_raster_source = 1747 scoped_refptr<FakeDisplayListRasterSource> pending_raster_source =
1819 FakeDisplayListRasterSource::CreateFilled(layer_bounds); 1748 FakeDisplayListRasterSource::CreateFilled(layer_bounds);
1820 SetupPendingTreeWithFixedTileSize(pending_raster_source, gfx::Size(100, 100), 1749 SetupPendingTreeWithFixedTileSize(pending_raster_source, gfx::Size(100, 100),
1821 Region()); 1750 Region());
1822 1751
1823 EXPECT_EQ(1u, pending_layer_->num_tilings()); 1752 EXPECT_EQ(1u, pending_layer_->num_tilings());
1824 EXPECT_EQ(viewport, 1753 EXPECT_EQ(viewport,
1825 pending_layer_->viewport_rect_for_tile_priority_in_content_space()); 1754 pending_layer_->viewport_rect_for_tile_priority_in_content_space());
1826 1755
1827 base::TimeTicks time_ticks; 1756 base::TimeTicks time_ticks;
1828 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); 1757 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
1829 pending_layer_->UpdateTiles(resourceless_software_draw); 1758 pending_layer_->UpdateTiles();
1830 1759
1831 int num_visible = 0; 1760 int num_visible = 0;
1832 int num_offscreen = 0; 1761 int num_offscreen = 0;
1833 1762
1834 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll( 1763 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll(
1835 pending_layer_->picture_layer_tiling_set(), false)); 1764 pending_layer_->picture_layer_tiling_set(), false));
1836 for (; !queue->IsEmpty(); queue->Pop()) { 1765 for (; !queue->IsEmpty(); queue->Pop()) {
1837 const PrioritizedTile& prioritized_tile = queue->Top(); 1766 const PrioritizedTile& prioritized_tile = queue->Top();
1838 DCHECK(prioritized_tile.tile()); 1767 DCHECK(prioritized_tile.tile());
1839 if (prioritized_tile.priority().distance_to_visible == 0.f) { 1768 if (prioritized_tile.priority().distance_to_visible == 0.f) {
(...skipping 20 matching lines...) Expand all
1860 1789
1861 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region()); 1790 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
1862 1791
1863 ASSERT_EQ(1u, pending_layer_->num_tilings()); 1792 ASSERT_EQ(1u, pending_layer_->num_tilings());
1864 ASSERT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale()); 1793 ASSERT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale());
1865 1794
1866 // Set external viewport for tile priority. 1795 // Set external viewport for tile priority.
1867 gfx::Rect viewport = gfx::Rect(layer_bounds); 1796 gfx::Rect viewport = gfx::Rect(layer_bounds);
1868 gfx::Transform transform; 1797 gfx::Transform transform;
1869 gfx::Transform transform_for_tile_priority; 1798 gfx::Transform transform_for_tile_priority;
1870 bool resourceless_software_draw = false;
1871 host_impl_.SetExternalTilePriorityConstraints( 1799 host_impl_.SetExternalTilePriorityConstraints(
1872 external_viewport_for_tile_priority, transform_for_tile_priority); 1800 external_viewport_for_tile_priority, transform_for_tile_priority);
1873 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); 1801 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
1874 bool update_lcd_text = false; 1802 bool update_lcd_text = false;
1875 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 1803 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
1876 1804
1877 // Set visible content rect that is different from 1805 // Set visible content rect that is different from
1878 // external_viewport_for_tile_priority. 1806 // external_viewport_for_tile_priority.
1879 pending_layer_->draw_properties().visible_layer_rect = visible_layer_rect; 1807 pending_layer_->draw_properties().visible_layer_rect = visible_layer_rect;
1880 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); 1808 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
1881 pending_layer_->UpdateTiles(resourceless_software_draw); 1809 pending_layer_->UpdateTiles();
1882 1810
1883 // Intersect the two rects. Any tile outside should not be required for 1811 // Intersect the two rects. Any tile outside should not be required for
1884 // activation. 1812 // activation.
1885 gfx::Rect viewport_for_tile_priority = 1813 gfx::Rect viewport_for_tile_priority =
1886 pending_layer_->viewport_rect_for_tile_priority_in_content_space(); 1814 pending_layer_->viewport_rect_for_tile_priority_in_content_space();
1887 viewport_for_tile_priority.Intersect(pending_layer_->visible_layer_rect()); 1815 viewport_for_tile_priority.Intersect(pending_layer_->visible_layer_rect());
1888 1816
1889 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty()); 1817 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty());
1890 1818
1891 int num_inside = 0; 1819 int num_inside = 0;
(...skipping 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after
3100 3028
3101 // All of the high res tiles should be required for activation, since there is 3029 // All of the high res tiles should be required for activation, since there is
3102 // no active twin. 3030 // no active twin.
3103 EXPECT_EQ(high_res_now_tiles, required_for_activation_count); 3031 EXPECT_EQ(high_res_now_tiles, required_for_activation_count);
3104 3032
3105 // No NOW tiles. 3033 // No NOW tiles.
3106 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); 3034 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
3107 3035
3108 pending_layer_->draw_properties().visible_layer_rect = 3036 pending_layer_->draw_properties().visible_layer_rect =
3109 gfx::Rect(1100, 1100, 500, 500); 3037 gfx::Rect(1100, 1100, 500, 500);
3110 bool resourceless_software_draw = false; 3038 pending_layer_->UpdateTiles();
3111 pending_layer_->UpdateTiles(resourceless_software_draw);
3112 3039
3113 unique_tiles.clear(); 3040 unique_tiles.clear();
3114 high_res_tile_count = 0u; 3041 high_res_tile_count = 0u;
3115 queue.reset(new TilingSetRasterQueueAll( 3042 queue.reset(new TilingSetRasterQueueAll(
3116 pending_layer_->picture_layer_tiling_set(), false)); 3043 pending_layer_->picture_layer_tiling_set(), false));
3117 while (!queue->IsEmpty()) { 3044 while (!queue->IsEmpty()) {
3118 PrioritizedTile prioritized_tile = queue->Top(); 3045 PrioritizedTile prioritized_tile = queue->Top();
3119 TilePriority priority = prioritized_tile.priority(); 3046 TilePriority priority = prioritized_tile.priority();
3120 3047
3121 EXPECT_TRUE(prioritized_tile.tile()); 3048 EXPECT_TRUE(prioritized_tile.tile());
3122 3049
3123 // Non-high res tiles only get visible tiles. 3050 // Non-high res tiles only get visible tiles.
3124 EXPECT_EQ(HIGH_RESOLUTION, priority.resolution); 3051 EXPECT_EQ(HIGH_RESOLUTION, priority.resolution);
3125 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 3052 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
3126 3053
3127 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; 3054 high_res_tile_count += priority.resolution == HIGH_RESOLUTION;
3128 3055
3129 unique_tiles.insert(prioritized_tile.tile()); 3056 unique_tiles.insert(prioritized_tile.tile());
3130 queue->Pop(); 3057 queue->Pop();
3131 } 3058 }
3132 3059
3133 EXPECT_EQ(16, high_res_tile_count); 3060 EXPECT_EQ(16, high_res_tile_count);
3134 EXPECT_EQ(high_res_tile_count, static_cast<int>(unique_tiles.size())); 3061 EXPECT_EQ(high_res_tile_count, static_cast<int>(unique_tiles.size()));
3135 3062
3136 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); 3063 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
3137 3064
3138 pending_layer_->draw_properties().visible_layer_rect = 3065 pending_layer_->draw_properties().visible_layer_rect =
3139 gfx::Rect(0, 0, 500, 500); 3066 gfx::Rect(0, 0, 500, 500);
3140 pending_layer_->UpdateTiles(resourceless_software_draw); 3067 pending_layer_->UpdateTiles();
3141 3068
3142 std::vector<Tile*> high_res_tiles = 3069 std::vector<Tile*> high_res_tiles =
3143 pending_layer_->HighResTiling()->AllTilesForTesting(); 3070 pending_layer_->HighResTiling()->AllTilesForTesting();
3144 for (std::vector<Tile*>::iterator tile_it = high_res_tiles.begin(); 3071 for (std::vector<Tile*>::iterator tile_it = high_res_tiles.begin();
3145 tile_it != high_res_tiles.end(); 3072 tile_it != high_res_tiles.end();
3146 ++tile_it) { 3073 ++tile_it) {
3147 Tile* tile = *tile_it; 3074 Tile* tile = *tile_it;
3148 TileDrawInfo& draw_info = tile->draw_info(); 3075 TileDrawInfo& draw_info = tile->draw_info();
3149 draw_info.SetSolidColorForTesting(SK_ColorRED); 3076 draw_info.SetSolidColorForTesting(SK_ColorRED);
3150 } 3077 }
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
3662 // need content in order to activate. 3589 // need content in order to activate.
3663 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting(); 3590 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
3664 if (host_impl_.settings().create_low_res_tiling) 3591 if (host_impl_.settings().create_low_res_tiling)
3665 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting(); 3592 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
3666 3593
3667 AssertNoTilesRequired(pending_layer_->HighResTiling()); 3594 AssertNoTilesRequired(pending_layer_->HighResTiling());
3668 if (host_impl_.settings().create_low_res_tiling) 3595 if (host_impl_.settings().create_low_res_tiling)
3669 AssertNoTilesRequired(pending_layer_->LowResTiling()); 3596 AssertNoTilesRequired(pending_layer_->LowResTiling());
3670 } 3597 }
3671 3598
3672 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
3673 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
3674 gfx::Size layer_bounds(400, 400);
3675 SetupDefaultTrees(layer_bounds);
3676
3677 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f,
3678 false);
3679
3680 // UpdateTiles with valid viewport. Should update tile viewport.
3681 // Note viewport is considered invalid if and only if in resourceless
3682 // software draw.
3683 bool resourceless_software_draw = false;
3684 gfx::Rect viewport = gfx::Rect(layer_bounds);
3685 gfx::Transform transform;
3686 host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
3687 active_layer_->draw_properties().visible_layer_rect = viewport;
3688 active_layer_->draw_properties().screen_space_transform = transform;
3689 active_layer_->UpdateTiles(resourceless_software_draw);
3690
3691 gfx::Rect visible_rect_for_tile_priority =
3692 active_layer_->visible_rect_for_tile_priority();
3693 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
3694 gfx::Transform screen_space_transform_for_tile_priority =
3695 active_layer_->draw_properties().screen_space_transform;
3696
3697 // Expand viewport and set it as invalid for prioritizing tiles.
3698 // Should update viewport and transform, but not update visible rect.
3699 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
3700 resourceless_software_draw = true;
3701 viewport = gfx::ScaleToEnclosingRect(viewport, 2);
3702 transform.Translate(1.f, 1.f);
3703 active_layer_->draw_properties().visible_layer_rect = viewport;
3704 active_layer_->draw_properties().screen_space_transform = transform;
3705 host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
3706 active_layer_->UpdateTiles(resourceless_software_draw);
3707
3708 // Transform for tile priority is updated.
3709 EXPECT_TRANSFORMATION_MATRIX_EQ(
3710 transform, active_layer_->draw_properties().screen_space_transform);
3711 // Visible rect for tile priority retains old value.
3712 EXPECT_EQ(visible_rect_for_tile_priority,
3713 active_layer_->visible_rect_for_tile_priority());
3714
3715 // Keep expanded viewport but mark it valid. Should update tile viewport.
3716 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
3717 resourceless_software_draw = false;
3718 host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
3719 active_layer_->UpdateTiles(resourceless_software_draw);
3720
3721 EXPECT_TRANSFORMATION_MATRIX_EQ(
3722 transform, active_layer_->draw_properties().screen_space_transform);
3723 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
3724 }
3725
3726 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) { 3599 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) {
3727 gfx::Size layer_bounds(1300, 1900); 3600 gfx::Size layer_bounds(1300, 1900);
3728 std::vector<PictureLayerTiling*> used_tilings; 3601 std::vector<PictureLayerTiling*> used_tilings;
3729 SetupDefaultTrees(layer_bounds); 3602 SetupDefaultTrees(layer_bounds);
3730 3603
3731 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; 3604 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor;
3732 EXPECT_LT(low_res_factor, 1.f); 3605 EXPECT_LT(low_res_factor, 1.f);
3733 3606
3734 float device_scale = 1.7f; 3607 float device_scale = 1.7f;
3735 float page_scale = 3.2f; 3608 float page_scale = 3.2f;
(...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after
5116 // New low res tiling. 4989 // New low res tiling.
5117 EXPECT_TRUE(tilings->tiling_at(2)->may_contain_low_resolution_tiles()); 4990 EXPECT_TRUE(tilings->tiling_at(2)->may_contain_low_resolution_tiles());
5118 4991
5119 // This tiling will be high res now, it won't contain low res content since it 4992 // This tiling will be high res now, it won't contain low res content since it
5120 // was all destroyed. 4993 // was all destroyed.
5121 EXPECT_FALSE(tilings->tiling_at(1)->may_contain_low_resolution_tiles()); 4994 EXPECT_FALSE(tilings->tiling_at(1)->may_contain_low_resolution_tiles());
5122 } 4995 }
5123 4996
5124 } // namespace 4997 } // namespace
5125 } // namespace cc 4998 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/test/fake_picture_layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698