OLD | NEW |
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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 // This test verifies that when drawing the contents of a specific tile | 263 // This test verifies that when drawing the contents of a specific tile |
264 // at content scale 1.0, the playback canvas never receives content from | 264 // at content scale 1.0, the playback canvas never receives content from |
265 // neighboring tiles which indicates that the tile grid embedded in | 265 // neighboring tiles which indicates that the tile grid embedded in |
266 // SkPicture is perfectly aligned with the compositor's tiles. | 266 // SkPicture is perfectly aligned with the compositor's tiles. |
267 EXPECT_EQ(1u, mock_canvas.rects_.size()); | 267 EXPECT_EQ(1u, mock_canvas.rects_.size()); |
268 EXPECT_RECT_EQ(*rect_iter, mock_canvas.rects_[0]); | 268 EXPECT_RECT_EQ(*rect_iter, mock_canvas.rects_[0]); |
269 rect_iter++; | 269 rect_iter++; |
270 } | 270 } |
271 } | 271 } |
272 | 272 |
| 273 void TestQuadsForSolidColor(bool test_for_solid); |
| 274 |
273 FakeImplProxy proxy_; | 275 FakeImplProxy proxy_; |
274 TestSharedBitmapManager shared_bitmap_manager_; | 276 TestSharedBitmapManager shared_bitmap_manager_; |
275 FakeLayerTreeHostImpl host_impl_; | 277 FakeLayerTreeHostImpl host_impl_; |
276 int id_; | 278 int id_; |
277 FakePictureLayerImpl* pending_layer_; | 279 FakePictureLayerImpl* pending_layer_; |
278 FakePictureLayerImpl* old_pending_layer_; | 280 FakePictureLayerImpl* old_pending_layer_; |
279 FakePictureLayerImpl* active_layer_; | 281 FakePictureLayerImpl* active_layer_; |
280 | 282 |
281 private: | 283 private: |
282 DISALLOW_COPY_AND_ASSIGN(PictureLayerImplTest); | 284 DISALLOW_COPY_AND_ASSIGN(PictureLayerImplTest); |
(...skipping 3932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4215 EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); | 4217 EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); |
4216 | 4218 |
4217 ActivateTree(); | 4219 ActivateTree(); |
4218 EXPECT_TRUE(active_layer_->GetRecycledTwinLayer()); | 4220 EXPECT_TRUE(active_layer_->GetRecycledTwinLayer()); |
4219 EXPECT_EQ(old_pending_layer_, active_layer_->GetRecycledTwinLayer()); | 4221 EXPECT_EQ(old_pending_layer_, active_layer_->GetRecycledTwinLayer()); |
4220 | 4222 |
4221 host_impl_.ResetRecycleTreeForTesting(); | 4223 host_impl_.ResetRecycleTreeForTesting(); |
4222 EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); | 4224 EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); |
4223 } | 4225 } |
4224 | 4226 |
| 4227 void PictureLayerImplTest::TestQuadsForSolidColor(bool test_for_solid) { |
| 4228 base::TimeTicks time_ticks; |
| 4229 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 4230 host_impl_.SetCurrentBeginFrameArgs( |
| 4231 CreateBeginFrameArgsForTesting(time_ticks)); |
| 4232 |
| 4233 gfx::Size tile_size(100, 100); |
| 4234 gfx::Size layer_bounds(200, 200); |
| 4235 gfx::Rect layer_rect(layer_bounds); |
| 4236 |
| 4237 FakeContentLayerClient client; |
| 4238 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client); |
| 4239 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
| 4240 host->SetRootLayer(layer); |
| 4241 PicturePile* pile = layer->GetPicturePileForTesting(); |
| 4242 |
| 4243 host_impl_.SetViewportSize(layer_bounds); |
| 4244 |
| 4245 int frame_number = 0; |
| 4246 FakeRenderingStatsInstrumentation stats_instrumentation; |
| 4247 |
| 4248 client.set_fill_with_nonsolid_color(!test_for_solid); |
| 4249 |
| 4250 Region invalidation(layer_rect); |
| 4251 pile->UpdateAndExpandInvalidation(&client, |
| 4252 &invalidation, |
| 4253 SK_ColorWHITE, |
| 4254 false, |
| 4255 false, |
| 4256 layer_bounds, |
| 4257 layer_rect, |
| 4258 frame_number++, |
| 4259 Picture::RECORD_NORMALLY, |
| 4260 &stats_instrumentation); |
| 4261 |
| 4262 scoped_refptr<PicturePileImpl> pending_pile = |
| 4263 PicturePileImpl::CreateFromOther(pile); |
| 4264 |
| 4265 SetupPendingTree(pending_pile); |
| 4266 ActivateTree(); |
| 4267 |
| 4268 if (test_for_solid) { |
| 4269 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
| 4270 } else { |
| 4271 ASSERT_TRUE(active_layer_->tilings()); |
| 4272 active_layer_->set_fixed_tile_size(tile_size); |
| 4273 host_impl_.active_tree()->UpdateDrawProperties(); |
| 4274 ASSERT_GT(active_layer_->tilings()->num_tilings(), 0u); |
| 4275 std::vector<Tile*> tiles = |
| 4276 active_layer_->tilings()->tiling_at(0)->AllTilesForTesting(); |
| 4277 EXPECT_FALSE(tiles.empty()); |
| 4278 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); |
| 4279 } |
| 4280 |
| 4281 MockOcclusionTracker<LayerImpl> occlusion_tracker; |
| 4282 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 4283 AppendQuadsData data; |
| 4284 active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL); |
| 4285 active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data); |
| 4286 active_layer_->DidDraw(NULL); |
| 4287 |
| 4288 DrawQuad::Material expected = test_for_solid |
| 4289 ? DrawQuad::Material::SOLID_COLOR |
| 4290 : DrawQuad::Material::TILED_CONTENT; |
| 4291 EXPECT_EQ(expected, render_pass->quad_list.front()->material); |
| 4292 } |
| 4293 |
| 4294 TEST_F(PictureLayerImplTest, DrawSolidQuads) { |
| 4295 TestQuadsForSolidColor(true); |
| 4296 } |
| 4297 |
| 4298 TEST_F(PictureLayerImplTest, DrawNonSolidQuads) { |
| 4299 TestQuadsForSolidColor(false); |
| 4300 } |
| 4301 |
| 4302 TEST_F(PictureLayerImplTest, NonSolidToSolidNoTilings) { |
| 4303 base::TimeTicks time_ticks; |
| 4304 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 4305 host_impl_.SetCurrentBeginFrameArgs( |
| 4306 CreateBeginFrameArgsForTesting(time_ticks)); |
| 4307 |
| 4308 gfx::Size tile_size(100, 100); |
| 4309 gfx::Size layer_bounds(200, 200); |
| 4310 gfx::Rect layer_rect(layer_bounds); |
| 4311 |
| 4312 FakeContentLayerClient client; |
| 4313 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client); |
| 4314 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
| 4315 host->SetRootLayer(layer); |
| 4316 PicturePile* pile = layer->GetPicturePileForTesting(); |
| 4317 |
| 4318 host_impl_.SetViewportSize(layer_bounds); |
| 4319 |
| 4320 int frame_number = 0; |
| 4321 FakeRenderingStatsInstrumentation stats_instrumentation; |
| 4322 |
| 4323 client.set_fill_with_nonsolid_color(true); |
| 4324 |
| 4325 Region invalidation1(layer_rect); |
| 4326 pile->UpdateAndExpandInvalidation(&client, |
| 4327 &invalidation1, |
| 4328 SK_ColorWHITE, |
| 4329 false, |
| 4330 false, |
| 4331 layer_bounds, |
| 4332 layer_rect, |
| 4333 frame_number++, |
| 4334 Picture::RECORD_NORMALLY, |
| 4335 &stats_instrumentation); |
| 4336 |
| 4337 scoped_refptr<PicturePileImpl> pending_pile1 = |
| 4338 PicturePileImpl::CreateFromOther(pile); |
| 4339 |
| 4340 SetupPendingTree(pending_pile1); |
| 4341 ActivateTree(); |
| 4342 host_impl_.active_tree()->UpdateDrawProperties(); |
| 4343 |
| 4344 // We've started with a solid layer that contains some tilings. |
| 4345 ASSERT_TRUE(active_layer_->tilings()); |
| 4346 EXPECT_NE(0u, active_layer_->tilings()->num_tilings()); |
| 4347 |
| 4348 client.set_fill_with_nonsolid_color(false); |
| 4349 |
| 4350 Region invalidation2(layer_rect); |
| 4351 pile->UpdateAndExpandInvalidation(&client, |
| 4352 &invalidation2, |
| 4353 SK_ColorWHITE, |
| 4354 false, |
| 4355 false, |
| 4356 layer_bounds, |
| 4357 layer_rect, |
| 4358 frame_number++, |
| 4359 Picture::RECORD_NORMALLY, |
| 4360 &stats_instrumentation); |
| 4361 |
| 4362 scoped_refptr<PicturePileImpl> pending_pile2 = |
| 4363 PicturePileImpl::CreateFromOther(pile); |
| 4364 |
| 4365 SetupPendingTree(pending_pile2); |
| 4366 ActivateTree(); |
| 4367 |
| 4368 // We've switched to a solid color, so we should end up with no tilings. |
| 4369 ASSERT_TRUE(active_layer_->tilings()); |
| 4370 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
| 4371 } |
| 4372 |
4225 } // namespace | 4373 } // namespace |
4226 } // namespace cc | 4374 } // namespace cc |
OLD | NEW |