| 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 "cc/animation/animation.h" | 8 #include "cc/animation/animation.h" |
| 9 #include "cc/animation/animation_registrar.h" | 9 #include "cc/animation/animation_registrar.h" |
| 10 #include "cc/animation/layer_animation_controller.h" | 10 #include "cc/animation/layer_animation_controller.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 | 46 |
| 47 // Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks. | 47 // Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks. |
| 48 class LayerTreeHostImplForTesting : public LayerTreeHostImpl { | 48 class LayerTreeHostImplForTesting : public LayerTreeHostImpl { |
| 49 public: | 49 public: |
| 50 static scoped_ptr<LayerTreeHostImplForTesting> Create( | 50 static scoped_ptr<LayerTreeHostImplForTesting> Create( |
| 51 TestHooks* test_hooks, | 51 TestHooks* test_hooks, |
| 52 const LayerTreeSettings& settings, | 52 const LayerTreeSettings& settings, |
| 53 LayerTreeHostImplClient* host_impl_client, | 53 LayerTreeHostImplClient* host_impl_client, |
| 54 Proxy* proxy, | 54 Proxy* proxy, |
| 55 RenderingStatsInstrumentation* stats_instrumentation) { | 55 RenderingStatsInstrumentation* stats_instrumentation) { |
| 56 return make_scoped_ptr( | 56 return make_scoped_ptr(new LayerTreeHostImplForTesting( |
| 57 new LayerTreeHostImplForTesting(test_hooks, | 57 test_hooks, settings, host_impl_client, proxy, stats_instrumentation)); |
| 58 settings, | |
| 59 host_impl_client, | |
| 60 proxy, | |
| 61 stats_instrumentation)); | |
| 62 } | 58 } |
| 63 | 59 |
| 64 protected: | 60 protected: |
| 65 LayerTreeHostImplForTesting( | 61 LayerTreeHostImplForTesting( |
| 66 TestHooks* test_hooks, | 62 TestHooks* test_hooks, |
| 67 const LayerTreeSettings& settings, | 63 const LayerTreeSettings& settings, |
| 68 LayerTreeHostImplClient* host_impl_client, | 64 LayerTreeHostImplClient* host_impl_client, |
| 69 Proxy* proxy, | 65 Proxy* proxy, |
| 70 RenderingStatsInstrumentation* stats_instrumentation) | 66 RenderingStatsInstrumentation* stats_instrumentation) |
| 71 : LayerTreeHostImpl(settings, | 67 : LayerTreeHostImpl(settings, |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 | 215 |
| 220 virtual void DidBeginMainFrame() OVERRIDE { | 216 virtual void DidBeginMainFrame() OVERRIDE { |
| 221 test_hooks_->DidBeginMainFrame(); | 217 test_hooks_->DidBeginMainFrame(); |
| 222 } | 218 } |
| 223 | 219 |
| 224 virtual void Animate(double monotonic_time) OVERRIDE { | 220 virtual void Animate(double monotonic_time) OVERRIDE { |
| 225 test_hooks_->Animate(base::TimeTicks::FromInternalValue( | 221 test_hooks_->Animate(base::TimeTicks::FromInternalValue( |
| 226 monotonic_time * base::Time::kMicrosecondsPerSecond)); | 222 monotonic_time * base::Time::kMicrosecondsPerSecond)); |
| 227 } | 223 } |
| 228 | 224 |
| 229 virtual void Layout() OVERRIDE { | 225 virtual void Layout() OVERRIDE { test_hooks_->Layout(); } |
| 230 test_hooks_->Layout(); | |
| 231 } | |
| 232 | 226 |
| 233 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, | 227 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, |
| 234 float scale) OVERRIDE { | 228 float scale) OVERRIDE { |
| 235 test_hooks_->ApplyScrollAndScale(scroll_delta, scale); | 229 test_hooks_->ApplyScrollAndScale(scroll_delta, scale); |
| 236 } | 230 } |
| 237 | 231 |
| 238 virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) | 232 virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) |
| 239 OVERRIDE { | 233 OVERRIDE { |
| 240 return test_hooks_->CreateOutputSurface(fallback); | 234 return test_hooks_->CreateOutputSurface(fallback); |
| 241 } | 235 } |
| 242 | 236 |
| 243 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { | 237 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { |
| 244 test_hooks_->DidInitializeOutputSurface(succeeded); | 238 test_hooks_->DidInitializeOutputSurface(succeeded); |
| 245 } | 239 } |
| 246 | 240 |
| 247 virtual void DidFailToInitializeOutputSurface() OVERRIDE { | 241 virtual void DidFailToInitializeOutputSurface() OVERRIDE { |
| 248 test_hooks_->DidFailToInitializeOutputSurface(); | 242 test_hooks_->DidFailToInitializeOutputSurface(); |
| 249 } | 243 } |
| 250 | 244 |
| 251 virtual void WillCommit() OVERRIDE { test_hooks_->WillCommit(); } | 245 virtual void WillCommit() OVERRIDE { test_hooks_->WillCommit(); } |
| 252 | 246 |
| 253 virtual void DidCommit() OVERRIDE { | 247 virtual void DidCommit() OVERRIDE { test_hooks_->DidCommit(); } |
| 254 test_hooks_->DidCommit(); | |
| 255 } | |
| 256 | 248 |
| 257 virtual void DidCommitAndDrawFrame() OVERRIDE { | 249 virtual void DidCommitAndDrawFrame() OVERRIDE { |
| 258 test_hooks_->DidCommitAndDrawFrame(); | 250 test_hooks_->DidCommitAndDrawFrame(); |
| 259 } | 251 } |
| 260 | 252 |
| 261 virtual void DidCompleteSwapBuffers() OVERRIDE { | 253 virtual void DidCompleteSwapBuffers() OVERRIDE { |
| 262 test_hooks_->DidCompleteSwapBuffers(); | 254 test_hooks_->DidCompleteSwapBuffers(); |
| 263 } | 255 } |
| 264 | 256 |
| 265 virtual void ScheduleComposite() OVERRIDE { | 257 virtual void ScheduleComposite() OVERRIDE { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 } | 304 } |
| 313 | 305 |
| 314 virtual void SetNeedsCommit() OVERRIDE { | 306 virtual void SetNeedsCommit() OVERRIDE { |
| 315 if (!test_started_) | 307 if (!test_started_) |
| 316 return; | 308 return; |
| 317 LayerTreeHost::SetNeedsCommit(); | 309 LayerTreeHost::SetNeedsCommit(); |
| 318 } | 310 } |
| 319 | 311 |
| 320 void set_test_started(bool started) { test_started_ = started; } | 312 void set_test_started(bool started) { test_started_ = started; } |
| 321 | 313 |
| 322 virtual void DidDeferCommit() OVERRIDE { | 314 virtual void DidDeferCommit() OVERRIDE { test_hooks_->DidDeferCommit(); } |
| 323 test_hooks_->DidDeferCommit(); | |
| 324 } | |
| 325 | 315 |
| 326 private: | 316 private: |
| 327 LayerTreeHostForTesting(TestHooks* test_hooks, | 317 LayerTreeHostForTesting(TestHooks* test_hooks, |
| 328 LayerTreeHostClient* client, | 318 LayerTreeHostClient* client, |
| 329 const LayerTreeSettings& settings) | 319 const LayerTreeSettings& settings) |
| 330 : LayerTreeHost(client, NULL, settings), | 320 : LayerTreeHost(client, NULL, settings), |
| 331 test_hooks_(test_hooks), | 321 test_hooks_(test_hooks), |
| 332 test_started_(false) {} | 322 test_started_(false) {} |
| 333 | 323 |
| 334 TestHooks* test_hooks_; | 324 TestHooks* test_hooks_; |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 SetupTree(); | 473 SetupTree(); |
| 484 WillBeginTest(); | 474 WillBeginTest(); |
| 485 BeginTest(); | 475 BeginTest(); |
| 486 beginning_ = false; | 476 beginning_ = false; |
| 487 if (end_when_begin_returns_) | 477 if (end_when_begin_returns_) |
| 488 RealEndTest(); | 478 RealEndTest(); |
| 489 | 479 |
| 490 // Allow commits to happen once BeginTest() has had a chance to post tasks | 480 // Allow commits to happen once BeginTest() has had a chance to post tasks |
| 491 // so that those tasks will happen before the first commit. | 481 // so that those tasks will happen before the first commit. |
| 492 if (layer_tree_host_) { | 482 if (layer_tree_host_) { |
| 493 static_cast<LayerTreeHostForTesting*>(layer_tree_host_.get())-> | 483 static_cast<LayerTreeHostForTesting*>(layer_tree_host_.get()) |
| 494 set_test_started(true); | 484 ->set_test_started(true); |
| 495 } | 485 } |
| 496 } | 486 } |
| 497 | 487 |
| 498 void LayerTreeTest::SetupTree() { | 488 void LayerTreeTest::SetupTree() { |
| 499 if (!layer_tree_host_->root_layer()) { | 489 if (!layer_tree_host_->root_layer()) { |
| 500 scoped_refptr<Layer> root_layer = Layer::Create(); | 490 scoped_refptr<Layer> root_layer = Layer::Create(); |
| 501 root_layer->SetAnchorPoint(gfx::PointF()); | 491 root_layer->SetAnchorPoint(gfx::PointF()); |
| 502 root_layer->SetBounds(gfx::Size(1, 1)); | 492 root_layer->SetBounds(gfx::Size(1, 1)); |
| 503 root_layer->SetIsDrawable(true); | 493 root_layer->SetIsDrawable(true); |
| 504 layer_tree_host_->SetRootLayer(root_layer); | 494 layer_tree_host_->SetRootLayer(root_layer); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 533 } | 523 } |
| 534 | 524 |
| 535 base::MessageLoop::current()->Quit(); | 525 base::MessageLoop::current()->Quit(); |
| 536 } | 526 } |
| 537 | 527 |
| 538 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, | 528 void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, |
| 539 double animation_duration) { | 529 double animation_duration) { |
| 540 DCHECK(!proxy() || proxy()->IsMainThread()); | 530 DCHECK(!proxy() || proxy()->IsMainThread()); |
| 541 | 531 |
| 542 if (layer_to_receive_animation) { | 532 if (layer_to_receive_animation) { |
| 543 AddOpacityTransitionToLayer(layer_to_receive_animation, | 533 AddOpacityTransitionToLayer( |
| 544 animation_duration, | 534 layer_to_receive_animation, animation_duration, 0, 0.5, true); |
| 545 0, | |
| 546 0.5, | |
| 547 true); | |
| 548 } | 535 } |
| 549 } | 536 } |
| 550 | 537 |
| 551 void LayerTreeTest::DispatchSetNeedsCommit() { | 538 void LayerTreeTest::DispatchSetNeedsCommit() { |
| 552 DCHECK(!proxy() || proxy()->IsMainThread()); | 539 DCHECK(!proxy() || proxy()->IsMainThread()); |
| 553 | 540 |
| 554 if (layer_tree_host_) | 541 if (layer_tree_host_) |
| 555 layer_tree_host_->SetNeedsCommit(); | 542 layer_tree_host_->SetNeedsCommit(); |
| 556 } | 543 } |
| 557 | 544 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 } | 627 } |
| 641 | 628 |
| 642 main_task_runner_ = base::MessageLoopProxy::current(); | 629 main_task_runner_ = base::MessageLoopProxy::current(); |
| 643 | 630 |
| 644 delegating_renderer_ = delegating_renderer; | 631 delegating_renderer_ = delegating_renderer; |
| 645 | 632 |
| 646 // Spend less time waiting for BeginImplFrame because the output is | 633 // Spend less time waiting for BeginImplFrame because the output is |
| 647 // mocked out. | 634 // mocked out. |
| 648 settings_.refresh_rate = 200.0; | 635 settings_.refresh_rate = 200.0; |
| 649 if (impl_side_painting) { | 636 if (impl_side_painting) { |
| 650 DCHECK(threaded) << | 637 DCHECK(threaded) |
| 651 "Don't run single thread + impl side painting, it doesn't exist."; | 638 << "Don't run single thread + impl side painting, it doesn't exist."; |
| 652 settings_.impl_side_painting = true; | 639 settings_.impl_side_painting = true; |
| 653 } | 640 } |
| 654 InitializeSettings(&settings_); | 641 InitializeSettings(&settings_); |
| 655 | 642 |
| 656 main_task_runner_->PostTask( | 643 main_task_runner_->PostTask( |
| 657 FROM_HERE, | 644 FROM_HERE, |
| 658 base::Bind(&LayerTreeTest::DoBeginTest, base::Unretained(this))); | 645 base::Bind(&LayerTreeTest::DoBeginTest, base::Unretained(this))); |
| 659 | 646 |
| 660 if (timeout_seconds_) { | 647 if (timeout_seconds_) { |
| 661 timeout_.Reset(base::Bind(&LayerTreeTest::Timeout, base::Unretained(this))); | 648 timeout_.Reset(base::Bind(&LayerTreeTest::Timeout, base::Unretained(this))); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 679 return; | 666 return; |
| 680 } | 667 } |
| 681 AfterTest(); | 668 AfterTest(); |
| 682 } | 669 } |
| 683 | 670 |
| 684 void LayerTreeTest::RunTestWithImplSidePainting() { | 671 void LayerTreeTest::RunTestWithImplSidePainting() { |
| 685 RunTest(true, false, true); | 672 RunTest(true, false, true); |
| 686 } | 673 } |
| 687 | 674 |
| 688 scoped_ptr<OutputSurface> LayerTreeTest::CreateOutputSurface(bool fallback) { | 675 scoped_ptr<OutputSurface> LayerTreeTest::CreateOutputSurface(bool fallback) { |
| 689 scoped_ptr<FakeOutputSurface> output_surface; | 676 scoped_ptr<FakeOutputSurface> output_surface = |
| 690 if (delegating_renderer_) | 677 CreateFakeOutputSurfaceForTest(fallback); |
| 691 output_surface = FakeOutputSurface::CreateDelegating3d(); | 678 |
| 692 else | |
| 693 output_surface = FakeOutputSurface::Create3d(); | |
| 694 output_surface_ = output_surface.get(); | 679 output_surface_ = output_surface.get(); |
| 695 return output_surface.PassAs<OutputSurface>(); | 680 return output_surface.PassAs<OutputSurface>(); |
| 696 } | 681 } |
| 697 | 682 |
| 683 scoped_ptr<FakeOutputSurface> LayerTreeTest::CreateFakeOutputSurfaceForTest( |
| 684 bool fallback) { |
| 685 if (delegating_renderer_) |
| 686 return FakeOutputSurface::CreateDelegating3d(); |
| 687 else |
| 688 return FakeOutputSurface::Create3d(); |
| 689 } |
| 690 |
| 698 scoped_refptr<ContextProvider> LayerTreeTest::OffscreenContextProvider() { | 691 scoped_refptr<ContextProvider> LayerTreeTest::OffscreenContextProvider() { |
| 699 if (!compositor_contexts_.get() || | 692 if (!compositor_contexts_.get() || |
| 700 compositor_contexts_->DestroyedOnMainThread()) | 693 compositor_contexts_->DestroyedOnMainThread()) |
| 701 compositor_contexts_ = TestContextProvider::Create(); | 694 compositor_contexts_ = TestContextProvider::Create(); |
| 702 return compositor_contexts_; | 695 return compositor_contexts_; |
| 703 } | 696 } |
| 704 | 697 |
| 698 TestWebGraphicsContext3D* LayerTreeTest::TestContext() { |
| 699 return static_cast<TestContextProvider*>( |
| 700 output_surface_->context_provider().get())->TestContext3d(); |
| 701 } |
| 702 |
| 705 } // namespace cc | 703 } // namespace cc |
| OLD | NEW |