| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/base/region.h" | 5 #include "cc/base/region.h" |
| 6 #include "cc/base/scoped_ptr_vector.h" | 6 #include "cc/base/scoped_ptr_vector.h" |
| 7 #include "cc/output/compositor_frame_metadata.h" | 7 #include "cc/output/compositor_frame_metadata.h" |
| 8 #include "cc/output/gl_renderer.h" | 8 #include "cc/output/gl_renderer.h" |
| 9 #include "cc/output/output_surface.h" | 9 #include "cc/output/output_surface.h" |
| 10 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
| 11 #include "cc/output/overlay_candidate_validator.h" | 11 #include "cc/output/overlay_candidate_validator.h" |
| 12 #include "cc/output/overlay_processor.h" | 12 #include "cc/output/overlay_processor.h" |
| 13 #include "cc/output/overlay_strategy_all_or_nothing.h" | |
| 14 #include "cc/output/overlay_strategy_sandwich.h" | 13 #include "cc/output/overlay_strategy_sandwich.h" |
| 15 #include "cc/output/overlay_strategy_single_on_top.h" | 14 #include "cc/output/overlay_strategy_single_on_top.h" |
| 16 #include "cc/output/overlay_strategy_underlay.h" | 15 #include "cc/output/overlay_strategy_underlay.h" |
| 17 #include "cc/quads/render_pass.h" | 16 #include "cc/quads/render_pass.h" |
| 18 #include "cc/quads/solid_color_draw_quad.h" | 17 #include "cc/quads/solid_color_draw_quad.h" |
| 19 #include "cc/quads/stream_video_draw_quad.h" | 18 #include "cc/quads/stream_video_draw_quad.h" |
| 20 #include "cc/quads/texture_draw_quad.h" | 19 #include "cc/quads/texture_draw_quad.h" |
| 21 #include "cc/resources/resource_provider.h" | 20 #include "cc/resources/resource_provider.h" |
| 22 #include "cc/resources/texture_mailbox.h" | 21 #include "cc/resources/texture_mailbox.h" |
| 23 #include "cc/test/fake_output_surface_client.h" | 22 #include "cc/test/fake_output_surface_client.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 bool lost_resource, | 56 bool lost_resource, |
| 58 BlockingTaskRunner* main_thread_task_runner) {} | 57 BlockingTaskRunner* main_thread_task_runner) {} |
| 59 | 58 |
| 60 class SingleOverlayValidator : public OverlayCandidateValidator { | 59 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 61 public: | 60 public: |
| 62 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 61 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 63 strategies->push_back( | 62 strategies->push_back( |
| 64 make_scoped_ptr(new OverlayStrategySingleOnTop(this))); | 63 make_scoped_ptr(new OverlayStrategySingleOnTop(this))); |
| 65 strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this))); | 64 strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this))); |
| 66 } | 65 } |
| 66 bool AllowCALayerOverlays() override { return false; } |
| 67 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 67 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 68 // We may have 1 or 2 surfaces depending on whether this ran through the | 68 // We may have 1 or 2 surfaces depending on whether this ran through the |
| 69 // full renderer and picked up the output surface, or not. | 69 // full renderer and picked up the output surface, or not. |
| 70 ASSERT_LE(1U, surfaces->size()); | 70 ASSERT_LE(1U, surfaces->size()); |
| 71 ASSERT_GE(2U, surfaces->size()); | 71 ASSERT_GE(2U, surfaces->size()); |
| 72 | 72 |
| 73 OverlayCandidate& candidate = surfaces->back(); | 73 OverlayCandidate& candidate = surfaces->back(); |
| 74 EXPECT_TRUE(!candidate.use_output_surface_for_resource); | 74 EXPECT_TRUE(!candidate.use_output_surface_for_resource); |
| 75 if (candidate.display_rect.width() == 64) { | 75 if (candidate.display_rect.width() == 64) { |
| 76 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); | 76 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); |
| 77 } else { | 77 } else { |
| 78 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 78 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); |
| 79 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 79 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); |
| 80 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 80 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); |
| 81 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | 81 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), |
| 82 0.01f); | 82 0.01f); |
| 83 } | 83 } |
| 84 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), | 84 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
| 85 candidate.uv_rect); | 85 candidate.uv_rect); |
| 86 if (!candidate.clip_rect.IsEmpty()) { | 86 if (!candidate.clip_rect.IsEmpty()) { |
| 87 EXPECT_EQ(true, candidate.is_clipped); | 87 EXPECT_EQ(true, candidate.is_clipped); |
| 88 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); | 88 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); |
| 89 } | 89 } |
| 90 candidate.overlay_handled = true; | 90 candidate.overlay_handled = true; |
| 91 } | 91 } |
| 92 }; | 92 }; |
| 93 | 93 |
| 94 class CALayerValidator : public OverlayCandidateValidator { |
| 95 public: |
| 96 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
| 97 bool AllowCALayerOverlays() override { return true; } |
| 98 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
| 99 }; |
| 100 |
| 94 class SingleOnTopOverlayValidator : public SingleOverlayValidator { | 101 class SingleOnTopOverlayValidator : public SingleOverlayValidator { |
| 95 public: | 102 public: |
| 96 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 103 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 97 strategies->push_back( | 104 strategies->push_back( |
| 98 make_scoped_ptr(new OverlayStrategySingleOnTop(this))); | 105 make_scoped_ptr(new OverlayStrategySingleOnTop(this))); |
| 99 } | 106 } |
| 100 }; | 107 }; |
| 101 | 108 |
| 102 class UnderlayOverlayValidator : public SingleOverlayValidator { | 109 class UnderlayOverlayValidator : public SingleOverlayValidator { |
| 103 public: | 110 public: |
| 104 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 111 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 105 strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this))); | 112 strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this))); |
| 106 } | 113 } |
| 107 }; | 114 }; |
| 108 | 115 |
| 109 class SandwichOverlayValidator : public OverlayCandidateValidator { | 116 class SandwichOverlayValidator : public OverlayCandidateValidator { |
| 110 public: | 117 public: |
| 111 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 118 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 112 strategies->push_back(make_scoped_ptr(new OverlayStrategySandwich(this))); | 119 strategies->push_back(make_scoped_ptr(new OverlayStrategySandwich(this))); |
| 113 } | 120 } |
| 121 bool AllowCALayerOverlays() override { return false; } |
| 114 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 122 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 115 for (OverlayCandidate& candidate : *surfaces) | 123 for (OverlayCandidate& candidate : *surfaces) |
| 116 candidate.overlay_handled = true; | 124 candidate.overlay_handled = true; |
| 117 } | |
| 118 }; | |
| 119 | |
| 120 class AllOrNothingOverlayValidator : public OverlayCandidateValidator { | |
| 121 public: | |
| 122 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | |
| 123 strategies->push_back( | |
| 124 make_scoped_ptr(new OverlayStrategyAllOrNothing(this))); | |
| 125 } | |
| 126 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | |
| 127 for (OverlayCandidate& candidate : *surfaces) | |
| 128 candidate.overlay_handled = true; | |
| 129 } | 125 } |
| 130 }; | 126 }; |
| 131 | 127 |
| 132 class DefaultOverlayProcessor : public OverlayProcessor { | 128 class DefaultOverlayProcessor : public OverlayProcessor { |
| 133 public: | 129 public: |
| 134 explicit DefaultOverlayProcessor(OutputSurface* surface); | 130 explicit DefaultOverlayProcessor(OutputSurface* surface); |
| 135 size_t GetStrategyCount(); | 131 size_t GetStrategyCount(); |
| 136 }; | 132 }; |
| 137 | 133 |
| 138 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) | 134 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 FakeOutputSurfaceClient client_; | 359 FakeOutputSurfaceClient client_; |
| 364 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 360 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 365 scoped_ptr<ResourceProvider> resource_provider_; | 361 scoped_ptr<ResourceProvider> resource_provider_; |
| 366 scoped_ptr<OverlayProcessor> overlay_processor_; | 362 scoped_ptr<OverlayProcessor> overlay_processor_; |
| 367 gfx::Rect damage_rect_; | 363 gfx::Rect damage_rect_; |
| 368 }; | 364 }; |
| 369 | 365 |
| 370 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; | 366 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; |
| 371 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; | 367 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; |
| 372 typedef OverlayTest<SandwichOverlayValidator> SandwichTest; | 368 typedef OverlayTest<SandwichOverlayValidator> SandwichTest; |
| 373 typedef OverlayTest<AllOrNothingOverlayValidator> AllOrNothingOverlayTest; | 369 typedef OverlayTest<CALayerValidator> CALayerOverlayTest; |
| 374 | 370 |
| 375 TEST(OverlayTest, NoOverlaysByDefault) { | 371 TEST(OverlayTest, NoOverlaysByDefault) { |
| 376 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 372 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
| 377 OverlayOutputSurface output_surface(provider); | 373 OverlayOutputSurface output_surface(provider); |
| 378 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); | 374 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); |
| 379 | 375 |
| 380 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 376 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 381 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); | 377 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); |
| 382 } | 378 } |
| 383 | 379 |
| (...skipping 936 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 output_surface_plane.quad_rect_in_target_space = kOverlayRect; | 1316 output_surface_plane.quad_rect_in_target_space = kOverlayRect; |
| 1321 output_surface_plane.use_output_surface_for_resource = true; | 1317 output_surface_plane.use_output_surface_for_resource = true; |
| 1322 output_surface_plane.overlay_handled = true; | 1318 output_surface_plane.overlay_handled = true; |
| 1323 candidate_list.push_back(output_surface_plane); | 1319 candidate_list.push_back(output_surface_plane); |
| 1324 | 1320 |
| 1325 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1321 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1326 &candidate_list, &damage_rect_); | 1322 &candidate_list, &damage_rect_); |
| 1327 DCHECK(!damage_rect_.IsEmpty()); | 1323 DCHECK(!damage_rect_.IsEmpty()); |
| 1328 } | 1324 } |
| 1329 | 1325 |
| 1330 TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) { | 1326 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { |
| 1331 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1327 OverlayCandidateList list; |
| 1332 | 1328 OverlayCandidate output_surface_plane; |
| 1333 // Add two overlapping candidates. | 1329 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); |
| 1334 CreateCandidateQuadAt(resource_provider_.get(), | 1330 output_surface_plane.quad_rect_in_target_space = |
| 1335 pass->shared_quad_state_list.back(), pass.get(), | 1331 root_render_pass->output_rect; |
| 1336 kOverlayTopLeftRect); | 1332 output_surface_plane.use_output_surface_for_resource = true; |
| 1337 CreateCandidateQuadAt(resource_provider_.get(), | 1333 output_surface_plane.overlay_handled = true; |
| 1338 pass->shared_quad_state_list.back(), pass.get(), | 1334 list.push_back(output_surface_plane); |
| 1339 kOverlayRect); | 1335 return list; |
| 1340 | |
| 1341 RenderPassList pass_list; | |
| 1342 pass_list.push_back(pass.Pass()); | |
| 1343 OverlayCandidateList candidates; | |
| 1344 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | |
| 1345 &candidates, &damage_rect_); | |
| 1346 | |
| 1347 // Both quads should become overlays. | |
| 1348 EXPECT_EQ(2u, candidates.size()); | |
| 1349 EXPECT_EQ(-1, candidates[0].plane_z_order); | |
| 1350 EXPECT_EQ(-2, candidates[1].plane_z_order); | |
| 1351 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect); | |
| 1352 EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect); | |
| 1353 | |
| 1354 // All quads should be gone. | |
| 1355 EXPECT_TRUE(pass_list.back()->quad_list.empty()); | |
| 1356 } | 1336 } |
| 1357 | 1337 |
| 1358 TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) { | 1338 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { |
| 1359 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
| 1360 | |
| 1361 CreateCandidateQuadAt(resource_provider_.get(), | |
| 1362 pass->shared_quad_state_list.back(), pass.get(), | |
| 1363 kOverlayTopLeftRect); | |
| 1364 | |
| 1365 // Add a rotated quad that can't be promoted into overlay. | |
| 1366 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | |
| 1367 shared_state->opacity = 1.f; | |
| 1368 shared_state->quad_to_target_transform.Rotate(90); | |
| 1369 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | |
| 1370 kOverlayBottomRightRect); | |
| 1371 | |
| 1372 RenderPassList pass_list; | |
| 1373 pass_list.push_back(pass.Pass()); | |
| 1374 OverlayCandidateList candidates; | |
| 1375 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | |
| 1376 &candidates, &damage_rect_); | |
| 1377 | |
| 1378 // No quads should become overlays. | |
| 1379 EXPECT_EQ(0u, candidates.size()); | |
| 1380 EXPECT_EQ(2u, pass_list.back()->quad_list.size()); | |
| 1381 } | |
| 1382 | |
| 1383 TEST_F(AllOrNothingOverlayTest, DamageRect) { | |
| 1384 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1339 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1385 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1340 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1386 pass->shared_quad_state_list.back(), | 1341 pass->shared_quad_state_list.back(), |
| 1387 pass.get()); | 1342 pass.get()); |
| 1388 | 1343 pass->shared_quad_state_list.back() |
| 1389 damage_rect_ = kOverlayRect; | 1344 ->quad_to_target_transform.RotateAboutZAxis(45.f); |
| 1390 | |
| 1391 // Add something behind it. | |
| 1392 CreateFullscreenOpaqueQuad(resource_provider_.get(), | |
| 1393 pass->shared_quad_state_list.back(), pass.get()); | |
| 1394 CreateFullscreenOpaqueQuad(resource_provider_.get(), | |
| 1395 pass->shared_quad_state_list.back(), pass.get()); | |
| 1396 | 1345 |
| 1397 RenderPassList pass_list; | 1346 RenderPassList pass_list; |
| 1398 pass_list.push_back(pass.Pass()); | 1347 pass_list.push_back(pass.Pass()); |
| 1348 CALayerOverlayList ca_layer_list; |
| 1349 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); |
| 1350 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, |
| 1351 &ca_layer_list, &overlay_list); |
| 1352 ASSERT_EQ(1U, pass_list.size()); |
| 1353 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); |
| 1354 EXPECT_EQ(0U, overlay_list.size()); |
| 1355 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1356 } |
| 1399 | 1357 |
| 1400 // Check for potential candidates. | 1358 TEST_F(CALayerOverlayTest, Disallow3DTransform) { |
| 1401 OverlayCandidateList candidate_list; | 1359 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1360 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1361 pass->shared_quad_state_list.back(), |
| 1362 pass.get()); |
| 1363 pass->shared_quad_state_list.back() |
| 1364 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 1402 | 1365 |
| 1403 // Primary plane. | 1366 RenderPassList pass_list; |
| 1404 OverlayCandidate output_surface_plane; | 1367 pass_list.push_back(pass.Pass()); |
| 1405 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); | 1368 CALayerOverlayList ca_layer_list; |
| 1406 output_surface_plane.quad_rect_in_target_space = kOverlayRect; | 1369 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); |
| 1407 output_surface_plane.use_output_surface_for_resource = true; | 1370 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, |
| 1408 output_surface_plane.overlay_handled = true; | 1371 &ca_layer_list, &overlay_list); |
| 1409 candidate_list.push_back(output_surface_plane); | 1372 ASSERT_EQ(1U, pass_list.size()); |
| 1373 EXPECT_EQ(1U, pass_list.back()->quad_list.size()); |
| 1374 EXPECT_EQ(1U, overlay_list.size()); |
| 1375 EXPECT_EQ(0U, ca_layer_list.size()); |
| 1376 } |
| 1410 | 1377 |
| 1411 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1378 TEST_F(CALayerOverlayTest, AllowContainingClip) { |
| 1412 &candidate_list, &damage_rect_); | 1379 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1413 DCHECK(!damage_rect_.IsEmpty()); | 1380 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1381 pass->shared_quad_state_list.back(), |
| 1382 pass.get()); |
| 1383 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1384 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; |
| 1385 |
| 1386 RenderPassList pass_list; |
| 1387 pass_list.push_back(pass.Pass()); |
| 1388 CALayerOverlayList ca_layer_list; |
| 1389 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); |
| 1390 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, |
| 1391 &ca_layer_list, &overlay_list); |
| 1392 ASSERT_EQ(1U, pass_list.size()); |
| 1393 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); |
| 1394 EXPECT_EQ(0U, overlay_list.size()); |
| 1395 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1396 } |
| 1397 |
| 1398 TEST_F(CALayerOverlayTest, SkipDisjointClip) { |
| 1399 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1400 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1401 pass->shared_quad_state_list.back(), |
| 1402 pass.get()); |
| 1403 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1404 pass->shared_quad_state_list.back()->clip_rect = |
| 1405 gfx::Rect(128, 128, 128, 128); |
| 1406 |
| 1407 RenderPassList pass_list; |
| 1408 pass_list.push_back(pass.Pass()); |
| 1409 CALayerOverlayList ca_layer_list; |
| 1410 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); |
| 1411 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, |
| 1412 &ca_layer_list, &overlay_list); |
| 1413 ASSERT_EQ(1U, pass_list.size()); |
| 1414 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); |
| 1415 EXPECT_EQ(0U, overlay_list.size()); |
| 1416 EXPECT_EQ(0U, ca_layer_list.size()); |
| 1417 } |
| 1418 |
| 1419 TEST_F(CALayerOverlayTest, DisallowNontrivialClip) { |
| 1420 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1421 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1422 pass->shared_quad_state_list.back(), |
| 1423 pass.get()); |
| 1424 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1425 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); |
| 1426 |
| 1427 RenderPassList pass_list; |
| 1428 pass_list.push_back(pass.Pass()); |
| 1429 CALayerOverlayList ca_layer_list; |
| 1430 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); |
| 1431 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, |
| 1432 &ca_layer_list, &overlay_list); |
| 1433 |
| 1434 ASSERT_EQ(1U, pass_list.size()); |
| 1435 EXPECT_EQ(1U, pass_list.back()->quad_list.size()); |
| 1436 EXPECT_EQ(1U, overlay_list.size()); |
| 1437 EXPECT_EQ(0U, ca_layer_list.size()); |
| 1438 } |
| 1439 |
| 1440 TEST_F(CALayerOverlayTest, SkipTransparent) { |
| 1441 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1442 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1443 pass->shared_quad_state_list.back(), |
| 1444 pass.get()); |
| 1445 pass->shared_quad_state_list.back()->opacity = 0; |
| 1446 |
| 1447 RenderPassList pass_list; |
| 1448 pass_list.push_back(pass.Pass()); |
| 1449 CALayerOverlayList ca_layer_list; |
| 1450 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); |
| 1451 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, |
| 1452 &ca_layer_list, &overlay_list); |
| 1453 ASSERT_EQ(1U, pass_list.size()); |
| 1454 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); |
| 1455 EXPECT_EQ(0U, overlay_list.size()); |
| 1456 EXPECT_EQ(0U, ca_layer_list.size()); |
| 1414 } | 1457 } |
| 1415 | 1458 |
| 1416 class OverlayInfoRendererGL : public GLRenderer { | 1459 class OverlayInfoRendererGL : public GLRenderer { |
| 1417 public: | 1460 public: |
| 1418 OverlayInfoRendererGL(RendererClient* client, | 1461 OverlayInfoRendererGL(RendererClient* client, |
| 1419 const RendererSettings* settings, | 1462 const RendererSettings* settings, |
| 1420 OutputSurface* output_surface, | 1463 OutputSurface* output_surface, |
| 1421 ResourceProvider* resource_provider) | 1464 ResourceProvider* resource_provider) |
| 1422 : GLRenderer(client, | 1465 : GLRenderer(client, |
| 1423 settings, | 1466 settings, |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1759 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1802 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1760 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1803 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1761 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1804 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1762 SwapBuffers(); | 1805 SwapBuffers(); |
| 1763 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1806 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1764 Mock::VerifyAndClearExpectations(&scheduler_); | 1807 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1765 } | 1808 } |
| 1766 | 1809 |
| 1767 } // namespace | 1810 } // namespace |
| 1768 } // namespace cc | 1811 } // namespace cc |
| OLD | NEW |