Title: [270444] trunk/Source
Revision
270444
Author
s...@apple.com
Date
2020-12-04 11:47:56 -0800 (Fri, 04 Dec 2020)

Log Message

[GPU Process] Share the NativeImage with GPU Process through a ShareableBitmap
https://bugs.webkit.org/show_bug.cgi?id=218934

Reviewed by Tim Horton.

Source/WebCore:

Delete a NativeImage constructor and a create method which were used by
the deleted IPC coders of the NativeImage.

* Headers.cmake:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/NativeImage.cpp:
(WebCore::NativeImage::create):
(WebCore::NativeImage::NativeImage):
* platform/graphics/NativeImage.h:
* platform/graphics/NativeImageReference.h: Removed.

Source/WebKit:

Instead of relying on the IPC coders to transfer the NativeImage to the
GPUP, we are going to move this logic to RemoteResourceCacheProxy and
RemoteRenderingBackend. The NativeImage will be transfered as a handle of
ShareableBitamp and a renderingResourceIdentifier.

* GPUProcess/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::cacheNativeImage):
* GPUProcess/graphics/RemoteRenderingBackend.h:
* GPUProcess/graphics/RemoteRenderingBackend.messages.in:
* Shared/ShareableBitmap.h:
(WebKit::ShareableBitmap::createPlatformImage):
Add this helper function and avoid adding directive code in many places.

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<Ref<NativeImage>>::encode): Deleted.
(IPC::ArgumentCoder<Ref<NativeImage>>::decode): Deleted.
* Shared/WebCoreArgumentCoders.h:
* WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
(WebKit::ImageBufferShareableBitmapBackend::copyNativeImage const):
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::cacheNativeImage):
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
* WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
(WebKit::createShareableBitmapFromNativeImage):
(WebKit::RemoteResourceCacheProxy::cacheNativeImage):

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (270443 => 270444)


--- trunk/Source/WebCore/ChangeLog	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebCore/ChangeLog	2020-12-04 19:47:56 UTC (rev 270444)
@@ -1,3 +1,21 @@
+2020-12-04  Said Abou-Hallawa  <s...@apple.com>
+
+        [GPU Process] Share the NativeImage with GPU Process through a ShareableBitmap
+        https://bugs.webkit.org/show_bug.cgi?id=218934
+
+        Reviewed by Tim Horton.
+
+        Delete a NativeImage constructor and a create method which were used by
+        the deleted IPC coders of the NativeImage.
+
+        * Headers.cmake:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/graphics/NativeImage.cpp:
+        (WebCore::NativeImage::create):
+        (WebCore::NativeImage::NativeImage):
+        * platform/graphics/NativeImage.h:
+        * platform/graphics/NativeImageReference.h: Removed.
+
 2020-12-04  Peng Liu  <peng.l...@apple.com>
 
         [MSE] Move track buffer management from SourceBuffer to SourceBufferPrivate

Modified: trunk/Source/WebCore/Headers.cmake (270443 => 270444)


--- trunk/Source/WebCore/Headers.cmake	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebCore/Headers.cmake	2020-12-04 19:47:56 UTC (rev 270444)
@@ -1236,7 +1236,6 @@
     platform/graphics/MediaSourcePrivateClient.h
     platform/graphics/MediaUsageInfo.h
     platform/graphics/NativeImage.h
-    platform/graphics/NativeImageReference.h
     platform/graphics/OpenGLESShims.h
     platform/graphics/OpenGLShims.h
     platform/graphics/Path.h

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (270443 => 270444)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-12-04 19:47:56 UTC (rev 270444)
@@ -2192,7 +2192,6 @@
 		7299BC6823D6A53E00CC6883 /* RenderingMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7299BC6623D686C600CC6883 /* RenderingMode.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, ); }; };
-		72AB9A21255A9FDE00E6EBF1 /* NativeImageReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 72AB9A1F255A9EA600E6EBF1 /* NativeImageReference.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 */; };
 		75793E840D0CE0B3007FC0AC /* MessageEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 75793E810D0CE0B3007FC0AC /* MessageEvent.h */; };
