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 |