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

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: resizedeletestiles 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
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/resources/picture_layer_tiling.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1474 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 host_impl_.ActivateSyncTree(); 1485 host_impl_.ActivateSyncTree();
1486 1486
1487 active_layer_ = static_cast<FakePictureLayerImpl*>( 1487 active_layer_ = static_cast<FakePictureLayerImpl*>(
1488 host_impl_.active_tree()->LayerById(id_)); 1488 host_impl_.active_tree()->LayerById(id_));
1489 1489
1490 EXPECT_EQ(0u, active_layer_->num_tilings()); 1490 EXPECT_EQ(0u, active_layer_->num_tilings());
1491 EXPECT_EQ(raster_page_scale, active_layer_->raster_page_scale()); 1491 EXPECT_EQ(raster_page_scale, active_layer_->raster_page_scale());
1492 EXPECT_FALSE(active_layer_->needs_post_commit_initialization()); 1492 EXPECT_FALSE(active_layer_->needs_post_commit_initialization());
1493 } 1493 }
1494 1494
1495 TEST_F(PictureLayerImplTest, RemoveInvalidTilesOnActivation) { 1495 TEST_F(PictureLayerImplTest, ShareTilesOnSync) {
1496 SetupDefaultTrees(gfx::Size(1500, 1500)); 1496 SetupDefaultTrees(gfx::Size(1500, 1500));
1497 AddDefaultTilingsWithInvalidation(gfx::Rect(0, 0, 1, 1)); 1497 AddDefaultTilingsWithInvalidation(gfx::Rect());
1498 1498
1499 FakePictureLayerImpl* recycled_layer = pending_layer_;
1500 host_impl_.ActivateSyncTree(); 1499 host_impl_.ActivateSyncTree();
1501 1500 host_impl_.CreatePendingTree();
1502 active_layer_ = static_cast<FakePictureLayerImpl*>( 1501 active_layer_ = static_cast<FakePictureLayerImpl*>(
1503 host_impl_.active_tree()->LayerById(id_)); 1502 host_impl_.active_tree()->LayerById(id_));
1504 1503
1504 // Force the active tree to sync to the pending tree "post-commit".
1505 pending_layer_->DoPostCommitInitializationIfNeeded();
1506
1507 // Both invalidations should drop tiles from the pending tree.
1505 EXPECT_EQ(3u, active_layer_->num_tilings()); 1508 EXPECT_EQ(3u, active_layer_->num_tilings());
1506 EXPECT_EQ(3u, recycled_layer->num_tilings()); 1509 EXPECT_EQ(3u, pending_layer_->num_tilings());
1507 EXPECT_FALSE(host_impl_.pending_tree());
1508 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { 1510 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
1509 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i); 1511 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i);
1510 PictureLayerTiling* recycled_tiling = 1512 PictureLayerTiling* pending_tiling =
1511 recycled_layer->tilings()->tiling_at(i); 1513 pending_layer_->tilings()->tiling_at(i);
1512 1514
1513 ASSERT_TRUE(active_tiling); 1515 ASSERT_TRUE(active_tiling);
1514 ASSERT_TRUE(recycled_tiling); 1516 ASSERT_TRUE(pending_tiling);
1515 1517
1516 EXPECT_TRUE(active_tiling->TileAt(0, 0)); 1518 EXPECT_TRUE(active_tiling->TileAt(0, 0));
1517 EXPECT_TRUE(active_tiling->TileAt(1, 0)); 1519 EXPECT_TRUE(active_tiling->TileAt(1, 0));
1518 EXPECT_TRUE(active_tiling->TileAt(0, 1)); 1520 EXPECT_TRUE(active_tiling->TileAt(0, 1));
1519 EXPECT_TRUE(active_tiling->TileAt(1, 1)); 1521 EXPECT_TRUE(active_tiling->TileAt(1, 1));
1520 1522
1521 EXPECT_FALSE(recycled_tiling->TileAt(0, 0)); 1523 EXPECT_TRUE(pending_tiling->TileAt(0, 0));
1522 EXPECT_TRUE(recycled_tiling->TileAt(1, 0)); 1524 EXPECT_TRUE(pending_tiling->TileAt(1, 0));
1523 EXPECT_TRUE(recycled_tiling->TileAt(0, 1)); 1525 EXPECT_TRUE(pending_tiling->TileAt(0, 1));
1524 EXPECT_TRUE(recycled_tiling->TileAt(1, 1)); 1526 EXPECT_TRUE(pending_tiling->TileAt(1, 1));
1525 1527
1526 EXPECT_EQ(active_tiling->TileAt(1, 0), recycled_tiling->TileAt(1, 0)); 1528 EXPECT_EQ(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0));
1527 EXPECT_EQ(active_tiling->TileAt(0, 1), recycled_tiling->TileAt(0, 1)); 1529 EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0));
1528 EXPECT_EQ(active_tiling->TileAt(1, 1), recycled_tiling->TileAt(1, 1)); 1530 EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1));
1531 EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1));
1529 } 1532 }
1530 } 1533 }
1531 1534
1535 TEST_F(PictureLayerImplTest, RemoveInvalidActiveTreeTilesOnSync) {
1536 SetupDefaultTrees(gfx::Size(1500, 1500));
1537 AddDefaultTilingsWithInvalidation(gfx::Rect(0, 0, 1, 1));
1538
1539 // This activates the 0,0,1,1 invalidation.
1540 host_impl_.ActivateSyncTree();
1541 host_impl_.CreatePendingTree();
1542 active_layer_ = static_cast<FakePictureLayerImpl*>(
1543 host_impl_.active_tree()->LayerById(id_));
1544
1545 // Force the active tree to sync to the pending tree "post-commit".
1546 pending_layer_->DoPostCommitInitializationIfNeeded();
1547
1548 // Both invalidations should drop tiles from the pending tree.
1549 EXPECT_EQ(3u, active_layer_->num_tilings());
1550 EXPECT_EQ(3u, pending_layer_->num_tilings());
1551 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
1552 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i);
1553 PictureLayerTiling* pending_tiling =
1554 pending_layer_->tilings()->tiling_at(i);
1555
1556 ASSERT_TRUE(active_tiling);
1557 ASSERT_TRUE(pending_tiling);
1558
1559 EXPECT_TRUE(active_tiling->TileAt(0, 0));
1560 EXPECT_TRUE(active_tiling->TileAt(1, 0));
1561 EXPECT_TRUE(active_tiling->TileAt(0, 1));
1562 EXPECT_TRUE(active_tiling->TileAt(1, 1));
1563
1564 EXPECT_TRUE(pending_tiling->TileAt(0, 0));
1565 EXPECT_TRUE(pending_tiling->TileAt(1, 0));
1566 EXPECT_TRUE(pending_tiling->TileAt(0, 1));
1567 EXPECT_TRUE(pending_tiling->TileAt(1, 1));
1568
1569 EXPECT_NE(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0));
1570 EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0));
1571 EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1));
1572 EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1));
1573 }
1574 }
1575
1576 TEST_F(PictureLayerImplTest, RemoveInvalidPendingTreeTilesOnSync) {
1577 SetupDefaultTrees(gfx::Size(1500, 1500));
1578 AddDefaultTilingsWithInvalidation(gfx::Rect());
1579
1580 host_impl_.ActivateSyncTree();
1581 host_impl_.CreatePendingTree();
1582 active_layer_ = static_cast<FakePictureLayerImpl*>(
1583 host_impl_.active_tree()->LayerById(id_));
1584
1585 // Set some invalidation on the pending tree "during commit". We should
1586 // replace raster tiles that touch this.
1587 pending_layer_->set_invalidation(gfx::Rect(1, 1));
1588
1589 // Force the active tree to sync to the pending tree "post-commit".
1590 pending_layer_->DoPostCommitInitializationIfNeeded();
1591
1592 // Both invalidations should drop tiles from the pending tree.
1593 EXPECT_EQ(3u, active_layer_->num_tilings());
1594 EXPECT_EQ(3u, pending_layer_->num_tilings());
1595 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
1596 PictureLayerTiling* active_tiling = active_layer_->tilings()->tiling_at(i);
1597 PictureLayerTiling* pending_tiling =
1598 pending_layer_->tilings()->tiling_at(i);
1599
1600 ASSERT_TRUE(active_tiling);
1601 ASSERT_TRUE(pending_tiling);
1602
1603 EXPECT_TRUE(active_tiling->TileAt(0, 0));
1604 EXPECT_TRUE(active_tiling->TileAt(1, 0));
1605 EXPECT_TRUE(active_tiling->TileAt(0, 1));
1606 EXPECT_TRUE(active_tiling->TileAt(1, 1));
1607
1608 EXPECT_TRUE(pending_tiling->TileAt(0, 0));
1609 EXPECT_TRUE(pending_tiling->TileAt(1, 0));
1610 EXPECT_TRUE(pending_tiling->TileAt(0, 1));
1611 EXPECT_TRUE(pending_tiling->TileAt(1, 1));
1612
1613 EXPECT_NE(active_tiling->TileAt(0, 0), pending_tiling->TileAt(0, 0));
1614 EXPECT_EQ(active_tiling->TileAt(1, 0), pending_tiling->TileAt(1, 0));
1615 EXPECT_EQ(active_tiling->TileAt(0, 1), pending_tiling->TileAt(0, 1));
1616 EXPECT_EQ(active_tiling->TileAt(1, 1), pending_tiling->TileAt(1, 1));
1617 }
1618 }
1619
1532 TEST_F(PictureLayerImplTest, SyncTilingAfterReleaseResource) { 1620 TEST_F(PictureLayerImplTest, SyncTilingAfterReleaseResource) {
1533 SetupDefaultTrees(gfx::Size(10, 10)); 1621 SetupDefaultTrees(gfx::Size(10, 10));
1534 host_impl_.active_tree()->UpdateDrawProperties(); 1622 host_impl_.active_tree()->UpdateDrawProperties();
1535 EXPECT_FALSE(host_impl_.active_tree()->needs_update_draw_properties()); 1623 EXPECT_FALSE(host_impl_.active_tree()->needs_update_draw_properties());
1536 1624
1537 // Contrived unit test of a real crash. A layer is transparent during a 1625 // Contrived unit test of a real crash. A layer is transparent during a
1538 // context loss, and later becomes opaque, causing active layer SyncTiling to 1626 // context loss, and later becomes opaque, causing active layer SyncTiling to
1539 // be called. 1627 // be called.
1540 float new_scale = 1.f; 1628 float new_scale = 1.f;
1541 active_layer_->ReleaseResources(); 1629 active_layer_->ReleaseResources();
(...skipping 1661 matching lines...) Expand 10 before | Expand all | Expand 10 after
3203 // Unshared tiles are occluded on the active tree iff they lie beneath 3291 // Unshared tiles are occluded on the active tree iff they lie beneath
3204 // the occluding layer. 3292 // the occluding layer.
3205 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), 3293 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE),
3206 scaled_content_rect.x() >= occluding_layer_position.x()); 3294 scaled_content_rect.x() >= occluding_layer_position.x());
3207 } 3295 }
3208 } 3296 }
3209 } 3297 }
3210 } 3298 }
3211 } // namespace 3299 } // namespace
3212 } // namespace cc 3300 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/resources/picture_layer_tiling.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698