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 2892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2903 pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); | 2903 pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); |
2904 EXPECT_TRUE(queue->IsEmpty()); | 2904 EXPECT_TRUE(queue->IsEmpty()); |
2905 | 2905 |
2906 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); | 2906 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); |
2907 | 2907 |
2908 std::set<Tile*> unique_tiles; | 2908 std::set<Tile*> unique_tiles; |
2909 float expected_scales[] = {low_res_factor, 1.f}; | 2909 float expected_scales[] = {low_res_factor, 1.f}; |
2910 size_t scale_index = 0; | 2910 size_t scale_index = 0; |
2911 bool reached_visible = false; | 2911 bool reached_visible = false; |
2912 Tile* last_tile = nullptr; | 2912 Tile* last_tile = nullptr; |
| 2913 size_t distance_decreasing = 0; |
| 2914 size_t distance_increasing = 0; |
2913 queue = pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); | 2915 queue = pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); |
2914 while (!queue->IsEmpty()) { | 2916 while (!queue->IsEmpty()) { |
2915 Tile* tile = queue->Top(); | 2917 Tile* tile = queue->Top(); |
2916 if (!last_tile) | 2918 if (!last_tile) |
2917 last_tile = tile; | 2919 last_tile = tile; |
2918 | 2920 |
2919 EXPECT_TRUE(tile); | 2921 EXPECT_TRUE(tile); |
2920 | 2922 |
2921 TilePriority priority = tile->priority(PENDING_TREE); | 2923 TilePriority priority = tile->priority(PENDING_TREE); |
2922 | 2924 |
2923 if (priority.priority_bin == TilePriority::NOW) { | 2925 if (priority.priority_bin == TilePriority::NOW) { |
2924 reached_visible = true; | 2926 reached_visible = true; |
2925 last_tile = tile; | 2927 last_tile = tile; |
2926 break; | 2928 break; |
2927 } | 2929 } |
2928 | 2930 |
2929 EXPECT_FALSE(tile->required_for_activation()); | 2931 EXPECT_FALSE(tile->required_for_activation()); |
2930 | 2932 |
2931 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > | 2933 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > |
2932 std::numeric_limits<float>::epsilon()) { | 2934 std::numeric_limits<float>::epsilon()) { |
2933 ++scale_index; | 2935 ++scale_index; |
2934 ASSERT_LT(scale_index, arraysize(expected_scales)); | 2936 ASSERT_LT(scale_index, arraysize(expected_scales)); |
2935 } | 2937 } |
2936 | 2938 |
2937 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); | 2939 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); |
2938 unique_tiles.insert(tile); | 2940 unique_tiles.insert(tile); |
2939 | 2941 |
2940 // If the tile is the same rough bin as last tile (same activation, bin, and | |
2941 // scale), then distance should be decreasing. | |
2942 if (tile->required_for_activation() == | 2942 if (tile->required_for_activation() == |
2943 last_tile->required_for_activation() && | 2943 last_tile->required_for_activation() && |
2944 priority.priority_bin == | 2944 priority.priority_bin == |
2945 last_tile->priority(PENDING_TREE).priority_bin && | 2945 last_tile->priority(PENDING_TREE).priority_bin && |
2946 std::abs(tile->contents_scale() - last_tile->contents_scale()) < | 2946 std::abs(tile->contents_scale() - last_tile->contents_scale()) < |
2947 std::numeric_limits<float>::epsilon()) { | 2947 std::numeric_limits<float>::epsilon()) { |
2948 EXPECT_LE(priority.distance_to_visible, | 2948 if (priority.distance_to_visible <= |
2949 last_tile->priority(PENDING_TREE).distance_to_visible); | 2949 last_tile->priority(PENDING_TREE).distance_to_visible) |
| 2950 ++distance_decreasing; |
| 2951 else |
| 2952 ++distance_increasing; |
2950 } | 2953 } |
2951 | 2954 |
2952 last_tile = tile; | 2955 last_tile = tile; |
2953 queue->Pop(); | 2956 queue->Pop(); |
2954 } | 2957 } |
2955 | 2958 |
2956 // 4 high res tiles are inside the viewport, the rest are evicted. | 2959 // 4 high res tiles are inside the viewport, the rest are evicted. |
2957 EXPECT_TRUE(reached_visible); | 2960 EXPECT_TRUE(reached_visible); |
2958 EXPECT_EQ(12u, unique_tiles.size()); | 2961 EXPECT_EQ(12u, unique_tiles.size()); |
| 2962 EXPECT_EQ(1u, distance_increasing); |
| 2963 EXPECT_EQ(11u, distance_decreasing); |
2959 | 2964 |
2960 scale_index = 0; | 2965 scale_index = 0; |
2961 bool reached_required = false; | 2966 bool reached_required = false; |
2962 while (!queue->IsEmpty()) { | 2967 while (!queue->IsEmpty()) { |
2963 Tile* tile = queue->Top(); | 2968 Tile* tile = queue->Top(); |
2964 EXPECT_TRUE(tile); | 2969 EXPECT_TRUE(tile); |
2965 | 2970 |
2966 TilePriority priority = tile->priority(PENDING_TREE); | 2971 TilePriority priority = tile->priority(PENDING_TREE); |
2967 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 2972 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
2968 | 2973 |
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3705 class OcclusionTrackingSettings : public LowResTilingsSettings { | 3710 class OcclusionTrackingSettings : public LowResTilingsSettings { |
3706 public: | 3711 public: |
3707 OcclusionTrackingSettings() { use_occlusion_for_tile_prioritization = true; } | 3712 OcclusionTrackingSettings() { use_occlusion_for_tile_prioritization = true; } |
3708 }; | 3713 }; |
3709 | 3714 |
3710 class OcclusionTrackingPictureLayerImplTest : public PictureLayerImplTest { | 3715 class OcclusionTrackingPictureLayerImplTest : public PictureLayerImplTest { |
3711 public: | 3716 public: |
3712 OcclusionTrackingPictureLayerImplTest() | 3717 OcclusionTrackingPictureLayerImplTest() |
3713 : PictureLayerImplTest(OcclusionTrackingSettings()) {} | 3718 : PictureLayerImplTest(OcclusionTrackingSettings()) {} |
3714 | 3719 |
3715 void VerifyEvictionConsidersOcclusion( | 3720 void VerifyEvictionConsidersOcclusion(FakePictureLayerImpl* layer, |
3716 PictureLayerImpl* layer, | 3721 FakePictureLayerImpl* twin_layer, |
3717 size_t expected_occluded_tile_count[NUM_TREE_PRIORITIES]) { | 3722 WhichTree tree, |
| 3723 size_t expected_occluded_tile_count) { |
| 3724 WhichTree twin_tree = tree == ACTIVE_TREE ? PENDING_TREE : ACTIVE_TREE; |
3718 for (int priority_count = 0; priority_count < NUM_TREE_PRIORITIES; | 3725 for (int priority_count = 0; priority_count < NUM_TREE_PRIORITIES; |
3719 ++priority_count) { | 3726 ++priority_count) { |
3720 TreePriority tree_priority = static_cast<TreePriority>(priority_count); | 3727 TreePriority tree_priority = static_cast<TreePriority>(priority_count); |
3721 size_t occluded_tile_count = 0u; | 3728 size_t occluded_tile_count = 0u; |
3722 Tile* last_tile = nullptr; | 3729 Tile* last_tile = nullptr; |
| 3730 std::set<Tile*> shared_tiles; |
3723 | 3731 |
3724 scoped_ptr<TilingSetEvictionQueue> queue = | 3732 scoped_ptr<TilingSetEvictionQueue> queue = |
3725 layer->CreateEvictionQueue(tree_priority); | 3733 layer->CreateEvictionQueue(tree_priority); |
3726 while (!queue->IsEmpty()) { | 3734 while (!queue->IsEmpty()) { |
3727 Tile* tile = queue->Top(); | 3735 Tile* tile = queue->Top(); |
3728 if (!last_tile) | 3736 if (!last_tile) |
3729 last_tile = tile; | 3737 last_tile = tile; |
| 3738 if (tile->is_shared()) |
| 3739 EXPECT_TRUE(shared_tiles.insert(tile).second); |
3730 | 3740 |
3731 // The only way we will encounter an occluded tile after an unoccluded | 3741 // The only way we will encounter an occluded tile after an unoccluded |
3732 // tile is if the priorty bin decreased, the tile is required for | 3742 // tile is if the priorty bin decreased, the tile is required for |
3733 // activation, or the scale changed. | 3743 // activation, or the scale changed. |
3734 bool tile_is_occluded = | 3744 bool tile_is_occluded = tile->is_occluded(tree); |
3735 tile->is_occluded_for_tree_priority(tree_priority); | |
3736 if (tile_is_occluded) { | 3745 if (tile_is_occluded) { |
3737 occluded_tile_count++; | 3746 occluded_tile_count++; |
3738 | 3747 |
3739 bool last_tile_is_occluded = | 3748 bool last_tile_is_occluded = last_tile->is_occluded(tree); |
3740 last_tile->is_occluded_for_tree_priority(tree_priority); | |
3741 if (!last_tile_is_occluded) { | 3749 if (!last_tile_is_occluded) { |
3742 TilePriority::PriorityBin tile_priority_bin = | 3750 TilePriority::PriorityBin tile_priority_bin = |
3743 tile->priority_for_tree_priority(tree_priority).priority_bin; | 3751 tile->priority(tree).priority_bin; |
3744 TilePriority::PriorityBin last_tile_priority_bin = | 3752 TilePriority::PriorityBin last_tile_priority_bin = |
3745 last_tile->priority_for_tree_priority(tree_priority) | 3753 last_tile->priority(tree).priority_bin; |
3746 .priority_bin; | |
3747 | 3754 |
3748 EXPECT_TRUE( | 3755 EXPECT_TRUE( |
3749 (tile_priority_bin < last_tile_priority_bin) || | 3756 (tile_priority_bin < last_tile_priority_bin) || |
3750 tile->required_for_activation() || | 3757 tile->required_for_activation() || |
3751 (tile->contents_scale() != last_tile->contents_scale())); | 3758 (tile->contents_scale() != last_tile->contents_scale())); |
3752 } | 3759 } |
3753 } | 3760 } |
3754 last_tile = tile; | 3761 last_tile = tile; |
3755 queue->Pop(); | 3762 queue->Pop(); |
3756 } | 3763 } |
3757 EXPECT_EQ(expected_occluded_tile_count[priority_count], | 3764 // Count also shared tiles which are occluded in the tree but which were |
3758 occluded_tile_count); | 3765 // not returned by the tiling set eviction queue. Those shared tiles |
| 3766 // shall be returned by the twin tiling set eviction queue. |
| 3767 queue = twin_layer->CreateEvictionQueue(tree_priority); |
| 3768 while (!queue->IsEmpty()) { |
| 3769 Tile* tile = queue->Top(); |
| 3770 if (tile->is_shared()) { |
| 3771 EXPECT_TRUE(shared_tiles.insert(tile).second); |
| 3772 if (tile->is_occluded(tree)) |
| 3773 ++occluded_tile_count; |
| 3774 // Check the reasons why the shared tile was not returned by |
| 3775 // the first tiling set eviction queue. |
| 3776 switch (tree_priority) { |
| 3777 case SAME_PRIORITY_FOR_BOTH_TREES: { |
| 3778 const TilePriority& priority = tile->priority(tree); |
| 3779 const TilePriority& priority_for_tree_priority = |
| 3780 tile->priority_for_tree_priority(tree_priority); |
| 3781 const TilePriority& twin_priority = tile->priority(twin_tree); |
| 3782 // Check if the shared tile was not returned by the first tiling |
| 3783 // set eviction queue because it was out of order for the first |
| 3784 // tiling set eviction queue but not for the twin tiling set |
| 3785 // eviction queue. |
| 3786 if (priority.priority_bin != twin_priority.priority_bin) { |
| 3787 EXPECT_LT(priority_for_tree_priority.priority_bin, |
| 3788 priority.priority_bin); |
| 3789 EXPECT_EQ(priority_for_tree_priority.priority_bin, |
| 3790 twin_priority.priority_bin); |
| 3791 EXPECT_TRUE(priority_for_tree_priority.priority_bin < |
| 3792 priority.priority_bin); |
| 3793 } else if (tile->is_occluded(tree) != |
| 3794 tile->is_occluded(twin_tree)) { |
| 3795 EXPECT_TRUE(tile->is_occluded(tree)); |
| 3796 EXPECT_FALSE(tile->is_occluded(twin_tree)); |
| 3797 EXPECT_FALSE( |
| 3798 tile->is_occluded_for_tree_priority(tree_priority)); |
| 3799 } else if (priority.distance_to_visible != |
| 3800 twin_priority.distance_to_visible) { |
| 3801 EXPECT_LT(priority_for_tree_priority.distance_to_visible, |
| 3802 priority.distance_to_visible); |
| 3803 EXPECT_EQ(priority_for_tree_priority.distance_to_visible, |
| 3804 twin_priority.distance_to_visible); |
| 3805 EXPECT_TRUE(priority_for_tree_priority.distance_to_visible < |
| 3806 priority.distance_to_visible); |
| 3807 } else { |
| 3808 // Shared tiles having the same active and pending priorities |
| 3809 // should be returned only by a pending tree eviction queue. |
| 3810 EXPECT_EQ(ACTIVE_TREE, tree); |
| 3811 } |
| 3812 break; |
| 3813 } |
| 3814 case SMOOTHNESS_TAKES_PRIORITY: |
| 3815 // Shared tiles should be returned only by an active tree |
| 3816 // eviction queue. |
| 3817 EXPECT_EQ(PENDING_TREE, tree); |
| 3818 break; |
| 3819 case NEW_CONTENT_TAKES_PRIORITY: |
| 3820 // Shared tiles should be returned only by a pending tree |
| 3821 // eviction queue. |
| 3822 EXPECT_EQ(ACTIVE_TREE, tree); |
| 3823 break; |
| 3824 case NUM_TREE_PRIORITIES: |
| 3825 NOTREACHED(); |
| 3826 break; |
| 3827 } |
| 3828 } |
| 3829 queue->Pop(); |
| 3830 } |
| 3831 EXPECT_EQ(expected_occluded_tile_count, occluded_tile_count); |
3759 } | 3832 } |
3760 } | 3833 } |
3761 }; | 3834 }; |
3762 | 3835 |
3763 TEST_F(OcclusionTrackingPictureLayerImplTest, | 3836 TEST_F(OcclusionTrackingPictureLayerImplTest, |
3764 OccludedTilesSkippedDuringRasterization) { | 3837 OccludedTilesSkippedDuringRasterization) { |
3765 base::TimeTicks time_ticks; | 3838 base::TimeTicks time_ticks; |
3766 time_ticks += base::TimeDelta::FromMilliseconds(1); | 3839 time_ticks += base::TimeDelta::FromMilliseconds(1); |
3767 host_impl_.SetCurrentBeginFrameArgs( | 3840 host_impl_.SetCurrentBeginFrameArgs( |
3768 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); | 3841 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4220 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); | 4293 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
4221 // UpdateDrawProperties with the occluding layer. | 4294 // UpdateDrawProperties with the occluding layer. |
4222 host_impl_.pending_tree()->UpdateDrawProperties(); | 4295 host_impl_.pending_tree()->UpdateDrawProperties(); |
4223 | 4296 |
4224 // The expected number of occluded tiles on each of the 2 tilings for each of | 4297 // The expected number of occluded tiles on each of the 2 tilings for each of |
4225 // the 3 tree priorities. | 4298 // the 3 tree priorities. |
4226 size_t expected_occluded_tile_count_on_both[] = {9u, 1u}; | 4299 size_t expected_occluded_tile_count_on_both[] = {9u, 1u}; |
4227 size_t expected_occluded_tile_count_on_active[] = {30u, 3u}; | 4300 size_t expected_occluded_tile_count_on_active[] = {30u, 3u}; |
4228 size_t expected_occluded_tile_count_on_pending[] = {30u, 3u}; | 4301 size_t expected_occluded_tile_count_on_pending[] = {30u, 3u}; |
4229 | 4302 |
4230 // The total expected number of occluded tiles on all tilings for each of the | 4303 size_t total_expected_occluded_tile_count_on_trees[] = {33u, 33u}; |
4231 // 3 tree priorities. | |
4232 size_t total_expected_occluded_tile_count[] = {10u, 33u, 33u}; | |
4233 | |
4234 ASSERT_EQ(arraysize(total_expected_occluded_tile_count), NUM_TREE_PRIORITIES); | |
4235 | 4304 |
4236 // Verify number of occluded tiles on the pending layer for each tiling. | 4305 // Verify number of occluded tiles on the pending layer for each tiling. |
4237 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { | 4306 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { |
4238 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); | 4307 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); |
4239 tiling->UpdateAllTilePrioritiesForTesting(); | 4308 tiling->UpdateAllTilePrioritiesForTesting(); |
4240 | 4309 |
4241 size_t occluded_tile_count_on_pending = 0u; | 4310 size_t occluded_tile_count_on_pending = 0u; |
4242 size_t occluded_tile_count_on_active = 0u; | 4311 size_t occluded_tile_count_on_active = 0u; |
4243 size_t occluded_tile_count_on_both = 0u; | 4312 size_t occluded_tile_count_on_both = 0u; |
4244 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, | 4313 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4304 | 4373 |
4305 std::vector<Tile*> all_tiles; | 4374 std::vector<Tile*> all_tiles; |
4306 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { | 4375 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { |
4307 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); | 4376 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); |
4308 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | 4377 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); |
4309 all_tiles.insert(all_tiles.end(), tiles.begin(), tiles.end()); | 4378 all_tiles.insert(all_tiles.end(), tiles.begin(), tiles.end()); |
4310 } | 4379 } |
4311 | 4380 |
4312 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); | 4381 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); |
4313 | 4382 |
4314 VerifyEvictionConsidersOcclusion(pending_layer_, | 4383 VerifyEvictionConsidersOcclusion( |
4315 total_expected_occluded_tile_count); | 4384 pending_layer_, active_layer_, PENDING_TREE, |
4316 VerifyEvictionConsidersOcclusion(active_layer_, | 4385 total_expected_occluded_tile_count_on_trees[PENDING_TREE]); |
4317 total_expected_occluded_tile_count); | 4386 VerifyEvictionConsidersOcclusion( |
| 4387 active_layer_, pending_layer_, ACTIVE_TREE, |
| 4388 total_expected_occluded_tile_count_on_trees[ACTIVE_TREE]); |
| 4389 |
| 4390 // Repeat the tests without valid active tree priorities. |
| 4391 active_layer_->set_has_valid_tile_priorities(false); |
| 4392 VerifyEvictionConsidersOcclusion( |
| 4393 pending_layer_, active_layer_, PENDING_TREE, |
| 4394 total_expected_occluded_tile_count_on_trees[PENDING_TREE]); |
| 4395 VerifyEvictionConsidersOcclusion( |
| 4396 active_layer_, pending_layer_, ACTIVE_TREE, 0u); |
| 4397 active_layer_->set_has_valid_tile_priorities(true); |
| 4398 |
| 4399 // Repeat the tests without valid pending tree priorities. |
| 4400 pending_layer_->set_has_valid_tile_priorities(false); |
| 4401 VerifyEvictionConsidersOcclusion( |
| 4402 active_layer_, pending_layer_, ACTIVE_TREE, |
| 4403 total_expected_occluded_tile_count_on_trees[ACTIVE_TREE]); |
| 4404 VerifyEvictionConsidersOcclusion( |
| 4405 pending_layer_, active_layer_, PENDING_TREE, 0u); |
| 4406 pending_layer_->set_has_valid_tile_priorities(true); |
4318 } | 4407 } |
4319 | 4408 |
4320 TEST_F(PictureLayerImplTest, PendingOrActiveTwinLayer) { | 4409 TEST_F(PictureLayerImplTest, PendingOrActiveTwinLayer) { |
4321 gfx::Size tile_size(102, 102); | 4410 gfx::Size tile_size(102, 102); |
4322 gfx::Size layer_bounds(1000, 1000); | 4411 gfx::Size layer_bounds(1000, 1000); |
4323 | 4412 |
4324 scoped_refptr<FakePicturePileImpl> pile = | 4413 scoped_refptr<FakePicturePileImpl> pile = |
4325 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 4414 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
4326 SetupPendingTree(pile); | 4415 SetupPendingTree(pile); |
4327 EXPECT_FALSE(pending_layer_->GetPendingOrActiveTwinLayer()); | 4416 EXPECT_FALSE(pending_layer_->GetPendingOrActiveTwinLayer()); |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4608 result = layer->CalculateTileSize(gfx::Size(447, 400)); | 4697 result = layer->CalculateTileSize(gfx::Size(447, 400)); |
4609 EXPECT_EQ(result.width(), 448); | 4698 EXPECT_EQ(result.width(), 448); |
4610 EXPECT_EQ(result.height(), 448); | 4699 EXPECT_EQ(result.height(), 448); |
4611 result = layer->CalculateTileSize(gfx::Size(500, 499)); | 4700 result = layer->CalculateTileSize(gfx::Size(500, 499)); |
4612 EXPECT_EQ(result.width(), 512); | 4701 EXPECT_EQ(result.width(), 512); |
4613 EXPECT_EQ(result.height(), 500 + 2); | 4702 EXPECT_EQ(result.height(), 500 + 2); |
4614 } | 4703 } |
4615 | 4704 |
4616 } // namespace | 4705 } // namespace |
4617 } // namespace cc | 4706 } // namespace cc |
OLD | NEW |