Title: [110973] trunk/Source
Revision
110973
Author
[email protected]
Date
2012-03-16 02:20:30 -0700 (Fri, 16 Mar 2012)

Log Message

[chromium] Changes to overdraw metrics to allow upload tracking
https://bugs.webkit.org/show_bug.cgi?id=81222

Patch by Dana Jansens <[email protected]> on 2012-03-16
Reviewed by Adrienne Walker.

Source/WebCore:

Stick CCOverdrawMetrics into CCOcclusionTracker, so that it is available
everywhere that culling/drawing/painting is going on. Then we can stop
plumbing a metrics object through CCQuadCuller.

Rename the CCOverdrawMetrics "painting" stuff to "uploading" as this will
measure texture uploads rather than pixels painted in main memory.

Covered by existing tests.

* platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
(WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
* platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
(WebCore::::CCOcclusionTrackerBase):
* platform/graphics/chromium/cc/CCOcclusionTracker.h:
(CCOcclusionTrackerBase):
(WebCore::CCOcclusionTrackerBase::overdrawMetrics):
* platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
(WebCore::CCOverdrawMetrics::didCull):
(WebCore):
(WebCore::CCOverdrawMetrics::didDraw):
(WebCore::CCOverdrawMetrics::recordMetrics):
(WebCore::CCOverdrawMetrics::recordMetricsInternal):
* platform/graphics/chromium/cc/CCOverdrawMetrics.h:
(WebCore):
(WebCore::CCOverdrawMetrics::create):
(CCOverdrawMetrics):
* platform/graphics/chromium/cc/CCQuadCuller.cpp:
(WebCore::CCQuadCuller::CCQuadCuller):
(WebCore::CCQuadCuller::append):
* platform/graphics/chromium/cc/CCQuadCuller.h:
(CCQuadCuller):
* platform/graphics/chromium/cc/CCRenderPass.cpp:
(WebCore::CCRenderPass::appendQuadsForLayer):
* platform/graphics/chromium/cc/CCRenderPass.h:
(WebCore):
(CCRenderPass):

Source/WebKit/chromium:

* tests/CCQuadCullerTest.cpp:
(WebCore::appendQuads):
(WebCore):
(WebCore::TEST):
* tests/MockCCQuadCuller.h:
(WebCore::MockCCQuadCuller::MockCCQuadCuller):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (110972 => 110973)


--- trunk/Source/WebCore/ChangeLog	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/ChangeLog	2012-03-16 09:20:30 UTC (rev 110973)
@@ -1,3 +1,47 @@
+2012-03-16  Dana Jansens  <[email protected]>
+
+        [chromium] Changes to overdraw metrics to allow upload tracking
+        https://bugs.webkit.org/show_bug.cgi?id=81222
+
+        Reviewed by Adrienne Walker.
+
+        Stick CCOverdrawMetrics into CCOcclusionTracker, so that it is available
+        everywhere that culling/drawing/painting is going on. Then we can stop
+        plumbing a metrics object through CCQuadCuller.
+
+        Rename the CCOverdrawMetrics "painting" stuff to "uploading" as this will
+        measure texture uploads rather than pixels painted in main memory.
+
+        Covered by existing tests.
+
+        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
+        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
+        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
+        (WebCore::::CCOcclusionTrackerBase):
+        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
+        (CCOcclusionTrackerBase):
+        (WebCore::CCOcclusionTrackerBase::overdrawMetrics):
+        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
+        (WebCore::CCOverdrawMetrics::didCull):
+        (WebCore):
+        (WebCore::CCOverdrawMetrics::didDraw):
+        (WebCore::CCOverdrawMetrics::recordMetrics):
+        (WebCore::CCOverdrawMetrics::recordMetricsInternal):
+        * platform/graphics/chromium/cc/CCOverdrawMetrics.h:
+        (WebCore):
+        (WebCore::CCOverdrawMetrics::create):
+        (CCOverdrawMetrics):
+        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
+        (WebCore::CCQuadCuller::CCQuadCuller):
+        (WebCore::CCQuadCuller::append):
+        * platform/graphics/chromium/cc/CCQuadCuller.h:
+        (CCQuadCuller):
+        * platform/graphics/chromium/cc/CCRenderPass.cpp:
+        (WebCore::CCRenderPass::appendQuadsForLayer):
+        * platform/graphics/chromium/cc/CCRenderPass.h:
+        (WebCore):
+        (CCRenderPass):
+
 2012-03-16  Greg Billock  <[email protected]>
 
         Add TransferList IDL modifier, with support in V8 code gen.

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp	2012-03-16 09:20:30 UTC (rev 110973)
@@ -37,7 +37,6 @@
 #include "cc/CCLayerIterator.h"
 #include "cc/CCLayerTreeHost.h"
 #include "cc/CCLayerTreeHostCommon.h"
-#include "cc/CCOverdrawMetrics.h"
 #include "cc/CCPageScaleAnimation.h"
 #include "cc/CCRenderSurfaceDrawQuad.h"
 #include "cc/CCThreadTask.h"
@@ -271,9 +270,6 @@
         passes.append(pass.release());
     }
 
