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

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

Issue 2693023002: Use SwapBuffersWithBounds on Chromecast (Closed)
Patch Set: Created 3 years, 10 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 <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"
11 #include "cc/base/region.h" 11 #include "cc/base/region.h"
12 #include "cc/output/ca_layer_overlay.h" 12 #include "cc/output/ca_layer_overlay.h"
13 #include "cc/output/filter_operation.h" 13 #include "cc/output/filter_operation.h"
14 #include "cc/output/gl_renderer.h" 14 #include "cc/output/gl_renderer.h"
15 #include "cc/output/output_surface.h" 15 #include "cc/output/output_surface.h"
16 #include "cc/output/output_surface_client.h" 16 #include "cc/output/output_surface_client.h"
17 #include "cc/output/output_surface_frame.h" 17 #include "cc/output/output_surface_frame.h"
18 #include "cc/output/overlay_candidate_validator.h" 18 #include "cc/output/overlay_candidate_validator.h"
19 #include "cc/output/overlay_processor.h" 19 #include "cc/output/overlay_processor.h"
20 #include "cc/output/overlay_strategy_fullscreen.h" 20 #include "cc/output/overlay_strategy_fullscreen.h"
21 #include "cc/output/overlay_strategy_single_on_top.h" 21 #include "cc/output/overlay_strategy_single_on_top.h"
22 #include "cc/output/overlay_strategy_underlay.h" 22 #include "cc/output/overlay_strategy_underlay.h"
23 #include "cc/output/overlay_strategy_underlay_cast.h"
23 #include "cc/quads/render_pass.h" 24 #include "cc/quads/render_pass.h"
24 #include "cc/quads/render_pass_draw_quad.h" 25 #include "cc/quads/render_pass_draw_quad.h"
25 #include "cc/quads/solid_color_draw_quad.h" 26 #include "cc/quads/solid_color_draw_quad.h"
26 #include "cc/quads/stream_video_draw_quad.h" 27 #include "cc/quads/stream_video_draw_quad.h"
27 #include "cc/quads/texture_draw_quad.h" 28 #include "cc/quads/texture_draw_quad.h"
28 #include "cc/resources/resource_provider.h" 29 #include "cc/resources/resource_provider.h"
29 #include "cc/resources/texture_mailbox.h" 30 #include "cc/resources/texture_mailbox.h"
30 #include "cc/test/fake_output_surface_client.h" 31 #include "cc/test/fake_output_surface_client.h"
31 #include "cc/test/fake_resource_provider.h" 32 #include "cc/test/fake_resource_provider.h"
32 #include "cc/test/geometry_test_utils.h" 33 #include "cc/test/geometry_test_utils.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } 124 }
124 }; 125 };
125 126
126 class UnderlayOverlayValidator : public SingleOverlayValidator { 127 class UnderlayOverlayValidator : public SingleOverlayValidator {
127 public: 128 public:
128 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { 129 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
129 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); 130 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this));
130 } 131 }
131 }; 132 };
132 133
134 class UnderlayCastOverlayValidator : public SingleOverlayValidator {
135 public:
136 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
137 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlayCast>(this));
138 }
139 };
140
133 class DefaultOverlayProcessor : public OverlayProcessor { 141 class DefaultOverlayProcessor : public OverlayProcessor {
134 public: 142 public:
135 explicit DefaultOverlayProcessor(OutputSurface* surface); 143 explicit DefaultOverlayProcessor(OutputSurface* surface);
136 size_t GetStrategyCount(); 144 size_t GetStrategyCount();
137 }; 145 };
138 146
139 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) 147 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface)
140 : OverlayProcessor(surface) { 148 : OverlayProcessor(surface) {
141 } 149 }
142 150
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 303
296 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, 304 void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
297 const SharedQuadState* shared_quad_state, 305 const SharedQuadState* shared_quad_state,
298 RenderPass* render_pass, 306 RenderPass* render_pass,
299 const gfx::Rect& rect) { 307 const gfx::Rect& rect) {
300 SolidColorDrawQuad* color_quad = 308 SolidColorDrawQuad* color_quad =
301 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 309 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
302 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); 310 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false);
303 } 311 }
304 312
313 void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
314 const SharedQuadState* shared_quad_state,
315 RenderPass* render_pass,
316 const gfx::Rect& rect,
317 SkColor color) {
318 SolidColorDrawQuad* color_quad =
319 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
320 color_quad->SetNew(shared_quad_state, rect, rect, color, false);
321 }
322
305 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider, 323 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider,
306 const SharedQuadState* shared_quad_state, 324 const SharedQuadState* shared_quad_state,
307 RenderPass* render_pass) { 325 RenderPass* render_pass) {
308 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass, 326 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass,
309 render_pass->output_rect); 327 render_pass->output_rect);
310 } 328 }
311 329
312 static void CompareRenderPassLists(const RenderPassList& expected_list, 330 static void CompareRenderPassLists(const RenderPassList& expected_list,
313 const RenderPassList& actual_list) { 331 const RenderPassList& actual_list) {
314 EXPECT_EQ(expected_list.size(), actual_list.size()); 332 EXPECT_EQ(expected_list.size(), actual_list.size());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 FakeOutputSurfaceClient client_; 381 FakeOutputSurfaceClient client_;
364 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; 382 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_;
365 std::unique_ptr<ResourceProvider> resource_provider_; 383 std::unique_ptr<ResourceProvider> resource_provider_;
366 std::unique_ptr<OverlayProcessor> overlay_processor_; 384 std::unique_ptr<OverlayProcessor> overlay_processor_;
367 gfx::Rect damage_rect_; 385 gfx::Rect damage_rect_;
368 }; 386 };
369 387
370 typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest; 388 typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest;
371 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; 389 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest;
372 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; 390 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest;
391 typedef OverlayTest<UnderlayCastOverlayValidator> UnderlayCastTest;
danakj 2017/02/14 17:28:58 using instead of typedef
halliwell 2017/02/15 22:29:04 Done.
373 typedef OverlayTest<CALayerValidator> CALayerOverlayTest; 392 typedef OverlayTest<CALayerValidator> CALayerOverlayTest;
374 393
375 TEST(OverlayTest, NoOverlaysByDefault) { 394 TEST(OverlayTest, NoOverlaysByDefault) {
376 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); 395 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
377 OverlayOutputSurface output_surface(provider); 396 OverlayOutputSurface output_surface(provider);
378 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); 397 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator());
379 398
380 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); 399 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator);
381 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); 400 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL);
382 } 401 }
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 RenderPassFilterList render_pass_background_filters; 1233 RenderPassFilterList render_pass_background_filters;
1215 overlay_processor_->ProcessForOverlays( 1234 overlay_processor_->ProcessForOverlays(
1216 resource_provider_.get(), pass.get(), render_pass_filters, 1235 resource_provider_.get(), pass.get(), render_pass_filters,
1217 render_pass_background_filters, &candidate_list, nullptr, 1236 render_pass_background_filters, &candidate_list, nullptr,
1218 &damage_rect_); 1237 &damage_rect_);
1219 } 1238 }
1220 1239
1221 EXPECT_TRUE(damage_rect_.IsEmpty()); 1240 EXPECT_TRUE(damage_rect_.IsEmpty());
1222 } 1241 }
1223 1242
1243 TEST_F(UnderlayCastTest, NoOverlayDamageRect) {
danakj 2017/02/14 17:28:58 These tests are named for damage rects but that se
danakj 2017/02/14 17:32:35 .. but then should they be testing the damage rect
halliwell 2017/02/15 22:29:04 They are mis-named (I copied them over from previo
1244 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1245
1246 CreateOpaqueQuadAt(resource_provider_.get(),
1247 pass->shared_quad_state_list.back(), pass.get(),
1248 kOverlayTopLeftRect);
1249
1250 OverlayCandidateList candidate_list;
1251 RenderPassFilterList render_pass_filters;
1252 RenderPassFilterList render_pass_background_filters;
1253 overlay_processor_->ProcessForOverlays(
1254 resource_provider_.get(), pass.get(), render_pass_filters,
1255 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
1256
1257 std::vector<gfx::Rect> content_bounds;
1258 overlay_processor_->GetContentBounds(&content_bounds);
1259 EXPECT_EQ(0U, content_bounds.size());
1260 }
1261
1262 TEST_F(UnderlayCastTest, FullScreenOverlayDamageRect) {
1263 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1264 CreateCandidateQuadAt(resource_provider_.get(),
1265 pass->shared_quad_state_list.back(), pass.get(),
1266 kOverlayRect);
1267
1268 OverlayCandidateList candidate_list;
1269 RenderPassFilterList render_pass_filters;
1270 RenderPassFilterList render_pass_background_filters;
1271 overlay_processor_->ProcessForOverlays(
1272 resource_provider_.get(), pass.get(), render_pass_filters,
1273 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
1274
1275 std::vector<gfx::Rect> content_bounds;
1276 overlay_processor_->GetContentBounds(&content_bounds);
1277 EXPECT_EQ(1U, content_bounds.size());
1278 EXPECT_TRUE(content_bounds[0].IsEmpty());
danakj 2017/02/14 17:32:35 What is the difference between swapping an empty r
halliwell 2017/02/15 22:29:04 I clarified in the comment on OutputFrame. Empty
1279 }
1280
1281 TEST_F(UnderlayCastTest, BlackOutsideOverlayDamageRect) {
1282 const gfx::Rect kLeftSide(0, 0, 128, 256);
1283 const gfx::Rect kTopRight(128, 0, 128, 128);
1284
1285 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1286 CreateCandidateQuadAt(resource_provider_.get(),
1287 pass->shared_quad_state_list.back(), pass.get(),
1288 kOverlayBottomRightRect);
1289 CreateOpaqueQuadAt(resource_provider_.get(),
1290 pass->shared_quad_state_list.back(), pass.get(), kLeftSide,
1291 SK_ColorBLACK);
1292 CreateOpaqueQuadAt(resource_provider_.get(),
1293 pass->shared_quad_state_list.back(), pass.get(), kTopRight,
1294 SK_ColorBLACK);
1295
1296 OverlayCandidateList candidate_list;
1297 RenderPassFilterList render_pass_filters;
1298 RenderPassFilterList render_pass_background_filters;
1299 overlay_processor_->ProcessForOverlays(
1300 resource_provider_.get(), pass.get(), render_pass_filters,
1301 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
1302
1303 std::vector<gfx::Rect> content_bounds;
1304 overlay_processor_->GetContentBounds(&content_bounds);
1305 EXPECT_EQ(1U, content_bounds.size());
1306 EXPECT_TRUE(content_bounds[0].IsEmpty());
1307 }
1308
1309 TEST_F(UnderlayCastTest, OverlayOccludedDamageRect) {
1310 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1311 CreateOpaqueQuadAt(resource_provider_.get(),
1312 pass->shared_quad_state_list.back(), pass.get(),
1313 kOverlayTopLeftRect);
1314 CreateCandidateQuadAt(resource_provider_.get(),
1315 pass->shared_quad_state_list.back(), pass.get(),
1316 kOverlayRect);
1317
1318 OverlayCandidateList candidate_list;
1319 RenderPassFilterList render_pass_filters;
1320 RenderPassFilterList render_pass_background_filters;
1321 overlay_processor_->ProcessForOverlays(
1322 resource_provider_.get(), pass.get(), render_pass_filters,
1323 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
1324
1325 std::vector<gfx::Rect> content_bounds;
1326 overlay_processor_->GetContentBounds(&content_bounds);
1327 EXPECT_EQ(1U, content_bounds.size());
1328 EXPECT_EQ(kOverlayTopLeftRect, content_bounds[0]);
1329 }
1330
1331 TEST_F(UnderlayCastTest, OverlayOccludedUnionDamageRect) {
1332 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1333 CreateOpaqueQuadAt(resource_provider_.get(),
1334 pass->shared_quad_state_list.back(), pass.get(),
1335 kOverlayTopLeftRect);
1336 CreateOpaqueQuadAt(resource_provider_.get(),
1337 pass->shared_quad_state_list.back(), pass.get(),
1338 kOverlayBottomRightRect);
1339 CreateCandidateQuadAt(resource_provider_.get(),
1340 pass->shared_quad_state_list.back(), pass.get(),
1341 kOverlayRect);
1342
1343 OverlayCandidateList candidate_list;
1344 RenderPassFilterList render_pass_filters;
1345 RenderPassFilterList render_pass_background_filters;
1346 overlay_processor_->ProcessForOverlays(
1347 resource_provider_.get(), pass.get(), render_pass_filters,
1348 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
1349
1350 std::vector<gfx::Rect> content_bounds;
1351 overlay_processor_->GetContentBounds(&content_bounds);
1352 EXPECT_EQ(1U, content_bounds.size());
1353 EXPECT_EQ(kOverlayRect, content_bounds[0]);
1354 }
1355
1224 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { 1356 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) {
1225 OverlayCandidateList list; 1357 OverlayCandidateList list;
1226 OverlayCandidate output_surface_plane; 1358 OverlayCandidate output_surface_plane;
1227 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); 1359 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect);
1228 output_surface_plane.quad_rect_in_target_space = 1360 output_surface_plane.quad_rect_in_target_space =
1229 root_render_pass->output_rect; 1361 root_render_pass->output_rect;
1230 output_surface_plane.use_output_surface_for_resource = true; 1362 output_surface_plane.use_output_surface_for_resource = true;
1231 output_surface_plane.overlay_handled = true; 1363 output_surface_plane.overlay_handled = true;
1232 list.push_back(output_surface_plane); 1364 list.push_back(output_surface_plane);
1233 return list; 1365 return list;
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
2000 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(), 2132 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(),
2001 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF()); 2133 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF());
2002 } 2134 }
2003 2135
2004 ProcessForOverlays(); 2136 ProcessForOverlays();
2005 EXPECT_EQ(0U, ca_layer_list_.size()); 2137 EXPECT_EQ(0U, ca_layer_list_.size());
2006 } 2138 }
2007 2139
2008 } // namespace 2140 } // namespace
2009 } // namespace cc 2141 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698