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

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

Issue 475633008: cc: Use impl-side painting in LTH context lost tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments addressed. 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
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "cc/layers/content_layer.h" 8 #include "cc/layers/content_layer.h"
9 #include "cc/layers/delegated_frame_provider.h" 9 #include "cc/layers/delegated_frame_provider.h"
10 #include "cc/layers/delegated_frame_resource_collection.h" 10 #include "cc/layers/delegated_frame_resource_collection.h"
(...skipping 10 matching lines...) Expand all
21 #include "cc/resources/single_release_callback.h" 21 #include "cc/resources/single_release_callback.h"
22 #include "cc/test/fake_content_layer.h" 22 #include "cc/test/fake_content_layer.h"
23 #include "cc/test/fake_content_layer_client.h" 23 #include "cc/test/fake_content_layer_client.h"
24 #include "cc/test/fake_content_layer_impl.h" 24 #include "cc/test/fake_content_layer_impl.h"
25 #include "cc/test/fake_delegated_renderer_layer.h" 25 #include "cc/test/fake_delegated_renderer_layer.h"
26 #include "cc/test/fake_delegated_renderer_layer_impl.h" 26 #include "cc/test/fake_delegated_renderer_layer_impl.h"
27 #include "cc/test/fake_layer_tree_host_client.h" 27 #include "cc/test/fake_layer_tree_host_client.h"
28 #include "cc/test/fake_output_surface.h" 28 #include "cc/test/fake_output_surface.h"
29 #include "cc/test/fake_output_surface_client.h" 29 #include "cc/test/fake_output_surface_client.h"
30 #include "cc/test/fake_painted_scrollbar_layer.h" 30 #include "cc/test/fake_painted_scrollbar_layer.h"
31 #include "cc/test/fake_picture_layer.h"
32 #include "cc/test/fake_picture_layer_impl.h"
31 #include "cc/test/fake_scoped_ui_resource.h" 33 #include "cc/test/fake_scoped_ui_resource.h"
32 #include "cc/test/fake_scrollbar.h" 34 #include "cc/test/fake_scrollbar.h"
33 #include "cc/test/fake_video_frame_provider.h" 35 #include "cc/test/fake_video_frame_provider.h"
34 #include "cc/test/layer_tree_test.h" 36 #include "cc/test/layer_tree_test.h"
35 #include "cc/test/render_pass_test_common.h" 37 #include "cc/test/render_pass_test_common.h"
36 #include "cc/test/test_context_provider.h" 38 #include "cc/test/test_context_provider.h"
37 #include "cc/test/test_shared_bitmap_manager.h" 39 #include "cc/test/test_shared_bitmap_manager.h"
38 #include "cc/test/test_web_graphics_context_3d.h" 40 #include "cc/test/test_web_graphics_context_3d.h"
39 #include "cc/trees/layer_tree_host_impl.h" 41 #include "cc/trees/layer_tree_host_impl.h"
40 #include "cc/trees/layer_tree_impl.h" 42 #include "cc/trees/layer_tree_impl.h"
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 LayerTreeHostClientNotReadyDoesNotCreateOutputSurface); 318 LayerTreeHostClientNotReadyDoesNotCreateOutputSurface);
317 319
318 class LayerTreeHostContextTestLostContextSucceedsWithContent 320 class LayerTreeHostContextTestLostContextSucceedsWithContent
319 : public LayerTreeHostContextTestLostContextSucceeds { 321 : public LayerTreeHostContextTestLostContextSucceeds {
320 public: 322 public:
321 virtual void SetupTree() OVERRIDE { 323 virtual void SetupTree() OVERRIDE {
322 root_ = Layer::Create(); 324 root_ = Layer::Create();
323 root_->SetBounds(gfx::Size(10, 10)); 325 root_->SetBounds(gfx::Size(10, 10));
324 root_->SetIsDrawable(true); 326 root_->SetIsDrawable(true);
325 327
326 content_ = FakeContentLayer::Create(&client_); 328 // Paint non-solid color.
327 content_->SetBounds(gfx::Size(10, 10)); 329 SkPaint paint;
328 content_->SetIsDrawable(true); 330 paint.setColor(SkColorSetARGB(100, 80, 200, 200));
331 client_.add_draw_rect(gfx::Rect(0, 0, 5, 5), paint);
332 client_.add_draw_rect(gfx::Rect(10, 10, 10, 10), paint);
danakj 2014/09/13 13:13:47 the layer is only 10x10, it seems like the last th
sohanjg 2014/09/15 05:14:31 Done. increased bound to 100X100.
danakj 2014/09/15 16:34:37 Or, how about just remove the three extra draw_rec
333 client_.add_draw_rect(gfx::Rect(30, 30, 5, 5), paint);
334 client_.add_draw_rect(gfx::Rect(50, 50, 5, 5), paint);
329 335
330 root_->AddChild(content_); 336 if (layer_tree_host()->settings().impl_side_painting)
337 layer_ = FakePictureLayer::Create(&client_);
338 else
339 layer_ = FakeContentLayer::Create(&client_);
340 layer_->SetBounds(gfx::Size(10, 10));
341 layer_->SetIsDrawable(true);
342
343 root_->AddChild(layer_);
331 344
332 layer_tree_host()->SetRootLayer(root_); 345 layer_tree_host()->SetRootLayer(root_);
333 LayerTreeHostContextTest::SetupTree(); 346 LayerTreeHostContextTest::SetupTree();
334 } 347 }
335 348
336 virtual void InvalidateAndSetNeedsCommit() OVERRIDE { 349 virtual void InvalidateAndSetNeedsCommit() OVERRIDE {
337 // Invalidate the render surface so we don't try to use a cached copy of the 350 // Invalidate the render surface so we don't try to use a cached copy of the
338 // surface. We want to make sure to test the drawing paths for drawing to 351 // surface. We want to make sure to test the drawing paths for drawing to
339 // a child surface. 352 // a child surface.
340 content_->SetNeedsDisplay(); 353 layer_->SetNeedsDisplay();
341 LayerTreeHostContextTestLostContextSucceeds::InvalidateAndSetNeedsCommit(); 354 LayerTreeHostContextTestLostContextSucceeds::InvalidateAndSetNeedsCommit();
342 } 355 }
343 356
344 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 357 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
345 FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>( 358 if (!host_impl->settings().impl_side_painting) {
346 host_impl->active_tree()->root_layer()->children()[0]); 359 FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>(
347 // Even though the context was lost, we should have a resource. The 360 host_impl->active_tree()->root_layer()->children()[0]);
348 // TestWebGraphicsContext3D ensures that this resource is created with 361 // Even though the context was lost, we should have a resource. The
349 // the active context. 362 // TestWebGraphicsContext3D ensures that this resource is created with
350 EXPECT_TRUE(content_impl->HaveResourceForTileAt(0, 0)); 363 // the active context.
364 EXPECT_TRUE(content_impl->HaveResourceForTileAt(0, 0));
365 } else {
366 FakePictureLayerImpl* picture_impl = static_cast<FakePictureLayerImpl*>(
367 host_impl->active_tree()->root_layer()->children()[0]);
368 EXPECT_TRUE(picture_impl->HighResTiling()->TileAt(0, 0)->IsReadyToDraw());
369 }
351 } 370 }
352 371
353 protected: 372 protected:
354 FakeContentLayerClient client_; 373 FakeContentLayerClient client_;
355 scoped_refptr<Layer> root_; 374 scoped_refptr<Layer> root_;
356 scoped_refptr<ContentLayer> content_; 375 scoped_refptr<Layer> layer_;
357 }; 376 };
358 377
359 // This test uses TiledLayer to check for a working context. 378 // This test uses TiledLayer and PictureLayer to check for a working context.
360 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( 379 SINGLE_AND_MULTI_THREAD_TEST_F(
361 LayerTreeHostContextTestLostContextSucceedsWithContent); 380 LayerTreeHostContextTestLostContextSucceedsWithContent);
362 381
363 class LayerTreeHostContextTestCreateOutputSurfaceFails 382 class LayerTreeHostContextTestCreateOutputSurfaceFails
364 : public LayerTreeHostContextTest { 383 : public LayerTreeHostContextTest {
365 public: 384 public:
366 // Run a test that initially fails OutputSurface creation |times_to_fail| 385 // Run a test that initially fails OutputSurface creation |times_to_fail|
367 // times. If |expect_fallback_attempt| is |true|, an attempt to create a 386 // times. If |expect_fallback_attempt| is |true|, an attempt to create a
368 // fallback/software OutputSurface is expected to occur. 387 // fallback/software OutputSurface is expected to occur.
369 LayerTreeHostContextTestCreateOutputSurfaceFails(int times_to_fail, 388 LayerTreeHostContextTestCreateOutputSurfaceFails(int times_to_fail,
370 bool expect_fallback_attempt) 389 bool expect_fallback_attempt)
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 }; 449 };
431 450
432 SINGLE_AND_MULTI_THREAD_TEST_F( 451 SINGLE_AND_MULTI_THREAD_TEST_F(
433 LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback); 452 LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback);
434 453
435 class LayerTreeHostContextTestLostContextAndEvictTextures 454 class LayerTreeHostContextTestLostContextAndEvictTextures
436 : public LayerTreeHostContextTest { 455 : public LayerTreeHostContextTest {
437 public: 456 public:
438 LayerTreeHostContextTestLostContextAndEvictTextures() 457 LayerTreeHostContextTestLostContextAndEvictTextures()
439 : LayerTreeHostContextTest(), 458 : LayerTreeHostContextTest(),
440 layer_(FakeContentLayer::Create(&client_)),
441 impl_host_(0), 459 impl_host_(0),
442 num_commits_(0) {} 460 num_commits_(0) {}
443 461
444 virtual void SetupTree() OVERRIDE { 462 virtual void SetupTree() OVERRIDE {
445 layer_->SetBounds(gfx::Size(10, 20)); 463 if (layer_tree_host()->settings().impl_side_painting) {
446 layer_tree_host()->SetRootLayer(layer_); 464 picture_layer_ = FakePictureLayer::Create(&client_);
465 picture_layer_->SetBounds(gfx::Size(10, 20));
466 layer_tree_host()->SetRootLayer(picture_layer_);
467 } else {
468 content_layer_ = FakeContentLayer::Create(&client_);
469 content_layer_->SetBounds(gfx::Size(10, 20));
470 layer_tree_host()->SetRootLayer(content_layer_);
471 }
472
447 LayerTreeHostContextTest::SetupTree(); 473 LayerTreeHostContextTest::SetupTree();
448 } 474 }
449 475
450 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 476 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
451 477
452 void PostEvictTextures() { 478 void PostEvictTextures() {
453 if (HasImplThread()) { 479 if (HasImplThread()) {
454 ImplThreadTaskRunner()->PostTask( 480 ImplThreadTaskRunner()->PostTask(
455 FROM_HERE, 481 FROM_HERE,
456 base::Bind(&LayerTreeHostContextTestLostContextAndEvictTextures:: 482 base::Bind(&LayerTreeHostContextTestLostContextAndEvictTextures::
457 EvictTexturesOnImplThread, 483 EvictTexturesOnImplThread,
458 base::Unretained(this))); 484 base::Unretained(this)));
459 } else { 485 } else {
460 DebugScopedSetImplThread impl(proxy()); 486 DebugScopedSetImplThread impl(proxy());
461 EvictTexturesOnImplThread(); 487 EvictTexturesOnImplThread();
462 } 488 }
463 } 489 }
464 490
465 void EvictTexturesOnImplThread() { 491 void EvictTexturesOnImplThread() {
466 impl_host_->EvictTexturesForTesting(); 492 impl_host_->EvictTexturesForTesting();
493 if (impl_host_->settings().impl_side_painting) {
494 FakePictureLayerImpl* picture_impl = static_cast<FakePictureLayerImpl*>(
495 impl_host_->active_tree()->root_layer()->children()[0]);
496 EXPECT_FALSE(
497 picture_impl->HighResTiling()->TileAt(0, 0)->IsReadyToDraw());
498 }
467 if (lose_after_evict_) 499 if (lose_after_evict_)
468 LoseContext(); 500 LoseContext();
469 } 501 }
470 502
471 virtual void DidCommitAndDrawFrame() OVERRIDE { 503 virtual void DidCommitAndDrawFrame() OVERRIDE {
472 if (num_commits_ > 1) 504 if (num_commits_ > 1)
473 return; 505 return;
474 EXPECT_TRUE(layer_->HaveBackingAt(0, 0)); 506 if (!layer_tree_host()->settings().impl_side_painting) {
507 EXPECT_TRUE(content_layer_->HaveBackingAt(0, 0));
508 }
475 PostEvictTextures(); 509 PostEvictTextures();
476 } 510 }
477 511
478 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { 512 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
479 LayerTreeHostContextTest::CommitCompleteOnThread(impl); 513 if (impl->settings().impl_side_painting) {
480 if (num_commits_ > 1) 514 FakePictureLayerImpl* picture_impl = static_cast<FakePictureLayerImpl*>(
481 return; 515 impl->active_tree()->root_layer()->children()[0]);
482 ++num_commits_; 516 EXPECT_TRUE(picture_impl->HighResTiling()->TileAt(0, 0)->IsReadyToDraw());
483 if (!lose_after_evict_) 517 }
484 LoseContext(); 518
485 impl_host_ = impl; 519 impl_host_ = impl;
486 } 520 }
487 521
488 virtual void DidInitializeOutputSurface() OVERRIDE { EndTest(); } 522 virtual void DidInitializeOutputSurface() OVERRIDE { EndTest(); }
489 523
490 virtual void AfterTest() OVERRIDE {} 524 virtual void AfterTest() OVERRIDE {}
491 525
492 protected: 526 protected:
493 bool lose_after_evict_; 527 bool lose_after_evict_;
494 FakeContentLayerClient client_; 528 FakeContentLayerClient client_;
495 scoped_refptr<FakeContentLayer> layer_; 529 scoped_refptr<FakeContentLayer> content_layer_;
530 scoped_refptr<FakePictureLayer> picture_layer_;
496 LayerTreeHostImpl* impl_host_; 531 LayerTreeHostImpl* impl_host_;
497 int num_commits_; 532 int num_commits_;
498 }; 533 };
499 534
500 TEST_F(LayerTreeHostContextTestLostContextAndEvictTextures, 535 TEST_F(LayerTreeHostContextTestLostContextAndEvictTextures,
501 LoseAfterEvict_SingleThread_DirectRenderer) { 536 LoseAfterEvict_SingleThread_DirectRenderer) {
502 lose_after_evict_ = true; 537 lose_after_evict_ = true;
503 RunTest(false, false, false); 538 RunTest(false, false, false);
504 } 539 }
505 540
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 TEST_F(LayerTreeHostContextTestLostContextAndEvictTextures, 596 TEST_F(LayerTreeHostContextTestLostContextAndEvictTextures,
562 LoseBeforeEvict_MultiThread_DelegatingRenderer_ImplSidePaint) { 597 LoseBeforeEvict_MultiThread_DelegatingRenderer_ImplSidePaint) {
563 lose_after_evict_ = false; 598 lose_after_evict_ = false;
564 RunTest(true, true, true); 599 RunTest(true, true, true);
565 } 600 }
566 601
567 class LayerTreeHostContextTestLostContextWhileUpdatingResources 602 class LayerTreeHostContextTestLostContextWhileUpdatingResources
568 : public LayerTreeHostContextTest { 603 : public LayerTreeHostContextTest {
569 public: 604 public:
570 LayerTreeHostContextTestLostContextWhileUpdatingResources() 605 LayerTreeHostContextTestLostContextWhileUpdatingResources()
571 : parent_(FakeContentLayer::Create(&client_)), 606 : num_children_(50), times_to_lose_on_end_query_(3) {}
572 num_children_(50),
573 times_to_lose_on_end_query_(3) {}
574 607
575 virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() OVERRIDE { 608 virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() OVERRIDE {
576 scoped_ptr<TestWebGraphicsContext3D> context = 609 scoped_ptr<TestWebGraphicsContext3D> context =
577 LayerTreeHostContextTest::CreateContext3d(); 610 LayerTreeHostContextTest::CreateContext3d();
578 if (times_to_lose_on_end_query_) { 611 if (times_to_lose_on_end_query_) {
579 --times_to_lose_on_end_query_; 612 --times_to_lose_on_end_query_;
580 context->set_times_end_query_succeeds(5); 613 context->set_times_end_query_succeeds(5);
581 } 614 }
582 return context.Pass(); 615 return context.Pass();
583 } 616 }
584 617
585 virtual void SetupTree() OVERRIDE { 618 virtual void SetupTree() OVERRIDE {
619 if (layer_tree_host()->settings().impl_side_painting)
620 parent_ = FakePictureLayer::Create(&client_);
621 else
622 parent_ = FakeContentLayer::Create(&client_);
623
586 parent_->SetBounds(gfx::Size(num_children_, 1)); 624 parent_->SetBounds(gfx::Size(num_children_, 1));
587 625
588 for (int i = 0; i < num_children_; i++) { 626 for (int i = 0; i < num_children_; i++) {
589 scoped_refptr<FakeContentLayer> child = 627 scoped_refptr<Layer> child;
590 FakeContentLayer::Create(&client_); 628 if (layer_tree_host()->settings().impl_side_painting)
629 child = FakePictureLayer::Create(&client_);
630 else
631 child = FakeContentLayer::Create(&client_);
591 child->SetPosition(gfx::PointF(i, 0.f)); 632 child->SetPosition(gfx::PointF(i, 0.f));
592 child->SetBounds(gfx::Size(1, 1)); 633 child->SetBounds(gfx::Size(1, 1));
593 parent_->AddChild(child); 634 parent_->AddChild(child);
594 } 635 }
595 636
596 layer_tree_host()->SetRootLayer(parent_); 637 layer_tree_host()->SetRootLayer(parent_);
597 LayerTreeHostContextTest::SetupTree(); 638 LayerTreeHostContextTest::SetupTree();
598 } 639 }
599 640
600 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 641 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
601 642
602 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 643 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
603 EXPECT_EQ(0, times_to_lose_on_end_query_); 644 EXPECT_EQ(0, times_to_lose_on_end_query_);
604 EndTest(); 645 EndTest();
605 } 646 }
606 647
607 virtual void AfterTest() OVERRIDE { 648 virtual void AfterTest() OVERRIDE {
608 EXPECT_EQ(0, times_to_lose_on_end_query_); 649 EXPECT_EQ(0, times_to_lose_on_end_query_);
609 } 650 }
610 651
611 private: 652 private:
612 FakeContentLayerClient client_; 653 FakeContentLayerClient client_;
613 scoped_refptr<FakeContentLayer> parent_; 654 scoped_refptr<Layer> parent_;
614 int num_children_; 655 int num_children_;
615 int times_to_lose_on_end_query_; 656 int times_to_lose_on_end_query_;
616 }; 657 };
617 658
618 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( 659 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(
619 LayerTreeHostContextTestLostContextWhileUpdatingResources); 660 LayerTreeHostContextTestLostContextWhileUpdatingResources);
620 661
621 class LayerTreeHostContextTestLayersNotified : public LayerTreeHostContextTest { 662 class LayerTreeHostContextTestLayersNotified : public LayerTreeHostContextTest {
622 public: 663 public:
623 LayerTreeHostContextTestLayersNotified() 664 LayerTreeHostContextTestLayersNotified()
624 : LayerTreeHostContextTest(), num_commits_(0) {} 665 : LayerTreeHostContextTest(), num_commits_(0) {}
625 666
626 virtual void SetupTree() OVERRIDE { 667 virtual void SetupTree() OVERRIDE {
627 root_ = FakeContentLayer::Create(&client_); 668 if (layer_tree_host()->settings().impl_side_painting) {
628 child_ = FakeContentLayer::Create(&client_); 669 root_ = FakePictureLayer::Create(&client_);
629 grandchild_ = FakeContentLayer::Create(&client_); 670 child_ = FakePictureLayer::Create(&client_);
671 grandchild_ = FakePictureLayer::Create(&client_);
672 } else {
673 root_ = FakeContentLayer::Create(&client_);
674 child_ = FakeContentLayer::Create(&client_);
675 grandchild_ = FakeContentLayer::Create(&client_);
676 }
630 677
631 root_->AddChild(child_); 678 root_->AddChild(child_);
632 child_->AddChild(grandchild_); 679 child_->AddChild(grandchild_);
633 680
634 layer_tree_host()->SetRootLayer(root_); 681 layer_tree_host()->SetRootLayer(root_);
635 LayerTreeHostContextTest::SetupTree(); 682 LayerTreeHostContextTest::SetupTree();
636 } 683 }
637 684
638 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 685 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
639 686
640 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 687 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
641 LayerTreeHostContextTest::DidActivateTreeOnThread(host_impl); 688 LayerTreeHostContextTest::DidActivateTreeOnThread(host_impl);
642 689
643 FakeContentLayerImpl* root = static_cast<FakeContentLayerImpl*>( 690 FakePictureLayerImpl* root_picture = NULL;
644 host_impl->active_tree()->root_layer()); 691 FakePictureLayerImpl* child_picture = NULL;
645 FakeContentLayerImpl* child = 692 FakePictureLayerImpl* grandchild_picture = NULL;
646 static_cast<FakeContentLayerImpl*>(root->children()[0]); 693 FakeContentLayerImpl* root_content = NULL;
647 FakeContentLayerImpl* grandchild = 694 FakeContentLayerImpl* child_content = NULL;
648 static_cast<FakeContentLayerImpl*>(child->children()[0]); 695 FakeContentLayerImpl* grandchild_content = NULL;
696
697 if (layer_tree_host()->settings().impl_side_painting) {
698 root_picture = static_cast<FakePictureLayerImpl*>(
699 host_impl->active_tree()->root_layer());
700 child_picture =
701 static_cast<FakePictureLayerImpl*>(root_picture->children()[0]);
702 grandchild_picture =
703 static_cast<FakePictureLayerImpl*>(child_picture->children()[0]);
704
705 } else {
706 root_content = static_cast<FakeContentLayerImpl*>(
707 host_impl->active_tree()->root_layer());
708 child_content =
709 static_cast<FakeContentLayerImpl*>(root_content->children()[0]);
710 grandchild_content =
711 static_cast<FakeContentLayerImpl*>(child_content->children()[0]);
712 }
649 713
650 ++num_commits_; 714 ++num_commits_;
651 switch (num_commits_) { 715 switch (num_commits_) {
652 case 1: 716 case 1:
653 EXPECT_EQ(0u, root->lost_output_surface_count()); 717 if (layer_tree_host()->settings().impl_side_painting) {
654 EXPECT_EQ(0u, child->lost_output_surface_count()); 718 EXPECT_EQ(0u, root_picture->release_resources_count());
655 EXPECT_EQ(0u, grandchild->lost_output_surface_count()); 719 EXPECT_EQ(0u, child_picture->release_resources_count());
720 EXPECT_EQ(0u, grandchild_picture->release_resources_count());
721 } else {
722 EXPECT_EQ(0u, root_content->lost_output_surface_count());
723 EXPECT_EQ(0u, child_content->lost_output_surface_count());
724 EXPECT_EQ(0u, grandchild_content->lost_output_surface_count());
725 }
726
656 // Lose the context and struggle to recreate it. 727 // Lose the context and struggle to recreate it.
657 LoseContext(); 728 LoseContext();
658 times_to_fail_create_ = 1; 729 times_to_fail_create_ = 1;
659 break; 730 break;
660 case 2: 731 case 2:
661 EXPECT_GE(1u, root->lost_output_surface_count()); 732 if (layer_tree_host()->settings().impl_side_painting) {
662 EXPECT_GE(1u, child->lost_output_surface_count()); 733 EXPECT_TRUE(root_picture->release_resources_count());
663 EXPECT_GE(1u, grandchild->lost_output_surface_count()); 734 EXPECT_TRUE(child_picture->release_resources_count());
735 EXPECT_TRUE(grandchild_picture->release_resources_count());
736 } else {
737 EXPECT_TRUE(root_content->lost_output_surface_count());
738 EXPECT_TRUE(child_content->lost_output_surface_count());
739 EXPECT_TRUE(grandchild_content->lost_output_surface_count());
740 }
741
664 EndTest(); 742 EndTest();
665 break; 743 break;
666 default: 744 default:
667 NOTREACHED(); 745 NOTREACHED();
668 } 746 }
669 } 747 }
670 748
671 virtual void AfterTest() OVERRIDE {} 749 virtual void AfterTest() OVERRIDE {}
672 750
673 private: 751 private:
674 int num_commits_; 752 int num_commits_;
675 753
676 FakeContentLayerClient client_; 754 FakeContentLayerClient client_;
677 scoped_refptr<FakeContentLayer> root_; 755 scoped_refptr<Layer> root_;
678 scoped_refptr<FakeContentLayer> child_; 756 scoped_refptr<Layer> child_;
679 scoped_refptr<FakeContentLayer> grandchild_; 757 scoped_refptr<Layer> grandchild_;
680 }; 758 };
681 759
682 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestLayersNotified); 760 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestLayersNotified);
683 761
684 class LayerTreeHostContextTestDontUseLostResources 762 class LayerTreeHostContextTestDontUseLostResources
685 : public LayerTreeHostContextTest { 763 : public LayerTreeHostContextTest {
686 public: 764 public:
687 LayerTreeHostContextTestDontUseLostResources() : lost_context_(false) { 765 LayerTreeHostContextTestDontUseLostResources() : lost_context_(false) {
688 context_should_support_io_surface_ = true; 766 context_should_support_io_surface_ = true;
689 767
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 scoped_refptr<Layer> root = Layer::Create(); 825 scoped_refptr<Layer> root = Layer::Create();
748 root->SetBounds(gfx::Size(10, 10)); 826 root->SetBounds(gfx::Size(10, 10));
749 root->SetIsDrawable(true); 827 root->SetIsDrawable(true);
750 828
751 scoped_refptr<FakeDelegatedRendererLayer> delegated = 829 scoped_refptr<FakeDelegatedRendererLayer> delegated =
752 FakeDelegatedRendererLayer::Create(delegated_frame_provider_.get()); 830 FakeDelegatedRendererLayer::Create(delegated_frame_provider_.get());
753 delegated->SetBounds(gfx::Size(10, 10)); 831 delegated->SetBounds(gfx::Size(10, 10));
754 delegated->SetIsDrawable(true); 832 delegated->SetIsDrawable(true);
755 root->AddChild(delegated); 833 root->AddChild(delegated);
756 834
757 scoped_refptr<ContentLayer> content = ContentLayer::Create(&client_); 835 scoped_refptr<Layer> layer;
758 content->SetBounds(gfx::Size(10, 10)); 836 if (layer_tree_host()->settings().impl_side_painting)
759 content->SetIsDrawable(true); 837 layer = PictureLayer::Create(&client_);
760 root->AddChild(content); 838 else
839 layer = ContentLayer::Create(&client_);
840 layer->SetBounds(gfx::Size(10, 10));
841 layer->SetIsDrawable(true);
842 root->AddChild(layer);
761 843
762 scoped_refptr<TextureLayer> texture = TextureLayer::CreateForMailbox(NULL); 844 scoped_refptr<TextureLayer> texture = TextureLayer::CreateForMailbox(NULL);
763 texture->SetBounds(gfx::Size(10, 10)); 845 texture->SetBounds(gfx::Size(10, 10));
764 texture->SetIsDrawable(true); 846 texture->SetIsDrawable(true);
765 texture->SetTextureMailbox( 847 texture->SetTextureMailbox(
766 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point), 848 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point),
767 SingleReleaseCallback::Create( 849 SingleReleaseCallback::Create(
768 base::Bind(&LayerTreeHostContextTestDontUseLostResources:: 850 base::Bind(&LayerTreeHostContextTestDontUseLostResources::
769 EmptyReleaseCallback))); 851 EmptyReleaseCallback)));
770 root->AddChild(texture); 852 root->AddChild(texture);
771 853
772 scoped_refptr<ContentLayer> mask = ContentLayer::Create(&client_); 854 scoped_refptr<Layer> mask;
855 if (layer_tree_host()->settings().impl_side_painting)
856 mask = PictureLayer::Create(&client_);
857 else
858 mask = ContentLayer::Create(&client_);
773 mask->SetBounds(gfx::Size(10, 10)); 859 mask->SetBounds(gfx::Size(10, 10));
774 860
775 scoped_refptr<ContentLayer> content_with_mask = 861 scoped_refptr<Layer> layer_with_mask;
776 ContentLayer::Create(&client_); 862 if (layer_tree_host()->settings().impl_side_painting)
777 content_with_mask->SetBounds(gfx::Size(10, 10)); 863 layer_with_mask = PictureLayer::Create(&client_);
778 content_with_mask->SetIsDrawable(true); 864 else
779 content_with_mask->SetMaskLayer(mask.get()); 865 layer_with_mask = ContentLayer::Create(&client_);
780 root->AddChild(content_with_mask); 866 layer_with_mask->SetBounds(gfx::Size(10, 10));
867 layer_with_mask->SetIsDrawable(true);
868 layer_with_mask->SetMaskLayer(mask.get());
869 root->AddChild(layer_with_mask);
781 870
782 scoped_refptr<VideoLayer> video_color = 871 scoped_refptr<VideoLayer> video_color =
783 VideoLayer::Create(&color_frame_provider_, media::VIDEO_ROTATION_0); 872 VideoLayer::Create(&color_frame_provider_, media::VIDEO_ROTATION_0);
784 video_color->SetBounds(gfx::Size(10, 10)); 873 video_color->SetBounds(gfx::Size(10, 10));
785 video_color->SetIsDrawable(true); 874 video_color->SetIsDrawable(true);
786 root->AddChild(video_color); 875 root->AddChild(video_color);
787 876
788 scoped_refptr<VideoLayer> video_hw = 877 scoped_refptr<VideoLayer> video_hw =
789 VideoLayer::Create(&hw_frame_provider_, media::VIDEO_ROTATION_0); 878 VideoLayer::Create(&hw_frame_provider_, media::VIDEO_ROTATION_0);
790 video_hw->SetBounds(gfx::Size(10, 10)); 879 video_hw->SetBounds(gfx::Size(10, 10));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 root->AddChild(io_surface); 920 root->AddChild(io_surface);
832 } 921 }
833 922
834 // Enable the hud. 923 // Enable the hud.
835 LayerTreeDebugState debug_state; 924 LayerTreeDebugState debug_state;
836 debug_state.show_property_changed_rects = true; 925 debug_state.show_property_changed_rects = true;
837 layer_tree_host()->SetDebugState(debug_state); 926 layer_tree_host()->SetDebugState(debug_state);
838 927
839 scoped_refptr<PaintedScrollbarLayer> scrollbar = 928 scoped_refptr<PaintedScrollbarLayer> scrollbar =
840 PaintedScrollbarLayer::Create( 929 PaintedScrollbarLayer::Create(
841 scoped_ptr<Scrollbar>(new FakeScrollbar).Pass(), content->id()); 930 scoped_ptr<Scrollbar>(new FakeScrollbar).Pass(), layer->id());
842 scrollbar->SetBounds(gfx::Size(10, 10)); 931 scrollbar->SetBounds(gfx::Size(10, 10));
843 scrollbar->SetIsDrawable(true); 932 scrollbar->SetIsDrawable(true);
844 root->AddChild(scrollbar); 933 root->AddChild(scrollbar);
845 934
846 layer_tree_host()->SetRootLayer(root); 935 layer_tree_host()->SetRootLayer(root);
847 LayerTreeHostContextTest::SetupTree(); 936 LayerTreeHostContextTest::SetupTree();
848 } 937 }
849 938
850 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 939 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
851 940
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 } 1493 }
1405 } 1494 }
1406 }; 1495 };
1407 1496
1408 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostEviction); 1497 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostEviction);
1409 1498
1410 class LayerTreeHostContextTestSurfaceCreateCallback 1499 class LayerTreeHostContextTestSurfaceCreateCallback
1411 : public LayerTreeHostContextTest { 1500 : public LayerTreeHostContextTest {
1412 public: 1501 public:
1413 LayerTreeHostContextTestSurfaceCreateCallback() 1502 LayerTreeHostContextTestSurfaceCreateCallback()
1414 : LayerTreeHostContextTest(), 1503 : LayerTreeHostContextTest() {}
1415 layer_(FakeContentLayer::Create(&client_)) {}
1416 1504
1417 virtual void SetupTree() OVERRIDE { 1505 virtual void SetupTree() OVERRIDE {
1418 layer_->SetBounds(gfx::Size(10, 20)); 1506 if (layer_tree_host()->settings().impl_side_painting) {
1419 layer_tree_host()->SetRootLayer(layer_); 1507 picture_layer_ = FakePictureLayer::Create(&client_);
1508 picture_layer_->SetBounds(gfx::Size(10, 20));
1509 layer_tree_host()->SetRootLayer(picture_layer_);
1510 } else {
1511 content_layer_ = FakeContentLayer::Create(&client_);
1512 content_layer_->SetBounds(gfx::Size(10, 20));
1513 layer_tree_host()->SetRootLayer(content_layer_);
1514 }
1515
1420 LayerTreeHostContextTest::SetupTree(); 1516 LayerTreeHostContextTest::SetupTree();
1421 } 1517 }
1422 1518
1423 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 1519 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
1424 1520
1425 virtual void DidCommit() OVERRIDE { 1521 virtual void DidCommit() OVERRIDE {
1426 switch (layer_tree_host()->source_frame_number()) { 1522 switch (layer_tree_host()->source_frame_number()) {
1427 case 1: 1523 case 1:
1428 EXPECT_EQ(1u, layer_->output_surface_created_count()); 1524 if (layer_tree_host()->settings().impl_side_painting)
1525 EXPECT_EQ(1u, picture_layer_->output_surface_created_count());
1526 else
1527 EXPECT_EQ(1u, content_layer_->output_surface_created_count());
1429 layer_tree_host()->SetNeedsCommit(); 1528 layer_tree_host()->SetNeedsCommit();
1430 break; 1529 break;
1431 case 2: 1530 case 2:
1432 EXPECT_EQ(1u, layer_->output_surface_created_count()); 1531 if (layer_tree_host()->settings().impl_side_painting)
1532 EXPECT_EQ(1u, picture_layer_->output_surface_created_count());
1533 else
1534 EXPECT_EQ(1u, content_layer_->output_surface_created_count());
1433 layer_tree_host()->SetNeedsCommit(); 1535 layer_tree_host()->SetNeedsCommit();
1434 break; 1536 break;
1435 case 3: 1537 case 3:
1436 EXPECT_EQ(1u, layer_->output_surface_created_count()); 1538 if (layer_tree_host()->settings().impl_side_painting)
1539 EXPECT_EQ(1u, picture_layer_->output_surface_created_count());
1540 else
1541 EXPECT_EQ(1u, content_layer_->output_surface_created_count());
1437 break; 1542 break;
1438 case 4: 1543 case 4:
1439 EXPECT_EQ(2u, layer_->output_surface_created_count()); 1544 if (layer_tree_host()->settings().impl_side_painting)
1545 EXPECT_EQ(2u, picture_layer_->output_surface_created_count());
1546 else
1547 EXPECT_EQ(2u, content_layer_->output_surface_created_count());
1440 layer_tree_host()->SetNeedsCommit(); 1548 layer_tree_host()->SetNeedsCommit();
1441 break; 1549 break;
1442 } 1550 }
1443 } 1551 }
1444 1552
1445 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { 1553 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1446 LayerTreeHostContextTest::CommitCompleteOnThread(impl); 1554 LayerTreeHostContextTest::CommitCompleteOnThread(impl);
1447 switch (LastCommittedSourceFrameNumber(impl)) { 1555 switch (LastCommittedSourceFrameNumber(impl)) {
1448 case 0: 1556 case 0:
1449 break; 1557 break;
1450 case 1: 1558 case 1:
1451 break; 1559 break;
1452 case 2: 1560 case 2:
1453 LoseContext(); 1561 LoseContext();
1454 break; 1562 break;
1455 case 3: 1563 case 3:
1456 EndTest(); 1564 EndTest();
1457 break; 1565 break;
1458 } 1566 }
1459 } 1567 }
1460 1568
1461 virtual void AfterTest() OVERRIDE {} 1569 virtual void AfterTest() OVERRIDE {}
1462 1570
1463 protected: 1571 protected:
1464 FakeContentLayerClient client_; 1572 FakeContentLayerClient client_;
1465 scoped_refptr<FakeContentLayer> layer_; 1573 scoped_refptr<FakePictureLayer> picture_layer_;
1574 scoped_refptr<FakeContentLayer> content_layer_;
1466 }; 1575 };
1467 1576
1468 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback); 1577 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback);
1469 1578
1470 class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame 1579 class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame
1471 : public LayerTreeHostContextTest { 1580 : public LayerTreeHostContextTest {
1472 protected: 1581 protected:
1473 virtual void BeginTest() OVERRIDE { 1582 virtual void BeginTest() OVERRIDE {
1474 deferred_ = false; 1583 deferred_ = false;
1475 PostSetNeedsCommitToMainThread(); 1584 PostSetNeedsCommitToMainThread();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 virtual void AfterTest() OVERRIDE {} 1630 virtual void AfterTest() OVERRIDE {}
1522 1631
1523 bool deferred_; 1632 bool deferred_;
1524 }; 1633 };
1525 1634
1526 SINGLE_AND_MULTI_THREAD_TEST_F( 1635 SINGLE_AND_MULTI_THREAD_TEST_F(
1527 LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); 1636 LayerTreeHostContextTestLoseAfterSendingBeginMainFrame);
1528 1637
1529 } // namespace 1638 } // namespace
1530 } // namespace cc 1639 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698