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

Side by Side Diff: cc/surfaces/surface_aggregator_unittest.cc

Issue 1491743006: List all child surfaces (including occluded) in CompositorFrame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add comment Created 5 years 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/surfaces/surface_aggregator.cc ('k') | cc/surfaces/surface_factory_unittest.cc » ('j') | 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/output/compositor_frame.h" 5 #include "cc/output/compositor_frame.h"
6 #include "cc/output/delegated_frame_data.h" 6 #include "cc/output/delegated_frame_data.h"
7 #include "cc/quads/render_pass.h" 7 #include "cc/quads/render_pass.h"
8 #include "cc/quads/render_pass_draw_quad.h" 8 #include "cc/quads/render_pass_draw_quad.h"
9 #include "cc/quads/solid_color_draw_quad.h" 9 #include "cc/quads/solid_color_draw_quad.h"
10 #include "cc/quads/surface_draw_quad.h" 10 #include "cc/quads/surface_draw_quad.h"
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 manager_.GetSurfaceForId(root_surface_id_)->GetEligibleFrame(); 470 manager_.GetSurfaceForId(root_surface_id_)->GetEligibleFrame();
471 RenderPassList& original_pass_list = 471 RenderPassList& original_pass_list =
472 original_frame->delegated_frame_data->render_pass_list; 472 original_frame->delegated_frame_data->render_pass_list;
473 ASSERT_EQ(2u, original_pass_list.size()); 473 ASSERT_EQ(2u, original_pass_list.size());
474 DCHECK(original_pass_list[0]->copy_requests.empty()); 474 DCHECK(original_pass_list[0]->copy_requests.empty());
475 DCHECK(original_pass_list[1]->copy_requests.empty()); 475 DCHECK(original_pass_list[1]->copy_requests.empty());
476 476
477 factory_.Destroy(embedded_surface_id); 477 factory_.Destroy(embedded_surface_id);
478 } 478 }
479 479
480 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) {
481 SurfaceId embedded_surface_id = allocator_.GenerateId();
482 SurfaceId nonexistent_surface_id = allocator_.GenerateId();
483 factory_.Create(embedded_surface_id);
484 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
485 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
486
487 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
488 test::Pass embedded_passes[] = {
489 test::Pass(embedded_quads, arraysize(embedded_quads))};
490
491 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes),
492 embedded_surface_id);
493 scoped_ptr<CopyOutputRequest> copy_request(
494 CopyOutputRequest::CreateEmptyRequest());
495 CopyOutputRequest* copy_request_ptr = copy_request.get();
496 factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass());
497
498 SurfaceId parent_surface_id = allocator_.GenerateId();
499 factory_.Create(parent_surface_id);
500 Surface* parent_surface = manager_.GetSurfaceForId(parent_surface_id);
501
502 test::Quad parent_quads[] = {
503 test::Quad::SolidColorQuad(SK_ColorWHITE),
504 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
505 test::Quad::SolidColorQuad(SK_ColorBLACK)};
506 test::Pass parent_passes[] = {
507 test::Pass(parent_quads, arraysize(parent_quads))};
508
509 {
510 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
511 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()),
512 parent_passes, arraysize(parent_passes));
513
514 scoped_ptr<CompositorFrame> frame(new CompositorFrame);
515 frame->delegated_frame_data = frame_data.Pass();
516 frame->metadata.referenced_surfaces.push_back(embedded_surface_id);
517
518 factory_.SubmitCompositorFrame(parent_surface_id, frame.Pass(),
519 SurfaceFactory::DrawCallback());
520 }
521
522 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
523 test::Quad::SolidColorQuad(SK_ColorBLACK)};
524 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
525
526 {
527 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
528 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()),
529 root_passes, arraysize(root_passes));
530
531 scoped_ptr<CompositorFrame> frame(new CompositorFrame);
532 frame->delegated_frame_data = frame_data.Pass();
533 frame->metadata.referenced_surfaces.push_back(parent_surface_id);
534 // Reference to Surface ID of a Surface that doesn't exist should be
535 // included in previous_contained_surfaces, but otherwise ignored.
536 frame->metadata.referenced_surfaces.push_back(nonexistent_surface_id);
537
538 factory_.SubmitCompositorFrame(root_surface_id_, frame.Pass(),
539 SurfaceFactory::DrawCallback());
540 }
541
542 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
543 EXPECT_FALSE(surface_aggregator_client_.HasSurface(parent_surface));
544 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
545
546 scoped_ptr<CompositorFrame> aggregated_frame =
547 aggregator_.Aggregate(root_surface_id_);
548
549 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
550 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
551 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface));
552
553 ASSERT_TRUE(aggregated_frame);
554 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
555
556 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
557
558 // First pass should come from surface that had a copy request but was not
559 // referenced directly. The second pass comes from the root surface.
560 // parent_quad should be ignored because it is neither referenced through a
561 // SurfaceDrawQuad nor has a copy request on it.
562 test::Pass expected_passes[] = {
563 test::Pass(embedded_quads, arraysize(embedded_quads)),
564 test::Pass(root_quads, arraysize(root_quads))};
565 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes),
566 &frame_data->render_pass_list);
567 ASSERT_EQ(2u, frame_data->render_pass_list.size());
568 ASSERT_EQ(1u, frame_data->render_pass_list[0]->copy_requests.size());
569 DCHECK_EQ(copy_request_ptr,
570 frame_data->render_pass_list[0]->copy_requests[0].get());
571
572 SurfaceId surface_ids[] = {root_surface_id_, parent_surface_id,
573 embedded_surface_id, nonexistent_surface_id};
574 EXPECT_EQ(arraysize(surface_ids),
575 aggregator_.previous_contained_surfaces().size());
576 for (size_t i = 0; i < arraysize(surface_ids); i++) {
577 EXPECT_TRUE(
578 aggregator_.previous_contained_surfaces().find(surface_ids[i]) !=
579 aggregator_.previous_contained_surfaces().end());
580 }
581
582 factory_.Destroy(parent_surface_id);
583 factory_.Destroy(embedded_surface_id);
584 }
585
480 // This tests referencing a surface that has multiple render passes. 586 // This tests referencing a surface that has multiple render passes.
481 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { 587 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) {
482 SurfaceId embedded_surface_id = child_allocator_.GenerateId(); 588 SurfaceId embedded_surface_id = child_allocator_.GenerateId();
483 factory_.Create(embedded_surface_id); 589 factory_.Create(embedded_surface_id);
484 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); 590 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
485 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); 591 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
486 592
487 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), 593 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2),
488 RenderPassId(1, 3)}; 594 RenderPassId(1, 3)};
489 595
(...skipping 1510 matching lines...) Expand 10 before | Expand all | Expand 10 after
2000 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); 2106 EXPECT_EQ(9u, pass_list->back()->quad_list.size());
2001 2107
2002 factory.Destroy(root_surface_id); 2108 factory.Destroy(root_surface_id);
2003 factory.Destroy(child_surface_id); 2109 factory.Destroy(child_surface_id);
2004 factory.Destroy(middle_surface_id); 2110 factory.Destroy(middle_surface_id);
2005 } 2111 }
2006 2112
2007 } // namespace 2113 } // namespace
2008 } // namespace cc 2114 } // namespace cc
2009 2115
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator.cc ('k') | cc/surfaces/surface_factory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698