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

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

Issue 208213003: Plumb overlay processing into DirectRenderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More plumbing Created 6 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 | Annotate | Revision Log
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/scoped_ptr_vector.h" 5 #include "cc/base/scoped_ptr_vector.h"
6 #include "cc/output/gl_renderer.h"
6 #include "cc/output/output_surface.h" 7 #include "cc/output/output_surface.h"
7 #include "cc/output/output_surface_client.h" 8 #include "cc/output/output_surface_client.h"
8 #include "cc/output/overlay_candidate_validator.h" 9 #include "cc/output/overlay_candidate_validator.h"
9 #include "cc/output/overlay_processor.h" 10 #include "cc/output/overlay_processor.h"
10 #include "cc/output/overlay_strategy_single_on_top.h" 11 #include "cc/output/overlay_strategy_single_on_top.h"
11 #include "cc/quads/checkerboard_draw_quad.h" 12 #include "cc/quads/checkerboard_draw_quad.h"
12 #include "cc/quads/render_pass.h" 13 #include "cc/quads/render_pass.h"
13 #include "cc/quads/texture_draw_quad.h" 14 #include "cc/quads/texture_draw_quad.h"
14 #include "cc/resources/resource_provider.h" 15 #include "cc/resources/resource_provider.h"
15 #include "cc/resources/texture_mailbox.h" 16 #include "cc/resources/texture_mailbox.h"
16 #include "cc/test/fake_output_surface_client.h" 17 #include "cc/test/fake_output_surface_client.h"
17 #include "cc/test/geometry_test_utils.h" 18 #include "cc/test/geometry_test_utils.h"
18 #include "cc/test/test_context_provider.h" 19 #include "cc/test/test_context_provider.h"
20 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
20 22
23 using testing::_;
24 using testing::Mock;
25
21 namespace cc { 26 namespace cc {
22 namespace { 27 namespace {
23 28
24 const gfx::Rect kOverlayRect(0, 0, 128, 128); 29 const gfx::Rect kOverlayRect(0, 0, 128, 128);
25 const gfx::PointF kUVTopLeft(0.1f, 0.2f); 30 const gfx::PointF kUVTopLeft(0.1f, 0.2f);
26 const gfx::PointF kUVBottomRight(1.0f, 1.0f); 31 const gfx::PointF kUVBottomRight(1.0f, 1.0f);
27 32
28 void MailboxReleased(unsigned sync_point, bool lost_resource) {} 33 void MailboxReleased(unsigned sync_point, bool lost_resource) {}
29 34
30 class SingleOverlayValidator : public OverlayCandidateValidator { 35 class SingleOverlayValidator : public OverlayCandidateValidator {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 // Add something behind it. 250 // Add something behind it.
246 pass->quad_list.push_back(CreateCheckeredQuad( 251 pass->quad_list.push_back(CreateCheckeredQuad(
247 resource_provider_.get(), pass->shared_quad_state_list.back())); 252 resource_provider_.get(), pass->shared_quad_state_list.back()));
248 pass->quad_list.push_back(CreateCheckeredQuad( 253 pass->quad_list.push_back(CreateCheckeredQuad(
249 resource_provider_.get(), pass->shared_quad_state_list.back())); 254 resource_provider_.get(), pass->shared_quad_state_list.back()));
250 255
251 RenderPassList pass_list; 256 RenderPassList pass_list;
252 pass_list.push_back(pass.Pass()); 257 pass_list.push_back(pass.Pass());
253 258
254 // Check for potential candidates. 259 // Check for potential candidates.
255 overlay_processor_->ProcessForOverlays(&pass_list); 260 EXPECT_TRUE(overlay_processor_->ProcessForOverlays(&pass_list));
256 261
257 // This should have one more pass with an overlay. 262 // This should have one more pass with an overlay.
258 ASSERT_EQ(2U, pass_list.size()); 263 ASSERT_EQ(2U, pass_list.size());
259 264
260 RenderPass* overlay_pass = pass_list.front(); 265 RenderPass* overlay_pass = pass_list.front();
261 EXPECT_EQ(RenderPass::SIMPLE_OVERLAY, overlay_pass->overlay_state); 266 EXPECT_EQ(RenderPass::SIMPLE_OVERLAY, overlay_pass->overlay_state);
262 RenderPass* main_pass = pass_list.back(); 267 RenderPass* main_pass = pass_list.back();
263 EXPECT_EQ(RenderPass::NO_OVERLAY, main_pass->overlay_state); 268 EXPECT_EQ(RenderPass::NO_OVERLAY, main_pass->overlay_state);
264 269
265 // Check that the quad is what we expect it to be. 270 // Check that the quad is what we expect it to be.
(...skipping 10 matching lines...) Expand all
276 resource_provider_.get(), pass->shared_quad_state_list.back())); 281 resource_provider_.get(), pass->shared_quad_state_list.back()));
277 pass->quad_list.push_back(CreateCheckeredQuad( 282 pass->quad_list.push_back(CreateCheckeredQuad(
278 resource_provider_.get(), pass->shared_quad_state_list.back())); 283 resource_provider_.get(), pass->shared_quad_state_list.back()));
279 284
280 RenderPassList pass_list; 285 RenderPassList pass_list;
281 pass_list.push_back(pass.Pass()); 286 pass_list.push_back(pass.Pass());
282 287
283 RenderPassList original_pass_list; 288 RenderPassList original_pass_list;
284 RenderPass::CopyAll(pass_list, &original_pass_list); 289 RenderPass::CopyAll(pass_list, &original_pass_list);
285 290
286 overlay_processor_->ProcessForOverlays(&pass_list); 291 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
287 // There should be nothing new here. 292 // There should be nothing new here.
288 CompareRenderPassLists(pass_list, original_pass_list); 293 CompareRenderPassLists(pass_list, original_pass_list);
289 } 294 }
290 295
291 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { 296 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
292 scoped_ptr<RenderPass> pass = CreateRenderPass(); 297 scoped_ptr<RenderPass> pass = CreateRenderPass();
293 pass->quad_list.push_back(CreateCheckeredQuad( 298 pass->quad_list.push_back(CreateCheckeredQuad(
294 resource_provider_.get(), pass->shared_quad_state_list.back())); 299 resource_provider_.get(), pass->shared_quad_state_list.back()));
295 pass->quad_list.push_back(CreateCheckeredQuad( 300 pass->quad_list.push_back(CreateCheckeredQuad(
296 resource_provider_.get(), pass->shared_quad_state_list.back())); 301 resource_provider_.get(), pass->shared_quad_state_list.back()));
297 302
298 pass->quad_list.push_back( 303 pass->quad_list.push_back(
299 CreateCandidateQuad(resource_provider_.get(), 304 CreateCandidateQuad(resource_provider_.get(),
300 pass->shared_quad_state_list.back()) 305 pass->shared_quad_state_list.back())
301 .PassAs<DrawQuad>()); 306 .PassAs<DrawQuad>());
302 307
303 RenderPassList pass_list; 308 RenderPassList pass_list;
304 pass_list.push_back(pass.Pass()); 309 pass_list.push_back(pass.Pass());
305 310
306 RenderPassList original_pass_list; 311 RenderPassList original_pass_list;
307 RenderPass::CopyAll(pass_list, &original_pass_list); 312 RenderPass::CopyAll(pass_list, &original_pass_list);
308 313
309 overlay_processor_->ProcessForOverlays(&pass_list); 314 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
310 // There should be nothing new here. 315 // There should be nothing new here.
311 CompareRenderPassLists(pass_list, original_pass_list); 316 CompareRenderPassLists(pass_list, original_pass_list);
312 } 317 }
313 318
314 // Test with multiple render passes. 319 // Test with multiple render passes.
315 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { 320 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
316 RenderPassList pass_list; 321 RenderPassList pass_list;
317 pass_list.push_back(CreateRenderPass()); 322 pass_list.push_back(CreateRenderPass());
318 323
319 scoped_ptr<RenderPass> pass = CreateRenderPass(); 324 scoped_ptr<RenderPass> pass = CreateRenderPass();
320 scoped_ptr<TextureDrawQuad> original_quad = CreateCandidateQuad( 325 scoped_ptr<TextureDrawQuad> original_quad = CreateCandidateQuad(
321 resource_provider_.get(), pass->shared_quad_state_list.back()); 326 resource_provider_.get(), pass->shared_quad_state_list.back());
322 327
323 pass->quad_list.push_back( 328 pass->quad_list.push_back(
324 original_quad->Copy(pass->shared_quad_state_list.back())); 329 original_quad->Copy(pass->shared_quad_state_list.back()));
325 // Add something behind it. 330 // Add something behind it.
326 pass->quad_list.push_back(CreateCheckeredQuad( 331 pass->quad_list.push_back(CreateCheckeredQuad(
327 resource_provider_.get(), pass->shared_quad_state_list.back())); 332 resource_provider_.get(), pass->shared_quad_state_list.back()));
328 pass->quad_list.push_back(CreateCheckeredQuad( 333 pass->quad_list.push_back(CreateCheckeredQuad(
329 resource_provider_.get(), pass->shared_quad_state_list.back())); 334 resource_provider_.get(), pass->shared_quad_state_list.back()));
330 335
331 pass_list.push_back(pass.Pass()); 336 pass_list.push_back(pass.Pass());
332 337
333 // Check for potential candidates. 338 // Check for potential candidates.
334 overlay_processor_->ProcessForOverlays(&pass_list); 339 EXPECT_TRUE(overlay_processor_->ProcessForOverlays(&pass_list));
335 340
336 // This should have one more pass with an overlay. 341 // This should have one more pass with an overlay.
337 ASSERT_EQ(3U, pass_list.size()); 342 ASSERT_EQ(3U, pass_list.size());
338 } 343 }
339 344
340 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { 345 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) {
341 scoped_ptr<RenderPass> pass = CreateRenderPass(); 346 scoped_ptr<RenderPass> pass = CreateRenderPass();
342 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad( 347 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad(
343 resource_provider_.get(), pass->shared_quad_state_list.back()); 348 resource_provider_.get(), pass->shared_quad_state_list.back());
344 quad->premultiplied_alpha = true; 349 quad->premultiplied_alpha = true;
345 350
346 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); 351 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
347 RenderPassList pass_list; 352 RenderPassList pass_list;
348 pass_list.push_back(pass.Pass()); 353 pass_list.push_back(pass.Pass());
349 overlay_processor_->ProcessForOverlays(&pass_list); 354 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
350 ASSERT_EQ(1U, pass_list.size()); 355 ASSERT_EQ(1U, pass_list.size());
351 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state); 356 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
352 } 357 }
353 358
354 TEST_F(SingleOverlayOnTopTest, RejectBlending) { 359 TEST_F(SingleOverlayOnTopTest, RejectBlending) {
355 scoped_ptr<RenderPass> pass = CreateRenderPass(); 360 scoped_ptr<RenderPass> pass = CreateRenderPass();
356 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad( 361 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad(
357 resource_provider_.get(), pass->shared_quad_state_list.back()); 362 resource_provider_.get(), pass->shared_quad_state_list.back());
358 quad->needs_blending = true; 363 quad->needs_blending = true;
359 364
360 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); 365 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
361 RenderPassList pass_list; 366 RenderPassList pass_list;
362 pass_list.push_back(pass.Pass()); 367 pass_list.push_back(pass.Pass());
363 overlay_processor_->ProcessForOverlays(&pass_list); 368 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
364 ASSERT_EQ(1U, pass_list.size()); 369 ASSERT_EQ(1U, pass_list.size());
365 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state); 370 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
366 } 371 }
367 372
368 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { 373 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
369 scoped_ptr<RenderPass> pass = CreateRenderPass(); 374 scoped_ptr<RenderPass> pass = CreateRenderPass();
370 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad( 375 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad(
371 resource_provider_.get(), pass->shared_quad_state_list.back()); 376 resource_provider_.get(), pass->shared_quad_state_list.back());
372 quad->background_color = SK_ColorBLACK; 377 quad->background_color = SK_ColorBLACK;
373 378
374 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); 379 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
375 RenderPassList pass_list; 380 RenderPassList pass_list;
376 pass_list.push_back(pass.Pass()); 381 pass_list.push_back(pass.Pass());
377 overlay_processor_->ProcessForOverlays(&pass_list); 382 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
378 ASSERT_EQ(1U, pass_list.size()); 383 ASSERT_EQ(1U, pass_list.size());
379 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state); 384 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
380 } 385 }
381 386
382 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { 387 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
383 scoped_ptr<RenderPass> pass = CreateRenderPass(); 388 scoped_ptr<RenderPass> pass = CreateRenderPass();
384 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad( 389 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad(
385 resource_provider_.get(), pass->shared_quad_state_list.back()); 390 resource_provider_.get(), pass->shared_quad_state_list.back());
386 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; 391 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode;
387 392
388 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); 393 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
389 RenderPassList pass_list; 394 RenderPassList pass_list;
390 pass_list.push_back(pass.Pass()); 395 pass_list.push_back(pass.Pass());
391 overlay_processor_->ProcessForOverlays(&pass_list); 396 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
392 ASSERT_EQ(1U, pass_list.size()); 397 ASSERT_EQ(1U, pass_list.size());
393 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state); 398 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
394 } 399 }
395 400
396 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { 401 TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
397 scoped_ptr<RenderPass> pass = CreateRenderPass(); 402 scoped_ptr<RenderPass> pass = CreateRenderPass();
398 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad( 403 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad(
399 resource_provider_.get(), pass->shared_quad_state_list.back()); 404 resource_provider_.get(), pass->shared_quad_state_list.back());
400 pass->shared_quad_state_list.back()->opacity = 0.5f; 405 pass->shared_quad_state_list.back()->opacity = 0.5f;
401 406
402 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); 407 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
403 RenderPassList pass_list; 408 RenderPassList pass_list;
404 pass_list.push_back(pass.Pass()); 409 pass_list.push_back(pass.Pass());
405 overlay_processor_->ProcessForOverlays(&pass_list); 410 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
406 ASSERT_EQ(1U, pass_list.size()); 411 ASSERT_EQ(1U, pass_list.size());
407 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state); 412 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
408 } 413 }
409 414
410 TEST_F(SingleOverlayOnTopTest, RejectTransform) { 415 TEST_F(SingleOverlayOnTopTest, RejectTransform) {
411 scoped_ptr<RenderPass> pass = CreateRenderPass(); 416 scoped_ptr<RenderPass> pass = CreateRenderPass();
412 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad( 417 scoped_ptr<TextureDrawQuad> quad = CreateCandidateQuad(
413 resource_provider_.get(), pass->shared_quad_state_list.back()); 418 resource_provider_.get(), pass->shared_quad_state_list.back());
414 pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.f, 419 pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.f,
415 2.f); 420 2.f);
416 421
417 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); 422 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
418 RenderPassList pass_list; 423 RenderPassList pass_list;
419 pass_list.push_back(pass.Pass()); 424 pass_list.push_back(pass.Pass());
420 overlay_processor_->ProcessForOverlays(&pass_list); 425 EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
421 ASSERT_EQ(1U, pass_list.size()); 426 ASSERT_EQ(1U, pass_list.size());
422 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state); 427 EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
423 } 428 }
424 429
430 class OverlayInfoRendererGL : public GLRenderer {
431 public:
432 OverlayInfoRendererGL(RendererClient* client,
433 const LayerTreeSettings* settings,
434 OutputSurface* output_surface,
435 ResourceProvider* resource_provider)
436 : GLRenderer(client,
437 settings,
438 output_surface,
439 resource_provider,
440 NULL,
441 0),
442 expect_overlays_(false) {}
443
444 MOCK_METHOD2(DoDrawQuad, void(DrawingFrame* frame, const DrawQuad* quad));
445
446 virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE {
447 GLRenderer::FinishDrawingFrame(frame);
448
449 if (!expect_overlays_) {
450 EXPECT_TRUE(frame->overlay_passes_in_draw_order == NULL);
451 EXPECT_EQ(RenderPass::NO_OVERLAY, frame->root_render_pass->overlay_state);
452 return;
453 }
454
455 ASSERT_TRUE(frame->overlay_passes_in_draw_order != NULL);
456 ASSERT_EQ(2U, frame->overlay_passes_in_draw_order->size());
457
458 const RenderPass* overlay_pass =
459 frame->overlay_passes_in_draw_order->front();
460 EXPECT_EQ(RenderPass::SIMPLE_OVERLAY, overlay_pass->overlay_state);
461 EXPECT_EQ(RenderPass::NO_OVERLAY, frame->root_render_pass->overlay_state);
462
463 // Check that the quad is what we expect it to be.
464 EXPECT_EQ(1U, overlay_pass->quad_list.size());
465 const DrawQuad* overlay_quad = overlay_pass->quad_list.front();
466 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, overlay_quad->material);
467 }
468
469 void set_expect_overlays(bool expect_overlays) {
470 expect_overlays_ = expect_overlays;
471 }
472
473 private:
474 bool expect_overlays_;
475 };
476
477 class FakeRendererClient : public RendererClient {
478 public:
479 // RendererClient methods.
480 virtual void SetFullRootLayerDamage() OVERRIDE {}
481 };
482
483 class MockOverlayScheduler {
484 public:
485 MOCK_METHOD5(Schedule,
486 void(int plane_z_order,
487 unsigned plane_transform,
488 unsigned overlay_texture_id,
489 const gfx::Rect& display_bounds,
490 gfx::RectF crop_rect));
491 };
492
493 class GLRendererWithOverlaysTest : public testing::Test {
494 protected:
495 GLRendererWithOverlaysTest() {
496 provider_ = TestContextProvider::Create();
497 output_surface_.reset(new OverlayOutputSurface(provider_));
498 CHECK(output_surface_->BindToClient(&output_surface_client_));
499 resource_provider_ =
500 ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
501
502 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind(
503 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_)));
504 }
505
506 void Init(bool use_validator) {
507 if (use_validator)
508 output_surface_->InitWithSingleOverlayValidator();
509
510 renderer_ =
511 make_scoped_ptr(new OverlayInfoRendererGL(&renderer_client_,
512 &settings_,
513 output_surface_.get(),
514 resource_provider_.get()));
515 }
516
517 LayerTreeSettings settings_;
518 FakeOutputSurfaceClient output_surface_client_;
519 scoped_ptr<OverlayOutputSurface> output_surface_;
520 FakeRendererClient renderer_client_;
521 scoped_ptr<ResourceProvider> resource_provider_;
522 scoped_ptr<OverlayInfoRendererGL> renderer_;
523 scoped_refptr<TestContextProvider> provider_;
524 MockOverlayScheduler scheduler_;
525 };
526
527 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) {
528 bool use_validator = true;
529 Init(use_validator);
530 renderer_->set_expect_overlays(true);
531 gfx::Rect viewport_rect(16, 16);
532
533 scoped_ptr<RenderPass> pass = CreateRenderPass();
534
535 pass->quad_list.push_back(
536 CreateCandidateQuad(resource_provider_.get(),
537 pass->shared_quad_state_list.back())
538 .PassAs<DrawQuad>());
539
540 pass->quad_list.push_back(CreateCheckeredQuad(
541 resource_provider_.get(), pass->shared_quad_state_list.back()));
542 pass->quad_list.push_back(CreateCheckeredQuad(
543 resource_provider_.get(), pass->shared_quad_state_list.back()));
544
545 RenderPassList pass_list;
546 pass_list.push_back(pass.Pass());
547
548 // Candidate pass was taken out and extra skipped pass added,
549 // so only draw 2 quads.
550 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(2);
551 EXPECT_CALL(scheduler_,
552 Schedule(1,
553 OverlayCandidate::NONE,
554 _,
555 kOverlayRect,
556 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1);
557 renderer_->DrawFrame(
558 &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
559
560 Mock::VerifyAndClearExpectations(renderer_.get());
561 Mock::VerifyAndClearExpectations(&scheduler_);
562 }
563
564 TEST_F(GLRendererWithOverlaysTest, OccludedQuadDrawn) {
565 bool use_validator = true;
566 Init(use_validator);
567 renderer_->set_expect_overlays(false);
568 gfx::Rect viewport_rect(16, 16);
569
570 scoped_ptr<RenderPass> pass = CreateRenderPass();
571
572 pass->quad_list.push_back(CreateCheckeredQuad(
573 resource_provider_.get(), pass->shared_quad_state_list.back()));
574 pass->quad_list.push_back(CreateCheckeredQuad(
575 resource_provider_.get(), pass->shared_quad_state_list.back()));
576
577 pass->quad_list.push_back(
578 CreateCandidateQuad(resource_provider_.get(),
579 pass->shared_quad_state_list.back())
580 .PassAs<DrawQuad>());
581
582 RenderPassList pass_list;
583 pass_list.push_back(pass.Pass());
584
585 // 3 quads in the pass, all should draw.
586 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
587 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
588 renderer_->DrawFrame(
589 &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
590
591 Mock::VerifyAndClearExpectations(renderer_.get());
592 Mock::VerifyAndClearExpectations(&scheduler_);
593 }
594
595 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) {
596 bool use_validator = false;
597 Init(use_validator);
598 renderer_->set_expect_overlays(false);
599 gfx::Rect viewport_rect(16, 16);
600
601 scoped_ptr<RenderPass> pass = CreateRenderPass();
602
603 pass->quad_list.push_back(
604 CreateCandidateQuad(resource_provider_.get(),
605 pass->shared_quad_state_list.back())
606 .PassAs<DrawQuad>());
607
608 pass->quad_list.push_back(CreateCheckeredQuad(
609 resource_provider_.get(), pass->shared_quad_state_list.back()));
610 pass->quad_list.push_back(CreateCheckeredQuad(
611 resource_provider_.get(), pass->shared_quad_state_list.back()));
612
613 RenderPassList pass_list;
614 pass_list.push_back(pass.Pass());
615
616 // Should see no overlays.
617 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
618 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
619 renderer_->DrawFrame(
620 &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
621
622 Mock::VerifyAndClearExpectations(renderer_.get());
623 Mock::VerifyAndClearExpectations(&scheduler_);
624 }
625
425 } // namespace 626 } // namespace
426 } // namespace cc 627 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698