Title: [269022] trunk/Source
Revision
269022
Author
commit-qu...@webkit.org
Date
2020-10-26 21:39:55 -0700 (Mon, 26 Oct 2020)

Log Message

[GPU Process]: Introduce RemoteResourceCacheProxy to manage the remote resources in Web Process
https://bugs.webkit.org/show_bug.cgi?id=217558

Patch by Said Abou-Hallawa <sabouhall...@apple.com> on 2020-10-26
Reviewed by Simon Fraser.

Source/WebCore:

Rename Recorder::Observer to Recorder::Delegate because it will be responsible
for creating DisplayListItems in future patches. So it will not be just
an observer. Also do not make DisplayList::ImageBuffer a superclass of it.
RemoteImageBufferProxy, which is a superclass of DisplayList::ImageBuffer,
will be the superclass of Recorder::Delegate.

Make ImageBufferBackend::isAccelerated a static member instead of a virtual
method. RemoteRenderingBackendProxy would want to know whether the backend
of an ImageBuffer isAccelerated or not without having to create it.
ImageBufferBackend::isAccelerated will be set to false and
ImageBufferIOSurfaceBackend::isAccelerated will be set to true.

* Headers.cmake:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/ConcreteImageBuffer.h:
* platform/graphics/ImageBuffer.h:
(WebCore::ImageBuffer::renderingResourceIdentifier const):
* platform/graphics/ImageBufferBackend.h:
(WebCore::ImageBufferBackend::isAccelerated const): Deleted.
* platform/graphics/RenderingResourceIdentifier.h: Renamed from Source/WebCore/platform/graphics/RemoteResourceIdentifier.h.
* platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
(WebCore::ImageBufferIOSurfaceBackend::isAccelerated const): Deleted.
* platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
* platform/graphics/displaylists/DisplayListDrawingContext.cpp:
(WebCore::DisplayList::DrawingContext::DrawingContext):
* platform/graphics/displaylists/DisplayListDrawingContext.h:
(WebCore::DisplayList::DrawingContext::DrawingContext):
* platform/graphics/displaylists/DisplayListImageBuffer.h:
(WebCore::DisplayList::ImageBuffer::ImageBuffer):
* platform/graphics/displaylists/DisplayListRecorder.cpp:
(WebCore::DisplayList::Recorder::Recorder):
(WebCore::DisplayList::Recorder::willAppendItem):
* platform/graphics/displaylists/DisplayListRecorder.h:
(WebCore::DisplayList::Recorder::Delegate::~Delegate):
(WebCore::DisplayList::Recorder::Observer::~Observer): Deleted.
(WebCore::DisplayList::Recorder::Observer::willAppendItem): Deleted.

Source/WebKit:

Remove RemoteImageBufferMessageHandlerProxy and move sending the messages
to RemoteRenderingBackendProxy.

To allow casting ImageBuffer to RemoteImageBufferProxy, a new method named
remoteResourceIdentifier() is added to IamgeBuffer and it is only overridden
by RemoteImageBufferProxy. This method is used in SPECIALIZE_TYPE_TRAITS
macros along with IamgeBuffer::isAccelerated().

Introduce RemoteResourceCacheProxy which will manage caching and releasing
the RemoteImageBufferProxy. Caching NativeImage will be added to it in
future patches. More about controlling the life cycles of remote resources
will be added also when supporting drawing remote resources to remote client
in future patches.

* GPUProcess/graphics/RemoteImageBuffer.h:
(WebKit::RemoteImageBuffer::create):
(WebKit::RemoteImageBuffer::RemoteImageBuffer):
* GPUProcess/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::imageBufferBackendWasCreated):
(WebKit::RemoteRenderingBackend::flushDisplayListWasCommitted):
(WebKit::RemoteRenderingBackend::createImageBuffer):
(WebKit::RemoteRenderingBackend::flushDisplayList):
(WebKit::RemoteRenderingBackend::flushDisplayListAndCommit):
(WebKit::RemoteRenderingBackend::getImageData):
(WebKit::RemoteRenderingBackend::releaseRemoteResource):
* GPUProcess/graphics/RemoteRenderingBackend.h:
* GPUProcess/graphics/RemoteRenderingBackend.messages.in:
* GPUProcess/graphics/RemoteResourceCache.cpp:
(WebKit::RemoteResourceCache::cacheImageBuffer):
(WebKit::RemoteResourceCache::cachedImageBuffer):
(WebKit::RemoteResourceCache::releaseRemoteResource):
* GPUProcess/graphics/RemoteResourceCache.h:
* Scripts/webkit/messages.py:
* Sources.txt:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h:
(isType):
* WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp: Removed.
* WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h: Removed.
* WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
(WebKit::RemoteImageBufferProxy::create):
(WebKit::RemoteImageBufferProxy::~RemoteImageBufferProxy):
(WebKit::RemoteImageBufferProxy::createBackend):
(WebKit::RemoteImageBufferProxy::commitFlushDisplayList):
(WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
(WebKit::RemoteImageBufferProxy::isPendingFlush const):
(WebKit::RemoteImageBufferProxy::timeoutWaitForFlushDisplayListWasCommitted):
(WebKit::RemoteImageBufferProxy::flushDrawingContextAndCommit):
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::createImageBuffer):
(WebKit::RemoteRenderingBackendProxy::getImageData):
(WebKit::RemoteRenderingBackendProxy::flushDisplayList):
(WebKit::RemoteRenderingBackendProxy::flushDisplayListAndCommit):
(WebKit::RemoteRenderingBackendProxy::releaseRemoteResource):
(WebKit::RemoteRenderingBackendProxy::imageBufferBackendWasCreated):
(WebKit::RemoteRenderingBackendProxy::flushDisplayListWasCommitted):
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
(WebKit::RemoteRenderingBackendProxy::remoteResourceCacheProxy):
(WebKit::RemoteRenderingBackendProxy::renderingBackendIdentifier const): Deleted.
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in:
* WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp: Copied from Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp.
(WebKit::RemoteResourceCacheProxy::RemoteResourceCacheProxy):
(WebKit::RemoteResourceCacheProxy::cacheImageBuffer):
(WebKit::RemoteResourceCacheProxy::cachedImageBuffer):
(WebKit::RemoteResourceCacheProxy::releaseImageBuffer):
* WebProcess/GPU/graphics/RemoteResourceCacheProxy.h: Copied from Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (269021 => 269022)


--- trunk/Source/WebCore/ChangeLog	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/ChangeLog	2020-10-27 04:39:55 UTC (rev 269022)
@@ -1,3 +1,47 @@
+2020-10-26  Said Abou-Hallawa  <sabouhall...@apple.com>
+
+        [GPU Process]: Introduce RemoteResourceCacheProxy to manage the remote resources in Web Process
+        https://bugs.webkit.org/show_bug.cgi?id=217558
+
+        Reviewed by Simon Fraser.
+
+        Rename Recorder::Observer to Recorder::Delegate because it will be responsible
+        for creating DisplayListItems in future patches. So it will not be just
+        an observer. Also do not make DisplayList::ImageBuffer a superclass of it.
+        RemoteImageBufferProxy, which is a superclass of DisplayList::ImageBuffer,
+        will be the superclass of Recorder::Delegate.
+
+        Make ImageBufferBackend::isAccelerated a static member instead of a virtual
+        method. RemoteRenderingBackendProxy would want to know whether the backend
+        of an ImageBuffer isAccelerated or not without having to create it.
+        ImageBufferBackend::isAccelerated will be set to false and
+        ImageBufferIOSurfaceBackend::isAccelerated will be set to true.
+
+        * Headers.cmake:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/graphics/ConcreteImageBuffer.h:
+        * platform/graphics/ImageBuffer.h:
+        (WebCore::ImageBuffer::renderingResourceIdentifier const):
+        * platform/graphics/ImageBufferBackend.h:
+        (WebCore::ImageBufferBackend::isAccelerated const): Deleted.
+        * platform/graphics/RenderingResourceIdentifier.h: Renamed from Source/WebCore/platform/graphics/RemoteResourceIdentifier.h.
+        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
+        (WebCore::ImageBufferIOSurfaceBackend::isAccelerated const): Deleted.
+        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
+        * platform/graphics/displaylists/DisplayListDrawingContext.cpp:
+        (WebCore::DisplayList::DrawingContext::DrawingContext):
+        * platform/graphics/displaylists/DisplayListDrawingContext.h:
+        (WebCore::DisplayList::DrawingContext::DrawingContext):
+        * platform/graphics/displaylists/DisplayListImageBuffer.h:
+        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
+        * platform/graphics/displaylists/DisplayListRecorder.cpp:
+        (WebCore::DisplayList::Recorder::Recorder):
+        (WebCore::DisplayList::Recorder::willAppendItem):
+        * platform/graphics/displaylists/DisplayListRecorder.h:
+        (WebCore::DisplayList::Recorder::Delegate::~Delegate):
+        (WebCore::DisplayList::Recorder::Observer::~Observer): Deleted.
+        (WebCore::DisplayList::Recorder::Observer::willAppendItem): Deleted.
+
 2020-10-26  Stephan Szabo  <stephan.sz...@sony.com>
 
         evictCodedFrames does extra work if RELEASE_LOG_DISABLED is set

