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

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

Issue 1373373003: Mac Overlays: Add AllOrNothing strategy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@OverlayTest
Patch Set: Rebase off master Created 5 years, 2 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
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 "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"
13 #include "cc/output/overlay_strategy_sandwich.h" 14 #include "cc/output/overlay_strategy_sandwich.h"
14 #include "cc/output/overlay_strategy_single_on_top.h" 15 #include "cc/output/overlay_strategy_single_on_top.h"
15 #include "cc/output/overlay_strategy_underlay.h" 16 #include "cc/output/overlay_strategy_underlay.h"
16 #include "cc/quads/render_pass.h" 17 #include "cc/quads/render_pass.h"
17 #include "cc/quads/solid_color_draw_quad.h" 18 #include "cc/quads/solid_color_draw_quad.h"
18 #include "cc/quads/stream_video_draw_quad.h" 19 #include "cc/quads/stream_video_draw_quad.h"
19 #include "cc/quads/texture_draw_quad.h" 20 #include "cc/quads/texture_draw_quad.h"
20 #include "cc/resources/resource_provider.h" 21 #include "cc/resources/resource_provider.h"
21 #include "cc/resources/texture_mailbox.h" 22 #include "cc/resources/texture_mailbox.h"
22 #include "cc/test/fake_output_surface_client.h" 23 #include "cc/test/fake_output_surface_client.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { 110 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
110 strategies->push_back(make_scoped_ptr( 111 strategies->push_back(make_scoped_ptr(
111 new OverlayStrategyCommon(this, new OverlayStrategySandwich))); 112 new OverlayStrategyCommon(this, new OverlayStrategySandwich)));
112 } 113 }
113 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { 114 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
114 for (OverlayCandidate& candidate : *surfaces) 115 for (OverlayCandidate& candidate : *surfaces)
115 candidate.overlay_handled = true; 116 candidate.overlay_handled = true;
116 } 117 }
117 }; 118 };
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 }
130 };
131
119 class DefaultOverlayProcessor : public OverlayProcessor { 132 class DefaultOverlayProcessor : public OverlayProcessor {
120 public: 133 public:
121 explicit DefaultOverlayProcessor(OutputSurface* surface); 134 explicit DefaultOverlayProcessor(OutputSurface* surface);
122 size_t GetStrategyCount(); 135 size_t GetStrategyCount();
123 }; 136 };
124 137
125 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) 138 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface)
126 : OverlayProcessor(surface) { 139 : OverlayProcessor(surface) {
127 } 140 }
128 141
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 scoped_ptr<OverlayOutputSurface> output_surface_; 349 scoped_ptr<OverlayOutputSurface> output_surface_;
337 FakeOutputSurfaceClient client_; 350 FakeOutputSurfaceClient client_;
338 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 351 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
339 scoped_ptr<ResourceProvider> resource_provider_; 352 scoped_ptr<ResourceProvider> resource_provider_;
340 scoped_ptr<OverlayProcessor> overlay_processor_; 353 scoped_ptr<OverlayProcessor> overlay_processor_;
341 }; 354 };
342 355
343 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; 356 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest;
344 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; 357 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest;
345 typedef OverlayTest<SandwichOverlayValidator> SandwichTest; 358 typedef OverlayTest<SandwichOverlayValidator> SandwichTest;
359 typedef OverlayTest<AllOrNothingOverlayValidator> AllOrNothingOverlayTest;
346 360
347 TEST(OverlayTest, NoOverlaysByDefault) { 361 TEST(OverlayTest, NoOverlaysByDefault) {
348 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); 362 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
349 OverlayOutputSurface output_surface(provider); 363 OverlayOutputSurface output_surface(provider);
350 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); 364 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator());
351 365
352 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); 366 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator);
353 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); 367 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL);
354 } 368 }
355 369
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 OverlayCandidateList candidate_list; 1178 OverlayCandidateList candidate_list;
1165 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 1179 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
1166 EXPECT_EQ(1U, pass_list.size()); 1180 EXPECT_EQ(1U, pass_list.size());
1167 ASSERT_EQ(2U, candidate_list.size()); 1181 ASSERT_EQ(2U, candidate_list.size());
1168 EXPECT_EQ(0, candidate_list[0].plane_z_order); 1182 EXPECT_EQ(0, candidate_list[0].plane_z_order);
1169 EXPECT_EQ(-1, candidate_list[1].plane_z_order); 1183 EXPECT_EQ(-1, candidate_list[1].plane_z_order);
1170 // The overlay quad should have changed to a SOLID_COLOR quad. 1184 // The overlay quad should have changed to a SOLID_COLOR quad.
1171 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); 1185 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR);
1172 } 1186 }
1173 1187
1188 TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) {
1189 scoped_ptr<RenderPass> pass = CreateRenderPass();
1190
1191 // Add two overlapping candidates.
1192 CreateCandidateQuadAt(resource_provider_.get(),
1193 pass->shared_quad_state_list.back(), pass.get(),
1194 kOverlayTopLeftRect);
1195 CreateCandidateQuadAt(resource_provider_.get(),
1196 pass->shared_quad_state_list.back(), pass.get(),
1197 kOverlayRect);
1198
1199 RenderPassList pass_list;
1200 pass_list.push_back(pass.Pass());
1201 OverlayCandidateList candidates;
1202 overlay_processor_->ProcessForOverlays(&pass_list, &candidates);
1203
1204 // Both quads should become overlays.
1205 EXPECT_EQ(2u, candidates.size());
1206 EXPECT_EQ(-1, candidates[0].plane_z_order);
1207 EXPECT_EQ(-2, candidates[1].plane_z_order);
1208 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect);
1209 EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect);
1210
1211 // All quads should be gone.
1212 EXPECT_TRUE(pass_list.back()->quad_list.empty());
1213 }
1214
1215 TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) {
1216 scoped_ptr<RenderPass> pass = CreateRenderPass();
1217
1218 CreateCandidateQuadAt(resource_provider_.get(),
1219 pass->shared_quad_state_list.back(), pass.get(),
1220 kOverlayTopLeftRect);
1221
1222 // Add a rotated quad that can't be promoted into overlay.
1223 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1224 shared_state->opacity = 1.f;
1225 shared_state->quad_to_target_transform.Rotate(90);
1226 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
1227 kOverlayBottomRightRect);
1228
1229 RenderPassList pass_list;
1230 pass_list.push_back(pass.Pass());
1231 OverlayCandidateList candidates;
1232 overlay_processor_->ProcessForOverlays(&pass_list, &candidates);
1233
1234 // No quads should become overlays.
1235 EXPECT_EQ(0u, candidates.size());
1236 EXPECT_EQ(2u, pass_list.back()->quad_list.size());
1237 }
1238
1174 class OverlayInfoRendererGL : public GLRenderer { 1239 class OverlayInfoRendererGL : public GLRenderer {
1175 public: 1240 public:
1176 OverlayInfoRendererGL(RendererClient* client, 1241 OverlayInfoRendererGL(RendererClient* client,
1177 const RendererSettings* settings, 1242 const RendererSettings* settings,
1178 OutputSurface* output_surface, 1243 OutputSurface* output_surface,
1179 ResourceProvider* resource_provider) 1244 ResourceProvider* resource_provider)
1180 : GLRenderer(client, 1245 : GLRenderer(client,
1181 settings, 1246 settings,
1182 output_surface, 1247 output_surface,
1183 resource_provider, 1248 resource_provider,
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 renderer_->BeginDrawingFrame(&frame_no_overlays); 1635 renderer_->BeginDrawingFrame(&frame_no_overlays);
1571 renderer_->FinishDrawingFrame(&frame_no_overlays); 1636 renderer_->FinishDrawingFrame(&frame_no_overlays);
1572 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); 1637 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
1573 SwapBuffers(); 1638 SwapBuffers();
1574 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); 1639 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
1575 Mock::VerifyAndClearExpectations(&scheduler_); 1640 Mock::VerifyAndClearExpectations(&scheduler_);
1576 } 1641 }
1577 1642
1578 } // namespace 1643 } // namespace
1579 } // namespace cc 1644 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698