| Index: cc/layers/picture_layer_impl_unittest.cc
|
| diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
|
| index 401df7e2710c3c5a76c202a9331ac12463fe8245..2258655dbf6f678b4858290e86c6d30abbfed1d8 100644
|
| --- a/cc/layers/picture_layer_impl_unittest.cc
|
| +++ b/cc/layers/picture_layer_impl_unittest.cc
|
| @@ -2848,7 +2848,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest,
|
| Tile* tile = *it;
|
|
|
| // Occluded tiles should not be iterated over.
|
| - EXPECT_FALSE(tile->is_occluded());
|
| + EXPECT_FALSE(tile->is_occluded(PENDING_TREE));
|
|
|
| // Some tiles may not be visible (i.e. outside the viewport). The rest are
|
| // visible and at least partially unoccluded, verified by the above expect.
|
| @@ -2877,7 +2877,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest,
|
| ++it) {
|
| Tile* tile = *it;
|
|
|
| - EXPECT_FALSE(tile->is_occluded());
|
| + EXPECT_FALSE(tile->is_occluded(PENDING_TREE));
|
|
|
| bool tile_is_visible =
|
| tile->content_rect().Intersects(pending_layer_->visible_content_rect());
|
| @@ -2898,7 +2898,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest,
|
| ++it) {
|
| Tile* tile = *it;
|
|
|
| - EXPECT_FALSE(tile->is_occluded());
|
| + EXPECT_FALSE(tile->is_occluded(PENDING_TREE));
|
|
|
| bool tile_is_visible =
|
| tile->content_rect().Intersects(pending_layer_->visible_content_rect());
|
| @@ -2940,7 +2940,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest,
|
| const Tile* tile = *iter;
|
|
|
| // Fully occluded tiles are not required for activation.
|
| - if (tile->is_occluded()) {
|
| + if (tile->is_occluded(PENDING_TREE)) {
|
| EXPECT_FALSE(tile->required_for_activation());
|
| occluded_tile_count++;
|
| }
|
| @@ -2973,7 +2973,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest,
|
| continue;
|
| const Tile* tile = *iter;
|
|
|
| - if (tile->is_occluded()) {
|
| + if (tile->is_occluded(PENDING_TREE)) {
|
| EXPECT_FALSE(tile->required_for_activation());
|
| occluded_tile_count++;
|
| }
|
| @@ -3009,7 +3009,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest,
|
| continue;
|
| const Tile* tile = *iter;
|
|
|
| - if (tile->is_occluded()) {
|
| + if (tile->is_occluded(PENDING_TREE)) {
|
| EXPECT_FALSE(tile->required_for_activation());
|
| occluded_tile_count++;
|
| }
|
| @@ -3070,7 +3070,7 @@ TEST_F(OcclusionTrackingPictureLayerImplTest, OcclusionForDifferentScales) {
|
|
|
| occluded_tile_count = 0;
|
| for (size_t i = 0; i < tiles.size(); ++i) {
|
| - if (tiles[i]->is_occluded()) {
|
| + if (tiles[i]->is_occluded(PENDING_TREE)) {
|
| gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
|
| tiles[i]->content_rect(), 1.0f / tiles[i]->contents_scale());
|
| EXPECT_GE(scaled_content_rect.x(), occluding_layer_position.x());
|
| @@ -3100,5 +3100,109 @@ TEST_F(OcclusionTrackingPictureLayerImplTest, OcclusionForDifferentScales) {
|
|
|
| EXPECT_EQ(tiling_count, 5);
|
| }
|
| +
|
| +TEST_F(OcclusionTrackingPictureLayerImplTest, DifferentOcclusionOnTrees) {
|
| + gfx::Size tile_size(102, 102);
|
| + gfx::Size layer_bounds(1000, 1000);
|
| + gfx::Size viewport_size(1000, 1000);
|
| + gfx::Point occluding_layer_position(310, 0);
|
| + gfx::Rect invalidation_rect(230, 230, 102, 102);
|
| +
|
| + scoped_refptr<FakePicturePileImpl> pending_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| + scoped_refptr<FakePicturePileImpl> active_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| + SetupTrees(pending_pile, active_pile);
|
| +
|
| + // Partially occlude the active layer.
|
| + active_layer_->AddChild(LayerImpl::Create(host_impl_.active_tree(), 2));
|
| + LayerImpl* layer1 = active_layer_->children()[0];
|
| + layer1->SetBounds(layer_bounds);
|
| + layer1->SetContentBounds(layer_bounds);
|
| + layer1->SetDrawsContent(true);
|
| + layer1->SetContentsOpaque(true);
|
| + layer1->SetPosition(occluding_layer_position);
|
| +
|
| + // Partially invalidate the pending layer.
|
| + pending_layer_->set_invalidation(invalidation_rect);
|
| +
|
| + host_impl_.SetViewportSize(viewport_size);
|
| +
|
| + active_layer_->CreateDefaultTilingsAndTiles();
|
| + pending_layer_->CreateDefaultTilingsAndTiles();
|
| +
|
| + for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
|
| + PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
|
| +
|
| + for (PictureLayerTiling::CoverageIterator iter(
|
| + tiling,
|
| + pending_layer_->contents_scale_x(),
|
| + gfx::Rect(layer_bounds));
|
| + iter;
|
| + ++iter) {
|
| + if (!*iter)
|
| + continue;
|
| + const Tile* tile = *iter;
|
| +
|
| + // All tiles are unoccluded on the pending tree.
|
| + EXPECT_FALSE(tile->is_occluded(PENDING_TREE));
|
| +
|
| + Tile* twin_tile =
|
| + pending_layer_->GetTwinTiling(tiling)->TileAt(iter.i(), iter.j());
|
| + gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
|
| + tile->content_rect(), 1.0f / tile->contents_scale());
|
| +
|
| + if (scaled_content_rect.Intersects(invalidation_rect)) {
|
| + // Tiles inside the invalidation rect are only on the pending tree.
|
| + EXPECT_NE(tile, twin_tile);
|
| +
|
| + // Unshared tiles should be unoccluded on the active tree by default.
|
| + EXPECT_FALSE(tile->is_occluded(ACTIVE_TREE));
|
| + } else {
|
| + // Tiles outside the invalidation rect are shared between both trees.
|
| + EXPECT_EQ(tile, twin_tile);
|
| + // Shared tiles are occluded on the active tree iff they lie beneath the
|
| + // occluding layer.
|
| + EXPECT_EQ(tile->is_occluded(ACTIVE_TREE),
|
| + scaled_content_rect.x() >= occluding_layer_position.x());
|
| + }
|
| + }
|
| + }
|
| +
|
| + for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
|
| + PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i);
|
| +
|
| + for (PictureLayerTiling::CoverageIterator iter(
|
| + tiling,
|
| + active_layer_->contents_scale_x(),
|
| + gfx::Rect(layer_bounds));
|
| + iter;
|
| + ++iter) {
|
| + if (!*iter)
|
| + continue;
|
| + const Tile* tile = *iter;
|
| +
|
| + Tile* twin_tile =
|
| + active_layer_->GetTwinTiling(tiling)->TileAt(iter.i(), iter.j());
|
| + gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
|
| + tile->content_rect(), 1.0f / tile->contents_scale());
|
| +
|
| + // Since we've already checked the shared tiles, only consider tiles in
|
| + // the invalidation rect.
|
| + if (scaled_content_rect.Intersects(invalidation_rect)) {
|
| + // Tiles inside the invalidation rect are only on the active tree.
|
| + EXPECT_NE(tile, twin_tile);
|
| +
|
| + // Unshared tiles should be unoccluded on the pending tree by default.
|
| + EXPECT_FALSE(tile->is_occluded(PENDING_TREE));
|
| +
|
| + // Unshared tiles are occluded on the active tree iff they lie beneath
|
| + // the occluding layer.
|
| + EXPECT_EQ(tile->is_occluded(ACTIVE_TREE),
|
| + scaled_content_rect.x() >= occluding_layer_position.x());
|
| + }
|
| + }
|
| + }
|
| +}
|
| } // namespace
|
| } // namespace cc
|
|
|