| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 72 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 73 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); | 73 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); |
| 74 } | 74 } |
| 75 bool AllowCALayerOverlays() override { return false; } | 75 bool AllowCALayerOverlays() override { return false; } |
| 76 bool AllowDCLayerOverlays() override { return false; } | 76 bool AllowDCLayerOverlays() override { return false; } |
| 77 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 77 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 class SingleOverlayValidator : public OverlayCandidateValidator { | 80 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 81 public: | 81 public: |
| 82 SingleOverlayValidator() : expected_rect_(kOverlayRect) {} | 82 SingleOverlayValidator() : expected_rects_(1, gfx::RectF(kOverlayRect)) {} |
| 83 | 83 |
| 84 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 84 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 85 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); | 85 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); |
| 86 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); | 86 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); |
| 87 } | 87 } |
| 88 |
| 88 bool AllowCALayerOverlays() override { return false; } | 89 bool AllowCALayerOverlays() override { return false; } |
| 89 bool AllowDCLayerOverlays() override { return false; } | 90 bool AllowDCLayerOverlays() override { return false; } |
| 90 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 91 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 91 // We may have 1 or 2 surfaces depending on whether this ran through the | 92 // We may have 1 or 2 surfaces depending on whether this ran through the |
| 92 // full renderer and picked up the output surface, or not. | 93 // full renderer and picked up the output surface, or not. |
| 93 ASSERT_LE(1U, surfaces->size()); | 94 ASSERT_LE(1U, surfaces->size()); |
| 94 ASSERT_GE(2U, surfaces->size()); | 95 ASSERT_GE(2U, surfaces->size()); |
| 95 | 96 |
| 96 OverlayCandidate& candidate = surfaces->back(); | 97 OverlayCandidate& candidate = surfaces->back(); |
| 97 EXPECT_TRUE(!candidate.use_output_surface_for_resource); | 98 EXPECT_TRUE(!candidate.use_output_surface_for_resource); |
| 98 EXPECT_NEAR(expected_rect_.x(), candidate.display_rect.x(), 0.01f); | 99 for (const auto& r : expected_rects_) { |
| 99 EXPECT_NEAR(expected_rect_.y(), candidate.display_rect.y(), 0.01f); | 100 const float kAbsoluteError = 0.01f; |
| 100 EXPECT_NEAR(expected_rect_.width(), candidate.display_rect.width(), 0.01f); | 101 if (std::abs(r.x() - candidate.display_rect.x()) <= kAbsoluteError && |
| 101 EXPECT_NEAR(expected_rect_.height(), candidate.display_rect.height(), | 102 std::abs(r.y() - candidate.display_rect.y()) <= kAbsoluteError && |
| 102 0.01f); | 103 std::abs(r.width() - candidate.display_rect.width()) <= |
| 103 | 104 kAbsoluteError && |
| 104 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), | 105 std::abs(r.height() - candidate.display_rect.height()) <= |
| 105 candidate.uv_rect); | 106 kAbsoluteError) { |
| 106 if (!candidate.clip_rect.IsEmpty()) { | 107 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
| 107 EXPECT_EQ(true, candidate.is_clipped); | 108 candidate.uv_rect); |
| 108 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); | 109 if (!candidate.clip_rect.IsEmpty()) { |
| 110 EXPECT_EQ(true, candidate.is_clipped); |
| 111 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); |
| 112 } |
| 113 candidate.overlay_handled = true; |
| 114 return; |
| 115 } |
| 109 } | 116 } |
| 110 candidate.overlay_handled = true; | 117 // We should find one rect in expected_rects_that matches candidate. |
| 118 EXPECT_TRUE(false); |
| 111 } | 119 } |
| 112 | 120 |
| 113 void SetExpectedRect(const gfx::RectF& rect) { expected_rect_ = rect; } | 121 void AddExpectedRect(const gfx::RectF& rect) { |
| 122 expected_rects_.push_back(rect); |
| 123 } |
| 114 | 124 |
| 115 private: | 125 private: |
| 116 gfx::RectF expected_rect_; | 126 std::vector<gfx::RectF> expected_rects_; |
| 117 }; | 127 }; |
| 118 | 128 |
| 119 class CALayerValidator : public OverlayCandidateValidator { | 129 class CALayerValidator : public OverlayCandidateValidator { |
| 120 public: | 130 public: |
| 121 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} | 131 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
| 122 bool AllowCALayerOverlays() override { return true; } | 132 bool AllowCALayerOverlays() override { return true; } |
| 123 bool AllowDCLayerOverlays() override { return false; } | 133 bool AllowDCLayerOverlays() override { return false; } |
| 124 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 134 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
| 125 }; | 135 }; |
| 126 | 136 |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 674 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 665 it != quad_list.BackToFrontEnd(); | 675 it != quad_list.BackToFrontEnd(); |
| 666 ++it) { | 676 ++it) { |
| 667 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 677 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 668 } | 678 } |
| 669 | 679 |
| 670 // Check that the right resource id got extracted. | 680 // Check that the right resource id got extracted. |
| 671 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); | 681 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); |
| 672 } | 682 } |
| 673 | 683 |
| 684 TEST_F(SingleOverlayOnTopTest, PrioritizeBiggerOne) { |
| 685 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 686 // Add a small quad. |
| 687 const auto kSmallCandidateRect = gfx::Rect(0, 0, 16, 16); |
| 688 CreateCandidateQuadAt(resource_provider_.get(), |
| 689 pass->shared_quad_state_list.back(), pass.get(), |
| 690 kSmallCandidateRect); |
| 691 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 692 gfx::RectF(kSmallCandidateRect)); |
| 693 |
| 694 // Add a bigger quad below the previous one, but not occluded. |
| 695 const auto kBigCandidateRect = gfx::Rect(20, 20, 32, 32); |
| 696 TextureDrawQuad* quad_big = CreateCandidateQuadAt( |
| 697 resource_provider_.get(), pass->shared_quad_state_list.back(), pass.get(), |
| 698 kBigCandidateRect); |
| 699 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 700 gfx::RectF(kBigCandidateRect)); |
| 701 |
| 702 unsigned resource_big = quad_big->resource_id(); |
| 703 |
| 704 // Add something behind it. |
| 705 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 706 pass->shared_quad_state_list.back(), pass.get()); |
| 707 |
| 708 // Check for potential candidates. |
| 709 OverlayCandidateList candidate_list; |
| 710 RenderPassFilterList render_pass_filters; |
| 711 RenderPassFilterList render_pass_background_filters; |
| 712 overlay_processor_->ProcessForOverlays( |
| 713 resource_provider_.get(), pass.get(), render_pass_filters, |
| 714 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 715 &damage_rect_, &content_bounds_); |
| 716 ASSERT_EQ(1U, candidate_list.size()); |
| 717 |
| 718 RenderPass* main_pass = pass.get(); |
| 719 // Check that one quad is gone. |
| 720 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 721 // Check that we have only one overlay. |
| 722 EXPECT_EQ(1U, candidate_list.size()); |
| 723 // Check that the right resource id (bigger quad) got extracted. |
| 724 EXPECT_EQ(resource_big, candidate_list.front().resource_id); |
| 725 } |
| 726 |
| 674 TEST_F(SingleOverlayOnTopTest, DamageRect) { | 727 TEST_F(SingleOverlayOnTopTest, DamageRect) { |
| 675 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 728 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 676 CreateFullscreenCandidateQuad(resource_provider_.get(), | 729 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 677 pass->shared_quad_state_list.back(), | 730 pass->shared_quad_state_list.back(), |
| 678 pass.get()); | 731 pass.get()); |
| 679 damage_rect_ = kOverlayRect; | 732 damage_rect_ = kOverlayRect; |
| 680 | 733 |
| 681 // Add something behind it. | 734 // Add something behind it. |
| 682 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 735 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 683 pass->shared_quad_state_list.back(), pass.get()); | 736 pass->shared_quad_state_list.back(), pass.get()); |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 RenderPassFilterList render_pass_background_filters; | 1075 RenderPassFilterList render_pass_background_filters; |
| 1023 overlay_processor_->ProcessForOverlays( | 1076 overlay_processor_->ProcessForOverlays( |
| 1024 resource_provider_.get(), pass.get(), render_pass_filters, | 1077 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1025 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1078 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1026 &damage_rect_, &content_bounds_); | 1079 &damage_rect_, &content_bounds_); |
| 1027 ASSERT_EQ(1U, candidate_list.size()); | 1080 ASSERT_EQ(1U, candidate_list.size()); |
| 1028 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 1081 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 1029 } | 1082 } |
| 1030 | 1083 |
| 1031 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 1084 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 1032 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1085 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1033 gfx::RectF(kOverlayBottomRightRect)); | 1086 gfx::RectF(kOverlayBottomRightRect)); |
| 1034 | 1087 |
| 1035 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1088 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1036 CreateOpaqueQuadAt(resource_provider_.get(), | 1089 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1037 pass->shared_quad_state_list.back(), pass.get(), | 1090 pass->shared_quad_state_list.back(), pass.get(), |
| 1038 kOverlayTopLeftRect); | 1091 kOverlayTopLeftRect); |
| 1039 CreateCandidateQuadAt(resource_provider_.get(), | 1092 CreateCandidateQuadAt(resource_provider_.get(), |
| 1040 pass->shared_quad_state_list.back(), | 1093 pass->shared_quad_state_list.back(), |
| 1041 pass.get(), | 1094 pass.get(), |
| 1042 kOverlayBottomRightRect); | 1095 kOverlayBottomRightRect); |
| 1043 | 1096 |
| 1044 OverlayCandidateList candidate_list; | 1097 OverlayCandidateList candidate_list; |
| 1045 RenderPassFilterList render_pass_filters; | 1098 RenderPassFilterList render_pass_filters; |
| 1046 RenderPassFilterList render_pass_background_filters; | 1099 RenderPassFilterList render_pass_background_filters; |
| 1047 overlay_processor_->ProcessForOverlays( | 1100 overlay_processor_->ProcessForOverlays( |
| 1048 resource_provider_.get(), pass.get(), render_pass_filters, | 1101 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1049 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1102 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1050 &damage_rect_, &content_bounds_); | 1103 &damage_rect_, &content_bounds_); |
| 1051 EXPECT_EQ(1U, candidate_list.size()); | 1104 EXPECT_EQ(1U, candidate_list.size()); |
| 1052 } | 1105 } |
| 1053 | 1106 |
| 1054 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 1107 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 1055 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1108 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1056 gfx::RectF(kOverlayBottomRightRect)); | 1109 gfx::RectF(kOverlayBottomRightRect)); |
| 1057 | 1110 |
| 1058 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1111 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1059 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1112 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1060 shared_state->opacity = 0.f; | 1113 shared_state->opacity = 0.f; |
| 1061 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1114 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1062 kOverlayBottomRightRect); | 1115 kOverlayBottomRightRect); |
| 1063 shared_state = pass->CreateAndAppendSharedQuadState(); | 1116 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1064 shared_state->opacity = 1.f; | 1117 shared_state->opacity = 1.f; |
| 1065 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1118 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1066 kOverlayBottomRightRect); | 1119 kOverlayBottomRightRect); |
| 1067 | 1120 |
| 1068 OverlayCandidateList candidate_list; | 1121 OverlayCandidateList candidate_list; |
| 1069 RenderPassFilterList render_pass_filters; | 1122 RenderPassFilterList render_pass_filters; |
| 1070 RenderPassFilterList render_pass_background_filters; | 1123 RenderPassFilterList render_pass_background_filters; |
| 1071 overlay_processor_->ProcessForOverlays( | 1124 overlay_processor_->ProcessForOverlays( |
| 1072 resource_provider_.get(), pass.get(), render_pass_filters, | 1125 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1073 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1126 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1074 &damage_rect_, &content_bounds_); | 1127 &damage_rect_, &content_bounds_); |
| 1075 EXPECT_EQ(1U, candidate_list.size()); | 1128 EXPECT_EQ(1U, candidate_list.size()); |
| 1076 } | 1129 } |
| 1077 | 1130 |
| 1078 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1131 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 1079 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1132 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1080 gfx::RectF(kOverlayBottomRightRect)); | 1133 gfx::RectF(kOverlayBottomRightRect)); |
| 1081 | 1134 |
| 1082 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1135 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1083 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1136 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 1084 SK_ColorTRANSPARENT, pass.get(), | 1137 SK_ColorTRANSPARENT, pass.get(), |
| 1085 kOverlayBottomRightRect); | 1138 kOverlayBottomRightRect); |
| 1086 CreateCandidateQuadAt(resource_provider_.get(), | 1139 CreateCandidateQuadAt(resource_provider_.get(), |
| 1087 pass->shared_quad_state_list.back(), pass.get(), | 1140 pass->shared_quad_state_list.back(), pass.get(), |
| 1088 kOverlayBottomRightRect); | 1141 kOverlayBottomRightRect); |
| 1089 | 1142 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1211 RenderPassFilterList render_pass_filters; | 1264 RenderPassFilterList render_pass_filters; |
| 1212 RenderPassFilterList render_pass_background_filters; | 1265 RenderPassFilterList render_pass_background_filters; |
| 1213 overlay_processor_->ProcessForOverlays( | 1266 overlay_processor_->ProcessForOverlays( |
| 1214 resource_provider_.get(), pass.get(), render_pass_filters, | 1267 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1215 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1268 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1216 &damage_rect_, &content_bounds_); | 1269 &damage_rect_, &content_bounds_); |
| 1217 EXPECT_EQ(1U, candidate_list.size()); | 1270 EXPECT_EQ(1U, candidate_list.size()); |
| 1218 } | 1271 } |
| 1219 | 1272 |
| 1220 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1273 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1221 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1274 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1222 gfx::RectF(kOverlayBottomRightRect)); | 1275 gfx::RectF(kOverlayBottomRightRect)); |
| 1223 | 1276 |
| 1224 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1277 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1225 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1278 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1226 pass->shared_quad_state_list.back(), pass.get()); | 1279 pass->shared_quad_state_list.back(), pass.get()); |
| 1227 CreateCandidateQuadAt(resource_provider_.get(), | 1280 CreateCandidateQuadAt(resource_provider_.get(), |
| 1228 pass->shared_quad_state_list.back(), pass.get(), | 1281 pass->shared_quad_state_list.back(), pass.get(), |
| 1229 kOverlayBottomRightRect); | 1282 kOverlayBottomRightRect); |
| 1230 | 1283 |
| 1231 OverlayCandidateList candidate_list; | 1284 OverlayCandidateList candidate_list; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1311 // The second time the same overlay rect is scheduled it will be subtracted | 1364 // The second time the same overlay rect is scheduled it will be subtracted |
| 1312 // from the damage rect. | 1365 // from the damage rect. |
| 1313 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1366 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 1314 } | 1367 } |
| 1315 | 1368 |
| 1316 // Underlay damage can only be subtracted if the previous frame's underlay | 1369 // Underlay damage can only be subtracted if the previous frame's underlay |
| 1317 // was the same rect. | 1370 // was the same rect. |
| 1318 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { | 1371 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { |
| 1319 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; | 1372 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; |
| 1320 for (int i = 0; i < 2; ++i) { | 1373 for (int i = 0; i < 2; ++i) { |
| 1321 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1374 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1322 gfx::RectF(overlay_rects[i])); | 1375 gfx::RectF(overlay_rects[i])); |
| 1323 | 1376 |
| 1324 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1377 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1325 | 1378 |
| 1326 CreateCandidateQuadAt(resource_provider_.get(), | 1379 CreateCandidateQuadAt(resource_provider_.get(), |
| 1327 pass->shared_quad_state_list.back(), pass.get(), | 1380 pass->shared_quad_state_list.back(), pass.get(), |
| 1328 overlay_rects[i]); | 1381 overlay_rects[i]); |
| 1329 | 1382 |
| 1330 damage_rect_ = overlay_rects[i]; | 1383 damage_rect_ = overlay_rects[i]; |
| 1331 | 1384 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1359 overlay_processor_->ProcessForOverlays( | 1412 overlay_processor_->ProcessForOverlays( |
| 1360 resource_provider_.get(), pass.get(), render_pass_filters, | 1413 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1361 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1414 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1362 &damage_rect_, &content_bounds_); | 1415 &damage_rect_, &content_bounds_); |
| 1363 } | 1416 } |
| 1364 | 1417 |
| 1365 EXPECT_EQ(kOverlayRect, damage_rect_); | 1418 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1366 } | 1419 } |
| 1367 | 1420 |
| 1368 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { | 1421 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { |
| 1369 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1422 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1370 gfx::RectF(kOverlayBottomRightRect)); | 1423 gfx::RectF(kOverlayBottomRightRect)); |
| 1371 | 1424 |
| 1372 for (int i = 0; i < 2; ++i) { | 1425 for (int i = 0; i < 2; ++i) { |
| 1373 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1426 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1374 // Add a non-overlapping quad above the candidate. | 1427 // Add a non-overlapping quad above the candidate. |
| 1375 CreateOpaqueQuadAt(resource_provider_.get(), | 1428 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1376 pass->shared_quad_state_list.back(), pass.get(), | 1429 pass->shared_quad_state_list.back(), pass.get(), |
| 1377 kOverlayTopLeftRect); | 1430 kOverlayTopLeftRect); |
| 1378 CreateCandidateQuadAt(resource_provider_.get(), | 1431 CreateCandidateQuadAt(resource_provider_.get(), |
| 1379 pass->shared_quad_state_list.back(), pass.get(), | 1432 pass->shared_quad_state_list.back(), pass.get(), |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1422 overlay_processor_->ProcessForOverlays( | 1475 overlay_processor_->ProcessForOverlays( |
| 1423 resource_provider_.get(), pass.get(), render_pass_filters, | 1476 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1424 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1477 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1425 &damage_rect_, &content_bounds_); | 1478 &damage_rect_, &content_bounds_); |
| 1426 | 1479 |
| 1427 EXPECT_EQ(1U, content_bounds_.size()); | 1480 EXPECT_EQ(1U, content_bounds_.size()); |
| 1428 EXPECT_TRUE(content_bounds_[0].IsEmpty()); | 1481 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1429 } | 1482 } |
| 1430 | 1483 |
| 1431 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { | 1484 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { |
| 1432 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1485 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1433 gfx::RectF(kOverlayBottomRightRect)); | 1486 gfx::RectF(kOverlayBottomRightRect)); |
| 1434 | 1487 |
| 1435 const gfx::Rect kLeftSide(0, 0, 128, 256); | 1488 const gfx::Rect kLeftSide(0, 0, 128, 256); |
| 1436 const gfx::Rect kTopRight(128, 0, 128, 128); | 1489 const gfx::Rect kTopRight(128, 0, 128, 128); |
| 1437 | 1490 |
| 1438 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1491 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1439 CreateCandidateQuadAt(resource_provider_.get(), | 1492 CreateCandidateQuadAt(resource_provider_.get(), |
| 1440 pass->shared_quad_state_list.back(), pass.get(), | 1493 pass->shared_quad_state_list.back(), pass.get(), |
| 1441 kOverlayBottomRightRect); | 1494 kOverlayBottomRightRect); |
| 1442 CreateOpaqueQuadAt(resource_provider_.get(), | 1495 CreateOpaqueQuadAt(resource_provider_.get(), |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1500 &damage_rect_, &content_bounds_); | 1553 &damage_rect_, &content_bounds_); |
| 1501 | 1554 |
| 1502 EXPECT_EQ(1U, content_bounds_.size()); | 1555 EXPECT_EQ(1U, content_bounds_.size()); |
| 1503 EXPECT_EQ(kOverlayRect, content_bounds_[0]); | 1556 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1504 } | 1557 } |
| 1505 | 1558 |
| 1506 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { | 1559 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { |
| 1507 // Check rounding behaviour on overlay quads. Be conservative (content | 1560 // Check rounding behaviour on overlay quads. Be conservative (content |
| 1508 // potentially visible on boundary). | 1561 // potentially visible on boundary). |
| 1509 const gfx::Rect overlay_rect(1, 1, 8, 8); | 1562 const gfx::Rect overlay_rect(1, 1, 8, 8); |
| 1510 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1563 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1511 gfx::RectF(1.5f, 1.5f, 8, 8)); | 1564 gfx::RectF(1.5f, 1.5f, 8, 8)); |
| 1512 | 1565 |
| 1513 gfx::Transform transform; | 1566 gfx::Transform transform; |
| 1514 transform.Translate(0.5f, 0.5f); | 1567 transform.Translate(0.5f, 0.5f); |
| 1515 | 1568 |
| 1516 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); | 1569 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1517 CreateCandidateQuadAt(resource_provider_.get(), | 1570 CreateCandidateQuadAt(resource_provider_.get(), |
| 1518 pass->shared_quad_state_list.back(), pass.get(), | 1571 pass->shared_quad_state_list.back(), pass.get(), |
| 1519 overlay_rect); | 1572 overlay_rect); |
| 1520 CreateOpaqueQuadAt(resource_provider_.get(), | 1573 CreateOpaqueQuadAt(resource_provider_.get(), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1531 | 1584 |
| 1532 EXPECT_EQ(1U, content_bounds_.size()); | 1585 EXPECT_EQ(1U, content_bounds_.size()); |
| 1533 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); | 1586 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); |
| 1534 } | 1587 } |
| 1535 | 1588 |
| 1536 TEST_F(UnderlayCastTest, RoundContentBounds) { | 1589 TEST_F(UnderlayCastTest, RoundContentBounds) { |
| 1537 // Check rounding behaviour on content quads (bounds should be enclosing | 1590 // Check rounding behaviour on content quads (bounds should be enclosing |
| 1538 // rect). | 1591 // rect). |
| 1539 gfx::Rect overlay_rect = kOverlayRect; | 1592 gfx::Rect overlay_rect = kOverlayRect; |
| 1540 overlay_rect.Inset(0, 0, 1, 1); | 1593 overlay_rect.Inset(0, 0, 1, 1); |
| 1541 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1594 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1542 gfx::RectF(0.5f, 0.5f, 255, 255)); | 1595 gfx::RectF(0.5f, 0.5f, 255, 255)); |
| 1543 | 1596 |
| 1544 gfx::Transform transform; | 1597 gfx::Transform transform; |
| 1545 transform.Translate(0.5f, 0.5f); | 1598 transform.Translate(0.5f, 0.5f); |
| 1546 | 1599 |
| 1547 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); | 1600 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1548 CreateCandidateQuadAt(resource_provider_.get(), | 1601 CreateCandidateQuadAt(resource_provider_.get(), |
| 1549 pass->shared_quad_state_list.back(), pass.get(), | 1602 pass->shared_quad_state_list.back(), pass.get(), |
| 1550 overlay_rect); | 1603 overlay_rect); |
| 1551 CreateOpaqueQuadAt(resource_provider_.get(), | 1604 CreateOpaqueQuadAt(resource_provider_.get(), |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1905 std::unique_ptr<ResourceProvider> resource_provider_; | 1958 std::unique_ptr<ResourceProvider> resource_provider_; |
| 1906 std::unique_ptr<OverlayInfoRendererGL> renderer_; | 1959 std::unique_ptr<OverlayInfoRendererGL> renderer_; |
| 1907 scoped_refptr<TestContextProvider> provider_; | 1960 scoped_refptr<TestContextProvider> provider_; |
| 1908 MockOverlayScheduler scheduler_; | 1961 MockOverlayScheduler scheduler_; |
| 1909 }; | 1962 }; |
| 1910 | 1963 |
| 1911 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { | 1964 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { |
| 1912 bool use_validator = true; | 1965 bool use_validator = true; |
| 1913 Init(use_validator); | 1966 Init(use_validator); |
| 1914 renderer_->set_expect_overlays(true); | 1967 renderer_->set_expect_overlays(true); |
| 1915 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( | 1968 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1916 gfx::RectF(kOverlayBottomRightRect)); | 1969 gfx::RectF(kOverlayBottomRightRect)); |
| 1917 | 1970 |
| 1918 gfx::Size viewport_size(16, 16); | 1971 gfx::Size viewport_size(16, 16); |
| 1919 | 1972 |
| 1920 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1973 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1921 | 1974 |
| 1922 CreateCandidateQuadAt(resource_provider_.get(), | 1975 CreateCandidateQuadAt(resource_provider_.get(), |
| 1923 pass->shared_quad_state_list.back(), pass.get(), | 1976 pass->shared_quad_state_list.back(), pass.get(), |
| 1924 kOverlayBottomRightRect); | 1977 kOverlayBottomRightRect); |
| 1925 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1978 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2456 kOverlayRect, render_pass_id_, 2, gfx::RectF(), gfx::Size(), | 2509 kOverlayRect, render_pass_id_, 2, gfx::RectF(), gfx::Size(), |
| 2457 gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF()); | 2510 gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF()); |
| 2458 } | 2511 } |
| 2459 | 2512 |
| 2460 ProcessForOverlays(); | 2513 ProcessForOverlays(); |
| 2461 EXPECT_EQ(0U, ca_layer_list_.size()); | 2514 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 2462 } | 2515 } |
| 2463 | 2516 |
| 2464 } // namespace | 2517 } // namespace |
| 2465 } // namespace cc | 2518 } // namespace cc |
| OLD | NEW |