Index: cc/test/layer_tree_test.cc |
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc |
index 8a80f89121f978c542c7152fb43738f91ac0acc5..2aab75cca9d38c0cfe57d27586c15e2f36149f6e 100644 |
--- a/cc/test/layer_tree_test.cc |
+++ b/cc/test/layer_tree_test.cc |
@@ -25,6 +25,7 @@ |
#include "cc/trees/layer_tree_host_single_thread_client.h" |
#include "cc/trees/layer_tree_impl.h" |
#include "cc/trees/single_thread_proxy.h" |
+#include "cc/trees/thread_proxy.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "ui/gfx/frame_time.h" |
#include "ui/gfx/size_conversions.h" |
@@ -46,6 +47,58 @@ base::TimeDelta TestHooks::LowFrequencyAnimationInterval() const { |
return base::TimeDelta::FromMilliseconds(16); |
} |
+// Adapts ThreadProxy for test. Injects test hooks for testing. |
+class ThreadProxyForTest : public ThreadProxy { |
+ public: |
+ static scoped_ptr<Proxy> Create( |
+ TestHooks* test_hooks, |
+ LayerTreeHost* host, |
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { |
+ return make_scoped_ptr( |
+ new ThreadProxyForTest(test_hooks, |
+ host, |
+ impl_task_runner)).PassAs<Proxy>(); |
+ } |
+ |
+ virtual ~ThreadProxyForTest() {} |
+ |
+ void test() { |
+ test_hooks_->Layout(); |
+ } |
+ |
+ private: |
+ TestHooks* test_hooks_; |
+ |
+ virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE { |
+ ThreadProxy::ScheduledActionBeginOutputSurfaceCreation(); |
+ test_hooks_->ScheduledActionBeginOutputSurfaceCreation(); |
+ } |
+ |
+ virtual void ScheduledActionSendBeginMainFrame() OVERRIDE { |
+ ThreadProxy::ScheduledActionSendBeginMainFrame(); |
+ test_hooks_->ScheduledActionSendBeginMainFrame(); |
+ } |
+ |
+ virtual void ScheduledActionCommit() OVERRIDE { |
+ ThreadProxy::ScheduledActionCommit(); |
+ test_hooks_->ScheduledActionCommit(); |
+ } |
+ |
+ virtual DrawResult ScheduledActionDrawAndSwapIfPossible() OVERRIDE { |
+ DrawResult result = ThreadProxy::ScheduledActionDrawAndSwapIfPossible(); |
+ test_hooks_->ScheduledActionDrawAndSwapIfPossible(); |
+ return result; |
+ } |
+ |
+ ThreadProxyForTest( |
+ TestHooks* test_hooks, |
+ LayerTreeHost* host, |
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) |
+ : ThreadProxy(host, impl_task_runner), |
+ test_hooks_(test_hooks) { |
+ } |
+}; |
+ |
// Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks. |
class LayerTreeHostImplForTesting : public LayerTreeHostImpl { |
public: |
@@ -285,10 +338,15 @@ class LayerTreeHostForTesting : public LayerTreeHost { |
scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { |
scoped_ptr<LayerTreeHostForTesting> layer_tree_host( |
new LayerTreeHostForTesting(test_hooks, client, settings)); |
- if (impl_task_runner.get()) |
- layer_tree_host->InitializeThreaded(impl_task_runner); |
- else |
- layer_tree_host->InitializeSingleThreaded(client); |
+ if (impl_task_runner.get()) { |
+ layer_tree_host->InitializeForTesting( |
+ ThreadProxyForTest::Create(test_hooks, |
+ layer_tree_host.get(), |
+ impl_task_runner)); |
+ } else { |
+ layer_tree_host->InitializeForTesting( |
+ SingleThreadProxy::Create(layer_tree_host.get(), client)); |
+ } |
return layer_tree_host.Pass(); |
} |