Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: cc/test/layer_tree_test.cc

Issue 2401703002: cc/blimp: Set up the framework for LayerTreeTests in remote mode. (Closed)
Patch Set: Rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/test/layer_tree_test.h ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "cc/animation/animation.h" 13 #include "cc/animation/animation.h"
14 #include "cc/animation/animation_host.h" 14 #include "cc/animation/animation_host.h"
15 #include "cc/animation/element_animations.h" 15 #include "cc/animation/element_animations.h"
16 #include "cc/animation/timing_function.h" 16 #include "cc/animation/timing_function.h"
17 #include "cc/base/switches.h" 17 #include "cc/base/switches.h"
18 #include "cc/blimp/image_serialization_processor.h" 18 #include "cc/blimp/remote_compositor_bridge.h"
19 #include "cc/input/input_handler.h" 19 #include "cc/input/input_handler.h"
20 #include "cc/layers/layer.h" 20 #include "cc/layers/layer.h"
21 #include "cc/layers/layer_impl.h" 21 #include "cc/layers/layer_impl.h"
22 #include "cc/output/buffer_to_texture_target_map.h" 22 #include "cc/output/buffer_to_texture_target_map.h"
23 #include "cc/proto/compositor_message_to_impl.pb.h" 23 #include "cc/proto/compositor_message_to_impl.pb.h"
24 #include "cc/test/animation_test_common.h" 24 #include "cc/test/animation_test_common.h"
25 #include "cc/test/begin_frame_args_test.h" 25 #include "cc/test/begin_frame_args_test.h"
26 #include "cc/test/fake_image_serialization_processor.h" 26 #include "cc/test/fake_image_serialization_processor.h"
27 #include "cc/test/fake_layer_tree_host_client.h" 27 #include "cc/test/fake_layer_tree_host_client.h"
28 #include "cc/test/fake_output_surface.h" 28 #include "cc/test/fake_output_surface.h"
29 #include "cc/test/layer_tree_host_remote_for_testing.h"
29 #include "cc/test/test_compositor_frame_sink.h" 30 #include "cc/test/test_compositor_frame_sink.h"
30 #include "cc/test/test_context_provider.h" 31 #include "cc/test/test_context_provider.h"
31 #include "cc/test/test_shared_bitmap_manager.h" 32 #include "cc/test/test_shared_bitmap_manager.h"
32 #include "cc/trees/layer_tree_host_client.h" 33 #include "cc/trees/layer_tree_host_client.h"
33 #include "cc/trees/layer_tree_host_impl.h" 34 #include "cc/trees/layer_tree_host_impl.h"
34 #include "cc/trees/layer_tree_host_single_thread_client.h" 35 #include "cc/trees/layer_tree_host_single_thread_client.h"
35 #include "cc/trees/layer_tree_impl.h" 36 #include "cc/trees/layer_tree_impl.h"
36 #include "cc/trees/proxy_impl.h" 37 #include "cc/trees/proxy_impl.h"
37 #include "cc/trees/proxy_main.h" 38 #include "cc/trees/proxy_main.h"
38 #include "cc/trees/single_thread_proxy.h" 39 #include "cc/trees/single_thread_proxy.h"
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 338
338 TestHooks* test_hooks_; 339 TestHooks* test_hooks_;
339 }; 340 };
340 341
341 // Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. 342 // Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting.
342 class LayerTreeHostForTesting : public LayerTreeHostInProcess { 343 class LayerTreeHostForTesting : public LayerTreeHostInProcess {
343 public: 344 public:
344 static std::unique_ptr<LayerTreeHostForTesting> Create( 345 static std::unique_ptr<LayerTreeHostForTesting> Create(
345 TestHooks* test_hooks, 346 TestHooks* test_hooks,
346 CompositorMode mode, 347 CompositorMode mode,
347 LayerTreeHostClientForTesting* client, 348 LayerTreeHostClient* client,
349 LayerTreeHostSingleThreadClient* single_thread_client,
348 SharedBitmapManager* shared_bitmap_manager, 350 SharedBitmapManager* shared_bitmap_manager,
349 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 351 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
350 TaskGraphRunner* task_graph_runner, 352 TaskGraphRunner* task_graph_runner,
351 const LayerTreeSettings& settings, 353 const LayerTreeSettings& settings,
352 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, 354 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
353 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { 355 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
354 LayerTreeHostInProcess::InitParams params; 356 LayerTreeHostInProcess::InitParams params;
355 params.client = client; 357 params.client = client;
356 params.shared_bitmap_manager = shared_bitmap_manager; 358 params.shared_bitmap_manager = shared_bitmap_manager;
357 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; 359 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
358 params.task_graph_runner = task_graph_runner; 360 params.task_graph_runner = task_graph_runner;
359 params.settings = &settings; 361 params.settings = &settings;
360 362
361 params.animation_host = 363 params.animation_host =
362 AnimationHost::CreateForTesting(ThreadInstance::MAIN); 364 AnimationHost::CreateForTesting(ThreadInstance::MAIN);
363 std::unique_ptr<LayerTreeHostForTesting> layer_tree_host( 365 std::unique_ptr<LayerTreeHostForTesting> layer_tree_host(
364 new LayerTreeHostForTesting(test_hooks, &params, mode)); 366 new LayerTreeHostForTesting(test_hooks, &params, mode));
365 std::unique_ptr<TaskRunnerProvider> task_runner_provider = 367 std::unique_ptr<TaskRunnerProvider> task_runner_provider =
366 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); 368 TaskRunnerProvider::Create(main_task_runner, impl_task_runner);
367 std::unique_ptr<Proxy> proxy; 369 std::unique_ptr<Proxy> proxy;
368 switch (mode) { 370 switch (mode) {
369 case CompositorMode::SINGLE_THREADED: 371 case CompositorMode::SINGLE_THREADED:
370 proxy = SingleThreadProxy::Create(layer_tree_host.get(), client, 372 proxy = SingleThreadProxy::Create(layer_tree_host.get(),
373 single_thread_client,
371 task_runner_provider.get()); 374 task_runner_provider.get());
372 break; 375 break;
373 case CompositorMode::THREADED: 376 case CompositorMode::THREADED:
374 DCHECK(impl_task_runner.get()); 377 DCHECK(impl_task_runner.get());
375 proxy = ProxyMain::CreateThreaded(layer_tree_host.get(), 378 proxy = ProxyMain::CreateThreaded(layer_tree_host.get(),
376 task_runner_provider.get()); 379 task_runner_provider.get());
377 break; 380 break;
378 case CompositorMode::REMOTE: 381 case CompositorMode::REMOTE:
379 NOTREACHED(); 382 NOTREACHED();
380 } 383 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 LayerTreeHostInProcess::InitParams* params, 417 LayerTreeHostInProcess::InitParams* params,
415 CompositorMode mode) 418 CompositorMode mode)
416 : LayerTreeHostInProcess(params, mode), 419 : LayerTreeHostInProcess(params, mode),
417 test_hooks_(test_hooks), 420 test_hooks_(test_hooks),
418 test_started_(false) {} 421 test_started_(false) {}
419 422
420 TestHooks* test_hooks_; 423 TestHooks* test_hooks_;
421 bool test_started_; 424 bool test_started_;
422 }; 425 };
423 426
427 // Adapts the LayerTreeHostRemoteForTesting to inject the
428 // LayerTreeHostInProcess.
429 class LayerTreeHostRemoteForLayerTreeTest
430 : public LayerTreeHostRemoteForTesting {
431 public:
432 static std::unique_ptr<LayerTreeHostRemoteForLayerTreeTest> Create(
433 TestHooks* test_hooks,
434 LayerTreeHostClient* client,
435 LayerTreeSettings const* settings,
436 SharedBitmapManager* shared_bitmap_manager,
437 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
438 TaskGraphRunner* task_graph_runner,
439 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
440 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
441 std::unique_ptr<FakeImageSerializationProcessor>
442 image_serialization_processor =
443 base::MakeUnique<FakeImageSerializationProcessor>();
444
445 LayerTreeHostRemote::InitParams params;
446 params.client = client;
447 params.main_task_runner = main_task_runner;
448 params.animation_host =
449 AnimationHost::CreateForTesting(ThreadInstance::MAIN);
450 params.remote_compositor_bridge =
451 CreateRemoteCompositorBridge(main_task_runner);
452 params.engine_picture_cache =
453 image_serialization_processor->CreateEnginePictureCache();
454 params.settings = settings;
455
456 std::unique_ptr<LayerTreeHostRemoteForLayerTreeTest> layer_tree_host =
457 base::WrapUnique(
458 new LayerTreeHostRemoteForLayerTreeTest(&params, test_hooks));
459 layer_tree_host->Initialize(shared_bitmap_manager,
460 gpu_memory_buffer_manager, task_graph_runner,
461 main_task_runner, impl_task_runner,
462 std::move(image_serialization_processor));
463 return layer_tree_host;
464 }
465
466 ~LayerTreeHostRemoteForLayerTreeTest() override = default;
467
468 std::unique_ptr<LayerTreeHostInProcess> CreateLayerTreeHostInProcess(
469 LayerTreeHostClient* client,
470 SharedBitmapManager* shared_bitmap_manager,
471 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
472 TaskGraphRunner* task_graph_runner,
473 const LayerTreeSettings& settings,
474 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
475 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) override {
476 return LayerTreeHostForTesting::Create(
477 test_hooks_, CompositorMode::THREADED, client, nullptr,
478 shared_bitmap_manager, gpu_memory_buffer_manager, task_graph_runner,
479 settings, main_task_runner, impl_task_runner);
480 }
481
482 private:
483 LayerTreeHostRemoteForLayerTreeTest(InitParams* params, TestHooks* test_hooks)
484 : LayerTreeHostRemoteForTesting(params), test_hooks_(test_hooks) {}
485
486 TestHooks* test_hooks_;
487 };
488
424 class LayerTreeTestCompositorFrameSinkClient 489 class LayerTreeTestCompositorFrameSinkClient
425 : public TestCompositorFrameSinkClient { 490 : public TestCompositorFrameSinkClient {
426 public: 491 public:
427 explicit LayerTreeTestCompositorFrameSinkClient(TestHooks* hooks) 492 explicit LayerTreeTestCompositorFrameSinkClient(TestHooks* hooks)
428 : hooks_(hooks) {} 493 : hooks_(hooks) {}
429 494
430 // TestCompositorFrameSinkClient implementation. 495 // TestCompositorFrameSinkClient implementation.
431 void DisplayReceivedCompositorFrame(const CompositorFrame& frame) override { 496 void DisplayReceivedCompositorFrame(const CompositorFrame& frame) override {
432 hooks_->DisplayReceivedCompositorFrameOnThread(frame); 497 hooks_->DisplayReceivedCompositorFrameOnThread(frame);
433 } 498 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 } 652 }
588 653
589 void LayerTreeTest::WillBeginTest() { 654 void LayerTreeTest::WillBeginTest() {
590 SetVisibleOnLayerTreeHost(true); 655 SetVisibleOnLayerTreeHost(true);
591 } 656 }
592 657
593 void LayerTreeTest::DoBeginTest() { 658 void LayerTreeTest::DoBeginTest() {
594 client_ = LayerTreeHostClientForTesting::Create(this); 659 client_ = LayerTreeHostClientForTesting::Create(this);
595 660
596 DCHECK(!impl_thread_ || impl_thread_->task_runner().get()); 661 DCHECK(!impl_thread_ || impl_thread_->task_runner().get());
597 layer_tree_host_ = LayerTreeHostForTesting::Create( 662
598 this, mode_, client_.get(), shared_bitmap_manager_.get(), 663 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner =
599 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, 664 base::ThreadTaskRunnerHandle::Get();
600 base::ThreadTaskRunnerHandle::Get(), 665 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner =
601 impl_thread_ ? impl_thread_->task_runner() : nullptr); 666 impl_thread_ ? impl_thread_->task_runner() : nullptr;
667 if (IsRemoteTest()) {
668 std::unique_ptr<LayerTreeHostRemoteForLayerTreeTest>
669 layer_tree_host_remote = LayerTreeHostRemoteForLayerTreeTest::Create(
670 this, client_.get(), &settings_, shared_bitmap_manager_.get(),
671 gpu_memory_buffer_manager_.get(), task_graph_runner_.get(),
672 main_task_runner, impl_task_runner);
673 layer_tree_host_in_process_ =
674 layer_tree_host_remote->layer_tree_host_in_process();
675 layer_tree_host_ = std::move(layer_tree_host_remote);
676 } else {
677 std::unique_ptr<LayerTreeHostForTesting> layer_tree_host_for_testing =
678 LayerTreeHostForTesting::Create(
679 this, mode_, client_.get(), client_.get(),
680 shared_bitmap_manager_.get(), gpu_memory_buffer_manager_.get(),
681 task_graph_runner_.get(), settings_, main_task_runner,
682 impl_task_runner);
683 layer_tree_host_in_process_ = layer_tree_host_for_testing.get();
684 layer_tree_host_ = std::move(layer_tree_host_for_testing);
685 }
602 686
603 ASSERT_TRUE(layer_tree_host_); 687 ASSERT_TRUE(layer_tree_host_);
604 688
605 main_task_runner_ = 689 main_task_runner_ =
606 layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner(); 690 layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner();
607 impl_task_runner_ = 691 impl_task_runner_ =
608 layer_tree_host_->GetTaskRunnerProvider()->ImplThreadTaskRunner(); 692 layer_tree_host_->GetTaskRunnerProvider()->ImplThreadTaskRunner();
609 if (!impl_task_runner_) { 693 if (!impl_task_runner_) {
610 // For tests, if there's no impl thread, make things easier by just giving 694 // For tests, if there's no impl thread, make things easier by just giving
611 // the main thread task runner. 695 // the main thread task runner.
(...skipping 11 matching lines...) Expand all
623 beginning_ = true; 707 beginning_ = true;
624 SetupTree(); 708 SetupTree();
625 WillBeginTest(); 709 WillBeginTest();
626 BeginTest(); 710 BeginTest();
627 beginning_ = false; 711 beginning_ = false;
628 if (end_when_begin_returns_) 712 if (end_when_begin_returns_)
629 RealEndTest(); 713 RealEndTest();
630 714
631 // Allow commits to happen once BeginTest() has had a chance to post tasks 715 // Allow commits to happen once BeginTest() has had a chance to post tasks
632 // so that those tasks will happen before the first commit. 716 // so that those tasks will happen before the first commit.
633 if (layer_tree_host_) { 717 if (layer_tree_host_in_process_) {
634 static_cast<LayerTreeHostForTesting*>(layer_tree_host_.get()) 718 static_cast<LayerTreeHostForTesting*>(layer_tree_host_in_process_)
635 ->set_test_started(true); 719 ->set_test_started(true);
636 } 720 }
637 } 721 }
638 722
639 void LayerTreeTest::SetupTree() { 723 void LayerTreeTest::SetupTree() {
640 if (!layer_tree()->root_layer()) { 724 if (!layer_tree()->root_layer()) {
641 scoped_refptr<Layer> root_layer = Layer::Create(); 725 scoped_refptr<Layer> root_layer = Layer::Create();
642 root_layer->SetBounds(gfx::Size(1, 1)); 726 root_layer->SetBounds(gfx::Size(1, 1));
643 layer_tree()->SetRootLayer(root_layer); 727 layer_tree()->SetRootLayer(root_layer);
644 } 728 }
645 729
646 gfx::Size root_bounds = layer_tree()->root_layer()->bounds(); 730 gfx::Size root_bounds = layer_tree()->root_layer()->bounds();
647 gfx::Size device_root_bounds = 731 gfx::Size device_root_bounds =
648 gfx::ScaleToCeiledSize(root_bounds, layer_tree()->device_scale_factor()); 732 gfx::ScaleToCeiledSize(root_bounds, layer_tree()->device_scale_factor());
649 layer_tree()->SetViewportSize(device_root_bounds); 733 layer_tree()->SetViewportSize(device_root_bounds);
650 layer_tree()->root_layer()->SetIsDrawable(true); 734 layer_tree()->root_layer()->SetIsDrawable(true);
651 } 735 }
652 736
653 void LayerTreeTest::Timeout() { 737 void LayerTreeTest::Timeout() {
654 timed_out_ = true; 738 timed_out_ = true;
655 EndTest(); 739 EndTest();
656 } 740 }
657 741
658 void LayerTreeTest::RealEndTest() { 742 void LayerTreeTest::RealEndTest() {
659 // TODO(mithro): Make this method only end when not inside an impl frame. 743 // TODO(mithro): Make this method only end when not inside an impl frame.
660 bool main_frame_will_happen; 744 bool main_frame_will_happen = layer_tree_host_in_process_
661 main_frame_will_happen = 745 ? layer_tree_host_in_process_->proxy()
662 layer_tree_host_ ? proxy()->MainFrameWillHappenForTesting() : false; 746 ->MainFrameWillHappenForTesting()
747 : false;
663 748
664 if (main_frame_will_happen && !timed_out_) { 749 if (main_frame_will_happen && !timed_out_) {
665 main_task_runner_->PostTask( 750 main_task_runner_->PostTask(
666 FROM_HERE, 751 FROM_HERE,
667 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); 752 base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_));
668 return; 753 return;
669 } 754 }
670 755
671 base::MessageLoop::current()->QuitWhenIdle(); 756 base::MessageLoop::current()->QuitWhenIdle();
672 } 757 }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 std::unique_ptr<OutputSurface> LayerTreeTest::CreateDisplayOutputSurface( 898 std::unique_ptr<OutputSurface> LayerTreeTest::CreateDisplayOutputSurface(
814 scoped_refptr<ContextProvider> compositor_context_provider) { 899 scoped_refptr<ContextProvider> compositor_context_provider) {
815 // By default the Display shares a context with the LayerTreeHostImpl. 900 // By default the Display shares a context with the LayerTreeHostImpl.
816 return FakeOutputSurface::Create3d(std::move(compositor_context_provider)); 901 return FakeOutputSurface::Create3d(std::move(compositor_context_provider));
817 } 902 }
818 903
819 void LayerTreeTest::DestroyLayerTreeHost() { 904 void LayerTreeTest::DestroyLayerTreeHost() {
820 if (layer_tree_host_ && layer_tree_host_->GetLayerTree()->root_layer()) 905 if (layer_tree_host_ && layer_tree_host_->GetLayerTree()->root_layer())
821 layer_tree_host_->GetLayerTree()->root_layer()->SetLayerTreeHost(NULL); 906 layer_tree_host_->GetLayerTree()->root_layer()->SetLayerTreeHost(NULL);
822 layer_tree_host_ = nullptr; 907 layer_tree_host_ = nullptr;
908 layer_tree_host_in_process_ = nullptr;
823 } 909 }
824 910
825 TaskRunnerProvider* LayerTreeTest::task_runner_provider() const { 911 TaskRunnerProvider* LayerTreeTest::task_runner_provider() const {
826 LayerTreeHost* host = layer_tree_host_.get(); 912 LayerTreeHost* host = layer_tree_host_.get();
827 913
828 // If this fails, the test has ended and there is no task runners to find 914 // If this fails, the test has ended and there is no task runners to find
829 // anymore. 915 // anymore.
830 DCHECK(host); 916 DCHECK(host);
831 917
832 return host->GetTaskRunnerProvider(); 918 return host->GetTaskRunnerProvider();
833 } 919 }
834 920
835 LayerTreeHost* LayerTreeTest::layer_tree_host() { 921 LayerTreeHost* LayerTreeTest::layer_tree_host() {
836 DCHECK(task_runner_provider()->IsMainThread() || 922 DCHECK(task_runner_provider()->IsMainThread() ||
837 task_runner_provider()->IsMainThreadBlocked()); 923 task_runner_provider()->IsMainThreadBlocked());
838 return layer_tree_host_.get(); 924 return layer_tree_host_.get();
839 } 925 }
840 926
841 LayerTreeHostInProcess* LayerTreeTest::layer_tree_host_in_process() { 927 LayerTreeHostInProcess* LayerTreeTest::layer_tree_host_in_process() {
842 DCHECK(task_runner_provider()->IsMainThread() || 928 DCHECK(task_runner_provider()->IsMainThread() ||
843 task_runner_provider()->IsMainThreadBlocked()); 929 task_runner_provider()->IsMainThreadBlocked());
844 DCHECK(!IsRemoteTest()); 930 DCHECK(!IsRemoteTest());
845 return layer_tree_host_.get(); 931 return layer_tree_host_in_process_;
846 } 932 }
933
934 Proxy* LayerTreeTest::proxy() {
935 return layer_tree_host_in_process() ? layer_tree_host_in_process()->proxy()
936 : NULL;
937 }
938
847 } // namespace cc 939 } // namespace cc
OLDNEW
« no previous file with comments | « cc/test/layer_tree_test.h ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698