@@ -10089,7 +10088,6 @@
 		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 /* RenderingResourceIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderingResourceIdentifier.h; sourceTree = "<group>"; };
-		72AB9A1F255A9EA600E6EBF1 /* NativeImageReference.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NativeImageReference.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>"; };
@@ -26605,7 +26603,6 @@
 				314BE3A51B3103FB00141982 /* NamedImageGeneratedImage.h */,
 				7252396B254CADC200F5FB15 /* NativeImage.cpp */,
 				55A336F61D8209F40022C4C7 /* NativeImage.h */,
-				72AB9A1F255A9EA600E6EBF1 /* NativeImageReference.h */,
 				B27535520B053814002CE64F /* Path.cpp */,
 				B27535530B053814002CE64F /* Path.h */,
 				A88DD4880B4629B000C02990 /* PathTraversalState.cpp */,
@@ -33665,7 +33662,6 @@
 				A81872230977D3C0005826D9 /* NamedNodeMap.h in Headers */,
 				A818721E0977D3C0005826D9 /* NameNodeList.h in Headers */,
 				726D56E3253AE3660002EF90 /* NativeImage.h in Headers */,
-				72AB9A21255A9FDE00E6EBF1 /* NativeImageReference.h in Headers */,
 				83B2D1751B8BCD6A00A02E47 /* NativeNodeFilter.h in Headers */,
 				E10B9B6C0B747599003ED890 /* NativeXPathNSResolver.h in Headers */,
 				93CCF0270AF6C52900018E89 /* NavigationAction.h in Headers */,

Modified: trunk/Source/WebCore/platform/graphics/NativeImage.cpp (270443 => 270444)


--- trunk/Source/WebCore/platform/graphics/NativeImage.cpp	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebCore/platform/graphics/NativeImage.cpp	2020-12-04 19:47:56 UTC (rev 270444)
@@ -30,28 +30,15 @@
 
 namespace WebCore {
 
-RefPtr<NativeImage> NativeImage::create(PlatformImagePtr&& platformImage)
+RefPtr<NativeImage> NativeImage::create(PlatformImagePtr&& platformImage, RenderingResourceIdentifier renderingResourceIdentifier)
 {
     if (!platformImage)
         return nullptr;
-    return adoptRef(*new NativeImage(WTFMove(platformImage)));
+    return adoptRef(*new NativeImage(WTFMove(platformImage), renderingResourceIdentifier));
 }
 
-RefPtr<NativeImage> NativeImage::create(const PlatformImagePtr& platformImage, RenderingResourceIdentifier renderingResourceIdentifier)
-{
-    if (!platformImage)
-        return nullptr;
-    return adoptRef(*new NativeImage(platformImage, renderingResourceIdentifier));
-}
-
-NativeImage::NativeImage(PlatformImagePtr&& platformImage)
+NativeImage::NativeImage(PlatformImagePtr&& platformImage, RenderingResourceIdentifier renderingResourceIdentifier)
     : m_platformImage(WTFMove(platformImage))
-    , m_renderingResourceIdentifier(RenderingResourceIdentifier::generate())
-{
-}
-
-NativeImage::NativeImage(const PlatformImagePtr& platformImage, RenderingResourceIdentifier renderingResourceIdentifier)
-    : m_platformImage(platformImage)
     , m_renderingResourceIdentifier(renderingResourceIdentifier)
 {
 }

Modified: trunk/Source/WebCore/platform/graphics/NativeImage.h (270443 => 270444)


--- trunk/Source/WebCore/platform/graphics/NativeImage.h	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebCore/platform/graphics/NativeImage.h	2020-12-04 19:47:56 UTC (rev 270444)
@@ -49,8 +49,7 @@
         Observer() = default;
     };
 
