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

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

Issue 1028333002: Chromium -> Mojo roll. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 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') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 #include "ui/gfx/geometry/vector2d_conversions.h" 61 #include "ui/gfx/geometry/vector2d_conversions.h"
62 62
63 using testing::_; 63 using testing::_;
64 using testing::AnyNumber; 64 using testing::AnyNumber;
65 using testing::AtLeast; 65 using testing::AtLeast;
66 using testing::Mock; 66 using testing::Mock;
67 67
68 namespace cc { 68 namespace cc {
69 namespace { 69 namespace {
70 70
71 class LayerTreeHostTest : public LayerTreeTest {}; 71 class LayerTreeHostTest : public LayerTreeTest {
72 public:
73 LayerTreeHostTest() : contents_texture_manager_(nullptr) {}
74
75 void DidInitializeOutputSurface() override {
76 contents_texture_manager_ = layer_tree_host()->contents_texture_manager();
77 }
78
79 protected:
80 PrioritizedResourceManager* contents_texture_manager_;
81 };
72 82
73 // Test if the LTHI receives ReadyToActivate notifications from the TileManager 83 // Test if the LTHI receives ReadyToActivate notifications from the TileManager
74 // when no raster tasks get scheduled. 84 // when no raster tasks get scheduled.
75 class LayerTreeHostTestReadyToActivateEmpty : public LayerTreeHostTest { 85 class LayerTreeHostTestReadyToActivateEmpty : public LayerTreeHostTest {
76 public: 86 public:
77 LayerTreeHostTestReadyToActivateEmpty() 87 LayerTreeHostTestReadyToActivateEmpty()
78 : did_notify_ready_to_activate_(false), 88 : did_notify_ready_to_activate_(false),
79 all_tiles_required_for_activation_are_ready_to_draw_(false), 89 all_tiles_required_for_activation_are_ready_to_draw_(false),
80 required_for_activation_count_(0) {} 90 required_for_activation_count_(0) {}
81 91
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 private: 476 private:
467 int num_draws_; 477 int num_draws_;
468 const gfx::Size bounds_; 478 const gfx::Size bounds_;
469 const gfx::Rect invalid_rect_; 479 const gfx::Rect invalid_rect_;
470 FakeContentLayerClient client_; 480 FakeContentLayerClient client_;
471 scoped_refptr<Layer> root_layer_; 481 scoped_refptr<Layer> root_layer_;
472 }; 482 };
473 483
474 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedrawRect); 484 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedrawRect);
475 485
486 // Ensure the texture size of the pending and active trees are identical when a
487 // layer is not in the viewport and a resize happens on the viewport
488 class LayerTreeHostTestGpuRasterDeviceSizeChanged : public LayerTreeHostTest {
489 public:
490 LayerTreeHostTestGpuRasterDeviceSizeChanged()
491 : num_draws_(0), bounds_(500, 64), invalid_rect_(10, 10, 20, 20) {}
492
493 void BeginTest() override {
494 client_.set_fill_with_nonsolid_color(true);
495 root_layer_ = FakePictureLayer::Create(&client_);
496 root_layer_->SetIsDrawable(true);
497 gfx::Transform transform;
498 // Translate the layer out of the viewport to force it to not update its
499 // tile size via PushProperties.
500 transform.Translate(10000.0, 10000.0);
501 root_layer_->SetTransform(transform);
502 root_layer_->SetBounds(bounds_);
503 layer_tree_host()->SetRootLayer(root_layer_);
504 layer_tree_host()->SetViewportSize(bounds_);
505
506 PostSetNeedsCommitToMainThread();
507 }
508
509 void InitializeSettings(LayerTreeSettings* settings) override {
510 settings->gpu_rasterization_enabled = true;
511 settings->gpu_rasterization_forced = true;
512 }
513
514 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
515 // Perform 2 commits.
516 if (!num_draws_) {
517 PostSetNeedsRedrawRectToMainThread(invalid_rect_);
518 } else {
519 EndTest();
520 }
521 num_draws_++;
522 }
523
524 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
525 if (num_draws_ == 2) {
526 auto pending_tree = host_impl->pending_tree();
527 auto pending_layer_impl =
528 static_cast<FakePictureLayerImpl*>(pending_tree->root_layer());
529 EXPECT_NE(pending_layer_impl, nullptr);
530
531 auto active_tree = host_impl->pending_tree();
532 auto active_layer_impl =
533 static_cast<FakePictureLayerImpl*>(active_tree->root_layer());
534 EXPECT_NE(pending_layer_impl, nullptr);
535
536 auto active_tiling_set = active_layer_impl->picture_layer_tiling_set();
537 auto active_tiling = active_tiling_set->tiling_at(0);
538 auto pending_tiling_set = pending_layer_impl->picture_layer_tiling_set();
539 auto pending_tiling = pending_tiling_set->tiling_at(0);
540 EXPECT_EQ(
541 pending_tiling->TilingDataForTesting().max_texture_size().width(),
542 active_tiling->TilingDataForTesting().max_texture_size().width());
543 }
544 }
545
546 void DidCommitAndDrawFrame() override {
547 // On the second commit, resize the viewport.
548 if (num_draws_ == 1) {
549 layer_tree_host()->SetViewportSize(gfx::Size(400, 64));
550 }
551 }
552
553 void AfterTest() override {}
554
555 private:
556 int num_draws_;
557 const gfx::Size bounds_;
558 const gfx::Rect invalid_rect_;
559 FakeContentLayerClient client_;
560 scoped_refptr<FakePictureLayer> root_layer_;
561 };
562
563 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(
564 LayerTreeHostTestGpuRasterDeviceSizeChanged);
565
476 class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest { 566 class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest {
477 public: 567 public:
478 void InitializeSettings(LayerTreeSettings* settings) override { 568 void InitializeSettings(LayerTreeSettings* settings) override {
479 settings->layer_transforms_should_scale_layer_contents = true; 569 settings->layer_transforms_should_scale_layer_contents = true;
480 } 570 }
481 571
482 void SetupTree() override { 572 void SetupTree() override {
483 root_layer_ = Layer::Create(); 573 root_layer_ = Layer::Create();
484 root_layer_->SetBounds(gfx::Size(10, 20)); 574 root_layer_->SetBounds(gfx::Size(10, 20));
485 root_layer_->CreateRenderSurface(); 575 root_layer_->CreateRenderSurface();
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 775
686 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( 776 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F(
687 LayerTreeHostTestSetNextCommitForcesRedraw); 777 LayerTreeHostTestSetNextCommitForcesRedraw);
688 778
689 // Tests that if a layer is not drawn because of some reason in the parent then 779 // Tests that if a layer is not drawn because of some reason in the parent then
690 // its damage is preserved until the next time it is drawn. 780 // its damage is preserved until the next time it is drawn.
691 class LayerTreeHostTestUndrawnLayersDamageLater : public LayerTreeHostTest { 781 class LayerTreeHostTestUndrawnLayersDamageLater : public LayerTreeHostTest {
692 public: 782 public:
693 LayerTreeHostTestUndrawnLayersDamageLater() {} 783 LayerTreeHostTestUndrawnLayersDamageLater() {}
694 784
785 void InitializeSettings(LayerTreeSettings* settings) override {
786 // If we don't set the minimum contents scale, it's harder to verify whether
787 // the damage we get is correct. For other scale amounts, please see
788 // LayerTreeHostTestDamageWithScale.
789 settings->minimum_contents_scale = 1.f;
790 }
791
695 void SetupTree() override { 792 void SetupTree() override {
696 if (layer_tree_host()->settings().impl_side_painting) 793 if (layer_tree_host()->settings().impl_side_painting)
697 root_layer_ = FakePictureLayer::Create(&client_); 794 root_layer_ = FakePictureLayer::Create(&client_);
698 else 795 else
699 root_layer_ = ContentLayer::Create(&client_); 796 root_layer_ = ContentLayer::Create(&client_);
700 root_layer_->SetIsDrawable(true); 797 root_layer_->SetIsDrawable(true);
701 root_layer_->SetBounds(gfx::Size(50, 50)); 798 root_layer_->SetBounds(gfx::Size(50, 50));
702 layer_tree_host()->SetRootLayer(root_layer_); 799 layer_tree_host()->SetRootLayer(root_layer_);
703 800
704 // The initially transparent layer has a larger child layer, which is 801 // The initially transparent layer has a larger child layer, which is
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 876
780 private: 877 private:
781 FakeContentLayerClient client_; 878 FakeContentLayerClient client_;
782 scoped_refptr<Layer> root_layer_; 879 scoped_refptr<Layer> root_layer_;
783 scoped_refptr<Layer> parent_layer_; 880 scoped_refptr<Layer> parent_layer_;
784 scoped_refptr<Layer> child_layer_; 881 scoped_refptr<Layer> child_layer_;
785 }; 882 };
786 883
787 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestUndrawnLayersDamageLater); 884 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestUndrawnLayersDamageLater);
788 885
886 // Tests that if a layer is not drawn because of some reason in the parent then
887 // its damage is preserved until the next time it is drawn.
888 class LayerTreeHostTestDamageWithScale : public LayerTreeHostTest {
889 public:
890 LayerTreeHostTestDamageWithScale() {}
891
892 void SetupTree() override {
893 client_.set_fill_with_nonsolid_color(true);
894
895 scoped_ptr<FakePicturePile> pile(
896 new FakePicturePile(ImplSidePaintingSettings().minimum_contents_scale,
897 ImplSidePaintingSettings().default_tile_grid_size));
898 root_layer_ =
899 FakePictureLayer::CreateWithRecordingSource(&client_, pile.Pass());
900 root_layer_->SetBounds(gfx::Size(50, 50));
901
902 pile.reset(
903 new FakePicturePile(ImplSidePaintingSettings().minimum_contents_scale,
904 ImplSidePaintingSettings().default_tile_grid_size));
905 child_layer_ =
906 FakePictureLayer::CreateWithRecordingSource(&client_, pile.Pass());
907 child_layer_->SetBounds(gfx::Size(25, 25));
908 child_layer_->SetIsDrawable(true);
909 child_layer_->SetContentsOpaque(true);
910 root_layer_->AddChild(child_layer_);
911
912 layer_tree_host()->SetRootLayer(root_layer_);
913 LayerTreeHostTest::SetupTree();
914 }
915
916 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
917 // Force the layer to have a tiling at 1.3f scale. Note that if we simply
918 // add tiling, it will be gone by the time we draw because of aggressive
919 // cleanup. AddTilingUntilNextDraw ensures that it remains there during
920 // damage calculation.
921 FakePictureLayerImpl* child_layer_impl = static_cast<FakePictureLayerImpl*>(
922 host_impl->active_tree()->LayerById(child_layer_->id()));
923 child_layer_impl->AddTilingUntilNextDraw(1.3f);
924 }
925
926 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
927
928 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
929 LayerTreeHostImpl::FrameData* frame_data,
930 DrawResult draw_result) override {
931 EXPECT_EQ(DRAW_SUCCESS, draw_result);
932
933 gfx::RectF root_damage_rect;
934 if (!frame_data->render_passes.empty())
935 root_damage_rect = frame_data->render_passes.back()->damage_rect;
936
937 // The first time, the whole view needs be drawn.
938 // Afterwards, just the opacity of surface_layer1 is changed a few times,
939 // and each damage should be the bounding box of it and its child. If this
940 // was working improperly, the damage might not include its childs bounding
941 // box.
942 switch (host_impl->active_tree()->source_frame_number()) {
943 case 0:
944 EXPECT_EQ(gfx::Rect(root_layer_->bounds()), root_damage_rect);
945 break;
946 case 1: {
947 FakePictureLayerImpl* child_layer_impl =
948 static_cast<FakePictureLayerImpl*>(
949 host_impl->active_tree()->LayerById(child_layer_->id()));
950 // We remove tilings pretty aggressively if they are not ideal. Add this
951 // back in so that we can compare
952 // child_layer_impl->GetEnclosingRectInTargetSpace to the damage.
953 child_layer_impl->AddTilingUntilNextDraw(1.3f);
954
955 EXPECT_EQ(gfx::Rect(26, 26), root_damage_rect);
956 EXPECT_EQ(child_layer_impl->GetEnclosingRectInTargetSpace(),
957 root_damage_rect);
958 EXPECT_TRUE(child_layer_impl->GetEnclosingRectInTargetSpace().Contains(
959 gfx::Rect(child_layer_->bounds())));
960 break;
961 }
962 default:
963 NOTREACHED();
964 }
965
966 return draw_result;
967 }
968
969 void DidCommitAndDrawFrame() override {
970 switch (layer_tree_host()->source_frame_number()) {
971 case 1: {
972 // Test not owning the surface.
973 child_layer_->SetOpacity(0.5f);
974 break;
975 }
976 case 2:
977 EndTest();
978 break;
979 default:
980 NOTREACHED();
981 }
982 }
983
984 void AfterTest() override {}
985
986 private:
987 FakeContentLayerClient client_;
988 scoped_refptr<Layer> root_layer_;
989 scoped_refptr<Layer> child_layer_;
990 };
991
992 MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestDamageWithScale);
993
789 // Tests that if a layer is not drawn because of some reason in the parent, 994 // Tests that if a layer is not drawn because of some reason in the parent,
790 // causing its content bounds to not be computed, then when it is later drawn, 995 // causing its content bounds to not be computed, then when it is later drawn,
791 // its content bounds get pushed. 996 // its content bounds get pushed.
792 class LayerTreeHostTestUndrawnLayersPushContentBoundsLater 997 class LayerTreeHostTestUndrawnLayersPushContentBoundsLater
793 : public LayerTreeHostTest { 998 : public LayerTreeHostTest {
794 public: 999 public:
795 LayerTreeHostTestUndrawnLayersPushContentBoundsLater() 1000 LayerTreeHostTestUndrawnLayersPushContentBoundsLater()
796 : root_layer_(Layer::Create()) {} 1001 : root_layer_(Layer::Create()) {}
797 1002
798 void SetupTree() override { 1003 void SetupTree() override {
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 layer_tree_host()->SetRootLayer(layer_); 1544 layer_tree_host()->SetRootLayer(layer_);
1340 LayerTreeHostTest::SetupTree(); 1545 LayerTreeHostTest::SetupTree();
1341 } 1546 }
1342 1547
1343 void BeginTest() override { 1548 void BeginTest() override {
1344 drew_frame_ = -1; 1549 drew_frame_ = -1;
1345 PostSetNeedsCommitToMainThread(); 1550 PostSetNeedsCommitToMainThread();
1346 } 1551 }
1347 1552
1348 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { 1553 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
1349 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); 1554 ASSERT_EQ(0u, impl->settings().max_partial_texture_updates);
1350 1555
1351 TestWebGraphicsContext3D* context = TestContext(); 1556 TestWebGraphicsContext3D* context = TestContext();
1352 1557
1353 switch (impl->active_tree()->source_frame_number()) { 1558 switch (impl->active_tree()->source_frame_number()) {
1354 case 0: 1559 case 0:
1355 // Number of textures should be one for each layer 1560 // Number of textures should be one for each layer
1356 ASSERT_EQ(2u, context->NumTextures()); 1561 ASSERT_EQ(2u, context->NumTextures());
1357 // Number of textures used for commit should be one for each layer. 1562 // Number of textures used for commit should be one for each layer.
1358 EXPECT_EQ(2u, context->NumUsedTextures()); 1563 EXPECT_EQ(2u, context->NumUsedTextures());
1359 // Verify that used texture is correct. 1564 // Verify that used texture is correct.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 }; 1623 };
1419 1624
1420 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F( 1625 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(
1421 LayerTreeHostTestDirectRendererAtomicCommit); 1626 LayerTreeHostTestDirectRendererAtomicCommit);
1422 1627
1423 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere. 1628 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere.
1424 class LayerTreeHostTestDelegatingRendererAtomicCommit 1629 class LayerTreeHostTestDelegatingRendererAtomicCommit
1425 : public LayerTreeHostTestDirectRendererAtomicCommit { 1630 : public LayerTreeHostTestDirectRendererAtomicCommit {
1426 public: 1631 public:
1427 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { 1632 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
1428 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); 1633 ASSERT_EQ(0u, impl->settings().max_partial_texture_updates);
1429 1634
1430 TestWebGraphicsContext3D* context = TestContext(); 1635 TestWebGraphicsContext3D* context = TestContext();
1431 1636
1432 switch (impl->active_tree()->source_frame_number()) { 1637 switch (impl->active_tree()->source_frame_number()) {
1433 case 0: 1638 case 0:
1434 // Number of textures should be one for each layer 1639 // Number of textures should be one for each layer
1435 ASSERT_EQ(2u, context->NumTextures()); 1640 ASSERT_EQ(2u, context->NumTextures());
1436 // Number of textures used for commit should be one for each layer. 1641 // Number of textures used for commit should be one for each layer.
1437 EXPECT_EQ(2u, context->NumUsedTextures()); 1642 EXPECT_EQ(2u, context->NumUsedTextures());
1438 // Verify that used texture is correct. 1643 // Verify that used texture is correct.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 case 5: 1740 case 5:
1536 EndTest(); 1741 EndTest();
1537 break; 1742 break;
1538 default: 1743 default:
1539 NOTREACHED() << layer_tree_host()->source_frame_number(); 1744 NOTREACHED() << layer_tree_host()->source_frame_number();
1540 break; 1745 break;
1541 } 1746 }
1542 } 1747 }
1543 1748
1544 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { 1749 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
1545 ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates); 1750 ASSERT_EQ(1u, impl->settings().max_partial_texture_updates);
1546 1751
1547 TestWebGraphicsContext3D* context = TestContext(); 1752 TestWebGraphicsContext3D* context = TestContext();
1548 1753
1549 switch (impl->active_tree()->source_frame_number()) { 1754 switch (impl->active_tree()->source_frame_number()) {
1550 case 0: 1755 case 0:
1551 // Number of textures should be one for each layer. 1756 // Number of textures should be one for each layer.
1552 ASSERT_EQ(2u, context->NumTextures()); 1757 ASSERT_EQ(2u, context->NumTextures());
1553 // Number of textures used for commit should be one for each layer. 1758 // Number of textures used for commit should be one for each layer.
1554 EXPECT_EQ(2u, context->NumUsedTextures()); 1759 EXPECT_EQ(2u, context->NumUsedTextures());
1555 // Verify that used textures are correct. 1760 // Verify that used textures are correct.
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 int num_send_begin_main_frame_; 2280 int num_send_begin_main_frame_;
2076 }; 2281 };
2077 2282
2078 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits); 2283 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits);
2079 2284
2080 class LayerTreeHostWithProxy : public LayerTreeHost { 2285 class LayerTreeHostWithProxy : public LayerTreeHost {
2081 public: 2286 public:
2082 LayerTreeHostWithProxy(FakeLayerTreeHostClient* client, 2287 LayerTreeHostWithProxy(FakeLayerTreeHostClient* client,
2083 const LayerTreeSettings& settings, 2288 const LayerTreeSettings& settings,
2084 scoped_ptr<FakeProxy> proxy) 2289 scoped_ptr<FakeProxy> proxy)
2085 : LayerTreeHost(client, NULL, NULL, settings) { 2290 : LayerTreeHost(client, NULL, NULL, NULL, settings) {
2086 proxy->SetLayerTreeHost(this); 2291 proxy->SetLayerTreeHost(this);
2087 client->SetLayerTreeHost(this); 2292 client->SetLayerTreeHost(this);
2088 InitializeForTesting(proxy.Pass()); 2293 InitializeForTesting(proxy.Pass());
2089 } 2294 }
2090 }; 2295 };
2091 2296
2092 TEST(LayerTreeHostTest, LimitPartialUpdates) { 2297 TEST(LayerTreeHostTest, LimitPartialUpdates) {
2093 // When partial updates are not allowed, max updates should be 0. 2298 // When partial updates are not allowed, max updates should be 0.
2094 { 2299 {
2095 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 2300 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2147 TEST(LayerTreeHostTest, PartialUpdatesWithGLRenderer) { 2352 TEST(LayerTreeHostTest, PartialUpdatesWithGLRenderer) {
2148 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 2353 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D);
2149 2354
2150 LayerTreeSettings settings; 2355 LayerTreeSettings settings;
2151 settings.max_partial_texture_updates = 4; 2356 settings.max_partial_texture_updates = 4;
2152 settings.single_thread_proxy_scheduler = false; 2357 settings.single_thread_proxy_scheduler = false;
2153 settings.impl_side_painting = false; 2358 settings.impl_side_painting = false;
2154 2359
2155 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 2360 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
2156 new TestSharedBitmapManager()); 2361 new TestSharedBitmapManager());
2157 scoped_ptr<LayerTreeHost> host = 2362 scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
2158 LayerTreeHost::CreateSingleThreaded(&client, 2363 &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
2159 &client, 2364 base::MessageLoopProxy::current(), nullptr);
2160 shared_bitmap_manager.get(),
2161 NULL,
2162 settings,
2163 base::MessageLoopProxy::current(),
2164 nullptr);
2165 client.SetLayerTreeHost(host.get()); 2365 client.SetLayerTreeHost(host.get());
2166 host->Composite(base::TimeTicks::Now()); 2366 host->Composite(base::TimeTicks::Now());
2167 2367
2168 EXPECT_EQ(4u, host->settings().max_partial_texture_updates); 2368 EXPECT_EQ(4u, host->settings().max_partial_texture_updates);
2169 } 2369 }
2170 2370
2171 TEST(LayerTreeHostTest, PartialUpdatesWithSoftwareRenderer) { 2371 TEST(LayerTreeHostTest, PartialUpdatesWithSoftwareRenderer) {
2172 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_SOFTWARE); 2372 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_SOFTWARE);
2173 2373
2174 LayerTreeSettings settings; 2374 LayerTreeSettings settings;
2175 settings.max_partial_texture_updates = 4; 2375 settings.max_partial_texture_updates = 4;
2176 settings.single_thread_proxy_scheduler = false; 2376 settings.single_thread_proxy_scheduler = false;
2177 settings.impl_side_painting = false; 2377 settings.impl_side_painting = false;
2178 2378
2179 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 2379 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
2180 new TestSharedBitmapManager()); 2380 new TestSharedBitmapManager());
2181 scoped_ptr<LayerTreeHost> host = 2381 scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
2182 LayerTreeHost::CreateSingleThreaded(&client, 2382 &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
2183 &client, 2383 base::MessageLoopProxy::current(), nullptr);
2184 shared_bitmap_manager.get(),
2185 NULL,
2186 settings,
2187 base::MessageLoopProxy::current(),
2188 nullptr);
2189 client.SetLayerTreeHost(host.get()); 2384 client.SetLayerTreeHost(host.get());
2190 host->Composite(base::TimeTicks::Now()); 2385 host->Composite(base::TimeTicks::Now());
2191 2386
2192 EXPECT_EQ(4u, host->settings().max_partial_texture_updates); 2387 EXPECT_EQ(4u, host->settings().max_partial_texture_updates);
2193 } 2388 }
2194 2389
2195 TEST(LayerTreeHostTest, PartialUpdatesWithDelegatingRendererAndGLContent) { 2390 TEST(LayerTreeHostTest, PartialUpdatesWithDelegatingRendererAndGLContent) {
2196 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_3D); 2391 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_3D);
2197 2392
2198 LayerTreeSettings settings; 2393 LayerTreeSettings settings;
2199 settings.max_partial_texture_updates = 4; 2394 settings.max_partial_texture_updates = 4;
2200 settings.single_thread_proxy_scheduler = false; 2395 settings.single_thread_proxy_scheduler = false;
2201 settings.impl_side_painting = false; 2396 settings.impl_side_painting = false;
2202 2397
2203 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 2398 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
2204 new TestSharedBitmapManager()); 2399 new TestSharedBitmapManager());
2205 scoped_ptr<LayerTreeHost> host = 2400 scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
2206 LayerTreeHost::CreateSingleThreaded(&client, 2401 &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
2207 &client, 2402 base::MessageLoopProxy::current(), nullptr);
2208 shared_bitmap_manager.get(),
2209 NULL,
2210 settings,
2211 base::MessageLoopProxy::current(),
2212 nullptr);
2213 client.SetLayerTreeHost(host.get()); 2403 client.SetLayerTreeHost(host.get());
2214 host->Composite(base::TimeTicks::Now()); 2404 host->Composite(base::TimeTicks::Now());
2215 2405
2216 EXPECT_EQ(0u, host->MaxPartialTextureUpdates()); 2406 EXPECT_EQ(0u, host->MaxPartialTextureUpdates());
2217 } 2407 }
2218 2408
2219 TEST(LayerTreeHostTest, 2409 TEST(LayerTreeHostTest,
2220 PartialUpdatesWithDelegatingRendererAndSoftwareContent) { 2410 PartialUpdatesWithDelegatingRendererAndSoftwareContent) {
2221 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_SOFTWARE); 2411 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_SOFTWARE);
2222 2412
2223 LayerTreeSettings settings; 2413 LayerTreeSettings settings;
2224 settings.max_partial_texture_updates = 4; 2414 settings.max_partial_texture_updates = 4;
2225 settings.single_thread_proxy_scheduler = false; 2415 settings.single_thread_proxy_scheduler = false;
2226 settings.impl_side_painting = false; 2416 settings.impl_side_painting = false;
2227 2417
2228 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 2418 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
2229 new TestSharedBitmapManager()); 2419 new TestSharedBitmapManager());
2230 scoped_ptr<LayerTreeHost> host = 2420 scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
2231 LayerTreeHost::CreateSingleThreaded(&client, 2421 &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
2232 &client, 2422 base::MessageLoopProxy::current(), nullptr);
2233 shared_bitmap_manager.get(),
2234 NULL,
2235 settings,
2236 base::MessageLoopProxy::current(),
2237 nullptr);
2238 client.SetLayerTreeHost(host.get()); 2423 client.SetLayerTreeHost(host.get());
2239 host->Composite(base::TimeTicks::Now()); 2424 host->Composite(base::TimeTicks::Now());
2240 2425
2241 EXPECT_EQ(0u, host->MaxPartialTextureUpdates()); 2426 EXPECT_EQ(0u, host->MaxPartialTextureUpdates());
2242 } 2427 }
2243 2428
2244 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere. 2429 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere.
2245 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted 2430 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted
2246 : public LayerTreeHostTest { 2431 : public LayerTreeHostTest {
2247 public: 2432 public:
(...skipping 11 matching lines...) Expand all
2259 root_layer_->AddChild(child_layer1_); 2444 root_layer_->AddChild(child_layer1_);
2260 root_layer_->AddChild(child_layer2_); 2445 root_layer_->AddChild(child_layer2_);
2261 layer_tree_host()->SetRootLayer(root_layer_); 2446 layer_tree_host()->SetRootLayer(root_layer_);
2262 PostSetNeedsCommitToMainThread(); 2447 PostSetNeedsCommitToMainThread();
2263 } 2448 }
2264 2449
2265 void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, 2450 void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
2266 bool visible) override { 2451 bool visible) override {
2267 if (visible) { 2452 if (visible) {
2268 // One backing should remain unevicted. 2453 // One backing should remain unevicted.
2269 EXPECT_EQ( 2454 EXPECT_EQ(100u * 100u * 4u * 1u,
2270 100u * 100u * 4u * 1u, 2455 contents_texture_manager_->MemoryUseBytes());
2271 layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
2272 } else { 2456 } else {
2273 EXPECT_EQ( 2457 EXPECT_EQ(0u, contents_texture_manager_->MemoryUseBytes());
2274 0u, layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
2275 } 2458 }
2276 2459
2277 // Make sure that contents textures are marked as having been 2460 // Make sure that contents textures are marked as having been
2278 // purged. 2461 // purged.
2279 EXPECT_TRUE(host_impl->active_tree()->ContentsTexturesPurged()); 2462 EXPECT_TRUE(host_impl->active_tree()->ContentsTexturesPurged());
2280 // End the test in this state. 2463 // End the test in this state.
2281 EndTest(); 2464 EndTest();
2282 } 2465 }
2283 2466
2284 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { 2467 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
2285 ++num_commits_; 2468 ++num_commits_;
2286 switch (num_commits_) { 2469 switch (num_commits_) {
2287 case 1: 2470 case 1:
2288 // All three backings should have memory. 2471 // All three backings should have memory.
2289 EXPECT_EQ( 2472 EXPECT_EQ(100u * 100u * 4u * 3u,
2290 100u * 100u * 4u * 3u, 2473 contents_texture_manager_->MemoryUseBytes());
2291 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); 2474
2292 // Set a new policy that will kick out 1 of the 3 resources. 2475 // Set a new policy that will kick out 1 of the 3 resources.
2293 // Because a resource was evicted, a commit will be kicked off. 2476 // Because a resource was evicted, a commit will be kicked off.
2294 host_impl->SetMemoryPolicy( 2477 host_impl->SetMemoryPolicy(
2295 ManagedMemoryPolicy(100 * 100 * 4 * 2, 2478 ManagedMemoryPolicy(100 * 100 * 4 * 2,
2296 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, 2479 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING,
2297 1000)); 2480 1000));
2298 break; 2481 break;
2299 case 2: 2482 case 2:
2300 // Only two backings should have memory. 2483 // Only two backings should have memory.
2301 EXPECT_EQ( 2484 EXPECT_EQ(100u * 100u * 4u * 2u,
2302 100u * 100u * 4u * 2u, 2485 contents_texture_manager_->MemoryUseBytes());
2303 layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
2304 // Become backgrounded, which will cause 1 more resource to be 2486 // Become backgrounded, which will cause 1 more resource to be
2305 // evicted. 2487 // evicted.
2306 PostSetVisibleToMainThread(false); 2488 PostSetVisibleToMainThread(false);
2307 break; 2489 break;
2308 default: 2490 default:
2309 // No further commits should happen because this is not visible 2491 // No further commits should happen because this is not visible
2310 // anymore. 2492 // anymore.
2311 NOTREACHED(); 2493 NOTREACHED();
2312 break; 2494 break;
2313 } 2495 }
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after
3122 break; 3304 break;
3123 case 4: 3305 case 4:
3124 // Creation after deletion: two more creates should total up to 3306 // Creation after deletion: two more creates should total up to
3125 // three textures. 3307 // three textures.
3126 ASSERT_EQ(3u, context->NumTextures()); 3308 ASSERT_EQ(3u, context->NumTextures());
3127 break; 3309 break;
3128 } 3310 }
3129 } 3311 }
3130 3312
3131 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { 3313 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
3132 if (!layer_tree_host()->settings().impl_side_painting) 3314 if (!impl->settings().impl_side_painting)
3133 PerformTest(impl); 3315 PerformTest(impl);
3134 } 3316 }
3135 3317
3136 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { 3318 void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
3137 if (layer_tree_host()->settings().impl_side_painting) 3319 if (impl->settings().impl_side_painting)
3138 PerformTest(impl); 3320 PerformTest(impl);
3139 } 3321 }
3140 3322
3141 void AfterTest() override {} 3323 void AfterTest() override {}
3142 3324
3143 private: 3325 private:
3144 // Must clear all resources before exiting. 3326 // Must clear all resources before exiting.
3145 void ClearResources() { 3327 void ClearResources() {
3146 for (int i = 0; i < num_ui_resources_; i++) 3328 for (int i = 0; i < num_ui_resources_; i++)
3147 ui_resources_[i] = nullptr; 3329 ui_resources_[i] = nullptr;
(...skipping 3270 matching lines...) Expand 10 before | Expand all | Expand 10 after
6418 6600
6419 void AfterTest() override {} 6601 void AfterTest() override {}
6420 6602
6421 private: 6603 private:
6422 scoped_refptr<Layer> child_; 6604 scoped_refptr<Layer> child_;
6423 }; 6605 };
6424 6606
6425 SINGLE_AND_MULTI_THREAD_TEST_F(LayerPreserveRenderSurfaceFromOutputRequests); 6607 SINGLE_AND_MULTI_THREAD_TEST_F(LayerPreserveRenderSurfaceFromOutputRequests);
6426 6608
6427 } // namespace cc 6609 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698