Title: [120643] trunk/Source
Revision
120643
Author
[email protected]
Date
2012-06-18 16:41:17 -0700 (Mon, 18 Jun 2012)

Log Message

[chromium] GraphicsLayerChromium should use WebContentLayer directly
https://bugs.webkit.org/show_bug.cgi?id=89145

Reviewed by Adrienne Walker.

Source/Platform:

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):

Source/WebCore:

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):

Source/WebKit/chromium:

* 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:

Modified Paths

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();
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to