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

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: 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
« cc/output/direct_renderer.cc ('K') | « cc/output/overlay_processor.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 "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 if (!expect_overlays_) {
448 EXPECT_TRUE(frame->render_passes_in_draw_order == NULL);
449 EXPECT_EQ(RenderPass::NO_OVERLAY, frame->root_render_pass->overlay_state);
450 return;
451 }
452
453 ASSERT_TRUE(frame->render_passes_in_draw_order != NULL);
454 ASSERT_EQ(2U, frame->render_passes_in_draw_order->size());
455
456 const RenderPass* overlay_pass =
457 frame->render_passes_in_draw_order->front();
458 EXPECT_EQ(RenderPass::SIMPLE_OVERLAY, overlay_pass->overlay_state);
459 EXPECT_EQ(RenderPass::NO_OVERLAY, frame->root_render_pass->overlay_state);
460
461 // Check that the quad is what we expect it to be.
462 EXPECT_EQ(1U, overlay_pass->quad_list.size());
463 const DrawQuad* overlay_quad = overlay_pass->quad_list.front();
464 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, overlay_quad->material);
465 }
466
467 void set_expect_overlays(bool expect_overlays) {
468 expect_overlays_ = expect_overlays;
469 }
470
471 private:
472 bool expect_overlays_;
473 };
474
475 class FakeRendererClient : public RendererClient {
476 public:
477 // RendererClient methods.
478 virtual void SetFullRootLayerDamage() OVERRIDE {}
479 };
480
481 class GLRendererWithOverlaysTest : public testing::Test {
482 protected:
483 GLRendererWithOverlaysTest() {
484 provider_ = TestContextProvider::Create();
485 output_surface_.reset(new OverlayOutputSurface(provider_));
486 CHECK(output_surface_->BindToClient(&output_surface_client_));
487 resource_provider_ =
488 ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
489 }
490
491 void Init(bool use_validator) {
492 if (use_validator)
493 output_surface_->InitWithSingleOverlayValidator();
494
495 renderer_ =
496 make_scoped_ptr(new OverlayInfoRendererGL(&renderer_client_,
497 &settings_,
498 output_surface_.get(),
499 resource_provider_.get()));
500 }
501
502 LayerTreeSettings settings_;
503 FakeOutputSurfaceClient output_surface_client_;
504 scoped_ptr<OverlayOutputSurface> output_surface_;
505 FakeRendererClient renderer_client_;
506 scoped_ptr<ResourceProvider> resource_provider_;
507 scoped_ptr<OverlayInfoRendererGL> renderer_;
508 scoped_refptr<TestContextProvider> provider_;
509 };
510
511 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) {
512 bool use_validator = true;
513 Init(use_validator);
514 renderer_->set_expect_overlays(true);
515 gfx::Rect viewport_rect(16, 16);
516
517 scoped_ptr<RenderPass> pass = CreateRenderPass();
518
519 pass->quad_list.push_back(
520 CreateCandidateQuad(resource_provider_.get(),
521 pass->shared_quad_state_list.back())
522 .PassAs<DrawQuad>());
523
524 pass->quad_list.push_back(CreateCheckeredQuad(
525 resource_provider_.get(), pass->shared_quad_state_list.back()));
526 pass->quad_list.push_back(CreateCheckeredQuad(
527 resource_provider_.get(), pass->shared_quad_state_list.back()));
528
529 RenderPassList pass_list;
530 pass_list.push_back(pass.Pass());
531
532 // Candidate pass was taken out and extra skipped pass added,
533 // so only draw 2 quads.
534 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(2);
535 renderer_->DrawFrame(
536 &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
537
538 Mock::VerifyAndClearExpectations(renderer_.get());
539 }
540
541 TEST_F(GLRendererWithOverlaysTest, OccludedQuadDrawn) {
542 bool use_validator = true;
543 Init(use_validator);
544 renderer_->set_expect_overlays(false);
545 gfx::Rect viewport_rect(16, 16);
546
547 scoped_ptr<RenderPass> pass = CreateRenderPass();
548
549 pass->quad_list.push_back(CreateCheckeredQuad(
550 resource_provider_.get(), pass->shared_quad_state_list.back()));
551 pass->quad_list.push_back(CreateCheckeredQuad(
552 resource_provider_.get(), pass->shared_quad_state_list.back()));
553
554 pass->quad_list.push_back(
555 CreateCandidateQuad(resource_provider_.get(),
556 pass->shared_quad_state_list.back())
557 .PassAs<DrawQuad>());
558
559 RenderPassList pass_list;
560 pass_list.push_back(pass.Pass());
561
562 // 3 quads in the pass, all should draw.
563 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
564 renderer_->DrawFrame(
565 &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
566
567 Mock::VerifyAndClearExpectations(renderer_.get());
568 }
569
570 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) {
571 bool use_validator = false;
572 Init(use_validator);
573 renderer_->set_expect_overlays(false);
574 gfx::Rect viewport_rect(16, 16);
575
576 scoped_ptr<RenderPass> pass = CreateRenderPass();
577
578 pass->quad_list.push_back(
579 CreateCandidateQuad(resource_provider_.get(),
580 pass->shared_quad_state_list.back())
581 .PassAs<DrawQuad>());
582
583 pass->quad_list.push_back(CreateCheckeredQuad(
584 resource_provider_.get(), pass->shared_quad_state_list.back()));
585 pass->quad_list.push_back(CreateCheckeredQuad(
586 resource_provider_.get(), pass->shared_quad_state_list.back()));
587
588 RenderPassList pass_list;
589 pass_list.push_back(pass.Pass());
590
591 // Should see no overlays.
592 EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
593 renderer_->DrawFrame(
594 &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
595
596 Mock::VerifyAndClearExpectations(renderer_.get());
597 }
598
425 } // namespace 599 } // namespace
426 } // namespace cc 600 } // namespace cc
OLDNEW
« cc/output/direct_renderer.cc ('K') | « cc/output/overlay_processor.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698