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)