| 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/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |