OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "cc/layer_tree_host_impl.h" | 7 #include "cc/layer_tree_host_impl.h" |
8 | 8 |
9 #include "CCAppendQuadsData.h" | 9 #include "CCAppendQuadsData.h" |
10 #include "CCDamageTracker.h" | 10 #include "CCDamageTracker.h" |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 { | 166 { |
167 m_timeSource->setClient(0); | 167 m_timeSource->setClient(0); |
168 m_timeSource->setActive(false); | 168 m_timeSource->setActive(false); |
169 } | 169 } |
170 | 170 |
171 virtual void onTimerTick() OVERRIDE | 171 virtual void onTimerTick() OVERRIDE |
172 { | 172 { |
173 // FIXME: We require that animate be called on the impl thread. This | 173 // FIXME: We require that animate be called on the impl thread. This |
174 // avoids asserts in single threaded mode. Ideally background ticking | 174 // avoids asserts in single threaded mode. Ideally background ticking |
175 // would be handled by the proxy/scheduler and this could be removed. | 175 // would be handled by the proxy/scheduler and this could be removed. |
176 DebugScopedSetImplThread impl; | 176 DebugScopedSetImplThread impl(m_layerTreeHostImpl->proxy()); |
177 | 177 |
178 m_layerTreeHostImpl->animate(monotonicallyIncreasingTime(), currentTime(
)); | 178 m_layerTreeHostImpl->animate(monotonicallyIncreasingTime(), currentTime(
)); |
179 } | 179 } |
180 | 180 |
181 void setActive(bool active) | 181 void setActive(bool active) |
182 { | 182 { |
183 if (active != m_timeSource->active()) | 183 if (active != m_timeSource->active()) |
184 m_timeSource->setActive(active); | 184 m_timeSource->setActive(active); |
185 } | 185 } |
186 | 186 |
(...skipping 12 matching lines...) Expand all Loading... |
199 }; | 199 }; |
200 | 200 |
201 LayerTreeHostImpl::FrameData::FrameData() | 201 LayerTreeHostImpl::FrameData::FrameData() |
202 { | 202 { |
203 } | 203 } |
204 | 204 |
205 LayerTreeHostImpl::FrameData::~FrameData() | 205 LayerTreeHostImpl::FrameData::~FrameData() |
206 { | 206 { |
207 } | 207 } |
208 | 208 |
209 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings&
settings, LayerTreeHostImplClient* client) | 209 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings&
settings, LayerTreeHostImplClient* client, Proxy* proxy) |
210 { | 210 { |
211 return make_scoped_ptr(new LayerTreeHostImpl(settings, client)); | 211 return make_scoped_ptr(new LayerTreeHostImpl(settings, client, proxy)); |
212 } | 212 } |
213 | 213 |
214 LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre
eHostImplClient* client) | 214 LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre
eHostImplClient* client, Proxy* proxy) |
215 : m_client(client) | 215 : m_client(client) |
| 216 , m_proxy(proxy) |
216 , m_sourceFrameNumber(-1) | 217 , m_sourceFrameNumber(-1) |
217 , m_rootScrollLayerImpl(0) | 218 , m_rootScrollLayerImpl(0) |
218 , m_currentlyScrollingLayerImpl(0) | 219 , m_currentlyScrollingLayerImpl(0) |
219 , m_hudLayerImpl(0) | 220 , m_hudLayerImpl(0) |
220 , m_scrollingLayerIdFromPreviousTree(-1) | 221 , m_scrollingLayerIdFromPreviousTree(-1) |
221 , m_scrollDeltaIsInViewportSpace(false) | 222 , m_scrollDeltaIsInViewportSpace(false) |
222 , m_settings(settings) | 223 , m_settings(settings) |
223 , m_deviceScaleFactor(1) | 224 , m_deviceScaleFactor(1) |
224 , m_visible(true) | 225 , m_visible(true) |
225 , m_contentsTexturesPurged(false) | 226 , m_contentsTexturesPurged(false) |
226 , m_managedMemoryPolicy(PrioritizedTextureManager::defaultMemoryAllocationLi
mit(), | 227 , m_managedMemoryPolicy(PrioritizedTextureManager::defaultMemoryAllocationLi
mit(), |
227 PriorityCalculator::allowEverythingCutoff(), | 228 PriorityCalculator::allowEverythingCutoff(), |
228 0, | 229 0, |
229 PriorityCalculator::allowNothingCutoff()) | 230 PriorityCalculator::allowNothingCutoff()) |
230 , m_backgroundColor(0) | 231 , m_backgroundColor(0) |
231 , m_hasTransparentBackground(false) | 232 , m_hasTransparentBackground(false) |
232 , m_needsAnimateLayers(false) | 233 , m_needsAnimateLayers(false) |
233 , m_pinchGestureActive(false) | 234 , m_pinchGestureActive(false) |
234 , m_fpsCounter(FrameRateCounter::create()) | 235 , m_fpsCounter(FrameRateCounter::create(m_proxy->hasImplThread())) |
235 , m_debugRectHistory(DebugRectHistory::create()) | 236 , m_debugRectHistory(DebugRectHistory::create()) |
236 , m_numImplThreadScrolls(0) | 237 , m_numImplThreadScrolls(0) |
237 , m_numMainThreadScrolls(0) | 238 , m_numMainThreadScrolls(0) |
238 { | 239 { |
239 DCHECK(Proxy::isImplThread()); | 240 DCHECK(m_proxy->isImplThread()); |
240 didVisibilityChange(this, m_visible); | 241 didVisibilityChange(this, m_visible); |
241 } | 242 } |
242 | 243 |
243 LayerTreeHostImpl::~LayerTreeHostImpl() | 244 LayerTreeHostImpl::~LayerTreeHostImpl() |
244 { | 245 { |
245 DCHECK(Proxy::isImplThread()); | 246 DCHECK(m_proxy->isImplThread()); |
246 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); | 247 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); |
247 | 248 |
248 if (m_rootLayerImpl) | 249 if (m_rootLayerImpl) |
249 clearRenderSurfaces(); | 250 clearRenderSurfaces(); |
250 } | 251 } |
251 | 252 |
252 void LayerTreeHostImpl::beginCommit() | 253 void LayerTreeHostImpl::beginCommit() |
253 { | 254 { |
254 } | 255 } |
255 | 256 |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 subtreeNeedsAnimateLayers = true; | 499 subtreeNeedsAnimateLayers = true; |
499 } | 500 } |
500 | 501 |
501 needsAnimateLayers = subtreeNeedsAnimateLayers; | 502 needsAnimateLayers = subtreeNeedsAnimateLayers; |
502 } | 503 } |
503 | 504 |
504 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) | 505 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) |
505 { | 506 { |
506 // Lazily create the timeSource adapter so that we can vary the interval for
testing. | 507 // Lazily create the timeSource adapter so that we can vary the interval for
testing. |
507 if (!m_timeSourceClientAdapter) | 508 if (!m_timeSourceClientAdapter) |
508 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t
his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), Proxy::curren
tThread())); | 509 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t
his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr
entThread())); |
509 | 510 |
510 m_timeSourceClientAdapter->setActive(enabled); | 511 m_timeSourceClientAdapter->setActive(enabled); |
511 } | 512 } |
512 | 513 |
513 IntSize LayerTreeHostImpl::contentSize() const | 514 IntSize LayerTreeHostImpl::contentSize() const |
514 { | 515 { |
515 // TODO(aelias): Hardcoding the first child here is weird. Think of | 516 // TODO(aelias): Hardcoding the first child here is weird. Think of |
516 // a cleaner way to get the contentBounds on the Impl side. | 517 // a cleaner way to get the contentBounds on the Impl side. |
517 if (!m_rootScrollLayerImpl || m_rootScrollLayerImpl->children().isEmpty()) | 518 if (!m_rootScrollLayerImpl || m_rootScrollLayerImpl->children().isEmpty()) |
518 return IntSize(); | 519 return IntSize(); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 setContentsTexturesPurged(); | 647 setContentsTexturesPurged(); |
647 m_client->setNeedsCommitOnImplThread(); | 648 m_client->setNeedsCommitOnImplThread(); |
648 m_client->onCanDrawStateChanged(canDraw()); | 649 m_client->onCanDrawStateChanged(canDraw()); |
649 } | 650 } |
650 } | 651 } |
651 | 652 |
652 void LayerTreeHostImpl::setManagedMemoryPolicy(const ManagedMemoryPolicy& policy
) | 653 void LayerTreeHostImpl::setManagedMemoryPolicy(const ManagedMemoryPolicy& policy
) |
653 { | 654 { |
654 if (m_managedMemoryPolicy == policy) | 655 if (m_managedMemoryPolicy == policy) |
655 return; | 656 return; |
| 657 |
| 658 // FIXME: In single-thread mode, this can be called on the main thread |
| 659 // by GLRenderer::onMemoryAllocationChanged. |
| 660 DebugScopedSetImplThread implThread(m_proxy); |
| 661 |
656 m_managedMemoryPolicy = policy; | 662 m_managedMemoryPolicy = policy; |
657 enforceManagedMemoryPolicy(m_managedMemoryPolicy); | 663 enforceManagedMemoryPolicy(m_managedMemoryPolicy); |
658 // We always need to commit after changing the memory policy because the new | 664 // We always need to commit after changing the memory policy because the new |
659 // limit can result in more or less content having texture allocated for it. | 665 // limit can result in more or less content having texture allocated for it. |
660 m_client->setNeedsCommitOnImplThread(); | 666 m_client->setNeedsCommitOnImplThread(); |
661 } | 667 } |
662 | 668 |
663 void LayerTreeHostImpl::onVSyncParametersChanged(double monotonicTimebase, doubl
e intervalInSeconds) | 669 void LayerTreeHostImpl::onVSyncParametersChanged(double monotonicTimebase, doubl
e intervalInSeconds) |
664 { | 670 { |
665 m_client->onVSyncParametersChanged(monotonicTimebase, intervalInSeconds); | 671 m_client->onVSyncParametersChanged(monotonicTimebase, intervalInSeconds); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 // Clear all data structures that have direct references to the layer tree. | 816 // Clear all data structures that have direct references to the layer tree. |
811 m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_curre
ntlyScrollingLayerImpl->id() : -1; | 817 m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_curre
ntlyScrollingLayerImpl->id() : -1; |
812 m_currentlyScrollingLayerImpl = 0; | 818 m_currentlyScrollingLayerImpl = 0; |
813 m_renderSurfaceLayerList.clear(); | 819 m_renderSurfaceLayerList.clear(); |
814 | 820 |
815 return m_rootLayerImpl.Pass(); | 821 return m_rootLayerImpl.Pass(); |
816 } | 822 } |
817 | 823 |
818 void LayerTreeHostImpl::setVisible(bool visible) | 824 void LayerTreeHostImpl::setVisible(bool visible) |
819 { | 825 { |
820 DCHECK(Proxy::isImplThread()); | 826 DCHECK(m_proxy->isImplThread()); |
821 | 827 |
822 if (m_visible == visible) | 828 if (m_visible == visible) |
823 return; | 829 return; |
824 m_visible = visible; | 830 m_visible = visible; |
825 didVisibilityChange(this, m_visible); | 831 didVisibilityChange(this, m_visible); |
826 enforceManagedMemoryPolicy(m_managedMemoryPolicy); | 832 enforceManagedMemoryPolicy(m_managedMemoryPolicy); |
827 | 833 |
828 if (!m_renderer) | 834 if (!m_renderer) |
829 return; | 835 return; |
830 | 836 |
(...skipping 17 matching lines...) Expand all Loading... |
848 m_context.reset(); | 854 m_context.reset(); |
849 | 855 |
850 if (!context->bindToClient(this)) | 856 if (!context->bindToClient(this)) |
851 return false; | 857 return false; |
852 | 858 |
853 scoped_ptr<ResourceProvider> resourceProvider = ResourceProvider::create(con
text.get()); | 859 scoped_ptr<ResourceProvider> resourceProvider = ResourceProvider::create(con
text.get()); |
854 if (!resourceProvider) | 860 if (!resourceProvider) |
855 return false; | 861 return false; |
856 | 862 |
857 if (context->context3D()) | 863 if (context->context3D()) |
858 m_renderer = GLRenderer::create(this, resourceProvider.get()); | 864 m_renderer = GLRenderer::create(this, resourceProvider.get(), m_proxy->h
asImplThread()); |
859 else if (context->softwareDevice()) | 865 else if (context->softwareDevice()) |
860 m_renderer = SoftwareRenderer::create(this, resourceProvider.get(), cont
ext->softwareDevice()); | 866 m_renderer = SoftwareRenderer::create(this, resourceProvider.get(), cont
ext->softwareDevice(), m_proxy->hasImplThread()); |
861 if (!m_renderer) | 867 if (!m_renderer) |
862 return false; | 868 return false; |
863 | 869 |
864 m_resourceProvider = resourceProvider.Pass(); | 870 m_resourceProvider = resourceProvider.Pass(); |
865 m_context = context.Pass(); | 871 m_context = context.Pass(); |
866 | 872 |
867 if (!m_visible) | 873 if (!m_visible) |
868 m_renderer->setVisible(m_visible); | 874 m_renderer->setVisible(m_visible); |
869 | 875 |
870 m_client->onCanDrawStateChanged(canDraw()); | 876 m_client->onCanDrawStateChanged(canDraw()); |
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1481 | 1487 |
1482 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1488 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
1483 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1489 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1484 m_client->setNeedsRedrawOnImplThread(); | 1490 m_client->setNeedsRedrawOnImplThread(); |
1485 | 1491 |
1486 for (size_t i = 0; i < layer->children().size(); ++i) | 1492 for (size_t i = 0; i < layer->children().size(); ++i) |
1487 animateScrollbarsRecursive(layer->children()[i], monotonicTime); | 1493 animateScrollbarsRecursive(layer->children()[i], monotonicTime); |
1488 } | 1494 } |
1489 | 1495 |
1490 } // namespace cc | 1496 } // namespace cc |
OLD | NEW |