Diff
Modified: trunk/Source/Platform/ChangeLog (120642 => 120643)
--- trunk/Source/Platform/ChangeLog 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/Platform/ChangeLog 2012-06-18 23:41:17 UTC (rev 120643)
@@ -1,3 +1,16 @@
+2012-06-14 James Robinson <[email protected]>
+
+ [chromium] GraphicsLayerChromium should use WebContentLayer directly
+ https://bugs.webkit.org/show_bug.cgi?id=89145
+
+ Reviewed by Adrienne Walker.
+
+ Add an opaque rect parameter to WebContentLayerClient::paintContents() for a client to (optionally) provide
+ information about opaque portions of the painted region for culling optimizations.
+
+ * chromium/public/WebContentLayerClient.h:
+ (WebContentLayerClient):
+
2012-06-16 Robert Kroeger <[email protected]>
[chromium] Make the deviceScaleFactor dynamically adjustable.
Modified: trunk/Source/Platform/chromium/public/WebContentLayerClient.h (120642 => 120643)
--- trunk/Source/Platform/chromium/public/WebContentLayerClient.h 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/Platform/chromium/public/WebContentLayerClient.h 2012-06-18 23:41:17 UTC (rev 120643)
@@ -37,7 +37,11 @@
// through WebContentLayer::setNeedsDisplay, submitting drawing commands
// through the WebCanvas.
// The canvas is already clipped to the |clip| rect.
- virtual void paintContents(WebCanvas*, const WebRect& clip) = 0;
+ // Optionally, the implementation may set |opaque| to a rect covering pixels that
+ // the implementation knows are opaque. This information can be used for various
+ // optimizations.
+#define WEBCONTENTLAYERCLIENT_HAS_OPAQUE 1
+ virtual void paintContents(WebCanvas*, const WebRect& clip, WebRect& opaque) = 0;
protected:
virtual ~WebContentLayerClient() { }
Modified: trunk/Source/WebCore/ChangeLog (120642 => 120643)
--- trunk/Source/WebCore/ChangeLog 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebCore/ChangeLog 2012-06-18 23:41:17 UTC (rev 120643)
@@ -1,3 +1,22 @@
+2012-06-14 James Robinson <[email protected]>
+
+ [chromium] GraphicsLayerChromium should use WebContentLayer directly
+ https://bugs.webkit.org/show_bug.cgi?id=89145
+
+ Reviewed by Adrienne Walker.
+
+ Ports GraphicsLayerChromium (or more specifically OpaqueRectTrackingContentLayerDelegate) to implement
+ WebContentLayerClient instead of ContentLayerDelegate. In addition to the mechanical changes, this requires
+ eagerly setting drawsContent on GraphicsLayerChromium::m_layer since WebContentLayerImpl's default value is
+ different from LayerChromium's. Covered by all of compositing/
+
+ * platform/graphics/chromium/GraphicsLayerChromium.cpp:
+ (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
+ * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
+ (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):
+ * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h:
+ (OpaqueRectTrackingContentLayerDelegate):
+
2012-06-18 David Barr <[email protected]>
Add from-image to css3-images image-resolution
Modified: trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp (120642 => 120643)
--- trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp 2012-06-18 23:41:17 UTC (rev 120643)
@@ -91,7 +91,8 @@
, m_pageScaleChanged(false)
{
m_opaqueRectTrackingContentLayerDelegate = adoptPtr(new OpaqueRectTrackingContentLayerDelegate(this));
- m_layer = WebContentLayer(ContentLayerChromium::create(m_opaqueRectTrackingContentLayerDelegate.get()));
+ m_layer = WebContentLayer::create(m_opaqueRectTrackingContentLayerDelegate.get());
+ m_layer.setDrawsContent(m_drawsContent && m_contentsVisible);
updateDebugIndicators();
}
Modified: trunk/Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp (120642 => 120643)
--- trunk/Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp 2012-06-18 23:41:17 UTC (rev 120643)
@@ -31,7 +31,10 @@
#include "GraphicsContext.h"
#include "IntRect.h"
#include "PlatformContextSkia.h"
+#include <public/WebRect.h>
+using WebKit::WebRect;
+
namespace WebCore {
OpaqueRectTrackingContentLayerDelegate::OpaqueRectTrackingContentLayerDelegate(GraphicsContextPainter* painter)
@@ -44,7 +47,7 @@
{
}
-void OpaqueRectTrackingContentLayerDelegate::paintContents(SkCanvas* canvas, const IntRect& clip, IntRect& opaque)
+void OpaqueRectTrackingContentLayerDelegate::paintContents(SkCanvas* canvas, const WebRect& clip, WebRect& opaque)
{
PlatformContextSkia platformContext(canvas);
platformContext.setTrackOpaqueRegion(!m_opaque);
Modified: trunk/Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h (120642 => 120643)
--- trunk/Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebCore/platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h 2012-06-18 23:41:17 UTC (rev 120643)
@@ -25,7 +25,8 @@
#ifndef OpaqueRectTrackingContentLayerDelegate_h
#define OpaqueRectTrackingContentLayerDelegate_h
-#include "ContentLayerChromium.h"
+#include <public/WebContentLayerClient.h>
+#include <wtf/Noncopyable.h>
#include <wtf/PassOwnPtr.h>
class SkCanvas;
@@ -43,7 +44,7 @@
virtual ~GraphicsContextPainter() { }
};
-class OpaqueRectTrackingContentLayerDelegate : public ContentLayerDelegate {
+class OpaqueRectTrackingContentLayerDelegate : public WebKit::WebContentLayerClient {
WTF_MAKE_NONCOPYABLE(OpaqueRectTrackingContentLayerDelegate);
public:
explicit OpaqueRectTrackingContentLayerDelegate(GraphicsContextPainter*);
@@ -53,8 +54,8 @@
// tracking opaqueness.
void setOpaque(bool opaque) { m_opaque = opaque; }
- // ContentLayerDelegate
- virtual void paintContents(SkCanvas*, const IntRect& clip, IntRect& opaque) OVERRIDE;
+ // WebKit::WebContentLayerClient implementation.
+ virtual void paintContents(SkCanvas*, const WebKit::WebRect& clip, WebKit::WebRect& opaque) OVERRIDE;
private:
GraphicsContextPainter* m_painter;
Modified: trunk/Source/WebKit/chromium/ChangeLog (120642 => 120643)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-06-18 23:41:17 UTC (rev 120643)
@@ -1,3 +1,21 @@
+2012-06-14 James Robinson <[email protected]>
+
+ [chromium] GraphicsLayerChromium should use WebContentLayer directly
+ https://bugs.webkit.org/show_bug.cgi?id=89145
+
+ Reviewed by Adrienne Walker.
+
+ * src/WebContentLayerImpl.cpp:
+ (WebKit::WebContentLayerImpl::paintContents):
+ * tests/CCOcclusionTrackerTest.cpp:
+ (WebKitTests::CCOcclusionTrackerTestMainThreadTypes::createLayer):
+ * tests/OpaqueRectTrackingContentLayerDelegateTest.cpp:
+ (WebCore):
+ (WebCore::OpaqueRectTrackingContentLayerDelegateTest::OpaqueRectTrackingContentLayerDelegateTest):
+ (WebCore::OpaqueRectTrackingContentLayerDelegateTest::canvasRect):
+ (WebCore::TEST_F):
+ * tests/WebLayerTest.cpp:
+
2012-06-18 Ilya Sherman <[email protected]>
[Chromium] Ensure layout has happened before calling into hasNonEmptyBoundingBox()
Modified: trunk/Source/WebKit/chromium/src/WebContentLayerImpl.cpp (120642 => 120643)
--- trunk/Source/WebKit/chromium/src/WebContentLayerImpl.cpp 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebKit/chromium/src/WebContentLayerImpl.cpp 2012-06-18 23:41:17 UTC (rev 120643)
@@ -53,11 +53,13 @@
clearDelegate();
}
-void WebContentLayerImpl::paintContents(SkCanvas* canvas, const IntRect& clip, IntRect&)
+void WebContentLayerImpl::paintContents(SkCanvas* canvas, const IntRect& clip, IntRect& opaque)
{
if (!m_contentClient)
return;
- m_contentClient->paintContents(canvas, WebRect(clip));
+ WebRect webOpaque;
+ m_contentClient->paintContents(canvas, WebRect(clip), webOpaque);
+ opaque = webOpaque;
}
} // namespace WebKit
Modified: trunk/Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp (120642 => 120643)
--- trunk/Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp 2012-06-18 23:41:17 UTC (rev 120643)
@@ -132,7 +132,10 @@
typedef CCLayerIterator<LayerChromium, Vector<RefPtr<LayerChromium> >, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack> LayerIterator;
typedef CCOcclusionTracker OcclusionTrackerType;
- static PassLayerPtrType createLayer() { return LayerChromium::create(); }
+ static PassLayerPtrType createLayer()
+ {
+ return LayerChromium::create();
+ }
static PassContentLayerPtrType createContentLayer() { return adoptRef(new ContentLayerType()); }
};
Modified: trunk/Source/WebKit/chromium/tests/OpaqueRectTrackingContentLayerDelegateTest.cpp (120642 => 120643)
--- trunk/Source/WebKit/chromium/tests/OpaqueRectTrackingContentLayerDelegateTest.cpp 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebKit/chromium/tests/OpaqueRectTrackingContentLayerDelegateTest.cpp 2012-06-18 23:41:17 UTC (rev 120643)
@@ -27,10 +27,14 @@
#include "OpaqueRectTrackingContentLayerDelegate.h"
#include "Color.h"
+#include "GraphicsContext.h"
+#include "IntRect.h"
#include "skia/ext/platform_canvas.h"
+#include <public/WebRect.h>
#include <gtest/gtest.h>
+using WebKit::WebRect;
using namespace WebCore;
namespace {
@@ -95,20 +99,20 @@
};
#define EXPECT_EQ_RECT(a, b) \
- EXPECT_EQ(a.x(), b.x()); \
- EXPECT_EQ(a.maxX(), b.maxX()); \
- EXPECT_EQ(a.y(), b.y()); \
- EXPECT_EQ(a.maxY(), b.maxY());
+ EXPECT_EQ(a.x, b.x); \
+ EXPECT_EQ(a.width, b.width); \
+ EXPECT_EQ(a.y, b.y); \
+ EXPECT_EQ(a.height, b.height);
class OpaqueRectTrackingContentLayerDelegateTest : public testing::Test {
public:
OpaqueRectTrackingContentLayerDelegateTest()
- : m_skCanvas(adoptPtr(skia::CreateBitmapCanvas(canvasRect().width(), canvasRect().height(), false)))
+ : m_skCanvas(adoptPtr(skia::CreateBitmapCanvas(canvasRect().width, canvasRect().height, false)))
{
}
SkCanvas* skCanvas() { return m_skCanvas.get(); }
- IntRect canvasRect() { return IntRect(0, 0, 400, 400); }
+ WebRect canvasRect() { return WebRect(0, 0, 400, 400); }
private:
OwnPtr<SkCanvas> m_skCanvas;
@@ -121,9 +125,9 @@
OpaqueRectTrackingContentLayerDelegate delegate(&painter);
- IntRect opaqueRect;
+ WebRect opaqueRect;
delegate.paintContents(skCanvas(), canvasRect(), opaqueRect);
- EXPECT_EQ_RECT(IntRect(0, 0, 400, 400), opaqueRect);
+ EXPECT_EQ_RECT(WebRect(0, 0, 400, 400), opaqueRect);
}
TEST_F(OpaqueRectTrackingContentLayerDelegateTest, testOpaqueRectNotPresentAfterNonOpaquePaint)
@@ -132,9 +136,9 @@
TestLayerPainterChromium painter(fillAlpha);
OpaqueRectTrackingContentLayerDelegate delegate(&painter);
- IntRect opaqueRect;
+ WebRect opaqueRect;
delegate.paintContents(skCanvas(), canvasRect(), opaqueRect);
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), opaqueRect);
+ EXPECT_EQ_RECT(WebRect(0, 0, 0, 0), opaqueRect);
}
TEST_F(OpaqueRectTrackingContentLayerDelegateTest, testOpaqueRectNotPresentForOpaqueLayerWithOpaquePaint)
@@ -145,9 +149,9 @@
delegate.setOpaque(true);
- IntRect opaqueRect;
+ WebRect opaqueRect;
delegate.paintContents(skCanvas(), canvasRect(), opaqueRect);
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), opaqueRect);
+ EXPECT_EQ_RECT(WebRect(0, 0, 0, 0), opaqueRect);
}
TEST_F(OpaqueRectTrackingContentLayerDelegateTest, testOpaqueRectNotPresentForOpaqueLayerWithNonOpaquePaint)
@@ -158,9 +162,9 @@
delegate.setOpaque(true);
- IntRect opaqueRect;
+ WebRect opaqueRect;
delegate.paintContents(skCanvas(), canvasRect(), opaqueRect);
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), opaqueRect);
+ EXPECT_EQ_RECT(WebRect(0, 0, 0, 0), opaqueRect);
}
TEST_F(OpaqueRectTrackingContentLayerDelegateTest, testPartialOpaqueRectNoTransform)
@@ -170,9 +174,9 @@
TestLayerPainterChromium painter(fillPartial);
OpaqueRectTrackingContentLayerDelegate delegate(&painter);
- IntRect opaqueRect;
+ WebRect opaqueRect;
delegate.paintContents(skCanvas(), canvasRect(), opaqueRect);
- EXPECT_EQ_RECT(partialRect, opaqueRect);
+ EXPECT_EQ_RECT(WebRect(partialRect.x(), partialRect.y(), partialRect.width(), partialRect.height()), opaqueRect);
}
TEST_F(OpaqueRectTrackingContentLayerDelegateTest, testPartialOpaqueRectTranslation)
@@ -182,10 +186,10 @@
TestLayerPainterChromium painter(fillPartial);
OpaqueRectTrackingContentLayerDelegate delegate(&painter);
- IntRect opaqueRect;
- IntRect contentRect(11, 12, 389, 388);
+ WebRect opaqueRect;
+ WebRect contentRect(11, 12, 389, 388);
delegate.paintContents(skCanvas(), contentRect, opaqueRect);
- EXPECT_EQ_RECT(partialRect, opaqueRect);
+ EXPECT_EQ_RECT(WebRect(partialRect.x(), partialRect.y(), partialRect.width(), partialRect.height()), opaqueRect);
}
} // namespace
Modified: trunk/Source/WebKit/chromium/tests/WebLayerTest.cpp (120642 => 120643)
--- trunk/Source/WebKit/chromium/tests/WebLayerTest.cpp 2012-06-18 23:35:32 UTC (rev 120642)
+++ trunk/Source/WebKit/chromium/tests/WebLayerTest.cpp 2012-06-18 23:41:17 UTC (rev 120643)
@@ -65,7 +65,7 @@
class MockWebContentLayerClient : public WebContentLayerClient {
public:
- MOCK_METHOD2(paintContents, void(WebCanvas*, const WebRect& clip));
+ MOCK_METHOD3(paintContents, void(WebCanvas*, const WebRect& clip, WebRect& opaque));
};
class WebLayerTest : public Test {
@@ -175,7 +175,7 @@
// Content layer.
MockWebContentLayerClient contentClient;
- EXPECT_CALL(contentClient, paintContents(_, _)).Times(AnyNumber());
+ EXPECT_CALL(contentClient, paintContents(_, _, _)).Times(AnyNumber());
EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber());
WebContentLayer contentLayer = WebContentLayer::create(&contentClient);
m_rootLayer.addChild(contentLayer);
@@ -209,7 +209,7 @@
EXPECT_TRUE(layer2.parent().isNull());
MockWebContentLayerClient contentClient;
- EXPECT_CALL(contentClient, paintContents(_, _)).Times(AnyNumber());
+ EXPECT_CALL(contentClient, paintContents(_, _, _)).Times(AnyNumber());
WebContentLayer contentLayer = WebContentLayer::create(&contentClient);
WebExternalTextureLayer textureLayer = WebExternalTextureLayer::create();