-    // FIXME: compute overdraw metrics only occasionally, not every frame.
-    CCOverdrawMetrics overdrawMetrics;
-
     IntRect scissorRect;
     if (layerRendererCapabilities().usingPartialSwap)
         scissorRect = enclosingIntRect(m_rootDamageRect);
@@ -307,11 +303,11 @@
         }
 
         it->willDraw(m_layerRenderer.get());
-        pass->appendQuadsForLayer(*it, &occlusionTracker, &overdrawMetrics);
+        pass->appendQuadsForLayer(*it, &occlusionTracker);
         occlusionTracker.markOccludedBehindLayer(*it);
     }
 
-    overdrawMetrics.recordMetrics(this);
+    occlusionTracker.overdrawMetrics().recordMetrics(this);
 }
 
 void CCLayerTreeHostImpl::animateLayersRecursive(CCLayerImpl* current, double monotonicTime, double wallClockTime, CCAnimationEventsVector& events, bool& didAnimate, bool& needsAnimateLayers)

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp	2012-03-16 09:20:30 UTC (rev 110973)
@@ -42,6 +42,7 @@
 CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace)
     : m_scissorRectInScreenSpace(scissorRectInScreenSpace)
     , m_surfaceDamageClient(0)
+    , m_overdrawMetrics(CCOverdrawMetrics::create())
     , m_usePaintTracking(true) // FIXME: Remove this when paint tracking is on for paint culling.
 {
 }
@@ -50,6 +51,7 @@
 CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace, const DamageClientType* surfaceDamageClient)
     : m_scissorRectInScreenSpace(scissorRectInScreenSpace)
     , m_surfaceDamageClient(surfaceDamageClient)
+    , m_overdrawMetrics(CCOverdrawMetrics::create())
     , m_usePaintTracking(true) // FIXME: Remove this when paint tracking is on for paint culling.
 {
 }

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h	2012-03-16 09:20:30 UTC (rev 110973)
@@ -29,6 +29,7 @@
 #include "FloatQuad.h"
 #include "Region.h"
 #include "TransformationMatrix.h"
