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

Side by Side Diff: cc/output/overlay_unittest.cc

Issue 2746393005: cc: Pick the biggest Quad when selecting an overlay. (Closed)
Patch Set: Early out if we can't find a candidate. Created 3 years, 9 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 | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698