From e4cb3bdcaddcf79ba58dab47b0245b781c7db975 Mon Sep 17 00:00:00 2001 From: Said Abou-Hallawa Date: Fri, 12 May 2023 00:01:47 -0700 Subject: [PATCH] [GPU Process][Filters] Make RemoteResourceCache be capable of caching Filter https://bugs.webkit.org/show_bug.cgi?id=256324 rdar://109069946 Reviewed by Simon Fraser. This will allow sending the SVGFilter once to the GPU Process and referencing it later by its RenderingResourceIdentifier in the StreamConnection message. * Source/WebCore/platform/graphics/RenderingResource.h: (WebCore::RenderingResource::isFilter const): * Source/WebCore/platform/graphics/displaylists/DisplayList.h: (WebCore::DisplayList::DisplayList::cacheFilter): * Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h: * Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp: (WebCore::DisplayList::RecorderImpl::recordResourceUse): * Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h: * Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h: (WebCore::DisplayList::LocalResourceHeap::add): * Source/WebCore/platform/graphics/filters/Filter.h: (isType): * Source/WebCore/platform/graphics/filters/FilterFunction.h: (WebCore::FilterFunction::isFilter const): Deleted. * Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h: (WebKit::QualifiedResourceHeap::add): (WebKit::QualifiedResourceHeap::getFilter const): * Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp: (WebKit::RemoteRenderingBackend::cacheFilter): (WebKit::RemoteRenderingBackend::cacheFilterWithQualifiedIdentifier): * Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h: * Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in: * Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp: (WebKit::RemoteResourceCache::cacheFilter): (WebKit::RemoteResourceCache::cachedFilter const): * Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h: * Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp: (WebKit::RemoteDisplayListRecorderProxy::recordResourceUse): * Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h: * Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp: (WebKit::RemoteRenderingBackendProxy::cacheFilter): * Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h: * Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp: (WebKit::RemoteResourceCacheProxy::recordFilterUse): * Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h: Canonical link: https://commits.webkit.org/264001@main --- .../WebCore/platform/graphics/RenderingResource.h | 1 + .../platform/graphics/displaylists/DisplayList.h | 6 ++++++ .../graphics/displaylists/DisplayListRecorder.h | 1 + .../displaylists/DisplayListRecorderImpl.cpp | 6 ++++++ .../graphics/displaylists/DisplayListRecorderImpl.h | 1 + .../graphics/displaylists/DisplayListResourceHeap.h | 13 +++++++++++++ Source/WebCore/platform/graphics/filters/Filter.h | 2 +- .../platform/graphics/filters/FilterFunction.h | 2 +- .../GPUProcess/graphics/QualifiedResourceHeap.h | 12 ++++++++++++ .../GPUProcess/graphics/RemoteRenderingBackend.cpp | 11 +++++++++++ .../GPUProcess/graphics/RemoteRenderingBackend.h | 2 ++ .../graphics/RemoteRenderingBackend.messages.in | 1 + .../GPUProcess/graphics/RemoteResourceCache.cpp | 10 ++++++++++ .../GPUProcess/graphics/RemoteResourceCache.h | 2 ++ .../GPU/graphics/RemoteDisplayListRecorderProxy.cpp | 11 +++++++++++ .../GPU/graphics/RemoteDisplayListRecorderProxy.h | 1 + .../GPU/graphics/RemoteRenderingBackendProxy.cpp | 6 ++++++ .../GPU/graphics/RemoteRenderingBackendProxy.h | 1 + .../GPU/graphics/RemoteResourceCacheProxy.cpp | 8 ++++++++ .../GPU/graphics/RemoteResourceCacheProxy.h | 2 ++ 20 files changed, 97 insertions(+), 2 deletions(-) diff --git a/Source/WebCore/platform/graphics/RenderingResource.h b/Source/WebCore/platform/graphics/RenderingResource.h index 20f52edfda280..09d386e4fbd61 100644 --- a/Source/WebCore/platform/graphics/RenderingResource.h +++ b/Source/WebCore/platform/graphics/RenderingResource.h @@ -53,6 +53,7 @@ class RenderingResource virtual bool isNativeImage() const { return false; } virtual bool isGradient() const { return false; } virtual bool isDecomposedGlyphs() const { return false; } + virtual bool isFilter() const { return false; } bool hasValidRenderingResourceIdentifier() const { diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayList.h b/Source/WebCore/platform/graphics/displaylists/DisplayList.h index 993bf4562e3c8..754e6e96d7702 100644 --- a/Source/WebCore/platform/graphics/displaylists/DisplayList.h +++ b/Source/WebCore/platform/graphics/displaylists/DisplayList.h @@ -29,6 +29,7 @@ #include "DisplayListItemBuffer.h" #include "DisplayListItemType.h" #include "DisplayListResourceHeap.h" +#include "Filter.h" #include "FloatRect.h" #include "Font.h" #include "GraphicsContext.h" @@ -120,6 +121,11 @@ class DisplayList { m_resourceHeap.add(gradient.renderingResourceIdentifier(), Ref { gradient }); } + void cacheFilter(Filter& filter) + { + m_resourceHeap.add(filter.renderingResourceIdentifier(), Ref { filter }); + } + static bool shouldDumpForFlags(OptionSet, ItemHandle); LocalResourceHeap m_resourceHeap; diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h index 80be59874a5c8..924dc77cd73c3 100644 --- a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h +++ b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h @@ -152,6 +152,7 @@ class Recorder : public GraphicsContext { virtual bool recordResourceUse(Font&) = 0; virtual bool recordResourceUse(DecomposedGlyphs&) = 0; virtual bool recordResourceUse(Gradient&) = 0; + virtual bool recordResourceUse(Filter&) = 0; struct ContextState { GraphicsContextState state; diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp index d8fa5a73bf02e..2ad112d870dd9 100644 --- a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp +++ b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp @@ -444,5 +444,11 @@ bool RecorderImpl::recordResourceUse(Gradient& gradient) return true; } +bool RecorderImpl::recordResourceUse(Filter& filter) +{ + m_displayList.cacheFilter(filter); + return true; +} + } // namespace DisplayList } // namespace WebCore diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h index 60f87e7bb993e..1b66ecbc145e8 100644 --- a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h +++ b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h @@ -125,6 +125,7 @@ class RecorderImpl : public Recorder { bool recordResourceUse(Font&) final; bool recordResourceUse(DecomposedGlyphs&) final; bool recordResourceUse(Gradient&) final; + bool recordResourceUse(Filter&) final; template void append(Args&&... args) diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h b/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h index 16a5b6c151948..dd9cd3e6faab6 100644 --- a/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h +++ b/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h @@ -26,6 +26,7 @@ #pragma once #include "DecomposedGlyphs.h" +#include "Filter.h" #include "Font.h" #include "Gradient.h" #include "ImageBuffer.h" @@ -47,6 +48,7 @@ class ResourceHeap { virtual std::optional getSourceImage(RenderingResourceIdentifier) const = 0; virtual DecomposedGlyphs* getDecomposedGlyphs(RenderingResourceIdentifier) const = 0; virtual Gradient* getGradient(RenderingResourceIdentifier) const = 0; + virtual Filter* getFilter(RenderingResourceIdentifier) const = 0; virtual Font* getFont(RenderingResourceIdentifier) const = 0; }; @@ -72,6 +74,11 @@ class LocalResourceHeap : public ResourceHeap { add(renderingResourceIdentifier, WTFMove(gradient)); } + void add(RenderingResourceIdentifier renderingResourceIdentifier, Ref&& filter) + { + add(renderingResourceIdentifier, WTFMove(filter)); + } + void add(RenderingResourceIdentifier renderingResourceIdentifier, Ref&& font) { add(renderingResourceIdentifier, WTFMove(font)); @@ -114,6 +121,12 @@ class LocalResourceHeap : public ResourceHeap { return dynamicDowncast(renderingResource); } + Filter* getFilter(RenderingResourceIdentifier renderingResourceIdentifier) const final + { + auto* renderingResource = get(renderingResourceIdentifier); + return dynamicDowncast(renderingResource); + } + Font* getFont(RenderingResourceIdentifier renderingResourceIdentifier) const final { return get(renderingResourceIdentifier); diff --git a/Source/WebCore/platform/graphics/filters/Filter.h b/Source/WebCore/platform/graphics/filters/Filter.h index a1f0a32be5222..34df8ba64c27d 100644 --- a/Source/WebCore/platform/graphics/filters/Filter.h +++ b/Source/WebCore/platform/graphics/filters/Filter.h @@ -84,5 +84,5 @@ class Filter : public FilterFunction { } // namespace WebCore SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::Filter) - static bool isType(const WebCore::FilterFunction& function) { return function.isFilter(); } + static bool isType(const WebCore::RenderingResource& renderingResource) { return renderingResource.isFilter(); } SPECIALIZE_TYPE_TRAITS_END() diff --git a/Source/WebCore/platform/graphics/filters/FilterFunction.h b/Source/WebCore/platform/graphics/filters/FilterFunction.h index 6cb25144fd82f..b02ca9fbdd8a9 100644 --- a/Source/WebCore/platform/graphics/filters/FilterFunction.h +++ b/Source/WebCore/platform/graphics/filters/FilterFunction.h @@ -87,7 +87,7 @@ class FilterFunction : public RenderingResource { bool isCSSFilter() const { return m_filterType == Type::CSSFilter; } bool isSVGFilter() const { return m_filterType == Type::SVGFilter; } - bool isFilter() const { return m_filterType == Type::CSSFilter || m_filterType == Type::SVGFilter; } + bool isFilter() const override { return m_filterType == Type::CSSFilter || m_filterType == Type::SVGFilter; } bool isFilterEffect() const { return m_filterType >= Type::FEFirst && m_filterType <= Type::FELast; } static AtomString filterName(Type); diff --git a/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h b/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h index ba95e4897d66e..266c2a675f2da 100644 --- a/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h +++ b/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h @@ -29,6 +29,7 @@ #include "QualifiedRenderingResourceIdentifier.h" #include +#include #include #include #include @@ -67,6 +68,11 @@ class QualifiedResourceHeap { add(renderingResourceIdentifier, WTFMove(gradient), m_renderingResourceCount); } + void add(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, Ref&& filter) + { + add(renderingResourceIdentifier, WTFMove(filter), m_renderingResourceCount); + } + void add(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, Ref&& font) { add(renderingResourceIdentifier, WTFMove(font), m_fontCount); @@ -119,6 +125,12 @@ class QualifiedResourceHeap { return dynamicDowncast(renderingResource); } + WebCore::Filter* getFilter(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const + { + auto* renderingResource = get(renderingResourceIdentifier); + return dynamicDowncast(renderingResource); + } + WebCore::FontCustomPlatformData* getFontCustomPlatformData(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const { return get(renderingResourceIdentifier); diff --git a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp index 10c439a9811a3..59a6723ba1a2e 100644 --- a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp +++ b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp @@ -420,6 +420,17 @@ void RemoteRenderingBackend::cacheGradientWithQualifiedIdentifier(Ref& m_remoteResourceCache.cacheGradient(WTFMove(gradient), gradientResourceIdentifier); } +void RemoteRenderingBackend::cacheFilter(Ref&& filter, RenderingResourceIdentifier renderingResourceIdentifier) +{ + cacheFilterWithQualifiedIdentifier(WTFMove(filter), { renderingResourceIdentifier, m_gpuConnectionToWebProcess->webProcessIdentifier() }); +} + +void RemoteRenderingBackend::cacheFilterWithQualifiedIdentifier(Ref&& filter, QualifiedRenderingResourceIdentifier filterResourceIdentifier) +{ + ASSERT(!RunLoop::isMain()); + m_remoteResourceCache.cacheFilter(WTFMove(filter), filterResourceIdentifier); +} + void RemoteRenderingBackend::releaseAllResources() { ASSERT(!RunLoop::isMain()); diff --git a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h index 2e6e522f5e5fc..345a3f6ad1734 100644 --- a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h +++ b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h @@ -137,6 +137,7 @@ class RemoteRenderingBackend : private IPC::MessageSender, public IPC::StreamMes void cacheNativeImage(ShareableBitmap::Handle&&, WebCore::RenderingResourceIdentifier); void cacheDecomposedGlyphs(Ref&&); void cacheGradient(Ref&&, WebCore::RenderingResourceIdentifier); + void cacheFilter(Ref&&, WebCore::RenderingResourceIdentifier); void cacheFont(const WebCore::Font::Attributes&, WebCore::FontPlatformData::Attributes, std::optional); void cacheFontCustomPlatformData(Ref&&); void releaseAllResources(); @@ -154,6 +155,7 @@ class RemoteRenderingBackend : private IPC::MessageSender, public IPC::StreamMes void cacheNativeImageWithQualifiedIdentifier(ShareableBitmap::Handle&&, QualifiedRenderingResourceIdentifier); void cacheDecomposedGlyphsWithQualifiedIdentifier(Ref&&, QualifiedRenderingResourceIdentifier); void cacheGradientWithQualifiedIdentifier(Ref&&, QualifiedRenderingResourceIdentifier); + void cacheFilterWithQualifiedIdentifier(Ref&&, QualifiedRenderingResourceIdentifier); void releaseRenderingResourceWithQualifiedIdentifier(QualifiedRenderingResourceIdentifier); void cacheFontWithQualifiedIdentifier(Ref&&, QualifiedRenderingResourceIdentifier); void cacheFontCustomPlatformDataWithQualifiedIdentifier(Ref&&, QualifiedRenderingResourceIdentifier); diff --git a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in index dd99c245acdca..790f563945100 100644 --- a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in +++ b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in @@ -35,6 +35,7 @@ messages -> RemoteRenderingBackend NotRefCounted Stream { CacheFontCustomPlatformData(Ref customPlatformData) NotStreamEncodable CacheDecomposedGlyphs(Ref decomposedGlyphs) NotStreamEncodable CacheGradient(Ref gradient, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) NotStreamEncodable + CacheFilter(Ref filter, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) NotStreamEncodable ReleaseAllResources() ReleaseAllImageResources() ReleaseRenderingResource(WebCore::RenderingResourceIdentifier renderingResourceIdentifier) diff --git a/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp b/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp index 945de71b83256..8ef5e9e67169a 100644 --- a/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp +++ b/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp @@ -75,6 +75,11 @@ void RemoteResourceCache::cacheGradient(Ref&& gradient, QualifiedRende m_resourceHeap.add(renderingResourceIdentifier, WTFMove(gradient)); } +void RemoteResourceCache::cacheFilter(Ref&& filter, QualifiedRenderingResourceIdentifier renderingResourceIdentifier) +{ + m_resourceHeap.add(renderingResourceIdentifier, WTFMove(filter)); +} + NativeImage* RemoteResourceCache::cachedNativeImage(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const { return m_resourceHeap.getNativeImage(renderingResourceIdentifier); @@ -117,6 +122,11 @@ Gradient* RemoteResourceCache::cachedGradient(QualifiedRenderingResourceIdentifi return m_resourceHeap.getGradient(renderingResourceIdentifier); } +Filter* RemoteResourceCache::cachedFilter(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const +{ + return m_resourceHeap.getFilter(renderingResourceIdentifier); +} + void RemoteResourceCache::releaseAllResources() { m_resourceHeap.releaseAllResources(); diff --git a/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h b/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h index de92b73d36e2e..0677bac616719 100644 --- a/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h +++ b/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h @@ -45,6 +45,7 @@ class RemoteResourceCache { void cacheFont(Ref&&, QualifiedRenderingResourceIdentifier); void cacheDecomposedGlyphs(Ref&&, QualifiedRenderingResourceIdentifier); void cacheGradient(Ref&&, QualifiedRenderingResourceIdentifier); + void cacheFilter(Ref&&, QualifiedRenderingResourceIdentifier); void cacheFontCustomPlatformData(Ref&&, QualifiedRenderingResourceIdentifier); RemoteImageBuffer* cachedImageBuffer(QualifiedRenderingResourceIdentifier) const; @@ -53,6 +54,7 @@ class RemoteResourceCache { WebCore::Font* cachedFont(QualifiedRenderingResourceIdentifier) const; WebCore::DecomposedGlyphs* cachedDecomposedGlyphs(QualifiedRenderingResourceIdentifier) const; WebCore::Gradient* cachedGradient(QualifiedRenderingResourceIdentifier) const; + WebCore::Filter* cachedFilter(QualifiedRenderingResourceIdentifier) const; WebCore::FontCustomPlatformData* cachedFontCustomPlatformData(QualifiedRenderingResourceIdentifier) const; std::optional cachedSourceImage(QualifiedRenderingResourceIdentifier) const; diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp b/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp index 72692012d0ac4..22b007cf93cc0 100644 --- a/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp +++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp @@ -515,6 +515,17 @@ bool RemoteDisplayListRecorderProxy::recordResourceUse(Gradient& gradient) return true; } +bool RemoteDisplayListRecorderProxy::recordResourceUse(Filter& filter) +{ + if (UNLIKELY(!m_renderingBackend)) { + ASSERT_NOT_REACHED(); + return false; + } + + m_renderingBackend->remoteResourceCacheProxy().recordFilterUse(filter); + return true; +} + void RemoteDisplayListRecorderProxy::flushContext(const IPC::Semaphore& semaphore) { send(Messages::RemoteDisplayListRecorder::FlushContext(semaphore)); diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h b/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h index ef641f3383a51..09d09afe7992d 100644 --- a/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h +++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h @@ -144,6 +144,7 @@ class RemoteDisplayListRecorderProxy : public WebCore::DisplayList::Recorder { bool recordResourceUse(WebCore::Font&) final; bool recordResourceUse(WebCore::DecomposedGlyphs&) final; bool recordResourceUse(WebCore::Gradient&) final; + bool recordResourceUse(WebCore::Filter&) final; RefPtr createImageBuffer(const WebCore::FloatSize&, float resolutionScale, const WebCore::DestinationColorSpace&, std::optional, std::optional) const final; RefPtr createAlignedImageBuffer(const WebCore::FloatSize&, const WebCore::DestinationColorSpace&, std::optional) const final; diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp index cebd59d95524c..2ae4404832a8c 100644 --- a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp +++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp @@ -268,6 +268,12 @@ void RemoteRenderingBackendProxy::cacheGradient(Ref&& gradient) send(Messages::RemoteRenderingBackend::CacheGradient(WTFMove(gradient), renderingResourceIdentifier)); } +void RemoteRenderingBackendProxy::cacheFilter(Ref&& filter) +{ + auto renderingResourceIdentifier = filter->renderingResourceIdentifier(); + send(Messages::RemoteRenderingBackend::CacheFilter(WTFMove(filter), renderingResourceIdentifier)); +} + void RemoteRenderingBackendProxy::releaseAllRemoteResources() { if (!m_streamConnection) diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h index 95c6e6dbe3e5d..d06c6fe80f6b4 100644 --- a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h +++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h @@ -102,6 +102,7 @@ class RemoteRenderingBackendProxy void cacheFontCustomPlatformData(Ref&&); void cacheDecomposedGlyphs(Ref&&); void cacheGradient(Ref&&); + void cacheFilter(Ref&&); void releaseAllRemoteResources(); void releaseAllImageResources(); void releaseRenderingResource(WebCore::RenderingResourceIdentifier); diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp b/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp index 13e6378f05319..f364b6222d0c0 100644 --- a/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp +++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp @@ -149,6 +149,14 @@ void RemoteResourceCacheProxy::recordGradientUse(Gradient& gradient) } } +void RemoteResourceCacheProxy::recordFilterUse(Filter& filter) +{ + if (m_renderingResources.add(filter.renderingResourceIdentifier(), filter).isNewEntry) { + filter.addObserver(*this); + m_remoteRenderingBackendProxy.cacheFilter(filter); + } +} + void RemoteResourceCacheProxy::recordNativeImageUse(NativeImage& image) { WebProcess::singleton().deferNonVisibleProcessEarlyMemoryCleanupTimer(); diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h b/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h index dfe65362b0fce..329318984b5fb 100644 --- a/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h +++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h @@ -33,6 +33,7 @@ namespace WebCore { class DecomposedGlyphs; +class Filter; class Font; class Gradient; class ImageBuffer; @@ -62,6 +63,7 @@ class RemoteResourceCacheProxy : public WebCore::RenderingResource::Observer { void recordImageBufferUse(WebCore::ImageBuffer&); void recordDecomposedGlyphsUse(WebCore::DecomposedGlyphs&); void recordGradientUse(WebCore::Gradient&); + void recordFilterUse(WebCore::Filter&); void recordFontCustomPlatformDataUse(const WebCore::FontCustomPlatformData&); void didPaintLayers();