Index: cc/CCLayerTreeHostImpl.cpp |
diff --git a/cc/CCLayerTreeHostImpl.cpp b/cc/CCLayerTreeHostImpl.cpp |
index 85ab6cabde072309596352fb94729672a3c9944a..1d67042f4999d85e52c034a8a6f0a5b443bfa79e 100644 |
--- a/cc/CCLayerTreeHostImpl.cpp |
+++ b/cc/CCLayerTreeHostImpl.cpp |
@@ -7,6 +7,7 @@ |
#include "CCLayerTreeHostImpl.h" |
#include "CCActiveGestureAnimation.h" |
+#include "CCAppendQuadsData.h" |
#include "CCDamageTracker.h" |
#include "CCDebugRectHistory.h" |
#include "CCDelayBasedTimeSource.h" |
@@ -286,27 +287,30 @@ bool CCLayerTreeHostImpl::calculateRenderPasses(FrameData& frame) |
for (CCLayerIteratorType it = CCLayerIteratorType::begin(frame.renderSurfaceLayerList); it != end; ++it) { |
int targetRenderPassId = it.targetRenderSurfaceLayer()->id(); |
CCRenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPassId); |
- bool hadMissingTiles = false; |
occlusionTracker.enterLayer(it); |
+ CCAppendQuadsData appendQuadsData; |
+ |
if (it.representsContributingRenderSurface()) { |
int contributingRenderPassId = it->id(); |
CCRenderPass* contributingRenderPass = frame.renderPassesById.get(contributingRenderPassId); |
- targetRenderPass->appendQuadsForRenderSurfaceLayer(*it, contributingRenderPass, &occlusionTracker); |
+ targetRenderPass->appendQuadsForRenderSurfaceLayer(*it, contributingRenderPass, &occlusionTracker, appendQuadsData); |
} else if (it.representsItself() && !it->visibleContentRect().isEmpty()) { |
bool hasOcclusionFromOutsideTargetSurface; |
- if (occlusionTracker.occluded(*it, it->visibleContentRect(), &hasOcclusionFromOutsideTargetSurface)) { |
- if (hasOcclusionFromOutsideTargetSurface) |
- targetRenderPass->setHasOcclusionFromOutsideTargetSurface(hasOcclusionFromOutsideTargetSurface); |
- } else { |
+ if (occlusionTracker.occluded(*it, it->visibleContentRect(), &hasOcclusionFromOutsideTargetSurface)) |
+ appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclusionFromOutsideTargetSurface; |
+ else { |
it->willDraw(m_resourceProvider.get()); |
frame.willDrawLayers.append(*it); |
- targetRenderPass->appendQuadsForLayer(*it, &occlusionTracker, hadMissingTiles); |
+ targetRenderPass->appendQuadsForLayer(*it, &occlusionTracker, appendQuadsData); |
} |
} |
- if (hadMissingTiles) { |
+ if (appendQuadsData.hadOcclusionFromOutsideTargetSurface) |
+ targetRenderPass->setHasOcclusionFromOutsideTargetSurface(true); |
+ |
+ if (appendQuadsData.hadMissingTiles) { |
bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimating() || it->drawTransformIsAnimating(); |
if (layerHasAnimatingTransform) |
drawFrame = false; |