Index: cc/test/layer_tree_test.cc |
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc |
index a40a8c72bf6b8140c638207e3b3d00d80b77e4dd..d02b5104b29bc3d52323c43645d1808142e6b849 100644 |
--- a/cc/test/layer_tree_test.cc |
+++ b/cc/test/layer_tree_test.cc |
@@ -79,13 +79,14 @@ class ThreadProxyForTest : public ThreadProxy { |
~ThreadProxyForTest() override {} |
- void test() { |
- test_hooks_->Layout(); |
- } |
- |
private: |
TestHooks* test_hooks_; |
+ void WillBeginImplFrame(const BeginFrameArgs& args) override { |
+ ThreadProxy::WillBeginImplFrame(args); |
+ test_hooks_->WillBeginImplFrame(args); |
+ } |
+ |
void ScheduledActionSendBeginMainFrame() override { |
test_hooks_->ScheduledActionWillSendBeginMainFrame(); |
ThreadProxy::ScheduledActionSendBeginMainFrame(); |
@@ -130,6 +131,74 @@ class ThreadProxyForTest : public ThreadProxy { |
test_hooks_(test_hooks) {} |
}; |
+// Adapts ThreadProxy for test. Injects test hooks for testing. |
+class SingleThreadProxyForTest : public SingleThreadProxy { |
+ public: |
+ static scoped_ptr<Proxy> Create( |
+ TestHooks* test_hooks, |
+ LayerTreeHost* host, |
+ LayerTreeHostSingleThreadClient* client, |
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
+ return make_scoped_ptr(new SingleThreadProxyForTest( |
+ test_hooks, host, client, main_task_runner, |
+ external_begin_frame_source.Pass())); |
+ } |
+ |
+ ~SingleThreadProxyForTest() override {} |
+ |
+ private: |
+ TestHooks* test_hooks_; |
+ |
+ void WillBeginImplFrame(const BeginFrameArgs& args) override { |
+ SingleThreadProxy::WillBeginImplFrame(args); |
+ test_hooks_->WillBeginImplFrame(args); |
+ } |
+ |
+ void ScheduledActionSendBeginMainFrame() override { |
+ test_hooks_->ScheduledActionWillSendBeginMainFrame(); |
+ SingleThreadProxy::ScheduledActionSendBeginMainFrame(); |
+ test_hooks_->ScheduledActionSendBeginMainFrame(); |
+ } |
+ |
+ DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
+ DrawResult result = |
+ SingleThreadProxy::ScheduledActionDrawAndSwapIfPossible(); |
+ test_hooks_->ScheduledActionDrawAndSwapIfPossible(); |
+ return result; |
+ } |
+ |
+ void ScheduledActionAnimate() override { |
+ SingleThreadProxy::ScheduledActionAnimate(); |
+ test_hooks_->ScheduledActionAnimate(); |
+ } |
+ |
+ void ScheduledActionCommit() override { |
+ SingleThreadProxy::ScheduledActionCommit(); |
+ test_hooks_->ScheduledActionCommit(); |
+ } |
+ |
+ void ScheduledActionBeginOutputSurfaceCreation() override { |
+ SingleThreadProxy::ScheduledActionBeginOutputSurfaceCreation(); |
+ test_hooks_->ScheduledActionBeginOutputSurfaceCreation(); |
+ } |
+ |
+ void ScheduledActionPrepareTiles() override { |
+ SingleThreadProxy::ScheduledActionPrepareTiles(); |
+ test_hooks_->ScheduledActionPrepareTiles(); |
+ } |
+ |
+ SingleThreadProxyForTest( |
+ TestHooks* test_hooks, |
+ LayerTreeHost* host, |
+ LayerTreeHostSingleThreadClient* client, |
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) |
+ : SingleThreadProxy(host, client, main_task_runner, |
+ external_begin_frame_source.Pass()), |
+ test_hooks_(test_hooks) {} |
+}; |
+ |
// Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks. |
class LayerTreeHostImplForTesting : public LayerTreeHostImpl { |
public: |
@@ -402,11 +471,13 @@ class LayerTreeHostForTesting : public LayerTreeHost { |
impl_task_runner, |
external_begin_frame_source.Pass())); |
} else { |
- layer_tree_host->InitializeForTesting(SingleThreadProxy::Create( |
- layer_tree_host.get(), |
- client, |
- main_task_runner, |
- external_begin_frame_source.Pass())); |
+ layer_tree_host->InitializeForTesting( |
+ SingleThreadProxyForTest::Create( |
+ test_hooks, |
+ layer_tree_host.get(), |
+ client, |
+ main_task_runner, |
+ external_begin_frame_source.Pass())); |
} |
return layer_tree_host.Pass(); |
} |
@@ -431,8 +502,6 @@ class LayerTreeHostForTesting : public LayerTreeHost { |
void set_test_started(bool started) { test_started_ = started; } |
- void DidDeferCommit() override { test_hooks_->DidDeferCommit(); } |
- |
private: |
LayerTreeHostForTesting(TestHooks* test_hooks, |
LayerTreeHostClient* client, |
@@ -524,6 +593,13 @@ void LayerTreeTest::PostAddLongAnimationToMainThread( |
1.0)); |
} |
+void LayerTreeTest::PostSetDeferCommitsToMainThread(bool defer_commits) { |
+ main_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&LayerTreeTest::DispatchSetDeferCommits, |
+ main_thread_weak_ptr_, defer_commits)); |
+} |
+ |
void LayerTreeTest::PostSetNeedsCommitToMainThread() { |
main_task_runner_->PostTask(FROM_HERE, |
base::Bind(&LayerTreeTest::DispatchSetNeedsCommit, |
@@ -655,6 +731,13 @@ void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, |
} |
} |
+void LayerTreeTest::DispatchSetDeferCommits(bool defer_commits) { |
+ DCHECK(!proxy() || proxy()->IsMainThread()); |
+ |
+ if (layer_tree_host_) |
+ layer_tree_host_->SetDeferCommits(defer_commits); |
+} |
+ |
void LayerTreeTest::DispatchSetNeedsCommit() { |
DCHECK(!proxy() || proxy()->IsMainThread()); |