OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/damage_tracker.h" | 5 #include "cc/trees/damage_tracker.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
10 #include "cc/layers/layer_impl.h" | 10 #include "cc/layers/layer_impl.h" |
11 #include "cc/output/filter_operation.h" | 11 #include "cc/output/filter_operation.h" |
12 #include "cc/output/filter_operations.h" | 12 #include "cc/output/filter_operations.h" |
13 #include "cc/test/fake_impl_task_runner_provider.h" | 13 #include "cc/test/fake_impl_task_runner_provider.h" |
14 #include "cc/test/fake_layer_tree_host_impl.h" | 14 #include "cc/test/fake_layer_tree_host_impl.h" |
15 #include "cc/test/geometry_test_utils.h" | 15 #include "cc/test/geometry_test_utils.h" |
16 #include "cc/test/test_task_graph_runner.h" | 16 #include "cc/test/test_task_graph_runner.h" |
17 #include "cc/trees/layer_tree_host_common.h" | 17 #include "cc/trees/layer_tree_host_common.h" |
18 #include "cc/trees/layer_tree_impl.h" | 18 #include "cc/trees/layer_tree_impl.h" |
19 #include "cc/trees/single_thread_proxy.h" | 19 #include "cc/trees/single_thread_proxy.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
21 #include "third_party/skia/include/effects/SkBlurImageFilter.h" | 21 #include "third_party/skia/include/effects/SkBlurImageFilter.h" |
22 #include "ui/gfx/geometry/quad_f.h" | 22 #include "ui/gfx/geometry/quad_f.h" |
23 #include "ui/gfx/geometry/rect_conversions.h" | 23 #include "ui/gfx/geometry/rect_conversions.h" |
24 | 24 |
25 namespace cc { | 25 namespace cc { |
26 namespace { | 26 namespace { |
27 | 27 |
28 void ExecuteCalculateDrawProperties(LayerImpl* root, | 28 void ExecuteCalculateDrawProperties(LayerImpl* root, |
29 float device_scale_factor, | 29 float device_scale_factor, |
30 bool skip_verify_visible_rect_calculations, | |
31 LayerImplList* render_surface_layer_list) { | 30 LayerImplList* render_surface_layer_list) { |
32 // Sanity check: The test itself should create the root layer's render | 31 // Sanity check: The test itself should create the root layer's render |
33 // surface, so that the surface (and its damage tracker) can | 32 // surface, so that the surface (and its damage tracker) can |
34 // persist across multiple calls to this function. | 33 // persist across multiple calls to this function. |
35 ASSERT_FALSE(render_surface_layer_list->size()); | 34 ASSERT_FALSE(render_surface_layer_list->size()); |
36 | 35 |
37 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren(root); | 36 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren(root); |
38 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( | 37 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
39 root, root->bounds(), device_scale_factor, render_surface_layer_list); | 38 root, root->bounds(), device_scale_factor, render_surface_layer_list); |
40 if (skip_verify_visible_rect_calculations) | |
41 inputs.verify_visible_rect_calculations = false; | |
42 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); | 39 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
43 ASSERT_TRUE(root->render_surface()); | 40 ASSERT_TRUE(root->render_surface()); |
44 } | 41 } |
45 | 42 |
46 void ClearDamageForAllSurfaces(LayerImpl* root) { | 43 void ClearDamageForAllSurfaces(LayerImpl* root) { |
47 for (auto* layer : *root->layer_tree_impl()) { | 44 for (auto* layer : *root->layer_tree_impl()) { |
48 if (layer->render_surface()) | 45 if (layer->render_surface()) |
49 layer->render_surface()->damage_tracker()->DidDrawDamagedArea(); | 46 layer->render_surface()->damage_tracker()->DidDrawDamagedArea(); |
50 } | 47 } |
51 } | 48 } |
52 | 49 |
53 void EmulateDrawingOneFrame( | 50 void EmulateDrawingOneFrame(LayerImpl* root, float device_scale_factor = 1.f) { |
54 LayerImpl* root, | |
55 float device_scale_factor = 1.f, | |
56 bool skip_verify_visible_rect_calculations = false) { | |
57 // This emulates only steps that are relevant to testing the damage tracker: | 51 // This emulates only steps that are relevant to testing the damage tracker: |
58 // 1. computing the render passes and layerlists | 52 // 1. computing the render passes and layerlists |
59 // 2. updating all damage trackers in the correct order | 53 // 2. updating all damage trackers in the correct order |
60 // 3. resetting all update_rects and property_changed flags for all layers | 54 // 3. resetting all update_rects and property_changed flags for all layers |
61 // and surfaces. | 55 // and surfaces. |
62 | 56 |
63 LayerImplList render_surface_layer_list; | 57 LayerImplList render_surface_layer_list; |
64 ExecuteCalculateDrawProperties(root, device_scale_factor, | 58 ExecuteCalculateDrawProperties(root, device_scale_factor, |
65 skip_verify_visible_rect_calculations, | |
66 &render_surface_layer_list); | 59 &render_surface_layer_list); |
67 | 60 |
68 // Iterate back-to-front, so that damage correctly propagates from descendant | 61 // Iterate back-to-front, so that damage correctly propagates from descendant |
69 // surfaces to ancestors. | 62 // surfaces to ancestors. |
70 size_t render_surface_layer_list_size = render_surface_layer_list.size(); | 63 size_t render_surface_layer_list_size = render_surface_layer_list.size(); |
71 for (size_t i = 0; i < render_surface_layer_list_size; ++i) { | 64 for (size_t i = 0; i < render_surface_layer_list_size; ++i) { |
72 size_t index = render_surface_layer_list_size - 1 - i; | 65 size_t index = render_surface_layer_list_size - 1 - i; |
73 RenderSurfaceImpl* target_surface = | 66 RenderSurfaceImpl* target_surface = |
74 render_surface_layer_list[index]->render_surface(); | 67 render_surface_layer_list[index]->render_surface(); |
75 target_surface->damage_tracker()->UpdateDamageTrackingState( | 68 target_surface->damage_tracker()->UpdateDamageTrackingState( |
(...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1435 // The child layer covers (0, 0, i, i) of the viewport, | 1428 // The child layer covers (0, 0, i, i) of the viewport, |
1436 // but has a huge negative position. | 1429 // but has a huge negative position. |
1437 child->SetPosition(gfx::PointF()); | 1430 child->SetPosition(gfx::PointF()); |
1438 child->SetBounds(gfx::Size(kBigNumber + i, kBigNumber + i)); | 1431 child->SetBounds(gfx::Size(kBigNumber + i, kBigNumber + i)); |
1439 child->test_properties()->transform = transform; | 1432 child->test_properties()->transform = transform; |
1440 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 1433 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
1441 float device_scale_factor = 1.f; | 1434 float device_scale_factor = 1.f; |
1442 // Visible rects computed from combining clips in target space and root | 1435 // Visible rects computed from combining clips in target space and root |
1443 // space don't match because of the loss in floating point accuracy. So, we | 1436 // space don't match because of the loss in floating point accuracy. So, we |
1444 // skip verify_clip_tree_calculations. | 1437 // skip verify_clip_tree_calculations. |
1445 bool skip_verify_visible_rect_calculations = true; | 1438 EmulateDrawingOneFrame(root, device_scale_factor); |
1446 EmulateDrawingOneFrame(root, device_scale_factor, | |
1447 skip_verify_visible_rect_calculations); | |
1448 | 1439 |
1449 // The expected damage should cover the visible part of the child layer, | 1440 // The expected damage should cover the visible part of the child layer, |
1450 // which is (0, 0, i, i) in the viewport. | 1441 // which is (0, 0, i, i) in the viewport. |
1451 gfx::Rect root_damage_rect; | 1442 gfx::Rect root_damage_rect; |
1452 EXPECT_TRUE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( | 1443 EXPECT_TRUE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( |
1453 &root_damage_rect)); | 1444 &root_damage_rect)); |
1454 gfx::Rect damage_we_care_about = gfx::Rect(i, i); | 1445 gfx::Rect damage_we_care_about = gfx::Rect(i, i); |
1455 EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); | 1446 EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); |
1456 EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); | 1447 EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); |
1457 } | 1448 } |
1458 } | 1449 } |
1459 | 1450 |
1460 TEST_F(DamageTrackerTest, DamageRectTooBig) { | 1451 TEST_F(DamageTrackerTest, DamageRectTooBig) { |
1461 LayerImpl* root = CreateAndSetUpTestTreeWithOneSurface(2); | 1452 LayerImpl* root = CreateAndSetUpTestTreeWithOneSurface(2); |
1462 LayerImpl* child1 = root->test_properties()->children[0]; | 1453 LayerImpl* child1 = root->test_properties()->children[0]; |
1463 LayerImpl* child2 = root->test_properties()->children[1]; | 1454 LayerImpl* child2 = root->test_properties()->children[1]; |
1464 | 1455 |
1465 // Really far left. | 1456 // Really far left. |
1466 child1->SetPosition(gfx::PointF(std::numeric_limits<int>::min() + 100, 0)); | 1457 child1->SetPosition(gfx::PointF(std::numeric_limits<int>::min() + 100, 0)); |
1467 child1->SetBounds(gfx::Size(1, 1)); | 1458 child1->SetBounds(gfx::Size(1, 1)); |
1468 | 1459 |
1469 // Really far right. | 1460 // Really far right. |
1470 child2->SetPosition(gfx::PointF(std::numeric_limits<int>::max() - 100, 0)); | 1461 child2->SetPosition(gfx::PointF(std::numeric_limits<int>::max() - 100, 0)); |
1471 child2->SetBounds(gfx::Size(1, 1)); | 1462 child2->SetBounds(gfx::Size(1, 1)); |
1472 | 1463 |
1473 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 1464 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
1474 float device_scale_factor = 1.f; | 1465 float device_scale_factor = 1.f; |
1475 bool skip_verify_visible_rect_calculations = true; | 1466 EmulateDrawingOneFrame(root, device_scale_factor); |
1476 EmulateDrawingOneFrame(root, device_scale_factor, | |
1477 skip_verify_visible_rect_calculations); | |
1478 | 1467 |
1479 // The expected damage would be too large to store in a gfx::Rect, so we | 1468 // The expected damage would be too large to store in a gfx::Rect, so we |
1480 // should damage everything (ie, we don't have a valid rect). | 1469 // should damage everything (ie, we don't have a valid rect). |
1481 gfx::Rect damage_rect; | 1470 gfx::Rect damage_rect; |
1482 EXPECT_FALSE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( | 1471 EXPECT_FALSE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( |
1483 &damage_rect)); | 1472 &damage_rect)); |
1484 EXPECT_EQ(root->render_surface()->content_rect(), | 1473 EXPECT_EQ(root->render_surface()->content_rect(), |
1485 root->render_surface()->GetDamageRect()); | 1474 root->render_surface()->GetDamageRect()); |
1486 } | 1475 } |
1487 | 1476 |
(...skipping 10 matching lines...) Expand all Loading... |
1498 // Really far left. | 1487 // Really far left. |
1499 child1->SetPosition(gfx::PointF(std::numeric_limits<int>::min() + 100, 0)); | 1488 child1->SetPosition(gfx::PointF(std::numeric_limits<int>::min() + 100, 0)); |
1500 child1->SetBounds(gfx::Size(1, 1)); | 1489 child1->SetBounds(gfx::Size(1, 1)); |
1501 | 1490 |
1502 // Really far right. | 1491 // Really far right. |
1503 child2->SetPosition(gfx::PointF(std::numeric_limits<int>::max() - 100, 0)); | 1492 child2->SetPosition(gfx::PointF(std::numeric_limits<int>::max() - 100, 0)); |
1504 child2->SetBounds(gfx::Size(1, 1)); | 1493 child2->SetBounds(gfx::Size(1, 1)); |
1505 | 1494 |
1506 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 1495 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
1507 float device_scale_factor = 1.f; | 1496 float device_scale_factor = 1.f; |
1508 bool skip_verify_visible_rect_calculations = true; | 1497 EmulateDrawingOneFrame(root, device_scale_factor); |
1509 EmulateDrawingOneFrame(root, device_scale_factor, | |
1510 skip_verify_visible_rect_calculations); | |
1511 | 1498 |
1512 // The expected damage would be too large to store in a gfx::Rect, so we | 1499 // The expected damage would be too large to store in a gfx::Rect, so we |
1513 // should damage everything (ie, we don't have a valid rect). | 1500 // should damage everything (ie, we don't have a valid rect). |
1514 gfx::Rect damage_rect; | 1501 gfx::Rect damage_rect; |
1515 EXPECT_FALSE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( | 1502 EXPECT_FALSE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( |
1516 &damage_rect)); | 1503 &damage_rect)); |
1517 EXPECT_EQ(root->render_surface()->content_rect(), | 1504 EXPECT_EQ(root->render_surface()->content_rect(), |
1518 root->render_surface()->GetDamageRect()); | 1505 root->render_surface()->GetDamageRect()); |
1519 } | 1506 } |
1520 | 1507 |
(...skipping 10 matching lines...) Expand all Loading... |
1531 grandchild1->SetDrawsContent(true); | 1518 grandchild1->SetDrawsContent(true); |
1532 | 1519 |
1533 // Really far right. | 1520 // Really far right. |
1534 grandchild2->SetPosition( | 1521 grandchild2->SetPosition( |
1535 gfx::PointF(std::numeric_limits<int>::max() - 500, 0)); | 1522 gfx::PointF(std::numeric_limits<int>::max() - 500, 0)); |
1536 grandchild2->SetBounds(gfx::Size(1, 1)); | 1523 grandchild2->SetBounds(gfx::Size(1, 1)); |
1537 grandchild2->SetDrawsContent(true); | 1524 grandchild2->SetDrawsContent(true); |
1538 | 1525 |
1539 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 1526 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
1540 float device_scale_factor = 1.f; | 1527 float device_scale_factor = 1.f; |
1541 bool skip_verify_visible_rect_calculations = true; | |
1542 LayerImplList render_surface_layer_list; | 1528 LayerImplList render_surface_layer_list; |
1543 ExecuteCalculateDrawProperties(root, device_scale_factor, | 1529 ExecuteCalculateDrawProperties(root, device_scale_factor, |
1544 skip_verify_visible_rect_calculations, | |
1545 &render_surface_layer_list); | 1530 &render_surface_layer_list); |
1546 | 1531 |
1547 auto* surface = child1->render_surface(); | 1532 auto* surface = child1->render_surface(); |
1548 surface->damage_tracker()->UpdateDamageTrackingState( | 1533 surface->damage_tracker()->UpdateDamageTrackingState( |
1549 surface->layer_list(), surface, false, surface->content_rect(), | 1534 surface->layer_list(), surface, false, surface->content_rect(), |
1550 surface->MaskLayer(), surface->Filters()); | 1535 surface->MaskLayer(), surface->Filters()); |
1551 surface = root->render_surface(); | 1536 surface = root->render_surface(); |
1552 surface->damage_tracker()->UpdateDamageTrackingState( | 1537 surface->damage_tracker()->UpdateDamageTrackingState( |
1553 surface->layer_list(), surface, false, surface->content_rect(), | 1538 surface->layer_list(), surface, false, surface->content_rect(), |
1554 surface->MaskLayer(), surface->Filters()); | 1539 surface->MaskLayer(), surface->Filters()); |
(...skipping 17 matching lines...) Expand all Loading... |
1572 | 1557 |
1573 // Add new damage, without changing properties, which goes down a different | 1558 // Add new damage, without changing properties, which goes down a different |
1574 // path in the damage tracker. | 1559 // path in the damage tracker. |
1575 root->layer_tree_impl()->ResetAllChangeTracking(); | 1560 root->layer_tree_impl()->ResetAllChangeTracking(); |
1576 grandchild1->AddDamageRect(gfx::Rect(grandchild1->bounds())); | 1561 grandchild1->AddDamageRect(gfx::Rect(grandchild1->bounds())); |
1577 grandchild2->AddDamageRect(gfx::Rect(grandchild1->bounds())); | 1562 grandchild2->AddDamageRect(gfx::Rect(grandchild1->bounds())); |
1578 | 1563 |
1579 // Recompute all damage / properties. | 1564 // Recompute all damage / properties. |
1580 render_surface_layer_list.clear(); | 1565 render_surface_layer_list.clear(); |
1581 ExecuteCalculateDrawProperties(root, device_scale_factor, | 1566 ExecuteCalculateDrawProperties(root, device_scale_factor, |
1582 skip_verify_visible_rect_calculations, | |
1583 &render_surface_layer_list); | 1567 &render_surface_layer_list); |
1584 surface = child1->render_surface(); | 1568 surface = child1->render_surface(); |
1585 surface->damage_tracker()->UpdateDamageTrackingState( | 1569 surface->damage_tracker()->UpdateDamageTrackingState( |
1586 surface->layer_list(), surface, false, surface->content_rect(), | 1570 surface->layer_list(), surface, false, surface->content_rect(), |
1587 surface->MaskLayer(), surface->Filters()); | 1571 surface->MaskLayer(), surface->Filters()); |
1588 surface = root->render_surface(); | 1572 surface = root->render_surface(); |
1589 surface->damage_tracker()->UpdateDamageTrackingState( | 1573 surface->damage_tracker()->UpdateDamageTrackingState( |
1590 surface->layer_list(), surface, false, surface->content_rect(), | 1574 surface->layer_list(), surface, false, surface->content_rect(), |
1591 surface->MaskLayer(), surface->Filters()); | 1575 surface->MaskLayer(), surface->Filters()); |
1592 | 1576 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1626 grandchild1->SetDrawsContent(true); | 1610 grandchild1->SetDrawsContent(true); |
1627 | 1611 |
1628 // Really far right. | 1612 // Really far right. |
1629 grandchild2->SetPosition( | 1613 grandchild2->SetPosition( |
1630 gfx::PointF(std::numeric_limits<int>::max() - 500, 0)); | 1614 gfx::PointF(std::numeric_limits<int>::max() - 500, 0)); |
1631 grandchild2->SetBounds(gfx::Size(1, 1)); | 1615 grandchild2->SetBounds(gfx::Size(1, 1)); |
1632 grandchild2->SetDrawsContent(true); | 1616 grandchild2->SetDrawsContent(true); |
1633 | 1617 |
1634 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 1618 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
1635 float device_scale_factor = 1.f; | 1619 float device_scale_factor = 1.f; |
1636 bool skip_verify_visible_rect_calculations = true; | |
1637 LayerImplList render_surface_layer_list; | 1620 LayerImplList render_surface_layer_list; |
1638 ExecuteCalculateDrawProperties(root, device_scale_factor, | 1621 ExecuteCalculateDrawProperties(root, device_scale_factor, |
1639 skip_verify_visible_rect_calculations, | |
1640 &render_surface_layer_list); | 1622 &render_surface_layer_list); |
1641 | 1623 |
1642 auto* surface = child1->render_surface(); | 1624 auto* surface = child1->render_surface(); |
1643 surface->damage_tracker()->UpdateDamageTrackingState( | 1625 surface->damage_tracker()->UpdateDamageTrackingState( |
1644 surface->layer_list(), surface, false, surface->content_rect(), | 1626 surface->layer_list(), surface, false, surface->content_rect(), |
1645 surface->MaskLayer(), surface->Filters()); | 1627 surface->MaskLayer(), surface->Filters()); |
1646 surface = root->render_surface(); | 1628 surface = root->render_surface(); |
1647 surface->damage_tracker()->UpdateDamageTrackingState( | 1629 surface->damage_tracker()->UpdateDamageTrackingState( |
1648 surface->layer_list(), surface, false, surface->content_rect(), | 1630 surface->layer_list(), surface, false, surface->content_rect(), |
1649 surface->MaskLayer(), surface->Filters()); | 1631 surface->MaskLayer(), surface->Filters()); |
(...skipping 17 matching lines...) Expand all Loading... |
1667 | 1649 |
1668 // Add new damage, without changing properties, which goes down a different | 1650 // Add new damage, without changing properties, which goes down a different |
1669 // path in the damage tracker. | 1651 // path in the damage tracker. |
1670 root->layer_tree_impl()->ResetAllChangeTracking(); | 1652 root->layer_tree_impl()->ResetAllChangeTracking(); |
1671 grandchild1->AddDamageRect(gfx::Rect(grandchild1->bounds())); | 1653 grandchild1->AddDamageRect(gfx::Rect(grandchild1->bounds())); |
1672 grandchild2->AddDamageRect(gfx::Rect(grandchild1->bounds())); | 1654 grandchild2->AddDamageRect(gfx::Rect(grandchild1->bounds())); |
1673 | 1655 |
1674 // Recompute all damage / properties. | 1656 // Recompute all damage / properties. |
1675 render_surface_layer_list.clear(); | 1657 render_surface_layer_list.clear(); |
1676 ExecuteCalculateDrawProperties(root, device_scale_factor, | 1658 ExecuteCalculateDrawProperties(root, device_scale_factor, |
1677 skip_verify_visible_rect_calculations, | |
1678 &render_surface_layer_list); | 1659 &render_surface_layer_list); |
1679 surface = child1->render_surface(); | 1660 surface = child1->render_surface(); |
1680 surface->damage_tracker()->UpdateDamageTrackingState( | 1661 surface->damage_tracker()->UpdateDamageTrackingState( |
1681 surface->layer_list(), surface, false, surface->content_rect(), | 1662 surface->layer_list(), surface, false, surface->content_rect(), |
1682 surface->MaskLayer(), surface->Filters()); | 1663 surface->MaskLayer(), surface->Filters()); |
1683 surface = root->render_surface(); | 1664 surface = root->render_surface(); |
1684 surface->damage_tracker()->UpdateDamageTrackingState( | 1665 surface->damage_tracker()->UpdateDamageTrackingState( |
1685 surface->layer_list(), surface, false, surface->content_rect(), | 1666 surface->layer_list(), surface, false, surface->content_rect(), |
1686 surface->MaskLayer(), surface->Filters()); | 1667 surface->MaskLayer(), surface->Filters()); |
1687 | 1668 |
1688 // Child1 should still not have a valid rect, since the union of the damage of | 1669 // Child1 should still not have a valid rect, since the union of the damage of |
1689 // its children is not representable by a single rect. | 1670 // its children is not representable by a single rect. |
1690 EXPECT_FALSE(child1->render_surface()->damage_tracker()->GetDamageRectIfValid( | 1671 EXPECT_FALSE(child1->render_surface()->damage_tracker()->GetDamageRectIfValid( |
1691 &damage_rect)); | 1672 &damage_rect)); |
1692 EXPECT_EQ(child1->render_surface()->content_rect(), | 1673 EXPECT_EQ(child1->render_surface()->content_rect(), |
1693 child1->render_surface()->GetDamageRect()); | 1674 child1->render_surface()->GetDamageRect()); |
1694 | 1675 |
1695 // Root should have valid damage and contain both its content rect and the | 1676 // Root should have valid damage and contain both its content rect and the |
1696 // drawable content rect of child1. | 1677 // drawable content rect of child1. |
1697 ASSERT_TRUE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( | 1678 ASSERT_TRUE(root->render_surface()->damage_tracker()->GetDamageRectIfValid( |
1698 &damage_rect)); | 1679 &damage_rect)); |
1699 EXPECT_TRUE(damage_rect.Contains(root->render_surface()->content_rect())); | 1680 EXPECT_TRUE(damage_rect.Contains(root->render_surface()->content_rect())); |
1700 EXPECT_TRUE(damage_rect.Contains( | 1681 EXPECT_TRUE(damage_rect.Contains( |
1701 gfx::ToEnclosingRect(child1->render_surface()->DrawableContentRect()))); | 1682 gfx::ToEnclosingRect(child1->render_surface()->DrawableContentRect()))); |
1702 EXPECT_EQ(damage_rect, root->render_surface()->GetDamageRect()); | 1683 EXPECT_EQ(damage_rect, root->render_surface()->GetDamageRect()); |
1703 } | 1684 } |
1704 | 1685 |
1705 } // namespace | 1686 } // namespace |
1706 } // namespace cc | 1687 } // namespace cc |
OLD | NEW |