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