Log Message
[chromium] Estimate pixel count for frame rate control https://bugs.webkit.org/show_bug.cgi?id=74982
Reviewed by James Robinson. Source/WebCore: Value checks added to unit tests. Adds mechanism to compute and collect statistics on pixel overdraw for selected frames. * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses): * platform/graphics/chromium/cc/CCQuadCuller.cpp: (WebCore::wedgeProduct): (WebCore): (WebCore::quadArea): (WebCore::CCQuadCuller::cullOccludedQuads): * platform/graphics/chromium/cc/CCQuadCuller.h: (CCQuadCuller): * platform/graphics/chromium/cc/CCRenderPass.cpp: (WebCore::CCRenderPass::optimizeQuads): * platform/graphics/chromium/cc/CCRenderPass.h: (CCOverdrawCounts): (WebCore): (CCRenderPass): Source/WebKit/chromium: Adds mechanism to compute and collect statistics on pixel overdraw for selected frames. * tests/CCQuadCullerTest.cpp: (WebCore): (WebCore::TEST):
Modified Paths
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
- trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp
- trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h
- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h
- trunk/Source/WebKit/chromium/ChangeLog
- trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp
Diff
Modified: trunk/Source/WebCore/ChangeLog (109303 => 109304)
--- trunk/Source/WebCore/ChangeLog 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebCore/ChangeLog 2012-03-01 04:33:03 UTC (rev 109304)
@@ -1,3 +1,30 @@
+2012-02-29 W. James MacLean <wjmacl...@chromium.org>
+
+ [chromium] Estimate pixel count for frame rate control
+ https://bugs.webkit.org/show_bug.cgi?id=74982
+
+ Reviewed by James Robinson.
+
+ Value checks added to unit tests.
+
+ Adds mechanism to compute and collect statistics on pixel overdraw for selected frames.
+
+ * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
+ (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses):
+ * platform/graphics/chromium/cc/CCQuadCuller.cpp:
+ (WebCore::wedgeProduct):
+ (WebCore):
+ (WebCore::quadArea):
+ (WebCore::CCQuadCuller::cullOccludedQuads):
+ * platform/graphics/chromium/cc/CCQuadCuller.h:
+ (CCQuadCuller):
+ * platform/graphics/chromium/cc/CCRenderPass.cpp:
+ (WebCore::CCRenderPass::optimizeQuads):
+ * platform/graphics/chromium/cc/CCRenderPass.h:
+ (CCOverdrawCounts):
+ (WebCore):
+ (CCRenderPass):
+
2012-02-29 Jason Liu <jason....@torchmobile.com.cn>
[BlackBerry]Make about:cache feature available in release version.
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp (109303 => 109304)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp 2012-03-01 04:33:03 UTC (rev 109304)
@@ -234,10 +234,17 @@
bool haveDamageRect = layerRendererCapabilities().usingPartialSwap;
+ // FIXME: compute overdraw metrics only occasionally, not every frame.
+ CCOverdrawCounts overdrawCounts;
for (unsigned i = 0; i < passes.size(); ++i) {
FloatRect damageRect = passes[i]->targetSurface()->damageTracker()->currentDamageRect();
- passes[i]->optimizeQuads(haveDamageRect, damageRect);
+ passes[i]->optimizeQuads(haveDamageRect, damageRect, &overdrawCounts);
}
+
+ float normalization = 1000.f / (m_layerRenderer->viewportWidth() * m_layerRenderer->viewportHeight());
+ PlatformSupport::histogramCustomCounts("Renderer4.pixelOverdrawOpaque", static_cast<int>(normalization * overdrawCounts.m_pixelsDrawnOpaque), 100, 1000000, 50);
+ PlatformSupport::histogramCustomCounts("Renderer4.pixelOverdrawTransparent", static_cast<int>(normalization * overdrawCounts.m_pixelsDrawnTransparent), 100, 1000000, 50);
+ PlatformSupport::histogramCustomCounts("Renderer4.pixelOverdrawCulled", static_cast<int>(normalization * overdrawCounts.m_pixelsCulled), 100, 1000000, 50);
}
void CCLayerTreeHostImpl::animateLayersRecursive(CCLayerImpl* current, double frameBeginTimeSecs, CCAnimationEventsVector& events, bool& didAnimate, bool& needsAnimateLayers)
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp (109303 => 109304)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp 2012-03-01 04:33:03 UTC (rev 109304)
@@ -75,8 +75,23 @@
return rect;
}
-void CCQuadCuller::cullOccludedQuads(CCQuadList& quadList, bool haveDamageRect, const FloatRect& damageRect)
+static float wedgeProduct(const FloatPoint& p1, const FloatPoint& p2)
{
+ return p1.x() * p2.y() - p1.y() * p2.x();
+}
+
+// Computes area of quads that are possibly non-rectangular. Can
+// be easily extended to polygons.
+static float quadArea(const FloatQuad& quad)
+{
+ return fabs(0.5 * (wedgeProduct(quad.p1(), quad.p2()) +
+ wedgeProduct(quad.p2(), quad.p3()) +
+ wedgeProduct(quad.p3(), quad.p4()) +
+ wedgeProduct(quad.p4(), quad.p1())));
+}
+
+void CCQuadCuller::cullOccludedQuads(CCQuadList& quadList, bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts* overdrawMetrics)
+{
if (!quadList.size())
return;
@@ -96,21 +111,44 @@
IntRect transformedVisibleQuadRect = rectSubtractRegion(opaqueCoverageThusFar, transformedQuadRect);
bool keepQuad = !transformedVisibleQuadRect.isEmpty();
- if (!keepQuad)
- continue;
// See if we can reduce the number of pixels to draw by reducing the size of the draw
// quad - we do this by changing its visible rect.
- if (transformedVisibleQuadRect != transformedQuadRect && drawQuad->isLayerAxisAlignedIntRect())
- drawQuad->setQuadVisibleRect(drawQuad->quadTransform().inverse().mapRect(transformedVisibleQuadRect));
+ bool didReduceQuadSize = false;
+ if (keepQuad) {
+ if (transformedVisibleQuadRect != transformedQuadRect && drawQuad->isLayerAxisAlignedIntRect()) {
+ drawQuad->setQuadVisibleRect(drawQuad->quadTransform().inverse().mapRect(transformedVisibleQuadRect));
+ didReduceQuadSize = true;
+ }
- // When adding rect to opaque region, deflate it to stay conservative.
- if (drawQuad->isLayerAxisAlignedIntRect() && !drawQuad->opaqueRect().isEmpty()) {
- FloatRect floatOpaqueRect = drawQuad->quadTransform().mapRect(FloatRect(drawQuad->opaqueRect()));
- opaqueCoverageThusFar.unite(Region(enclosedIntRect(floatOpaqueRect)));
+ // When adding rect to opaque region, deflate it to stay conservative.
+ if (drawQuad->isLayerAxisAlignedIntRect() && !drawQuad->opaqueRect().isEmpty()) {
+ FloatRect floatOpaqueRect = drawQuad->quadTransform().mapRect(FloatRect(drawQuad->opaqueRect()));
+ opaqueCoverageThusFar.unite(Region(enclosedIntRect(floatOpaqueRect)));
+ }
+
+ culledList.append(quadList[i].release());
}
- culledList.append(quadList[i].release());
+ if (overdrawMetrics) {
+ TRACE_EVENT("CCQuadCuller::cullOccludedQuads_OverdrawMetrics", 0, 0);
+ // We compute the area of the transformed quad, as this should be in pixels.
+ float area = quadArea(drawQuad->quadTransform().mapQuad(FloatQuad(drawQuad->quadRect())));
+ if (keepQuad) {
+ if (didReduceQuadSize) {
+ float visibleQuadRectArea = quadArea(drawQuad->quadTransform().mapQuad(FloatQuad(drawQuad->quadVisibleRect())));
+ overdrawMetrics->m_pixelsCulled += area - visibleQuadRectArea;
+ area = visibleQuadRectArea;
+ }
+ IntRect visibleOpaqueRect(drawQuad->quadVisibleRect());
+ visibleOpaqueRect.intersect(drawQuad->opaqueRect());
+ FloatQuad visibleOpaqueQuad = drawQuad->quadTransform().mapQuad(FloatQuad(visibleOpaqueRect));
+ float opaqueArea = quadArea(visibleOpaqueQuad);
+ overdrawMetrics->m_pixelsDrawnOpaque += opaqueArea;
+ overdrawMetrics->m_pixelsDrawnTransparent += area - opaqueArea;
+ } else
+ overdrawMetrics->m_pixelsCulled += area;
+ }
}
quadList.clear(); // Release anything that remains.
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h (109303 => 109304)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h 2012-03-01 04:33:03 UTC (rev 109304)
@@ -32,7 +32,9 @@
class CCQuadCuller {
public:
- static void cullOccludedQuads(CCQuadList&, bool haveDamageRect, const FloatRect& damageRect);
+ // Passing 0 for CCOverdrawCounts* is valid, and disable the extra computation
+ // done to estimate over draw statistics.
+ static void cullOccludedQuads(CCQuadList&, bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts*);
private:
// Make non-instantiable.
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp (109303 => 109304)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp 2012-03-01 04:33:03 UTC (rev 109304)
@@ -65,9 +65,9 @@
m_sharedQuadStateList.append(sharedQuadState.release());
}
-void CCRenderPass::optimizeQuads(bool haveDamageRect, const FloatRect& damageRect)
+void CCRenderPass::optimizeQuads(bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts* overdraw)
{
- CCQuadCuller::cullOccludedQuads(m_quadList, haveDamageRect, damageRect);
+ CCQuadCuller::cullOccludedQuads(m_quadList, haveDamageRect, damageRect, overdraw);
}
}
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h (109303 => 109304)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h 2012-03-01 04:33:03 UTC (rev 109304)
@@ -38,6 +38,16 @@
typedef Vector<OwnPtr<CCDrawQuad> > CCQuadList;
+struct CCOverdrawCounts {
+ // Count of pixels that are opaque (and thus occlude). Ideally this is no more
+ // than wiewport width x height.
+ float m_pixelsDrawnOpaque;
+ // Count of pixels that are possibly transparent, and cannot occlude.
+ float m_pixelsDrawnTransparent;
+ // Count of pixels not drawn as they are occluded by somthing opaque.
+ float m_pixelsCulled;
+};
+
class CCRenderPass {
WTF_MAKE_NONCOPYABLE(CCRenderPass);
public:
@@ -46,7 +56,8 @@
void appendQuadsForLayer(CCLayerImpl*);
void appendQuadsForRenderSurfaceLayer(CCLayerImpl*);
- void optimizeQuads(bool haveDamageRect, const FloatRect& damageRect);
+ // Passing in 0 for CCOverdrawCounts is valid, and disables performing overdraw calculations.
+ void optimizeQuads(bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts*);
const CCQuadList& quadList() const { return m_quadList; }
CCRenderSurface* targetSurface() const { return m_targetSurface; }
Modified: trunk/Source/WebKit/chromium/ChangeLog (109303 => 109304)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-03-01 04:33:03 UTC (rev 109304)
@@ -1,3 +1,16 @@
+2012-02-29 W. James MacLean <wjmacl...@chromium.org>
+
+ [chromium] Estimate pixel count for frame rate control
+ https://bugs.webkit.org/show_bug.cgi?id=74982
+
+ Reviewed by James Robinson.
+
+ Adds mechanism to compute and collect statistics on pixel overdraw for selected frames.
+
+ * tests/CCQuadCullerTest.cpp:
+ (WebCore):
+ (WebCore::TEST):
+
2012-02-29 James Simonsen <simon...@chromium.org>
[chromium] Fix navigation start time on cross-renderer navigation
Modified: trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp (109303 => 109304)
--- trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp 2012-03-01 04:26:39 UTC (rev 109303)
+++ trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp 2012-03-01 04:33:03 UTC (rev 109304)
@@ -64,6 +64,7 @@
#define DECLARE_AND_INITIALIZE_TEST_QUADS \
CCQuadList quadList; \
+ CCOverdrawCounts overdraw = {0, 0, 0}; \
TransformationMatrix childTransform; \
IntSize rootSize = IntSize(300, 300); \
IntRect rootRect = IntRect(IntPoint(), rootSize); \
@@ -79,8 +80,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 9u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 40000, 1);
}
TEST(CCQuadCullerTest, verifyCullWhenChildOpacityNotOne)
@@ -92,8 +96,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 13u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 40000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1);
}
TEST(CCQuadCullerTest, verifyCullWhenChildOpaqueFlagFalse)
@@ -105,8 +112,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 13u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 40000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1);
}
TEST(CCQuadCullerTest, verifyCullCenterTileOnly)
@@ -120,7 +130,7 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 12u);
IntRect quadVisibleRect1 = quadList[1].get()->quadVisibleRect();
@@ -137,6 +147,10 @@
IntRect quadVisibleRect6 = quadList[6].get()->quadVisibleRect();
EXPECT_EQ(quadVisibleRect6.height(), 50);
EXPECT_EQ(quadVisibleRect6.y(), 250);
+
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 100000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 30000, 1);
}
TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize1)
@@ -158,8 +172,12 @@
quadList.append(MakeTileQuad(childState.get(), IntRect(IntPoint(), IntSize(100, 100))));
EXPECT_EQ(quadList.size(), 2u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 2u);
+
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 20363, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1);
}
TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize2)
@@ -181,8 +199,12 @@
quadList.append(MakeTileQuad(childState.get(), IntRect(IntPoint(), IntSize(100, 100))));
EXPECT_EQ(quadList.size(), 2u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 2u);
+
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 19643, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1);
}
TEST(CCQuadCullerTest, verifyCullChildLinesUpBottomRight)
@@ -196,8 +218,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 9u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 40000, 1);
}
TEST(CCQuadCullerTest, verifyCullSubRegion)
@@ -212,8 +237,11 @@
setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 12u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 30000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 10000, 1);
}
TEST(CCQuadCullerTest, verifyCullSubRegion2)
@@ -228,8 +256,11 @@
setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 12u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 25000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 15000, 1);
}
TEST(CCQuadCullerTest, verifyCullSubRegionCheckOvercull)
@@ -244,7 +275,7 @@
setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 13u);
}
@@ -260,8 +291,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 13u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 130000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1);
}
// This test requires some explanation: here we are rotating the quads to be culled.
@@ -282,11 +316,14 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, false, IntRect());
+ CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw);
EXPECT_EQ(quadList.size(), 12u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 120000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 10000, 1);
}
-TEST(CCQuadCullerTest, veriftyCullOutsideScissorOverTile)
+TEST(CCQuadCullerTest, verifyCullOutsideScissorOverTile)
{
DECLARE_AND_INITIALIZE_TEST_QUADS
@@ -295,11 +332,14 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(200, 100, 100, 100));
+ CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(200, 100, 100, 100), &overdraw);
EXPECT_EQ(quadList.size(), 1u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 10000, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 120000, 1);
}
-TEST(CCQuadCullerTest, veriftyCullOutsideScissorOverCulledTile)
+TEST(CCQuadCullerTest, verifyCullOutsideScissorOverCulledTile)
{
DECLARE_AND_INITIALIZE_TEST_QUADS
@@ -308,11 +348,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(100, 100, 100, 100));
+ CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(100, 100, 100, 100), &overdraw);
EXPECT_EQ(quadList.size(), 1u);
}
-TEST(CCQuadCullerTest, veriftyCullOutsideScissorOverPartialTiles)
+TEST(CCQuadCullerTest, verifyCullOutsideScissorOverPartialTiles)
{
DECLARE_AND_INITIALIZE_TEST_QUADS
@@ -321,11 +361,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(50, 50, 200, 200));
+ CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(50, 50, 200, 200), &overdraw);
EXPECT_EQ(quadList.size(), 9u);
}
-TEST(CCQuadCullerTest, veriftyCullOutsideScissorOverNoTiles)
+TEST(CCQuadCullerTest, verifyCullOutsideScissorOverNoTiles)
{
DECLARE_AND_INITIALIZE_TEST_QUADS
@@ -334,8 +374,11 @@
setQuads(rootState.get(), childState.get(), quadList);
EXPECT_EQ(quadList.size(), 13u);
- CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(500, 500, 100, 100));
+ CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(500, 500, 100, 100), &overdraw);
EXPECT_EQ(quadList.size(), 0u);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1);
+ EXPECT_NEAR(overdraw.m_pixelsCulled, 130000, 1);
}
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes