Title: [139525] trunk/Source/WebKit2
Revision
139525
Author
commit-qu...@webkit.org
Date
2013-01-11 17:32:22 -0800 (Fri, 11 Jan 2013)

Log Message

Coordinated Graphics: Remove the dependency of WebCoordinatedSurface::Handle from Coordinated Graphics.
https://bugs.webkit.org/show_bug.cgi?id=104347

Patch by Huang Dongsung <luxte...@company100.net> on 2013-01-11
Reviewed by Noam Rosenthal.

It is a preparation patch for Threaded Coordinated Graphics on WK1.

Currently, UpdateAtlas and CoordinatedImageBacking use
WebCoordinatedSurface::Handle, but WebCoordinatedSurface::Handle can be
used only IPC-based Coordinated Graphics. So this patch removes the
dependency of WebCoordinatedSurface::Handle from UpdateAtlas and
CoordinatedImageBacking. Now CoordinatedLayerTreeHost converts the
handle to a WebCoordinatedSurface.

* WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:
(WebKit::CoordinatedImageBacking::update):
(WebKit::CoordinatedImageBacking::releaseSurfaceIfNeeded):
* WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:
(Coordinator):
(CoordinatedImageBacking):
* WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
(WebKit::CoordinatedLayerTreeHost::updateImageBacking):
(WebKit::CoordinatedLayerTreeHost::createUpdateAtlas):
* WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
(WebKit):
(CoordinatedLayerTreeHost):
* WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:
(WebKit::UpdateAtlas::UpdateAtlas):
(WebKit::UpdateAtlas::~UpdateAtlas):
(WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
* WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h:
(UpdateAtlasClient):
(UpdateAtlas):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (139524 => 139525)


--- trunk/Source/WebKit2/ChangeLog	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/ChangeLog	2013-01-12 01:32:22 UTC (rev 139525)
@@ -1,3 +1,39 @@
+2013-01-11  Huang Dongsung  <luxte...@company100.net>
+
+        Coordinated Graphics: Remove the dependency of WebCoordinatedSurface::Handle from Coordinated Graphics.
+        https://bugs.webkit.org/show_bug.cgi?id=104347
+
+        Reviewed by Noam Rosenthal.
+
+        It is a preparation patch for Threaded Coordinated Graphics on WK1.
+
+        Currently, UpdateAtlas and CoordinatedImageBacking use
+        WebCoordinatedSurface::Handle, but WebCoordinatedSurface::Handle can be
+        used only IPC-based Coordinated Graphics. So this patch removes the
+        dependency of WebCoordinatedSurface::Handle from UpdateAtlas and
+        CoordinatedImageBacking. Now CoordinatedLayerTreeHost converts the
+        handle to a WebCoordinatedSurface.
+
+        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:
+        (WebKit::CoordinatedImageBacking::update):
+        (WebKit::CoordinatedImageBacking::releaseSurfaceIfNeeded):
+        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:
+        (Coordinator):
+        (CoordinatedImageBacking):
+        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
+        (WebKit::CoordinatedLayerTreeHost::updateImageBacking):
+        (WebKit::CoordinatedLayerTreeHost::createUpdateAtlas):
+        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
+        (WebKit):
+        (CoordinatedLayerTreeHost):
+        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:
+        (WebKit::UpdateAtlas::UpdateAtlas):
+        (WebKit::UpdateAtlas::~UpdateAtlas):
+        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
+        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h:
+        (UpdateAtlasClient):
+        (UpdateAtlas):
+
 2013-01-11  Alexey Proskuryakov  <a...@apple.com>
 
         [WK2] Network process unblocks all waiting threads when any sync reply arrives

Modified: trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp (139524 => 139525)


--- trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp	2013-01-12 01:32:22 UTC (rev 139525)
@@ -104,10 +104,7 @@
     }
 
     m_surface = CoordinatedSurface::create(m_image->size(), m_image->currentFrameHasAlpha() ? CoordinatedSurface::SupportsAlpha : CoordinatedSurface::NoFlags);
-    m_handle = adoptPtr(new WebCoordinatedSurface::Handle());
-
-    if (!static_cast<WebCoordinatedSurface*>(m_surface.get())->createHandle(*m_handle)) {
-        releaseSurfaceIfNeeded();
+    if (!m_surface) {
         m_isDirty = false;
         return;
     }
@@ -118,15 +115,15 @@
 
     m_nativeImagePtr = m_image->nativeImageForCurrentFrame();
 
-    m_coordinator->updateImageBacking(id(), *m_handle);
-    m_isDirty = false;
+    // If sending the message fails, try again in the next update.
+    bool success = m_coordinator->updateImageBacking(id(), m_surface);
+    m_isDirty = !success;
 }
 
 void CoordinatedImageBacking::releaseSurfaceIfNeeded()
 {
     // We must keep m_surface until UI Process reads m_surface.
     // If m_surface exists, it was created in the previous update.
-    m_handle.clear();
     m_surface.clear();
 }
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h (139524 => 139525)


--- trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h	2013-01-12 01:32:22 UTC (rev 139525)
@@ -31,7 +31,6 @@
 #include "CoordinatedLayerInfo.h"
 #include "CoordinatedSurface.h"
 #include "Image.h"
-#include "WebCoordinatedSurface.h"
 #include <WebCore/Timer.h>
 #include <wtf/RefCounted.h>
 #include <wtf/Vector.h>
@@ -43,7 +42,7 @@
     class Coordinator {
     public:
         virtual void createImageBacking(CoordinatedImageBackingID) = 0;
-        virtual void updateImageBacking(CoordinatedImageBackingID, const WebCoordinatedSurface::Handle&) = 0;
+        virtual bool updateImageBacking(CoordinatedImageBackingID, PassRefPtr<CoordinatedSurface>) = 0;
         virtual void clearImageBackingContents(CoordinatedImageBackingID) = 0;
         virtual void removeImageBacking(CoordinatedImageBackingID) = 0;
     };
@@ -82,7 +81,6 @@
     Vector<Host*> m_hosts;
 
     RefPtr<CoordinatedSurface> m_surface;
-    OwnPtr<WebCoordinatedSurface::Handle> m_handle;
 
     WebCore::Timer<CoordinatedImageBacking> m_clearContentsTimer;
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp (139524 => 139525)


--- trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp	2013-01-12 01:32:22 UTC (rev 139525)
@@ -37,6 +37,7 @@
 #include "GraphicsContext.h"
 #include "MessageID.h"
 #include "SurfaceUpdateInfo.h"
+#include "WebCoordinatedSurface.h"
 #include "WebCoreArgumentCoders.h"
 #include "WebPage.h"
 #include "WebPageProxyMessages.h"
@@ -613,10 +614,15 @@
     m_webPage->send(Messages::CoordinatedLayerTreeHostProxy::CreateImageBacking(imageID));
 }
 
-void CoordinatedLayerTreeHost::updateImageBacking(CoordinatedImageBackingID imageID, const WebCoordinatedSurface::Handle& handle)
+bool CoordinatedLayerTreeHost::updateImageBacking(CoordinatedImageBackingID imageID, PassRefPtr<CoordinatedSurface> coordinatedSurface)
 {
     m_shouldSyncFrame = true;
+    WebCoordinatedSurface* webCoordinatedSurface = static_cast<WebCoordinatedSurface*>(coordinatedSurface.get());
+    WebCoordinatedSurface::Handle handle;
+    if (!webCoordinatedSurface->createHandle(handle))
+        return false;
     m_webPage->send(Messages::CoordinatedLayerTreeHostProxy::UpdateImageBacking(imageID, handle));
+    return true;
 }
 
 void CoordinatedLayerTreeHost::clearImageBackingContents(CoordinatedImageBackingID imageID)
@@ -704,9 +710,14 @@
     m_webPage->send(Messages::CoordinatedLayerTreeHostProxy::RemoveTileForLayer(layerID, tileID));
 }
 
-void CoordinatedLayerTreeHost::createUpdateAtlas(uint32_t atlasID, const WebCoordinatedSurface::Handle& handle)
+bool CoordinatedLayerTreeHost::createUpdateAtlas(uint32_t atlasID, PassRefPtr<CoordinatedSurface> coordinatedSurface)
 {
+    WebCoordinatedSurface* webCoordinatedSurface = static_cast<WebCoordinatedSurface*>(coordinatedSurface.get());
+    WebCoordinatedSurface::Handle handle;
+    if (!webCoordinatedSurface->createHandle(handle))
+        return false;
     m_webPage->send(Messages::CoordinatedLayerTreeHostProxy::CreateUpdateAtlas(atlasID, handle));
+    return true;
 }
 
 void CoordinatedLayerTreeHost::removeUpdateAtlas(uint32_t atlasID)

Modified: trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h (139524 => 139525)


--- trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h	2013-01-12 01:32:22 UTC (rev 139525)
@@ -28,7 +28,6 @@
 #include "LayerTreeHost.h"
 #include "Timer.h"
 #include "UpdateAtlas.h"
