Index: cc/layer_tree_host_impl.cc |
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc |
index a87302e371b9f5ad343c8f8bd85ee10e9f633bb0..dc8f5020fd17953e906631c7e10c3229e964f285 100644 |
--- a/cc/layer_tree_host_impl.cc |
+++ b/cc/layer_tree_host_impl.cc |
@@ -173,7 +173,7 @@ public: |
// FIXME: We require that animate be called on the impl thread. This |
// avoids asserts in single threaded mode. Ideally background ticking |
// would be handled by the proxy/scheduler and this could be removed. |
- DebugScopedSetImplThread impl; |
+ DebugScopedSetImplThread impl(m_layerTreeHostImpl->proxy()); |
m_layerTreeHostImpl->animate(monotonicallyIncreasingTime(), currentTime()); |
} |
@@ -206,13 +206,14 @@ LayerTreeHostImpl::FrameData::~FrameData() |
{ |
} |
-scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings& settings, LayerTreeHostImplClient* client) |
+scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy) |
{ |
- return make_scoped_ptr(new LayerTreeHostImpl(settings, client)); |
+ return make_scoped_ptr(new LayerTreeHostImpl(settings, client, proxy)); |
} |
-LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTreeHostImplClient* client) |
+LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy) |
: m_client(client) |
+ , m_proxy(proxy) |
, m_sourceFrameNumber(-1) |
, m_rootScrollLayerImpl(0) |
, m_currentlyScrollingLayerImpl(0) |
@@ -231,18 +232,18 @@ LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre |
, m_hasTransparentBackground(false) |
, m_needsAnimateLayers(false) |
, m_pinchGestureActive(false) |
- , m_fpsCounter(FrameRateCounter::create()) |
+ , m_fpsCounter(FrameRateCounter::create(m_proxy->hasImplThread())) |
, m_debugRectHistory(DebugRectHistory::create()) |
, m_numImplThreadScrolls(0) |
, m_numMainThreadScrolls(0) |
{ |
- DCHECK(Proxy::isImplThread()); |
+ DCHECK(m_proxy->isImplThread()); |
didVisibilityChange(this, m_visible); |
} |
LayerTreeHostImpl::~LayerTreeHostImpl() |
{ |
- DCHECK(Proxy::isImplThread()); |
+ DCHECK(m_proxy->isImplThread()); |
TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); |
if (m_rootLayerImpl) |
@@ -505,7 +506,7 @@ void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) |
{ |
// Lazily create the timeSource adapter so that we can vary the interval for testing. |
if (!m_timeSourceClientAdapter) |
- m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(this, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), Proxy::currentThread())); |
+ m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(this, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->currentThread())); |
m_timeSourceClientAdapter->setActive(enabled); |
} |
@@ -653,6 +654,11 @@ void LayerTreeHostImpl::setManagedMemoryPolicy(const ManagedMemoryPolicy& policy |
{ |
if (m_managedMemoryPolicy == policy) |
return; |
+ |
+ // FIXME: In single-thread mode, this can be called on the main thread |
+ // by GLRenderer::onMemoryAllocationChanged. |
+ DebugScopedSetImplThread implThread(m_proxy); |
+ |
m_managedMemoryPolicy = policy; |
enforceManagedMemoryPolicy(m_managedMemoryPolicy); |
// We always need to commit after changing the memory policy because the new |
@@ -817,7 +823,7 @@ scoped_ptr<LayerImpl> LayerTreeHostImpl::detachLayerTree() |
void LayerTreeHostImpl::setVisible(bool visible) |
{ |
- DCHECK(Proxy::isImplThread()); |
+ DCHECK(m_proxy->isImplThread()); |
if (m_visible == visible) |
return; |
@@ -855,9 +861,9 @@ bool LayerTreeHostImpl::initializeRenderer(scoped_ptr<GraphicsContext> context) |
return false; |
if (context->context3D()) |
- m_renderer = GLRenderer::create(this, resourceProvider.get()); |
+ m_renderer = GLRenderer::create(this, resourceProvider.get(), m_proxy->hasImplThread()); |
else if (context->softwareDevice()) |
- m_renderer = SoftwareRenderer::create(this, resourceProvider.get(), context->softwareDevice()); |
+ m_renderer = SoftwareRenderer::create(this, resourceProvider.get(), context->softwareDevice(), m_proxy->hasImplThread()); |
if (!m_renderer) |
return false; |