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 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
421 TestHooks* test_hooks_; | 424 TestHooks* test_hooks_; |
422 }; | 425 }; |
423 | 426 |
424 // Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. | 427 // Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. |
425 class LayerTreeHostForTesting : public LayerTreeHost { | 428 class LayerTreeHostForTesting : public LayerTreeHost { |
426 public: | 429 public: |
427 static scoped_ptr<LayerTreeHostForTesting> Create( | 430 static scoped_ptr<LayerTreeHostForTesting> Create( |
428 TestHooks* test_hooks, | 431 TestHooks* test_hooks, |
429 CompositorMode mode, | 432 CompositorMode mode, |
430 LayerTreeHostClientForTesting* client, | 433 LayerTreeHostClientForTesting* client, |
434 RemoteProtoChannel* remote_proto_channel, | |
431 SharedBitmapManager* shared_bitmap_manager, | 435 SharedBitmapManager* shared_bitmap_manager, |
432 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 436 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
433 TaskGraphRunner* task_graph_runner, | 437 TaskGraphRunner* task_graph_runner, |
434 const LayerTreeSettings& settings, | 438 const LayerTreeSettings& settings, |
435 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 439 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
436 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 440 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
437 scoped_ptr<BeginFrameSource> external_begin_frame_source) { | 441 scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
438 LayerTreeHost::InitParams params; | 442 LayerTreeHost::InitParams params; |
439 params.client = client; | 443 params.client = client; |
440 params.shared_bitmap_manager = shared_bitmap_manager; | 444 params.shared_bitmap_manager = shared_bitmap_manager; |
441 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; | 445 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; |
442 params.task_graph_runner = task_graph_runner; | 446 params.task_graph_runner = task_graph_runner; |
443 params.settings = &settings; | 447 params.settings = &settings; |
444 scoped_ptr<LayerTreeHostForTesting> layer_tree_host( | 448 scoped_ptr<LayerTreeHostForTesting> layer_tree_host( |
445 new LayerTreeHostForTesting(test_hooks, ¶ms, mode)); | 449 new LayerTreeHostForTesting(test_hooks, ¶ms, mode)); |
446 scoped_ptr<TaskRunnerProvider> task_runner_provider = | 450 scoped_ptr<TaskRunnerProvider> task_runner_provider = |
447 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); | 451 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); |
448 scoped_ptr<Proxy> proxy; | 452 scoped_ptr<Proxy> proxy; |
449 if (mode == CompositorMode::Threaded) { | 453 switch (mode) { |
450 DCHECK(impl_task_runner.get()); | 454 case CompositorMode::SINGLE_THREADED: |
451 scoped_ptr<ProxyMain> proxy_main = ProxyMainForTest::CreateThreaded( | 455 proxy = SingleThreadProxyForTest::Create(test_hooks, |
452 test_hooks, layer_tree_host.get(), task_runner_provider.get()); | 456 layer_tree_host.get(), client, |
453 proxy = std::move(proxy_main); | 457 task_runner_provider.get()); |
454 } else { | 458 break; |
455 proxy = | 459 case CompositorMode::THREADED: |
456 SingleThreadProxyForTest::Create(test_hooks, layer_tree_host.get(), | 460 DCHECK(impl_task_runner.get()); |
457 client, task_runner_provider.get()); | 461 proxy = ProxyMainForTest::CreateThreaded( |
462 test_hooks, layer_tree_host.get(), task_runner_provider.get()); | |
463 break; | |
464 case CompositorMode::REMOTE: | |
465 DCHECK(!external_begin_frame_source); | |
466 if (task_runner_provider->HasImplThread()) { | |
ericrk
2016/01/20 22:32:29
would it make sense to make IsRemoteClient/IsRemot
Khushal
2016/01/22 01:03:24
We pass both the task runner provider and the prox
ericrk
2016/01/22 18:36:59
ok, fair - yeah, as long as we don't have this che
| |
467 // The Remote LayerTreeHost on the client has the impl task runner. | |
468 proxy = RemoteChannelImplForTest::Create( | |
469 test_hooks, layer_tree_host.get(), remote_proto_channel, | |
470 task_runner_provider.get()); | |
471 } else { | |
472 proxy = ProxyMainForTest::CreateRemote( | |
473 test_hooks, remote_proto_channel, layer_tree_host.get(), | |
474 task_runner_provider.get()); | |
475 } | |
476 break; | |
477 default: | |
478 NOTREACHED(); | |
458 } | 479 } |
459 layer_tree_host->InitializeForTesting( | 480 layer_tree_host->InitializeForTesting( |
460 std::move(task_runner_provider), std::move(proxy), | 481 std::move(task_runner_provider), std::move(proxy), |
461 std::move(external_begin_frame_source)); | 482 std::move(external_begin_frame_source)); |
462 return layer_tree_host; | 483 return layer_tree_host; |
463 } | 484 } |
464 | 485 |
465 scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( | 486 scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( |
466 LayerTreeHostImplClient* host_impl_client) override { | 487 LayerTreeHostImplClient* host_impl_client) override { |
467 return LayerTreeHostImplForTesting::Create( | 488 return LayerTreeHostImplForTesting::Create( |
(...skipping 24 matching lines...) Expand all Loading... | |
492 test_hooks_(test_hooks), | 513 test_hooks_(test_hooks), |
493 test_started_(false) {} | 514 test_started_(false) {} |
494 | 515 |
495 TestHooks* test_hooks_; | 516 TestHooks* test_hooks_; |
496 bool test_started_; | 517 bool test_started_; |
497 }; | 518 }; |
498 | 519 |
499 LayerTreeTest::LayerTreeTest() | 520 LayerTreeTest::LayerTreeTest() |
500 : output_surface_(nullptr), | 521 : output_surface_(nullptr), |
501 external_begin_frame_source_(nullptr), | 522 external_begin_frame_source_(nullptr), |
523 remote_proto_channel_bridge_(this), | |
502 beginning_(false), | 524 beginning_(false), |
503 end_when_begin_returns_(false), | 525 end_when_begin_returns_(false), |
504 timed_out_(false), | 526 timed_out_(false), |
505 scheduled_(false), | 527 scheduled_(false), |
506 started_(false), | 528 started_(false), |
507 ended_(false), | 529 ended_(false), |
508 delegating_renderer_(false), | 530 delegating_renderer_(false), |
509 verify_property_trees_(true), | 531 verify_property_trees_(true), |
510 timeout_seconds_(0), | 532 timeout_seconds_(0), |
511 weak_factory_(this) { | 533 weak_factory_(this) { |
512 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); | 534 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); |
513 | 535 |
514 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was | 536 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was |
515 // specified (for running in a debugger). | 537 // specified (for running in a debugger). |
516 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 538 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
517 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) | 539 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) |
518 timeout_seconds_ = 5; | 540 timeout_seconds_ = 5; |
519 } | 541 } |
520 | 542 |
521 LayerTreeTest::~LayerTreeTest() {} | 543 LayerTreeTest::~LayerTreeTest() {} |
522 | 544 |
545 Proxy* LayerTreeTest::remote_client_proxy() const { | |
546 DCHECK(IsRemoteTest()); | |
547 return remote_client_layer_tree_host_ | |
548 ? remote_client_layer_tree_host_->proxy() | |
549 : nullptr; | |
550 } | |
551 | |
552 bool LayerTreeTest::IsRemoteTest() const { | |
553 return mode_ == CompositorMode::REMOTE; | |
554 } | |
555 | |
523 void LayerTreeTest::EndTest() { | 556 void LayerTreeTest::EndTest() { |
524 if (ended_) | 557 if (ended_) |
525 return; | 558 return; |
526 ended_ = true; | 559 ended_ = true; |
527 | 560 |
528 // For the case where we EndTest during BeginTest(), set a flag to indicate | 561 // For the case where we EndTest during BeginTest(), set a flag to indicate |
529 // that the test should end the second BeginTest regains control. | 562 // that the test should end the second BeginTest regains control. |
530 if (beginning_) { | 563 if (beginning_) { |
531 end_when_begin_returns_ = true; | 564 end_when_begin_returns_ = true; |
532 } else { | 565 } else { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
656 | 689 |
657 void LayerTreeTest::WillBeginTest() { | 690 void LayerTreeTest::WillBeginTest() { |
658 layer_tree_host_->SetVisible(true); | 691 layer_tree_host_->SetVisible(true); |
659 } | 692 } |
660 | 693 |
661 void LayerTreeTest::DoBeginTest() { | 694 void LayerTreeTest::DoBeginTest() { |
662 client_ = LayerTreeHostClientForTesting::Create(this); | 695 client_ = LayerTreeHostClientForTesting::Create(this); |
663 | 696 |
664 scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; | 697 scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; |
665 if (settings_.use_external_begin_frame_source) { | 698 if (settings_.use_external_begin_frame_source) { |
699 DCHECK(!IsRemoteTest()); | |
666 external_begin_frame_source.reset(new FakeExternalBeginFrameSource( | 700 external_begin_frame_source.reset(new FakeExternalBeginFrameSource( |
667 settings_.renderer_settings.refresh_rate)); | 701 settings_.renderer_settings.refresh_rate)); |
668 external_begin_frame_source_ = external_begin_frame_source.get(); | 702 external_begin_frame_source_ = external_begin_frame_source.get(); |
669 } | 703 } |
670 | 704 |
671 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); | 705 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); |
672 layer_tree_host_ = LayerTreeHostForTesting::Create( | 706 |
673 this, mode_, client_.get(), shared_bitmap_manager_.get(), | 707 if (IsRemoteTest()) { |
674 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, | 708 DCHECK(impl_thread_); |
675 base::ThreadTaskRunnerHandle::Get(), | 709 layer_tree_host_ = LayerTreeHostForTesting::Create( |
676 impl_thread_ ? impl_thread_->task_runner() : NULL, | 710 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_main, |
677 std::move(external_begin_frame_source)); | 711 nullptr, nullptr, task_graph_runner_.get(), settings_, |
712 base::ThreadTaskRunnerHandle::Get(), nullptr, | |
713 std::move(external_begin_frame_source)); | |
714 DCHECK(remote_proto_channel_bridge_.channel_main.HasReceiver()); | |
715 } else { | |
716 layer_tree_host_ = LayerTreeHostForTesting::Create( | |
717 this, mode_, client_.get(), nullptr, shared_bitmap_manager_.get(), | |
718 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, | |
719 base::ThreadTaskRunnerHandle::Get(), | |
720 impl_thread_ ? impl_thread_->task_runner() : NULL, | |
721 std::move(external_begin_frame_source)); | |
722 } | |
723 | |
678 ASSERT_TRUE(layer_tree_host_); | 724 ASSERT_TRUE(layer_tree_host_); |
679 | 725 |
680 started_ = true; | 726 started_ = true; |
681 beginning_ = true; | 727 beginning_ = true; |
682 SetupTree(); | 728 SetupTree(); |
683 WillBeginTest(); | 729 WillBeginTest(); |
684 BeginTest(); | 730 BeginTest(); |
685 beginning_ = false; | 731 beginning_ = false; |
686 if (end_when_begin_returns_) | 732 if (end_when_begin_returns_) |
687 RealEndTest(); | 733 RealEndTest(); |
(...skipping 20 matching lines...) Expand all Loading... | |
708 layer_tree_host_->root_layer()->SetIsDrawable(true); | 754 layer_tree_host_->root_layer()->SetIsDrawable(true); |
709 } | 755 } |
710 | 756 |
711 void LayerTreeTest::Timeout() { | 757 void LayerTreeTest::Timeout() { |
712 timed_out_ = true; | 758 timed_out_ = true; |
713 EndTest(); | 759 EndTest(); |
714 } | 760 } |
715 | 761 |
716 void LayerTreeTest::RealEndTest() { | 762 void LayerTreeTest::RealEndTest() { |
717 // TODO(mithro): Make this method only end when not inside an impl frame. | 763 // TODO(mithro): Make this method only end when not inside an impl frame. |
718 if (layer_tree_host_ && !timed_out_ && | 764 bool main_frame_will_happen; |
719 proxy()->MainFrameWillHappenForTesting()) { | 765 if (IsRemoteTest()) { |
766 main_frame_will_happen = | |
767 remote_client_layer_tree_host_ | |
768 ? remote_client_proxy()->MainFrameWillHappenForTesting() | |
769 : false; | |
770 } else { | |
771 main_frame_will_happen = | |
772 layer_tree_host_ ? proxy()->MainFrameWillHappenForTesting() : false; | |
773 } | |
774 | |
775 if (main_frame_will_happen && !timed_out_) { | |
720 main_task_runner_->PostTask( | 776 main_task_runner_->PostTask( |
721 FROM_HERE, | 777 FROM_HERE, |
722 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); | 778 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); |
723 return; | 779 return; |
724 } | 780 } |
725 | 781 |
726 base::MessageLoop::current()->QuitWhenIdle(); | 782 base::MessageLoop::current()->QuitWhenIdle(); |
727 } | 783 } |
728 | 784 |
729 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, | 785 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
796 } | 852 } |
797 | 853 |
798 void LayerTreeTest::DispatchCompositeImmediately() { | 854 void LayerTreeTest::DispatchCompositeImmediately() { |
799 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread()); | 855 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread()); |
800 if (layer_tree_host_) | 856 if (layer_tree_host_) |
801 layer_tree_host_->Composite(base::TimeTicks::Now()); | 857 layer_tree_host_->Composite(base::TimeTicks::Now()); |
802 } | 858 } |
803 | 859 |
804 void LayerTreeTest::RunTest(CompositorMode mode, bool delegating_renderer) { | 860 void LayerTreeTest::RunTest(CompositorMode mode, bool delegating_renderer) { |
805 mode_ = mode; | 861 mode_ = mode; |
806 if (mode_ == CompositorMode::Threaded) { | 862 if (mode_ == CompositorMode::THREADED || mode_ == CompositorMode::REMOTE) { |
807 impl_thread_.reset(new base::Thread("Compositor")); | 863 impl_thread_.reset(new base::Thread("Compositor")); |
808 ASSERT_TRUE(impl_thread_->Start()); | 864 ASSERT_TRUE(impl_thread_->Start()); |
809 } | 865 } |
810 | 866 |
811 main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | 867 main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
812 | 868 |
813 shared_bitmap_manager_.reset(new TestSharedBitmapManager); | 869 shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
814 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); | 870 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); |
815 task_graph_runner_.reset(new TestTaskGraphRunner); | 871 task_graph_runner_.reset(new TestTaskGraphRunner); |
816 | 872 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
886 if (impl->active_tree()) | 942 if (impl->active_tree()) |
887 return impl->active_tree()->source_frame_number(); | 943 return impl->active_tree()->source_frame_number(); |
888 // Source frames start at 0, so this is invalid. | 944 // Source frames start at 0, so this is invalid. |
889 return -1; | 945 return -1; |
890 } | 946 } |
891 | 947 |
892 void LayerTreeTest::DestroyLayerTreeHost() { | 948 void LayerTreeTest::DestroyLayerTreeHost() { |
893 if (layer_tree_host_ && layer_tree_host_->root_layer()) | 949 if (layer_tree_host_ && layer_tree_host_->root_layer()) |
894 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); | 950 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); |
895 layer_tree_host_ = nullptr; | 951 layer_tree_host_ = nullptr; |
952 | |
953 DCHECK(!remote_proto_channel_bridge_.channel_main.HasReceiver()); | |
954 | |
955 // Destroying the LayerTreeHost should destroy the remote client | |
956 // LayerTreeHost. | |
957 DCHECK(!remote_client_layer_tree_host_); | |
958 } | |
959 | |
960 void LayerTreeTest::DestroyRemoteClientHost() { | |
961 DCHECK(IsRemoteTest()); | |
962 DCHECK(remote_client_layer_tree_host_); | |
963 | |
964 remote_client_layer_tree_host_ = nullptr; | |
965 DCHECK(!remote_proto_channel_bridge_.channel_impl.HasReceiver()); | |
966 } | |
967 | |
968 void LayerTreeTest::CreateRemoteClientHost( | |
969 const proto::CompositorMessageToImpl& proto) { | |
970 DCHECK(IsRemoteTest()); | |
971 DCHECK(!remote_client_layer_tree_host_); | |
972 DCHECK(impl_thread_); | |
973 DCHECK(proto.message_type() == | |
974 proto::CompositorMessageToImpl::INITIALIZE_IMPL); | |
975 | |
976 proto::InitializeImpl initialize_proto = proto.initialize_impl_message(); | |
977 LayerTreeSettings settings; | |
978 settings.FromProtobuf(initialize_proto.layer_tree_settings()); | |
979 remote_client_layer_tree_host_ = LayerTreeHostForTesting::Create( | |
980 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_impl, | |
981 nullptr, nullptr, task_graph_runner_.get(), settings, | |
982 base::ThreadTaskRunnerHandle::Get(), impl_thread_->task_runner(), | |
983 nullptr); | |
984 | |
985 DCHECK(remote_proto_channel_bridge_.channel_impl.HasReceiver()); | |
896 } | 986 } |
897 | 987 |
898 TaskGraphRunner* LayerTreeTest::task_graph_runner() const { | 988 TaskGraphRunner* LayerTreeTest::task_graph_runner() const { |
899 return task_graph_runner_.get(); | 989 return task_graph_runner_.get(); |
900 } | 990 } |
901 | 991 |
902 LayerTreeHost* LayerTreeTest::layer_tree_host() { | 992 LayerTreeHost* LayerTreeTest::layer_tree_host() { |
903 // We check for a null task_runner_provider here as we sometimes ask for the | 993 // We check for a null task_runner_provider here as we sometimes ask for the |
904 // layer tree host when the task_runner_provider does not exist, often for | 994 // layer tree host when the task_runner_provider does not exist, often for |
905 // checking settings after a test has completed. For example, | 995 // checking settings after a test has completed. For example, |
906 // LTHPixelResourceTest::RunPixelResourceTest. See elsewhere in this file for | 996 // LTHPixelResourceTest::RunPixelResourceTest. See elsewhere in this file for |
907 // other examples. | 997 // other examples. |
908 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread() || | 998 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread() || |
909 task_runner_provider()->IsMainThreadBlocked()); | 999 task_runner_provider()->IsMainThreadBlocked()); |
910 return layer_tree_host_.get(); | 1000 return layer_tree_host_.get(); |
911 } | 1001 } |
912 | 1002 |
913 ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const { | 1003 ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const { |
914 DCHECK(HasImplThread()); | 1004 DCHECK(HasImplThread()); |
915 return static_cast<ProxyMainForTest*>(proxy()); | 1005 return static_cast<ProxyMainForTest*>(proxy()); |
916 } | 1006 } |
917 | 1007 |
918 ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const { | 1008 ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const { |
919 DCHECK(HasImplThread()); | 1009 DCHECK(HasImplThread()); |
920 ThreadedChannel* threaded_channel = | 1010 |
921 static_cast<ThreadedChannel*>(GetProxyMainForTest()->channel_main()); | 1011 if (IsRemoteTest()) { |
922 ProxyImpl* proxy_impl = threaded_channel->GetProxyImplForTesting(); | 1012 return GetRemoteChannelImplForTest()->proxy_impl_for_test(); |
1013 } | |
1014 | |
1015 ProxyImplForTest* proxy_impl_for_test = | |
1016 GetThreadedChannelForTest()->proxy_impl_for_test(); | |
923 | 1017 |
924 // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel | 1018 // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel |
925 // only after it is initialized. | 1019 // only after it is initialized. |
926 DCHECK(proxy_impl); | 1020 DCHECK(proxy_impl_for_test); |
927 return static_cast<ProxyImplForTest*>(proxy_impl); | 1021 return proxy_impl_for_test; |
1022 } | |
1023 | |
1024 ThreadedChannelForTest* LayerTreeTest::GetThreadedChannelForTest() const { | |
1025 DCHECK(mode_ == CompositorMode::THREADED); | |
1026 | |
1027 return GetProxyMainForTest()->threaded_channel_for_test(); | |
1028 } | |
1029 | |
1030 RemoteChannelImplForTest* LayerTreeTest::GetRemoteChannelImplForTest() const { | |
1031 DCHECK(IsRemoteTest()); | |
1032 DCHECK(remote_client_layer_tree_host_); | |
1033 | |
1034 return static_cast<RemoteChannelImplForTest*>( | |
1035 remote_client_layer_tree_host_->proxy()); | |
928 } | 1036 } |
929 | 1037 |
930 } // namespace cc | 1038 } // namespace cc |
OLD | NEW |