| 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 4da402a59ea9d8c312f1bc92fe7170745d785263..2f1b0ed96dff551c98d51cd9a8a989601bce9741 100644
|
| --- a/cc/layers/picture_layer_impl_unittest.cc
|
| +++ b/cc/layers/picture_layer_impl_unittest.cc
|
| @@ -1457,6 +1457,99 @@ TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) {
|
| EXPECT_GT(num_offscreen, 0);
|
| }
|
|
|
| +TEST_F(PictureLayerImplTest, TileOutsideOfViewportForTilePriorityNotRequired) {
|
| + base::TimeTicks time_ticks;
|
| + time_ticks += base::TimeDelta::FromMilliseconds(1);
|
| + host_impl_.SetCurrentBeginFrameArgs(
|
| + CreateBeginFrameArgsForTesting(time_ticks));
|
| +
|
| + gfx::Size tile_size(100, 100);
|
| + gfx::Size layer_bounds(400, 400);
|
| + gfx::Rect external_viewport_for_tile_priority(400, 200);
|
| + gfx::Rect visible_content_rect(200, 400);
|
| +
|
| + scoped_refptr<FakePicturePileImpl> active_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| + scoped_refptr<FakePicturePileImpl> pending_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| + SetupTrees(pending_pile, active_pile);
|
| +
|
| + active_layer_->set_fixed_tile_size(tile_size);
|
| + pending_layer_->set_fixed_tile_size(tile_size);
|
| + ASSERT_TRUE(pending_layer_->CanHaveTilings());
|
| + PictureLayerTiling* tiling = pending_layer_->AddTiling(1.f);
|
| +
|
| + // Set external viewport for tile priority.
|
| + gfx::Rect viewport = gfx::Rect(layer_bounds);
|
| + gfx::Transform transform;
|
| + gfx::Transform transform_for_tile_priority;
|
| + bool resourceless_software_draw = false;
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + external_viewport_for_tile_priority,
|
| + transform_for_tile_priority,
|
| + resourceless_software_draw);
|
| + host_impl_.pending_tree()->UpdateDrawProperties();
|
| +
|
| + // Set visible content rect that is different from
|
| + // external_viewport_for_tile_priority.
|
| + pending_layer_->draw_properties().visible_content_rect = visible_content_rect;
|
| + time_ticks += base::TimeDelta::FromMilliseconds(200);
|
| + host_impl_.SetCurrentBeginFrameArgs(
|
| + CreateBeginFrameArgsForTesting(time_ticks));
|
| + pending_layer_->UpdateTiles(NULL);
|
| +
|
| + pending_layer_->MarkVisibleResourcesAsRequired();
|
| +
|
| + // Intersect the two rects. Any tile outside should not be required for
|
| + // activation.
|
| + gfx::Rect viewport_for_tile_priority =
|
| + pending_layer_->GetViewportForTilePriorityInContentSpace();
|
| + viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect());
|
| +
|
| + int num_inside = 0;
|
| + int num_outside = 0;
|
| + for (PictureLayerTiling::CoverageIterator iter(
|
| + tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds));
|
| + iter;
|
| + ++iter) {
|
| + if (!*iter)
|
| + continue;
|
| + Tile* tile = *iter;
|
| + if (viewport_for_tile_priority.Intersects(iter.geometry_rect())) {
|
| + num_inside++;
|
| + // Mark everything in viewport for tile priority as ready to draw.
|
| + ManagedTileState::TileVersion& tile_version =
|
| + tile->GetTileVersionForTesting(
|
| + tile->DetermineRasterModeForTree(PENDING_TREE));
|
| + tile_version.SetSolidColorForTesting(SK_ColorRED);
|
| + } else {
|
| + num_outside++;
|
| + EXPECT_FALSE(tile->required_for_activation());
|
| + }
|
| + }
|
| +
|
| + EXPECT_GT(num_inside, 0);
|
| + EXPECT_GT(num_outside, 0);
|
| +
|
| + // Activate and draw active layer.
|
| + host_impl_.ActivateSyncTree();
|
| + host_impl_.active_tree()->UpdateDrawProperties();
|
| + active_layer_->draw_properties().visible_content_rect = visible_content_rect;
|
| +
|
| + MockOcclusionTracker<LayerImpl> occlusion_tracker;
|
| + scoped_ptr<RenderPass> render_pass = RenderPass::Create();
|
| + AppendQuadsData data;
|
| + active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL);
|
| + active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
|
| + active_layer_->DidDraw(NULL);
|
| +
|
| + // All tiles in activation rect is ready to draw.
|
| + EXPECT_EQ(0u, data.num_missing_tiles);
|
| + EXPECT_EQ(0u, data.num_incomplete_tiles);
|
| +}
|
| +
|
| TEST_F(PictureLayerImplTest, HighResRequiredWhenUnsharedActiveAllReady) {
|
| gfx::Size layer_bounds(400, 400);
|
| gfx::Size tile_size(100, 100);
|
|
|