| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 bool did_draw_; | 435 bool did_draw_; |
| 436 }; | 436 }; |
| 437 | 437 |
| 438 // Note: With this test setup, we only get tiles flagged as REQUIRED_FOR_DRAW in | 438 // Note: With this test setup, we only get tiles flagged as REQUIRED_FOR_DRAW in |
| 439 // single threaded mode. | 439 // single threaded mode. |
| 440 SINGLE_THREAD_TEST_F(LayerTreeHostTestReadyToDrawVisibility); | 440 SINGLE_THREAD_TEST_F(LayerTreeHostTestReadyToDrawVisibility); |
| 441 | 441 |
| 442 class LayerTreeHostContextCacheTest : public LayerTreeHostTest { | 442 class LayerTreeHostContextCacheTest : public LayerTreeHostTest { |
| 443 public: | 443 public: |
| 444 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( | 444 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
| 445 const RendererSettings& renderer_settings, |
| 445 scoped_refptr<ContextProvider> compositor_context_provider, | 446 scoped_refptr<ContextProvider> compositor_context_provider, |
| 446 scoped_refptr<ContextProvider> worker_context_provider) override { | 447 scoped_refptr<ContextProvider> worker_context_provider) override { |
| 447 // Create the main ContextProvider with a MockContextSupport. | 448 // Create the main ContextProvider with a MockContextSupport. |
| 448 auto main_support = base::MakeUnique<MockContextSupport>(); | 449 auto main_support = base::MakeUnique<MockContextSupport>(); |
| 449 mock_main_context_support_ = main_support.get(); | 450 mock_main_context_support_ = main_support.get(); |
| 450 auto test_main_context_provider = TestContextProvider::Create( | 451 auto test_main_context_provider = TestContextProvider::Create( |
| 451 TestWebGraphicsContext3D::Create(), std::move(main_support)); | 452 TestWebGraphicsContext3D::Create(), std::move(main_support)); |
| 452 | 453 |
| 453 // Create the main ContextProvider with a MockContextSupport. | 454 // Create the main ContextProvider with a MockContextSupport. |
| 454 auto worker_support = base::MakeUnique<MockContextSupport>(); | 455 auto worker_support = base::MakeUnique<MockContextSupport>(); |
| 455 mock_worker_context_support_ = worker_support.get(); | 456 mock_worker_context_support_ = worker_support.get(); |
| 456 auto test_worker_context_provider = TestContextProvider::Create( | 457 auto test_worker_context_provider = TestContextProvider::Create( |
| 457 TestWebGraphicsContext3D::Create(), std::move(worker_support)); | 458 TestWebGraphicsContext3D::Create(), std::move(worker_support)); |
| 458 test_worker_context_provider->BindToCurrentThread(); | 459 test_worker_context_provider->BindToCurrentThread(); |
| 459 | 460 |
| 460 // At init, visibility is set to true, so SetAggressivelyFreeResources will | 461 // At init, visibility is set to true, so SetAggressivelyFreeResources will |
| 461 // be disabled. | 462 // be disabled. |
| 462 EXPECT_CALL(*mock_main_context_support_, | 463 EXPECT_CALL(*mock_main_context_support_, |
| 463 SetAggressivelyFreeResources(false)); | 464 SetAggressivelyFreeResources(false)); |
| 464 EXPECT_CALL(*mock_worker_context_support_, | 465 EXPECT_CALL(*mock_worker_context_support_, |
| 465 SetAggressivelyFreeResources(false)); | 466 SetAggressivelyFreeResources(false)); |
| 466 | 467 |
| 467 return LayerTreeHostTest::CreateCompositorFrameSink( | 468 return LayerTreeHostTest::CreateCompositorFrameSink( |
| 468 std::move(test_main_context_provider), | 469 renderer_settings, std::move(test_main_context_provider), |
| 469 std::move(test_worker_context_provider)); | 470 std::move(test_worker_context_provider)); |
| 470 } | 471 } |
| 471 | 472 |
| 472 void InitializeSettings(LayerTreeSettings* settings) override { | 473 void InitializeSettings(LayerTreeSettings* settings) override { |
| 473 settings->gpu_rasterization_forced = true; | 474 settings->gpu_rasterization_forced = true; |
| 474 } | 475 } |
| 475 | 476 |
| 476 void BeginTest() override {} | 477 void BeginTest() override {} |
| 477 void AfterTest() override {} | 478 void AfterTest() override {} |
| 478 | 479 |
| (...skipping 2859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3338 | 3339 |
| 3339 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor | 3340 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor |
| 3340 : public LayerTreeHostTestAbortedCommitDoesntStall { | 3341 : public LayerTreeHostTestAbortedCommitDoesntStall { |
| 3341 protected: | 3342 protected: |
| 3342 void InitializeSettings(LayerTreeSettings* settings) override { | 3343 void InitializeSettings(LayerTreeSettings* settings) override { |
| 3343 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); | 3344 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); |
| 3344 settings->using_synchronous_renderer_compositor = true; | 3345 settings->using_synchronous_renderer_compositor = true; |
| 3345 } | 3346 } |
| 3346 | 3347 |
| 3347 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( | 3348 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
| 3349 const RendererSettings& renderer_settings, |
| 3348 scoped_refptr<ContextProvider> compositor_context_provider, | 3350 scoped_refptr<ContextProvider> compositor_context_provider, |
| 3349 scoped_refptr<ContextProvider> worker_context_provider) override { | 3351 scoped_refptr<ContextProvider> worker_context_provider) override { |
| 3350 auto on_draw_callback = base::Bind( | 3352 auto on_draw_callback = base::Bind( |
| 3351 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: | 3353 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: |
| 3352 CallOnDraw, | 3354 CallOnDraw, |
| 3353 base::Unretained(this)); | 3355 base::Unretained(this)); |
| 3354 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( | 3356 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( |
| 3355 compositor_context_provider, std::move(worker_context_provider), | 3357 compositor_context_provider, std::move(worker_context_provider), |
| 3356 shared_bitmap_manager(), gpu_memory_buffer_manager(), | 3358 shared_bitmap_manager(), gpu_memory_buffer_manager(), renderer_settings, |
| 3357 layer_tree_host()->GetSettings().renderer_settings, | |
| 3358 ImplThreadTaskRunner(), false /* synchronous_composite */, | 3359 ImplThreadTaskRunner(), false /* synchronous_composite */, |
| 3359 std::move(on_draw_callback)); | 3360 std::move(on_draw_callback)); |
| 3360 compositor_frame_sink_ = frame_sink.get(); | 3361 compositor_frame_sink_ = frame_sink.get(); |
| 3361 return std::move(frame_sink); | 3362 return std::move(frame_sink); |
| 3362 } | 3363 } |
| 3363 | 3364 |
| 3364 void CallOnDraw() { | 3365 void CallOnDraw() { |
| 3365 if (!TestEnded()) { | 3366 if (!TestEnded()) { |
| 3366 // Synchronous compositor does not draw unless told to do so by the output | 3367 // Synchronous compositor does not draw unless told to do so by the output |
| 3367 // surface. But it needs to be done on a new stack frame. | 3368 // surface. But it needs to be done on a new stack frame. |
| (...skipping 2100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5468 FakeContentLayerClient layer_client_; | 5469 FakeContentLayerClient layer_client_; |
| 5469 FakePictureLayer* layer_; | 5470 FakePictureLayer* layer_; |
| 5470 FakeRecordingSource* recording_source_; | 5471 FakeRecordingSource* recording_source_; |
| 5471 }; | 5472 }; |
| 5472 | 5473 |
| 5473 MULTI_THREAD_TEST_F(LayerTreeHostTestEmptyLayerGpuRasterization); | 5474 MULTI_THREAD_TEST_F(LayerTreeHostTestEmptyLayerGpuRasterization); |
| 5474 | 5475 |
| 5475 class LayerTreeHostWithGpuRasterizationTest : public LayerTreeHostTest { | 5476 class LayerTreeHostWithGpuRasterizationTest : public LayerTreeHostTest { |
| 5476 protected: | 5477 protected: |
| 5477 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( | 5478 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
| 5479 const RendererSettings& renderer_settings, |
| 5478 scoped_refptr<ContextProvider> compositor_context_provider, | 5480 scoped_refptr<ContextProvider> compositor_context_provider, |
| 5479 scoped_refptr<ContextProvider> worker_context_provider) override { | 5481 scoped_refptr<ContextProvider> worker_context_provider) override { |
| 5480 auto context = TestWebGraphicsContext3D::Create(); | 5482 auto context = TestWebGraphicsContext3D::Create(); |
| 5481 context->set_gpu_rasterization(true); | 5483 context->set_gpu_rasterization(true); |
| 5482 auto context_provider = TestContextProvider::Create(std::move(context)); | 5484 auto context_provider = TestContextProvider::Create(std::move(context)); |
| 5483 return LayerTreeHostTest::CreateCompositorFrameSink( | 5485 return LayerTreeHostTest::CreateCompositorFrameSink( |
| 5484 std::move(context_provider), std::move(worker_context_provider)); | 5486 renderer_settings, std::move(context_provider), |
| 5487 std::move(worker_context_provider)); |
| 5485 } | 5488 } |
| 5486 }; | 5489 }; |
| 5487 | 5490 |
| 5488 class LayerTreeHostTestGpuRasterizationEnabled | 5491 class LayerTreeHostTestGpuRasterizationEnabled |
| 5489 : public LayerTreeHostWithGpuRasterizationTest { | 5492 : public LayerTreeHostWithGpuRasterizationTest { |
| 5490 protected: | 5493 protected: |
| 5491 void SetupTree() override { | 5494 void SetupTree() override { |
| 5492 LayerTreeHostTest::SetupTree(); | 5495 LayerTreeHostTest::SetupTree(); |
| 5493 | 5496 |
| 5494 std::unique_ptr<FakeRecordingSource> recording_source( | 5497 std::unique_ptr<FakeRecordingSource> recording_source( |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5550 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationEnabled); | 5553 MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationEnabled); |
| 5551 | 5554 |
| 5552 class LayerTreeHostTestGpuRasterizationReenabled | 5555 class LayerTreeHostTestGpuRasterizationReenabled |
| 5553 : public LayerTreeHostWithGpuRasterizationTest { | 5556 : public LayerTreeHostWithGpuRasterizationTest { |
| 5554 protected: | 5557 protected: |
| 5555 void InitializeSettings(LayerTreeSettings* settings) override { | 5558 void InitializeSettings(LayerTreeSettings* settings) override { |
| 5556 settings->gpu_rasterization_msaa_sample_count = 4; | 5559 settings->gpu_rasterization_msaa_sample_count = 4; |
| 5557 } | 5560 } |
| 5558 | 5561 |
| 5559 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( | 5562 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
| 5563 const RendererSettings& renderer_settings, |
| 5560 scoped_refptr<ContextProvider> compositor_context_provider, | 5564 scoped_refptr<ContextProvider> compositor_context_provider, |
| 5561 scoped_refptr<ContextProvider> worker_context_provider) override { | 5565 scoped_refptr<ContextProvider> worker_context_provider) override { |
| 5562 std::unique_ptr<TestWebGraphicsContext3D> context = | 5566 std::unique_ptr<TestWebGraphicsContext3D> context = |
| 5563 TestWebGraphicsContext3D::Create(); | 5567 TestWebGraphicsContext3D::Create(); |
| 5564 context->SetMaxSamples(4); | 5568 context->SetMaxSamples(4); |
| 5565 context->set_gpu_rasterization(true); | 5569 context->set_gpu_rasterization(true); |
| 5566 compositor_context_provider = | 5570 compositor_context_provider = |
| 5567 TestContextProvider::Create(std::move(context)); | 5571 TestContextProvider::Create(std::move(context)); |
| 5568 return LayerTreeTest::CreateCompositorFrameSink(compositor_context_provider, | 5572 return LayerTreeTest::CreateCompositorFrameSink(renderer_settings, |
| 5573 compositor_context_provider, |
| 5569 worker_context_provider); | 5574 worker_context_provider); |
| 5570 } | 5575 } |
| 5571 | 5576 |
| 5572 void SetupTree() override { | 5577 void SetupTree() override { |
| 5573 LayerTreeHostTest::SetupTree(); | 5578 LayerTreeHostTest::SetupTree(); |
| 5574 | 5579 |
| 5575 std::unique_ptr<FakeRecordingSource> recording_source( | 5580 std::unique_ptr<FakeRecordingSource> recording_source( |
| 5576 new FakeRecordingSource); | 5581 new FakeRecordingSource); |
| 5577 recording_source_ = recording_source.get(); | 5582 recording_source_ = recording_source.get(); |
| 5578 | 5583 |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5963 : public LayerTreeHostTest { | 5968 : public LayerTreeHostTest { |
| 5964 public: | 5969 public: |
| 5965 LayerTreeHostTestSynchronousCompositeSwapPromise() = default; | 5970 LayerTreeHostTestSynchronousCompositeSwapPromise() = default; |
| 5966 | 5971 |
| 5967 void InitializeSettings(LayerTreeSettings* settings) override { | 5972 void InitializeSettings(LayerTreeSettings* settings) override { |
| 5968 settings->single_thread_proxy_scheduler = false; | 5973 settings->single_thread_proxy_scheduler = false; |
| 5969 settings->use_zero_copy = true; | 5974 settings->use_zero_copy = true; |
| 5970 } | 5975 } |
| 5971 | 5976 |
| 5972 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( | 5977 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
| 5978 const RendererSettings& renderer_settings, |
| 5973 scoped_refptr<ContextProvider> compositor_context_provider, | 5979 scoped_refptr<ContextProvider> compositor_context_provider, |
| 5974 scoped_refptr<ContextProvider> worker_context_provider) override { | 5980 scoped_refptr<ContextProvider> worker_context_provider) override { |
| 5975 constexpr bool disable_display_vsync = false; | 5981 constexpr bool disable_display_vsync = false; |
| 5976 bool synchronous_composite = | 5982 bool synchronous_composite = |
| 5977 !HasImplThread() && | 5983 !HasImplThread() && |
| 5978 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; | 5984 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; |
| 5979 return base::MakeUnique<TestCompositorFrameSink>( | 5985 return base::MakeUnique<TestCompositorFrameSink>( |
| 5980 compositor_context_provider, std::move(worker_context_provider), | 5986 compositor_context_provider, std::move(worker_context_provider), |
| 5981 shared_bitmap_manager(), gpu_memory_buffer_manager(), | 5987 shared_bitmap_manager(), gpu_memory_buffer_manager(), renderer_settings, |
| 5982 layer_tree_host()->GetSettings().renderer_settings, | |
| 5983 ImplThreadTaskRunner(), synchronous_composite, disable_display_vsync); | 5988 ImplThreadTaskRunner(), synchronous_composite, disable_display_vsync); |
| 5984 } | 5989 } |
| 5985 | 5990 |
| 5986 void BeginTest() override { | 5991 void BeginTest() override { |
| 5987 // Successful composite. | 5992 // Successful composite. |
| 5988 std::unique_ptr<SwapPromise> swap_promise0( | 5993 std::unique_ptr<SwapPromise> swap_promise0( |
| 5989 new TestSwapPromise(&swap_promise_result_[0])); | 5994 new TestSwapPromise(&swap_promise_result_[0])); |
| 5990 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( | 5995 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( |
| 5991 std::move(swap_promise0)); | 5996 std::move(swap_promise0)); |
| 5992 layer_tree_host()->Composite(base::TimeTicks::Now()); | 5997 layer_tree_host()->Composite(base::TimeTicks::Now()); |
| (...skipping 1970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7963 void AfterTest() override {} | 7968 void AfterTest() override {} |
| 7964 | 7969 |
| 7965 private: | 7970 private: |
| 7966 bool received_ack_ = false; | 7971 bool received_ack_ = false; |
| 7967 }; | 7972 }; |
| 7968 | 7973 |
| 7969 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDiscardAckAfterRelease); | 7974 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDiscardAckAfterRelease); |
| 7970 | 7975 |
| 7971 } // namespace | 7976 } // namespace |
| 7972 } // namespace cc | 7977 } // namespace cc |
| OLD | NEW |