Modified: trunk/Source/WebCore/Headers.cmake (269021 => 269022)


--- trunk/Source/WebCore/Headers.cmake	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/Headers.cmake	2020-10-27 04:39:55 UTC (rev 269022)
@@ -1217,8 +1217,8 @@
     platform/graphics/PlatformTextTrack.h
     platform/graphics/PlatformTimeRanges.h
     platform/graphics/Region.h
-    platform/graphics/RemoteResourceIdentifier.h
     platform/graphics/RemoteVideoSample.h
+    platform/graphics/RenderingResourceIdentifier.h
     platform/graphics/RenderingMode.h
     platform/graphics/RoundedRect.h
     platform/graphics/StringTruncator.h

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (269021 => 269022)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-10-27 04:39:55 UTC (rev 269022)
@@ -2161,7 +2161,7 @@
 		727A7F3A24078B84004D2931 /* ImageBufferIOSurfaceBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BAC3AB23E1E544008D741C /* ImageBufferIOSurfaceBackend.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		7299BC6723D6A53200CC6883 /* AlphaPremultiplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 7299BC6423D686A600CC6883 /* AlphaPremultiplication.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		7299BC6823D6A53E00CC6883 /* RenderingMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7299BC6623D686C600CC6883 /* RenderingMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		729D05302531424300422098 /* RemoteResourceIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 729D052E25313E2600422098 /* RemoteResourceIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		729D05302531424300422098 /* RenderingResourceIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 729D052E25313E2600422098 /* RenderingResourceIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		72A73BEF245A3F90001C9D03 /* AnimationFrameRate.h in Headers */ = {isa = PBXBuildFile; fileRef = 722A815C238FD50500C00583 /* AnimationFrameRate.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		72BAC3AE23E1F0B0008D741C /* ImageBufferBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BAC3A523E17328008D741C /* ImageBufferBackend.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		7553CFE8108F473F00EA281E /* TimelineRecordFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7553CFE6108F473F00EA281E /* TimelineRecordFactory.h */; };
@@ -9946,7 +9946,7 @@
 		727AFED31A2EA6A0000442E8 /* EXTsRGB.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EXTsRGB.idl; sourceTree = "<group>"; };
 		7299BC6423D686A600CC6883 /* AlphaPremultiplication.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AlphaPremultiplication.h; sourceTree = "<group>"; };
 		7299BC6623D686C600CC6883 /* RenderingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderingMode.h; sourceTree = "<group>"; };
-		729D052E25313E2600422098 /* RemoteResourceIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteResourceIdentifier.h; sourceTree = "<group>"; };
+		729D052E25313E2600422098 /* RenderingResourceIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderingResourceIdentifier.h; sourceTree = "<group>"; };
 		72BAC3A423E17327008D741C /* ImageBufferBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferBackend.cpp; sourceTree = "<group>"; };
 		72BAC3A523E17328008D741C /* ImageBufferBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageBufferBackend.h; sourceTree = "<group>"; };
 		72BAC3A623E17328008D741C /* PlatformImageBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformImageBuffer.h; sourceTree = "<group>"; };
@@ -26366,10 +26366,10 @@
 				074E82B918A69F0E007EF54C /* PlatformTimeRanges.h */,
 				BCAB417F13E356E800D8AAF3 /* Region.cpp */,
 				BCAB418013E356E800D8AAF3 /* Region.h */,
-				729D052E25313E2600422098 /* RemoteResourceIdentifier.h */,
 				073A15512177A39800EA08F2 /* RemoteVideoSample.cpp */,
 				073A15532177A39A00EA08F2 /* RemoteVideoSample.h */,
 				7299BC6623D686C600CC6883 /* RenderingMode.h */,
+				729D052E25313E2600422098 /* RenderingResourceIdentifier.h */,
 				A73F95FC12C97BFE0031AAF9 /* RoundedRect.cpp */,
 				A73F95FD12C97BFE0031AAF9 /* RoundedRect.h */,
 				0F3DD44D12F5EA1B000D9190 /* ShadowBlur.cpp */,
@@ -33742,7 +33742,6 @@
 				46B9519A207D635400A7D2DD /* RemoteFrame.h in Headers */,
 				CDC312E922FCD7C0001204EC /* RemotePlayback.h in Headers */,
 				CDC312EB22FCD7C9001204EC /* RemotePlaybackAvailabilityCallback.h in Headers */,
-				729D05302531424300422098 /* RemoteResourceIdentifier.h in Headers */,
 				073A15542177A42600EA08F2 /* RemoteVideoSample.h in Headers */,
 				D06C0D8F0CFD11460065F43F /* RemoveFormatCommand.h in Headers */,
 				93309E05099E64920056E581 /* RemoveNodeCommand.h in Headers */,
@@ -33782,6 +33781,7 @@
 				08F2F00A1213E61700DCEC48 /* RenderImageResource.h in Headers */,
 				08641D4812142F7D008DE9F6 /* RenderImageResourceStyleImage.h in Headers */,
 				7299BC6823D6A53E00CC6883 /* RenderingMode.h in Headers */,
+				729D05302531424300422098 /* RenderingResourceIdentifier.h in Headers */,
 				556C7C4B22123997009B06CA /* RenderingUpdateScheduler.h in Headers */,
 				BCEA4878097D93020094C9E4 /* RenderInline.h in Headers */,
 				B595FF471824CEE300FF51CD /* RenderIterator.h in Headers */,

Modified: trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -50,14 +50,9 @@
             return nullptr;
         return std::unique_ptr<ImageBufferType>(new ImageBufferType(WTFMove(backend), std::forward<Arguments>(arguments)...));
     }
-    
-    bool isAccelerated() const override
-    {
-        if (auto* backend = ensureBackendCreated())
-            return backend->isAccelerated();
-        return false;
-    }
 
+    bool isAccelerated() const override { return BackendType::isAccelerated; }
+
 protected:
     ConcreteImageBuffer(std::unique_ptr<BackendType>&& backend)
         : m_backend(WTFMove(backend))

Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/ImageBuffer.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -29,6 +29,7 @@
 
 #include "ImageBufferBackend.h"
 #include "RenderingMode.h"
+#include "RenderingResourceIdentifier.h"
 
 namespace WebCore {
 
@@ -60,6 +61,9 @@
     
     WEBCORE_EXPORT virtual ~ImageBuffer() = default;
 
+    virtual bool isAccelerated() const = 0;
+    virtual RenderingResourceIdentifier renderingResourceIdentifier() const { return { }; }
+    
     virtual GraphicsContext& context() const = 0;
     virtual void flushContext() = 0;
 
@@ -104,8 +108,6 @@
     virtual bool copyToPlatformTexture(GraphicsContextGLOpenGL&, GCGLenum, PlatformGLObject, GCGLenum, bool, bool) const = 0;
     virtual PlatformLayer* platformLayer() const = 0;
     
-    virtual bool isAccelerated() const = 0;
-
 protected:
     ImageBuffer() = default;
 

Modified: trunk/Source/WebCore/platform/graphics/ImageBufferBackend.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/ImageBufferBackend.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/ImageBufferBackend.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -101,7 +101,7 @@
     virtual bool copyToPlatformTexture(GraphicsContextGLOpenGL&, GCGLenum, PlatformGLObject, GCGLenum, bool, bool) const { return false; }
     
     static constexpr bool isOriginAtUpperLeftCorner = false;
-    virtual bool isAccelerated() const { return false; }
+    static constexpr bool isAccelerated = false;
 
 protected:
     WEBCORE_EXPORT ImageBufferBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace);

Deleted: trunk/Source/WebCore/platform/graphics/RemoteResourceIdentifier.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/RemoteResourceIdentifier.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/RemoteResourceIdentifier.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2020 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(GPU_PROCESS)
-
-#include <wtf/ObjectIdentifier.h>
-
-namespace WebCore {
-
-enum RemoteResourceIdentifierType { };
-using RemoteResourceIdentifier = ObjectIdentifier<RemoteResourceIdentifierType>;
-
-} // namespace WebCore
-
-#endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebCore/platform/graphics/RenderingResourceIdentifier.h (from rev 269021, trunk/Source/WebCore/platform/graphics/RemoteResourceIdentifier.h) (0 => 269022)


