Chromium Code Reviews| 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; | |
| 476 default: | |
|
vmpstr
2016/01/28 22:48:27
nit: Don't add default if you're handling all case
Khushal
2016/01/29 00:08:00
done.
| |
| 477 NOTREACHED(); | |
| 457 } | 478 } |
| 458 layer_tree_host->InitializeForTesting( | 479 layer_tree_host->InitializeForTesting( |
| 459 std::move(task_runner_provider), std::move(proxy), | 480 std::move(task_runner_provider), std::move(proxy), |
| 460 std::move(external_begin_frame_source)); | 481 std::move(external_begin_frame_source)); |
| 461 return layer_tree_host; | 482 return layer_tree_host; |
| 462 } | 483 } |
| 463 | 484 |
| 464 scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( | 485 scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( |
| 465 LayerTreeHostImplClient* host_impl_client) override { | 486 LayerTreeHostImplClient* host_impl_client) override { |
| 466 return LayerTreeHostImplForTesting::Create( | 487 return LayerTreeHostImplForTesting::Create( |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 491 test_hooks_(test_hooks), | 512 test_hooks_(test_hooks), |
| 492 test_started_(false) {} | 513 test_started_(false) {} |
| 493 | 514 |
| 494 TestHooks* test_hooks_; | 515 TestHooks* test_hooks_; |
| 495 bool test_started_; | 516 bool test_started_; |
| 496 }; | 517 }; |
| 497 | 518 |
| 498 LayerTreeTest::LayerTreeTest() | 519 LayerTreeTest::LayerTreeTest() |
| 499 : output_surface_(nullptr), | 520 : output_surface_(nullptr), |
| 500 external_begin_frame_source_(nullptr), | 521 external_begin_frame_source_(nullptr), |
| 522 remote_proto_channel_bridge_(this), | |
| 501 beginning_(false), | 523 beginning_(false), |
| 502 end_when_begin_returns_(false), | 524 end_when_begin_returns_(false), |
| 503 timed_out_(false), | 525 timed_out_(false), |
| 504 scheduled_(false), | 526 scheduled_(false), |
| 505 started_(false), | 527 started_(false), |
| 506 ended_(false), | 528 ended_(false), |
| 507 delegating_renderer_(false), | 529 delegating_renderer_(false), |
| 508 verify_property_trees_(true), | 530 verify_property_trees_(true), |
| 509 timeout_seconds_(0), | 531 timeout_seconds_(0), |
| 510 weak_factory_(this) { | 532 weak_factory_(this) { |
| 511 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); | 533 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); |
| 512 | 534 |
| 513 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was | 535 // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was |
| 514 // specified (for running in a debugger). | 536 // specified (for running in a debugger). |
| 515 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 537 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 516 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) | 538 if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) |
| 517 timeout_seconds_ = 5; | 539 timeout_seconds_ = 5; |
| 518 } | 540 } |
| 519 | 541 |
| 520 LayerTreeTest::~LayerTreeTest() {} | 542 LayerTreeTest::~LayerTreeTest() {} |
| 521 | 543 |
| 544 Proxy* LayerTreeTest::remote_client_proxy() const { | |
| 545 DCHECK(IsRemoteTest()); | |
| 546 return remote_client_layer_tree_host_ | |
| 547 ? remote_client_layer_tree_host_->proxy() | |
| 548 : nullptr; | |
| 549 } | |
| 550 | |
| 551 bool LayerTreeTest::IsRemoteTest() const { | |
| 552 return mode_ == CompositorMode::REMOTE; | |
| 553 } | |
| 554 | |
| 522 void LayerTreeTest::EndTest() { | 555 void LayerTreeTest::EndTest() { |
| 523 if (ended_) | 556 if (ended_) |
| 524 return; | 557 return; |
| 525 ended_ = true; | 558 ended_ = true; |
| 526 | 559 |
| 527 // For the case where we EndTest during BeginTest(), set a flag to indicate | 560 // For the case where we EndTest during BeginTest(), set a flag to indicate |
| 528 // that the test should end the second BeginTest regains control. | 561 // that the test should end the second BeginTest regains control. |
| 529 if (beginning_) { | 562 if (beginning_) { |
| 530 end_when_begin_returns_ = true; | 563 end_when_begin_returns_ = true; |
| 531 } else { | 564 } else { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 662 | 695 |
| 663 void LayerTreeTest::WillBeginTest() { | 696 void LayerTreeTest::WillBeginTest() { |
| 664 layer_tree_host_->SetVisible(true); | 697 layer_tree_host_->SetVisible(true); |
| 665 } | 698 } |
| 666 | 699 |
| 667 void LayerTreeTest::DoBeginTest() { | 700 void LayerTreeTest::DoBeginTest() { |
| 668 client_ = LayerTreeHostClientForTesting::Create(this); | 701 client_ = LayerTreeHostClientForTesting::Create(this); |
| 669 | 702 |
| 670 scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; | 703 scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; |
| 671 if (settings_.use_external_begin_frame_source) { | 704 if (settings_.use_external_begin_frame_source) { |
| 705 DCHECK(!IsRemoteTest()); | |
| 672 external_begin_frame_source.reset(new FakeExternalBeginFrameSource( | 706 external_begin_frame_source.reset(new FakeExternalBeginFrameSource( |
| 673 settings_.renderer_settings.refresh_rate)); | 707 settings_.renderer_settings.refresh_rate)); |
| 674 external_begin_frame_source_ = external_begin_frame_source.get(); | 708 external_begin_frame_source_ = external_begin_frame_source.get(); |
| 675 } | 709 } |
| 676 | 710 |
| 677 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); | 711 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); |
| 678 layer_tree_host_ = LayerTreeHostForTesting::Create( | 712 |
| 679 this, mode_, client_.get(), shared_bitmap_manager_.get(), | 713 if (IsRemoteTest()) { |
| 680 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, | 714 DCHECK(impl_thread_); |
| 681 base::ThreadTaskRunnerHandle::Get(), | 715 layer_tree_host_ = LayerTreeHostForTesting::Create( |
| 682 impl_thread_ ? impl_thread_->task_runner() : NULL, | 716 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_main, |
| 683 std::move(external_begin_frame_source)); | 717 nullptr, nullptr, task_graph_runner_.get(), settings_, |
| 718 base::ThreadTaskRunnerHandle::Get(), nullptr, | |
| 719 std::move(external_begin_frame_source)); | |
| 720 DCHECK(remote_proto_channel_bridge_.channel_main.HasReceiver()); | |
| 721 } else { | |
| 722 layer_tree_host_ = LayerTreeHostForTesting::Create( | |
| 723 this, mode_, client_.get(), nullptr, shared_bitmap_manager_.get(), | |
| 724 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, | |
| 725 base::ThreadTaskRunnerHandle::Get(), | |
| 726 impl_thread_ ? impl_thread_->task_runner() : NULL, | |
| 727 std::move(external_begin_frame_source)); | |
| 728 } | |
| 729 | |
| 684 ASSERT_TRUE(layer_tree_host_); | 730 ASSERT_TRUE(layer_tree_host_); |
| 685 | 731 |
| 686 started_ = true; | 732 started_ = true; |
| 687 beginning_ = true; | 733 beginning_ = true; |
| 688 SetupTree(); | 734 SetupTree(); |
| 689 WillBeginTest(); | 735 WillBeginTest(); |
| 690 BeginTest(); | 736 BeginTest(); |
| 691 beginning_ = false; | 737 beginning_ = false; |
| 692 if (end_when_begin_returns_) | 738 if (end_when_begin_returns_) |
| 693 RealEndTest(); | 739 RealEndTest(); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 714 layer_tree_host_->root_layer()->SetIsDrawable(true); | 760 layer_tree_host_->root_layer()->SetIsDrawable(true); |
| 715 } | 761 } |
| 716 | 762 |
| 717 void LayerTreeTest::Timeout() { | 763 void LayerTreeTest::Timeout() { |
| 718 timed_out_ = true; | 764 timed_out_ = true; |
| 719 EndTest(); | 765 EndTest(); |
| 720 } | 766 } |
| 721 | 767 |
| 722 void LayerTreeTest::RealEndTest() { | 768 void LayerTreeTest::RealEndTest() { |
| 723 // TODO(mithro): Make this method only end when not inside an impl frame. | 769 // TODO(mithro): Make this method only end when not inside an impl frame. |
| 724 if (layer_tree_host_ && !timed_out_ && | 770 bool main_frame_will_happen; |
| 725 proxy()->MainFrameWillHappenForTesting()) { | 771 if (IsRemoteTest()) { |
| 772 main_frame_will_happen = | |
| 773 remote_client_layer_tree_host_ | |
| 774 ? remote_client_proxy()->MainFrameWillHappenForTesting() | |
| 775 : false; | |
| 776 } else { | |
| 777 main_frame_will_happen = | |
| 778 layer_tree_host_ ? proxy()->MainFrameWillHappenForTesting() : false; | |
| 779 } | |
| 780 | |
| 781 if (main_frame_will_happen && !timed_out_) { | |
| 726 main_task_runner_->PostTask( | 782 main_task_runner_->PostTask( |
| 727 FROM_HERE, | 783 FROM_HERE, |
| 728 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); | 784 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); |
| 729 return; | 785 return; |
| 730 } | 786 } |
| 731 | 787 |
| 732 base::MessageLoop::current()->QuitWhenIdle(); | 788 base::MessageLoop::current()->QuitWhenIdle(); |
| 733 } | 789 } |
| 734 | 790 |
| 735 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, | 791 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 808 } | 864 } |
| 809 | 865 |
| 810 void LayerTreeTest::DispatchNextCommitWaitsForActivation() { | 866 void LayerTreeTest::DispatchNextCommitWaitsForActivation() { |
| 811 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread()); | 867 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread()); |
| 812 if (layer_tree_host_) | 868 if (layer_tree_host_) |
| 813 layer_tree_host_->SetNextCommitWaitsForActivation(); | 869 layer_tree_host_->SetNextCommitWaitsForActivation(); |
| 814 } | 870 } |
| 815 | 871 |
| 816 void LayerTreeTest::RunTest(CompositorMode mode, bool delegating_renderer) { | 872 void LayerTreeTest::RunTest(CompositorMode mode, bool delegating_renderer) { |
| 817 mode_ = mode; | 873 mode_ = mode; |
| 818 if (mode_ == CompositorMode::Threaded) { | 874 if (mode_ == CompositorMode::THREADED || mode_ == CompositorMode::REMOTE) { |
| 819 impl_thread_.reset(new base::Thread("Compositor")); | 875 impl_thread_.reset(new base::Thread("Compositor")); |
| 820 ASSERT_TRUE(impl_thread_->Start()); | 876 ASSERT_TRUE(impl_thread_->Start()); |
| 821 } | 877 } |
| 822 | 878 |
| 823 main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | 879 main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
| 824 | 880 |
| 825 shared_bitmap_manager_.reset(new TestSharedBitmapManager); | 881 shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
| 826 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); | 882 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); |
| 827 task_graph_runner_.reset(new TestTaskGraphRunner); | 883 task_graph_runner_.reset(new TestTaskGraphRunner); |
| 828 | 884 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 898 if (impl->active_tree()) | 954 if (impl->active_tree()) |
| 899 return impl->active_tree()->source_frame_number(); | 955 return impl->active_tree()->source_frame_number(); |
| 900 // Source frames start at 0, so this is invalid. | 956 // Source frames start at 0, so this is invalid. |
| 901 return -1; | 957 return -1; |
| 902 } | 958 } |
| 903 | 959 |
| 904 void LayerTreeTest::DestroyLayerTreeHost() { | 960 void LayerTreeTest::DestroyLayerTreeHost() { |
| 905 if (layer_tree_host_ && layer_tree_host_->root_layer()) | 961 if (layer_tree_host_ && layer_tree_host_->root_layer()) |
| 906 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); | 962 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); |
| 907 layer_tree_host_ = nullptr; | 963 layer_tree_host_ = nullptr; |
| 964 | |
| 965 DCHECK(!remote_proto_channel_bridge_.channel_main.HasReceiver()); | |
| 966 | |
| 967 // Destroying the LayerTreeHost should destroy the remote client | |
| 968 // LayerTreeHost. | |
| 969 DCHECK(!remote_client_layer_tree_host_); | |
| 970 } | |
| 971 | |
| 972 void LayerTreeTest::DestroyRemoteClientHost() { | |
| 973 DCHECK(IsRemoteTest()); | |
| 974 DCHECK(remote_client_layer_tree_host_); | |
| 975 | |
| 976 remote_client_layer_tree_host_ = nullptr; | |
| 977 DCHECK(!remote_proto_channel_bridge_.channel_impl.HasReceiver()); | |
| 978 } | |
| 979 | |
| 980 void LayerTreeTest::CreateRemoteClientHost( | |
| 981 const proto::CompositorMessageToImpl& proto) { | |
| 982 DCHECK(IsRemoteTest()); | |
| 983 DCHECK(!remote_client_layer_tree_host_); | |
| 984 DCHECK(impl_thread_); | |
| 985 DCHECK(proto.message_type() == | |
| 986 proto::CompositorMessageToImpl::INITIALIZE_IMPL); | |
| 987 | |
| 988 proto::InitializeImpl initialize_proto = proto.initialize_impl_message(); | |
| 989 LayerTreeSettings settings; | |
| 990 settings.FromProtobuf(initialize_proto.layer_tree_settings()); | |
| 991 remote_client_layer_tree_host_ = LayerTreeHostForTesting::Create( | |
| 992 this, mode_, client_.get(), &remote_proto_channel_bridge_.channel_impl, | |
| 993 nullptr, nullptr, task_graph_runner_.get(), settings, | |
| 994 base::ThreadTaskRunnerHandle::Get(), impl_thread_->task_runner(), | |
| 995 nullptr); | |
| 996 | |
| 997 DCHECK(remote_proto_channel_bridge_.channel_impl.HasReceiver()); | |
| 998 DCHECK(task_runner_provider()->HasImplThread()); | |
| 908 } | 999 } |
| 909 | 1000 |
| 910 TaskGraphRunner* LayerTreeTest::task_graph_runner() const { | 1001 TaskGraphRunner* LayerTreeTest::task_graph_runner() const { |
| 911 return task_graph_runner_.get(); | 1002 return task_graph_runner_.get(); |
| 912 } | 1003 } |
| 913 | 1004 |
| 1005 TaskRunnerProvider* LayerTreeTest::task_runner_provider() const { | |
| 1006 // All LayerTreeTests can use the task runner provider to access the impl | |
| 1007 // thread. In the remote mode, the impl thread of the compositor lives on | |
| 1008 // the client, so return the task runner provider owned by the remote client | |
| 1009 // LayerTreeHost. | |
| 1010 if (IsRemoteTest()) { | |
| 1011 return remote_client_layer_tree_host_ | |
| 1012 ? remote_client_layer_tree_host_->task_runner_provider() | |
| 1013 : nullptr; | |
| 1014 } | |
| 1015 return layer_tree_host_ ? layer_tree_host_->task_runner_provider() : nullptr; | |
| 1016 } | |
| 1017 | |
| 914 LayerTreeHost* LayerTreeTest::layer_tree_host() { | 1018 LayerTreeHost* LayerTreeTest::layer_tree_host() { |
| 915 // We check for a null task_runner_provider here as we sometimes ask for the | 1019 // 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 | 1020 // layer tree host when the task_runner_provider does not exist, often for |
| 917 // checking settings after a test has completed. For example, | 1021 // checking settings after a test has completed. For example, |
| 918 // LTHPixelResourceTest::RunPixelResourceTest. See elsewhere in this file for | 1022 // LTHPixelResourceTest::RunPixelResourceTest. See elsewhere in this file for |
| 919 // other examples. | 1023 // other examples. |
| 920 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread() || | 1024 DCHECK(!task_runner_provider() || task_runner_provider()->IsMainThread() || |
| 921 task_runner_provider()->IsMainThreadBlocked()); | 1025 task_runner_provider()->IsMainThreadBlocked()); |
| 922 return layer_tree_host_.get(); | 1026 return layer_tree_host_.get(); |
| 923 } | 1027 } |
| 924 | 1028 |
| 925 ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const { | 1029 ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const { |
| 926 DCHECK(HasImplThread()); | 1030 DCHECK(HasImplThread()); |
| 927 return static_cast<ProxyMainForTest*>(proxy()); | 1031 return static_cast<ProxyMainForTest*>(proxy()); |
| 928 } | 1032 } |
| 929 | 1033 |
| 930 ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const { | 1034 ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const { |
| 931 DCHECK(HasImplThread()); | 1035 DCHECK(HasImplThread()); |
| 932 ThreadedChannel* threaded_channel = | 1036 |
| 933 static_cast<ThreadedChannel*>(GetProxyMainForTest()->channel_main()); | 1037 if (IsRemoteTest()) { |
| 934 ProxyImpl* proxy_impl = threaded_channel->GetProxyImplForTesting(); | 1038 return GetRemoteChannelImplForTest()->proxy_impl_for_test(); |
| 1039 } | |
| 1040 | |
| 1041 ProxyImplForTest* proxy_impl_for_test = | |
| 1042 GetThreadedChannelForTest()->proxy_impl_for_test(); | |
| 935 | 1043 |
| 936 // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel | 1044 // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel |
| 937 // only after it is initialized. | 1045 // only after it is initialized. |
| 938 DCHECK(proxy_impl); | 1046 DCHECK(proxy_impl_for_test); |
| 939 return static_cast<ProxyImplForTest*>(proxy_impl); | 1047 return proxy_impl_for_test; |
| 1048 } | |
| 1049 | |
| 1050 ThreadedChannelForTest* LayerTreeTest::GetThreadedChannelForTest() const { | |
| 1051 DCHECK(mode_ == CompositorMode::THREADED); | |
| 1052 | |
| 1053 return GetProxyMainForTest()->threaded_channel_for_test(); | |
| 1054 } | |
| 1055 | |
| 1056 RemoteChannelImplForTest* LayerTreeTest::GetRemoteChannelImplForTest() const { | |
| 1057 DCHECK(IsRemoteTest()); | |
| 1058 DCHECK(remote_client_layer_tree_host_); | |
| 1059 | |
| 1060 return static_cast<RemoteChannelImplForTest*>( | |
| 1061 remote_client_layer_tree_host_->proxy()); | |
| 940 } | 1062 } |
| 941 | 1063 |
| 942 } // namespace cc | 1064 } // namespace cc |
| OLD | NEW |