+#include "cc/CCOverdrawMetrics.h"
 
 namespace WebCore {
 class CCLayerImpl;
@@ -77,6 +78,9 @@
     // Gives an unoccluded sub-rect of |contentRect| in the content space of the layer. Used when considering occlusion for a layer that paints/draws something.
     IntRect unoccludedContentRect(const LayerType*, const IntRect& contentRect) const;
 
+    // Report operations for recording overdraw metrics.
+    CCOverdrawMetrics& overdrawMetrics() const { return *m_overdrawMetrics.get(); }
+
     // FIXME: Remove this when paint tracking is on for paint culling.
     void setUsePaintTracking(bool use) { m_usePaintTracking = use; }
 
@@ -108,6 +112,7 @@
 private:
     IntRect m_scissorRectInScreenSpace;
     const DamageClientType* m_surfaceDamageClient;
+    OwnPtr<CCOverdrawMetrics> m_overdrawMetrics;
     bool m_usePaintTracking; // FIXME: Remove this when paint tracking is on for paint culling.
 };
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCOverdrawMetrics.cpp (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCOverdrawMetrics.cpp	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCOverdrawMetrics.cpp	2012-03-16 09:20:30 UTC (rev 110973)
@@ -58,20 +58,26 @@
                        wedgeProduct(quad.p4(), quad.p1())));
 }
 
-void CCOverdrawMetrics::didDraw(const TransformationMatrix& transformToTarget, const IntRect& beforeCullRect, const IntRect& afterCullRect, const IntRect& opaqueRect)
+void CCOverdrawMetrics::didCull(const TransformationMatrix& transformToTarget, const IntRect& beforeCullRect, const IntRect& afterCullRect)
 {
     float beforeCullArea = quadArea(transformToTarget.mapQuad(FloatQuad(beforeCullRect)));
     float afterCullArea = quadArea(transformToTarget.mapQuad(FloatQuad(afterCullRect)));
+
+    m_pixelsCulled += beforeCullArea - afterCullArea;
+}
+
+void CCOverdrawMetrics::didDraw(const TransformationMatrix& transformToTarget, const IntRect& afterCullRect, const IntRect& opaqueRect)
+{
+    float afterCullArea = quadArea(transformToTarget.mapQuad(FloatQuad(afterCullRect)));
     float afterCullOpaqueArea = quadArea(transformToTarget.mapQuad(FloatQuad(intersection(opaqueRect, afterCullRect))));
 
     m_pixelsDrawnOpaque += afterCullOpaqueArea;
     m_pixelsDrawnTranslucent += afterCullArea - afterCullOpaqueArea;
-    m_pixelsCulled += beforeCullArea - afterCullArea;
 }
 
 void CCOverdrawMetrics::recordMetrics(const CCLayerTreeHost* layerTreeHost) const
 {
-    recordMetricsInternal<CCLayerTreeHost>(PAINTING, layerTreeHost);
+    recordMetricsInternal<CCLayerTreeHost>(UPLOADING, layerTreeHost);
 }
 
 void CCOverdrawMetrics::recordMetrics(const CCLayerTreeHostImpl* layerTreeHost) const
@@ -97,13 +103,13 @@
         opaqueCounterName = "PixelsDrawnOpaque";
         translucentCounterName = "PixelsDrawnTranslucent";
         break;
