Title: [110635] trunk/Source
Revision
110635
Author
[email protected]
Date
2012-03-13 16:28:38 -0700 (Tue, 13 Mar 2012)

Log Message

[chromium] wrong transform causing incorrect culling
https://bugs.webkit.org/show_bug.cgi?id=80471

Reviewed by James Robinson.

Source/WebCore:

Unit test added to CCRenderSurfaceTest.cpp

In addition to using originTransform() instead of drawTransform(),
this patch shuffles a bit of code so that a unit test can be
easily added.

* platform/graphics/chromium/cc/CCRenderPass.cpp:
(WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
* platform/graphics/chromium/cc/CCRenderSurface.cpp:
(WebCore::CCRenderSurface::createSharedQuadState):
(WebCore):
* platform/graphics/chromium/cc/CCRenderSurface.h:
(CCRenderSurface):

Source/WebKit/chromium:

* tests/CCRenderSurfaceTest.cpp:
(WebCore::TEST):
(WebCore):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (110634 => 110635)


--- trunk/Source/WebCore/ChangeLog	2012-03-13 23:18:42 UTC (rev 110634)
+++ trunk/Source/WebCore/ChangeLog	2012-03-13 23:28:38 UTC (rev 110635)
@@ -1,3 +1,24 @@
+2012-03-13  Shawn Singh  <[email protected]>
+
+        [chromium] wrong transform causing incorrect culling
+        https://bugs.webkit.org/show_bug.cgi?id=80471
+
+        Reviewed by James Robinson.
+
+        Unit test added to CCRenderSurfaceTest.cpp
+
+        In addition to using originTransform() instead of drawTransform(),
+        this patch shuffles a bit of code so that a unit test can be
+        easily added.
+
+        * platform/graphics/chromium/cc/CCRenderPass.cpp:
+        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
+        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
+        (WebCore::CCRenderSurface::createSharedQuadState):
+        (WebCore):
+        * platform/graphics/chromium/cc/CCRenderSurface.h:
+        (CCRenderSurface):
+
 2012-03-13  Dave Tharp  <[email protected]>
 
         Alternate xml-stylesheets with no title are loaded, in violation of the CSSOM draft

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


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp	2012-03-13 23:18:42 UTC (rev 110634)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp	2012-03-13 23:28:38 UTC (rev 110635)
@@ -61,8 +61,7 @@
     // FIXME: render surface layers should be a CCLayerImpl-derived class and
     // not be handled specially here.
     CCRenderSurface* surface = layer->renderSurface();
-    bool isOpaque = false;
-    OwnPtr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(surface->drawTransform(), surface->drawTransform(), surface->contentRect(), surface->clipRect(), surface->drawOpacity(), isOpaque);
+    OwnPtr<CCSharedQuadState> sharedQuadState = surface->createSharedQuadState();
     m_quadList.append(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface->contentRect(), layer, surfaceDamageRect()));
     m_sharedQuadStateList.append(sharedQuadState.release());
 }

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp (110634 => 110635)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp	2012-03-13 23:18:42 UTC (rev 110634)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp	2012-03-13 23:28:38 UTC (rev 110635)
@@ -41,6 +41,7 @@
 #include "cc/CCLayerImpl.h"
 #include "cc/CCProxy.h"
 #include "cc/CCRenderSurfaceFilters.h"
+#include "cc/CCSharedQuadState.h"
 #include <wtf/text/CString.h>
 
 namespace WebCore {
@@ -301,5 +302,11 @@
     return m_surfacePropertyChanged && !m_owningLayer->layerPropertyChanged();
 }
 
+PassOwnPtr<CCSharedQuadState> CCRenderSurface::createSharedQuadState() const
+{
+    bool isOpaque = false;
+    return CCSharedQuadState::create(originTransform(), drawTransform(), contentRect(), clipRect(), drawOpacity(), isOpaque);
 }
