layer_tree_test.cc revision 5e3f23d412006dc4db4e659864679f29341e113f
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/layer_tree_test.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation_registrar.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/timing_function.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/base/switches.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/thread_impl.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/input_handler.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/content_layer.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer_impl.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/animation_test_common.h" 19a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "cc/test/fake_context_provider.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_layer_tree_host_client.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_output_surface.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/occlusion_tracker_test_common.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/tiled_layer_test_common.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_host_impl.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/single_thread_proxy.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size_conversions.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)TestHooks::TestHooks() {} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestHooks::~TestHooks() {} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestHooks::PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImpl::FrameData* frame_data, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool result) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool TestHooks::CanActivatePendingTree(LayerTreeHostImpl* host_impl) { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostImplForTesting : public LayerTreeHostImpl { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LayerTreeHostImplForTesting> Create( 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerTreeSettings& settings, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImplClient* host_impl_client, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Proxy* proxy, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderingStatsInstrumentation* stats_instrumentation) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr( 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new LayerTreeHostImplForTesting(test_hooks, 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings, 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_impl_client, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) stats_instrumentation)); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImplForTesting( 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerTreeSettings& settings, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImplClient* host_impl_client, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Proxy* proxy, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderingStatsInstrumentation* stats_instrumentation) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : LayerTreeHostImpl(settings, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_impl_client, 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) stats_instrumentation), 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_(test_hooks) {} 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void BeginCommit() OVERRIDE { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImpl::BeginCommit(); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->BeginCommitOnThread(this); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CommitComplete() OVERRIDE { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImpl::CommitComplete(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->CommitCompleteOnThread(this); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!settings().impl_side_painting) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->TreeActivatedOnThread(this); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool PrepareToDraw(FrameData* frame, gfx::Rect damage_rect) OVERRIDE { 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = LayerTreeHostImpl::PrepareToDraw(frame, damage_rect); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!test_hooks_->PrepareToDrawOnThread(this, frame, result)) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = false; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DrawLayers(FrameData* frame, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks frame_begin_time) OVERRIDE { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImpl::DrawLayers(frame, frame_begin_time); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->DrawLayersOnThread(this); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool SwapBuffers(const LayerTreeHostImpl::FrameData& frame) OVERRIDE { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = LayerTreeHostImpl::SwapBuffers(frame); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->SwapBuffersOnThread(this, result); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1075e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) virtual void OnSwapBuffersComplete(const CompositorFrameAck* ack) OVERRIDE { 1085e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) LayerTreeHostImpl::OnSwapBuffersComplete(ack); 109b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) test_hooks_->SwapBuffersCompleteOnThread(this); 110b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 111b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool ActivatePendingTreeIfNeeded() OVERRIDE { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!pending_tree()) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!test_hooks_->CanActivatePendingTree(this)) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool activated = LayerTreeHostImpl::ActivatePendingTreeIfNeeded(); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (activated) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->TreeActivatedOnThread(this); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return activated; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool InitializeRenderer(scoped_ptr<OutputSurface> output_surface) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OVERRIDE { 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool success = LayerTreeHostImpl::InitializeRenderer(output_surface.Pass()); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->InitializedRendererOnThread(this, success); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return success; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetVisible(bool visible) OVERRIDE { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImpl::SetVisible(visible); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->DidSetVisibleOnImplTree(this, visible); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AnimateLayers(base::TimeTicks monotonic_time, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time wall_clock_time) OVERRIDE { 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->WillAnimateLayers(this, monotonic_time); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostImpl::AnimateLayers(monotonic_time, wall_clock_time); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->AnimateLayers(this, monotonic_time); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void UpdateAnimationState(bool start_ready_animations) OVERRIDE { 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LayerTreeHostImpl::UpdateAnimationState(start_ready_animations); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_unfinished_animation = false; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AnimationRegistrar::AnimationControllerMap::const_iterator iter = 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) active_animation_controllers().begin(); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; iter != active_animation_controllers().end(); ++iter) { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (iter->second->HasActiveAnimation()) { 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_unfinished_animation = true; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->UpdateAnimationState(this, has_unfinished_animation); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::TimeDelta LowFrequencyAnimationInterval() const OVERRIDE { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::TimeDelta::FromMilliseconds(16); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks_; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Adapts LayerTreeHost for test. Injects LayerTreeHostImplForTesting. 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostForTesting : public cc::LayerTreeHost { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LayerTreeHostForTesting> Create( 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks, 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeHostClient* host_client, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const cc::LayerTreeSettings& settings, 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<cc::Thread> impl_thread) { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerTreeHostForTesting> layer_tree_host( 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new LayerTreeHostForTesting(test_hooks, host_client, settings)); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool success = layer_tree_host->Initialize(impl_thread.Pass()); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(success); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host.Pass(); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<cc::LayerTreeHostImpl> CreateLayerTreeHostImpl( 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeHostImplClient* host_impl_client) OVERRIDE { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return LayerTreeHostImplForTesting::Create( 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings(), 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_impl_client, 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy(), 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rendering_stats_instrumentation()).PassAs<cc::LayerTreeHostImpl>(); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetNeedsCommit() OVERRIDE { 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!test_started_) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHost::SetNeedsCommit(); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_test_started(bool started) { test_started_ = started; } 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidDeferCommit() OVERRIDE { 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->DidDeferCommit(); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHostForTesting(TestHooks* test_hooks, 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeHostClient* client, 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const cc::LayerTreeSettings& settings) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : LayerTreeHost(client, settings), 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_(test_hooks), 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_started_(false) {} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks_; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool test_started_; 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Implementation of LayerTreeHost callback interface. 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostClientForTesting : public LayerTreeHostClient { 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LayerTreeHostClientForTesting> Create( 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks) { 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr(new LayerTreeHostClientForTesting(test_hooks)); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~LayerTreeHostClientForTesting() {} 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void WillBeginFrame() OVERRIDE {} 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidBeginFrame() OVERRIDE {} 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Animate(double monotonic_time) OVERRIDE { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->Animate(base::TimeTicks::FromInternalValue( 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) monotonic_time * base::Time::kMicrosecondsPerSecond)); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE { 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->Layout(); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float scale) OVERRIDE { 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->ApplyScrollAndScale(scroll_delta, scale); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_hooks_->CreateOutputSurface(); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 246b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { 247b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) test_hooks_->DidInitializeOutputSurface(succeeded); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidFailToInitializeOutputSurface() OVERRIDE { 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_hooks_->DidFailToInitializeOutputSurface(); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void WillCommit() OVERRIDE {} 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidCommit() OVERRIDE { 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->DidCommit(); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidCommitAndDrawFrame() OVERRIDE { 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->DidCommitAndDrawFrame(); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 264b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void DidCompleteSwapBuffers() OVERRIDE { 265b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) test_hooks_->DidCompleteSwapBuffers(); 266b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ScheduleComposite() OVERRIDE { 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_hooks_->ScheduleComposite(); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<cc::ContextProvider> 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OffscreenContextProviderForMainThread() OVERRIDE { 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_hooks_->OffscreenContextProviderForMainThread(); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<cc::ContextProvider> 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OffscreenContextProviderForCompositorThread() OVERRIDE { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_hooks_->OffscreenContextProviderForCompositorThread(); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit LayerTreeHostClientForTesting(TestHooks* test_hooks) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : test_hooks_(test_hooks) {} 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestHooks* test_hooks_; 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LayerTreeTest::LayerTreeTest() 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : beginning_(false), 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end_when_begin_returns_(false), 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) timed_out_(false), 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scheduled_(false), 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) schedule_when_set_visible_true_(false), 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) started_(false), 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ended_(false), 297a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) delegating_renderer_(false), 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) timeout_seconds_(0), 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_thread_(NULL), 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_factory_(this) { 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Tests should timeout quickly unless --cc-layer-tree-test-no-timeout was 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // specified (for running in a debugger). 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!command_line->HasSwitch(switches::kCCLayerTreeTestNoTimeout)) 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) timeout_seconds_ = 5; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LayerTreeTest::~LayerTreeTest() {} 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::EndTest() { 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For the case where we EndTest during BeginTest(), set a flag to indicate 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the test should end the second BeginTest regains control. 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (beginning_) { 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end_when_begin_returns_ = true; 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (proxy()) { 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Racy timeouts and explicit EndTest calls might have cleaned up 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the tree host. Should check proxy first. 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::EndTestAfterDelay(int delay_milliseconds) { 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::EndTest, main_thread_weak_ptr_)); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::PostAddAnimationToMainThread( 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* layer_to_receive_animation) { 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchAddAnimation, 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_thread_weak_ptr_, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(layer_to_receive_animation))); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LayerTreeTest::PostAddInstantAnimationToMainThread( 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Layer* layer_to_receive_animation) { 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchAddInstantAnimation, 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) main_thread_weak_ptr_, 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Unretained(layer_to_receive_animation))); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::PostSetNeedsCommitToMainThread() { 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchSetNeedsCommit, 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_thread_weak_ptr_)); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::PostAcquireLayerTextures() { 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchAcquireLayerTextures, 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_thread_weak_ptr_)); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::PostSetNeedsRedrawToMainThread() { 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchSetNeedsRedraw, 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_thread_weak_ptr_)); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LayerTreeTest::PostSetNeedsRedrawRectToMainThread(gfx::Rect damage_rect) { 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy()->MainThread()->PostTask( 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchSetNeedsRedrawRect, 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) main_thread_weak_ptr_, damage_rect)); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::PostSetVisibleToMainThread(bool visible) { 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchSetVisible, 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_thread_weak_ptr_, 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) visible)); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DoBeginTest() { 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_ = LayerTreeHostClientForTesting::Create(this); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<cc::Thread> impl_ccthread(NULL); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (impl_thread_) { 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_ccthread = cc::ThreadImpl::CreateForDifferentThread( 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_thread_->message_loop_proxy()); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_ = LayerTreeHostForTesting::Create(this, 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_.get(), 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings_, 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_ccthread.Pass()); 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(layer_tree_host_); 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) started_ = true; 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beginning_ = true; 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetupTree(); 394b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->SetLayerTreeHostClientReady(); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BeginTest(); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beginning_ = false; 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (end_when_begin_returns_) 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RealEndTest(); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow commits to happen once BeginTest() has had a chance to post tasks 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // so that those tasks will happen before the first commit. 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_) { 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<LayerTreeHostForTesting*>(layer_tree_host_.get())-> 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_test_started(true); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::SetupTree() { 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!layer_tree_host_->root_layer()) { 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Layer> root_layer = Layer::Create(); 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root_layer->SetAnchorPoint(gfx::PointF()); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->SetBounds(gfx::Size(1, 1)); 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root_layer->SetIsDrawable(true); 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Need at least one scrollable layer for tests with non-unit page-scales. 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root_layer->SetScrollable(true); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer(root_layer); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size root_bounds = layer_tree_host_->root_layer()->bounds(); 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size device_root_bounds = gfx::ToCeiledSize( 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ScaleSize(root_bounds, layer_tree_host_->device_scale_factor())); 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetViewportSize(device_root_bounds); 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::Timeout() { 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) timed_out_ = true; 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EndTest(); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::ScheduleComposite() { 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!started_ || scheduled_) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scheduled_ = true; 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DispatchComposite, main_thread_weak_ptr_)); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::RealEndTest() { 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ended_ = true; 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_ && proxy()->CommitPendingForTesting()) { 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy()->MainThread()->PostTask( 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::RealEndTest, main_thread_weak_ptr_)); 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop::current()->Quit(); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LayerTreeTest::DispatchAddInstantAnimation( 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Layer* layer_to_receive_animation) { 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (layer_to_receive_animation) { 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddOpacityTransitionToLayer(layer_to_receive_animation, 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0.5, 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DispatchAddAnimation(Layer* layer_to_receive_animation) { 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (layer_to_receive_animation) { 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddOpacityTransitionToLayer(layer_to_receive_animation, 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0.000001, 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0.5, 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true); 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DispatchSetNeedsCommit() { 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetNeedsCommit(); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DispatchAcquireLayerTextures() { 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_) 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->AcquireLayerTextures(); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DispatchSetNeedsRedraw() { 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_) 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetNeedsRedraw(); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LayerTreeTest::DispatchSetNeedsRedrawRect(gfx::Rect damage_rect) { 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (layer_tree_host_) 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsRedrawRect(damage_rect); 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DispatchSetVisible(bool visible) { 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!proxy() || proxy()->IsMainThread()); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!layer_tree_host_) 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetVisible(visible); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the LTH is being made visible and a previous ScheduleComposite() was 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // deferred because the LTH was not visible, re-schedule the composite now. 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_->visible() && schedule_when_set_visible_true_) 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScheduleComposite(); 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerTreeTest::DispatchComposite() { 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scheduled_ = false; 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!layer_tree_host_) 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the LTH is not visible, defer the composite until the LTH is made 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // visible. 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!layer_tree_host_->visible()) { 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) schedule_when_set_visible_true_ = true; 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) schedule_when_set_visible_true_ = false; 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::TimeTicks now = base::TimeTicks::Now(); 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->Composite(now); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 535a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void LayerTreeTest::RunTest(bool threaded, 536a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) bool delegating_renderer, 537a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) bool impl_side_painting) { 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (threaded) { 539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) impl_thread_.reset(new base::Thread("Compositor")); 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(impl_thread_->Start()); 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_ccthread_ = cc::ThreadImpl::CreateForCurrentThread(); 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 545a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) delegating_renderer_ = delegating_renderer; 546a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 54790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Spend less time waiting for BeginFrame because the output is 54890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // mocked out. 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings_.refresh_rate = 200.0; 550a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (impl_side_painting) { 551a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DCHECK(threaded) << 552a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) "Don't run single thread + impl side painting, it doesn't exist."; 553a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) settings_.impl_side_painting = true; 554a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InitializeSettings(&settings_); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_ccthread_->PostTask( 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&LayerTreeTest::DoBeginTest, base::Unretained(this))); 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (timeout_seconds_) { 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) timeout_.Reset(base::Bind(&LayerTreeTest::Timeout, base::Unretained(this))); 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) main_ccthread_->PostDelayedTask( 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) timeout_.callback(), 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::TimeDelta::FromSeconds(timeout_seconds_)); 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop::current()->Run(); 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layer_tree_host_ && layer_tree_host_->root_layer()) 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_.reset(); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) timeout_.Cancel(); 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(layer_tree_host_.get()); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_.reset(); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (timed_out_) { 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FAIL() << "Test timed out"; 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AfterTest(); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 583a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)scoped_ptr<OutputSurface> LayerTreeTest::CreateOutputSurface() { 584a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (delegating_renderer_) 585a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return FakeOutputSurface::CreateDelegating3d().PassAs<OutputSurface>(); 586a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return FakeOutputSurface::Create3d().PassAs<OutputSurface>(); 587a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 588a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 589a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)scoped_refptr<cc::ContextProvider> LayerTreeTest:: 590a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) OffscreenContextProviderForMainThread() { 591868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!main_thread_contexts_.get() || 592a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) main_thread_contexts_->DestroyedOnMainThread()) { 593a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) main_thread_contexts_ = FakeContextProvider::Create(); 594a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!main_thread_contexts_->BindToCurrentThread()) 595a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) main_thread_contexts_ = NULL; 596a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 597a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return main_thread_contexts_; 598a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 599a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 600a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)scoped_refptr<cc::ContextProvider> LayerTreeTest:: 601a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) OffscreenContextProviderForCompositorThread() { 602868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!compositor_thread_contexts_.get() || 603a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) compositor_thread_contexts_->DestroyedOnMainThread()) 604a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) compositor_thread_contexts_ = FakeContextProvider::Create(); 605a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return compositor_thread_contexts_; 606a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 607a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 609