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

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

Issue 2873593002: Force use of and cache render surface. (Closed)
Patch Set: Fix compile error. 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 // 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/surfaces/surface_aggregator.h" 5 #include "cc/surfaces/surface_aggregator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; 1460 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
1461 1461
1462 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); 1462 CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
1463 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1463 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1464 arraysize(root_passes)); 1464 arraysize(root_passes));
1465 1465
1466 root_frame.render_pass_list[0] 1466 root_frame.render_pass_list[0]
1467 ->shared_quad_state_list.front() 1467 ->shared_quad_state_list.front()
1468 ->quad_to_target_transform.Translate(0, 10); 1468 ->quad_to_target_transform.Translate(0, 10);
1469 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); 1469 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10);
1470 root_frame.render_pass_list[0]->cache_render_surface = true;
1470 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); 1471 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100);
1471 1472
1472 support_->SubmitCompositorFrame(root_local_surface_id_, 1473 support_->SubmitCompositorFrame(root_local_surface_id_,
1473 std::move(root_frame)); 1474 std::move(root_frame));
1474 1475
1475 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); 1476 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
1476 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1477 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1477 1478
1478 const RenderPassList& aggregated_pass_list = 1479 const RenderPassList& aggregated_pass_list =
1479 aggregated_frame.render_pass_list; 1480 aggregated_frame.render_pass_list;
1480 1481
1481 ASSERT_EQ(2u, aggregated_pass_list.size()); 1482 ASSERT_EQ(2u, aggregated_pass_list.size());
1482 1483
1484 // First aggregation shold be true.
1485 EXPECT_TRUE(aggregated_pass_list[0]->has_damage_from_contributing_content);
1483 // Damage rect for first aggregation should contain entire root surface. 1486 // Damage rect for first aggregation should contain entire root surface.
1484 EXPECT_TRUE( 1487 EXPECT_TRUE(
1485 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); 1488 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize())));
1486 1489
1487 { 1490 {
1488 CompositorFrame child_frame = test::MakeEmptyCompositorFrame(); 1491 CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
1489 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1492 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1490 child_passes, arraysize(child_passes)); 1493 child_passes, arraysize(child_passes));
1491 1494
1492 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); 1495 RenderPass* child_root_pass = child_frame.render_pass_list[0].get();
1493 SharedQuadState* child_root_pass_sqs = 1496 SharedQuadState* child_root_pass_sqs =
1494 child_root_pass->shared_quad_state_list.front(); 1497 child_root_pass->shared_quad_state_list.front();
1495 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); 1498 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0);
1496 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); 1499 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10);
1497 1500
1498 child_support_->SubmitCompositorFrame(child_local_surface_id, 1501 child_support_->SubmitCompositorFrame(child_local_surface_id,
1499 std::move(child_frame)); 1502 std::move(child_frame));
1500 1503
1501 SurfaceId root_surface_id(support_->frame_sink_id(), 1504 SurfaceId root_surface_id(support_->frame_sink_id(),
1502 root_local_surface_id_); 1505 root_local_surface_id_);
1503 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1506 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1504 1507
1505 const RenderPassList& aggregated_pass_list = 1508 const RenderPassList& aggregated_pass_list =
1506 aggregated_frame.render_pass_list; 1509 aggregated_frame.render_pass_list;
1507 1510
1508 ASSERT_EQ(2u, aggregated_pass_list.size()); 1511 ASSERT_EQ(2u, aggregated_pass_list.size());
1509 1512
1513 // True for new frame.
1514 EXPECT_TRUE(aggregated_pass_list[0]->has_damage_from_contributing_content);
1510 // Outer surface didn't change, so transformed inner damage rect should be 1515 // Outer surface didn't change, so transformed inner damage rect should be
1511 // used. 1516 // used.
1512 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), 1517 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(),
1513 aggregated_pass_list[1]->damage_rect.ToString()); 1518 aggregated_pass_list[1]->damage_rect.ToString());
1514 } 1519 }
1515 1520
1516 { 1521 {
1517 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); 1522 CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
1518 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1523 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1519 root_passes, arraysize(root_passes)); 1524 root_passes, arraysize(root_passes));
1520 1525
1521 root_frame.render_pass_list[0] 1526 root_frame.render_pass_list[0]
1522 ->shared_quad_state_list.front() 1527 ->shared_quad_state_list.front()
1523 ->quad_to_target_transform.Translate(0, 10); 1528 ->quad_to_target_transform.Translate(0, 10);
1524 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); 1529 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1);
1525 1530
1526 support_->SubmitCompositorFrame(root_local_surface_id_, 1531 support_->SubmitCompositorFrame(root_local_surface_id_,
1527 std::move(root_frame)); 1532 std::move(root_frame));
1528 } 1533 }
1529 1534
1530 { 1535 {
1531 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); 1536 CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
1532 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), 1537 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
1533 root_passes, arraysize(root_passes)); 1538 root_passes, arraysize(root_passes));
1534 1539
1535 root_frame.render_pass_list[0] 1540 root_frame.render_pass_list[0]
1536 ->shared_quad_state_list.front() 1541 ->shared_quad_state_list.front()
1537 ->quad_to_target_transform.Translate(0, 10); 1542 ->quad_to_target_transform.Translate(0, 10);
1538 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); 1543 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1);
1544 root_frame.render_pass_list[0]->cache_render_surface = true;
1539 1545
1540 support_->SubmitCompositorFrame(root_local_surface_id_, 1546 support_->SubmitCompositorFrame(root_local_surface_id_,
1541 std::move(root_frame)); 1547 std::move(root_frame));
1542 1548
1543 SurfaceId root_surface_id(support_->frame_sink_id(), 1549 SurfaceId root_surface_id(support_->frame_sink_id(),
1544 root_local_surface_id_); 1550 root_local_surface_id_);
1545 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1551 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1546 1552
1547 const RenderPassList& aggregated_pass_list = 1553 const RenderPassList& aggregated_pass_list =
1548 aggregated_frame.render_pass_list; 1554 aggregated_frame.render_pass_list;
1549 1555
1550 ASSERT_EQ(2u, aggregated_pass_list.size()); 1556 ASSERT_EQ(2u, aggregated_pass_list.size());
1551 1557
1558 // False when the child frame has no change.
1559 EXPECT_FALSE(aggregated_pass_list[0]->has_damage_from_contributing_content);
1552 // The root surface was enqueued without being aggregated once, so it should 1560 // The root surface was enqueued without being aggregated once, so it should
1553 // be treated as completely damaged. 1561 // be treated as completely damaged.
1554 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( 1562 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains(
1555 gfx::Rect(SurfaceSize()))); 1563 gfx::Rect(SurfaceSize())));
1556 } 1564 }
1557 1565
1558 // No Surface changed, so no damage should be given. 1566 // No Surface changed, so no damage should be given.
1559 { 1567 {
1560 SurfaceId root_surface_id(support_->frame_sink_id(), 1568 SurfaceId root_surface_id(support_->frame_sink_id(),
1561 root_local_surface_id_); 1569 root_local_surface_id_);
1562 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1570 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1563 1571
1564 const RenderPassList& aggregated_pass_list = 1572 const RenderPassList& aggregated_pass_list =
1565 aggregated_frame.render_pass_list; 1573 aggregated_frame.render_pass_list;
1566 1574
1567 ASSERT_EQ(2u, aggregated_pass_list.size()); 1575 ASSERT_EQ(2u, aggregated_pass_list.size());
1568 1576
1577 // False when the child frame has no change.
1578 EXPECT_FALSE(aggregated_pass_list[0]->has_damage_from_contributing_content);
1569 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); 1579 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty());
1570 } 1580 }
1571 1581
1572 // SetFullDamageRectForSurface should cause the entire output to be 1582 // SetFullDamageRectForSurface should cause the entire output to be
1573 // marked as damaged. 1583 // marked as damaged.
1574 { 1584 {
1575 aggregator_.SetFullDamageForSurface(root_surface_id); 1585 aggregator_.SetFullDamageForSurface(root_surface_id);
1576 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1586 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1577 1587
1578 const RenderPassList& aggregated_pass_list = 1588 const RenderPassList& aggregated_pass_list =
(...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
2291 aggregated_frame = aggregator_.Aggregate(surface_id); 2301 aggregated_frame = aggregator_.Aggregate(surface_id);
2292 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size()); 2302 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size());
2293 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space); 2303 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space);
2294 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space); 2304 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space);
2295 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space); 2305 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space);
2296 } 2306 }
2297 2307
2298 } // namespace 2308 } // namespace
2299 } // namespace cc 2309 } // namespace cc
2300 2310
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698