Index: cc/CCOcclusionTracker.cpp |
diff --git a/cc/CCOcclusionTracker.cpp b/cc/CCOcclusionTracker.cpp |
index bedb80c1e87e13359e44101818e4afd5ee324f01..4bb31c1ed6b0f743f7c4c7914f400f18c7f3aa26 100644 |
--- a/cc/CCOcclusionTracker.cpp |
+++ b/cc/CCOcclusionTracker.cpp |
@@ -362,7 +362,7 @@ static inline IntRect computeUnoccludedContentRect(const IntRect& contentRect, c |
} |
template<typename LayerType, typename RenderSurfaceType> |
-IntRect CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::unoccludedContentRect(const LayerType* layer, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const |
+IntRect CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::unoccludedContentRect(const LayerType* renderTarget, const IntRect& contentRect, const WebKit::WebTransformationMatrix& drawTransform, bool transformsToTargetKnown, const IntRect& clipRectInTarget, bool* hasOcclusionFromOutsideTargetSurface) const |
{ |
ASSERT(!m_stack.isEmpty()); |
if (m_stack.isEmpty()) |
@@ -370,18 +370,18 @@ IntRect CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::unoccludedContentR |
if (contentRect.isEmpty()) |
return contentRect; |
- ASSERT(layer->renderTarget() == m_stack.last().target); |
+ ASSERT(renderTarget == m_stack.last().target); |
// We want to return a rect that contains all the visible parts of |contentRect| in both screen space and in the target surface. |
// So we find the visible parts of |contentRect| in each space, and take the intersection. |
IntRect unoccludedInScreen = contentRect; |
- if (layerTransformsToScreenKnown(layer)) |
- unoccludedInScreen = computeUnoccludedContentRect(contentRect, layer->screenSpaceTransform(), m_rootTargetRect, m_stack.last().occlusionInScreen); |
+ if (layerTransformsToScreenKnown(renderTarget) && transformsToTargetKnown) |
+ unoccludedInScreen = computeUnoccludedContentRect(contentRect, drawTransform * renderTarget->renderSurface()->screenSpaceTransform(), m_rootTargetRect, m_stack.last().occlusionInScreen); |
IntRect unoccludedInTarget = contentRect; |
- if (layerTransformsToTargetKnown(layer)) |
- unoccludedInTarget = computeUnoccludedContentRect(contentRect, layer->drawTransform(), layerClipRectInTarget(layer), m_stack.last().occlusionInTarget); |
+ if (transformsToTargetKnown) |
+ unoccludedInTarget = computeUnoccludedContentRect(contentRect, drawTransform, clipRectInTarget, m_stack.last().occlusionInTarget); |
if (hasOcclusionFromOutsideTargetSurface) |
*hasOcclusionFromOutsideTargetSurface = (intersection(unoccludedInScreen, unoccludedInTarget) != unoccludedInTarget); |
@@ -461,7 +461,7 @@ template void CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::fini |
template void CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::leaveToRenderTarget(const LayerChromium* newTarget); |
template void CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::markOccludedBehindLayer(const LayerChromium*); |
template bool CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::occluded(const LayerChromium*, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const; |
-template IntRect CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::unoccludedContentRect(const LayerChromium*, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const; |
+template IntRect CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::unoccludedContentRect(const LayerChromium*, const IntRect& contentRect, const WebKit::WebTransformationMatrix& drawTransform, bool transformsToTargetKnown, const IntRect& clipRectInTarget, bool* hasOcclusionFromOutsideTargetSurface = 0) const; |
template IntRect CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::unoccludedContributingSurfaceContentRect(const LayerChromium*, bool forReplica, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const; |
template IntRect CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::layerClipRectInTarget(const LayerChromium*) const; |
@@ -473,7 +473,7 @@ template void CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::finishedRend |
template void CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::leaveToRenderTarget(const CCLayerImpl* newTarget); |
template void CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::markOccludedBehindLayer(const CCLayerImpl*); |
template bool CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::occluded(const CCLayerImpl*, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const; |
-template IntRect CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::unoccludedContentRect(const CCLayerImpl*, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const; |
+template IntRect CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::unoccludedContentRect(const CCLayerImpl*, const IntRect& contentRect, const WebKit::WebTransformationMatrix& drawTransform, bool transformsToTargetKnown, const IntRect& clipRectInTarget, bool* hasOcclusionFromOutsideTargetSurface = 0) const; |
template IntRect CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::unoccludedContributingSurfaceContentRect(const CCLayerImpl*, bool forReplica, const IntRect& contentRect, bool* hasOcclusionFromOutsideTargetSurface) const; |
template IntRect CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::layerClipRectInTarget(const CCLayerImpl*) const; |