OLD | NEW |
---|---|
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 Loading... | |
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 frame->metadata.referenced_surfaces.push_back(nonexistent_surface_id); | |
danakj
2015/12/08 19:42:44
Can you add a comment somewhere in this test expla
| |
535 | |
536 factory_.SubmitCompositorFrame(root_surface_id_, frame.Pass(), | |
537 SurfaceFactory::DrawCallback()); | |
538 } | |
539 | |
540 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); | |
541 EXPECT_FALSE(surface_aggregator_client_.HasSurface(parent_surface)); | |
542 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); | |
543 | |
544 scoped_ptr<CompositorFrame> aggregated_frame = | |
545 aggregator_.Aggregate(root_surface_id_); | |
546 | |
547 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); | |
548 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); | |
549 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface)); | |
550 | |
551 ASSERT_TRUE(aggregated_frame); | |
552 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | |
553 | |
554 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | |
555 | |
556 // First pass should come from surface that had a copy request but was not | |
557 // referenced directly. The second pass comes from the root surface. | |
558 // parent_quad should be ignored because it is neither referenced through a | |
559 // SurfaceDrawQuad nor has a copy request on it. | |
560 test::Pass expected_passes[] = { | |
561 test::Pass(embedded_quads, arraysize(embedded_quads)), | |
562 test::Pass(root_quads, arraysize(root_quads))}; | |
563 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), | |
564 &frame_data->render_pass_list); | |
565 ASSERT_EQ(2u, frame_data->render_pass_list.size()); | |
566 ASSERT_EQ(1u, frame_data->render_pass_list[0]->copy_requests.size()); | |
567 DCHECK_EQ(copy_request_ptr, | |
568 frame_data->render_pass_list[0]->copy_requests[0].get()); | |
569 | |
570 SurfaceId surface_ids[] = {root_surface_id_, parent_surface_id, | |
571 embedded_surface_id, nonexistent_surface_id}; | |
572 EXPECT_EQ(arraysize(surface_ids), | |
573 aggregator_.previous_contained_surfaces().size()); | |
574 for (size_t i = 0; i < arraysize(surface_ids); i++) { | |
575 EXPECT_TRUE( | |
576 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | |
577 aggregator_.previous_contained_surfaces().end()); | |
578 } | |
579 | |
580 factory_.Destroy(parent_surface_id); | |
581 factory_.Destroy(embedded_surface_id); | |
582 } | |
583 | |
480 // This tests referencing a surface that has multiple render passes. | 584 // This tests referencing a surface that has multiple render passes. |
481 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { | 585 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
482 SurfaceId embedded_surface_id = child_allocator_.GenerateId(); | 586 SurfaceId embedded_surface_id = child_allocator_.GenerateId(); |
483 factory_.Create(embedded_surface_id); | 587 factory_.Create(embedded_surface_id); |
484 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); | 588 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); |
485 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); | 589 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
486 | 590 |
487 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), | 591 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), |
488 RenderPassId(1, 3)}; | 592 RenderPassId(1, 3)}; |
489 | 593 |
(...skipping 1510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2000 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); | 2104 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); |
2001 | 2105 |
2002 factory.Destroy(root_surface_id); | 2106 factory.Destroy(root_surface_id); |
2003 factory.Destroy(child_surface_id); | 2107 factory.Destroy(child_surface_id); |
2004 factory.Destroy(middle_surface_id); | 2108 factory.Destroy(middle_surface_id); |
2005 } | 2109 } |
2006 | 2110 |
2007 } // namespace | 2111 } // namespace |
2008 } // namespace cc | 2112 } // namespace cc |
2009 | 2113 |
OLD | NEW |