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/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
11 #include "cc/animation/animation.h" | 11 #include "cc/animation/animation.h" |
12 #include "cc/animation/animation_host.h" | 12 #include "cc/animation/animation_host.h" |
13 #include "cc/animation/animation_registrar.h" | 13 #include "cc/animation/animation_registrar.h" |
14 #include "cc/animation/layer_animation_controller.h" | 14 #include "cc/animation/layer_animation_controller.h" |
15 #include "cc/animation/timing_function.h" | 15 #include "cc/animation/timing_function.h" |
16 #include "cc/base/switches.h" | 16 #include "cc/base/switches.h" |
17 #include "cc/input/input_handler.h" | 17 #include "cc/input/input_handler.h" |
18 #include "cc/layers/layer.h" | 18 #include "cc/layers/layer.h" |
19 #include "cc/layers/layer_impl.h" | 19 #include "cc/layers/layer_impl.h" |
| 20 #include "cc/proto/compositor_message_to_impl.pb.h" |
20 #include "cc/test/animation_test_common.h" | 21 #include "cc/test/animation_test_common.h" |
21 #include "cc/test/begin_frame_args_test.h" | 22 #include "cc/test/begin_frame_args_test.h" |
22 #include "cc/test/fake_external_begin_frame_source.h" | 23 #include "cc/test/fake_external_begin_frame_source.h" |
23 #include "cc/test/fake_layer_tree_host_client.h" | 24 #include "cc/test/fake_layer_tree_host_client.h" |
24 #include "cc/test/fake_output_surface.h" | 25 #include "cc/test/fake_output_surface.h" |
| 26 #include "cc/test/remote_channel_impl_for_test.h" |
25 #include "cc/test/test_context_provider.h" | 27 #include "cc/test/test_context_provider.h" |
26 #include "cc/test/test_gpu_memory_buffer_manager.h" | 28 #include "cc/test/test_gpu_memory_buffer_manager.h" |
27 #include "cc/test/test_shared_bitmap_manager.h" | 29 #include "cc/test/test_shared_bitmap_manager.h" |
28 #include "cc/test/test_task_graph_runner.h" | 30 #include "cc/test/test_task_graph_runner.h" |
| 31 #include "cc/test/threaded_channel_for_test.h" |
29 #include "cc/trees/layer_tree_host_client.h" | 32 #include "cc/trees/layer_tree_host_client.h" |
30 #include "cc/trees/layer_tree_host_impl.h" | 33 #include "cc/trees/layer_tree_host_impl.h" |
31 #include "cc/trees/layer_tree_host_single_thread_client.h" | 34 #include "cc/trees/layer_tree_host_single_thread_client.h" |
32 #include "cc/trees/layer_tree_impl.h" | 35 #include "cc/trees/layer_tree_impl.h" |
33 #include "cc/trees/proxy_impl.h" | 36 #include "cc/trees/proxy_impl.h" |
34 #include "cc/trees/proxy_main.h" | 37 #include "cc/trees/proxy_main.h" |
35 #include "cc/trees/single_thread_proxy.h" | 38 #include "cc/trees/single_thread_proxy.h" |
36 #include "cc/trees/threaded_channel.h" | 39 #include "cc/trees/threaded_channel.h" |
37 #include "testing/gmock/include/gmock/gmock.h" | 40 #include "testing/gmock/include/gmock/gmock.h" |
38 #include "ui/gfx/geometry/size_conversions.h" | 41 #include "ui/gfx/geometry/size_conversions.h" |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 TestHooks* test_hooks_; | 423 TestHooks* test_hooks_; |
421 }; | 424 }; |
422 | 425 |
423 // Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. | 426 // Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. |
424 class LayerTreeHostForTesting : public LayerTreeHost { | 427 class LayerTreeHostForTesting : public LayerTreeHost { |
425 public: | 428 public: |
426 static scoped_ptr<LayerTreeHostForTesting> Create( | 429 static scoped_ptr<LayerTreeHostForTesting> Create( |
427 TestHooks* test_hooks, | 430 TestHooks* test_hooks, |
428 CompositorMode mode, | 431 CompositorMode mode, |
429 LayerTreeHostClientForTesting* client, | 432 LayerTreeHostClientForTesting* client, |
| 433 RemoteProtoChannel* remote_proto_channel, |
430 SharedBitmapManager* shared_bitmap_manager, | 434 SharedBitmapManager* shared_bitmap_manager, |
431 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 435 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
432 TaskGraphRunner* task_graph_runner, | 436 TaskGraphRunner* task_graph_runner, |
433 const LayerTreeSettings& settings, | 437 const LayerTreeSettings& settings, |
434 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 438 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
435 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 439 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
436 scoped_ptr<BeginFrameSource> external_begin_frame_source) { | 440 scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
437 LayerTreeHost::InitParams params; | 441 LayerTreeHost::InitParams params; |
438 params.client = client; | 442 params.client = client; |
439 params.shared_bitmap_manager = shared_bitmap_manager; | 443 params.shared_bitmap_manager = shared_bitmap_manager; |
440 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; | 444 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; |
441 params.task_graph_runner = task_graph_runner; | 445 params.task_graph_runner = task_graph_runner; |
442 params.settings = &settings; | 446 params.settings = &settings; |
443 scoped_ptr<LayerTreeHostForTesting> layer_tree_host( | 447 scoped_ptr<LayerTreeHostForTesting> layer_tree_host( |
444 new LayerTreeHostForTesting(test_hooks, ¶ms, mode)); | 448 new LayerTreeHostForTesting(test_hooks, ¶ms, mode)); |
445 scoped_ptr<TaskRunnerProvider> task_runner_provider = | 449 scoped_ptr<TaskRunnerProvider> task_runner_provider = |
446 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); | 450 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); |
447 scoped_ptr<Proxy> proxy; | 451 scoped_ptr<Proxy> proxy; |
448 if (mode == CompositorMode::Threaded) { | 452 switch (mode) { |
449 DCHECK(impl_task_runner.get()); | 453 case CompositorMode::SINGLE_THREADED: |
450 scoped_ptr<ProxyMain> proxy_main = ProxyMainForTest::CreateThreaded( | 454 proxy = SingleThreadProxyForTest::Create(test_hooks, |
451 test_hooks, layer_tree_host.get(), task_runner_provider.get()); | 455 layer_tree_host.get(), client, |
452 proxy = std::move(proxy_main); | 456 task_runner_provider.get()); |
453 } else { | 457 break; |
454 proxy = | 458 case CompositorMode::THREADED: |
455 SingleThreadProxyForTest::Create(test_hooks, layer_tree_host.get(), | 459 DCHECK(impl_task_runner.get()); |
456 client, task_runner_provider.get()); | 460 proxy = ProxyMainForTest::CreateThreaded( |
| 461 test_hooks, layer_tree_host.get(), task_runner_provider.get()); |
| 462 break; |
| 463 case CompositorMode::REMOTE: |
| 464 DCHECK(!external_begin_frame_source); |
| 465 // The Remote LayerTreeHost on the client has the impl task runner. |
| 466 if (task_runner_provider->HasImplThread()) { |
| 467 proxy = RemoteChannelImplForTest::Create( |
| 468 test_hooks, layer_tree_host.get(), remote_proto_channel, |
| 469 task_runner_provider.get()); |
| 470 } else { |
| 471 proxy = ProxyMainForTest::CreateRemote( |
| 472 test_hooks, remote_proto_channel, layer_tree_host.get(), |
| 473 task_runner_provider.get()); |
| 474 } |
| 475 break; |
457 } | 476 } |
458 layer_tree_host->InitializeForTesting( | 477 layer_tree_host->InitializeForTesting( |
459 std::move(task_runner_provider), std::move(proxy), | 478 std::move(task_runner_provider), std::move(proxy), |
460 std::move(external_begin_frame_source)); | 479 std::move(external_begin_frame_source)); |
461 return layer_tree_host; | 480 return layer_tree_host; |
462 } | 481 } |
463 | 482 |
464 scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( | 483 scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( |
465 LayerTreeHostImplClient* host_impl_client) override { | 484 LayerTreeHostImplClient* host_impl_client) override { |
466 return LayerTreeHostImplForTesting::Create( | 485 return LayerTreeHostImplForTesting::Create( |
(...skipping 24 matching lines...) Expand all Loading... |
491 test_hooks_(test_hooks), | 510 test_hooks_(test_hooks), |
492 test_started_(false) {} | 511 test_started_(false) {} |
493 | 512 |
494 TestHooks* test_hooks_; | 513 TestHooks* test_hooks_; |
495 bool test_started_; | 514 bool test_started_; |
496 }; | 515 }; |
497 | 516 |
498 LayerTreeTest::LayerTreeTest() | 517 LayerTreeTest::LayerTreeTest() |
499 : output_surface_(nullptr), | 518 : output_surface_(nullptr), |
500 external_begin_frame_source_(nullptr), | 519 external_begin_frame_source_(nullptr), |
| 520 remote_proto_channel_bridge_(this), |
501 beginning_(false), | 521 beginning_(false), |
502 end_when_begin_returns_(false), | 522 end_when_begin_returns_(false), |
503 timed_out_(false), | 523 timed_out_(false), |
504 scheduled_(false), | 524 scheduled_(false), |
505 started_(false), | 525 started_(false), |
506 ended_(false), | 526 ended_(false), |
507 delegating_renderer_(false), | 527 delegating_renderer_(false), |
508 verify_property_trees_(true), | 528 verify_property_trees_(true), |
509 timeout_seconds_(0), | 529 timeout_seconds_(0), |
510 weak_factory_(this) { | 530 weak_factory_(this) { |
511 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); | 531 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); |
512 | 532 |
513 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was | 533 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was |
514 // specified (for running in a debugger). | 534 // specified (for running in a debugger). |
515 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 535 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
516 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) | 536 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) |
517 timeout_seconds_ = 5; | 537 timeout_seconds_ = 5; |
518 } | 538 } |
519 | 539 |
520 LayerTreeTest::~LayerTreeTest() {} | 540 LayerTreeTest::~LayerTreeTest() {} |
521 | 541 |
| 542 Proxy* LayerTreeTest::remote_client_proxy() const { |
| 543 DCHECK(IsRemoteTest()); |
| 544 return remote_client_layer_tree_host_ |
| 545 ? remote_client_layer_tree_host_->proxy() |
| 546 : nullptr; |
| 547 } |
| 548 |
| 549 bool LayerTreeTest::IsRemoteTest() const { |
| 550 return mode_ == CompositorMode::REMOTE; |
| 551 } |
| 552 |
522 void LayerTreeTest::EndTest() { | 553 void LayerTreeTest::EndTest() { |
523 if (ended_) | 554 if (ended_) |
524 return; | 555 return; |
525 ended_ = true; | 556 ended_ = true; |
526 | 557 |
527 // For the case where we EndTest during BeginTest(), set a flag to indicate | 558 // For the case where we EndTest during BeginTest(), set a flag to indicate |
528 // that the test should end the second BeginTest regains control. | 559 // that the test should end the second BeginTest regains control. |
529 if (beginning_) { | 560 if (beginning_) { |
530 end_when_begin_returns_ = true; | 561 end_when_begin_returns_ = true; |
531 } else { | 562 } else { |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 | 693 |
663 void LayerTreeTest::WillBeginTest() { | 694 void LayerTreeTest::WillBeginTest() { |
664 layer_tree_host_->SetVisible(true); | 695 layer_tree_host_->SetVisible(true); |
665 } | 696 } |
666 | 697 |
667 void LayerTreeTest::DoBeginTest() { | 698 void LayerTreeTest::DoBeginTest() { |
668 client_ = LayerTreeHostClientForTesting::Create(this); | 699 client_ = LayerTreeHostClientForTesting::Create(this); |
669 | 700 |
670 scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; | 701 scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; |
671 if (settings_.use_external_begin_frame_source) { | 702 if (settings_.use_external_begin_frame_source) { |
| 703 DCHECK(!IsRemoteTest()); |
672 external_begin_frame_source.reset(new FakeExternalBeginFrameSource( | 704 external_begin_frame_source.reset(new FakeExternalBeginFrameSource( |
673 settings_.renderer_settings.refresh_rate)); | 705 settings_.renderer_settings.refresh_rate)); |
674 external_begin_frame_source_ = external_begin_frame_source.get(); | 706 external_begin_frame_source_ = external_begin_frame_source.get(); |
675 } | 707 } |
676 | 708 |
677 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); | 709 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); |
678 layer_tree_host_ = LayerTreeHostForTesting::Create( | 710 |
679 this, mode_, client_.get(), shared_bitmap_manager_.get(), | 711 if (IsRemoteTest()) { |
680 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, | 712 DCHECK(impl_thread_); |
681 base::ThreadTaskRunnerHandle::Get(), | 713 layer_tree_host_ = LayerTreeHostForTesting::Create( |
682 impl_thread_ ? impl_thread_->task_runner() : NULL, | 714 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_main, |
683 std::move(external_begin_frame_source)); | 715 nullptr, nullptr, task_graph_runner_.get(), settings_, |
| 716 base::ThreadTaskRunnerHandle::Get(), nullptr, |
| 717 std::move(external_begin_frame_source)); |
| 718 DCHECK(remote_proto_channel_bridge_.channel_main.HasReceiver()); |
| 719 } else { |
| 720 layer_tree_host_ = LayerTreeHostForTesting::Create( |
| 721 this, mode_, client_.get(), nullptr, shared_bitmap_manager_.get(), |
| 722 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, |
| 723 base::ThreadTaskRunnerHandle::Get(), |
| 724 impl_thread_ ? impl_thread_->task_runner() : NULL, |
| 725 std::move(external_begin_frame_source)); |
| 726 } |
| 727 |
684 ASSERT_TRUE(layer_tree_host_); | 728 ASSERT_TRUE(layer_tree_host_); |
685 | 729 |
686 started_ = true; | 730 started_ = true; |
687 beginning_ = true; | 731 beginning_ = true; |
688 SetupTree(); | 732 SetupTree(); |
689 WillBeginTest(); | 733 WillBeginTest(); |
690 BeginTest(); | 734 BeginTest(); |
691 beginning_ = false; | 735 beginning_ = false; |
692 if (end_when_begin_returns_) | 736 if (end_when_begin_returns_) |
693 RealEndTest(); | 737 RealEndTest(); |
(...skipping 20 matching lines...) Expand all Loading... |
714 layer_tree_host_->root_layer()->SetIsDrawable(true); | 758 layer_tree_host_->root_layer()->SetIsDrawable(true); |
715 } | 759 } |
716 | 760 |
717 void LayerTreeTest::Timeout() { | 761 void LayerTreeTest::Timeout() { |
718 timed_out_ = true; | 762 timed_out_ = true; |
719 EndTest(); | 763 EndTest(); |
720 } | 764 } |
721 | 765 |
722 void LayerTreeTest::RealEndTest() { | 766 void LayerTreeTest::RealEndTest() { |
723 // TODO(mithro): Make this method only end when not inside an impl frame. | 767 // TODO(mithro): Make this method only end when not inside an impl frame. |
724 if (layer_tree_host_ && !timed_out_ && | 768 bool main_frame_will_happen; |
725 proxy()->MainFrameWillHappenForTesting()) { | 769 if (IsRemoteTest()) { |
| 770 main_frame_will_happen = |
| 771 remote_client_layer_tree_host_ |
| 772 ? remote_client_proxy()->MainFrameWillHappenForTesting() |
| 773 : false; |
| 774 } else { |
| 775 main_frame_will_happen = |
| 776 layer_tree_host_ ? proxy()->MainFrameWillHappenForTesting() : false; |
| 777 } |
| 778 |
| 779 if (main_frame_will_happen && !timed_out_) { |
726 main_task_runner_->PostTask( | 780 main_task_runner_->PostTask( |
727 FROM_HERE, | 781 FROM_HERE, |
728 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); | 782 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); |
729 return; | 783 return; |
730 } | 784 } |
731 | 785 |
732 base::MessageLoop::current()->QuitWhenIdle(); | 786 base::MessageLoop::current()->QuitWhenIdle(); |
733 } | 787 } |
734 | 788 |
735 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, | 789 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 } | 862 } |
809 | 863 |
810 void LayerTreeTest::DispatchNextCommitWaitsForActivation() { | 864 void LayerTreeTest::DispatchNextCommitWaitsForActivation() { |
811 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread()); | 865 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread()); |
812 if (layer_tree_host_) | 866 if (layer_tree_host_) |
813 layer_tree_host_->SetNextCommitWaitsForActivation(); | 867 layer_tree_host_->SetNextCommitWaitsForActivation(); |
814 } | 868 } |
815 | 869 |
816 void LayerTreeTest::RunTest(CompositorMode mode, bool delegating_renderer) { | 870 void LayerTreeTest::RunTest(CompositorMode mode, bool delegating_renderer) { |
817 mode_ = mode; | 871 mode_ = mode; |
818 if (mode_ == CompositorMode::Threaded) { | 872 if (mode_ == CompositorMode::THREADED || mode_ == CompositorMode::REMOTE) { |
819 impl_thread_.reset(new base::Thread("Compositor")); | 873 impl_thread_.reset(new base::Thread("Compositor")); |
820 ASSERT_TRUE(impl_thread_->Start()); | 874 ASSERT_TRUE(impl_thread_->Start()); |
821 } | 875 } |
822 | 876 |
823 main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | 877 main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
824 | 878 |
825 shared_bitmap_manager_.reset(new TestSharedBitmapManager); | 879 shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
826 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); | 880 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); |
827 task_graph_runner_.reset(new TestTaskGraphRunner); | 881 task_graph_runner_.reset(new TestTaskGraphRunner); |
828 | 882 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 if (impl->active_tree()) | 952 if (impl->active_tree()) |
899 return impl->active_tree()->source_frame_number(); | 953 return impl->active_tree()->source_frame_number(); |
900 // Source frames start at 0, so this is invalid. | 954 // Source frames start at 0, so this is invalid. |
901 return -1; | 955 return -1; |
902 } | 956 } |
903 | 957 |
904 void LayerTreeTest::DestroyLayerTreeHost() { | 958 void LayerTreeTest::DestroyLayerTreeHost() { |
905 if (layer_tree_host_ && layer_tree_host_->root_layer()) | 959 if (layer_tree_host_ && layer_tree_host_->root_layer()) |
906 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); | 960 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); |
907 layer_tree_host_ = nullptr; | 961 layer_tree_host_ = nullptr; |
| 962 |
| 963 DCHECK(!remote_proto_channel_bridge_.channel_main.HasReceiver()); |
| 964 |
| 965 // Destroying the LayerTreeHost should destroy the remote client |
| 966 // LayerTreeHost. |
| 967 DCHECK(!remote_client_layer_tree_host_); |
| 968 } |
| 969 |
| 970 void LayerTreeTest::DestroyRemoteClientHost() { |
| 971 DCHECK(IsRemoteTest()); |
| 972 DCHECK(remote_client_layer_tree_host_); |
| 973 |
| 974 remote_client_layer_tree_host_ = nullptr; |
| 975 DCHECK(!remote_proto_channel_bridge_.channel_impl.HasReceiver()); |
| 976 } |
| 977 |
| 978 void LayerTreeTest::CreateRemoteClientHost( |
| 979 const proto::CompositorMessageToImpl& proto) { |
| 980 DCHECK(IsRemoteTest()); |
| 981 DCHECK(!remote_client_layer_tree_host_); |
| 982 DCHECK(impl_thread_); |
| 983 DCHECK(proto.message_type() == |
| 984 proto::CompositorMessageToImpl::INITIALIZE_IMPL); |
| 985 |
| 986 proto::InitializeImpl initialize_proto = proto.initialize_impl_message(); |
| 987 LayerTreeSettings settings; |
| 988 settings.FromProtobuf(initialize_proto.layer_tree_settings()); |
| 989 remote_client_layer_tree_host_ = LayerTreeHostForTesting::Create( |
| 990 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_impl, |
| 991 nullptr, nullptr, task_graph_runner_.get(), settings, |
| 992 base::ThreadTaskRunnerHandle::Get(), impl_thread_->task_runner(), |
| 993 nullptr); |
| 994 |
| 995 DCHECK(remote_proto_channel_bridge_.channel_impl.HasReceiver()); |
| 996 DCHECK(task_runner_provider()->HasImplThread()); |
908 } | 997 } |
909 | 998 |
910 TaskGraphRunner* LayerTreeTest::task_graph_runner() const { | 999 TaskGraphRunner* LayerTreeTest::task_graph_runner() const { |
911 return task_graph_runner_.get(); | 1000 return task_graph_runner_.get(); |
912 } | 1001 } |
913 | 1002 |
| 1003 TaskRunnerProvider* LayerTreeTest::task_runner_provider() const { |
| 1004 // All LayerTreeTests can use the task runner provider to access the impl |
| 1005 // thread. In the remote mode, the impl thread of the compositor lives on |
| 1006 // the client, so return the task runner provider owned by the remote client |
| 1007 // LayerTreeHost. |
| 1008 if (IsRemoteTest()) { |
| 1009 return remote_client_layer_tree_host_ |
| 1010 ? remote_client_layer_tree_host_->task_runner_provider() |
| 1011 : nullptr; |
| 1012 } |
| 1013 return layer_tree_host_ ? layer_tree_host_->task_runner_provider() : nullptr; |
| 1014 } |
| 1015 |
914 LayerTreeHost* LayerTreeTest::layer_tree_host() { | 1016 LayerTreeHost* LayerTreeTest::layer_tree_host() { |
915 // We check for a null task_runner_provider here as we sometimes ask for the | 1017 // We check for a null task_runner_provider here as we sometimes ask for the |
916 // layer tree host when the task_runner_provider does not exist, often for | 1018 // layer tree host when the task_runner_provider does not exist, often for |
917 // checking settings after a test has completed. For example, | 1019 // checking settings after a test has completed. For example, |
918 // LTHPixelResourceTest::RunPixelResourceTest. See elsewhere in this file for | 1020 // LTHPixelResourceTest::RunPixelResourceTest. See elsewhere in this file for |
919 // other examples. | 1021 // other examples. |
920 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread() || | 1022 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread() || |
921 task_runner_provider()->IsMainThreadBlocked()); | 1023 task_runner_provider()->IsMainThreadBlocked()); |
922 return layer_tree_host_.get(); | 1024 return layer_tree_host_.get(); |
923 } | 1025 } |
924 | 1026 |
925 ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const { | 1027 ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const { |
926 DCHECK(HasImplThread()); | 1028 DCHECK(HasImplThread()); |
927 return static_cast<ProxyMainForTest*>(proxy()); | 1029 return static_cast<ProxyMainForTest*>(proxy()); |
928 } | 1030 } |
929 | 1031 |
930 ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const { | 1032 ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const { |
931 DCHECK(HasImplThread()); | 1033 DCHECK(HasImplThread()); |
932 ThreadedChannel* threaded_channel = | 1034 |
933 static_cast<ThreadedChannel*>(GetProxyMainForTest()->channel_main()); | 1035 if (IsRemoteTest()) { |
934 ProxyImpl* proxy_impl = threaded_channel->GetProxyImplForTesting(); | 1036 return GetRemoteChannelImplForTest()->proxy_impl_for_test(); |
| 1037 } |
| 1038 |
| 1039 ProxyImplForTest* proxy_impl_for_test = |
| 1040 GetThreadedChannelForTest()->proxy_impl_for_test(); |
935 | 1041 |
936 // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel | 1042 // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel |
937 // only after it is initialized. | 1043 // only after it is initialized. |
938 DCHECK(proxy_impl); | 1044 DCHECK(proxy_impl_for_test); |
939 return static_cast<ProxyImplForTest*>(proxy_impl); | 1045 return proxy_impl_for_test; |
| 1046 } |
| 1047 |
| 1048 ThreadedChannelForTest* LayerTreeTest::GetThreadedChannelForTest() const { |
| 1049 DCHECK(mode_ == CompositorMode::THREADED); |
| 1050 |
| 1051 return GetProxyMainForTest()->threaded_channel_for_test(); |
| 1052 } |
| 1053 |
| 1054 RemoteChannelImplForTest* LayerTreeTest::GetRemoteChannelImplForTest() const { |
| 1055 DCHECK(IsRemoteTest()); |
| 1056 DCHECK(remote_client_layer_tree_host_); |
| 1057 |
| 1058 return static_cast<RemoteChannelImplForTest*>( |
| 1059 remote_client_layer_tree_host_->proxy()); |
940 } | 1060 } |
941 | 1061 |
942 } // namespace cc | 1062 } // namespace cc |
OLD | NEW |