OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <set> | 9 #include <set> |
10 #include <utility> | 10 #include <utility> |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
73 gfx::Size tile_size(100, 100); | 73 gfx::Size tile_size(100, 100); |
74 | 74 |
75 scoped_refptr<FakePicturePileImpl> pending_pile = | 75 scoped_refptr<FakePicturePileImpl> pending_pile = |
76 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 76 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
77 scoped_refptr<FakePicturePileImpl> active_pile = | 77 scoped_refptr<FakePicturePileImpl> active_pile = |
78 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 78 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
79 | 79 |
80 SetupTrees(pending_pile, active_pile); | 80 SetupTrees(pending_pile, active_pile); |
81 } | 81 } |
82 | 82 |
83 void SetupDefaultPendingTree(const gfx::Size& layer_bounds) { | |
enne (OOO)
2014/07/11 00:12:04
Unused?
| |
84 gfx::Size tile_size(100, 100); | |
85 | |
86 scoped_refptr<FakePicturePileImpl> pending_pile = | |
87 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | |
88 | |
89 SetupPendingTree(pending_pile); | |
90 host_impl_.pending_tree()->SetPageScaleFactorAndLimits(1.f, 0.25f, 100.f); | |
91 } | |
92 | |
83 void ActivateTree() { | 93 void ActivateTree() { |
84 host_impl_.ActivateSyncTree(); | 94 host_impl_.ActivateSyncTree(); |
85 CHECK(!host_impl_.pending_tree()); | 95 CHECK(!host_impl_.pending_tree()); |
86 pending_layer_ = NULL; | 96 pending_layer_ = NULL; |
87 active_layer_ = static_cast<FakePictureLayerImpl*>( | 97 active_layer_ = static_cast<FakePictureLayerImpl*>( |
88 host_impl_.active_tree()->LayerById(id_)); | 98 host_impl_.active_tree()->LayerById(id_)); |
89 } | 99 } |
90 | 100 |
91 void SetupDefaultTreesWithFixedTileSize(const gfx::Size& layer_bounds, | 101 void SetupDefaultTreesWithFixedTileSize(const gfx::Size& layer_bounds, |
92 const gfx::Size& tile_size) { | 102 const gfx::Size& tile_size) { |
(...skipping 1390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1483 host_impl_.ActivateSyncTree(); | 1493 host_impl_.ActivateSyncTree(); |
1484 | 1494 |
1485 active_layer_ = static_cast<FakePictureLayerImpl*>( | 1495 active_layer_ = static_cast<FakePictureLayerImpl*>( |
1486 host_impl_.active_tree()->LayerById(id_)); | 1496 host_impl_.active_tree()->LayerById(id_)); |
1487 | 1497 |
1488 EXPECT_EQ(0u, active_layer_->num_tilings()); | 1498 EXPECT_EQ(0u, active_layer_->num_tilings()); |
1489 EXPECT_EQ(raster_page_scale, active_layer_->raster_page_scale()); | 1499 EXPECT_EQ(raster_page_scale, active_layer_->raster_page_scale()); |
1490 EXPECT_FALSE(active_layer_->needs_post_commit_initialization()); | 1500 EXPECT_FALSE(active_layer_->needs_post_commit_initialization()); |
1491 } | 1501 } |
1492 | 1502 |
1493 TEST_F(PictureLayerImplTest, RemoveInvalidTilesOnActivation) { | 1503 TEST_F(PictureLayerImplTest, ShareTilesOnSync) { |
1494 SetupDefaultTrees(gfx::Size(1500, 1500)); | 1504 SetupDefaultTrees(gfx::Size(1500, 1500)); |
1495 AddDefaultTilingsWithInvalidation(gfx::Rect(0, 0, 1, 1)); | 1505 AddDefaultTilingsWithInvalidation(gfx::Rect()); |
1496 | 1506 |
1497 FakePictureLayerImpl* recycled_layer = pending_layer_; | |
1498 host_impl_.ActivateSyncTree(); | 1507 host_impl_.ActivateSyncTree(); |
1499 | 1508 host_impl_.CreatePendingTree(); |
1500 active_layer_ = static_cast<FakePictureLayerImpl*>( | 1509 active_layer_ = static_cast<FakePictureLayerImpl*>( |
1501 host_impl_.active_tree()->LayerById(id_)); | 1510 host_impl_.active_tree()->LayerById(id_)); |
1502 | 1511 |
1512 // Force the active tree to sync to the pending tree "post-commit". | |
1513 pending_layer_->DoPostCommitInitializationIfNeeded(); | |
1514 | |
1515 // Both invalidations should drop tiles from the pending tree. | |
1503 EXPECT_EQ(3u, active_layer_->num_tilings()); | 1516 EXPECT_EQ(3u, active_layer_->num_tilings()); |
1504 EXPECT_EQ(3u, recycled_layer->num_tilings()); | 1517 EXPECT_EQ(3u, pending_layer_->num_tilings()); |
1505 EXPECT_FALSE(host_impl_.pending_tree()); | |
1506 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { | 1518 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { |
1507 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i); | 1519 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i); |
1508 PictureLayerTiling* recycled_tiling = | 1520 PictureLayerTiling* pending_tiling = |
1509 recycled_layer->tilings()->tiling_at(i); | 1521 pending_layer_->tilings()->tiling_at(i); |
1510 | 1522 |
1511 ASSERT_TRUE(active_tiling); | 1523 ASSERT_TRUE(active_tiling); |
1512 ASSERT_TRUE(recycled_tiling); | 1524 ASSERT_TRUE(pending_tiling); |
1513 | 1525 |
1514 EXPECT_TRUE(active_tiling->TileAt(0, 0)); | 1526 EXPECT_TRUE(active_tiling->TileAt(0, 0)); |
1515 EXPECT_TRUE(active_tiling->TileAt(1, 0)); | 1527 EXPECT_TRUE(active_tiling->TileAt(1, 0)); |
1516 EXPECT_TRUE(active_tiling->TileAt(0, 1)); | 1528 EXPECT_TRUE(active_tiling->TileAt(0, 1)); |
1517 EXPECT_TRUE(active_tiling->TileAt(1, 1)); | 1529 EXPECT_TRUE(active_tiling->TileAt(1, 1)); |
1518 | 1530 |
1519 EXPECT_FALSE(recycled_tiling->TileAt(0, 0)); | 1531 EXPECT_TRUE(pending_tiling->TileAt(0, 0)); |
1520 EXPECT_TRUE(recycled_tiling->TileAt(1, 0)); | 1532 EXPECT_TRUE(pending_tiling->TileAt(1, 0)); |
1521 EXPECT_TRUE(recycled_tiling->TileAt(0, 1)); | 1533 EXPECT_TRUE(pending_tiling->TileAt(0, 1)); |
1522 EXPECT_TRUE(recycled_tiling->TileAt(1, 1)); | 1534 EXPECT_TRUE(pending_tiling->TileAt(1, 1)); |
1523 | 1535 |
1524 EXPECT_EQ(active_tiling->TileAt(1, 0), recycled_tiling->TileAt(1, 0)); | 1536 EXPECT_EQ(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0)); |
1525 EXPECT_EQ(active_tiling->TileAt(0, 1), recycled_tiling->TileAt(0, 1)); | 1537 EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0)); |
1526 EXPECT_EQ(active_tiling->TileAt(1, 1), recycled_tiling->TileAt(1, 1)); | 1538 EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1)); |
1539 EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1)); | |
1527 } | 1540 } |
1528 } | 1541 } |
1529 | 1542 |
1543 TEST_F(PictureLayerImplTest, RemoveInvalidActiveTreeTilesOnSync) { | |
1544 SetupDefaultTrees(gfx::Size(1500, 1500)); | |
1545 AddDefaultTilingsWithInvalidation(gfx::Rect(0, 0, 1, 1)); | |
1546 | |
1547 // This activates the 0,0,1,1 invalidation. | |
1548 host_impl_.ActivateSyncTree(); | |
1549 host_impl_.CreatePendingTree(); | |
1550 active_layer_ = static_cast<FakePictureLayerImpl*>( | |
1551 host_impl_.active_tree()->LayerById(id_)); | |
1552 | |
1553 // Force the active tree to sync to the pending tree "post-commit". | |
enne (OOO)
2014/07/11 00:12:04
This is a little bit weird. Can you test the acti
danakj
2014/07/11 17:06:16
Then I have to instantiate main thread layers and
enne (OOO)
2014/07/11 18:21:54
It's just a little weird. You're right that it wo
| |
1554 pending_layer_->DoPostCommitInitializationIfNeeded(); | |
1555 | |
1556 // Both invalidations should drop tiles from the pending tree. | |
1557 EXPECT_EQ(3u, active_layer_->num_tilings()); | |
1558 EXPECT_EQ(3u, pending_layer_->num_tilings()); | |
1559 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { | |
1560 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i); | |
1561 PictureLayerTiling* pending_tiling = | |
1562 pending_layer_->tilings()->tiling_at(i); | |
1563 | |
1564 ASSERT_TRUE(active_tiling); | |
1565 ASSERT_TRUE(pending_tiling); | |
1566 | |
1567 EXPECT_TRUE(active_tiling->TileAt(0, 0)); | |
1568 EXPECT_TRUE(active_tiling->TileAt(1, 0)); | |
1569 EXPECT_TRUE(active_tiling->TileAt(0, 1)); | |
1570 EXPECT_TRUE(active_tiling->TileAt(1, 1)); | |
1571 | |
1572 EXPECT_TRUE(pending_tiling->TileAt(0, 0)); | |
1573 EXPECT_TRUE(pending_tiling->TileAt(1, 0)); | |
1574 EXPECT_TRUE(pending_tiling->TileAt(0, 1)); | |
1575 EXPECT_TRUE(pending_tiling->TileAt(1, 1)); | |
1576 | |
1577 EXPECT_NE(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0)); | |
1578 EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0)); | |
1579 EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1)); | |
1580 EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1)); | |
1581 } | |
1582 } | |
1583 | |
1584 TEST_F(PictureLayerImplTest, RemoveInvalidPendingTreeTilesOnSync) { | |
1585 SetupDefaultTrees(gfx::Size(1500, 1500)); | |
1586 AddDefaultTilingsWithInvalidation(gfx::Rect()); | |
1587 | |
1588 host_impl_.ActivateSyncTree(); | |
1589 host_impl_.CreatePendingTree(); | |
1590 active_layer_ = static_cast<FakePictureLayerImpl*>( | |
1591 host_impl_.active_tree()->LayerById(id_)); | |
1592 | |
1593 // Set some invalidation on the pending tree "during commit". We should | |
1594 // replace raster tiles that touch this. | |
1595 pending_layer_->set_invalidation(gfx::Rect(1, 1)); | |
1596 | |
1597 // Force the active tree to sync to the pending tree "post-commit". | |
1598 pending_layer_->DoPostCommitInitializationIfNeeded(); | |
1599 | |
1600 // Both invalidations should drop tiles from the pending tree. | |
1601 EXPECT_EQ(3u, active_layer_->num_tilings()); | |
1602 EXPECT_EQ(3u, pending_layer_->num_tilings()); | |
1603 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { | |
1604 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i); | |
1605 PictureLayerTiling* pending_tiling = | |
1606 pending_layer_->tilings()->tiling_at(i); | |
1607 | |
1608 ASSERT_TRUE(active_tiling); | |
1609 ASSERT_TRUE(pending_tiling); | |
1610 | |
1611 EXPECT_TRUE(active_tiling->TileAt(0, 0)); | |
1612 EXPECT_TRUE(active_tiling->TileAt(1, 0)); | |
1613 EXPECT_TRUE(active_tiling->TileAt(0, 1)); | |
1614 EXPECT_TRUE(active_tiling->TileAt(1, 1)); | |
1615 | |
1616 EXPECT_TRUE(pending_tiling->TileAt(0, 0)); | |
1617 EXPECT_TRUE(pending_tiling->TileAt(1, 0)); | |
1618 EXPECT_TRUE(pending_tiling->TileAt(0, 1)); | |
1619 EXPECT_TRUE(pending_tiling->TileAt(1, 1)); | |
1620 | |
1621 EXPECT_NE(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0)); | |
1622 EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0)); | |
1623 EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1)); | |
1624 EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1)); | |
1625 } | |
1626 } | |
1627 | |
1530 TEST_F(PictureLayerImplTest, SyncTilingAfterReleaseResource) { | 1628 TEST_F(PictureLayerImplTest, SyncTilingAfterReleaseResource) { |
1531 SetupDefaultTrees(gfx::Size(10, 10)); | 1629 SetupDefaultTrees(gfx::Size(10, 10)); |
1532 host_impl_.active_tree()->UpdateDrawProperties(); | 1630 host_impl_.active_tree()->UpdateDrawProperties(); |
1533 EXPECT_FALSE(host_impl_.active_tree()->needs_update_draw_properties()); | 1631 EXPECT_FALSE(host_impl_.active_tree()->needs_update_draw_properties()); |
1534 | 1632 |
1535 // Contrived unit test of a real crash. A layer is transparent during a | 1633 // Contrived unit test of a real crash. A layer is transparent during a |
1536 // context loss, and later becomes opaque, causing active layer SyncTiling to | 1634 // context loss, and later becomes opaque, causing active layer SyncTiling to |
1537 // be called. | 1635 // be called. |
1538 float new_scale = 1.f; | 1636 float new_scale = 1.f; |
1539 active_layer_->ReleaseResources(); | 1637 active_layer_->ReleaseResources(); |
(...skipping 1555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3095 NOTREACHED(); | 3193 NOTREACHED(); |
3096 } | 3194 } |
3097 | 3195 |
3098 tiling_count++; | 3196 tiling_count++; |
3099 } | 3197 } |
3100 | 3198 |
3101 EXPECT_EQ(tiling_count, 5); | 3199 EXPECT_EQ(tiling_count, 5); |
3102 } | 3200 } |
3103 } // namespace | 3201 } // namespace |
3104 } // namespace cc | 3202 } // namespace cc |
OLD | NEW |