Chromium Code Reviews| Index: cc/test/layer_tree_test.cc |
| diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc |
| index 15a1a44ef73260bfc79c3943ee09aaaaf19b7b7e..837a87340816ce357d26d1bbdbae04d49fde4b6c 100644 |
| --- a/cc/test/layer_tree_test.cc |
| +++ b/cc/test/layer_tree_test.cc |
| @@ -15,6 +15,7 @@ |
| #include "cc/layers/layer.h" |
| #include "cc/layers/layer_impl.h" |
| #include "cc/test/animation_test_common.h" |
| +#include "cc/test/begin_frame_args_test.h" |
| #include "cc/test/fake_layer_tree_host_client.h" |
| #include "cc/test/fake_output_surface.h" |
| #include "cc/test/test_context_provider.h" |
| @@ -48,6 +49,38 @@ base::TimeDelta TestHooks::LowFrequencyAnimationInterval() const { |
| return base::TimeDelta::FromMilliseconds(16); |
| } |
| +class ExternalBeginFrameSourceForTest |
| + : public BeginFrameSourceMixIn, |
| + public NON_EXPORTED_BASE(base::NonThreadSafe) { |
| + public: |
| + ExternalBeginFrameSourceForTest() : weak_ptr_factory_(this) { |
| + DetachFromThread(); |
| + } |
| + |
| + virtual ~ExternalBeginFrameSourceForTest() { |
| + DCHECK(CalledOnValidThread()); |
| + } |
| + |
| + virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override { |
| + DCHECK(CalledOnValidThread()); |
| + if (needs_begin_frames) { |
| + base::MessageLoop::current()->PostDelayedTask( |
| + FROM_HERE, |
| + base::Bind(&ExternalBeginFrameSourceForTest::TestOnBeginFrame, |
| + weak_ptr_factory_.GetWeakPtr()), |
| + base::TimeDelta::FromMilliseconds(16)); |
|
brianderson
2014/10/18 00:08:45
Will this slow down the LayerTree tests? I think t
danakj
2014/10/18 18:02:39
https://code.google.com/p/chromium/codesearch#chro
simonhong
2014/10/23 01:03:08
Modified to use refresh_rate.
|
| + } |
| + } |
| + |
| + void TestOnBeginFrame() { |
| + DCHECK(CalledOnValidThread()); |
| + CallOnBeginFrame(CreateBeginFrameArgsForTesting()); |
| + } |
| + |
| + private: |
| + base::WeakPtrFactory<ExternalBeginFrameSourceForTest> weak_ptr_factory_; |
| +}; |
| + |
| // Adapts ThreadProxy for test. Injects test hooks for testing. |
| class ThreadProxyForTest : public ThreadProxy { |
| public: |
| @@ -55,9 +88,14 @@ class ThreadProxyForTest : public ThreadProxy { |
| TestHooks* test_hooks, |
| LayerTreeHost* host, |
| scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { |
| + scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| + scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
| return make_scoped_ptr(new ThreadProxyForTest( |
| - test_hooks, host, main_task_runner, impl_task_runner)); |
| + test_hooks, |
| + host, |
| + main_task_runner, |
| + impl_task_runner, |
| + external_begin_frame_source.Pass())); |
| } |
| virtual ~ThreadProxyForTest() {} |
| @@ -100,8 +138,11 @@ class ThreadProxyForTest : public ThreadProxy { |
| TestHooks* test_hooks, |
| LayerTreeHost* host, |
| scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) |
| - : ThreadProxy(host, main_task_runner, impl_task_runner), |
| + scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| + scoped_ptr<BeginFrameSource> external_begin_frame_source) |
| + : ThreadProxy(host, main_task_runner, |
| + impl_task_runner, |
| + external_begin_frame_source.Pass()), |
| test_hooks_(test_hooks) {} |
| }; |
| @@ -347,7 +388,8 @@ class LayerTreeHostForTesting : public LayerTreeHost { |
| LayerTreeHostClientForTesting* client, |
| const LayerTreeSettings& settings, |
| scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { |
| + scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| + scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
| scoped_ptr<LayerTreeHostForTesting> layer_tree_host( |
| new LayerTreeHostForTesting(test_hooks, client, settings)); |
| if (impl_task_runner.get()) { |
| @@ -355,10 +397,14 @@ class LayerTreeHostForTesting : public LayerTreeHost { |
| ThreadProxyForTest::Create(test_hooks, |
| layer_tree_host.get(), |
| main_task_runner, |
| - impl_task_runner)); |
| + impl_task_runner, |
| + external_begin_frame_source.Pass())); |
| } else { |
| layer_tree_host->InitializeForTesting(SingleThreadProxy::Create( |
| - layer_tree_host.get(), client, main_task_runner)); |
| + layer_tree_host.get(), |
| + client, |
| + main_task_runner, |
| + external_begin_frame_source.Pass())); |
| } |
| return layer_tree_host.Pass(); |
| } |
| @@ -524,13 +570,19 @@ void LayerTreeTest::WillBeginTest() { |
| void LayerTreeTest::DoBeginTest() { |
| client_ = LayerTreeHostClientForTesting::Create(this); |
| + scoped_ptr<BeginFrameSource> external_begin_frame_source; |
| + if (settings_.begin_frame_scheduling_enabled && |
| + settings_.throttle_frame_production) |
| + external_begin_frame_source.reset(new ExternalBeginFrameSourceForTest); |
| + |
| DCHECK(!impl_thread_ || impl_thread_->message_loop_proxy().get()); |
| layer_tree_host_ = LayerTreeHostForTesting::Create( |
| this, |
| client_.get(), |
| settings_, |
| base::MessageLoopProxy::current(), |
| - impl_thread_ ? impl_thread_->message_loop_proxy() : NULL); |
| + impl_thread_ ? impl_thread_->message_loop_proxy() : NULL, |
| + external_begin_frame_source.Pass()); |
| ASSERT_TRUE(layer_tree_host_); |
| started_ = true; |