-    static WEBCORE_EXPORT RefPtr<NativeImage> create(PlatformImagePtr&&);
-    static WEBCORE_EXPORT RefPtr<NativeImage> create(const PlatformImagePtr&, RenderingResourceIdentifier);
+    static WEBCORE_EXPORT RefPtr<NativeImage> create(PlatformImagePtr&&, RenderingResourceIdentifier = RenderingResourceIdentifier::generate());
 
     WEBCORE_EXPORT ~NativeImage();
 
@@ -68,7 +67,7 @@
 
 private:
     NativeImage(PlatformImagePtr&&);
-    NativeImage(const PlatformImagePtr&, RenderingResourceIdentifier);
+    NativeImage(PlatformImagePtr&&, RenderingResourceIdentifier);
 
     PlatformImagePtr m_platformImage;
     HashSet<Observer*> m_observers;

Deleted: trunk/Source/WebCore/platform/graphics/NativeImageReference.h (270443 => 270444)


--- trunk/Source/WebCore/platform/graphics/NativeImageReference.h	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebCore/platform/graphics/NativeImageReference.h	2020-12-04 19:47:56 UTC (rev 270444)
@@ -1,37 +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.
- * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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 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 "NativeImage.h"
-
-namespace WebCore {
-
-using NativeImageReference = Ref<NativeImage>;
-
-} // namespace WebCore

Modified: trunk/Source/WebKit/ChangeLog (270443 => 270444)


--- trunk/Source/WebKit/ChangeLog	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/ChangeLog	2020-12-04 19:47:56 UTC (rev 270444)
@@ -1,3 +1,36 @@
+2020-12-04  Said Abou-Hallawa  <s...@apple.com>
+
+        [GPU Process] Share the NativeImage with GPU Process through a ShareableBitmap
+        https://bugs.webkit.org/show_bug.cgi?id=218934
+
+        Reviewed by Tim Horton.
+
+        Instead of relying on the IPC coders to transfer the NativeImage to the
+        GPUP, we are going to move this logic to RemoteResourceCacheProxy and
+        RemoteRenderingBackend. The NativeImage will be transfered as a handle of
+        ShareableBitamp and a renderingResourceIdentifier.
+
+        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
+        (WebKit::RemoteRenderingBackend::cacheNativeImage):
+        * GPUProcess/graphics/RemoteRenderingBackend.h:
+        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
+        * Shared/ShareableBitmap.h:
+        (WebKit::ShareableBitmap::createPlatformImage):
+        Add this helper function and avoid adding directive code in many places.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<Ref<NativeImage>>::encode): Deleted.
+        (IPC::ArgumentCoder<Ref<NativeImage>>::decode): Deleted.
+        * Shared/WebCoreArgumentCoders.h:
+        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
+        (WebKit::ImageBufferShareableBitmapBackend::copyNativeImage const):
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
+        (WebKit::RemoteRenderingBackendProxy::cacheNativeImage):
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
+        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
+        (WebKit::createShareableBitmapFromNativeImage):
+        (WebKit::RemoteResourceCacheProxy::cacheNativeImage):
+
 2020-12-04  Per Arne Vollan  <pvol...@apple.com>
 
         [macOS] Deny mach-lookup to the service 'com.apple.print.normalizerd' in the WebContent process

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp (270443 => 270444)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2020-12-04 19:47:56 UTC (rev 270444)
@@ -223,9 +223,12 @@
     completionHandler(IPC::ImageDataReference(WTFMove(imageData)));
 }
 
-void RemoteRenderingBackend::cacheNativeImage(Ref<NativeImage>&& image)
+void RemoteRenderingBackend::cacheNativeImage(const ShareableBitmap::Handle& handle, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    m_remoteResourceCache.cacheNativeImage(WTFMove(image));
+    if (auto bitmap = ShareableBitmap::create(handle)) {
+        if (auto image = NativeImage::create(bitmap->createPlatformImage(), renderingResourceIdentifier))
+            m_remoteResourceCache.cacheNativeImage(makeRef(*image));
+    }
 }
 
 void RemoteRenderingBackend::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h (270443 => 270444)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2020-12-04 19:47:56 UTC (rev 270444)