--- trunk/Source/WebCore/platform/graphics/RenderingResourceIdentifier.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/RenderingResourceIdentifier.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebCore {
+
+enum RenderingResourceIdentifierType { };
+using RenderingResourceIdentifier = ObjectIdentifier<RenderingResourceIdentifierType>;
+
+} // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -190,11 +190,6 @@
     return m_surface.get();
 }
 
-bool ImageBufferIOSurfaceBackend::isAccelerated() const
-{
-    return true;
-}
-
 } // namespace WebCore
 
 #endif // HAVE(IOSURFACE)

Modified: trunk/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -62,9 +62,9 @@
     RefPtr<ImageData> getImageData(AlphaPremultiplication outputFormat, const IntRect&) const override;
     void putImageData(AlphaPremultiplication inputFormat, const ImageData&, const IntRect& srcRect, const IntPoint& destPoint, AlphaPremultiplication destFormat) override;
     IOSurface* surface();
-    bool isAccelerated() const override;
 
     static constexpr bool isOriginAtUpperLeftCorner = true;
+    static constexpr bool isAccelerated = true;
 
 protected:
     static RetainPtr<CGColorSpaceRef> contextColorSpace(const GraphicsContext&);

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.cpp (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -33,9 +33,9 @@
 namespace WebCore {
 namespace DisplayList {
 
-DrawingContext::DrawingContext(const FloatSize& logicalSize, const AffineTransform& initialCTM, Recorder::Observer* observer)
+DrawingContext::DrawingContext(const FloatSize& logicalSize, const AffineTransform& initialCTM, Recorder::Delegate* delegate)
     : m_context([&](GraphicsContext& displayListContext) {
-        return makeUnique<Recorder>(displayListContext, m_displayList, GraphicsContextState(), FloatRect({ }, logicalSize), initialCTM, observer);
+        return makeUnique<Recorder>(displayListContext, m_displayList, GraphicsContextState(), FloatRect({ }, logicalSize), initialCTM, delegate);
     })
 {
 }

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -35,7 +35,7 @@
 class DrawingContext {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    WEBCORE_EXPORT DrawingContext(const FloatSize& logicalSize, const AffineTransform& initialCTM = { }, Recorder::Observer* = nullptr);
+    WEBCORE_EXPORT DrawingContext(const FloatSize& logicalSize, const AffineTransform& initialCTM = { }, Recorder::Delegate* = nullptr);
 
     GraphicsContext& context() const { return const_cast<DrawingContext&>(*this).m_context; }
     WEBCORE_EXPORT Recorder& recorder();

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -32,7 +32,7 @@
 namespace DisplayList {
 
 template<typename BackendType>
-class ImageBuffer : public ConcreteImageBuffer<BackendType>, public Recorder::Observer {
+class ImageBuffer : public ConcreteImageBuffer<BackendType> {
     using BaseConcreteImageBuffer = ConcreteImageBuffer<BackendType>;
 
 public:
@@ -48,12 +48,12 @@
 
     ImageBuffer(std::unique_ptr<BackendType>&& dataBackend, const FloatSize& size)
         : BaseConcreteImageBuffer(WTFMove(dataBackend))
-        , m_drawingContext(size, initialDrawingContextCTM(size), this)
+        , m_drawingContext(size, initialDrawingContextCTM(size))
     {
     }
 
-    ImageBuffer(const FloatSize& size)
-        : m_drawingContext(size, initialDrawingContextCTM(size), this)
+    ImageBuffer(const FloatSize& size, Recorder::Delegate* delegate = nullptr)
+        : m_drawingContext(size, initialDrawingContextCTM(size), delegate)
     {
     }
 

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -37,10 +37,10 @@
 namespace WebCore {
 namespace DisplayList {
 
-Recorder::Recorder(GraphicsContext& context, DisplayList& displayList, const GraphicsContextState& state, const FloatRect& initialClip, const AffineTransform& initialCTM, Observer* observer)
+Recorder::Recorder(GraphicsContext& context, DisplayList& displayList, const GraphicsContextState& state, const FloatRect& initialClip, const AffineTransform& initialCTM, Delegate* delegate)
     : GraphicsContextImpl(context, initialClip, AffineTransform())
     , m_displayList(displayList)
-    , m_observer(observer)
+    , m_delegate(delegate)
 {
     LOG_WITH_STREAM(DisplayLists, stream << "\nRecording with clip " << initialClip);
     m_stateStack.append({ state, initialCTM, initialClip });
@@ -93,8 +93,8 @@
 
 void Recorder::willAppendItem(const Item& item)
 {
-    if (m_observer)
-        m_observer->willAppendItem(item);
+    if (m_delegate)
+        m_delegate->willAppendItem(item);
 
     if (item.isDrawingItem()
 #if USE(CG)

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h (269021 => 269022)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -53,8 +53,8 @@
     WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(Recorder);
 public:
-    class Observer;
-    WEBCORE_EXPORT Recorder(GraphicsContext&, DisplayList&, const GraphicsContextState&, const FloatRect& initialClip, const AffineTransform&, Observer* = nullptr);
+    class Delegate;
+    WEBCORE_EXPORT Recorder(GraphicsContext&, DisplayList&, const GraphicsContextState&, const FloatRect& initialClip, const AffineTransform&, Delegate* = nullptr);
     WEBCORE_EXPORT virtual ~Recorder();
 
     WEBCORE_EXPORT void putImageData(AlphaPremultiplication inputFormat, const ImageData&, const IntRect& srcRect, const IntPoint& destPoint, AlphaPremultiplication destFormat);
@@ -63,9 +63,9 @@
 
     void appendItemAndUpdateExtent(Ref<DrawingItem>&&);
 
-    class Observer {
+    class Delegate {
     public:
-        virtual ~Observer() { }
+        virtual ~Delegate() { }
         virtual void willAppendItem(const Item&) { };
     };
 
@@ -187,7 +187,7 @@
     ContextState& currentState();
 
     DisplayList& m_displayList;
-    Observer* m_observer;
+    Delegate* m_delegate;
 
     Vector<ContextState, 32> m_stateStack;
 };

Modified: trunk/Source/WebKit/ChangeLog (269021 => 269022)


--- trunk/Source/WebKit/ChangeLog	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/ChangeLog	2020-10-27 04:39:55 UTC (rev 269022)
@@ -1,3 +1,77 @@
+2020-10-26  Said Abou-Hallawa  <sabouhall...@apple.com>
+
+        [GPU Process]: Introduce RemoteResourceCacheProxy to manage the remote resources in Web Process
+        https://bugs.webkit.org/show_bug.cgi?id=217558
+
+        Reviewed by Simon Fraser.
+
+        Remove RemoteImageBufferMessageHandlerProxy and move sending the messages
+        to RemoteRenderingBackendProxy.
+
+        To allow casting ImageBuffer to RemoteImageBufferProxy, a new method named
+        remoteResourceIdentifier() is added to IamgeBuffer and it is only overridden
+        by RemoteImageBufferProxy. This method is used in SPECIALIZE_TYPE_TRAITS
+        macros along with IamgeBuffer::isAccelerated().
+
+        Introduce RemoteResourceCacheProxy which will manage caching and releasing
+        the RemoteImageBufferProxy. Caching NativeImage will be added to it in
+        future patches. More about controlling the life cycles of remote resources 
+        will be added also when supporting drawing remote resources to remote client
+        in future patches.
+
+        * GPUProcess/graphics/RemoteImageBuffer.h:
+        (WebKit::RemoteImageBuffer::create):
+        (WebKit::RemoteImageBuffer::RemoteImageBuffer):
+        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
+        (WebKit::RemoteRenderingBackend::imageBufferBackendWasCreated):
+        (WebKit::RemoteRenderingBackend::flushDisplayListWasCommitted):
+        (WebKit::RemoteRenderingBackend::createImageBuffer):
+        (WebKit::RemoteRenderingBackend::flushDisplayList):
+        (WebKit::RemoteRenderingBackend::flushDisplayListAndCommit):
+        (WebKit::RemoteRenderingBackend::getImageData):
+        (WebKit::RemoteRenderingBackend::releaseRemoteResource):
+        * GPUProcess/graphics/RemoteRenderingBackend.h:
+        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
+        * GPUProcess/graphics/RemoteResourceCache.cpp:
+        (WebKit::RemoteResourceCache::cacheImageBuffer):
+        (WebKit::RemoteResourceCache::cachedImageBuffer):
+        (WebKit::RemoteResourceCache::releaseRemoteResource):
+        * GPUProcess/graphics/RemoteResourceCache.h:
+        * Scripts/webkit/messages.py:
+        * Sources.txt:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h:
+        (isType):
+        * WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp: Removed.
+        * WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h: Removed.
+        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
+        (WebKit::RemoteImageBufferProxy::create):
+        (WebKit::RemoteImageBufferProxy::~RemoteImageBufferProxy):
+        (WebKit::RemoteImageBufferProxy::createBackend):
+        (WebKit::RemoteImageBufferProxy::commitFlushDisplayList):
+        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
+        (WebKit::RemoteImageBufferProxy::isPendingFlush const):
+        (WebKit::RemoteImageBufferProxy::timeoutWaitForFlushDisplayListWasCommitted):
+        (WebKit::RemoteImageBufferProxy::flushDrawingContextAndCommit):
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
+        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
+        (WebKit::RemoteRenderingBackendProxy::getImageData):
+        (WebKit::RemoteRenderingBackendProxy::flushDisplayList):
+        (WebKit::RemoteRenderingBackendProxy::flushDisplayListAndCommit):
+        (WebKit::RemoteRenderingBackendProxy::releaseRemoteResource):
+        (WebKit::RemoteRenderingBackendProxy::imageBufferBackendWasCreated):
+        (WebKit::RemoteRenderingBackendProxy::flushDisplayListWasCommitted):
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
+        (WebKit::RemoteRenderingBackendProxy::remoteResourceCacheProxy):
+        (WebKit::RemoteRenderingBackendProxy::renderingBackendIdentifier const): Deleted.
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in:
+        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp: Copied from Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp.
+        (WebKit::RemoteResourceCacheProxy::RemoteResourceCacheProxy):
+        (WebKit::RemoteResourceCacheProxy::cacheImageBuffer):
+        (WebKit::RemoteResourceCacheProxy::cachedImageBuffer):
+        (WebKit::RemoteResourceCacheProxy::releaseImageBuffer):
+        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h: Copied from Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h.
+
 2020-10-26  Alex Christensen  <achristen...@webkit.org>
 
         Add null checks and smart pointers in PDF and Plugin code

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h (269021 => 269022)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -41,16 +41,16 @@
     using BaseConcreteImageBuffer::putImageData;
 
 public:
-    static auto create(const WebCore::FloatSize& size, float resolutionScale, WebCore::ColorSpace colorSpace, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
+    static auto create(const WebCore::FloatSize& size, float resolutionScale, WebCore::ColorSpace colorSpace, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
     {
-        return BaseConcreteImageBuffer::template create<RemoteImageBuffer>(size, resolutionScale, colorSpace, nullptr, remoteRenderingBackend, remoteResourceIdentifier);
+        return BaseConcreteImageBuffer::template create<RemoteImageBuffer>(size, resolutionScale, colorSpace, nullptr, remoteRenderingBackend, renderingResourceIdentifier);
     }
 
-    RemoteImageBuffer(std::unique_ptr<BackendType>&& backend, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
+    RemoteImageBuffer(std::unique_ptr<BackendType>&& backend, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
         : BaseConcreteImageBuffer(WTFMove(backend))
         , m_remoteRenderingBackend(remoteRenderingBackend)
     {
-        m_remoteRenderingBackend.imageBufferBackendWasCreated(m_backend->logicalSize(), m_backend->backendSize(), m_backend->resolutionScale(), m_backend->colorSpace(), m_backend->createImageBufferBackendHandle(), remoteResourceIdentifier);
+        m_remoteRenderingBackend.imageBufferBackendWasCreated(m_backend->logicalSize(), m_backend->backendSize(), m_backend->resolutionScale(), m_backend->colorSpace(), m_backend->createImageBufferBackendHandle(), renderingResourceIdentifier);
     }
 
     ~RemoteImageBuffer()

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp (269021 => 269022)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -72,17 +72,17 @@
     return m_renderingBackendIdentifier.toUInt64();
 }
 
-void RemoteRenderingBackend::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackend::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    send(Messages::RemoteRenderingBackendProxy::ImageBufferBackendWasCreated(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle), remoteResourceIdentifier), m_renderingBackendIdentifier);
+    send(Messages::RemoteRenderingBackendProxy::ImageBufferBackendWasCreated(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle), renderingResourceIdentifier), m_renderingBackendIdentifier);
 }
 
-void RemoteRenderingBackend::flushDisplayListWasCommitted(DisplayListFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackend::flushDisplayListWasCommitted(DisplayListFlushIdentifier flushIdentifier, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    send(Messages::RemoteRenderingBackendProxy::FlushDisplayListWasCommitted(flushIdentifier, remoteResourceIdentifier), m_renderingBackendIdentifier);
+    send(Messages::RemoteRenderingBackendProxy::FlushDisplayListWasCommitted(flushIdentifier, renderingResourceIdentifier), m_renderingBackendIdentifier);
 }
 
-void RemoteRenderingBackend::createImageBuffer(const FloatSize& logicalSize, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackend::createImageBuffer(const FloatSize& logicalSize, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(renderingMode == RenderingMode::RemoteAccelerated || renderingMode == RenderingMode::RemoteUnaccelerated);
 
@@ -89,13 +89,13 @@
     std::unique_ptr<WebCore::ImageBuffer> image;
 
     if (renderingMode == RenderingMode::RemoteAccelerated)
-        image = AcceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, remoteResourceIdentifier);
+        image = AcceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, renderingResourceIdentifier);
 
     if (!image)
-        image = UnacceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, remoteResourceIdentifier);
+        image = UnacceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, renderingResourceIdentifier);
 
     if (image) {
-        m_remoteResourceCache.cacheImageBuffer(remoteResourceIdentifier, WTFMove(image));
+        m_remoteResourceCache.cacheImageBuffer(renderingResourceIdentifier, WTFMove(image));
         return;
     }
 
@@ -102,32 +102,32 @@
     ASSERT_NOT_REACHED();
 }
 
-void RemoteRenderingBackend::flushDisplayList(const WebCore::DisplayList::DisplayList& displayList, RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackend::flushDisplayList(const WebCore::DisplayList::DisplayList& displayList, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(remoteResourceIdentifier))
+    if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(renderingResourceIdentifier))
         imageBuffer->flushDisplayList(displayList);
 }
 
-void RemoteRenderingBackend::flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList& displayList, DisplayListFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackend::flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList& displayList, DisplayListFlushIdentifier flushIdentifier, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(remoteResourceIdentifier)) {
+    if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(renderingResourceIdentifier)) {
         imageBuffer->flushDisplayList(displayList);
         imageBuffer->flushContext();
-        flushDisplayListWasCommitted(flushIdentifier, remoteResourceIdentifier);
+        flushDisplayListWasCommitted(flushIdentifier, renderingResourceIdentifier);
     }
 }
 
-void RemoteRenderingBackend::getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, RemoteResourceIdentifier remoteResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&& completionHandler)
+void RemoteRenderingBackend::getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, RenderingResourceIdentifier renderingResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&& completionHandler)
 {
     RefPtr<ImageData> imageData;
-    if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(remoteResourceIdentifier))
+    if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(renderingResourceIdentifier))
         imageData = imageBuffer->getImageData(outputFormat, srcRect);
     completionHandler(IPC::ImageDataReference(WTFMove(imageData)));
 }
 
-void RemoteRenderingBackend::releaseRemoteResource(RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackend::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    m_remoteResourceCache.releaseRemoteResource(remoteResourceIdentifier);
+    m_remoteResourceCache.releaseRemoteResource(renderingResourceIdentifier);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h (269021 => 269022)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -62,8 +62,8 @@
     GPUConnectionToWebProcess* gpuConnectionToWebProcess() const;
 
     // Messages to be sent.
-    void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RemoteResourceIdentifier);
-    void flushDisplayListWasCommitted(DisplayListFlushIdentifier, WebCore::RemoteResourceIdentifier);
+    void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RenderingResourceIdentifier);
+    void flushDisplayListWasCommitted(DisplayListFlushIdentifier, WebCore::RenderingResourceIdentifier);
 
 private:
     RemoteRenderingBackend(GPUConnectionToWebProcess&, RenderingBackendIdentifier);
@@ -77,11 +77,11 @@
     void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override;
 
     // Messages to be received.
-    void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, WebCore::RemoteResourceIdentifier);
-    void flushDisplayList(const WebCore::DisplayList::DisplayList&, WebCore::RemoteResourceIdentifier);
-    void flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList&, DisplayListFlushIdentifier, WebCore::RemoteResourceIdentifier);
-    void getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RemoteResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&&);
-    void releaseRemoteResource(WebCore::RemoteResourceIdentifier);
+    void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, WebCore::RenderingResourceIdentifier);
+    void flushDisplayList(const WebCore::DisplayList::DisplayList&, WebCore::RenderingResourceIdentifier);
+    void flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList&, DisplayListFlushIdentifier, WebCore::RenderingResourceIdentifier);
+    void getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RenderingResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&&);
+    void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
 
     RemoteResourceCache m_remoteResourceCache;
     WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in (269021 => 269022)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2020-10-27 04:39:55 UTC (rev 269022)
