Chromium Code Reviews| 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 5eae6a6c52ae72d544d5985f29221da8d7b4562d..11712c6eb3c5e7679990ebd7e403fd9f6e9e4c53 100644 |
| --- a/cc/layers/picture_layer_impl_unittest.cc |
| +++ b/cc/layers/picture_layer_impl_unittest.cc |
| @@ -1450,6 +1450,97 @@ TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { |
| EXPECT_GT(num_offscreen, 0); |
| } |
| +TEST_F(PictureLayerImplTest, TileOutsideOfActivationRectNotRequired) { |
| + base::TimeTicks time_ticks; |
| + time_ticks += base::TimeDelta::FromMilliseconds(1); |
| + host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| + |
| + gfx::Size tile_size(100, 100); |
| + gfx::Size layer_bounds(400, 400); |
| + gfx::Rect external_activation_rect(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 activation rect. |
| + gfx::Rect viewport = gfx::Rect(layer_bounds); |
| + gfx::Transform transform; |
| + gfx::Rect viewport_rect_for_tile_priority = external_activation_rect; |
| + gfx::Transform transform_for_tile_priority; |
| + bool resourceless_software_draw = false; |
| + host_impl_.SetExternalDrawConstraints(transform, |
| + viewport, |
| + viewport, |
| + viewport_rect_for_tile_priority, |
| + transform_for_tile_priority, |
| + resourceless_software_draw); |
| + host_impl_.pending_tree()->UpdateDrawProperties(); |
| + |
| + // Set visible content rect that is different from activation rect. |
| + pending_layer_->draw_properties().visible_content_rect = visible_content_rect; |
| + time_ticks += base::TimeDelta::FromMilliseconds(200); |
| + host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| + pending_layer_->UpdateTiles(NULL); |
| + |
| + pending_layer_->MarkVisibleResourcesAsRequired(); |
| + |
| + // Intersect the two rects. Any tile outside should not be required for |
| + // activation. |
| + gfx::Rect activation_rect = pending_layer_->GetActivationRectInContentSpace(); |
| + activation_rect.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 (activation_rect.Intersects(iter.geometry_rect())) { |
| + num_inside++; |
| + // Mark everything in activation rect as ready to draw. |
| + ManagedTileState::TileVersion& tile_version = |
| + tile->GetTileVersionForTesting( |
| + tile->DetermineRasterModeForTree(PENDING_TREE)); |
| + tile_version.SetSolidColorForTesting(SK_ColorRED); |
|
hush (inactive)
2014/08/18 20:48:16
are you going to test if the color of these tiles
boliu
2014/08/18 21:32:57
I think checking the quads are red isn't really th
|
| + } 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_inside_activation_rect); |
| + // There are tiles outside of activation rect but inside draw rect missing. |
| + EXPECT_LT(0u, data.num_missing_tiles); |
| +} |
| + |
| TEST_F(PictureLayerImplTest, HighResRequiredWhenUnsharedActiveAllReady) { |
| gfx::Size layer_bounds(400, 400); |
| gfx::Size tile_size(100, 100); |