@@ -106,7 +106,7 @@
     void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, WebCore::RenderingResourceIdentifier);
     void wakeUpAndApplyDisplayList(WebCore::DisplayList::ItemBufferIdentifier initialIdentifier, uint64_t initialOffset, WebCore::RenderingResourceIdentifier destinationBufferIdentifier);
     void getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RenderingResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&&);
-    void cacheNativeImage(Ref<WebCore::NativeImage>&&);
+    void cacheNativeImage(const ShareableBitmap::Handle&, WebCore::RenderingResourceIdentifier);
     void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
     void didCreateSharedDisplayListHandle(WebCore::DisplayList::ItemBufferIdentifier, const SharedMemory::IPCHandle&, WebCore::RenderingResourceIdentifier destinationBufferIdentifier);
 

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


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2020-12-04 19:47:56 UTC (rev 270444)
@@ -26,7 +26,7 @@
     CreateImageBuffer(WebCore::FloatSize logicalSize, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, enum:uint8_t WebCore::PixelFormat pixelFormat, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
     WakeUpAndApplyDisplayList(WebCore::DisplayList::ItemBufferIdentifier initialIdentifier, uint64_t initialOffset, WebCore::RenderingResourceIdentifier destinationBufferIdentifier)
     GetImageData(enum:uint8_t WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) -> (IPC::ImageDataReference imageData) Synchronous
-    CacheNativeImage(WebCore::NativeImageReference nativeImage)
+    CacheNativeImage(WebKit::ShareableBitmap::Handle handle, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
     DidCreateSharedDisplayListHandle(WebCore::DisplayList::ItemBufferIdentifier identifier, WebKit::SharedMemory::IPCHandle handle, WebCore::RenderingResourceIdentifier destinationBufferIdentifier)
     ReleaseRemoteResource(WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
 }

Modified: trunk/Source/WebKit/Shared/ShareableBitmap.h (270443 => 270444)


--- trunk/Source/WebKit/Shared/ShareableBitmap.h	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/Shared/ShareableBitmap.h	2020-12-04 19:47:56 UTC (rev 270444)
@@ -27,18 +27,14 @@
 
 #include "SharedMemory.h"
 #include <WebCore/IntRect.h>
+#include <WebCore/PlatformImage.h>
 #include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
 
 #if USE(CG)
 #include "ColorSpaceData.h"
-#include <wtf/RetainPtr.h>
 #endif
 
-#if USE(CAIRO)
-#include <WebCore/RefPtrCairo.h>
-#endif
-
 #if USE(DIRECT2D)
 interface ID2D1Bitmap;
 interface ID2D1RenderTarget;
@@ -133,10 +129,14 @@
     // This creates a CGImageRef that directly references the shared bitmap data.
     // This is only safe to use when we know that the contents of the shareable bitmap won't change.
     RetainPtr<CGImageRef> makeCGImage();
+
+    WebCore::PlatformImagePtr createPlatformImage() { return makeCGImageCopy(); }
 #elif USE(CAIRO)
     // This creates a BitmapImage that directly references the shared bitmap data.
     // This is only safe to use when we know that the contents of the shareable bitmap won't change.
     RefPtr<cairo_surface_t> createCairoSurface();
+
+    WebCore::PlatformImagePtr createPlatformImage() { return createCairoSurface(); }
 #elif USE(DIRECT2D)
     COMPtr<ID2D1Bitmap> createDirect2DSurface(ID3D11Device1*, ID2D1RenderTarget*);
     IDXGISurface1* dxSurface() { return m_surface.get(); }
@@ -143,6 +143,8 @@
     void createSharedResource();
     void disposeSharedResource();
     void leakSharedResource();
+
+    WebCore::PlatformImagePtr createPlatformImage() { return nullptr; }
 #endif
 
 private:

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp (270443 => 270444)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2020-12-04 19:47:56 UTC (rev 270444)
@@ -61,7 +61,6 @@
 #include <WebCore/Length.h>
 #include <WebCore/LengthBox.h>
 #include <WebCore/MediaSelectionOption.h>
-#include <WebCore/NativeImage.h>
 #include <WebCore/Pasteboard.h>
 #include <WebCore/PluginData.h>
 #include <WebCore/PromisedAttachmentInfo.h>
@@ -1100,59 +1099,6 @@
     return true;
 }
 
-void ArgumentCoder<Ref<NativeImage>>::encode(Encoder& encoder, const Ref<NativeImage>& image)
-{
-    auto imageSize = image->size();
-    auto bitmap = ShareableBitmap::createShareable(imageSize, { });
-    auto graphicsContext = bitmap->createGraphicsContext();
-
-    encoder << !!graphicsContext;
-    if (!graphicsContext)
-        return;
-
-    graphicsContext->drawNativeImage(image, imageSize, FloatRect({ }, imageSize), FloatRect({ }, imageSize));
-
-    ShareableBitmap::Handle handle;
-    bitmap->createHandle(handle);
-
-    encoder << image->renderingResourceIdentifier();
-    encoder << handle;
-}
-
-Optional<Ref<NativeImage>> ArgumentCoder<Ref<NativeImage>>::decode(Decoder& decoder)
-{
-    Optional<bool> didCreateGraphicsContext;
-    decoder >> didCreateGraphicsContext;
-    if (!didCreateGraphicsContext.hasValue() || !didCreateGraphicsContext.value())
-        return WTF::nullopt;
-
-    RenderingResourceIdentifier renderingResourceIdentifier;
-    if (!decoder.decode(renderingResourceIdentifier))
-        return WTF::nullopt;
-    
-    ShareableBitmap::Handle handle;
-    if (!decoder.decode(handle))
-        return WTF::nullopt;
-
-    auto bitmap = ShareableBitmap::create(handle);
-    if (!bitmap)
-        return WTF::nullopt;
-
-    auto image = bitmap->createImage();
-    if (!image)
-        return WTF::nullopt;
-
-    auto nativeImage = image->nativeImage();
-    if (!nativeImage)
-        return WTF::nullopt;
-
-    nativeImage = NativeImage::create(nativeImage->platformImage(), renderingResourceIdentifier);
-    if (!nativeImage)
-        return WTF::nullopt;
-
-    return makeRef(*nativeImage);
-}
-
 void ArgumentCoder<Ref<Font>>::encode(Encoder& encoder, const Ref<WebCore::Font>& font)
 {
     encoder << font->origin();

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h (270443 => 270444)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2020-12-04 19:47:56 UTC (rev 270444)
@@ -419,11 +419,6 @@
     static WARN_UNUSED_RETURN bool decode(Decoder&, WebCore::ImageHandle&);
 };
 
-template<> struct ArgumentCoder<Ref<WebCore::NativeImage>> {
-    static void encode(Encoder&, const Ref<WebCore::NativeImage>&);
-    static Optional<Ref<WebCore::NativeImage>> decode(Decoder&);
-};
-
 template<> struct ArgumentCoder<WebCore::ResourceRequest> {
     static void encode(Encoder&, const WebCore::ResourceRequest&);
     static WARN_UNUSED_RETURN bool decode(Decoder&, WebCore::ResourceRequest&);

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp (270443 => 270444)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp	2020-12-04 19:47:56 UTC (rev 270444)
@@ -100,13 +100,7 @@
 
 RefPtr<NativeImage> ImageBufferShareableBitmapBackend::copyNativeImage(BackingStoreCopy) const
 {
-#if USE(CG)
-    return NativeImage::create(m_bitmap->makeCGImageCopy());
-#elif USE(DIRECT2D)
-    return nullptr;
-#elif USE(CAIRO)
-    return NativeImage::create(m_bitmap->createCairoSurface());
-#endif
+    return NativeImage::create(m_bitmap->createPlatformImage());
 }
 
 RefPtr<Image> ImageBufferShareableBitmapBackend::copyImage(BackingStoreCopy, PreserveResolution) const

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


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2020-12-04 19:47:56 UTC (rev 270444)
@@ -182,9 +182,9 @@
     }
 }
 