@@ -23,11 +23,11 @@
 #if ENABLE(GPU_PROCESS)
 
 messages -> RemoteRenderingBackend NotRefCounted {
-    void CreateImageBuffer(WebCore::FloatSize logicalSize, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
-    void FlushDisplayList(WebCore::DisplayList::DisplayList displayList, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
-    void FlushDisplayListAndCommit(WebCore::DisplayList::DisplayList displayList, WebKit::DisplayListFlushIdentifier flushIdentifier, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
-    GetImageData(enum:uint8_t WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) -> (IPC::ImageDataReference imageData) Synchronous
-    void ReleaseRemoteResource(WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
+    void CreateImageBuffer(WebCore::FloatSize logicalSize, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
+    void FlushDisplayList(WebCore::DisplayList::DisplayList displayList, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
+    void FlushDisplayListAndCommit(WebCore::DisplayList::DisplayList displayList, WebKit::DisplayListFlushIdentifier flushIdentifier, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
+    GetImageData(enum:uint8_t WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) -> (IPC::ImageDataReference imageData) Synchronous
+    void ReleaseRemoteResource(WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
 }
 
 #endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp (269021 => 269022)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -31,20 +31,20 @@
 namespace WebKit {
 using namespace WebCore;
 
-void RemoteResourceCache::cacheImageBuffer(RemoteResourceIdentifier remoteResourceIdentifier, std::unique_ptr<ImageBuffer>&& image)
+void RemoteResourceCache::cacheImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier, std::unique_ptr<ImageBuffer>&& image)
 {
-    auto addResult = m_imageBuffers.add(remoteResourceIdentifier, WTFMove(image));
+    auto addResult = m_imageBuffers.add(renderingResourceIdentifier, WTFMove(image));
     ASSERT_UNUSED(addResult, addResult.isNewEntry);
 }
 
-WebCore::ImageBuffer* RemoteResourceCache::cachedImageBuffer(RemoteResourceIdentifier remoteResourceIdentifier)
+WebCore::ImageBuffer* RemoteResourceCache::cachedImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    return m_imageBuffers.get(remoteResourceIdentifier);
+    return m_imageBuffers.get(renderingResourceIdentifier);
 }
 
-void RemoteResourceCache::releaseRemoteResource(RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteResourceCache::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    if (m_imageBuffers.remove(remoteResourceIdentifier))
+    if (m_imageBuffers.remove(renderingResourceIdentifier))
         return;
     // Caching the remote resource should have happened before releasing it.
     ASSERT_NOT_REACHED();

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h (269021 => 269022)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -27,7 +27,7 @@
 
 #if ENABLE(GPU_PROCESS)
 
-#include <WebCore/RemoteResourceIdentifier.h>
+#include <WebCore/RenderingResourceIdentifier.h>
 #include <wtf/HashMap.h>
 
 namespace WebCore {
@@ -42,12 +42,12 @@
 public:
     RemoteResourceCache() = default;
 
-    void cacheImageBuffer(WebCore::RemoteResourceIdentifier, std::unique_ptr<WebCore::ImageBuffer>&&);
-    WebCore::ImageBuffer* cachedImageBuffer(WebCore::RemoteResourceIdentifier);
-    void releaseRemoteResource(WebCore::RemoteResourceIdentifier);
+    void cacheImageBuffer(WebCore::RenderingResourceIdentifier, std::unique_ptr<WebCore::ImageBuffer>&&);
+    WebCore::ImageBuffer* cachedImageBuffer(WebCore::RenderingResourceIdentifier);
+    void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
 
 private:
-    using RemoteImageBufferHashMap = HashMap<WebCore::RemoteResourceIdentifier, std::unique_ptr<WebCore::ImageBuffer>>;
+    using RemoteImageBufferHashMap = HashMap<WebCore::RenderingResourceIdentifier, std::unique_ptr<WebCore::ImageBuffer>>;
 
     RemoteImageBufferHashMap m_imageBuffers;
 };

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (269021 => 269022)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2020-10-27 04:39:55 UTC (rev 269022)
@@ -223,7 +223,7 @@
         'WebCore::PointerID',
         'WebCore::ProcessIdentifier',
         'WebCore::RealtimeMediaSourceIdentifier',
-        'WebCore::RemoteResourceIdentifier',
+        'WebCore::RenderingResourceIdentifier',
         'WebCore::RenderingMode',
         'WebCore::ServiceWorkerIdentifier',
         'WebCore::ServiceWorkerJobIdentifier',

Modified: trunk/Source/WebKit/Sources.txt (269021 => 269022)


--- trunk/Source/WebKit/Sources.txt	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/Sources.txt	2020-10-27 04:39:55 UTC (rev 269022)
@@ -558,8 +558,8 @@
 
 WebProcess/GPU/GPUProcessConnection.cpp
 WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp
-WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp
 WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp
+WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp
 WebProcess/GPU/media/AudioTrackPrivateRemote.cpp
 WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
 WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (269021 => 269022)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-10-27 04:39:55 UTC (rev 269022)
@@ -4222,8 +4222,6 @@
 		71A676A522C62318007D6295 /* WKTouchActionGestureRecognizer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKTouchActionGestureRecognizer.mm; path = ios/WKTouchActionGestureRecognizer.mm; sourceTree = "<group>"; };
 		71FB810A2260627A00323677 /* WebsiteSimulatedMouseEventsDispatchPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsiteSimulatedMouseEventsDispatchPolicy.h; sourceTree = "<group>"; };
 		7227800B2408BD7D007D376B /* PlatformRemoteImageBufferProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformRemoteImageBufferProxy.h; sourceTree = "<group>"; };
-		7227800C24097A02007D376B /* RemoteImageBufferMessageHandlerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteImageBufferMessageHandlerProxy.cpp; sourceTree = "<group>"; };
-		7227800D24097A02007D376B /* RemoteImageBufferMessageHandlerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferMessageHandlerProxy.h; sourceTree = "<group>"; };
 		726D56DD253A64810002EF90 /* RemoteResourceCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteResourceCache.cpp; sourceTree = "<group>"; };
 		726D56DE253A64810002EF90 /* RemoteResourceCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteResourceCache.h; sourceTree = "<group>"; };
 		727A7F342407857D004D2931 /* ImageBufferShareableIOSurfaceBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferShareableIOSurfaceBackend.cpp; sourceTree = "<group>"; };
@@ -4235,6 +4233,8 @@
 		727A7F492408AEE6004D2931 /* RemoteImageBufferProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferProxy.h; sourceTree = "<group>"; };
 		728E86EF1795188C0087879E /* WebColorPickerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebColorPickerMac.h; sourceTree = "<group>"; };
 		728E86F01795188C0087879E /* WebColorPickerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebColorPickerMac.mm; sourceTree = "<group>"; };
+		72B53157253C1E4D0049295A /* RemoteResourceCacheProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteResourceCacheProxy.cpp; sourceTree = "<group>"; };
+		72B53158253C1E4D0049295A /* RemoteResourceCacheProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteResourceCacheProxy.h; sourceTree = "<group>"; };
 		75A8D2C4187CCF9F00C39C9E /* WKWebsiteDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebsiteDataStore.h; sourceTree = "<group>"; };
 		75A8D2C5187CCF9F00C39C9E /* WKWebsiteDataStore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebsiteDataStore.mm; sourceTree = "<group>"; };
 		75A8D2D4187D1C0100C39C9E /* WKWebsiteDataStoreInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebsiteDataStoreInternal.h; sourceTree = "<group>"; };
@@ -8133,12 +8133,12 @@
 				727A7F36240788F0004D2931 /* ImageBufferShareableBitmapBackend.h */,
 				727A7F38240788F0004D2931 /* PlatformImageBufferShareableBackend.h */,
 				7227800B2408BD7D007D376B /* PlatformRemoteImageBufferProxy.h */,
-				7227800C24097A02007D376B /* RemoteImageBufferMessageHandlerProxy.cpp */,
-				7227800D24097A02007D376B /* RemoteImageBufferMessageHandlerProxy.h */,
 				727A7F492408AEE6004D2931 /* RemoteImageBufferProxy.h */,
 				5506409D2407160900AAE045 /* RemoteRenderingBackendProxy.cpp */,
 				5506409E2407160900AAE045 /* RemoteRenderingBackendProxy.h */,
 				550640A0240719E100AAE045 /* RemoteRenderingBackendProxy.messages.in */,
+				72B53157253C1E4D0049295A /* RemoteResourceCacheProxy.cpp */,
+				72B53158253C1E4D0049295A /* RemoteResourceCacheProxy.h */,
 				5506409F2407196A00AAE045 /* RenderingBackendIdentifier.h */,
 			);
 			path = graphics;

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -37,4 +37,14 @@
 
 } // namespace WebKit
 
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebKit::UnacceleratedRemoteImageBufferProxy)
+    static bool isType(const WebCore::ImageBuffer& imageBuffer) { return imageBuffer.renderingResourceIdentifier() && !imageBuffer.isAccelerated(); }
+SPECIALIZE_TYPE_TRAITS_END()
+
+#if HAVE(IOSURFACE)
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebKit::AcceleratedRemoteImageBufferProxy)
+    static bool isType(const WebCore::ImageBuffer& imageBuffer) { return imageBuffer.renderingResourceIdentifier() && imageBuffer.isAccelerated(); }
+SPECIALIZE_TYPE_TRAITS_END()
+#endif
+
 #endif // ENABLE(GPU_PROCESS)

Deleted: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2020 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "RemoteImageBufferMessageHandlerProxy.h"
-
-#if ENABLE(GPU_PROCESS)
-
-#include "ImageDataReference.h"
-#include "RemoteRenderingBackendMessages.h"
-#include "RemoteRenderingBackendProxy.h"
-#include <WebCore/DisplayListItems.h>
-#include <wtf/SystemTracing.h>
-
-namespace WebKit {
-using namespace WebCore;
-
-RemoteImageBufferMessageHandlerProxy::RemoteImageBufferMessageHandlerProxy(const FloatSize& size, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace, RemoteRenderingBackendProxy& remoteRenderingBackendProxy)
-    : m_remoteRenderingBackendProxy(makeWeakPtr(remoteRenderingBackendProxy))
-{
-    // Create the RemoteImageBufferProxy.
-    m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::CreateImageBuffer(size, renderingMode, resolutionScale, colorSpace, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier());
-}
-
-RemoteImageBufferMessageHandlerProxy::~RemoteImageBufferMessageHandlerProxy()
-{
-    // Release the RemoteImageBufferProxy.
-    if (!m_remoteRenderingBackendProxy)
-        return;
-    m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::ReleaseRemoteResource(m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier());
-}
-
-RefPtr<ImageData> RemoteImageBufferMessageHandlerProxy::getImageData(AlphaPremultiplication outputFormat, const IntRect& srcRect) const
-{
-    IPC::ImageDataReference imageDataReference;
-    m_remoteRenderingBackendProxy->sendSync(Messages::RemoteRenderingBackend::GetImageData(outputFormat, srcRect, m_remoteResourceIdentifier), Messages::RemoteRenderingBackend::GetImageData::Reply(imageDataReference), m_remoteRenderingBackendProxy->renderingBackendIdentifier(), 1_s);
-    return imageDataReference.buffer();
-}
-
-void RemoteImageBufferMessageHandlerProxy::waitForImageBufferBackendWasCreated()
-{
-    if (m_remoteRenderingBackendProxy && !isBackendCreated())
-        m_remoteRenderingBackendProxy->waitForImageBufferBackendWasCreated();
-}
-
-void RemoteImageBufferMessageHandlerProxy::waitForFlushDisplayListWasCommitted()
-{
-    if (m_remoteRenderingBackendProxy && isPendingFlush())
-        m_remoteRenderingBackendProxy->waitForFlushDisplayListWasCommitted();
-}
-
-void RemoteImageBufferMessageHandlerProxy::flushDisplayList(WebCore::DisplayList::DisplayList& displayList)
-{
-    if (!m_remoteRenderingBackendProxy)
-        return;
-    
-    TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd);
-    m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::FlushDisplayList(displayList, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier());
-    displayList.clear();
-}
-
-void RemoteImageBufferMessageHandlerProxy::flushDisplayListAndWaitCommit(WebCore::DisplayList::DisplayList& displayList)
-{
-    if (!m_remoteRenderingBackendProxy)
-        return;
-
-    TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd, 1);
-    m_sentFlushIdentifier = DisplayListFlushIdentifier::generate();
-    m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::FlushDisplayListAndCommit(displayList, m_sentFlushIdentifier, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier());
-    displayList.clear();
-    waitForFlushDisplayListWasCommitted();
-}
-
-void RemoteImageBufferMessageHandlerProxy::commitFlushContext(DisplayListFlushIdentifier flushIdentifier)
-{
-    m_receivedFlushIdentifier = flushIdentifier;
-}
-
-} // namespace WebKit
-
-#endif // ENABLE(GPU_PROCESS)

Deleted: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2020 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(GPU_PROCESS)
-
-#include "DisplayListFlushIdentifier.h"
-#include "ImageBufferBackendHandle.h"
-#include <WebCore/ColorSpace.h>
-#include <WebCore/DisplayList.h>
-#include <WebCore/FloatSize.h>
-#include <WebCore/RemoteResourceIdentifier.h>
-#include <WebCore/RenderingMode.h>
-
-namespace WebCore {
-class ImageData;
-enum class AlphaPremultiplication : uint8_t;
-}
-
-namespace WebKit {
-
-class RemoteRenderingBackendProxy;
-
-class RemoteImageBufferMessageHandlerProxy {
-public:
-    virtual ~RemoteImageBufferMessageHandlerProxy();
-
-    WebCore::RemoteResourceIdentifier remoteResourceIdentifier() const { return m_remoteResourceIdentifier; }
-
-    // Messages to be received. See RemoteRenderingBackend.messages.in.
-    virtual void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle) = 0;
-
-    void commitFlushContext(DisplayListFlushIdentifier);
-
-protected:
-    RemoteImageBufferMessageHandlerProxy(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, RemoteRenderingBackendProxy&);
-
-    virtual bool isBackendCreated() const = 0;
-    bool isPendingFlush() const { return m_sentFlushIdentifier != m_receivedFlushIdentifier; }
-
-    RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect) const;
-
-    void waitForImageBufferBackendWasCreated();
-    void waitForFlushDisplayListWasCommitted();
-
-    // Messages to be sent. See RemoteRenderingBackendProxy.messages.in.
-    void flushDisplayList(WebCore::DisplayList::DisplayList&);
-    void flushDisplayListAndWaitCommit(WebCore::DisplayList::DisplayList&);
-
-private:
-    WeakPtr<RemoteRenderingBackendProxy> m_remoteRenderingBackendProxy;
-    WebCore::RemoteResourceIdentifier m_remoteResourceIdentifier { WebCore::RemoteResourceIdentifier::generate() };
-
-    DisplayListFlushIdentifier m_sentFlushIdentifier;
-    DisplayListFlushIdentifier m_receivedFlushIdentifier;
-};
-
-} // namespace WebKit
-
-#endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -27,7 +27,6 @@
 
 #if ENABLE(GPU_PROCESS)
 
