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 "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 occlusionTracker.setNonOccludingScreenSpaceRectsContainer(&frame.nonOccl
udingScreenSpaceRects); | 467 occlusionTracker.setNonOccludingScreenSpaceRectsContainer(&frame.nonOccl
udingScreenSpaceRects); |
468 | 468 |
469 // Add quads to the Render passes in FrontToBack order to allow for testing
occlusion and performing culling during the tree walk. | 469 // Add quads to the Render passes in FrontToBack order to allow for testing
occlusion and performing culling during the tree walk. |
470 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl,
LayerIteratorActions::FrontToBack> LayerIteratorType; | 470 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl,
LayerIteratorActions::FrontToBack> LayerIteratorType; |
471 | 471 |
472 // Typically when we are missing a texture and use a checkerboard quad, we s
till draw the frame. However when the layer being | 472 // Typically when we are missing a texture and use a checkerboard quad, we s
till draw the frame. However when the layer being |
473 // checkerboarded is moving due to an impl-animation, we drop the frame to a
void flashing due to the texture suddenly appearing | 473 // checkerboarded is moving due to an impl-animation, we drop the frame to a
void flashing due to the texture suddenly appearing |
474 // in the future. | 474 // in the future. |
475 bool drawFrame = true; | 475 bool drawFrame = true; |
476 | 476 |
477 // Make sure we have the most recent info regarding which textures have been
uploaded. | |
478 checkForCompletedSetPixels(); | |
479 | |
480 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList)
; | 477 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList)
; |
481 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye
rList); it != end; ++it) { | 478 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye
rList); it != end; ++it) { |
482 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende
rSurface()->renderPassId(); | 479 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende
rSurface()->renderPassId(); |
483 RenderPass* targetRenderPass = frame.renderPassesById[targetRenderPassId
]; | 480 RenderPass* targetRenderPass = frame.renderPassesById[targetRenderPassId
]; |
484 | 481 |
485 occlusionTracker.enterLayer(it); | 482 occlusionTracker.enterLayer(it); |
486 | 483 |
487 AppendQuadsData appendQuadsData(targetRenderPass->id); | 484 AppendQuadsData appendQuadsData(targetRenderPass->id); |
488 | 485 |
489 if (it.representsContributingRenderSurface()) { | 486 if (it.representsContributingRenderSurface()) { |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
717 { | 714 { |
718 return m_proxy->hasImplThread(); | 715 return m_proxy->hasImplThread(); |
719 } | 716 } |
720 | 717 |
721 void LayerTreeHostImpl::ScheduleManageTiles() | 718 void LayerTreeHostImpl::ScheduleManageTiles() |
722 { | 719 { |
723 if (m_client) | 720 if (m_client) |
724 m_client->setNeedsManageTilesOnImplThread(); | 721 m_client->setNeedsManageTilesOnImplThread(); |
725 } | 722 } |
726 | 723 |
| 724 void LayerTreeHostImpl::DidUploadVisibleHighResolutionTile() |
| 725 { |
| 726 if (m_client) |
| 727 m_client->didUploadVisibleHighResolutionTileOnImplTread(); |
| 728 } |
| 729 |
727 bool LayerTreeHostImpl::shouldClearRootRenderPass() const | 730 bool LayerTreeHostImpl::shouldClearRootRenderPass() const |
728 { | 731 { |
729 return m_settings.shouldClearRootRenderPass; | 732 return m_settings.shouldClearRootRenderPass; |
730 } | 733 } |
731 | 734 |
732 void LayerTreeHostImpl::setManagedMemoryPolicy(const ManagedMemoryPolicy& policy
) | 735 void LayerTreeHostImpl::setManagedMemoryPolicy(const ManagedMemoryPolicy& policy
) |
733 { | 736 { |
734 if (m_managedMemoryPolicy == policy) | 737 if (m_managedMemoryPolicy == policy) |
735 return; | 738 return; |
736 | 739 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 } | 846 } |
844 | 847 |
845 const RendererCapabilities& LayerTreeHostImpl::rendererCapabilities() const | 848 const RendererCapabilities& LayerTreeHostImpl::rendererCapabilities() const |
846 { | 849 { |
847 return m_renderer->capabilities(); | 850 return m_renderer->capabilities(); |
848 } | 851 } |
849 | 852 |
850 bool LayerTreeHostImpl::swapBuffers() | 853 bool LayerTreeHostImpl::swapBuffers() |
851 { | 854 { |
852 DCHECK(m_renderer); | 855 DCHECK(m_renderer); |
853 return m_renderer->swapBuffers(); | 856 bool result = m_renderer->swapBuffers(); |
| 857 |
| 858 if (m_settings.implSidePainting && |
| 859 !activeTree()->AreVisibleResourcesReady()) { |
| 860 m_client->didSwapUseIncompleteTextureOnImplThread(); |
| 861 } |
| 862 |
| 863 return result; |
854 } | 864 } |
855 | 865 |
856 const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const | 866 const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const |
857 { | 867 { |
858 return m_deviceViewportSize; | 868 return m_deviceViewportSize; |
859 } | 869 } |
860 | 870 |
861 const LayerTreeSettings& LayerTreeHostImpl::settings() const | 871 const LayerTreeSettings& LayerTreeHostImpl::settings() const |
862 { | 872 { |
863 return m_settings; | 873 return m_settings; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
917 } | 927 } |
918 | 928 |
919 void LayerTreeHostImpl::createPendingTree() | 929 void LayerTreeHostImpl::createPendingTree() |
920 { | 930 { |
921 CHECK(!m_pendingTree); | 931 CHECK(!m_pendingTree); |
922 m_pendingTree = LayerTreeImpl::create(this); | 932 m_pendingTree = LayerTreeImpl::create(this); |
923 m_client->onCanDrawStateChanged(canDraw()); | 933 m_client->onCanDrawStateChanged(canDraw()); |
924 m_client->onHasPendingTreeStateChanged(pendingTree()); | 934 m_client->onHasPendingTreeStateChanged(pendingTree()); |
925 } | 935 } |
926 | 936 |
927 void LayerTreeHostImpl::checkForCompletedSetPixels() | 937 void LayerTreeHostImpl::checkForCompletedTextures() |
928 { | 938 { |
| 939 DCHECK(!m_client->isInsideDraw()) << "Checking for completed textures within
a draw may trigger spurious redraws."; |
929 if (m_tileManager) | 940 if (m_tileManager) |
930 m_tileManager->CheckForCompletedSetPixels(); | 941 m_tileManager->CheckForCompletedTextures(); |
931 } | 942 } |
932 | 943 |
933 void LayerTreeHostImpl::activatePendingTreeIfNeeded() | 944 void LayerTreeHostImpl::activatePendingTreeIfNeeded() |
934 { | 945 { |
935 if (!pendingTree()) | 946 if (!pendingTree()) |
936 return; | 947 return; |
937 | 948 |
938 checkForCompletedSetPixels(); | |
939 | |
940 // It's always fine to activate to an empty tree. Otherwise, only | 949 // It's always fine to activate to an empty tree. Otherwise, only |
941 // activate once all visible resources in pending tree are ready. | 950 // activate once all visible resources in pending tree are ready. |
942 if (activeTree()->RootLayer() && | 951 if (activeTree()->RootLayer() && |
943 !pendingTree()->AreVisibleResourcesReady()) | 952 !pendingTree()->AreVisibleResourcesReady()) |
944 return; | 953 return; |
945 | 954 |
946 activatePendingTree(); | 955 activatePendingTree(); |
947 } | 956 } |
948 | 957 |
949 void LayerTreeHostImpl::activatePendingTree() | 958 void LayerTreeHostImpl::activatePendingTree() |
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1674 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1683 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
1675 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1684 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
1676 } | 1685 } |
1677 | 1686 |
1678 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1687 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
1679 { | 1688 { |
1680 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1689 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
1681 } | 1690 } |
1682 | 1691 |
1683 } // namespace cc | 1692 } // namespace cc |
OLD | NEW |