Chromium Code Reviews| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 2420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2431 SetupTrees(pending_pile, active_pile); | 2431 SetupTrees(pending_pile, active_pile); |
| 2432 | 2432 |
| 2433 EXPECT_TRUE(pending_layer_->tilings()->FindTilingWithScale(1.f)); | 2433 EXPECT_TRUE(pending_layer_->tilings()->FindTilingWithScale(1.f)); |
| 2434 EXPECT_TRUE(active_layer_->tilings()->FindTilingWithScale(1.f)); | 2434 EXPECT_TRUE(active_layer_->tilings()->FindTilingWithScale(1.f)); |
| 2435 | 2435 |
| 2436 // Gpu rasterization is disabled by default. | 2436 // Gpu rasterization is disabled by default. |
| 2437 EXPECT_FALSE(host_impl_.use_gpu_rasterization()); | 2437 EXPECT_FALSE(host_impl_.use_gpu_rasterization()); |
| 2438 // Toggling the gpu rasterization clears all tilings on both trees. | 2438 // Toggling the gpu rasterization clears all tilings on both trees. |
| 2439 host_impl_.set_has_gpu_rasterization_trigger(true); | 2439 host_impl_.set_has_gpu_rasterization_trigger(true); |
| 2440 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); | 2440 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); |
| 2441 host_impl_.UpdateGpuRasterizationStatus(); | 2441 host_impl_.UpdateTreeResourcesIfNeeded(); |
| 2442 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); | 2442 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
| 2443 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); | 2443 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
| 2444 | 2444 |
| 2445 // Make sure that we can still add tiling to the pending layer, | 2445 // Make sure that we can still add tiling to the pending layer, |
| 2446 // that gets synced to the active layer. | 2446 // that gets synced to the active layer. |
| 2447 time_ticks += base::TimeDelta::FromMilliseconds(1); | 2447 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 2448 host_impl_.SetCurrentBeginFrameArgs( | 2448 host_impl_.SetCurrentBeginFrameArgs( |
| 2449 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); | 2449 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 2450 bool update_lcd_text = false; | 2450 bool update_lcd_text = false; |
| 2451 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); | 2451 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); |
| 2452 EXPECT_TRUE(pending_layer_->tilings()->FindTilingWithScale(1.f)); | 2452 EXPECT_TRUE(pending_layer_->tilings()->FindTilingWithScale(1.f)); |
| 2453 | 2453 |
| 2454 ActivateTree(); | 2454 ActivateTree(); |
| 2455 EXPECT_TRUE(active_layer_->tilings()->FindTilingWithScale(1.f)); | 2455 EXPECT_TRUE(active_layer_->tilings()->FindTilingWithScale(1.f)); |
| 2456 | 2456 |
| 2457 SetupPendingTree(pending_pile); | 2457 SetupPendingTree(pending_pile); |
| 2458 EXPECT_TRUE(pending_layer_->tilings()->FindTilingWithScale(1.f)); | 2458 EXPECT_TRUE(pending_layer_->tilings()->FindTilingWithScale(1.f)); |
| 2459 | 2459 |
| 2460 // Toggling the gpu rasterization clears all tilings on both trees. | 2460 // Toggling the gpu rasterization clears all tilings on both trees. |
| 2461 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); | 2461 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); |
| 2462 host_impl_.set_has_gpu_rasterization_trigger(false); | 2462 host_impl_.set_has_gpu_rasterization_trigger(false); |
| 2463 host_impl_.UpdateGpuRasterizationStatus(); | 2463 host_impl_.UpdateTreeResourcesIfNeeded(); |
| 2464 EXPECT_EQ(GpuRasterizationStatus::OFF_VIEWPORT, | 2464 EXPECT_EQ(GpuRasterizationStatus::OFF_VIEWPORT, |
| 2465 host_impl_.gpu_rasterization_status()); | 2465 host_impl_.gpu_rasterization_status()); |
| 2466 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); | 2466 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
| 2467 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); | 2467 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
| 2468 | 2468 |
| 2469 host_impl_.set_has_gpu_rasterization_trigger(true); | 2469 host_impl_.set_has_gpu_rasterization_trigger(true); |
| 2470 host_impl_.set_content_is_suitable_for_gpu_rasterization(false); | 2470 host_impl_.set_content_is_suitable_for_gpu_rasterization(false); |
| 2471 host_impl_.UpdateGpuRasterizationStatus(); | |
| 2472 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT, | 2471 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT, |
| 2473 host_impl_.gpu_rasterization_status()); | 2472 host_impl_.gpu_rasterization_status()); |
| 2474 } | 2473 } |
| 2475 | 2474 |
| 2476 TEST_F(PictureLayerImplTest, HighResCreatedWhenBoundsShrink) { | 2475 TEST_F(PictureLayerImplTest, HighResCreatedWhenBoundsShrink) { |
| 2477 gfx::Size tile_size(100, 100); | 2476 gfx::Size tile_size(100, 100); |
| 2478 | 2477 |
| 2479 // Put 0.5 as high res. | 2478 // Put 0.5 as high res. |
| 2480 host_impl_.SetDeviceScaleFactor(0.5f); | 2479 host_impl_.SetDeviceScaleFactor(0.5f); |
| 2481 | 2480 |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 2507 pending_layer_->tilings()->FindTilingWithScale(1.0f); | 2506 pending_layer_->tilings()->FindTilingWithScale(1.0f); |
| 2508 ASSERT_TRUE(tiling); | 2507 ASSERT_TRUE(tiling); |
| 2509 EXPECT_EQ(HIGH_RESOLUTION, tiling->resolution()); | 2508 EXPECT_EQ(HIGH_RESOLUTION, tiling->resolution()); |
| 2510 } | 2509 } |
| 2511 | 2510 |
| 2512 TEST_F(PictureLayerImplTest, LowResTilingWithoutGpuRasterization) { | 2511 TEST_F(PictureLayerImplTest, LowResTilingWithoutGpuRasterization) { |
| 2513 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); | 2512 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); |
| 2514 gfx::Size layer_bounds(default_tile_size.width() * 4, | 2513 gfx::Size layer_bounds(default_tile_size.width() * 4, |
| 2515 default_tile_size.height() * 4); | 2514 default_tile_size.height() * 4); |
| 2516 | 2515 |
| 2517 host_impl_.set_has_gpu_rasterization_trigger(false); | 2516 host_impl_.set_has_gpu_rasterization_trigger(false); |
|
Stephen White
2015/05/13 19:44:17
Should we be calling UpdateTreeResourcesIfNeeded()
| |
| 2518 host_impl_.UpdateGpuRasterizationStatus(); | |
| 2519 | 2517 |
| 2520 SetupDefaultTrees(layer_bounds); | 2518 SetupDefaultTrees(layer_bounds); |
| 2521 EXPECT_FALSE(host_impl_.use_gpu_rasterization()); | 2519 EXPECT_FALSE(host_impl_.use_gpu_rasterization()); |
| 2522 // Should have a low-res and a high-res tiling. | 2520 // Should have a low-res and a high-res tiling. |
| 2523 EXPECT_EQ(2u, pending_layer_->tilings()->num_tilings()); | 2521 EXPECT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
| 2524 } | 2522 } |
| 2525 | 2523 |
| 2526 TEST_F(PictureLayerImplTest, NoLowResTilingWithGpuRasterization) { | 2524 TEST_F(PictureLayerImplTest, NoLowResTilingWithGpuRasterization) { |
| 2527 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); | 2525 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); |
| 2528 gfx::Size layer_bounds(default_tile_size.width() * 4, | 2526 gfx::Size layer_bounds(default_tile_size.width() * 4, |
| 2529 default_tile_size.height() * 4); | 2527 default_tile_size.height() * 4); |
| 2530 | 2528 |
| 2531 host_impl_.set_has_gpu_rasterization_trigger(true); | 2529 host_impl_.set_has_gpu_rasterization_trigger(true); |
| 2532 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); | 2530 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); |
|
Stephen White
2015/05/13 19:44:17
Same here?
| |
| 2533 host_impl_.UpdateGpuRasterizationStatus(); | |
| 2534 | 2531 |
| 2535 SetupDefaultTrees(layer_bounds); | 2532 SetupDefaultTrees(layer_bounds); |
| 2536 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); | 2533 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); |
| 2537 // Should only have the high-res tiling. | 2534 // Should only have the high-res tiling. |
| 2538 EXPECT_EQ(1u, pending_layer_->tilings()->num_tilings()); | 2535 EXPECT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
| 2539 } | 2536 } |
| 2540 | 2537 |
| 2541 TEST_F(PictureLayerImplTest, RequiredTilesWithGpuRasterization) { | 2538 TEST_F(PictureLayerImplTest, RequiredTilesWithGpuRasterization) { |
| 2542 host_impl_.set_has_gpu_rasterization_trigger(true); | 2539 host_impl_.set_has_gpu_rasterization_trigger(true); |
| 2543 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); | 2540 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); |
|
Stephen White
2015/05/13 19:44:17
Same here?
| |
| 2544 host_impl_.UpdateGpuRasterizationStatus(); | |
| 2545 | 2541 |
| 2546 gfx::Size viewport_size(1000, 1000); | 2542 gfx::Size viewport_size(1000, 1000); |
| 2547 host_impl_.SetViewportSize(viewport_size); | 2543 host_impl_.SetViewportSize(viewport_size); |
| 2548 | 2544 |
| 2549 gfx::Size layer_bounds(4000, 4000); | 2545 gfx::Size layer_bounds(4000, 4000); |
| 2550 SetupDefaultTrees(layer_bounds); | 2546 SetupDefaultTrees(layer_bounds); |
| 2551 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); | 2547 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); |
| 2552 | 2548 |
| 2553 // Should only have the high-res tiling. | 2549 // Should only have the high-res tiling. |
| 2554 EXPECT_EQ(1u, active_layer_->tilings()->num_tilings()); | 2550 EXPECT_EQ(1u, active_layer_->tilings()->num_tilings()); |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2836 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 11.f); | 2832 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 11.f); |
| 2837 } | 2833 } |
| 2838 | 2834 |
| 2839 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimationForGpuRasterization) { | 2835 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimationForGpuRasterization) { |
| 2840 gfx::Size layer_bounds(100, 100); | 2836 gfx::Size layer_bounds(100, 100); |
| 2841 gfx::Size viewport_size(1000, 1000); | 2837 gfx::Size viewport_size(1000, 1000); |
| 2842 SetupDefaultTrees(layer_bounds); | 2838 SetupDefaultTrees(layer_bounds); |
| 2843 host_impl_.SetViewportSize(viewport_size); | 2839 host_impl_.SetViewportSize(viewport_size); |
| 2844 host_impl_.set_has_gpu_rasterization_trigger(true); | 2840 host_impl_.set_has_gpu_rasterization_trigger(true); |
| 2845 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); | 2841 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); |
| 2846 host_impl_.UpdateGpuRasterizationStatus(); | 2842 host_impl_.UpdateTreeResourcesIfNeeded(); |
| 2847 | 2843 |
| 2848 float contents_scale = 1.f; | 2844 float contents_scale = 1.f; |
| 2849 float device_scale = 1.3f; | 2845 float device_scale = 1.3f; |
| 2850 float page_scale = 1.4f; | 2846 float page_scale = 1.4f; |
| 2851 float maximum_animation_scale = 1.f; | 2847 float maximum_animation_scale = 1.f; |
| 2852 float starting_animation_scale = 0.f; | 2848 float starting_animation_scale = 0.f; |
| 2853 bool animating_transform = false; | 2849 bool animating_transform = false; |
| 2854 | 2850 |
| 2855 SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale, | 2851 SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale, |
| 2856 maximum_animation_scale, | 2852 maximum_animation_scale, |
| (...skipping 2166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5023 | 5019 |
| 5024 LayerTreeImpl* pending_tree = host_impl_.pending_tree(); | 5020 LayerTreeImpl* pending_tree = host_impl_.pending_tree(); |
| 5025 scoped_ptr<FakePictureLayerImpl> layer = | 5021 scoped_ptr<FakePictureLayerImpl> layer = |
| 5026 FakePictureLayerImpl::Create(pending_tree, id_); | 5022 FakePictureLayerImpl::Create(pending_tree, id_); |
| 5027 | 5023 |
| 5028 host_impl_.SetViewportSize(gfx::Size(1000, 1000)); | 5024 host_impl_.SetViewportSize(gfx::Size(1000, 1000)); |
| 5029 gfx::Size result; | 5025 gfx::Size result; |
| 5030 | 5026 |
| 5031 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); | 5027 host_impl_.set_content_is_suitable_for_gpu_rasterization(true); |
| 5032 host_impl_.set_has_gpu_rasterization_trigger(false); | 5028 host_impl_.set_has_gpu_rasterization_trigger(false); |
| 5033 host_impl_.UpdateGpuRasterizationStatus(); | |
| 5034 EXPECT_EQ(host_impl_.gpu_rasterization_status(), | 5029 EXPECT_EQ(host_impl_.gpu_rasterization_status(), |
| 5035 GpuRasterizationStatus::OFF_VIEWPORT); | 5030 GpuRasterizationStatus::OFF_VIEWPORT); |
| 5036 | 5031 |
| 5037 // Default tile-size for large layers. | 5032 // Default tile-size for large layers. |
| 5038 result = layer->CalculateTileSize(gfx::Size(10000, 10000)); | 5033 result = layer->CalculateTileSize(gfx::Size(10000, 10000)); |
| 5039 EXPECT_EQ(result.width(), 100); | 5034 EXPECT_EQ(result.width(), 100); |
| 5040 EXPECT_EQ(result.height(), 100); | 5035 EXPECT_EQ(result.height(), 100); |
| 5041 // Don't tile and round-up, when under max_untiled_layer_size. | 5036 // Don't tile and round-up, when under max_untiled_layer_size. |
| 5042 result = layer->CalculateTileSize(gfx::Size(42, 42)); | 5037 result = layer->CalculateTileSize(gfx::Size(42, 42)); |
| 5043 EXPECT_EQ(result.width(), 64); | 5038 EXPECT_EQ(result.width(), 64); |
| 5044 EXPECT_EQ(result.height(), 64); | 5039 EXPECT_EQ(result.height(), 64); |
| 5045 result = layer->CalculateTileSize(gfx::Size(191, 191)); | 5040 result = layer->CalculateTileSize(gfx::Size(191, 191)); |
| 5046 EXPECT_EQ(result.width(), 192); | 5041 EXPECT_EQ(result.width(), 192); |
| 5047 EXPECT_EQ(result.height(), 192); | 5042 EXPECT_EQ(result.height(), 192); |
| 5048 result = layer->CalculateTileSize(gfx::Size(199, 199)); | 5043 result = layer->CalculateTileSize(gfx::Size(199, 199)); |
| 5049 EXPECT_EQ(result.width(), 200); | 5044 EXPECT_EQ(result.width(), 200); |
| 5050 EXPECT_EQ(result.height(), 200); | 5045 EXPECT_EQ(result.height(), 200); |
| 5051 | 5046 |
| 5052 // Gpu-rasterization uses 25% viewport-height tiles. | 5047 // Gpu-rasterization uses 25% viewport-height tiles. |
| 5053 // The +2's below are for border texels. | 5048 // The +2's below are for border texels. |
| 5054 host_impl_.set_has_gpu_rasterization_trigger(true); | 5049 host_impl_.set_has_gpu_rasterization_trigger(true); |
| 5055 host_impl_.UpdateGpuRasterizationStatus(); | |
| 5056 EXPECT_EQ(host_impl_.gpu_rasterization_status(), GpuRasterizationStatus::ON); | 5050 EXPECT_EQ(host_impl_.gpu_rasterization_status(), GpuRasterizationStatus::ON); |
| 5057 host_impl_.SetViewportSize(gfx::Size(2000, 2000)); | 5051 host_impl_.SetViewportSize(gfx::Size(2000, 2000)); |
| 5058 | 5052 |
| 5059 layer->set_gpu_raster_max_texture_size(host_impl_.device_viewport_size()); | 5053 layer->set_gpu_raster_max_texture_size(host_impl_.device_viewport_size()); |
| 5060 result = layer->CalculateTileSize(gfx::Size(10000, 10000)); | 5054 result = layer->CalculateTileSize(gfx::Size(10000, 10000)); |
| 5061 EXPECT_EQ(result.width(), 2000 + 2 * PictureLayerTiling::kBorderTexels); | 5055 EXPECT_EQ(result.width(), 2000 + 2 * PictureLayerTiling::kBorderTexels); |
| 5062 EXPECT_EQ(result.height(), 500 + 2); | 5056 EXPECT_EQ(result.height(), 500 + 2); |
| 5063 | 5057 |
| 5064 // Clamp and round-up, when smaller than viewport. | 5058 // Clamp and round-up, when smaller than viewport. |
| 5065 // Tile-height doubles to 50% when width shrinks to <= 50%. | 5059 // Tile-height doubles to 50% when width shrinks to <= 50%. |
| 5066 host_impl_.SetViewportSize(gfx::Size(1000, 1000)); | 5060 host_impl_.SetViewportSize(gfx::Size(1000, 1000)); |
| 5067 layer->set_gpu_raster_max_texture_size(host_impl_.device_viewport_size()); | 5061 layer->set_gpu_raster_max_texture_size(host_impl_.device_viewport_size()); |
| 5068 result = layer->CalculateTileSize(gfx::Size(447, 10000)); | 5062 result = layer->CalculateTileSize(gfx::Size(447, 10000)); |
| 5069 EXPECT_EQ(result.width(), 448); | 5063 EXPECT_EQ(result.width(), 448); |
| 5070 EXPECT_EQ(result.height(), 500 + 2); | 5064 EXPECT_EQ(result.height(), 500 + 2); |
| 5071 | 5065 |
| 5072 // Largest layer is 50% of viewport width (rounded up), and | 5066 // Largest layer is 50% of viewport width (rounded up), and |
| 5073 // 50% of viewport in height. | 5067 // 50% of viewport in height. |
| 5074 result = layer->CalculateTileSize(gfx::Size(447, 400)); | 5068 result = layer->CalculateTileSize(gfx::Size(447, 400)); |
| 5075 EXPECT_EQ(result.width(), 448); | 5069 EXPECT_EQ(result.width(), 448); |
| 5076 EXPECT_EQ(result.height(), 448); | 5070 EXPECT_EQ(result.height(), 448); |
| 5077 result = layer->CalculateTileSize(gfx::Size(500, 499)); | 5071 result = layer->CalculateTileSize(gfx::Size(500, 499)); |
| 5078 EXPECT_EQ(result.width(), 512); | 5072 EXPECT_EQ(result.width(), 512); |
| 5079 EXPECT_EQ(result.height(), 500 + 2); | 5073 EXPECT_EQ(result.height(), 500 + 2); |
| 5080 } | 5074 } |
| 5081 | 5075 |
| 5082 } // namespace | 5076 } // namespace |
| 5083 } // namespace cc | 5077 } // namespace cc |
| OLD | NEW |