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