Index: cc/test/layer_tree_test.cc |
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc |
deleted file mode 100644 |
index 2fff95f81745aa344eb538201f74df505638f083..0000000000000000000000000000000000000000 |
--- a/cc/test/layer_tree_test.cc |
+++ /dev/null |
@@ -1,899 +0,0 @@ |
-// Copyright 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "cc/test/layer_tree_test.h" |
- |
-#include "base/command_line.h" |
-#include "cc/animation/animation.h" |
-#include "cc/animation/animation_registrar.h" |
-#include "cc/animation/layer_animation_controller.h" |
-#include "cc/animation/timing_function.h" |
-#include "cc/base/switches.h" |
-#include "cc/input/input_handler.h" |
-#include "cc/layers/content_layer.h" |
-#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_external_begin_frame_source.h" |
-#include "cc/test/fake_layer_tree_host_client.h" |
-#include "cc/test/fake_output_surface.h" |
-#include "cc/test/test_context_provider.h" |
-#include "cc/test/test_gpu_memory_buffer_manager.h" |
-#include "cc/test/test_shared_bitmap_manager.h" |
-#include "cc/test/test_task_graph_runner.h" |
-#include "cc/test/tiled_layer_test_common.h" |
-#include "cc/trees/layer_tree_host_client.h" |
-#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/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/geometry/size_conversions.h" |
- |
-namespace cc { |
- |
-TestHooks::TestHooks() {} |
- |
-TestHooks::~TestHooks() {} |
- |
-DrawResult TestHooks::PrepareToDrawOnThread( |
- LayerTreeHostImpl* host_impl, |
- LayerTreeHostImpl::FrameData* frame_data, |
- DrawResult draw_result) { |
- return draw_result; |
-} |
- |
-scoped_ptr<Rasterizer> TestHooks::CreateRasterizer( |
- LayerTreeHostImpl* host_impl) { |
- return host_impl->LayerTreeHostImpl::CreateRasterizer(); |
-} |
- |
-void TestHooks::CreateResourceAndTileTaskWorkerPool( |
- LayerTreeHostImpl* host_impl, |
- scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, |
- scoped_ptr<ResourcePool>* resource_pool, |
- scoped_ptr<ResourcePool>* staging_resource_pool) { |
- host_impl->LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( |
- tile_task_worker_pool, resource_pool, staging_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, |
- scoped_refptr<base::SingleThreadTaskRunner> main_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, |
- external_begin_frame_source.Pass())); |
- } |
- |
- ~ThreadProxyForTest() override {} |
- |
- 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(); |
- test_hooks_->ScheduledActionSendBeginMainFrame(); |
- } |
- |
- DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
- DrawResult result = ThreadProxy::ScheduledActionDrawAndSwapIfPossible(); |
- test_hooks_->ScheduledActionDrawAndSwapIfPossible(); |
- return result; |
- } |
- |
- void ScheduledActionAnimate() override { |
- ThreadProxy::ScheduledActionAnimate(); |
- test_hooks_->ScheduledActionAnimate(); |
- } |
- |
- void ScheduledActionCommit() override { |
- ThreadProxy::ScheduledActionCommit(); |
- test_hooks_->ScheduledActionCommit(); |
- } |
- |
- void ScheduledActionBeginOutputSurfaceCreation() override { |
- ThreadProxy::ScheduledActionBeginOutputSurfaceCreation(); |
- test_hooks_->ScheduledActionBeginOutputSurfaceCreation(); |
- } |
- |
- void ScheduledActionPrepareTiles() override { |
- ThreadProxy::ScheduledActionPrepareTiles(); |
- test_hooks_->ScheduledActionPrepareTiles(); |
- } |
- |
- ThreadProxyForTest( |
- TestHooks* test_hooks, |
- LayerTreeHost* host, |
- scoped_refptr<base::SingleThreadTaskRunner> main_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) {} |
-}; |
- |
-// 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: |
- static scoped_ptr<LayerTreeHostImplForTesting> Create( |
- TestHooks* test_hooks, |
- const LayerTreeSettings& settings, |
- LayerTreeHostImplClient* host_impl_client, |
- Proxy* proxy, |
- SharedBitmapManager* shared_bitmap_manager, |
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- TaskGraphRunner* task_graph_runner, |
- RenderingStatsInstrumentation* stats_instrumentation) { |
- return make_scoped_ptr(new LayerTreeHostImplForTesting( |
- test_hooks, settings, host_impl_client, proxy, shared_bitmap_manager, |
- gpu_memory_buffer_manager, task_graph_runner, stats_instrumentation)); |
- } |
- |
- protected: |
- LayerTreeHostImplForTesting( |
- TestHooks* test_hooks, |
- const LayerTreeSettings& settings, |
- LayerTreeHostImplClient* host_impl_client, |
- Proxy* proxy, |
- SharedBitmapManager* shared_bitmap_manager, |
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- TaskGraphRunner* task_graph_runner, |
- RenderingStatsInstrumentation* stats_instrumentation) |
- : LayerTreeHostImpl(settings, |
- host_impl_client, |
- proxy, |
- stats_instrumentation, |
- shared_bitmap_manager, |
- gpu_memory_buffer_manager, |
- task_graph_runner, |
- 0), |
- test_hooks_(test_hooks), |
- block_notify_ready_to_activate_for_testing_(false), |
- notify_ready_to_activate_was_blocked_(false) {} |
- |
- scoped_ptr<Rasterizer> CreateRasterizer() override { |
- return test_hooks_->CreateRasterizer(this); |
- } |
- |
- void CreateResourceAndTileTaskWorkerPool( |
- scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, |
- scoped_ptr<ResourcePool>* resource_pool, |
- scoped_ptr<ResourcePool>* staging_resource_pool) override { |
- test_hooks_->CreateResourceAndTileTaskWorkerPool( |
- this, tile_task_worker_pool, resource_pool, staging_resource_pool); |
- } |
- |
- void WillBeginImplFrame(const BeginFrameArgs& args) override { |
- LayerTreeHostImpl::WillBeginImplFrame(args); |
- test_hooks_->WillBeginImplFrameOnThread(this, args); |
- } |
- |
- void BeginMainFrameAborted(CommitEarlyOutReason reason) override { |
- LayerTreeHostImpl::BeginMainFrameAborted(reason); |
- test_hooks_->BeginMainFrameAbortedOnThread(this, reason); |
- } |
- |
- void BeginCommit() override { |
- LayerTreeHostImpl::BeginCommit(); |
- test_hooks_->BeginCommitOnThread(this); |
- } |
- |
- void CommitComplete() override { |
- LayerTreeHostImpl::CommitComplete(); |
- test_hooks_->CommitCompleteOnThread(this); |
- } |
- |
- DrawResult PrepareToDraw(FrameData* frame) override { |
- DrawResult draw_result = LayerTreeHostImpl::PrepareToDraw(frame); |
- return test_hooks_->PrepareToDrawOnThread(this, frame, draw_result); |
- } |
- |
- void DrawLayers(FrameData* frame, base::TimeTicks frame_begin_time) override { |
- LayerTreeHostImpl::DrawLayers(frame, frame_begin_time); |
- test_hooks_->DrawLayersOnThread(this); |
- } |
- |
- bool SwapBuffers(const LayerTreeHostImpl::FrameData& frame) override { |
- bool result = LayerTreeHostImpl::SwapBuffers(frame); |
- test_hooks_->SwapBuffersOnThread(this, result); |
- return result; |
- } |
- |
- void DidSwapBuffersComplete() override { |
- LayerTreeHostImpl::DidSwapBuffersComplete(); |
- test_hooks_->SwapBuffersCompleteOnThread(this); |
- } |
- |
- void ReclaimResources(const CompositorFrameAck* ack) override { |
- LayerTreeHostImpl::ReclaimResources(ack); |
- } |
- |
- void NotifyReadyToActivate() override { |
- if (block_notify_ready_to_activate_for_testing_) { |
- notify_ready_to_activate_was_blocked_ = true; |
- } else { |
- LayerTreeHostImpl::NotifyReadyToActivate(); |
- test_hooks_->NotifyReadyToActivateOnThread(this); |
- } |
- } |
- |
- void NotifyReadyToDraw() override { |
- LayerTreeHostImpl::NotifyReadyToDraw(); |
- test_hooks_->NotifyReadyToDrawOnThread(this); |
- } |
- |
- void BlockNotifyReadyToActivateForTesting(bool block) override { |
- CHECK(settings().impl_side_painting); |
- CHECK(proxy()->ImplThreadTaskRunner()) |
- << "Not supported for single-threaded mode."; |
- block_notify_ready_to_activate_for_testing_ = block; |
- if (!block && notify_ready_to_activate_was_blocked_) { |
- NotifyReadyToActivate(); |
- notify_ready_to_activate_was_blocked_ = false; |
- } |
- } |
- |
- void ActivateSyncTree() override { |
- test_hooks_->WillActivateTreeOnThread(this); |
- LayerTreeHostImpl::ActivateSyncTree(); |
- DCHECK(!pending_tree()); |
- test_hooks_->DidActivateTreeOnThread(this); |
- } |
- |
- bool InitializeRenderer(scoped_ptr<OutputSurface> output_surface) override { |
- bool success = LayerTreeHostImpl::InitializeRenderer(output_surface.Pass()); |
- test_hooks_->InitializedRendererOnThread(this, success); |
- return success; |
- } |
- |
- void SetVisible(bool visible) override { |
- LayerTreeHostImpl::SetVisible(visible); |
- test_hooks_->DidSetVisibleOnImplTree(this, visible); |
- } |
- |
- void AnimateLayers(base::TimeTicks monotonic_time) override { |
- test_hooks_->WillAnimateLayers(this, monotonic_time); |
- LayerTreeHostImpl::AnimateLayers(monotonic_time); |
- test_hooks_->AnimateLayers(this, monotonic_time); |
- } |
- |
- void UpdateAnimationState(bool start_ready_animations) override { |
- LayerTreeHostImpl::UpdateAnimationState(start_ready_animations); |
- bool has_unfinished_animation = false; |
- for (const auto& it : |
- animation_registrar()->active_animation_controllers_for_testing()) { |
- if (it.second->HasActiveAnimation()) { |
- has_unfinished_animation = true; |
- break; |
- } |
- } |
- test_hooks_->UpdateAnimationState(this, has_unfinished_animation); |
- } |
- |
- void NotifyTileStateChanged(const Tile* tile) override { |
- LayerTreeHostImpl::NotifyTileStateChanged(tile); |
- test_hooks_->NotifyTileStateChangedOnThread(this, tile); |
- } |
- |
- private: |
- TestHooks* test_hooks_; |
- bool block_notify_ready_to_activate_for_testing_; |
- bool notify_ready_to_activate_was_blocked_; |
-}; |
- |
-// Implementation of LayerTreeHost callback interface. |
-class LayerTreeHostClientForTesting : public LayerTreeHostClient, |
- public LayerTreeHostSingleThreadClient { |
- public: |
- static scoped_ptr<LayerTreeHostClientForTesting> Create( |
- TestHooks* test_hooks) { |
- return make_scoped_ptr(new LayerTreeHostClientForTesting(test_hooks)); |
- } |
- ~LayerTreeHostClientForTesting() override {} |
- |
- void WillBeginMainFrame() override { test_hooks_->WillBeginMainFrame(); } |
- |
- void DidBeginMainFrame() override { test_hooks_->DidBeginMainFrame(); } |
- |
- void BeginMainFrame(const BeginFrameArgs& args) override { |
- test_hooks_->BeginMainFrame(args); |
- } |
- |
- void Layout() override { test_hooks_->Layout(); } |
- |
- void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta, |
- const gfx::Vector2dF& outer_delta, |
- const gfx::Vector2dF& elastic_overscroll_delta, |
- float page_scale, |
- float top_controls_delta) override { |
- test_hooks_->ApplyViewportDeltas(inner_delta, outer_delta, |
- elastic_overscroll_delta, page_scale, |
- top_controls_delta); |
- } |
- void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, |
- float scale, |
- float top_controls_delta) override { |
- test_hooks_->ApplyViewportDeltas(scroll_delta, |
- scale, |
- top_controls_delta); |
- } |
- |
- void RequestNewOutputSurface() override { |
- test_hooks_->RequestNewOutputSurface(); |
- } |
- |
- void DidInitializeOutputSurface() override { |
- test_hooks_->DidInitializeOutputSurface(); |
- } |
- |
- void SendBeginFramesToChildren(const BeginFrameArgs& args) override { |
- test_hooks_->SendBeginFramesToChildren(args); |
- } |
- |
- void DidFailToInitializeOutputSurface() override { |
- test_hooks_->DidFailToInitializeOutputSurface(); |
- RequestNewOutputSurface(); |
- } |
- |
- void WillCommit() override { test_hooks_->WillCommit(); } |
- |
- void DidCommit() override { test_hooks_->DidCommit(); } |
- |
- void DidCommitAndDrawFrame() override { |
- test_hooks_->DidCommitAndDrawFrame(); |
- } |
- |
- void DidCompleteSwapBuffers() override { |
- test_hooks_->DidCompleteSwapBuffers(); |
- } |
- |
- void DidPostSwapBuffers() override {} |
- void DidAbortSwapBuffers() override {} |
- void ScheduleComposite() override { test_hooks_->ScheduleComposite(); } |
- void DidCompletePageScaleAnimation() override {} |
- void BeginMainFrameNotExpectedSoon() override {} |
- |
- private: |
- explicit LayerTreeHostClientForTesting(TestHooks* test_hooks) |
- : test_hooks_(test_hooks) {} |
- |
- TestHooks* test_hooks_; |
-}; |
- |
-// Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. |
-class LayerTreeHostForTesting : public LayerTreeHost { |
- public: |
- static scoped_ptr<LayerTreeHostForTesting> Create( |
- TestHooks* test_hooks, |
- LayerTreeHostClientForTesting* client, |
- SharedBitmapManager* shared_bitmap_manager, |
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- TaskGraphRunner* task_graph_runner, |
- const LayerTreeSettings& settings, |
- scoped_refptr<base::SingleThreadTaskRunner> main_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, shared_bitmap_manager, |
- gpu_memory_buffer_manager, |
- task_graph_runner, settings)); |
- if (impl_task_runner.get()) { |
- layer_tree_host->InitializeForTesting( |
- ThreadProxyForTest::Create(test_hooks, |
- layer_tree_host.get(), |
- main_task_runner, |
- impl_task_runner, |
- external_begin_frame_source.Pass())); |
- } else { |
- 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(); |
- } |
- |
- scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl( |
- LayerTreeHostImplClient* host_impl_client) override { |
- return LayerTreeHostImplForTesting::Create( |
- test_hooks_, settings(), host_impl_client, proxy(), |
- shared_bitmap_manager_, gpu_memory_buffer_manager_, task_graph_runner_, |
- rendering_stats_instrumentation()); |
- } |
- |
- void SetNeedsCommit() override { |
- if (!test_started_) |
- return; |
- LayerTreeHost::SetNeedsCommit(); |
- } |
- |
- void set_test_started(bool started) { test_started_ = started; } |
- |
- private: |
- LayerTreeHostForTesting( |
- TestHooks* test_hooks, |
- LayerTreeHostClient* client, |
- SharedBitmapManager* shared_bitmap_manager, |
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- TaskGraphRunner* task_graph_runner, |
- const LayerTreeSettings& settings) |
- : LayerTreeHost(client, NULL, NULL, NULL, settings), |
- shared_bitmap_manager_(shared_bitmap_manager), |
- gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
- task_graph_runner_(task_graph_runner), |
- test_hooks_(test_hooks), |
- test_started_(false) {} |
- |
- SharedBitmapManager* shared_bitmap_manager_; |
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager_; |
- TaskGraphRunner* task_graph_runner_; |
- TestHooks* test_hooks_; |
- bool test_started_; |
-}; |
- |
-LayerTreeTest::LayerTreeTest() |
- : output_surface_(nullptr), |
- external_begin_frame_source_(nullptr), |
- beginning_(false), |
- end_when_begin_returns_(false), |
- timed_out_(false), |
- scheduled_(false), |
- started_(false), |
- ended_(false), |
- delegating_renderer_(false), |
- verify_property_trees_(true), |
- timeout_seconds_(0), |
- weak_factory_(this) { |
- main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); |
- |
- // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was |
- // specified (for running in a debugger). |
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
- if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) |
- timeout_seconds_ = 5; |
-} |
- |
-LayerTreeTest::~LayerTreeTest() {} |
- |
-void LayerTreeTest::EndTest() { |
- if (ended_) |
- return; |
- ended_ = true; |
- |
- // For the case where we EndTest during BeginTest(), set a flag to indicate |
- // that the test should end the second BeginTest regains control. |
- if (beginning_) { |
- end_when_begin_returns_ = true; |
- } else { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); |
- } |
-} |
- |
-void LayerTreeTest::EndTestAfterDelayMs(int delay_milliseconds) { |
- main_task_runner_->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::EndTest, main_thread_weak_ptr_), |
- base::TimeDelta::FromMilliseconds(delay_milliseconds)); |
-} |
- |
-void LayerTreeTest::PostAddAnimationToMainThread( |
- Layer* layer_to_receive_animation) { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchAddAnimation, main_thread_weak_ptr_, |
- base::Unretained(layer_to_receive_animation), 0.000004)); |
-} |
- |
-void LayerTreeTest::PostAddInstantAnimationToMainThread( |
- Layer* layer_to_receive_animation) { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchAddAnimation, |
- main_thread_weak_ptr_, |
- base::Unretained(layer_to_receive_animation), |
- 0.0)); |
-} |
- |
-void LayerTreeTest::PostAddLongAnimationToMainThread( |
- Layer* layer_to_receive_animation) { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchAddAnimation, |
- main_thread_weak_ptr_, |
- base::Unretained(layer_to_receive_animation), |
- 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, |
- main_thread_weak_ptr_)); |
-} |
- |
-void LayerTreeTest::PostSetNeedsUpdateLayersToMainThread() { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchSetNeedsUpdateLayers, |
- main_thread_weak_ptr_)); |
-} |
- |
-void LayerTreeTest::PostSetNeedsRedrawToMainThread() { |
- main_task_runner_->PostTask(FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchSetNeedsRedraw, |
- main_thread_weak_ptr_)); |
-} |
- |
-void LayerTreeTest::PostSetNeedsRedrawRectToMainThread( |
- const gfx::Rect& damage_rect) { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchSetNeedsRedrawRect, |
- main_thread_weak_ptr_, |
- damage_rect)); |
-} |
- |
-void LayerTreeTest::PostSetVisibleToMainThread(bool visible) { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &LayerTreeTest::DispatchSetVisible, main_thread_weak_ptr_, visible)); |
-} |
- |
-void LayerTreeTest::PostSetNextCommitForcesRedrawToMainThread() { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchSetNextCommitForcesRedraw, |
- main_thread_weak_ptr_)); |
-} |
- |
-void LayerTreeTest::PostCompositeImmediatelyToMainThread() { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DispatchCompositeImmediately, |
- main_thread_weak_ptr_)); |
-} |
- |
-void LayerTreeTest::WillBeginTest() { |
- layer_tree_host_->SetLayerTreeHostClientReady(); |
-} |
- |
-void LayerTreeTest::DoBeginTest() { |
- client_ = LayerTreeHostClientForTesting::Create(this); |
- |
- scoped_ptr<FakeExternalBeginFrameSource> external_begin_frame_source; |
- if (settings_.use_external_begin_frame_source) { |
- external_begin_frame_source.reset(new FakeExternalBeginFrameSource( |
- settings_.renderer_settings.refresh_rate)); |
- external_begin_frame_source_ = external_begin_frame_source.get(); |
- } |
- |
- DCHECK(!impl_thread_ || impl_thread_->message_loop_proxy().get()); |
- layer_tree_host_ = LayerTreeHostForTesting::Create( |
- this, client_.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), task_graph_runner_.get(), settings_, |
- base::MessageLoopProxy::current(), |
- impl_thread_ ? impl_thread_->message_loop_proxy() : NULL, |
- external_begin_frame_source.Pass()); |
- ASSERT_TRUE(layer_tree_host_); |
- |
- started_ = true; |
- beginning_ = true; |
- SetupTree(); |
- WillBeginTest(); |
- BeginTest(); |
- beginning_ = false; |
- if (end_when_begin_returns_) |
- RealEndTest(); |
- |
- // Allow commits to happen once BeginTest() has had a chance to post tasks |
- // so that those tasks will happen before the first commit. |
- if (layer_tree_host_) { |
- static_cast<LayerTreeHostForTesting*>(layer_tree_host_.get()) |
- ->set_test_started(true); |
- } |
-} |
- |
-void LayerTreeTest::SetupTree() { |
- if (!layer_tree_host_->root_layer()) { |
- scoped_refptr<Layer> root_layer = Layer::Create(); |
- root_layer->SetBounds(gfx::Size(1, 1)); |
- root_layer->SetIsDrawable(true); |
- layer_tree_host_->SetRootLayer(root_layer); |
- } |
- |
- gfx::Size root_bounds = layer_tree_host_->root_layer()->bounds(); |
- gfx::Size device_root_bounds = gfx::ToCeiledSize( |
- gfx::ScaleSize(root_bounds, layer_tree_host_->device_scale_factor())); |
- layer_tree_host_->SetViewportSize(device_root_bounds); |
-} |
- |
-void LayerTreeTest::Timeout() { |
- timed_out_ = true; |
- EndTest(); |
-} |
- |
-void LayerTreeTest::RealEndTest() { |
- if (layer_tree_host_ && !timed_out_ && |
- proxy()->MainFrameWillHappenForTesting()) { |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); |
- return; |
- } |
- |
- base::MessageLoop::current()->Quit(); |
-} |
- |
-void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation, |
- double animation_duration) { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- |
- if (layer_to_receive_animation) { |
- AddOpacityTransitionToLayer( |
- layer_to_receive_animation, animation_duration, 0, 0.5, true); |
- } |
-} |
- |
-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()); |
- |
- if (layer_tree_host_) |
- layer_tree_host_->SetNeedsCommit(); |
-} |
- |
-void LayerTreeTest::DispatchSetNeedsUpdateLayers() { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- |
- if (layer_tree_host_) |
- layer_tree_host_->SetNeedsUpdateLayers(); |
-} |
- |
-void LayerTreeTest::DispatchSetNeedsRedraw() { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- |
- if (layer_tree_host_) |
- layer_tree_host_->SetNeedsRedraw(); |
-} |
- |
-void LayerTreeTest::DispatchSetNeedsRedrawRect(const gfx::Rect& damage_rect) { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- |
- if (layer_tree_host_) |
- layer_tree_host_->SetNeedsRedrawRect(damage_rect); |
-} |
- |
-void LayerTreeTest::DispatchSetVisible(bool visible) { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- if (layer_tree_host_) |
- layer_tree_host_->SetVisible(visible); |
-} |
- |
-void LayerTreeTest::DispatchSetNextCommitForcesRedraw() { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- |
- if (layer_tree_host_) |
- layer_tree_host_->SetNextCommitForcesRedraw(); |
-} |
- |
-void LayerTreeTest::DispatchCompositeImmediately() { |
- DCHECK(!proxy() || proxy()->IsMainThread()); |
- if (layer_tree_host_) |
- layer_tree_host_->Composite(gfx::FrameTime::Now()); |
-} |
- |
-void LayerTreeTest::RunTest(bool threaded, |
- bool delegating_renderer, |
- bool impl_side_painting) { |
- if (threaded) { |
- impl_thread_.reset(new base::Thread("Compositor")); |
- ASSERT_TRUE(impl_thread_->Start()); |
- } |
- |
- main_task_runner_ = base::MessageLoopProxy::current(); |
- |
- shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
- gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); |
- task_graph_runner_.reset(new TestTaskGraphRunner); |
- |
- delegating_renderer_ = delegating_renderer; |
- |
- // Spend less time waiting for BeginFrame because the output is |
- // mocked out. |
- settings_.renderer_settings.refresh_rate = 200.0; |
- settings_.background_animation_rate = 200.0; |
- settings_.impl_side_painting = impl_side_painting; |
- settings_.verify_property_trees = verify_property_trees_; |
- InitializeSettings(&settings_); |
- |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeTest::DoBeginTest, base::Unretained(this))); |
- |
- if (timeout_seconds_) { |
- timeout_.Reset(base::Bind(&LayerTreeTest::Timeout, base::Unretained(this))); |
- main_task_runner_->PostDelayedTask( |
- FROM_HERE, |
- timeout_.callback(), |
- base::TimeDelta::FromSeconds(timeout_seconds_)); |
- } |
- |
- base::MessageLoop::current()->Run(); |
- DestroyLayerTreeHost(); |
- |
- timeout_.Cancel(); |
- |
- ASSERT_FALSE(layer_tree_host_.get()); |
- client_ = nullptr; |
- if (timed_out_) { |
- FAIL() << "Test timed out"; |
- return; |
- } |
- AfterTest(); |
-} |
- |
-void LayerTreeTest::RunTestWithImplSidePainting() { |
- RunTest(true, false, true); |
-} |
- |
-void LayerTreeTest::RequestNewOutputSurface() { |
- layer_tree_host_->SetOutputSurface(CreateOutputSurface()); |
-} |
- |
-scoped_ptr<OutputSurface> LayerTreeTest::CreateOutputSurface() { |
- scoped_ptr<FakeOutputSurface> output_surface = CreateFakeOutputSurface(); |
- DCHECK_EQ(delegating_renderer_, |
- output_surface->capabilities().delegated_rendering); |
- output_surface_ = output_surface.get(); |
- |
- if (settings_.use_external_begin_frame_source) { |
- DCHECK(external_begin_frame_source_); |
- DCHECK(external_begin_frame_source_->is_ready()); |
- } |
- return output_surface.Pass(); |
-} |
- |
-scoped_ptr<FakeOutputSurface> LayerTreeTest::CreateFakeOutputSurface() { |
- if (delegating_renderer_) |
- return FakeOutputSurface::CreateDelegating3d(); |
- else |
- return FakeOutputSurface::Create3d(); |
-} |
- |
-TestWebGraphicsContext3D* LayerTreeTest::TestContext() { |
- return static_cast<TestContextProvider*>(output_surface_->context_provider()) |
- ->TestContext3d(); |
-} |
- |
-int LayerTreeTest::LastCommittedSourceFrameNumber(LayerTreeHostImpl* impl) |
- const { |
- if (impl->pending_tree()) |
- return impl->pending_tree()->source_frame_number(); |
- if (impl->active_tree()) |
- return impl->active_tree()->source_frame_number(); |
- // Source frames start at 0, so this is invalid. |
- return -1; |
-} |
- |
-void LayerTreeTest::DestroyLayerTreeHost() { |
- if (layer_tree_host_ && layer_tree_host_->root_layer()) |
- layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); |
- layer_tree_host_ = nullptr; |
-} |
- |
-LayerTreeHost* LayerTreeTest::layer_tree_host() { |
- // We check for a null proxy here as we sometimes ask for the layer tree host |
- // when the proxy does not exist, often for checking settings after a test has |
- // completed. For example, LTHPixelResourceTest::RunPixelResourceTest. See |
- // elsewhere in this file for other examples. |
- DCHECK(!proxy() || proxy()->IsMainThread() || proxy()->IsMainThreadBlocked()); |
- return layer_tree_host_.get(); |
-} |
- |
-} // namespace cc |