-void RemoteRenderingBackendProxy::cacheNativeImage(NativeImage& image)
+void RemoteRenderingBackendProxy::cacheNativeImage(const ShareableBitmap::Handle& handle, RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    send(Messages::RemoteRenderingBackend::CacheNativeImage(makeRef(image)), m_renderingBackendIdentifier);
+    send(Messages::RemoteRenderingBackend::CacheNativeImage(handle, renderingResourceIdentifier), m_renderingBackendIdentifier);
 }
 
 void RemoteRenderingBackendProxy::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)

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


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2020-12-04 19:47:56 UTC (rev 270444)
@@ -78,7 +78,7 @@
     RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect, WebCore::RenderingResourceIdentifier);
     void submitDisplayList(const WebCore::DisplayList::DisplayList&, WebCore::RenderingResourceIdentifier destinationBufferIdentifier);
     WebCore::DisplayList::FlushIdentifier flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList&, WebCore::RenderingResourceIdentifier);
-    void cacheNativeImage(WebCore::NativeImage&);
+    void cacheNativeImage(const ShareableBitmap::Handle&, WebCore::RenderingResourceIdentifier);
     void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
 
     bool waitForImageBufferBackendWasCreated();

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp (270443 => 270444)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2020-12-04 19:44:52 UTC (rev 270443)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2020-12-04 19:47:56 UTC (rev 270444)
@@ -61,17 +61,44 @@
     ASSERT_UNUSED(found, found);
 }
 
