Index: cc/occlusion_tracker_unittest.cc |
diff --git a/cc/occlusion_tracker_unittest.cc b/cc/occlusion_tracker_unittest.cc |
index d3385a3aa35ac9e1b36e4411016a65cc1cb392bd..ecf6be37dbe7db5a92f40d6a30fb1c67e9bba2f0 100644 |
--- a/cc/occlusion_tracker_unittest.cc |
+++ b/cc/occlusion_tracker_unittest.cc |
@@ -9,14 +9,14 @@ |
#include "CCAnimationTestCommon.h" |
#include "CCGeometryTestUtils.h" |
#include "CCLayerAnimationController.h" |
-#include "CCLayerImpl.h" |
#include "CCLayerTreeHostCommon.h" |
#include "CCMathUtil.h" |
#include "CCOcclusionTrackerTestCommon.h" |
#include "CCOverdrawMetrics.h" |
#include "CCSingleThreadProxy.h" |
-#include "LayerChromium.h" |
+#include "CCTiledLayerImpl.h" |
#include "Region.h" |
+#include "TiledLayerChromium.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include <public/WebFilterOperation.h> |
@@ -29,10 +29,10 @@ using namespace WebKitTests; |
namespace { |
-class TestContentLayerChromium : public LayerChromium { |
+class TestContentLayerChromium : public TiledLayerChromium { |
public: |
TestContentLayerChromium() |
- : LayerChromium() |
+ : TiledLayerChromium() |
, m_overrideOpaqueContentsRect(false) |
{ |
} |
@@ -50,6 +50,9 @@ public: |
m_opaqueContentsRect = opaqueContentsRect; |
} |
+ virtual LayerTextureUpdater* textureUpdater() const OVERRIDE { return 0; } |
+ virtual void createTextureUpdaterIfNeeded() OVERRIDE { } |
+ |
private: |
virtual ~TestContentLayerChromium() |
{ |
@@ -59,10 +62,10 @@ private: |
IntRect m_opaqueContentsRect; |
}; |
-class TestContentLayerImpl : public CCLayerImpl { |
+class TestContentLayerImpl : public CCTiledLayerImpl { |
public: |
TestContentLayerImpl(int id) |
- : CCLayerImpl(id) |
+ : CCTiledLayerImpl(id) |
, m_overrideOpaqueContentsRect(false) |
{ |
setDrawsContent(true); |
@@ -270,7 +273,7 @@ protected: |
ASSERT(!root->renderSurface()); |
- CCLayerTreeHostCommon::calculateDrawTransforms(root, root->bounds(), 1, &layerSorter, dummyMaxTextureSize, m_renderSurfaceLayerListImpl); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root, root->bounds(), 1, 1, &layerSorter, dummyMaxTextureSize, m_renderSurfaceLayerListImpl); |
m_layerIterator = m_layerIteratorBegin = Types::LayerIterator::begin(&m_renderSurfaceLayerListImpl); |
} |
@@ -282,7 +285,7 @@ protected: |
ASSERT(!root->renderSurface()); |
- CCLayerTreeHostCommon::calculateDrawTransforms(root, root->bounds(), 1, dummyMaxTextureSize, m_renderSurfaceLayerListChromium); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root, root->bounds(), 1, 1, dummyMaxTextureSize, m_renderSurfaceLayerListChromium); |
m_layerIterator = m_layerIteratorBegin = Types::LayerIterator::begin(&m_renderSurfaceLayerListChromium); |
} |
@@ -430,14 +433,18 @@ private: |
RUN_TEST_IMPL_THREAD_OPAQUE_PAINTS(ClassName) |
#define MAIN_THREAD_TEST(ClassName) \ |
- RUN_TEST_MAIN_THREAD_OPAQUE_LAYERS(ClassName) |
+ RUN_TEST_MAIN_THREAD_OPAQUE_LAYERS(ClassName) \ |
+ RUN_TEST_MAIN_THREAD_OPAQUE_PAINTS(ClassName) |
#define IMPL_THREAD_TEST(ClassName) \ |
- RUN_TEST_IMPL_THREAD_OPAQUE_LAYERS(ClassName) |
+ RUN_TEST_IMPL_THREAD_OPAQUE_LAYERS(ClassName) \ |
+ RUN_TEST_IMPL_THREAD_OPAQUE_PAINTS(ClassName) |
#define MAIN_AND_IMPL_THREAD_TEST(ClassName) \ |
RUN_TEST_MAIN_THREAD_OPAQUE_LAYERS(ClassName) \ |
- RUN_TEST_IMPL_THREAD_OPAQUE_LAYERS(ClassName) |
+ RUN_TEST_MAIN_THREAD_OPAQUE_PAINTS(ClassName) \ |
+ RUN_TEST_IMPL_THREAD_OPAQUE_LAYERS(ClassName) \ |
+ RUN_TEST_IMPL_THREAD_OPAQUE_PAINTS(ClassName) |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestIdentityTransforms : public CCOcclusionTrackerTest<Types, opaqueLayers> { |
@@ -2201,7 +2208,7 @@ protected: |
typename Types::ContentLayerType* parent = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(500, 500)); |
typename Types::ContentLayerType* surface = this->createDrawingSurface(parent, surfaceTransform, FloatPoint(0, 0), IntSize(300, 300), false); |
typename Types::ContentLayerType* surface2 = this->createDrawingSurface(parent, this->identityMatrix, FloatPoint(50, 50), IntSize(300, 300), false); |
- surface->setOpaqueContentsRect(IntRect(0, 0, 200, 200)); |
+ surface->setOpaqueContentsRect(IntRect(0, 0, 400, 400)); |
surface2->setOpaqueContentsRect(IntRect(0, 0, 200, 200)); |
this->calcDrawEtc(parent); |
@@ -2229,7 +2236,8 @@ protected: |
} |
}; |
-MAIN_AND_IMPL_THREAD_TEST(CCOcclusionTrackerTestSurfaceOcclusionTranslatesToParent); |
+// Scale transforms require main thread+commit to get contentBounds right. |
+MAIN_THREAD_TEST(CCOcclusionTrackerTestSurfaceOcclusionTranslatesToParent); |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestSurfaceOcclusionTranslatesWithClipping : public CCOcclusionTrackerTest<Types, opaqueLayers> { |
@@ -2571,15 +2579,15 @@ protected: |
// Everything outside the surface/replica is occluded but the surface/replica itself is not. |
this->enterLayer(filteredSurface, occlusion); |
- EXPECT_RECT_EQ(IntRect(1, 0, 99, 100), occlusion.unoccludedContentRect(filteredSurface, IntRect(1, 0, 100, 100))); |
- EXPECT_RECT_EQ(IntRect(0, 1, 100, 99), occlusion.unoccludedContentRect(filteredSurface, IntRect(0, 1, 100, 100))); |
- EXPECT_RECT_EQ(IntRect(0, 0, 99, 100), occlusion.unoccludedContentRect(filteredSurface, IntRect(-1, 0, 100, 100))); |
- EXPECT_RECT_EQ(IntRect(0, 0, 100, 99), occlusion.unoccludedContentRect(filteredSurface, IntRect(0, -1, 100, 100))); |
- |
- EXPECT_RECT_EQ(IntRect(300 + 1, 0, 99, 100), occlusion.unoccludedContentRect(filteredSurface, IntRect(300 + 1, 0, 100, 100))); |
- EXPECT_RECT_EQ(IntRect(300 + 0, 1, 100, 99), occlusion.unoccludedContentRect(filteredSurface, IntRect(300 + 0, 1, 100, 100))); |
- EXPECT_RECT_EQ(IntRect(300 + 0, 0, 99, 100), occlusion.unoccludedContentRect(filteredSurface, IntRect(300 - 1, 0, 100, 100))); |
- EXPECT_RECT_EQ(IntRect(300 + 0, 0, 100, 99), occlusion.unoccludedContentRect(filteredSurface, IntRect(300 + 0, -1, 100, 100))); |
+ EXPECT_RECT_EQ(IntRect(1, 0, 49, 50), occlusion.unoccludedContentRect(filteredSurface, IntRect(1, 0, 50, 50))); |
+ EXPECT_RECT_EQ(IntRect(0, 1, 50, 49), occlusion.unoccludedContentRect(filteredSurface, IntRect(0, 1, 50, 50))); |
+ EXPECT_RECT_EQ(IntRect(0, 0, 49, 50), occlusion.unoccludedContentRect(filteredSurface, IntRect(-1, 0, 50, 50))); |
+ EXPECT_RECT_EQ(IntRect(0, 0, 50, 49), occlusion.unoccludedContentRect(filteredSurface, IntRect(0, -1, 50, 50))); |
+ |
+ EXPECT_RECT_EQ(IntRect(150 + 1, 0, 49, 50), occlusion.unoccludedContentRect(filteredSurface, IntRect(150 + 1, 0, 50, 50))); |
+ EXPECT_RECT_EQ(IntRect(150 + 0, 1, 50, 49), occlusion.unoccludedContentRect(filteredSurface, IntRect(150 + 0, 1, 50, 50))); |
+ EXPECT_RECT_EQ(IntRect(150 + 0, 0, 49, 50), occlusion.unoccludedContentRect(filteredSurface, IntRect(150 - 1, 0, 50, 50))); |
+ EXPECT_RECT_EQ(IntRect(150 + 0, 0, 50, 49), occlusion.unoccludedContentRect(filteredSurface, IntRect(150 + 0, -1, 50, 50))); |
this->leaveLayer(filteredSurface, occlusion); |
// The filtered layer/replica does not occlude. |
@@ -2589,7 +2597,7 @@ protected: |
EXPECT_EQ(0u, occlusion.occlusionInTargetSurface().rects().size()); |
// The surface has a background blur, so it needs pixels that are currently considered occluded in order to be drawn. So the pixels |
- // it needs should be removed some the occluded area so that when we get to the parent they are drawn. |
+ // it needs should be removed from the occluded area so that when we get to the parent they are drawn. |
this->visitContributingSurface(filteredSurface, occlusion); |
this->enterLayer(parent, occlusion); |
@@ -2645,7 +2653,8 @@ protected: |
} |
}; |
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilter); |
+// Scale transforms require main thread+commit to get contentBounds right. |
+MAIN_THREAD_TEST(CCOcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilter); |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestTwoBackgroundFiltersReduceOcclusionTwice : public CCOcclusionTrackerTest<Types, opaqueLayers> { |
@@ -2656,12 +2665,12 @@ protected: |
scaleByHalf.scale(0.5); |
// Makes two surfaces that completely cover |parent|. The occlusion both above and below the filters will be reduced by each of them. |
- typename Types::ContentLayerType* root = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(75, 75)); |
- typename Types::LayerType* parent = this->createSurface(root, scaleByHalf, FloatPoint(0, 0), IntSize(150, 150)); |
+ typename Types::ContentLayerType* root = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(150, 150)); |
+ typename Types::LayerType* parent = this->createDrawingSurface(root, scaleByHalf, FloatPoint(0, 0), IntSize(300, 300), false); |
parent->setMasksToBounds(true); |
- typename Types::LayerType* filteredSurface1 = this->createDrawingLayer(parent, scaleByHalf, FloatPoint(0, 0), IntSize(300, 300), false); |
- typename Types::LayerType* filteredSurface2 = this->createDrawingLayer(parent, scaleByHalf, FloatPoint(0, 0), IntSize(300, 300), false); |
- typename Types::LayerType* occludingLayerAbove = this->createDrawingLayer(parent, this->identityMatrix, FloatPoint(100, 100), IntSize(50, 50), true); |
+ typename Types::LayerType* filteredSurface1 = this->createDrawingLayer(parent, scaleByHalf, FloatPoint(0, 0), IntSize(600, 600), false); |
+ typename Types::LayerType* filteredSurface2 = this->createDrawingLayer(parent, scaleByHalf, FloatPoint(0, 0), IntSize(600, 600), false); |
+ typename Types::LayerType* occludingLayerAbove = this->createDrawingLayer(parent, this->identityMatrix, FloatPoint(200, 200), IntSize(100, 100), true); |
// Filters make the layers own surfaces. |
WebFilterOperations filters; |
@@ -2679,9 +2688,9 @@ protected: |
occlusion.setLayerClipRect(IntRect(0, 0, 1000, 1000)); |
this->visitLayer(occludingLayerAbove, occlusion); |
- EXPECT_RECT_EQ(IntRect(100 / 2, 100 / 2, 50 / 2, 50 / 2), occlusion.occlusionInScreenSpace().bounds()); |
+ EXPECT_RECT_EQ(IntRect(200 / 2, 200 / 2, 100 / 2, 100 / 2), occlusion.occlusionInScreenSpace().bounds()); |
EXPECT_EQ(1u, occlusion.occlusionInScreenSpace().rects().size()); |
- EXPECT_RECT_EQ(IntRect(100, 100, 50, 50), occlusion.occlusionInTargetSurface().bounds()); |
+ EXPECT_RECT_EQ(IntRect(200 / 2, 200 / 2, 100 / 2, 100 / 2), occlusion.occlusionInTargetSurface().bounds()); |
EXPECT_EQ(1u, occlusion.occlusionInTargetSurface().rects().size()); |
this->visitLayer(filteredSurface2, occlusion); |
@@ -2692,22 +2701,18 @@ protected: |
ASSERT_EQ(1u, occlusion.occlusionInScreenSpace().rects().size()); |
ASSERT_EQ(1u, occlusion.occlusionInTargetSurface().rects().size()); |
- // Test expectations in the target. |
- IntRect expectedOcclusion = IntRect(100 + outsetRight * 2, 100 + outsetBottom * 2, 50 - (outsetLeft + outsetRight) * 2, 50 - (outsetTop + outsetBottom) * 2); |
+ // Test expectations in the target. The target is scaled in half so the occlusion should be scaled within its contents as well. |
+ IntRect expectedOcclusion = IntRect(200 / 2 + outsetRight * 2, 200 / 2 + outsetBottom * 2, 100 / 2 - (outsetLeft + outsetRight) * 2, 100 / 2 - (outsetTop + outsetBottom) * 2); |
EXPECT_RECT_EQ(expectedOcclusion, occlusion.occlusionInTargetSurface().rects()[0]); |
- // Test expectations in the screen. Take the ceiling of half of the outsets. |
- outsetTop = (outsetTop + 1) / 2; |
- outsetRight = (outsetRight + 1) / 2; |
- outsetBottom = (outsetBottom + 1) / 2; |
- outsetLeft = (outsetLeft + 1) / 2; |
- expectedOcclusion = IntRect(100 / 2 + outsetRight * 2, 100 / 2 + outsetBottom * 2, 50 / 2 - (outsetLeft + outsetRight) * 2, 50 /2 - (outsetTop + outsetBottom) * 2); |
- |
+ // Test expectations in the screen. The parent is scaled in half so it will scale the occlusion to the screen as well. |
+ expectedOcclusion = IntRect(200 / 2 + outsetRight * 2, 200 / 2 + outsetBottom * 2, 100 / 2 - (outsetLeft + outsetRight) * 2, 100 / 2 - (outsetTop + outsetBottom) * 2); |
EXPECT_RECT_EQ(expectedOcclusion, occlusion.occlusionInScreenSpace().rects()[0]); |
} |
}; |
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestTwoBackgroundFiltersReduceOcclusionTwice); |
+// Scale transforms require main thread+commit to get contentBounds right. |
+MAIN_THREAD_TEST(CCOcclusionTrackerTestTwoBackgroundFiltersReduceOcclusionTwice); |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilterWithClip : public CCOcclusionTrackerTest<Types, opaqueLayers> { |
@@ -2881,7 +2886,8 @@ protected: |
} |
}; |
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDontReduceOcclusionBelowBackgroundFilter); |
+// Scale transforms require main thread+commit to get contentBounds right. |
+MAIN_THREAD_TEST(CCOcclusionTrackerTestDontReduceOcclusionBelowBackgroundFilter); |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestDontReduceOcclusionIfBackgroundFilterIsOccluded : public CCOcclusionTrackerTest<Types, opaqueLayers> { |
@@ -2929,7 +2935,8 @@ protected: |
} |
}; |
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDontReduceOcclusionIfBackgroundFilterIsOccluded); |
+// Scale transforms require main thread+commit to get contentBounds right. |
+MAIN_THREAD_TEST(CCOcclusionTrackerTestDontReduceOcclusionIfBackgroundFilterIsOccluded); |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestReduceOcclusionWhenBackgroundFilterIsPartiallyOccluded : public CCOcclusionTrackerTest<Types, opaqueLayers> { |
@@ -3001,7 +3008,8 @@ protected: |
} |
}; |
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestReduceOcclusionWhenBackgroundFilterIsPartiallyOccluded); |
+// Scale transforms require main thread+commit to get contentBounds right. |
+MAIN_THREAD_TEST(CCOcclusionTrackerTestReduceOcclusionWhenBackgroundFilterIsPartiallyOccluded); |
template<class Types, bool opaqueLayers> |
class CCOcclusionTrackerTestMinimumTrackingSize : public CCOcclusionTrackerTest<Types, opaqueLayers> { |