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)