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 "CCLayerTreeHostImpl.h" | 7 #include "CCLayerTreeHostImpl.h" |
8 | 8 |
9 #include "CCActiveGestureAnimation.h" | 9 #include "CCActiveGestureAnimation.h" |
10 #include "CCAppendQuadsData.h" | 10 #include "CCAppendQuadsData.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 void CCLayerTreeHostImpl::commitComplete() | 141 void CCLayerTreeHostImpl::commitComplete() |
142 { | 142 { |
143 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::commitComplete"); | 143 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::commitComplete"); |
144 // Recompute max scroll position; must be after layer content bounds are | 144 // Recompute max scroll position; must be after layer content bounds are |
145 // updated. | 145 // updated. |
146 updateMaxScrollPosition(); | 146 updateMaxScrollPosition(); |
147 } | 147 } |
148 | 148 |
149 bool CCLayerTreeHostImpl::canDraw() | 149 bool CCLayerTreeHostImpl::canDraw() |
150 { | 150 { |
| 151 // Note: If you are changing this function or any other function that might |
| 152 // affect the result of canDraw, make sure to call m_client->onCanDrawStateC
hanged |
| 153 // in the proper places and update the notifyIfCanDrawChanged test. |
| 154 |
151 if (!m_rootLayerImpl) { | 155 if (!m_rootLayerImpl) { |
152 TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw no root layer")
; | 156 TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw no root layer")
; |
153 return false; | 157 return false; |
154 } | 158 } |
155 if (deviceViewportSize().isEmpty()) { | 159 if (deviceViewportSize().isEmpty()) { |
156 TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw empty viewport"
); | 160 TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw empty viewport"
); |
157 return false; | 161 return false; |
158 } | 162 } |
159 if (!m_renderer) { | 163 if (!m_renderer) { |
160 TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw no renderer"); | 164 TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw no renderer"); |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 return true; | 507 return true; |
504 } | 508 } |
505 | 509 |
506 void CCLayerTreeHostImpl::releaseContentsTextures() | 510 void CCLayerTreeHostImpl::releaseContentsTextures() |
507 { | 511 { |
508 if (m_contentsTexturesPurged) | 512 if (m_contentsTexturesPurged) |
509 return; | 513 return; |
510 m_resourceProvider->deleteOwnedResources(CCRenderer::ContentPool); | 514 m_resourceProvider->deleteOwnedResources(CCRenderer::ContentPool); |
511 m_contentsTexturesPurged = true; | 515 m_contentsTexturesPurged = true; |
512 m_client->setNeedsCommitOnImplThread(); | 516 m_client->setNeedsCommitOnImplThread(); |
| 517 m_client->onCanDrawStateChanged(canDraw()); |
513 } | 518 } |
514 | 519 |
515 void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes) | 520 void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes) |
516 { | 521 { |
517 if (m_memoryAllocationLimitBytes == bytes) | 522 if (m_memoryAllocationLimitBytes == bytes) |
518 return; | 523 return; |
519 m_memoryAllocationLimitBytes = bytes; | 524 m_memoryAllocationLimitBytes = bytes; |
520 | 525 |
521 ASSERT(bytes); | 526 ASSERT(bytes); |
522 m_client->setNeedsCommitOnImplThread(); | 527 m_client->setNeedsCommitOnImplThread(); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 void CCLayerTreeHostImpl::setRootLayer(PassOwnPtr<CCLayerImpl> layer) | 647 void CCLayerTreeHostImpl::setRootLayer(PassOwnPtr<CCLayerImpl> layer) |
643 { | 648 { |
644 m_rootLayerImpl = layer; | 649 m_rootLayerImpl = layer; |
645 m_rootScrollLayerImpl = findRootScrollLayer(m_rootLayerImpl.get()); | 650 m_rootScrollLayerImpl = findRootScrollLayer(m_rootLayerImpl.get()); |
646 m_currentlyScrollingLayerImpl = 0; | 651 m_currentlyScrollingLayerImpl = 0; |
647 | 652 |
648 if (m_rootLayerImpl && m_scrollingLayerIdFromPreviousTree != -1) | 653 if (m_rootLayerImpl && m_scrollingLayerIdFromPreviousTree != -1) |
649 m_currentlyScrollingLayerImpl = CCLayerTreeHostCommon::findLayerInSubtre
e(m_rootLayerImpl.get(), m_scrollingLayerIdFromPreviousTree); | 654 m_currentlyScrollingLayerImpl = CCLayerTreeHostCommon::findLayerInSubtre
e(m_rootLayerImpl.get(), m_scrollingLayerIdFromPreviousTree); |
650 | 655 |
651 m_scrollingLayerIdFromPreviousTree = -1; | 656 m_scrollingLayerIdFromPreviousTree = -1; |
| 657 |
| 658 m_client->onCanDrawStateChanged(canDraw()); |
652 } | 659 } |
653 | 660 |
654 PassOwnPtr<CCLayerImpl> CCLayerTreeHostImpl::detachLayerTree() | 661 PassOwnPtr<CCLayerImpl> CCLayerTreeHostImpl::detachLayerTree() |
655 { | 662 { |
656 // Clear all data structures that have direct references to the layer tree. | 663 // Clear all data structures that have direct references to the layer tree. |
657 m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_curre
ntlyScrollingLayerImpl->id() : -1; | 664 m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_curre
ntlyScrollingLayerImpl->id() : -1; |
658 m_currentlyScrollingLayerImpl = 0; | 665 m_currentlyScrollingLayerImpl = 0; |
659 m_renderSurfaceLayerList.clear(); | 666 m_renderSurfaceLayerList.clear(); |
660 | 667 |
661 return m_rootLayerImpl.release(); | 668 return m_rootLayerImpl.release(); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 } | 711 } |
705 | 712 |
706 m_renderer = renderer.release(); | 713 m_renderer = renderer.release(); |
707 m_resourceProvider = resourceProvider.release(); | 714 m_resourceProvider = resourceProvider.release(); |
708 if (m_renderer) | 715 if (m_renderer) |
709 m_context = contextRef.release(); | 716 m_context = contextRef.release(); |
710 | 717 |
711 if (!m_visible && m_renderer) | 718 if (!m_visible && m_renderer) |
712 m_renderer->setVisible(m_visible); | 719 m_renderer->setVisible(m_visible); |
713 | 720 |
| 721 m_client->onCanDrawStateChanged(canDraw()); |
| 722 |
714 return m_renderer; | 723 return m_renderer; |
715 } | 724 } |
716 | 725 |
| 726 void CCLayerTreeHostImpl::resetContentsTexturesPurged() |
| 727 { |
| 728 m_contentsTexturesPurged = false; |
| 729 m_client->onCanDrawStateChanged(canDraw()); |
| 730 } |
| 731 |
717 void CCLayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, con
st IntSize& deviceViewportSize) | 732 void CCLayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, con
st IntSize& deviceViewportSize) |
718 { | 733 { |
719 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de
viceViewportSize) | 734 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de
viceViewportSize) |
720 return; | 735 return; |
721 | 736 |
722 m_layoutViewportSize = layoutViewportSize; | 737 m_layoutViewportSize = layoutViewportSize; |
723 m_deviceViewportSize = deviceViewportSize; | 738 m_deviceViewportSize = deviceViewportSize; |
724 | 739 |
725 updateMaxScrollPosition(); | 740 updateMaxScrollPosition(); |
726 | 741 |
727 if (m_renderer) | 742 if (m_renderer) |
728 m_renderer->viewportChanged(); | 743 m_renderer->viewportChanged(); |
| 744 |
| 745 m_client->onCanDrawStateChanged(canDraw()); |
729 } | 746 } |
730 | 747 |
731 static void adjustScrollsForPageScaleChange(CCLayerImpl* layerImpl, float pageSc
aleChange) | 748 static void adjustScrollsForPageScaleChange(CCLayerImpl* layerImpl, float pageSc
aleChange) |
732 { | 749 { |
733 if (!layerImpl) | 750 if (!layerImpl) |
734 return; | 751 return; |
735 | 752 |
736 if (layerImpl->scrollable()) { | 753 if (layerImpl->scrollable()) { |
737 // We need to convert impl-side scroll deltas to pageScale space. | 754 // We need to convert impl-side scroll deltas to pageScale space. |
738 FloatSize scrollDelta = layerImpl->scrollDelta(); | 755 FloatSize scrollDelta = layerImpl->scrollDelta(); |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1270 | 1287 |
1271 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); | 1288 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); |
1272 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1289 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1273 m_client->setNeedsRedrawOnImplThread(); | 1290 m_client->setNeedsRedrawOnImplThread(); |
1274 | 1291 |
1275 for (size_t i = 0; i < layer->children().size(); ++i) | 1292 for (size_t i = 0; i < layer->children().size(); ++i) |
1276 animateScrollbarsRecursive(layer->children()[i].get(), monotonicTime); | 1293 animateScrollbarsRecursive(layer->children()[i].get(), monotonicTime); |
1277 } | 1294 } |
1278 | 1295 |
1279 } // namespace WebCore | 1296 } // namespace WebCore |
OLD | NEW |