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" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( | 62 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
63 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); | 63 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); |
64 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( | 64 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
65 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); | 65 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); |
66 } | 66 } |
67 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 67 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
68 ASSERT_EQ(2U, surfaces->size()); | 68 ASSERT_EQ(2U, surfaces->size()); |
69 | 69 |
70 OverlayCandidate& candidate = surfaces->back(); | 70 OverlayCandidate& candidate = surfaces->back(); |
71 if (candidate.display_rect.width() == 64) { | 71 if (candidate.display_rect.width() == 64) { |
72 EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect); | 72 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); |
73 } else { | 73 } else { |
74 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 74 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); |
75 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 75 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); |
76 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 76 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); |
77 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | 77 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), |
78 0.01f); | 78 0.01f); |
79 } | 79 } |
80 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), | 80 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
81 candidate.uv_rect.ToString()); | 81 candidate.uv_rect); |
82 candidate.overlay_handled = true; | 82 candidate.overlay_handled = true; |
83 } | 83 } |
84 }; | 84 }; |
85 | 85 |
86 class SandwichOverlayValidator : public OverlayCandidateValidator { | 86 class SandwichOverlayValidator : public OverlayCandidateValidator { |
87 public: | 87 public: |
88 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 88 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
89 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( | 89 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
90 new OverlayStrategyCommon(this, new OverlayStrategySandwich))); | 90 new OverlayStrategyCommon(this, new OverlayStrategySandwich))); |
91 } | 91 } |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 // Check that the quad is gone. | 462 // Check that the quad is gone. |
463 EXPECT_EQ(3U, main_pass->quad_list.size()); | 463 EXPECT_EQ(3U, main_pass->quad_list.size()); |
464 const QuadList& quad_list = main_pass->quad_list; | 464 const QuadList& quad_list = main_pass->quad_list; |
465 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 465 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
466 it != quad_list.BackToFrontEnd(); ++it) { | 466 it != quad_list.BackToFrontEnd(); ++it) { |
467 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 467 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
468 } | 468 } |
469 | 469 |
470 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); | 470 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); |
471 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); | 471 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); |
472 EXPECT_EQ(gfx::Rect(32, 32, 32, 32), candidate_list[1].display_rect); | 472 EXPECT_EQ(gfx::RectF(32.f, 32.f, 32.f, 32.f), candidate_list[1].display_rect); |
473 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); | 473 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); |
474 EXPECT_EQ(gfx::Rect(32, 32, 16, 16), candidate_list[2].display_rect); | 474 EXPECT_EQ(gfx::RectF(32.f, 32.f, 16.f, 16.f), candidate_list[2].display_rect); |
475 EXPECT_EQ(gfx::RectF(32. / 256, 32. / 256, 16. / 256, 16. / 256), | 475 EXPECT_EQ(gfx::RectF(32.f / 256.f, 32.f / 256.f, 16.f / 256.f, 16.f / 256.f), |
476 candidate_list[2].uv_rect); | 476 candidate_list[2].uv_rect); |
477 } | 477 } |
478 | 478 |
479 TEST_F(SandwichTest, GrowTopOverlayForToAlignWithDIP) { | 479 TEST_F(SandwichTest, GrowTopOverlayForToAlignWithDIP) { |
480 output_surface_->SetScaleFactor(2); | 480 output_surface_->SetScaleFactor(2); |
481 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 481 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
482 | 482 |
483 // The opaque quad on top is not DIP aligned, so it should be enlarged to | 483 // The opaque quad on top is not DIP aligned, so it should be enlarged to |
484 // include the surrounding DIP. | 484 // include the surrounding DIP. |
485 CreateOpaqueQuadAt(resource_provider_.get(), | 485 CreateOpaqueQuadAt(resource_provider_.get(), |
(...skipping 21 matching lines...) Expand all Loading... |
507 RenderPass* main_pass = pass_list.back(); | 507 RenderPass* main_pass = pass_list.back(); |
508 EXPECT_EQ(3U, main_pass->quad_list.size()); | 508 EXPECT_EQ(3U, main_pass->quad_list.size()); |
509 const QuadList& quad_list = main_pass->quad_list; | 509 const QuadList& quad_list = main_pass->quad_list; |
510 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 510 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
511 it != quad_list.BackToFrontEnd(); ++it) { | 511 it != quad_list.BackToFrontEnd(); ++it) { |
512 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 512 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
513 } | 513 } |
514 | 514 |
515 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); | 515 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); |
516 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); | 516 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); |
517 EXPECT_EQ(gfx::Rect(32, 32, 32, 32), candidate_list[1].display_rect); | 517 EXPECT_EQ(gfx::RectF(32.f, 32.f, 32.f, 32.f), candidate_list[1].display_rect); |
518 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); | 518 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); |
519 EXPECT_EQ(gfx::Rect(32, 32, 18, 18), candidate_list[2].display_rect); | 519 EXPECT_EQ(gfx::RectF(32.f, 32.f, 18.f, 18.f), candidate_list[2].display_rect); |
520 EXPECT_EQ(gfx::RectF(32. / 256, 32. / 256, 18. / 256, 18. / 256), | 520 EXPECT_EQ(gfx::RectF(32.f / 256.f, 32.f / 256.f, 18.f / 256.f, 18.f / 256.f), |
521 candidate_list[2].uv_rect); | 521 candidate_list[2].uv_rect); |
522 } | 522 } |
523 | 523 |
524 TEST_F(SandwichTest, MisalignedOverlay) { | 524 TEST_F(SandwichTest, MisalignedOverlay) { |
525 output_surface_->SetScaleFactor(2); | 525 output_surface_->SetScaleFactor(2); |
526 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 526 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
527 | 527 |
528 // We can't create an overlay for a candidate that is not DIP aligned. | 528 // We can't create an overlay for a candidate that is not DIP aligned. |
529 CreateCandidateQuadAt(resource_provider_.get(), | 529 CreateCandidateQuadAt(resource_provider_.get(), |
530 pass->shared_quad_state_list.back(), pass.get(), | 530 pass->shared_quad_state_list.back(), pass.get(), |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 SolidColorDrawQuad::MaterialCast(*it); | 594 SolidColorDrawQuad::MaterialCast(*it); |
595 if (solid_color_quad->color == SK_ColorTRANSPARENT) | 595 if (solid_color_quad->color == SK_ColorTRANSPARENT) |
596 transparent_quad_region.Union(solid_color_quad->rect); | 596 transparent_quad_region.Union(solid_color_quad->rect); |
597 } | 597 } |
598 } | 598 } |
599 DCHECK(covered_region == transparent_quad_region); | 599 DCHECK(covered_region == transparent_quad_region); |
600 | 600 |
601 // Check that overlays cover the same region that the quads covered. | 601 // Check that overlays cover the same region that the quads covered. |
602 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); | 602 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); |
603 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); | 603 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); |
604 EXPECT_EQ(gfx::Rect(0, 0, 64, 64), candidate_list[1].display_rect); | 604 EXPECT_EQ(gfx::RectF(64.f, 64.f), candidate_list[1].display_rect); |
605 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); | 605 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); |
606 EXPECT_TRUE(candidate_list[3].use_output_surface_for_resource); | 606 EXPECT_TRUE(candidate_list[3].use_output_surface_for_resource); |
607 Region overlay_region; | 607 Region overlay_region; |
608 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[2].display_rect)); | 608 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[2].display_rect)); |
609 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[3].display_rect)); | 609 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[3].display_rect)); |
610 DCHECK(covered_region == overlay_region); | 610 DCHECK(covered_region == overlay_region); |
611 } | 611 } |
612 | 612 |
613 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { | 613 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { |
614 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 614 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1550 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1550 renderer_->BeginDrawingFrame(&frame_no_overlays); |
1551 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1551 renderer_->FinishDrawingFrame(&frame_no_overlays); |
1552 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1552 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1553 SwapBuffers(); | 1553 SwapBuffers(); |
1554 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1554 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1555 Mock::VerifyAndClearExpectations(&scheduler_); | 1555 Mock::VerifyAndClearExpectations(&scheduler_); |
1556 } | 1556 } |
1557 | 1557 |
1558 } // namespace | 1558 } // namespace |
1559 } // namespace cc | 1559 } // namespace cc |
OLD | NEW |