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

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

Issue 2253823002: cc: Remove all impl-side caps from RendererCapabilitiesImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@delete-renderer-base-class
Patch Set: renderercaps: ennereview Created 4 years, 4 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 | « no previous file | cc/output/delegating_renderer.cc » ('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>
11 #include <set> 11 #include <set>
12 #include <utility> 12 #include <utility>
13 13
14 #include "base/location.h" 14 #include "base/location.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
17 #include "cc/base/math_util.h" 17 #include "cc/base/math_util.h"
18 #include "cc/layers/append_quads_data.h" 18 #include "cc/layers/append_quads_data.h"
19 #include "cc/layers/picture_layer.h" 19 #include "cc/layers/picture_layer.h"
20 #include "cc/output/buffer_to_texture_target_map.h"
20 #include "cc/quads/draw_quad.h" 21 #include "cc/quads/draw_quad.h"
21 #include "cc/quads/tile_draw_quad.h" 22 #include "cc/quads/tile_draw_quad.h"
22 #include "cc/test/begin_frame_args_test.h" 23 #include "cc/test/begin_frame_args_test.h"
23 #include "cc/test/fake_content_layer_client.h" 24 #include "cc/test/fake_content_layer_client.h"
24 #include "cc/test/fake_impl_task_runner_provider.h" 25 #include "cc/test/fake_impl_task_runner_provider.h"
25 #include "cc/test/fake_layer_tree_host.h" 26 #include "cc/test/fake_layer_tree_host.h"
26 #include "cc/test/fake_layer_tree_host_client.h" 27 #include "cc/test/fake_layer_tree_host_client.h"
27 #include "cc/test/fake_layer_tree_host_impl.h" 28 #include "cc/test/fake_layer_tree_host_impl.h"
28 #include "cc/test/fake_output_surface.h" 29 #include "cc/test/fake_output_surface.h"
29 #include "cc/test/fake_picture_layer_impl.h" 30 #include "cc/test/fake_picture_layer_impl.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 host_impl()->SetViewportSize(gfx::Size(10000, 10000)); 90 host_impl()->SetViewportSize(gfx::Size(10000, 10000));
90 } 91 }
91 92
92 LayerTreeSettings CreateSettings() override { 93 LayerTreeSettings CreateSettings() override {
93 LayerTreeSettings settings; 94 LayerTreeSettings settings;
94 settings.gpu_rasterization_enabled = true; 95 settings.gpu_rasterization_enabled = true;
95 settings.layer_transforms_should_scale_layer_contents = true; 96 settings.layer_transforms_should_scale_layer_contents = true;
96 settings.create_low_res_tiling = true; 97 settings.create_low_res_tiling = true;
97 settings.verify_clip_tree_calculations = true; 98 settings.verify_clip_tree_calculations = true;
98 settings.verify_transform_tree_calculations = true; 99 settings.verify_transform_tree_calculations = true;
100 settings.renderer_settings.buffer_to_texture_target_map =
101 DefaultBufferToTextureTargetMapForTesting();
99 return settings; 102 return settings;
100 } 103 }
101 104
102 void SetupDefaultTreesWithFixedTileSize(const gfx::Size& layer_bounds, 105 void SetupDefaultTreesWithFixedTileSize(const gfx::Size& layer_bounds,
103 const gfx::Size& tile_size, 106 const gfx::Size& tile_size,
104 const Region& invalidation) { 107 const Region& invalidation) {
105 scoped_refptr<FakeRasterSource> pending_raster_source = 108 scoped_refptr<FakeRasterSource> pending_raster_source =
106 FakeRasterSource::CreateFilled(layer_bounds); 109 FakeRasterSource::CreateFilled(layer_bounds);
107 scoped_refptr<FakeRasterSource> active_raster_source = 110 scoped_refptr<FakeRasterSource> active_raster_source =
108 FakeRasterSource::CreateFilled(layer_bounds); 111 FakeRasterSource::CreateFilled(layer_bounds);
(...skipping 2210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 scoped_refptr<FakeRasterSource> active_raster_source = 2322 scoped_refptr<FakeRasterSource> active_raster_source =
2320 FakeRasterSource::CreateFilled(layer_bounds); 2323 FakeRasterSource::CreateFilled(layer_bounds);
2321 2324
2322 SetupTrees(pending_raster_source, active_raster_source); 2325 SetupTrees(pending_raster_source, active_raster_source);
2323 2326
2324 EXPECT_TRUE(pending_layer()->tilings()->FindTilingWithScale(1.f)); 2327 EXPECT_TRUE(pending_layer()->tilings()->FindTilingWithScale(1.f));
2325 EXPECT_TRUE(active_layer()->tilings()->FindTilingWithScale(1.f)); 2328 EXPECT_TRUE(active_layer()->tilings()->FindTilingWithScale(1.f));
2326 2329
2327 // Gpu rasterization is disabled by default. 2330 // Gpu rasterization is disabled by default.
2328 EXPECT_FALSE(host_impl()->use_gpu_rasterization()); 2331 EXPECT_FALSE(host_impl()->use_gpu_rasterization());
2332 EXPECT_EQ(0u, pending_layer()->release_resources_count());
2333 EXPECT_EQ(0u, active_layer()->release_resources_count());
2329 // Toggling the gpu rasterization clears all tilings on both trees. 2334 // Toggling the gpu rasterization clears all tilings on both trees.
2330 host_impl()->SetHasGpuRasterizationTrigger(true); 2335 host_impl()->SetHasGpuRasterizationTrigger(true);
2331 host_impl()->SetContentIsSuitableForGpuRasterization(true); 2336 host_impl()->SetContentIsSuitableForGpuRasterization(true);
2332 host_impl()->UpdateTreeResourcesForGpuRasterizationIfNeeded(); 2337 host_impl()->CommitComplete();
2333 EXPECT_EQ(0u, pending_layer()->tilings()->num_tilings()); 2338 EXPECT_EQ(1u, pending_layer()->release_resources_count());
2339 EXPECT_EQ(1u, active_layer()->release_resources_count());
2340
2341 // But the pending layer gets a tiling back, and can activate it.
2342 EXPECT_TRUE(pending_layer()->tilings()->FindTilingWithScale(1.f));
2334 EXPECT_EQ(0u, active_layer()->tilings()->num_tilings()); 2343 EXPECT_EQ(0u, active_layer()->tilings()->num_tilings());
2335 2344
2336 // Make sure that we can still add tiling to the pending layer,
2337 // that gets synced to the active layer.
2338 host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
2339 bool update_lcd_text = false;
2340 host_impl()->pending_tree()->UpdateDrawProperties(update_lcd_text);
2341 EXPECT_TRUE(pending_layer()->tilings()->FindTilingWithScale(1.f));
2342
2343 ActivateTree(); 2345 ActivateTree();
2344 EXPECT_TRUE(active_layer()->tilings()->FindTilingWithScale(1.f)); 2346 EXPECT_TRUE(active_layer()->tilings()->FindTilingWithScale(1.f));
2345 2347
2346 SetupPendingTree(pending_raster_source); 2348 SetupPendingTree(pending_raster_source);
2347 EXPECT_TRUE(pending_layer()->tilings()->FindTilingWithScale(1.f)); 2349 EXPECT_TRUE(pending_layer()->tilings()->FindTilingWithScale(1.f));
2348 2350
2349 // Toggling the gpu rasterization clears all tilings on both trees. 2351 // Toggling the gpu rasterization clears all tilings on both trees.
2350 EXPECT_TRUE(host_impl()->use_gpu_rasterization()); 2352 EXPECT_TRUE(host_impl()->use_gpu_rasterization());
2351 host_impl()->SetHasGpuRasterizationTrigger(false); 2353 host_impl()->SetHasGpuRasterizationTrigger(false);
2352 host_impl()->UpdateTreeResourcesForGpuRasterizationIfNeeded(); 2354 host_impl()->CommitComplete();
2353 EXPECT_EQ(GpuRasterizationStatus::OFF_VIEWPORT, 2355 EXPECT_EQ(GpuRasterizationStatus::OFF_VIEWPORT,
2354 host_impl()->gpu_rasterization_status()); 2356 host_impl()->gpu_rasterization_status());
2355 EXPECT_EQ(0u, pending_layer()->tilings()->num_tilings()); 2357 EXPECT_EQ(2u, pending_layer()->release_resources_count());
2356 EXPECT_EQ(0u, active_layer()->tilings()->num_tilings()); 2358 EXPECT_EQ(2u, active_layer()->release_resources_count());
2357 2359
2358 host_impl()->SetHasGpuRasterizationTrigger(true); 2360 host_impl()->SetHasGpuRasterizationTrigger(true);
2359 host_impl()->SetContentIsSuitableForGpuRasterization(false); 2361 host_impl()->SetContentIsSuitableForGpuRasterization(false);
2362 host_impl()->CommitComplete();
2360 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT, 2363 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT,
2361 host_impl()->gpu_rasterization_status()); 2364 host_impl()->gpu_rasterization_status());
2362 } 2365 }
2363 2366
2364 TEST_F(PictureLayerImplTest, HighResCreatedWhenBoundsShrink) { 2367 TEST_F(PictureLayerImplTest, HighResCreatedWhenBoundsShrink) {
2365 // Put 0.5 as high res. 2368 // Put 0.5 as high res.
2366 SetInitialDeviceScaleFactor(0.5f); 2369 SetInitialDeviceScaleFactor(0.5f);
2367 2370
2368 scoped_refptr<FakeRasterSource> pending_raster_source = 2371 scoped_refptr<FakeRasterSource> pending_raster_source =
2369 FakeRasterSource::CreateFilled(gfx::Size(10, 10)); 2372 FakeRasterSource::CreateFilled(gfx::Size(10, 10));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2407 EXPECT_EQ(2u, active_layer()->tilings()->num_tilings()); 2410 EXPECT_EQ(2u, active_layer()->tilings()->num_tilings());
2408 } 2411 }
2409 2412
2410 TEST_F(PictureLayerImplTest, NoLowResTilingWithGpuRasterization) { 2413 TEST_F(PictureLayerImplTest, NoLowResTilingWithGpuRasterization) {
2411 gfx::Size default_tile_size(host_impl()->settings().default_tile_size); 2414 gfx::Size default_tile_size(host_impl()->settings().default_tile_size);
2412 gfx::Size layer_bounds(default_tile_size.width() * 4, 2415 gfx::Size layer_bounds(default_tile_size.width() * 4,
2413 default_tile_size.height() * 4); 2416 default_tile_size.height() * 4);
2414 2417
2415 host_impl()->SetHasGpuRasterizationTrigger(true); 2418 host_impl()->SetHasGpuRasterizationTrigger(true);
2416 host_impl()->SetContentIsSuitableForGpuRasterization(true); 2419 host_impl()->SetContentIsSuitableForGpuRasterization(true);
2420 host_impl()->CommitComplete();
2417 2421
2418 SetupDefaultTrees(layer_bounds); 2422 SetupDefaultTrees(layer_bounds);
2419 EXPECT_TRUE(host_impl()->use_gpu_rasterization()); 2423 EXPECT_TRUE(host_impl()->use_gpu_rasterization());
2420 // Should only have the high-res tiling. 2424 // Should only have the high-res tiling.
2421 EXPECT_EQ(1u, pending_layer()->tilings()->num_tilings()); 2425 EXPECT_EQ(1u, pending_layer()->tilings()->num_tilings());
2422 ActivateTree(); 2426 ActivateTree();
2423 // Should only have the high-res tiling. 2427 // Should only have the high-res tiling.
2424 EXPECT_EQ(1u, active_layer()->tilings()->num_tilings()); 2428 EXPECT_EQ(1u, active_layer()->tilings()->num_tilings());
2425 } 2429 }
2426 2430
2427 TEST_F(PictureLayerImplTest, RequiredTilesWithGpuRasterization) { 2431 TEST_F(PictureLayerImplTest, RequiredTilesWithGpuRasterization) {
2428 host_impl()->SetHasGpuRasterizationTrigger(true); 2432 host_impl()->SetHasGpuRasterizationTrigger(true);
2429 host_impl()->SetContentIsSuitableForGpuRasterization(true); 2433 host_impl()->SetContentIsSuitableForGpuRasterization(true);
2434 host_impl()->CommitComplete();
2430 2435
2431 gfx::Size viewport_size(1000, 1000); 2436 gfx::Size viewport_size(1000, 1000);
2432 host_impl()->SetViewportSize(viewport_size); 2437 host_impl()->SetViewportSize(viewport_size);
2433 2438
2434 gfx::Size layer_bounds(4000, 4000); 2439 gfx::Size layer_bounds(4000, 4000);
2435 SetupDefaultTrees(layer_bounds); 2440 SetupDefaultTrees(layer_bounds);
2436 EXPECT_TRUE(host_impl()->use_gpu_rasterization()); 2441 EXPECT_TRUE(host_impl()->use_gpu_rasterization());
2437 2442
2438 // Should only have the high-res tiling. 2443 // Should only have the high-res tiling.
2439 EXPECT_EQ(1u, active_layer()->tilings()->num_tilings()); 2444 EXPECT_EQ(1u, active_layer()->tilings()->num_tilings());
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2723 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 11.f); 2728 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 11.f);
2724 } 2729 }
2725 2730
2726 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimationForGpuRasterization) { 2731 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimationForGpuRasterization) {
2727 gfx::Size layer_bounds(100, 100); 2732 gfx::Size layer_bounds(100, 100);
2728 gfx::Size viewport_size(1000, 1000); 2733 gfx::Size viewport_size(1000, 1000);
2729 SetupDefaultTrees(layer_bounds); 2734 SetupDefaultTrees(layer_bounds);
2730 host_impl()->SetViewportSize(viewport_size); 2735 host_impl()->SetViewportSize(viewport_size);
2731 host_impl()->SetHasGpuRasterizationTrigger(true); 2736 host_impl()->SetHasGpuRasterizationTrigger(true);
2732 host_impl()->SetContentIsSuitableForGpuRasterization(true); 2737 host_impl()->SetContentIsSuitableForGpuRasterization(true);
2733 host_impl()->UpdateTreeResourcesForGpuRasterizationIfNeeded(); 2738 host_impl()->CommitComplete();
2734 2739
2735 float contents_scale = 1.f; 2740 float contents_scale = 1.f;
2736 float device_scale = 1.3f; 2741 float device_scale = 1.3f;
2737 float page_scale = 1.4f; 2742 float page_scale = 1.4f;
2738 float maximum_animation_scale = 1.f; 2743 float maximum_animation_scale = 1.f;
2739 float starting_animation_scale = 0.f; 2744 float starting_animation_scale = 0.f;
2740 bool animating_transform = false; 2745 bool animating_transform = false;
2741 2746
2742 SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale, 2747 SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
2743 maximum_animation_scale, 2748 maximum_animation_scale,
(...skipping 1990 matching lines...) Expand 10 before | Expand all | Expand 10 after
4734 4739
4735 LayerTreeImpl* pending_tree = host_impl()->pending_tree(); 4740 LayerTreeImpl* pending_tree = host_impl()->pending_tree();
4736 std::unique_ptr<FakePictureLayerImpl> layer = 4741 std::unique_ptr<FakePictureLayerImpl> layer =
4737 FakePictureLayerImpl::Create(pending_tree, layer_id()); 4742 FakePictureLayerImpl::Create(pending_tree, layer_id());
4738 4743
4739 host_impl()->SetViewportSize(gfx::Size(1000, 1000)); 4744 host_impl()->SetViewportSize(gfx::Size(1000, 1000));
4740 gfx::Size result; 4745 gfx::Size result;
4741 4746
4742 host_impl()->SetContentIsSuitableForGpuRasterization(true); 4747 host_impl()->SetContentIsSuitableForGpuRasterization(true);
4743 host_impl()->SetHasGpuRasterizationTrigger(false); 4748 host_impl()->SetHasGpuRasterizationTrigger(false);
4749 host_impl()->CommitComplete();
4744 EXPECT_EQ(host_impl()->gpu_rasterization_status(), 4750 EXPECT_EQ(host_impl()->gpu_rasterization_status(),
4745 GpuRasterizationStatus::OFF_VIEWPORT); 4751 GpuRasterizationStatus::OFF_VIEWPORT);
4746 4752
4747 // Default tile-size for large layers. 4753 // Default tile-size for large layers.
4748 result = layer->CalculateTileSize(gfx::Size(10000, 10000)); 4754 result = layer->CalculateTileSize(gfx::Size(10000, 10000));
4749 EXPECT_EQ(result.width(), 100); 4755 EXPECT_EQ(result.width(), 100);
4750 EXPECT_EQ(result.height(), 100); 4756 EXPECT_EQ(result.height(), 100);
4751 // Don't tile and round-up, when under max_untiled_layer_size. 4757 // Don't tile and round-up, when under max_untiled_layer_size.
4752 result = layer->CalculateTileSize(gfx::Size(42, 42)); 4758 result = layer->CalculateTileSize(gfx::Size(42, 42));
4753 EXPECT_EQ(result.width(), 64); 4759 EXPECT_EQ(result.width(), 64);
4754 EXPECT_EQ(result.height(), 64); 4760 EXPECT_EQ(result.height(), 64);
4755 result = layer->CalculateTileSize(gfx::Size(191, 191)); 4761 result = layer->CalculateTileSize(gfx::Size(191, 191));
4756 EXPECT_EQ(result.width(), 192); 4762 EXPECT_EQ(result.width(), 192);
4757 EXPECT_EQ(result.height(), 192); 4763 EXPECT_EQ(result.height(), 192);
4758 result = layer->CalculateTileSize(gfx::Size(199, 199)); 4764 result = layer->CalculateTileSize(gfx::Size(199, 199));
4759 EXPECT_EQ(result.width(), 200); 4765 EXPECT_EQ(result.width(), 200);
4760 EXPECT_EQ(result.height(), 200); 4766 EXPECT_EQ(result.height(), 200);
4761 4767
4762 // Gpu-rasterization uses 25% viewport-height tiles. 4768 // Gpu-rasterization uses 25% viewport-height tiles.
4763 // The +2's below are for border texels. 4769 // The +2's below are for border texels.
4764 host_impl()->SetHasGpuRasterizationTrigger(true); 4770 host_impl()->SetHasGpuRasterizationTrigger(true);
4771 host_impl()->CommitComplete();
4765 EXPECT_EQ(host_impl()->gpu_rasterization_status(), 4772 EXPECT_EQ(host_impl()->gpu_rasterization_status(),
4766 GpuRasterizationStatus::ON); 4773 GpuRasterizationStatus::ON);
4767 host_impl()->SetViewportSize(gfx::Size(2000, 2000)); 4774 host_impl()->SetViewportSize(gfx::Size(2000, 2000));
4768 4775
4769 layer->set_gpu_raster_max_texture_size(host_impl()->device_viewport_size()); 4776 layer->set_gpu_raster_max_texture_size(host_impl()->device_viewport_size());
4770 result = layer->CalculateTileSize(gfx::Size(10000, 10000)); 4777 result = layer->CalculateTileSize(gfx::Size(10000, 10000));
4771 EXPECT_EQ(result.width(), 4778 EXPECT_EQ(result.width(),
4772 MathUtil::UncheckedRoundUp( 4779 MathUtil::UncheckedRoundUp(
4773 2000 + 2 * PictureLayerTiling::kBorderTexels, 4)); 4780 2000 + 2 * PictureLayerTiling::kBorderTexels, 4));
4774 EXPECT_EQ(result.height(), 504); // 500 + 2, 4-byte aligned. 4781 EXPECT_EQ(result.height(), 504); // 500 + 2, 4-byte aligned.
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
5016 EXPECT_FLOAT_EQ(expected_contents_scale, 5023 EXPECT_FLOAT_EQ(expected_contents_scale,
5017 pending_layer_ptr->picture_layer_tiling_set() 5024 pending_layer_ptr->picture_layer_tiling_set()
5018 ->FindTilingWithResolution(HIGH_RESOLUTION) 5025 ->FindTilingWithResolution(HIGH_RESOLUTION)
5019 ->contents_scale()) 5026 ->contents_scale())
5020 << "ideal_contents_scale: " << ideal_contents_scale; 5027 << "ideal_contents_scale: " << ideal_contents_scale;
5021 } 5028 }
5022 } 5029 }
5023 5030
5024 } // namespace 5031 } // namespace
5025 } // namespace cc 5032 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/output/delegating_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698