+inline static RefPtr<ShareableBitmap> createShareableBitmapFromNativeImage(NativeImage& image)
+{
+    auto imageSize = image.size();
+
+    auto bitmap = ShareableBitmap::createShareable(image.size(), { });
+    if (!bitmap)
+        return nullptr;
+
+    auto context = bitmap->createGraphicsContext();
+    if (!context)
+        return nullptr;
+
+    context->drawNativeImage(image, imageSize, FloatRect({ }, imageSize), FloatRect({ }, imageSize));
+    return bitmap;
+}
+
 void RemoteResourceCacheProxy::cacheNativeImage(NativeImage& image)
 {
-    m_nativeImages.ensure(image.renderingResourceIdentifier(), [&]() {
-        // Set itself as an observer to NativeImage, so releaseNativeImage()
-        // gets called when NativeImage is being deleleted.
-        image.addObserver(*this);
+    if (m_nativeImages.contains(image.renderingResourceIdentifier()))
+        return;
 
-        // Tell the GPU process to cache this resource.
-        m_remoteRenderingBackendProxy.cacheNativeImage(image);
-        return makeWeakPtr(image);
-    });
+    auto bitmap = createShareableBitmapFromNativeImage(image);
+    if (!bitmap)
+        return;
+
+    ShareableBitmap::Handle handle;
+    bitmap->createHandle(handle);
+    if (handle.isNull())
+        return;
+
+    m_nativeImages.add(image.renderingResourceIdentifier(), makeWeakPtr(image));
+
+    // Set itself as an observer to NativeImage, so releaseNativeImage()
+    // gets called when NativeImage is being deleleted.
+    image.addObserver(*this);
+
+    // Tell the GPU process to cache this resource.
+    m_remoteRenderingBackendProxy.cacheNativeImage(handle, image.renderingResourceIdentifier());
 }
 
 void RemoteResourceCacheProxy::releaseNativeImage(RenderingResourceIdentifier renderingResourceIdentifier)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to