-    case PAINTING:
-        histogramOpaqueName = "Renderer4.paintPixelCountOpaque";
-        histogramTranslucentName = "Renderer4.paintPixelCountTranslucent";
-        histogramCulledName = "Renderer4.paintPixelCountCulled";
-        cullCounterName = "PaintPixelsCulled";
-        opaqueCounterName = "PixelsPaintedOpaque";
-        translucentCounterName = "PixelsPaintedTranslucent";
+    case UPLOADING:
+        histogramOpaqueName = "Renderer4.uploadPixelCountOpaque";
+        histogramTranslucentName = "Renderer4.uploadPixelCountTranslucent";
+        histogramCulledName = "Renderer4.uploadPixelCountCulled";
+        cullCounterName = "UploadPixelsCulled";
+        opaqueCounterName = "PixelsUploadedOpaque";
+        translucentCounterName = "PixelsUploadedTranslucent";
         break;
     }
     ASSERT(histogramOpaqueName);

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCOverdrawMetrics.h (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCOverdrawMetrics.h	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCOverdrawMetrics.h	2012-03-16 09:20:30 UTC (rev 110973)
@@ -25,17 +25,21 @@
 #ifndef CCOverdrawMetrics_h
 #define CCOverdrawMetrics_h
 
+#include <wtf/PassOwnPtr.h>
+
 namespace WebCore {
 class IntRect;
 class TransformationMatrix;
 class CCLayerTreeHost;
 class CCLayerTreeHostImpl;
 
+// FIXME: compute overdraw metrics only occasionally, not every frame.
 class CCOverdrawMetrics {
 public:
-    CCOverdrawMetrics();
+    static PassOwnPtr<CCOverdrawMetrics> create() { return adoptPtr(new CCOverdrawMetrics()); }
 
-    void didDraw(const TransformationMatrix& transformToTarget, const IntRect& beforeCullRect, const IntRect& afterCullRect, const IntRect& opaqueRect);
+    void didCull(const TransformationMatrix& transformToTarget, const IntRect& beforeCullRect, const IntRect& afterCullRect);
+    void didDraw(const TransformationMatrix& transformToTarget, const IntRect& afterCullRect, const IntRect& opaqueRect);
 
     void recordMetrics(const CCLayerTreeHost*) const;
     void recordMetrics(const CCLayerTreeHostImpl*) const;
@@ -46,9 +50,11 @@
     float pixelsCulled() const { return m_pixelsCulled; }
 
 private:
+    CCOverdrawMetrics();
+
     enum MetricsType {
         DRAWING,
-        PAINTING
+        UPLOADING
     };
 
     template<typename LayerTreeHostType>

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp	2012-03-16 09:20:30 UTC (rev 110973)
@@ -40,11 +40,10 @@
 
 namespace WebCore {
 
-CCQuadCuller::CCQuadCuller(CCQuadList& quadList, CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker, CCOverdrawMetrics* overdrawMetrics)
+CCQuadCuller::CCQuadCuller(CCQuadList& quadList, CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker)
     : m_quadList(quadList)
     , m_layer(layer)
     , m_occlusionTracker(occlusionTracker)
-    , m_overdrawMetrics(overdrawMetrics)
 {
 }
 
@@ -56,8 +55,8 @@
     if (keepQuad)
         drawQuad->setQuadVisibleRect(culledRect);
 
-    if (m_overdrawMetrics)
-        m_overdrawMetrics->didDraw(drawQuad->quadTransform(), drawQuad->quadRect(), culledRect, drawQuad->opaqueRect());
+    m_occlusionTracker->overdrawMetrics().didCull(drawQuad->quadTransform(), drawQuad->quadRect(), culledRect);
+    m_occlusionTracker->overdrawMetrics().didDraw(drawQuad->quadTransform(), culledRect, drawQuad->opaqueRect());
 
     // Release the quad after we're done using it.
     if (keepQuad)

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h	2012-03-16 09:20:30 UTC (rev 110973)
@@ -36,7 +36,7 @@
 public:
     // Passing 0 for CCOverdrawCounts* is valid, and disable the extra computation
     // done to estimate over draw statistics.
-    CCQuadCuller(CCQuadList&, CCLayerImpl*, CCOcclusionTrackerImpl*, CCOverdrawMetrics*);
+    CCQuadCuller(CCQuadList&, CCLayerImpl*, CCOcclusionTrackerImpl*);
 
     virtual void append(PassOwnPtr<CCDrawQuad> passDrawQuad);
 
@@ -44,7 +44,6 @@
     CCQuadList& m_quadList;
     CCLayerImpl* m_layer;
     CCOcclusionTrackerImpl* m_occlusionTracker;
-    CCOverdrawMetrics* m_overdrawMetrics;
 };
 
 }

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp	2012-03-16 09:20:30 UTC (rev 110973)
@@ -46,9 +46,9 @@
     ASSERT(m_targetSurface);
 }
 
-void CCRenderPass::appendQuadsForLayer(CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker, CCOverdrawMetrics* overdrawMetrics)
+void CCRenderPass::appendQuadsForLayer(CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker)
 {
-    CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker, overdrawMetrics);
+    CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker);
 
     OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState();
     layer->appendQuads(quadCuller, sharedQuadState.get());

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h (110972 => 110973)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h	2012-03-16 09:20:30 UTC (rev 110973)
@@ -34,7 +34,6 @@
 namespace WebCore {
 
 class CCLayerImpl;
-class CCOverdrawMetrics;
 class CCRenderSurface;
 class CCSharedQuadState;
 
@@ -55,7 +54,7 @@
 public:
     static PassOwnPtr<CCRenderPass> create(CCRenderSurface*);
 
-    void appendQuadsForLayer(CCLayerImpl*, CCOcclusionTrackerImpl*, CCOverdrawMetrics*);
+    void appendQuadsForLayer(CCLayerImpl*, CCOcclusionTrackerImpl*);
     void appendQuadsForRenderSurfaceLayer(CCLayerImpl*);
 
     const CCQuadList& quadList() const { return m_quadList; }

Modified: trunk/Source/WebKit/chromium/ChangeLog (110972 => 110973)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-03-16 09:20:30 UTC (rev 110973)
@@ -1,5 +1,19 @@
 2012-03-16  Dana Jansens  <[email protected]>
 
+        [chromium] Changes to overdraw metrics to allow upload tracking
+        https://bugs.webkit.org/show_bug.cgi?id=81222
+
+        Reviewed by Adrienne Walker.
+
+        * tests/CCQuadCullerTest.cpp:
+        (WebCore::appendQuads):
+        (WebCore):
+        (WebCore::TEST):
+        * tests/MockCCQuadCuller.h:
+        (WebCore::MockCCQuadCuller::MockCCQuadCuller):
+
+2012-03-16  Dana Jansens  <[email protected]>
+
         [chromium] Quads that become fully opaque after culling should not use blending
         https://bugs.webkit.org/show_bug.cgi?id=81235
 

Modified: trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp (110972 => 110973)


--- trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp	2012-03-16 09:20:30 UTC (rev 110973)
@@ -78,9 +78,9 @@
     return layer.release();
 }
 
