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

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 519583003: Use the solid color detection to create solid layers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added another test to make sure the tilings are cleared correctly Created 6 years, 3 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
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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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(0, active_layer_->tilings()->num_tilings());
danakj 2014/09/19 20:44:28 0u
hendrikw 2014/09/19 22:27:13 Acknowledged.
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(size_t(0), active_layer_->tilings()->num_tilings());
danakj 2014/09/19 20:44:28 nit: s/size_t(0)/0u/
hendrikw 2014/09/19 22:27:13 :/ Acknowledged.
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(0, active_layer_->tilings()->num_tilings());
danakj 2014/09/19 20:44:28 0u
hendrikw 2014/09/19 22:27:13 Acknowledged.
4371 }
4372
4225 } // namespace 4373 } // namespace
4226 } // namespace cc 4374 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698