-#include "RemoteImageBufferMessageHandlerProxy.h"
 #include <WebCore/DisplayListImageBuffer.h>
 #include <WebCore/DisplayListItems.h>
 #include <WebCore/DisplayListRecorder.h>
@@ -37,54 +36,82 @@
 class RemoteRenderingBackend;
 
 template<typename BackendType>
-class RemoteImageBufferProxy : public WebCore::DisplayList::ImageBuffer<BackendType>, public RemoteImageBufferMessageHandlerProxy {
+class RemoteImageBufferProxy : public WebCore::DisplayList::ImageBuffer<BackendType>, public WebCore::DisplayList::Recorder::Delegate {
     using BaseDisplayListImageBuffer = WebCore::DisplayList::ImageBuffer<BackendType>;
     using BaseDisplayListImageBuffer::m_backend;
     using BaseDisplayListImageBuffer::m_drawingContext;
 
 public:
-    static std::unique_ptr<RemoteImageBufferProxy> create(const WebCore::FloatSize& size, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, RemoteRenderingBackendProxy& remoteRenderingBackendProxy)
+    static std::unique_ptr<RemoteImageBufferProxy> create(const WebCore::FloatSize& size, float resolutionScale, RemoteRenderingBackendProxy& remoteRenderingBackendProxy)
     {
         if (BackendType::calculateBackendSize(size, resolutionScale).isEmpty())
             return nullptr;
 
-        return std::unique_ptr<RemoteImageBufferProxy>(new RemoteImageBufferProxy(size, renderingMode, resolutionScale, colorSpace, remoteRenderingBackendProxy));
+        return std::unique_ptr<RemoteImageBufferProxy>(new RemoteImageBufferProxy(size, remoteRenderingBackendProxy));
     }
 
     ~RemoteImageBufferProxy()
     {
+        if (!m_remoteRenderingBackendProxy)
+            return;
         flushDrawingContext();
+        m_remoteRenderingBackendProxy->remoteResourceCacheProxy().releaseImageBuffer(m_renderingResourceIdentifier);
     }
 
+    WebCore::RenderingResourceIdentifier renderingResourceIdentifier() const override { return m_renderingResourceIdentifier; }
+
+    void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, ImageBufferBackendHandle handle)
+    {
+        ASSERT(!m_backend);
+        m_backend = BackendType::create(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle));
+    }
+
+    void commitFlushDisplayList(DisplayListFlushIdentifier flushIdentifier)
+    {
+        m_receivedFlushIdentifier = flushIdentifier;
+    }
+
 protected:
-    RemoteImageBufferProxy(const WebCore::FloatSize& size, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, RemoteRenderingBackendProxy& remoteRenderingBackendProxy)
-        : BaseDisplayListImageBuffer(size)
-        , RemoteImageBufferMessageHandlerProxy(size, renderingMode, resolutionScale, colorSpace, remoteRenderingBackendProxy)
+    RemoteImageBufferProxy(const WebCore::FloatSize& size, RemoteRenderingBackendProxy& remoteRenderingBackendProxy)
+        : BaseDisplayListImageBuffer(size, this)
+        , m_remoteRenderingBackendProxy(makeWeakPtr(remoteRenderingBackendProxy))
     {
+        ASSERT(m_remoteRenderingBackendProxy);
     }
 
-    void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, ImageBufferBackendHandle handle) override
+    bool isPendingFlush() const { return m_sentFlushIdentifier != m_receivedFlushIdentifier; }
+
+    void timeoutWaitForFlushDisplayListWasCommitted()
     {
-        ASSERT(!m_backend);
-        m_backend = BackendType::create(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle));
+        if (!m_remoteRenderingBackendProxy)
+            return;
+
+        // Wait for our DisplayList to be flushed but do not hang.
+        static constexpr unsigned maxWaitingFlush = 3;
+        for (unsigned numWaitingFlush = 0; numWaitingFlush < maxWaitingFlush && isPendingFlush(); ++numWaitingFlush)
+            m_remoteRenderingBackendProxy->waitForFlushDisplayListWasCommitted();
     }
