| 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 |