-#include "WebCoordinatedSurface.h"
 #include <WebCore/GraphicsLayerClient.h>
 #include <WebCore/GraphicsLayerFactory.h>
 #include <wtf/OwnPtr.h>
@@ -39,6 +38,7 @@
 
 namespace WebKit {
 
+class CoordinatedSurface;
 class UpdateInfo;
 class WebPage;
 
@@ -107,7 +107,7 @@
     virtual PassOwnPtr<WebCore::GraphicsContext> beginContentUpdate(const WebCore::IntSize&, CoordinatedSurface::Flags, uint32_t& atlasID, WebCore::IntPoint&);
 
     // UpdateAtlasClient
-    virtual void createUpdateAtlas(uint32_t atlasID, const WebCoordinatedSurface::Handle&);
+    virtual bool createUpdateAtlas(uint32_t atlasID, PassRefPtr<CoordinatedSurface>) OVERRIDE;
     virtual void removeUpdateAtlas(uint32_t atlasID);
 
 #if ENABLE(REQUEST_ANIMATION_FRAME)
@@ -126,7 +126,7 @@
 
     // CoordinatedImageBacking::Coordinator
     virtual void createImageBacking(CoordinatedImageBackingID) OVERRIDE;
-    virtual void updateImageBacking(CoordinatedImageBackingID, const WebCoordinatedSurface::Handle&) OVERRIDE;
+    virtual bool updateImageBacking(CoordinatedImageBackingID, PassRefPtr<CoordinatedSurface>) OVERRIDE;
     virtual void clearImageBackingContents(CoordinatedImageBackingID) OVERRIDE;
     virtual void removeImageBacking(CoordinatedImageBackingID) OVERRIDE;
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp (139524 => 139525)


--- trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp	2013-01-12 01:32:22 UTC (rev 139525)
@@ -33,25 +33,21 @@
 
 UpdateAtlas::UpdateAtlas(UpdateAtlasClient* client, int dimension, CoordinatedSurface::Flags flags)
     : m_client(client)
-    , m_flags(flags)
     , m_inactivityInSeconds(0)
-    , m_isValid(true)
 {
     static uint32_t nextID = 0;
     m_ID = ++nextID;
     IntSize size = nextPowerOfTwo(IntSize(dimension, dimension));
     m_surface = CoordinatedSurface::create(size, flags);
 
-    if (!static_cast<WebCoordinatedSurface*>(m_surface.get())->createHandle(m_handle)) {
-        m_isValid = false;
-        return;
-    }
-    m_client->createUpdateAtlas(m_ID, m_handle);
+    // FIXME: Currently, if sending the message fails, UpdateAtlas gives up drawing anything implicitly.
+    if (!m_client->createUpdateAtlas(m_ID, m_surface))
+        m_surface.clear();
 }
 
 UpdateAtlas::~UpdateAtlas()
 {
-    if (m_isValid)
+    if (m_surface)
         m_client->removeUpdateAtlas(m_ID);
 }
 
@@ -78,7 +74,7 @@
     if (rect.isEmpty())
         return PassOwnPtr<GraphicsContext>();
 
-    if (!m_isValid)
+    if (!m_surface)
         return PassOwnPtr<GraphicsContext>();
 
     atlasID = m_ID;

Modified: trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h (139524 => 139525)


--- trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h	2013-01-12 01:28:56 UTC (rev 139524)
+++ trunk/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h	2013-01-12 01:32:22 UTC (rev 139525)
@@ -22,8 +22,8 @@
 #define UpdateAtlas_h
 
 #include "AreaAllocator.h"
+#include "CoordinatedSurface.h"
 #include "IntSize.h"
-#include "WebCoordinatedSurface.h"
 
 #if USE(COORDINATED_GRAPHICS)
 namespace WebCore {
@@ -35,7 +35,7 @@
 
 class UpdateAtlasClient {
 public:
-    virtual void createUpdateAtlas(uint32_t atlasID, const WebCoordinatedSurface::Handle&) = 0;
+    virtual bool createUpdateAtlas(uint32_t atlasID, PassRefPtr<CoordinatedSurface>) = 0;
     virtual void removeUpdateAtlas(uint32_t atlasID) = 0;
 };
 
@@ -70,12 +70,9 @@
 private:
     UpdateAtlasClient* m_client;
     OwnPtr<GeneralAreaAllocator> m_areaAllocator;
-    ShareableBitmap::Flags m_flags;
     RefPtr<CoordinatedSurface> m_surface;
-    WebCoordinatedSurface::Handle m_handle;
     double m_inactivityInSeconds;
     uint32_t m_ID;
-    bool m_isValid;
 };
 
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to