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

Side by Side Diff: cc/trees/layer_tree_host_unittest.cc

Issue 951673002: Revert "Pull chromium at 2c3ffb2355a27c32f45e508ef861416b820c823b" (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 1302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 1313
1314 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere. 1314 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere.
1315 // Verify atomicity of commits and reuse of textures. 1315 // Verify atomicity of commits and reuse of textures.
1316 class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest { 1316 class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest {
1317 public: 1317 public:
1318 void InitializeSettings(LayerTreeSettings* settings) override { 1318 void InitializeSettings(LayerTreeSettings* settings) override {
1319 settings->renderer_settings.texture_id_allocation_chunk_size = 1; 1319 settings->renderer_settings.texture_id_allocation_chunk_size = 1;
1320 // Make sure partial texture updates are turned off. 1320 // Make sure partial texture updates are turned off.
1321 settings->max_partial_texture_updates = 0; 1321 settings->max_partial_texture_updates = 0;
1322 // Linear fade animator prevents scrollbars from drawing immediately. 1322 // Linear fade animator prevents scrollbars from drawing immediately.
1323 settings->scrollbar_animator = LayerTreeSettings::NO_ANIMATOR; 1323 settings->scrollbar_animator = LayerTreeSettings::NoAnimator;
1324 } 1324 }
1325 1325
1326 void SetupTree() override { 1326 void SetupTree() override {
1327 layer_ = FakeContentLayer::Create(&client_); 1327 layer_ = FakeContentLayer::Create(&client_);
1328 layer_->SetBounds(gfx::Size(10, 20)); 1328 layer_->SetBounds(gfx::Size(10, 20));
1329 1329
1330 bool paint_scrollbar = true; 1330 bool paint_scrollbar = true;
1331 bool has_thumb = false; 1331 bool has_thumb = false;
1332 scrollbar_ = FakePaintedScrollbarLayer::Create( 1332 scrollbar_ = FakePaintedScrollbarLayer::Create(
1333 paint_scrollbar, has_thumb, layer_->id()); 1333 paint_scrollbar, has_thumb, layer_->id());
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after
2316 scoped_refptr<FakeContentLayer> child_layer1_; 2316 scoped_refptr<FakeContentLayer> child_layer1_;
2317 scoped_refptr<FakeContentLayer> child_layer2_; 2317 scoped_refptr<FakeContentLayer> child_layer2_;
2318 int num_commits_; 2318 int num_commits_;
2319 }; 2319 };
2320 2320
2321 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( 2321 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(
2322 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted); 2322 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted);
2323 2323
2324 class LayerTreeHostTestLCDChange : public LayerTreeHostTest { 2324 class LayerTreeHostTestLCDChange : public LayerTreeHostTest {
2325 public: 2325 public:
2326 class PaintClient : public FakeContentLayerClient {
2327 public:
2328 PaintClient() : paint_count_(0) {}
2329
2330 int paint_count() const { return paint_count_; }
2331
2332 void PaintContents(SkCanvas* canvas,
2333 const gfx::Rect& clip,
2334 PaintingControlSetting picture_control) override {
2335 FakeContentLayerClient::PaintContents(canvas, clip, picture_control);
2336 ++paint_count_;
2337 }
2338
2339 scoped_refptr<DisplayItemList> PaintContentsToDisplayList(
2340 const gfx::Rect& clip,
2341 PaintingControlSetting picture_control) override {
2342 NOTIMPLEMENTED();
2343 return DisplayItemList::Create();
2344 }
2345
2346 bool FillsBoundsCompletely() const override { return false; }
2347
2348 private:
2349 int paint_count_;
2350 };
2351
2326 void SetupTree() override { 2352 void SetupTree() override {
2327 num_tiles_rastered_ = 0; 2353 num_tiles_rastered_ = 0;
2328 2354
2329 scoped_refptr<Layer> root_layer = PictureLayer::Create(&client_); 2355 scoped_refptr<Layer> root_layer;
2356 if (layer_tree_host()->settings().impl_side_painting)
2357 root_layer = PictureLayer::Create(&client_);
2358 else
2359 root_layer = ContentLayer::Create(&client_);
2330 client_.set_fill_with_nonsolid_color(true); 2360 client_.set_fill_with_nonsolid_color(true);
2331 root_layer->SetIsDrawable(true); 2361 root_layer->SetIsDrawable(true);
2332 root_layer->SetBounds(gfx::Size(10, 10)); 2362 root_layer->SetBounds(gfx::Size(10, 10));
2333 root_layer->SetContentsOpaque(true); 2363 root_layer->SetContentsOpaque(true);
2334 2364
2335 layer_tree_host()->SetRootLayer(root_layer); 2365 layer_tree_host()->SetRootLayer(root_layer);
2336 2366
2337 // The expectations are based on the assumption that the default 2367 // The expecations are based on the assumption that the default
2338 // LCD settings are: 2368 // LCD settings are:
2339 EXPECT_TRUE(layer_tree_host()->settings().can_use_lcd_text); 2369 EXPECT_TRUE(layer_tree_host()->settings().can_use_lcd_text);
2370 EXPECT_FALSE(root_layer->can_use_lcd_text());
2340 2371
2341 LayerTreeHostTest::SetupTree(); 2372 LayerTreeHostTest::SetupTree();
2342 } 2373 }
2343 2374
2344 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 2375 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
2345 2376
2346 void DidCommitAndDrawFrame() override { 2377 void DidCommitAndDrawFrame() override {
2347 switch (layer_tree_host()->source_frame_number()) { 2378 switch (layer_tree_host()->source_frame_number()) {
2348 case 1: 2379 case 1:
2380 // The first update consists of a paint of the whole layer.
2381 EXPECT_EQ(1, client_.paint_count());
2382 // LCD text must have been enabled on the layer.
2383 EXPECT_TRUE(layer_tree_host()->root_layer()->can_use_lcd_text());
2349 PostSetNeedsCommitToMainThread(); 2384 PostSetNeedsCommitToMainThread();
2350 break; 2385 break;
2351 case 2: 2386 case 2:
2387 // Since nothing changed on layer, there should be no paint.
2388 EXPECT_EQ(1, client_.paint_count());
2389 // LCD text must not have changed.
2390 EXPECT_TRUE(layer_tree_host()->root_layer()->can_use_lcd_text());
2352 // Change layer opacity that should trigger lcd change. 2391 // Change layer opacity that should trigger lcd change.
2353 layer_tree_host()->root_layer()->SetOpacity(.5f); 2392 layer_tree_host()->root_layer()->SetOpacity(.5f);
2354 break; 2393 break;
2355 case 3: 2394 case 3:
2395 // LCD text doesn't require re-recording, so no painting should occur.
2396 EXPECT_EQ(1, client_.paint_count());
2397 // LCD text must have been disabled on the layer due to opacity.
2398 EXPECT_FALSE(layer_tree_host()->root_layer()->can_use_lcd_text());
2356 // Change layer opacity that should not trigger lcd change. 2399 // Change layer opacity that should not trigger lcd change.
2357 layer_tree_host()->root_layer()->SetOpacity(1.f); 2400 layer_tree_host()->root_layer()->SetOpacity(1.f);
2358 break; 2401 break;
2359 case 4: 2402 case 4:
2403 // LCD text doesn't require re-recording, so no painting should occur.
2404 EXPECT_EQ(1, client_.paint_count());
2405 // Even though LCD text could be allowed.
2406 EXPECT_TRUE(layer_tree_host()->root_layer()->can_use_lcd_text());
2360 EndTest(); 2407 EndTest();
2361 break; 2408 break;
2362 } 2409 }
2363 } 2410 }
2364 2411
2365 void NotifyTileStateChangedOnThread(LayerTreeHostImpl* host_impl, 2412 void NotifyTileStateChangedOnThread(LayerTreeHostImpl* host_impl,
2366 const Tile* tile) override { 2413 const Tile* tile) override {
2367 ++num_tiles_rastered_; 2414 ++num_tiles_rastered_;
2368 } 2415 }
2369 2416
2370 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { 2417 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
2371 PictureLayerImpl* root_layer =
2372 static_cast<PictureLayerImpl*>(host_impl->active_tree()->root_layer());
2373 bool can_use_lcd_text =
2374 host_impl->active_tree()->root_layer()->can_use_lcd_text();
2375 switch (host_impl->active_tree()->source_frame_number()) { 2418 switch (host_impl->active_tree()->source_frame_number()) {
2376 case 0: 2419 case 0:
2377 // The first draw. 2420 // The first draw.
2378 EXPECT_EQ(1, num_tiles_rastered_); 2421 EXPECT_EQ(1, num_tiles_rastered_);
2379 EXPECT_TRUE(can_use_lcd_text);
2380 EXPECT_TRUE(root_layer->RasterSourceUsesLCDText());
2381 break; 2422 break;
2382 case 1: 2423 case 1:
2383 // Nothing changed on the layer. 2424 // Nothing changed on the layer.
2384 EXPECT_EQ(1, num_tiles_rastered_); 2425 EXPECT_EQ(1, num_tiles_rastered_);
2385 EXPECT_TRUE(can_use_lcd_text);
2386 EXPECT_TRUE(root_layer->RasterSourceUsesLCDText());
2387 break; 2426 break;
2388 case 2: 2427 case 2:
2389 // LCD text was disabled; it should be re-rastered with LCD text off. 2428 // LCD text was disabled, it should be re-rastered with LCD text off.
2390 EXPECT_EQ(2, num_tiles_rastered_); 2429 EXPECT_EQ(2, num_tiles_rastered_);
2391 EXPECT_FALSE(can_use_lcd_text);
2392 EXPECT_FALSE(root_layer->RasterSourceUsesLCDText());
2393 break; 2430 break;
2394 case 3: 2431 case 3:
2395 // LCD text was enabled, but it's sticky and stays off. 2432 // LCD text was enabled but it's sticky and stays off.
2396 EXPECT_EQ(2, num_tiles_rastered_); 2433 EXPECT_EQ(2, num_tiles_rastered_);
2397 EXPECT_TRUE(can_use_lcd_text);
2398 EXPECT_FALSE(root_layer->RasterSourceUsesLCDText());
2399 break; 2434 break;
2400 } 2435 }
2401 } 2436 }
2402 2437
2403 void AfterTest() override {} 2438 void AfterTest() override {}
2404 2439
2405 private: 2440 private:
2406 FakeContentLayerClient client_; 2441 PaintClient client_;
2407 int num_tiles_rastered_; 2442 int num_tiles_rastered_;
2408 }; 2443 };
2409 2444
2410 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestLCDChange); 2445 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestLCDChange);
2411 2446
2412 // Verify that the BeginFrame notification is used to initiate rendering. 2447 // Verify that the BeginFrame notification is used to initiate rendering.
2413 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest { 2448 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest {
2414 public: 2449 public:
2415 void InitializeSettings(LayerTreeSettings* settings) override { 2450 void InitializeSettings(LayerTreeSettings* settings) override {
2416 settings->use_external_begin_frame_source = true; 2451 settings->use_external_begin_frame_source = true;
(...skipping 3837 matching lines...) Expand 10 before | Expand all | Expand 10 after
6254 } 6289 }
6255 6290
6256 void AfterTest() override { EXPECT_TRUE(did_commit_); } 6291 void AfterTest() override { EXPECT_TRUE(did_commit_); }
6257 6292
6258 private: 6293 private:
6259 bool did_commit_; 6294 bool did_commit_;
6260 }; 6295 };
6261 6296
6262 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit); 6297 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit);
6263 6298
6264 // Verify that if a LayerImpl holds onto a copy request for multiple
6265 // frames that it will continue to have a render surface through
6266 // multiple commits, even though the Layer itself has no reason
6267 // to have a render surface.
6268 class LayerPreserveRenderSurfaceFromOutputRequests : public LayerTreeHostTest {
6269 protected:
6270 void SetupTree() override {
6271 scoped_refptr<Layer> root = Layer::Create();
6272 root->CreateRenderSurface();
6273 root->SetBounds(gfx::Size(10, 10));
6274 child_ = Layer::Create();
6275 child_->SetBounds(gfx::Size(20, 20));
6276 root->AddChild(child_);
6277
6278 layer_tree_host()->SetRootLayer(root);
6279 LayerTreeHostTest::SetupTree();
6280 }
6281
6282 static void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {}
6283
6284 void BeginTest() override {
6285 child_->RequestCopyOfOutput(
6286 CopyOutputRequest::CreateBitmapRequest(base::Bind(CopyOutputCallback)));
6287 EXPECT_TRUE(child_->HasCopyRequest());
6288 PostSetNeedsCommitToMainThread();
6289 }
6290
6291 void DidCommit() override { EXPECT_FALSE(child_->HasCopyRequest()); }
6292
6293 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
6294 LayerImpl* child_impl = host_impl->sync_tree()->LayerById(child_->id());
6295
6296 switch (host_impl->sync_tree()->source_frame_number()) {
6297 case 0:
6298 EXPECT_TRUE(child_impl->HasCopyRequest());
6299 EXPECT_TRUE(child_impl->render_surface());
6300 break;
6301 case 1:
6302 if (host_impl->proxy()->CommitToActiveTree()) {
6303 EXPECT_TRUE(child_impl->HasCopyRequest());
6304 EXPECT_TRUE(child_impl->render_surface());
6305 } else {
6306 EXPECT_FALSE(child_impl->HasCopyRequest());
6307 EXPECT_FALSE(child_impl->render_surface());
6308 }
6309 break;
6310 default:
6311 NOTREACHED();
6312 break;
6313 }
6314 }
6315
6316 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
6317 LayerImpl* child_impl = host_impl->active_tree()->LayerById(child_->id());
6318 EXPECT_TRUE(child_impl->HasCopyRequest());
6319 EXPECT_TRUE(child_impl->render_surface());
6320
6321 switch (host_impl->active_tree()->source_frame_number()) {
6322 case 0:
6323 // Lose output surface to prevent drawing and cause another commit.
6324 host_impl->DidLoseOutputSurface();
6325 break;
6326 case 1:
6327 EndTest();
6328 break;
6329 default:
6330 NOTREACHED();
6331 break;
6332 }
6333 }
6334
6335 void AfterTest() override {}
6336
6337 private:
6338 scoped_refptr<Layer> child_;
6339 };
6340
6341 SINGLE_AND_MULTI_THREAD_TEST_F(LayerPreserveRenderSurfaceFromOutputRequests);
6342
6343 } // namespace cc 6299 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc ('k') | cc/trees/layer_tree_host_unittest_animation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698