summaryrefslogtreecommitdiffstats
path: root/cc/test/layer_tree_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/test/layer_tree_test.cc')
-rw-r--r--cc/test/layer_tree_test.cc298
1 files changed, 36 insertions, 262 deletions
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index a99e2f2..d68ec67 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -30,8 +30,10 @@
#include "cc/trees/layer_tree_host_impl.h"
#include "cc/trees/layer_tree_host_single_thread_client.h"
#include "cc/trees/layer_tree_impl.h"
+#include "cc/trees/proxy_impl.h"
+#include "cc/trees/proxy_main.h"
#include "cc/trees/single_thread_proxy.h"
-#include "cc/trees/thread_proxy.h"
+#include "cc/trees/threaded_channel.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "ui/gfx/geometry/size_conversions.h"
@@ -93,254 +95,8 @@ void CreateVirtualViewportLayers(Layer* root_layer,
layer_settings);
}
-TestHooks::TestHooks() {}
-
-TestHooks::~TestHooks() {}
-
-DrawResult TestHooks::PrepareToDrawOnThread(
- LayerTreeHostImpl* host_impl,
- LayerTreeHostImpl::FrameData* frame_data,
- DrawResult draw_result) {
- return draw_result;
-}
-
-void TestHooks::CreateResourceAndTileTaskWorkerPool(
- LayerTreeHostImpl* host_impl,
- scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool,
- scoped_ptr<ResourcePool>* resource_pool) {
- host_impl->LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool(
- tile_task_worker_pool, resource_pool);
-}
-
-// Adapts ThreadProxy for test. Injects test hooks for testing.
-class ThreadProxyForTest : public ThreadProxy {
- public:
- static scoped_ptr<Proxy> Create(
- TestHooks* test_hooks,
- LayerTreeHost* host,
- TaskRunnerProvider* task_runner_provider,
- scoped_ptr<BeginFrameSource> external_begin_frame_source) {
- return make_scoped_ptr(
- new ThreadProxyForTest(test_hooks, host, task_runner_provider,
- std::move(external_begin_frame_source)));
- }
-
- ~ThreadProxyForTest() override {}
-
- private:
- TestHooks* test_hooks_;
-
- void SetNeedsUpdateLayers() override {
- ThreadProxy::SetNeedsUpdateLayers();
- test_hooks_->DidSetNeedsUpdateLayers();
- }
-
- void ScheduledActionSendBeginMainFrame(const BeginFrameArgs& args) override {
- test_hooks_->ScheduledActionWillSendBeginMainFrame();
- ThreadProxy::ScheduledActionSendBeginMainFrame(args);
- test_hooks_->ScheduledActionSendBeginMainFrame();
- }
-
- DrawResult ScheduledActionDrawAndSwapIfPossible() override {
- DrawResult result = ThreadProxy::ScheduledActionDrawAndSwapIfPossible();
- test_hooks_->ScheduledActionDrawAndSwapIfPossible();
- return result;
- }
-
- void ScheduledActionCommit() override {
- ThreadProxy::ScheduledActionCommit();
- test_hooks_->ScheduledActionCommit();
- }
-
- void ScheduledActionBeginOutputSurfaceCreation() override {
- ThreadProxy::ScheduledActionBeginOutputSurfaceCreation();
- test_hooks_->ScheduledActionBeginOutputSurfaceCreation();
- }
-
- void ScheduledActionPrepareTiles() override {
- ThreadProxy::ScheduledActionPrepareTiles();
- test_hooks_->ScheduledActionPrepareTiles();
- }
-
- void ScheduledActionInvalidateOutputSurface() override {
- ThreadProxy::ScheduledActionInvalidateOutputSurface();
- test_hooks_->ScheduledActionInvalidateOutputSurface();
- }
-
- void SendBeginMainFrameNotExpectedSoon() override {
- ThreadProxy::SendBeginMainFrameNotExpectedSoon();
- test_hooks_->SendBeginMainFrameNotExpectedSoon();
- }
-
- void DidActivateSyncTree() override {
- ThreadProxy::DidActivateSyncTree();
- test_hooks_->DidActivateSyncTree();
- }
-
- void SetThrottleFrameProductionOnImpl(bool throttle) override {
- test_hooks_->SetThrottleFrameProductionOnImpl(throttle);
- ThreadProxy::SetThrottleFrameProductionOnImpl(throttle);
- }
-
- void InitializeOutputSurfaceOnImpl(OutputSurface* output_surface) override {
- test_hooks_->InitializeOutputSurfaceOnImpl(output_surface);
- ThreadProxy::InitializeOutputSurfaceOnImpl(output_surface);
- }
-
- void MainThreadHasStoppedFlingingOnImpl() override {
- test_hooks_->MainThreadHasStoppedFlingingOnImpl();
- ThreadProxy::MainThreadHasStoppedFlingingOnImpl();
- }
-
- void SetInputThrottledUntilCommitOnImpl(bool is_throttled) override {
- test_hooks_->SetInputThrottledUntilCommitOnImpl(is_throttled);
- ThreadProxy::SetInputThrottledUntilCommitOnImpl(is_throttled);
- }
-
- void UpdateTopControlsStateOnImpl(TopControlsState constraints,
- TopControlsState current,
- bool animate) override {
- test_hooks_->UpdateTopControlsStateOnImpl(constraints, current, animate);
- ThreadProxy::UpdateTopControlsStateOnImpl(constraints, current, animate);
- }
-
- void SetDeferCommitsOnImpl(bool defer_commits) const override {
- test_hooks_->SetDeferCommitsOnImpl(defer_commits);
- ThreadProxy::SetDeferCommitsOnImpl(defer_commits);
- }
-
- void BeginMainFrameAbortedOnImpl(
- CommitEarlyOutReason reason,
- base::TimeTicks main_thread_start_time) override {
- test_hooks_->BeginMainFrameAbortedOnImpl(reason);
- ThreadProxy::BeginMainFrameAbortedOnImpl(reason, main_thread_start_time);
- }
-
- void SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) override {
- test_hooks_->SetNeedsRedrawOnImpl(damage_rect);
- ThreadProxy::SetNeedsRedrawOnImpl(damage_rect);
- };
-
- void SetNeedsCommitOnImpl() override {
- test_hooks_->SetNeedsCommitOnImpl();
- ThreadProxy::SetNeedsCommitOnImpl();
- }
-
- void FinishAllRenderingOnImpl(CompletionEvent* completion) override {
- test_hooks_->FinishAllRenderingOnImpl();
- ThreadProxy::FinishAllRenderingOnImpl(completion);
- };
-
- void SetVisibleOnImpl(bool visible) override {
- test_hooks_->SetVisibleOnImpl(visible);
- ThreadProxy::SetVisibleOnImpl(visible);
- }
-
- void ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) override {
- test_hooks_->ReleaseOutputSurfaceOnImpl();
- ThreadProxy::ReleaseOutputSurfaceOnImpl(completion);
- }
-
- void FinishGLOnImpl(CompletionEvent* completion) override {
- test_hooks_->FinishGLOnImpl();
- ThreadProxy::FinishGLOnImpl(completion);
- }
-
- void StartCommitOnImpl(CompletionEvent* completion,
- LayerTreeHost* layer_tree_host,
- base::TimeTicks main_thread_start_time,
- bool hold_commit_for_activation) override {
- test_hooks_->StartCommitOnImpl();
- ThreadProxy::StartCommitOnImpl(completion, layer_tree_host,
- main_thread_start_time,
- hold_commit_for_activation);
- }
-
- void InitializeImplOnImpl(CompletionEvent* completion,
- LayerTreeHost* layer_tree_host) override {
- ThreadProxy::InitializeImplOnImpl(completion, layer_tree_host);
- test_hooks_->InitializeImplOnImpl();
- }
-
- void LayerTreeHostClosedOnImpl(CompletionEvent* completion) override {
- test_hooks_->WillCloseLayerTreeHostOnImpl();
- ThreadProxy::LayerTreeHostClosedOnImpl(completion);
- }
-
- void DidCompleteSwapBuffers() override {
- test_hooks_->ReceivedDidCompleteSwapBuffers();
- ThreadProxy::DidCompleteSwapBuffers();
- }
-
- void SetRendererCapabilitiesMainCopy(
- const RendererCapabilities& capabilities) override {
- test_hooks_->ReceivedSetRendererCapabilitiesMainCopy(capabilities);
- ThreadProxy::SetRendererCapabilitiesMainCopy(capabilities);
- }
-
- void BeginMainFrameNotExpectedSoon() override {
- test_hooks_->ReceivedBeginMainFrameNotExpectedSoon();
- ThreadProxy::BeginMainFrameNotExpectedSoon();
- }
-
- void DidCommitAndDrawFrame() override {
- test_hooks_->ReceivedDidCommitAndDrawFrame();
- ThreadProxy::DidCommitAndDrawFrame();
- }
-
- void SetAnimationEvents(scoped_ptr<AnimationEventsVector> events) override {
- test_hooks_->ReceivedSetAnimationEvents();
- ThreadProxy::SetAnimationEvents(std::move(events));
- }
-
- void DidLoseOutputSurface() override {
- test_hooks_->ReceivedDidLoseOutputSurface();
- ThreadProxy::DidLoseOutputSurface();
- }
-
- void RequestNewOutputSurface() override {
- test_hooks_->ReceivedRequestNewOutputSurface();
- ThreadProxy::RequestNewOutputSurface();
- }
-
- void DidInitializeOutputSurface(
- bool success,
- const RendererCapabilities& capabilities) override {
- test_hooks_->ReceivedDidInitializeOutputSurface(success, capabilities);
- ThreadProxy::DidInitializeOutputSurface(success, capabilities);
- }
-
- void DidCompletePageScaleAnimation() override {
- test_hooks_->ReceivedDidCompletePageScaleAnimation();
- ThreadProxy::DidCompletePageScaleAnimation();
- }
-
- void PostFrameTimingEventsOnMain(
- scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
- scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events)
- override {
- test_hooks_->ReceivedPostFrameTimingEventsOnMain();
- ThreadProxy::PostFrameTimingEventsOnMain(std::move(composite_events),
- std::move(main_frame_events));
- }
-
- void BeginMainFrame(scoped_ptr<BeginMainFrameAndCommitState>
- begin_main_frame_state) override {
- test_hooks_->ReceivedBeginMainFrame();
- ThreadProxy::BeginMainFrame(std::move(begin_main_frame_state));
- };
-
- ThreadProxyForTest(TestHooks* test_hooks,
- LayerTreeHost* host,
- TaskRunnerProvider* task_runner_provider,
- scoped_ptr<BeginFrameSource> external_begin_frame_source)
- : ThreadProxy(host,
- task_runner_provider,
- std::move(external_begin_frame_source)),
- test_hooks_(test_hooks) {}
-};
-
-// Adapts SingleThreadProxy for test. Injects test hooks for testing.
+// Creates a SingleThreadProxy that notifies the supplied |test_hooks| of
+// various actions.
class SingleThreadProxyForTest : public SingleThreadProxy {
public:
static scoped_ptr<Proxy> Create(
@@ -357,7 +113,17 @@ class SingleThreadProxyForTest : public SingleThreadProxy {
~SingleThreadProxyForTest() override {}
private:
- TestHooks* test_hooks_;
+ SingleThreadProxyForTest(
+ TestHooks* test_hooks,
+ LayerTreeHost* host,
+ LayerTreeHostSingleThreadClient* client,
+ TaskRunnerProvider* task_runner_provider,
+ scoped_ptr<BeginFrameSource> external_begin_frame_source)
+ : SingleThreadProxy(host,
+ client,
+ task_runner_provider,
+ std::move(external_begin_frame_source)),
+ test_hooks_(test_hooks) {}
void ScheduledActionSendBeginMainFrame(const BeginFrameArgs& args) override {
test_hooks_->ScheduledActionWillSendBeginMainFrame();
@@ -397,17 +163,7 @@ class SingleThreadProxyForTest : public SingleThreadProxy {
test_hooks_->SendBeginMainFrameNotExpectedSoon();
}
- SingleThreadProxyForTest(
- TestHooks* test_hooks,
- LayerTreeHost* host,
- LayerTreeHostSingleThreadClient* client,
- TaskRunnerProvider* task_runner_provider,
- scoped_ptr<BeginFrameSource> external_begin_frame_source)
- : SingleThreadProxy(host,
- client,
- task_runner_provider,
- std::move(external_begin_frame_source)),
- test_hooks_(test_hooks) {}
+ TestHooks* test_hooks_;
};
// Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks.
@@ -700,9 +456,10 @@ class LayerTreeHostForTesting : public LayerTreeHost {
scoped_ptr<Proxy> proxy;
if (mode == CompositorMode::Threaded) {
DCHECK(impl_task_runner.get());
- proxy = ThreadProxyForTest::Create(
+ scoped_ptr<ProxyMain> proxy_main = ProxyMainForTest::CreateThreaded(
test_hooks, layer_tree_host.get(), task_runner_provider.get(),
std::move(external_begin_frame_source));
+ proxy = std::move(proxy_main);
} else {
proxy = SingleThreadProxyForTest::Create(
test_hooks, layer_tree_host.get(), client, task_runner_provider.get(),
@@ -1161,4 +918,21 @@ LayerTreeHost* LayerTreeTest::layer_tree_host() {
return layer_tree_host_.get();
}
+ProxyMainForTest* LayerTreeTest::GetProxyMainForTest() const {
+ DCHECK(HasImplThread());
+ return static_cast<ProxyMainForTest*>(proxy());
+}
+
+ProxyImplForTest* LayerTreeTest::GetProxyImplForTest() const {
+ DCHECK(HasImplThread());
+ ThreadedChannel* threaded_channel =
+ static_cast<ThreadedChannel*>(GetProxyMainForTest()->channel_main());
+ ProxyImpl* proxy_impl = threaded_channel->GetProxyImplForTesting();
+
+ // We check for null ProxyImpl since ProxyImpl exists in the ThreadedChannel
+ // only after it is initialized.
+ DCHECK(proxy_impl);
+ return static_cast<ProxyImplForTest*>(proxy_impl);
+}
+
} // namespace cc