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/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 Loading... |
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 Loading... |
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 |
OLD | NEW |