-static void appendQuads(CCQuadList& quadList, CCTiledLayerImpl* layer, CCOcclusionTrackerImpl& occlusionTracker, CCOverdrawMetrics& overdraw)
+static void appendQuads(CCQuadList& quadList, CCTiledLayerImpl* layer, CCOcclusionTrackerImpl& occlusionTracker)
 {
-    CCQuadCuller quadCuller(quadList, layer, &occlusionTracker, &overdraw);
+    CCQuadCuller quadCuller(quadList, layer, &occlusionTracker);
     OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState();
     layer->appendQuads(quadCuller, sharedQuadState.get());
 }
@@ -88,7 +88,6 @@
 #define DECLARE_AND_INITIALIZE_TEST_QUADS               \
     DebugScopedSetImplThread impl;                      \
     CCQuadList quadList;                                \
-    CCOverdrawMetrics overdraw;                         \
     TransformationMatrix childTransform;                \
     IntSize rootSize = IntSize(300, 300);               \
     IntRect rootRect = IntRect(IntPoint(), rootSize);   \
@@ -103,12 +102,12 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 13u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 130000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 0, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullChildLinesUpTopLeft)
@@ -119,13 +118,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 9u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 40000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 40000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullWhenChildOpacityNotOne)
@@ -136,13 +135,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 0.9, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 13u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 40000, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 40000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 0, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullWhenChildOpaqueFlagFalse)
@@ -153,13 +152,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, false, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 13u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 40000, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 40000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 0, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullCenterTileOnly)
@@ -172,9 +171,9 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 12u);
 
     IntRect quadVisibleRect1 = quadList[5].get()->quadVisibleRect();