-    
-    bool isBackendCreated() const override { return m_backend.get(); }
 
     BackendType* ensureBackendCreated() const override
     {
-        if (!m_backend)
-            const_cast<RemoteImageBufferProxy&>(*this).RemoteImageBufferMessageHandlerProxy::waitForImageBufferBackendWasCreated();
+        if (!m_backend && m_remoteRenderingBackendProxy)
+            m_remoteRenderingBackendProxy->waitForImageBufferBackendWasCreated();
         return m_backend.get();
     }
 
     RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect) const override
     {
+        if (!m_remoteRenderingBackendProxy)
+            return nullptr;
+
         auto& displayList = const_cast<RemoteImageBufferProxy*>(this)->m_drawingContext.displayList();
-        const_cast<RemoteImageBufferProxy*>(this)->RemoteImageBufferMessageHandlerProxy::flushDisplayList(displayList);
-        auto result = const_cast<RemoteImageBufferProxy*>(this)->RemoteImageBufferMessageHandlerProxy::getImageData(outputFormat, srcRect);
+        if (displayList.itemCount()) {
+            const_cast<RemoteImageBufferProxy&>(*this).flushDisplayList(displayList);
+            displayList.clear();
+        }
+
         // getImageData is synchronous, which means we've already received the CommitImageBufferFlushContext message.
-        return result;
+        return m_remoteRenderingBackendProxy->getImageData(outputFormat, srcRect, m_renderingResourceIdentifier);
     }
 
     void putImageData(WebCore::AlphaPremultiplication inputFormat, const WebCore::ImageData& imageData, const WebCore::IntRect& srcRect, const WebCore::IntPoint& destPoint = { }, WebCore::AlphaPremultiplication destFormat = WebCore::AlphaPremultiplication::Premultiplied) override
@@ -103,18 +130,48 @@
 
     void flushDrawingContext() override
     {
+        flushDrawingContextAndCommit();
+        timeoutWaitForFlushDisplayListWasCommitted();
+    }
+
+    void flushDrawingContextAndCommit()
+    {
+        if (!m_remoteRenderingBackendProxy)
+            return;
+
         auto& displayList = m_drawingContext.displayList();
-        if (displayList.itemCount())
-            RemoteImageBufferMessageHandlerProxy::flushDisplayListAndWaitCommit(displayList);
+        if (!displayList.itemCount())
+            return;
+
+        TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd, 1);
+        m_sentFlushIdentifier = m_remoteRenderingBackendProxy->flushDisplayListAndCommit(displayList, m_renderingResourceIdentifier);
+        displayList.clear();
     }
-    
+
+    void flushDisplayList(const WebCore::DisplayList::DisplayList& displayList) override
+    {
+        if (!m_remoteRenderingBackendProxy || !displayList.itemCount())
+            return;
+
+        TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd);
+        m_remoteRenderingBackendProxy->flushDisplayList(displayList, m_renderingResourceIdentifier);
+    }
+
     void willAppendItem(const WebCore::DisplayList::Item&) override
     {
         constexpr size_t DisplayListBatchSize = 512;
         auto& displayList = m_drawingContext.displayList();
-        if (displayList.itemCount() >= DisplayListBatchSize)
-            RemoteImageBufferMessageHandlerProxy::flushDisplayList(displayList);
+        if (displayList.itemCount() < DisplayListBatchSize)
+            return;
+
+        flushDisplayList(displayList);
+        displayList.clear();
     }
+
+    DisplayListFlushIdentifier m_sentFlushIdentifier;
+    DisplayListFlushIdentifier m_receivedFlushIdentifier;
+    WebCore::RenderingResourceIdentifier m_renderingResourceIdentifier { WebCore::RenderingResourceIdentifier::generate() };
+    WeakPtr<RemoteRenderingBackendProxy> m_remoteRenderingBackendProxy;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -30,6 +30,7 @@
 
 #include "GPUConnectionToWebProcess.h"
 #include "GPUProcessConnection.h"
+#include "ImageDataReference.h"
 #include "PlatformRemoteImageBufferProxy.h"
 #include "RemoteRenderingBackendMessages.h"
 #include "RemoteRenderingBackendProxyMessages.h"
@@ -88,40 +89,77 @@
 
 std::unique_ptr<ImageBuffer> RemoteRenderingBackendProxy::createImageBuffer(const FloatSize& size, ShouldAccelerate shouldAccelerate, float resolutionScale, ColorSpace colorSpace)
 {
+    RenderingMode renderingMode;
+    std::unique_ptr<WebCore::ImageBuffer> imageBuffer;
+
     if (shouldAccelerate == ShouldAccelerate::Yes) {
-        if (auto imageBuffer = AcceleratedRemoteImageBufferProxy::create(size, RenderingMode::RemoteAccelerated, resolutionScale, colorSpace, *this)) {
-            m_imageBufferMessageHandlerMap.add(imageBuffer->remoteResourceIdentifier(), imageBuffer.get());
-            return imageBuffer;
-        }
+        renderingMode = RenderingMode::RemoteAccelerated;
+        imageBuffer = AcceleratedRemoteImageBufferProxy::create(size, resolutionScale, *this);
     }
 
-    if (auto imageBuffer = UnacceleratedRemoteImageBufferProxy::create(size, RenderingMode::RemoteUnaccelerated, resolutionScale, colorSpace, *this)) {
-        m_imageBufferMessageHandlerMap.add(imageBuffer->remoteResourceIdentifier(), imageBuffer.get());
+    if (!imageBuffer) {
+        renderingMode = RenderingMode::RemoteUnaccelerated;
+        imageBuffer = UnacceleratedRemoteImageBufferProxy::create(size, resolutionScale, *this);
+    }
+
+    if (imageBuffer) {
+        send(Messages::RemoteRenderingBackend::CreateImageBuffer(size, renderingMode, resolutionScale, colorSpace, imageBuffer->renderingResourceIdentifier()), m_renderingBackendIdentifier);
+        m_remoteResourceCacheProxy.cacheImageBuffer(imageBuffer->renderingResourceIdentifier(), imageBuffer.get());
         return imageBuffer;
     }
 
+    ASSERT_NOT_REACHED();
     return nullptr;
 }
 
-void RemoteRenderingBackendProxy::releaseRemoteResource(RemoteResourceIdentifier remoteResourceIdentifier)
+RefPtr<ImageData> RemoteRenderingBackendProxy::getImageData(AlphaPremultiplication outputFormat, const IntRect& srcRect, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    // CreateImageBuffer message should have been received before this one.
-    bool found = m_imageBufferMessageHandlerMap.remove(remoteResourceIdentifier);
-    ASSERT_UNUSED(found, found);
+    IPC::ImageDataReference imageDataReference;
+    sendSync(Messages::RemoteRenderingBackend::GetImageData(outputFormat, srcRect, renderingResourceIdentifier), Messages::RemoteRenderingBackend::GetImageData::Reply(imageDataReference), m_renderingBackendIdentifier, 1_s);
+    return imageDataReference.buffer();
 }
 
-void RemoteRenderingBackendProxy::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RemoteResourceIdentifier remoteResourceIdentifier)
+void RemoteRenderingBackendProxy::flushDisplayList(const DisplayList::DisplayList& displayList, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier))
-        imageBuffer->createBackend(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle));
+    send(Messages::RemoteRenderingBackend::FlushDisplayList(displayList, renderingResourceIdentifier), m_renderingBackendIdentifier);
 }
 
