| 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/test/layer_tree_test.h" | 5 #include "cc/test/layer_tree_test.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 } | 455 } |
| 456 void DisplayDidDrawAndSwap() override { | 456 void DisplayDidDrawAndSwap() override { |
| 457 hooks_->DisplayDidDrawAndSwapOnThread(); | 457 hooks_->DisplayDidDrawAndSwapOnThread(); |
| 458 } | 458 } |
| 459 | 459 |
| 460 private: | 460 private: |
| 461 TestHooks* hooks_; | 461 TestHooks* hooks_; |
| 462 }; | 462 }; |
| 463 | 463 |
| 464 LayerTreeTest::LayerTreeTest() | 464 LayerTreeTest::LayerTreeTest() |
| 465 : remote_proto_channel_bridge_(this), | 465 : image_serialization_processor_( |
| 466 image_serialization_processor_( | |
| 467 base::WrapUnique(new FakeImageSerializationProcessor)), | 466 base::WrapUnique(new FakeImageSerializationProcessor)), |
| 468 delegating_output_surface_client_( | 467 delegating_output_surface_client_( |
| 469 new LayerTreeTestDelegatingOutputSurfaceClient(this)), | 468 new LayerTreeTestDelegatingOutputSurfaceClient(this)), |
| 470 weak_factory_(this) { | 469 weak_factory_(this) { |
| 471 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); | 470 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); |
| 472 | 471 |
| 473 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was | 472 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was |
| 474 // specified (for running in a debugger). | 473 // specified (for running in a debugger). |
| 475 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 474 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 476 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) | 475 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); | 632 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); |
| 634 | 633 |
| 635 if (IsRemoteTest()) { | 634 if (IsRemoteTest()) { |
| 636 DCHECK(impl_thread_); | 635 DCHECK(impl_thread_); |
| 637 layer_tree_host_ = LayerTreeHostForTesting::Create( | 636 layer_tree_host_ = LayerTreeHostForTesting::Create( |
| 638 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_main, | 637 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_main, |
| 639 nullptr, nullptr, task_graph_runner_.get(), settings_, | 638 nullptr, nullptr, task_graph_runner_.get(), settings_, |
| 640 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr, | 639 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr, |
| 641 image_serialization_processor_.get()); | 640 image_serialization_processor_.get()); |
| 642 DCHECK(remote_proto_channel_bridge_.channel_main.HasReceiver()); | 641 DCHECK(remote_proto_channel_bridge_.channel_main.HasReceiver()); |
| 642 |
| 643 LayerTreeSettings settings = settings_; |
| 644 settings.abort_commit_before_output_surface_creation = false; |
| 645 remote_client_layer_tree_host_ = LayerTreeHostForTesting::Create( |
| 646 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_impl, |
| 647 nullptr, nullptr, task_graph_runner_.get(), settings, |
| 648 base::ThreadTaskRunnerHandle::Get(), impl_thread_->task_runner(), |
| 649 nullptr, image_serialization_processor_.get()); |
| 650 DCHECK(remote_proto_channel_bridge_.channel_impl.HasReceiver()); |
| 643 } else { | 651 } else { |
| 644 layer_tree_host_ = LayerTreeHostForTesting::Create( | 652 layer_tree_host_ = LayerTreeHostForTesting::Create( |
| 645 this, mode_, client_.get(), nullptr, shared_bitmap_manager_.get(), | 653 this, mode_, client_.get(), nullptr, shared_bitmap_manager_.get(), |
| 646 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, | 654 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, |
| 647 base::ThreadTaskRunnerHandle::Get(), | 655 base::ThreadTaskRunnerHandle::Get(), |
| 648 impl_thread_ ? impl_thread_->task_runner() : nullptr, nullptr, | 656 impl_thread_ ? impl_thread_->task_runner() : nullptr, nullptr, |
| 649 image_serialization_processor_.get()); | 657 image_serialization_processor_.get()); |
| 650 } | 658 } |
| 651 | 659 |
| 652 ASSERT_TRUE(layer_tree_host_); | 660 ASSERT_TRUE(layer_tree_host_); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 return FakeOutputSurface::Create3d(std::move(compositor_context_provider)); | 887 return FakeOutputSurface::Create3d(std::move(compositor_context_provider)); |
| 880 } | 888 } |
| 881 | 889 |
| 882 void LayerTreeTest::DestroyLayerTreeHost() { | 890 void LayerTreeTest::DestroyLayerTreeHost() { |
| 883 if (layer_tree_host_ && layer_tree_host_->GetLayerTree()->root_layer()) | 891 if (layer_tree_host_ && layer_tree_host_->GetLayerTree()->root_layer()) |
| 884 layer_tree_host_->GetLayerTree()->root_layer()->SetLayerTreeHost(NULL); | 892 layer_tree_host_->GetLayerTree()->root_layer()->SetLayerTreeHost(NULL); |
| 885 layer_tree_host_ = nullptr; | 893 layer_tree_host_ = nullptr; |
| 886 | 894 |
| 887 DCHECK(!remote_proto_channel_bridge_.channel_main.HasReceiver()); | 895 DCHECK(!remote_proto_channel_bridge_.channel_main.HasReceiver()); |
| 888 | 896 |
| 889 // Destroying the LayerTreeHost should destroy the remote client | |
| 890 // LayerTreeHost. | |
| 891 DCHECK(!remote_client_layer_tree_host_); | |
| 892 } | |
| 893 | |
| 894 void LayerTreeTest::DestroyRemoteClientHost() { | |
| 895 DCHECK(IsRemoteTest()); | |
| 896 DCHECK(remote_client_layer_tree_host_); | |
| 897 | |
| 898 remote_client_layer_tree_host_ = nullptr; | 897 remote_client_layer_tree_host_ = nullptr; |
| 899 DCHECK(!remote_proto_channel_bridge_.channel_impl.HasReceiver()); | 898 DCHECK(!remote_proto_channel_bridge_.channel_impl.HasReceiver()); |
| 900 } | 899 } |
| 901 | 900 |
| 902 void LayerTreeTest::CreateRemoteClientHost( | |
| 903 const proto::CompositorMessageToImpl& proto) { | |
| 904 DCHECK(IsRemoteTest()); | |
| 905 DCHECK(!remote_client_layer_tree_host_); | |
| 906 DCHECK(impl_thread_); | |
| 907 DCHECK(proto.message_type() == | |
| 908 proto::CompositorMessageToImpl::INITIALIZE_IMPL); | |
| 909 | |
| 910 LayerTreeSettings settings = settings_; | |
| 911 settings.abort_commit_before_output_surface_creation = false; | |
| 912 remote_client_layer_tree_host_ = LayerTreeHostForTesting::Create( | |
| 913 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_impl, | |
| 914 nullptr, nullptr, task_graph_runner_.get(), settings, | |
| 915 base::ThreadTaskRunnerHandle::Get(), impl_thread_->task_runner(), nullptr, | |
| 916 image_serialization_processor_.get()); | |
| 917 | |
| 918 DCHECK(remote_proto_channel_bridge_.channel_impl.HasReceiver()); | |
| 919 DCHECK(task_runner_provider()->HasImplThread()); | |
| 920 } | |
| 921 | |
| 922 TaskRunnerProvider* LayerTreeTest::task_runner_provider() const { | 901 TaskRunnerProvider* LayerTreeTest::task_runner_provider() const { |
| 923 // All LayerTreeTests can use the task runner provider to access the impl | 902 // All LayerTreeTests can use the task runner provider to access the impl |
| 924 // thread. In the remote mode, the impl thread of the compositor lives on | 903 // thread. In the remote mode, the impl thread of the compositor lives on |
| 925 // the client, so return the task runner provider owned by the remote client | 904 // the client, so return the task runner provider owned by the remote client |
| 926 // LayerTreeHost. | 905 // LayerTreeHost. |
| 927 LayerTreeHost* host = IsRemoteTest() ? remote_client_layer_tree_host_.get() | 906 LayerTreeHost* host = IsRemoteTest() ? remote_client_layer_tree_host_.get() |
| 928 : layer_tree_host_.get(); | 907 : layer_tree_host_.get(); |
| 929 | 908 |
| 930 // If this fails, the test has ended and there is no task runners to find | 909 // If this fails, the test has ended and there is no task runners to find |
| 931 // anymore. | 910 // anymore. |
| 932 DCHECK(host); | 911 DCHECK(host); |
| 933 | 912 |
| 934 return host->GetTaskRunnerProvider(); | 913 return host->GetTaskRunnerProvider(); |
| 935 } | 914 } |
| 936 | 915 |
| 937 LayerTreeHost* LayerTreeTest::layer_tree_host() { | 916 LayerTreeHost* LayerTreeTest::layer_tree_host() { |
| 938 DCHECK(task_runner_provider()->IsMainThread() || | 917 DCHECK(task_runner_provider()->IsMainThread() || |
| 939 task_runner_provider()->IsMainThreadBlocked()); | 918 task_runner_provider()->IsMainThreadBlocked()); |
| 940 return layer_tree_host_.get(); | 919 return layer_tree_host_.get(); |
| 941 } | 920 } |
| 942 | 921 |
| 943 LayerTreeHost* LayerTreeTest::remote_client_layer_tree_host() { | 922 LayerTreeHost* LayerTreeTest::remote_client_layer_tree_host() { |
| 944 DCHECK(IsRemoteTest()); | 923 DCHECK(IsRemoteTest()); |
| 945 DCHECK(task_runner_provider()->IsMainThread() || | 924 DCHECK(task_runner_provider()->IsMainThread() || |
| 946 task_runner_provider()->IsMainThreadBlocked()); | 925 task_runner_provider()->IsMainThreadBlocked()); |
| 947 return remote_client_layer_tree_host_.get(); | 926 return remote_client_layer_tree_host_.get(); |
| 948 } | 927 } |
| 949 | 928 |
| 950 } // namespace cc | 929 } // namespace cc |
| OLD | NEW |