Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(730)

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 375923005: cc: Explicitly invalidate all dropped recordings on the main thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: invalid-resize: . Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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) {
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
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".
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698