-void RemoteRenderingBackendProxy::flushDisplayListWasCommitted(DisplayListFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier)
+DisplayListFlushIdentifier RemoteRenderingBackendProxy::flushDisplayListAndCommit(const DisplayList::DisplayList& displayList, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier))
-        imageBuffer->commitFlushContext(flushIdentifier);
+    DisplayListFlushIdentifier sentFlushIdentifier = DisplayListFlushIdentifier::generate();
+    send(Messages::RemoteRenderingBackend::FlushDisplayListAndCommit(displayList, sentFlushIdentifier, renderingResourceIdentifier), m_renderingBackendIdentifier);
+    return sentFlushIdentifier;
 }
 
+void RemoteRenderingBackendProxy::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)
+{
+    send(Messages::RemoteRenderingBackend::ReleaseRemoteResource(renderingResourceIdentifier), m_renderingBackendIdentifier);
+}
+
+void RemoteRenderingBackendProxy::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RenderingResourceIdentifier renderingResourceIdentifier)
+{
+    auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(renderingResourceIdentifier);
+    if (!imageBuffer)
+        return;
+    
+    if (imageBuffer->isAccelerated())
+        downcast<AcceleratedRemoteImageBufferProxy>(*imageBuffer).createBackend(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle));
+    else
+        downcast<UnacceleratedRemoteImageBufferProxy>(*imageBuffer).createBackend(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle));
+}
+
+void RemoteRenderingBackendProxy::flushDisplayListWasCommitted(DisplayListFlushIdentifier flushIdentifier, RenderingResourceIdentifier renderingResourceIdentifier)
+{
+    auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(renderingResourceIdentifier);
+    if (!imageBuffer)
+        return;
+
+    if (imageBuffer->isAccelerated())
+        downcast<AcceleratedRemoteImageBufferProxy>(*imageBuffer).commitFlushDisplayList(flushIdentifier);
+    else
+        downcast<UnacceleratedRemoteImageBufferProxy>(*imageBuffer).commitFlushDisplayList(flushIdentifier);
+}
+
 } // namespace WebKit
 
 #endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -31,16 +31,24 @@
 #include "ImageBufferBackendHandle.h"
 #include "MessageReceiver.h"
 #include "MessageSender.h"
-#include "RemoteImageBufferMessageHandlerProxy.h"
+#include "RemoteResourceCacheProxy.h"
 #include "RenderingBackendIdentifier.h"
-#include <WebCore/ColorSpace.h>
-#include <WebCore/DisplayList.h>
-#include <WebCore/FloatSize.h>
-#include <WebCore/RemoteResourceIdentifier.h>
-#include <WebCore/RenderingMode.h>
-#include <wtf/HashMap.h>
+#include <WebCore/RenderingResourceIdentifier.h>
 #include <wtf/WeakPtr.h>
 
+namespace WebCore {
+namespace DisplayList {
+class DisplayList;
+class Item;
+}
+class FloatSize;
+class ImageData;
+enum class AlphaPremultiplication : uint8_t;
+enum class ColorSpace : uint8_t;
+enum class RenderingMode : uint8_t;
+enum class ShouldAccelerate : bool;
+}
+
 namespace WebKit {
 
 class RemoteRenderingBackendProxy
@@ -52,7 +60,7 @@
 
     ~RemoteRenderingBackendProxy();
 
-    RenderingBackendIdentifier renderingBackendIdentifier() const { return m_renderingBackendIdentifier; }
+    RemoteResourceCacheProxy& remoteResourceCacheProxy() { return m_remoteResourceCacheProxy; }
 
     // IPC::MessageSender.
     IPC::Connection* messageSenderConnection() const override;
@@ -61,8 +69,12 @@
     // IPC::MessageReceiver
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
 
+    // Messages to be sent.
     std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::ShouldAccelerate, float resolutionScale, WebCore::ColorSpace);
-    void releaseRemoteResource(WebCore::RemoteResourceIdentifier);
+    RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect, WebCore::RenderingResourceIdentifier);
+    void flushDisplayList(const WebCore::DisplayList::DisplayList&, WebCore::RenderingResourceIdentifier);
+    DisplayListFlushIdentifier flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList&, WebCore::RenderingResourceIdentifier);
+    void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
 
     bool waitForImageBufferBackendWasCreated();
     bool waitForFlushDisplayListWasCommitted();
@@ -71,11 +83,10 @@
     RemoteRenderingBackendProxy();
 
     // Messages to be received.
-    void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RemoteResourceIdentifier);
-    void flushDisplayListWasCommitted(DisplayListFlushIdentifier, WebCore::RemoteResourceIdentifier);
+    void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RenderingResourceIdentifier);
+    void flushDisplayListWasCommitted(DisplayListFlushIdentifier, WebCore::RenderingResourceIdentifier);
 
-    using ImageBufferMessageHandlerMap = HashMap<WebCore::RemoteResourceIdentifier, RemoteImageBufferMessageHandlerProxy*>;
-    ImageBufferMessageHandlerMap m_imageBufferMessageHandlerMap;
+    RemoteResourceCacheProxy m_remoteResourceCacheProxy { *this };
     RenderingBackendIdentifier m_renderingBackendIdentifier { RenderingBackendIdentifier::generate() };
 };
 

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in (269021 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in	2020-10-27 04:39:26 UTC (rev 269021)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in	2020-10-27 04:39:55 UTC (rev 269022)
@@ -23,8 +23,8 @@
 #if ENABLE(GPU_PROCESS)
 
 messages -> RemoteRenderingBackendProxy NotRefCounted {
-    void ImageBufferBackendWasCreated(WebCore::FloatSize logicalSize, WebCore::IntSize backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferBackendHandle handle, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
-    void FlushDisplayListWasCommitted(WebKit::DisplayListFlushIdentifier flushIdentifier, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)
+    void ImageBufferBackendWasCreated(WebCore::FloatSize logicalSize, WebCore::IntSize backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferBackendHandle handle, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
+    void FlushDisplayListWasCommitted(WebKit::DisplayListFlushIdentifier flushIdentifier, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
 }
 
 #endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp (from rev 269021, trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp) (0 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2020-10-27 04:39:55 UTC (rev 269022)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RemoteResourceCacheProxy.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "RemoteRenderingBackendProxy.h"
+
+namespace WebKit {
+using namespace WebCore;
+
+RemoteResourceCacheProxy::RemoteResourceCacheProxy(RemoteRenderingBackendProxy& remoteRenderingBackendProxy)
+    : m_remoteRenderingBackendProxy(remoteRenderingBackendProxy)
+{
+}
+
+void RemoteResourceCacheProxy::cacheImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier, WebCore::ImageBuffer* imageBuffer)
+{
+    auto addResult = m_imageBuffers.add(renderingResourceIdentifier, imageBuffer);
+    ASSERT_UNUSED(addResult, addResult.isNewEntry);
+}
+
+ImageBuffer* RemoteResourceCacheProxy::cachedImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier)
+{
+    return m_imageBuffers.get(renderingResourceIdentifier);
+}
+
+void RemoteResourceCacheProxy::releaseImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier)
+{
+    bool found = m_imageBuffers.remove(renderingResourceIdentifier);
+    ASSERT_UNUSED(found, found);
+    m_remoteRenderingBackendProxy.releaseRemoteResource(renderingResourceIdentifier);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h (from rev 269021, trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h) (0 => 269022)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h	2020-10-27 04:39:55 UTC (rev 269022)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2020 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include <WebCore/RenderingResourceIdentifier.h>
+#include <wtf/HashMap.h>
+
+namespace WebCore {
+class ImageBuffer;
+}
+
+namespace WebKit {
+
+class RemoteRenderingBackendProxy;
+
+class RemoteResourceCacheProxy {
+public:
+    RemoteResourceCacheProxy(RemoteRenderingBackendProxy&);
+
+    void cacheImageBuffer(WebCore::RenderingResourceIdentifier, WebCore::ImageBuffer*);
+    WebCore::ImageBuffer* cachedImageBuffer(WebCore::RenderingResourceIdentifier);
+    void releaseImageBuffer(WebCore::RenderingResourceIdentifier);
+
+private:
+    using RemoteImageBufferProxyHashMap = HashMap<WebCore::RenderingResourceIdentifier, WebCore::ImageBuffer*>;
+    
+    RemoteImageBufferProxyHashMap m_imageBuffers;
+    RemoteRenderingBackendProxy& m_remoteRenderingBackendProxy;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to