[Chromium] New CCOcclusionTracker class with tests
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Feb 2012 18:45:57 +0000 (18:45 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Feb 2012 18:45:57 +0000 (18:45 +0000)
commitda3d575b936e9021a95377a9ec94683d8104f5e7
treec92472f472fcb62ecbf7fb761f43c5ad1f000d60
parentc17479272b52b494f0c3bcdb1769eabcd4991b72
[Chromium] New CCOcclusionTracker class with tests
https://bugs.webkit.org/show_bug.cgi?id=78549

Patch by Dana Jansens <danakj@chromium.org> on 2012-02-22
Reviewed by James Robinson.

Source/WebCore:

Adds a CCOcclusionTrackerBase template class that is able to track occlusion
of layers while traversing the layer tree from front-to-back, with typedefed
versions for the main and impl threads.

At each step of the front-to-back traversal, the class should be notified of
changes to the current render target, and when done working with a layer, the
layer is added the tracked occlusion.

The class provides tests for checking if a rect in content space
for a layer/surface is occluded by others in front of it.

Unit tests: CCOcclusionTrackerTest.cpp

* WebCore.gypi:
* platform/graphics/chromium/cc/CCOcclusionTracker.cpp: Added.
(WebCore):
(WebCore::::enterTargetRenderSurface):
(WebCore::::finishedTargetRenderSurface):
(WebCore::transformSurfaceOpaqueRegion):
(WebCore::::leaveToTargetRenderSurface):
(WebCore::contentToScreenSpaceTransform):
(WebCore::contentToTargetSurfaceTransform):
(WebCore::computeOcclusionBehindLayer):
(WebCore::::markOccludedBehindLayer):
(WebCore::testContentRectOccluded):
(WebCore::::occluded):
(WebCore::::surfaceOccluded):
(WebCore::rectSubtractRegion):
(WebCore::computeUnoccludedContentRect):
(WebCore::::unoccludedContentRect):
(WebCore::::surfaceUnoccludedContentRect):
(WebCore::::currentOcclusionInScreenSpace):
(WebCore::::currentOcclusionInTargetSurface):
* platform/graphics/chromium/cc/CCOcclusionTracker.h: Added.
(WebCore):
(CCOcclusionTrackerBase):
(WebCore::CCOcclusionTrackerBase::CCOcclusionTrackerBase):
(StackObject):

Source/WebKit/chromium:

* WebKit.gypi:
* tests/CCLayerTreeHostCommonTest.cpp:
(WebCore):
* tests/CCOcclusionTrackerTest.cpp: Added.
(WebCore):
(WebCore::setLayerPropertiesForTesting):
(LayerChromiumWithForcedDrawsContent):
(WebCore::LayerChromiumWithForcedDrawsContent::LayerChromiumWithForcedDrawsContent):
(WebCore::LayerChromiumWithForcedDrawsContent::drawsContent):
(TestCCOcclusionTracker):
(WebCore::TestCCOcclusionTracker::occlusionInScreenSpace):
(WebCore::TestCCOcclusionTracker::occlusionInTargetSurface):
(WebCore::TestCCOcclusionTracker::setOcclusionInScreenSpace):
(WebCore::TestCCOcclusionTracker::setOcclusionInTargetSurface):
(WebCore::TEST):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@108521 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/WebCore.gypi
Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp [new file with mode: 0644]
Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h [new file with mode: 0644]
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/WebKit.gypi
Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp
Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp [new file with mode: 0644]