+
+}
 #endif // USE(ACCELERATED_COMPOSITING)

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h (110634 => 110635)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h	2012-03-13 23:18:42 UTC (rev 110634)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h	2012-03-13 23:28:38 UTC (rev 110635)
@@ -43,6 +43,7 @@
 namespace WebCore {
 
 class CCDamageTracker;
+class CCSharedQuadState;
 class CCLayerImpl;
 class LayerRendererChromium;
 class ManagedTexture;
@@ -114,6 +115,8 @@
 
     CCDamageTracker* damageTracker() const { return m_damageTracker.get(); }
 
+    PassOwnPtr<CCSharedQuadState> createSharedQuadState() const;
+
 private:
     void drawLayer(LayerRendererChromium*, CCLayerImpl*, const TransformationMatrix&, const SkBitmap& filterBitmap);
     template <class T>

Modified: trunk/Source/WebKit/chromium/ChangeLog (110634 => 110635)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-03-13 23:18:42 UTC (rev 110634)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-03-13 23:28:38 UTC (rev 110635)
@@ -1,3 +1,14 @@
+2012-03-13  Shawn Singh  <[email protected]>
+
+        [chromium] wrong transform causing incorrect culling
+        https://bugs.webkit.org/show_bug.cgi?id=80471
+
+        Reviewed by James Robinson.
+
+        * tests/CCRenderSurfaceTest.cpp:
+        (WebCore::TEST):
+        (WebCore):
+
 2012-03-13  Nat Duca  <[email protected]>
 
         [chromium] vsync ticks are needed in invisible tabs when we are still updating resources

Modified: trunk/Source/WebKit/chromium/tests/CCRenderSurfaceTest.cpp (110634 => 110635)


--- trunk/Source/WebKit/chromium/tests/CCRenderSurfaceTest.cpp	2012-03-13 23:18:42 UTC (rev 110634)
+++ trunk/Source/WebKit/chromium/tests/CCRenderSurfaceTest.cpp	2012-03-13 23:28:38 UTC (rev 110635)
@@ -26,7 +26,9 @@
 
 #include "cc/CCRenderSurface.h"
 
+#include "TransformationMatrix.h"
 #include "cc/CCLayerImpl.h"
+#include "cc/CCSharedQuadState.h"
 #include "cc/CCSingleThreadProxy.h"
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
@@ -89,4 +91,38 @@
     EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setMaskLayer(dummyMask.get()));
 }
 
+TEST(CCRenderSurfaceTest, sanityCheckSurfaceCreatesCorrectSharedQuadState)
+{
+    // This will fake that we are on the correct thread for testing purposes.
+    DebugScopedSetImplThread setImplThread;
+
+    OwnPtr<CCLayerImpl> owningLayer = CCLayerImpl::create(0);
+    owningLayer->createRenderSurface();
+    ASSERT_TRUE(owningLayer->renderSurface());
+    CCRenderSurface* renderSurface = owningLayer->renderSurface();
+
+    IntRect contentRect = IntRect(IntPoint::zero(), IntSize(50, 50));
+    IntRect clipRect = IntRect(IntPoint(5, 5), IntSize(40, 40));
+    TransformationMatrix draw;
+    TransformationMatrix origin;
+
+    draw.translate(30, 40);
+
+    renderSurface->setDrawTransform(draw);
+    renderSurface->setOriginTransform(origin);
+    renderSurface->setContentRect(contentRect);
+    renderSurface->setClipRect(clipRect);
+    renderSurface->setDrawOpacity(1);
+
+    OwnPtr<CCSharedQuadState> sharedQuadState = renderSurface->createSharedQuadState();
+
+    EXPECT_TRUE(sharedQuadState->quadTransform().isIdentity());
+    EXPECT_EQ(30, sharedQuadState->layerTransform().m41());
+    EXPECT_EQ(40, sharedQuadState->layerTransform().m42());
+    EXPECT_EQ(contentRect, sharedQuadState->layerRect());
+    EXPECT_EQ(clipRect, sharedQuadState->clipRect());
+    EXPECT_EQ(1, sharedQuadState->opacity());
+    EXPECT_FALSE(sharedQuadState->isOpaque());
+}
+
 } // namespace
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to