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

Side by Side Diff: components/viz/service/display/surface_aggregator_unittest.cc

Issue 2873593002: Force use of and cache render surface. (Closed)
Patch Set: Reduce unneeded code in surface aggregator and add more test. Created 3 years, 5 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 1
2 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Copyright 2014 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be 3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file. 4 // found in the LICENSE file.
5 5
6 #include "components/viz/service/display/surface_aggregator.h" 6 #include "components/viz/service/display/surface_aggregator.h"
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 2439 matching lines...) Expand 10 before | Expand all | Expand 10 after
2450 EXPECT_EQ(color_space2, aggregated_frame.render_pass_list[1]->color_space); 2450 EXPECT_EQ(color_space2, aggregated_frame.render_pass_list[1]->color_space);
2451 2451
2452 aggregator_.SetOutputColorSpace(color_space1, color_space3); 2452 aggregator_.SetOutputColorSpace(color_space1, color_space3);
2453 aggregated_frame = aggregator_.Aggregate(surface_id); 2453 aggregated_frame = aggregator_.Aggregate(surface_id);
2454 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size()); 2454 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size());
2455 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space); 2455 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space);
2456 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space); 2456 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space);
2457 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space); 2457 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space);
2458 } 2458 }
2459 2459
2460 // Tests that has_damage_from_contributing_content are aggregated correctly from
2461 // surface quads.
2462 TEST_F(SurfaceAggregatorValidSurfaceTest, HasDamageFromSurfaces) {
danakj 2017/07/25 18:55:03 Can you split this into smaller test cases?
wutao 2017/07/26 07:48:53 I added a new test for jbauman@'s corner case. I
2463 auto grand_child_support = CompositorFrameSinkSupport::Create(
2464 nullptr, &manager_, kArbitraryMiddleFrameSinkId, kChildIsRoot,
2465 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints);
2466
2467 Quad child_surface_quads[] = {Quad::RenderPassQuad(1)};
2468 Pass child_surface_passes[] = {
2469 Pass(child_surface_quads, arraysize(child_surface_quads), 1)};
2470
2471 cc::CompositorFrame child_surface_frame =
2472 cc::test::MakeEmptyCompositorFrame();
2473 AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
2474 child_surface_passes, arraysize(child_surface_passes));
2475
2476 LocalSurfaceId child_local_surface_id = allocator_.GenerateId();
2477 SurfaceId child_surface_id(child_support_->frame_sink_id(),
2478 child_local_surface_id);
2479 child_support_->SubmitCompositorFrame(child_local_surface_id,
2480 std::move(child_surface_frame));
2481
2482 Quad root_surface_quads[] = {
2483 Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), 1.f)};
2484 Pass root_passes[] = {
2485 Pass(root_surface_quads, arraysize(root_surface_quads), 1)};
2486
2487 cc::CompositorFrame root_frame = cc::test::MakeEmptyCompositorFrame();
2488 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
2489 arraysize(root_passes));
2490 root_frame.render_pass_list[0]->cache_render_surface = true;
2491
2492 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
2493 support_->SubmitCompositorFrame(root_local_surface_id_,
2494 std::move(root_frame));
2495
2496 cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
2497 // First aggregation shold be true.
2498 EXPECT_TRUE(aggregated_frame.render_pass_list[0]
2499 ->has_damage_from_contributing_content);
danakj 2017/07/25 18:55:03 This is related to my questions in the aggregator,
wutao 2017/07/26 07:48:53 DamageRectForSurface() makes a surface fully damag
2500
2501 // No Surface changed, so no damage should be given.
2502 {
2503 cc::CompositorFrame aggregated_frame =
2504 aggregator_.Aggregate(root_surface_id);
2505 EXPECT_FALSE(aggregated_frame.render_pass_list[0]
2506 ->has_damage_from_contributing_content);
2507 }
2508
2509 // Change child_frame should cause damage.
2510 {
2511 cc::CompositorFrame child_surface_frame =
2512 cc::test::MakeEmptyCompositorFrame();
2513 AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
2514 child_surface_passes, arraysize(child_surface_passes));
2515 child_support_->SubmitCompositorFrame(child_local_surface_id,
2516 std::move(child_surface_frame));
2517
2518 cc::CompositorFrame aggregated_frame =
2519 aggregator_.Aggregate(root_surface_id);
2520 // True for new child_frame.
2521 EXPECT_TRUE(aggregated_frame.render_pass_list[0]
2522 ->has_damage_from_contributing_content);
2523 }
2524
2525 // No Surface changed, so no damage should be given.
2526 {
2527 cc::CompositorFrame aggregated_frame =
2528 aggregator_.Aggregate(root_surface_id);
2529 EXPECT_FALSE(aggregated_frame.render_pass_list[0]
2530 ->has_damage_from_contributing_content);
2531 }
2532
2533 // Add a grand_child_frame should cause damage.
2534 Quad grand_child_quads[] = {Quad::RenderPassQuad(1)};
2535 Pass grand_child_passes[] = {
2536 Pass(grand_child_quads, arraysize(grand_child_quads), 1)};
2537 LocalSurfaceId grand_child_local_surface_id = allocator_.GenerateId();
2538 SurfaceId grand_child_surface_id(grand_child_support->frame_sink_id(),
2539 grand_child_local_surface_id);
2540 {
2541 cc::CompositorFrame grand_child_frame =
2542 cc::test::MakeEmptyCompositorFrame();
2543 AddPasses(&grand_child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
2544 grand_child_passes, arraysize(grand_child_passes));
2545
2546 grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id,
2547 std::move(grand_child_frame));
2548
2549 Quad new_child_surface_quads[] = {
2550 child_surface_quads[0],
2551 Quad::SurfaceQuad(grand_child_surface_id, InvalidSurfaceId(), 1.f)};
2552 Pass new_child_surface_passes[] = {
2553 Pass(new_child_surface_quads, arraysize(new_child_surface_quads), 1)};
2554 child_surface_frame = cc::test::MakeEmptyCompositorFrame();
2555 AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
2556 new_child_surface_passes, arraysize(new_child_surface_passes));
2557 child_support_->SubmitCompositorFrame(child_local_surface_id,
2558 std::move(child_surface_frame));
2559
2560 cc::CompositorFrame aggregated_frame =
2561 aggregator_.Aggregate(root_surface_id);
2562 // True for new grand_child_frame.
2563 EXPECT_TRUE(aggregated_frame.render_pass_list[0]
2564 ->has_damage_from_contributing_content);
danakj 2017/07/25 18:55:03 This is related to my questions in the aggregator,
wutao 2017/07/26 07:48:53 Similar to previous comments, root aggregated dama
2565 }
2566
2567 // No Surface changed, so no damage should be given.
2568 {
2569 cc::CompositorFrame aggregated_frame =
2570 aggregator_.Aggregate(root_surface_id);
2571 EXPECT_FALSE(aggregated_frame.render_pass_list[0]
2572 ->has_damage_from_contributing_content);
2573 }
2574
2575 // Change grand_child_frame should cause damage.
2576 {
2577 cc::CompositorFrame grand_child_frame =
2578 cc::test::MakeEmptyCompositorFrame();
2579 AddPasses(&grand_child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
2580 grand_child_passes, arraysize(grand_child_passes));
2581 grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id,
2582 std::move(grand_child_frame));
2583
2584 cc::CompositorFrame aggregated_frame =
2585 aggregator_.Aggregate(root_surface_id);
2586 // True for new grand_child_frame.
2587 EXPECT_TRUE(aggregated_frame.render_pass_list[0]
2588 ->has_damage_from_contributing_content);
2589 }
2590
2591 // No Surface changed, so no damage should be given.
2592 {
2593 cc::CompositorFrame aggregated_frame =
2594 aggregator_.Aggregate(root_surface_id);
2595 EXPECT_FALSE(aggregated_frame.render_pass_list[0]
2596 ->has_damage_from_contributing_content);
2597 }
2598
2599 // Remove a grand_child_frame should cause damage.
2600 {
2601 Quad new_child_surface_quads[] = {child_surface_quads[0]};
2602 Pass new_child_surface_passes[] = {
2603 Pass(new_child_surface_quads, arraysize(new_child_surface_quads), 1)};
2604 child_surface_frame = cc::test::MakeEmptyCompositorFrame();
2605 AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
2606 new_child_surface_passes, arraysize(new_child_surface_passes));
2607 child_support_->SubmitCompositorFrame(child_local_surface_id,
2608 std::move(child_surface_frame));
2609
2610 cc::CompositorFrame aggregated_frame =
2611 aggregator_.Aggregate(root_surface_id);
2612 // True for new child_frame.
2613 EXPECT_TRUE(aggregated_frame.render_pass_list[0]
2614 ->has_damage_from_contributing_content);
danakj 2017/07/25 18:55:03 This is related to my questions in the aggregator,
wutao 2017/07/26 07:48:53 Actually, it seems no point for this test, just as
2615 }
2616
2617 grand_child_support->EvictCurrentSurface();
2618 }
2619
2460 } // namespace 2620 } // namespace
2461 } // namespace viz 2621 } // namespace viz
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698