| 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..734e40e4f4adb24ae1e35405ff01a78e15afe1b8 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,36 @@ base::TimeDelta TestHooks::LowFrequencyAnimationInterval() const {
|
| return base::TimeDelta::FromMilliseconds(16);
|
| }
|
|
|
| +class ExternalBeginFrameSourceForTest : public ExternalBeginFrameSource {
|
| + public:
|
| + ExternalBeginFrameSourceForTest() : weak_ptr_factory_(this) {
|
| + DetachFromThread();
|
| + }
|
| +
|
| + 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));
|
| + }
|
| + }
|
| +
|
| + void TestOnBeginFrame() {
|
| + DCHECK(CalledOnValidThread());
|
| + CallOnBeginFrame(CreateBeginFrameArgsForTesting());
|
| + }
|
| +
|
| + private:
|
| + virtual ~ExternalBeginFrameSourceForTest() {
|
| + DCHECK(CalledOnValidThread());
|
| + }
|
| +
|
| + base::WeakPtrFactory<ExternalBeginFrameSourceForTest> weak_ptr_factory_;
|
| +};
|
| +
|
| // Adapts ThreadProxy for test. Injects test hooks for testing.
|
| class ThreadProxyForTest : public ThreadProxy {
|
| public:
|
| @@ -55,9 +86,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_refptr<ExternalBeginFrameSource> 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));
|
| }
|
|
|
| virtual ~ThreadProxyForTest() {}
|
| @@ -100,8 +136,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_refptr<ExternalBeginFrameSource> external_begin_frame_source)
|
| + : ThreadProxy(host, main_task_runner,
|
| + impl_task_runner,
|
| + external_begin_frame_source),
|
| test_hooks_(test_hooks) {}
|
| };
|
|
|
| @@ -347,7 +386,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_refptr<ExternalBeginFrameSource> external_begin_frame_source) {
|
| scoped_ptr<LayerTreeHostForTesting> layer_tree_host(
|
| new LayerTreeHostForTesting(test_hooks, client, settings));
|
| if (impl_task_runner.get()) {
|
| @@ -355,10 +395,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));
|
| } 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));
|
| }
|
| return layer_tree_host.Pass();
|
| }
|
| @@ -524,13 +568,18 @@ void LayerTreeTest::WillBeginTest() {
|
| void LayerTreeTest::DoBeginTest() {
|
| client_ = LayerTreeHostClientForTesting::Create(this);
|
|
|
| + scoped_refptr<ExternalBeginFrameSource> external_begin_frame_source;
|
| + if (settings_.begin_frame_scheduling_enabled)
|
| + external_begin_frame_source = 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);
|
| ASSERT_TRUE(layer_tree_host_);
|
|
|
| started_ = true;
|
|
|