@@ -192,9 +191,9 @@
     EXPECT_EQ(quadVisibleRect6.height(), 50);
     EXPECT_EQ(quadVisibleRect6.y(), 250);
 
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 100000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 30000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 30000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize1)
@@ -215,14 +214,14 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 2u);
 
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 20363, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 20363, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 0, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullCenterTileNonIntegralSize2)
@@ -243,14 +242,14 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 2u);
 
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 19643, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 19643, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 0, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullChildLinesUpBottomRight)
@@ -263,13 +262,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 9u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 40000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 40000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullSubRegion)
@@ -283,13 +282,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, false, childOpaqueRect);
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 12u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 30000, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 10000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 30000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 10000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullSubRegion2)
@@ -303,13 +302,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, false, childOpaqueRect);
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 12u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 25000, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 15000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 25000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 15000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullSubRegionCheckOvercull)
@@ -323,13 +322,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, false, childOpaqueRect);
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 13u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 90000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 30000, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 10000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 30000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 10000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude)
@@ -343,13 +342,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(childTransform, childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 13u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 130000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 130000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 0, 1);
 }
 
 // This test requires some explanation: here we are rotating the quads to be culled.
@@ -369,13 +368,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(-100, -100, 1000, 1000));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 12u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 100600, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 29400, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 100600, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 29400, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverTile)
@@ -386,13 +385,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(200, 100, 100, 100));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 1u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 10000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 120000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 120000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverCulledTile)
@@ -403,13 +402,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(100, 100, 100, 100));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 1u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 10000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 120000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 10000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 120000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverPartialTiles)
@@ -420,13 +419,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(50, 50, 200, 200));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 9u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 40000, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 90000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 40000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 90000, 1);
 }
 
 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverNoTiles)
@@ -437,13 +436,13 @@
     OwnPtr<CCTiledLayerImpl> childLayer = makeLayer(TransformationMatrix(), childRect, 1.0, true, IntRect());
     TestCCOcclusionTrackerImpl occlusionTracker(IntRect(500, 500, 100, 100));
 
-    appendQuads(quadList, childLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, childLayer.get(), occlusionTracker);
     occlusionTracker.markOccludedBehindLayer(childLayer.get());
-    appendQuads(quadList, rootLayer.get(), occlusionTracker, overdraw);
+    appendQuads(quadList, rootLayer.get(), occlusionTracker);
     EXPECT_EQ(quadList.size(), 0u);
-    EXPECT_NEAR(overdraw.pixelsDrawnOpaque(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsDrawnTranslucent(), 0, 1);
-    EXPECT_NEAR(overdraw.pixelsCulled(), 130000, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnOpaque(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsDrawnTranslucent(), 0, 1);
+    EXPECT_NEAR(occlusionTracker.overdrawMetrics().pixelsCulled(), 130000, 1);
 }
 
 } // namespace

Modified: trunk/Source/WebKit/chromium/tests/MockCCQuadCuller.h (110972 => 110973)


--- trunk/Source/WebKit/chromium/tests/MockCCQuadCuller.h	2012-03-16 08:56:16 UTC (rev 110972)
+++ trunk/Source/WebKit/chromium/tests/MockCCQuadCuller.h	2012-03-16 09:20:30 UTC (rev 110973)
@@ -35,12 +35,12 @@
 class MockCCQuadCuller : public WebCore::CCQuadCuller {
 public:
     MockCCQuadCuller()
-        : CCQuadCuller(m_quadListStorage, 0, 0, 0)
+        : CCQuadCuller(m_quadListStorage, 0, 0)
         , m_activeQuadList(m_quadListStorage)
     { }
 
     explicit MockCCQuadCuller(CCQuadList& externalQuadList)
-        : CCQuadCuller(externalQuadList, 0, 0, 0)
+        : CCQuadCuller(externalQuadList, 0, 0)
         , m_activeQuadList(externalQuadList)
     { }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to