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

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

Issue 2445553002: cc: Make OutputSurface entirely live on one thread in tests. (Closed)
Patch Set: osonthread: fixcontextdeleteintest Created 4 years, 1 month 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_unittest.cc ('k') | content/test/layouttest_support.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 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 EXPECT_TRUE(layer_tree_host()->GetTaskRunnerProvider()->IsMainThread()); 122 EXPECT_TRUE(layer_tree_host()->GetTaskRunnerProvider()->IsMainThread());
123 EXPECT_TRUE(result->HasBitmap()); 123 EXPECT_TRUE(result->HasBitmap());
124 std::unique_ptr<SkBitmap> bitmap = result->TakeBitmap(); 124 std::unique_ptr<SkBitmap> bitmap = result->TakeBitmap();
125 EXPECT_EQ(result->size().ToString(), 125 EXPECT_EQ(result->size().ToString(),
126 gfx::Size(bitmap->width(), bitmap->height()).ToString()); 126 gfx::Size(bitmap->width(), bitmap->height()).ToString());
127 callbacks_[id] = result->size(); 127 callbacks_[id] = result->size();
128 } 128 }
129 129
130 void AfterTest() override { EXPECT_EQ(4u, callbacks_.size()); } 130 void AfterTest() override { EXPECT_EQ(4u, callbacks_.size()); }
131 131
132 std::unique_ptr<OutputSurface> CreateDisplayOutputSurface( 132 std::unique_ptr<OutputSurface> CreateDisplayOutputSurfaceOnThread(
133 scoped_refptr<ContextProvider> compositor_context_provider) override { 133 scoped_refptr<ContextProvider> compositor_context_provider) override {
134 if (!use_gl_renderer_) { 134 if (!use_gl_renderer_) {
135 return FakeOutputSurface::CreateSoftware( 135 return FakeOutputSurface::CreateSoftware(
136 base::WrapUnique(new SoftwareOutputDevice)); 136 base::WrapUnique(new SoftwareOutputDevice));
137 } 137 }
138 138
139 scoped_refptr<TestContextProvider> display_context_provider = 139 scoped_refptr<TestContextProvider> display_context_provider =
140 TestContextProvider::Create(); 140 TestContextProvider::Create();
141 TestContextSupport* context_support = display_context_provider->support(); 141 TestContextSupport* context_support = display_context_provider->support();
142 context_support->set_out_of_order_callbacks(out_of_order_callbacks_); 142 context_support->set_out_of_order_callbacks(out_of_order_callbacks_);
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 parent_layer_->AddChild(copy_layer_); 459 parent_layer_->AddChild(copy_layer_);
460 460
461 layer_tree()->SetRootLayer(root_); 461 layer_tree()->SetRootLayer(root_);
462 LayerTreeHostCopyRequestTest::SetupTree(); 462 LayerTreeHostCopyRequestTest::SetupTree();
463 client_.set_bounds(root_->bounds()); 463 client_.set_bounds(root_->bounds());
464 } 464 }
465 465
466 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( 466 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink(
467 scoped_refptr<ContextProvider> compositor_context_provider, 467 scoped_refptr<ContextProvider> compositor_context_provider,
468 scoped_refptr<ContextProvider> worker_context_provider) override { 468 scoped_refptr<ContextProvider> worker_context_provider) override {
469 auto surface = LayerTreeHostCopyRequestTest::CreateCompositorFrameSink( 469 auto frame_sink = LayerTreeHostCopyRequestTest::CreateCompositorFrameSink(
470 std::move(compositor_context_provider), 470 std::move(compositor_context_provider),
471 std::move(worker_context_provider)); 471 std::move(worker_context_provider));
472 display_ = surface->display(); 472 frame_sink_ = frame_sink.get();
473 return surface; 473 return frame_sink;
474 } 474 }
475 475
476 void BeginTest() override { 476 void BeginTest() override {
477 PostSetNeedsCommitToMainThread(); 477 PostSetNeedsCommitToMainThread();
478 478
479 copy_layer_->RequestCopyOfOutput( 479 copy_layer_->RequestCopyOfOutput(
480 CopyOutputRequest::CreateBitmapRequest(base::Bind( 480 CopyOutputRequest::CreateBitmapRequest(base::Bind(
481 &LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest:: 481 &LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest::
482 CopyOutputCallback, 482 CopyOutputCallback,
483 base::Unretained(this)))); 483 base::Unretained(this))));
(...skipping 16 matching lines...) Expand all
500 return; 500 return;
501 } 501 }
502 502
503 EXPECT_EQ(2u, render_passes.size()); 503 EXPECT_EQ(2u, render_passes.size());
504 // The root pass is the back of the list. 504 // The root pass is the back of the list.
505 copy_layer_render_pass_id = render_passes[0]->id; 505 copy_layer_render_pass_id = render_passes[0]->id;
506 parent_render_pass_id = render_passes[1]->id; 506 parent_render_pass_id = render_passes[1]->id;
507 } 507 }
508 508
509 void DisplayDidDrawAndSwapOnThread() override { 509 void DisplayDidDrawAndSwapOnThread() override {
510 DirectRenderer* renderer = display_->renderer_for_testing(); 510 DirectRenderer* renderer = frame_sink_->display()->renderer_for_testing();
511 511
512 // |parent| owns a surface, but it was hidden and not part of the copy 512 // |parent| owns a surface, but it was hidden and not part of the copy
513 // request so it should not allocate any resource. 513 // request so it should not allocate any resource.
514 EXPECT_FALSE( 514 EXPECT_FALSE(
515 renderer->HasAllocatedResourcesForTesting(parent_render_pass_id)); 515 renderer->HasAllocatedResourcesForTesting(parent_render_pass_id));
516 516
517 // TODO(crbug.com/564832): Ignore the extra frame that occurs due to copy 517 // TODO(crbug.com/564832): Ignore the extra frame that occurs due to copy
518 // completion. This can be removed when the extra commit is removed. 518 // completion. This can be removed when the extra commit is removed.
519 if (did_swap_) { 519 if (did_swap_) {
520 EXPECT_FALSE( 520 EXPECT_FALSE(
521 renderer->HasAllocatedResourcesForTesting(copy_layer_render_pass_id)); 521 renderer->HasAllocatedResourcesForTesting(copy_layer_render_pass_id));
522 } else { 522 } else {
523 // |copy_layer| should have been rendered to a texture since it was needed 523 // |copy_layer| should have been rendered to a texture since it was needed
524 // for a copy request. 524 // for a copy request.
525 EXPECT_TRUE( 525 EXPECT_TRUE(
526 renderer->HasAllocatedResourcesForTesting(copy_layer_render_pass_id)); 526 renderer->HasAllocatedResourcesForTesting(copy_layer_render_pass_id));
527 } 527 }
528 528
529 did_swap_ = true; 529 did_swap_ = true;
530 } 530 }
531 531
532 void AfterTest() override { EXPECT_TRUE(did_swap_); } 532 void AfterTest() override { EXPECT_TRUE(did_swap_); }
533 533
534 RenderPassId parent_render_pass_id; 534 RenderPassId parent_render_pass_id;
535 RenderPassId copy_layer_render_pass_id; 535 RenderPassId copy_layer_render_pass_id;
536 Display* display_ = nullptr; 536 TestCompositorFrameSink* frame_sink_ = nullptr;
537 bool did_swap_ = false; 537 bool did_swap_ = false;
538 FakeContentLayerClient client_; 538 FakeContentLayerClient client_;
539 scoped_refptr<FakePictureLayer> root_; 539 scoped_refptr<FakePictureLayer> root_;
540 scoped_refptr<FakePictureLayer> grand_parent_layer_; 540 scoped_refptr<FakePictureLayer> grand_parent_layer_;
541 scoped_refptr<FakePictureLayer> parent_layer_; 541 scoped_refptr<FakePictureLayer> parent_layer_;
542 scoped_refptr<FakePictureLayer> copy_layer_; 542 scoped_refptr<FakePictureLayer> copy_layer_;
543 }; 543 };
544 544
545 SINGLE_AND_MULTI_THREAD_TEST_F( 545 SINGLE_AND_MULTI_THREAD_TEST_F(
546 LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest); 546 LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest);
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 FakeContentLayerClient client_; 724 FakeContentLayerClient client_;
725 scoped_refptr<FakePictureLayer> root_; 725 scoped_refptr<FakePictureLayer> root_;
726 scoped_refptr<FakePictureLayer> copy_layer_; 726 scoped_refptr<FakePictureLayer> copy_layer_;
727 }; 727 };
728 728
729 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestAsyncTwoReadbacksWithoutDraw); 729 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestAsyncTwoReadbacksWithoutDraw);
730 730
731 class LayerTreeHostCopyRequestTestDeleteTexture 731 class LayerTreeHostCopyRequestTestDeleteTexture
732 : public LayerTreeHostCopyRequestTest { 732 : public LayerTreeHostCopyRequestTest {
733 protected: 733 protected:
734 std::unique_ptr<OutputSurface> CreateDisplayOutputSurface( 734 std::unique_ptr<OutputSurface> CreateDisplayOutputSurfaceOnThread(
735 scoped_refptr<ContextProvider> compositor_context_provider) override { 735 scoped_refptr<ContextProvider> compositor_context_provider) override {
736 display_context_provider_ = TestContextProvider::Create(); 736 display_context_provider_ = TestContextProvider::Create();
737 return FakeOutputSurface::Create3d(display_context_provider_); 737 return FakeOutputSurface::Create3d(display_context_provider_);
738 } 738 }
739 739
740 void SetupTree() override { 740 void SetupTree() override {
741 root_ = FakePictureLayer::Create(&client_); 741 root_ = FakePictureLayer::Create(&client_);
742 root_->SetBounds(gfx::Size(20, 20)); 742 root_->SetBounds(gfx::Size(20, 20));
743 743
744 copy_layer_ = FakePictureLayer::Create(&client_); 744 copy_layer_ = FakePictureLayer::Create(&client_);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 CheckNumTexturesAfterReadbackDestroyed, 782 CheckNumTexturesAfterReadbackDestroyed,
783 base::Unretained(this))); 783 base::Unretained(this)));
784 } 784 }
785 785
786 void CheckNumTexturesAfterReadbackDestroyed() { 786 void CheckNumTexturesAfterReadbackDestroyed() {
787 // After the copy we had |num_textures_after_readback_| many textures, but 787 // After the copy we had |num_textures_after_readback_| many textures, but
788 // releasing the copy output request should cause the texture in the request 788 // releasing the copy output request should cause the texture in the request
789 // to be destroyed by the compositor, so we should have 1 less by now. 789 // to be destroyed by the compositor, so we should have 1 less by now.
790 EXPECT_EQ(num_textures_after_readback_ - 1, 790 EXPECT_EQ(num_textures_after_readback_ - 1,
791 display_context_provider_->TestContext3d()->NumTextures()); 791 display_context_provider_->TestContext3d()->NumTextures());
792
793 // Drop the reference to the context provider on the compositor thread.
794 display_context_provider_ = nullptr;
792 EndTest(); 795 EndTest();
793 } 796 }
794 797
795 void DisplayDidDrawAndSwapOnThread() override { 798 void DisplayDidDrawAndSwapOnThread() override {
796 switch (num_swaps_++) { 799 switch (num_swaps_++) {
797 case 0: 800 case 0:
798 // The layers have been drawn, so any textures required for drawing have 801 // The layers have been drawn, so any textures required for drawing have
799 // been allocated. 802 // been allocated.
800 EXPECT_FALSE(result_); 803 EXPECT_FALSE(result_);
801 num_textures_without_readback_ = 804 num_textures_without_readback_ =
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestDeleteTexture); 843 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostCopyRequestTestDeleteTexture);
841 844
842 class LayerTreeHostCopyRequestTestCountTextures 845 class LayerTreeHostCopyRequestTestCountTextures
843 : public LayerTreeHostCopyRequestTest { 846 : public LayerTreeHostCopyRequestTest {
844 protected: 847 protected:
845 void InitializeSettings(LayerTreeSettings* settings) override { 848 void InitializeSettings(LayerTreeSettings* settings) override {
846 // Always allocate only a single texture at a time through ResourceProvider. 849 // Always allocate only a single texture at a time through ResourceProvider.
847 settings->renderer_settings.texture_id_allocation_chunk_size = 1; 850 settings->renderer_settings.texture_id_allocation_chunk_size = 1;
848 } 851 }
849 852
850 std::unique_ptr<OutputSurface> CreateDisplayOutputSurface( 853 std::unique_ptr<OutputSurface> CreateDisplayOutputSurfaceOnThread(
851 scoped_refptr<ContextProvider> compositor_context_provider) override { 854 scoped_refptr<ContextProvider> compositor_context_provider) override {
852 // These tests expect the LayerTreeHostImpl to share a context with 855 // These tests expect the LayerTreeHostImpl to share a context with
853 // the Display so that sync points are not needed and the texture counts 856 // the Display so that sync points are not needed and the texture counts
854 // are visible together. 857 // are visible together.
855 // Since this test does not override CreateCompositorFrameSink, the 858 // Since this test does not override CreateCompositorFrameSink, the
856 // |compositor_context_provider| will be a TestContextProvider. 859 // |compositor_context_provider| will be a TestContextProvider.
857 display_context_provider_ = 860 display_context_provider_ =
858 static_cast<TestContextProvider*>(compositor_context_provider.get()); 861 static_cast<TestContextProvider*>(compositor_context_provider.get());
859 return FakeOutputSurface::Create3d(std::move(compositor_context_provider)); 862 return FakeOutputSurface::Create3d(std::move(compositor_context_provider));
860 } 863 }
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 int num_draws_; 1288 int num_draws_;
1286 bool copy_happened_; 1289 bool copy_happened_;
1287 bool draw_happened_; 1290 bool draw_happened_;
1288 }; 1291 };
1289 1292
1290 SINGLE_AND_MULTI_THREAD_TEST_F( 1293 SINGLE_AND_MULTI_THREAD_TEST_F(
1291 LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest); 1294 LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest);
1292 1295
1293 } // namespace 1296 } // namespace
1294 } // namespace cc 1297 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest.cc ('k') | content/test/layouttest_support.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698