haikuwebkit/Source/WebCore/rendering/RenderLayerFilters.cpp

202 lines
7.5 KiB
C++
Raw Permalink Normal View History

Simplify RenderLayer filter code https://bugs.webkit.org/show_bug.cgi?id=189248 Reviewed by Dean Jackson. Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo, and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing these together into RenderLayerFilters. RenderLayerFilters stores a reference to the CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content to be filtered. It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather than using a side hash (we can recoup the space in other ways layer). * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * css/CSSFilterImageValue.cpp: * rendering/CSSFilter.h: * rendering/FilterEffectRenderer.cpp: Removed. * rendering/FilterEffectRenderer.h: Removed. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::RenderLayer): (WebCore::RenderLayer::~RenderLayer): (WebCore::RenderLayer::paintsWithFilters const): (WebCore::RenderLayer::requiresFullLayerImageForFilters const): (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): (WebCore::RenderLayer::filtersForPainting const): (WebCore::RenderLayer::setupFilters): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::calculateClipRects const): (WebCore::RenderLayer::filter const): Deleted. (WebCore::RenderLayer::filterPainter const): Deleted. (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted. * rendering/RenderLayer.h: * rendering/RenderLayerFilterInfo.cpp: Removed. * rendering/RenderLayerFilters.cpp: Added. (WebCore::RenderLayerFilters::RenderLayerFilters): (WebCore::RenderLayerFilters::~RenderLayerFilters): (WebCore::RenderLayerFilters::setFilter): (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const): (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const): (WebCore::RenderLayerFilters::notifyFinished): (WebCore::RenderLayerFilters::updateReferenceFilterClients): (WebCore::RenderLayerFilters::removeReferenceFilterClients): (WebCore::RenderLayerFilters::buildFilter): (WebCore::RenderLayerFilters::beginFilterEffect): (WebCore::RenderLayerFilters::applyFilterEffect): * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h. Canonical link: https://commits.webkit.org/204269@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235630 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 20:27:09 +00:00
/*
* Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
* Copyright (C) 2013 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 THE COPYRIGHT HOLDER "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 THE COPYRIGHT HOLDER 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 "RenderLayerFilters.h"
WebCore should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF https://bugs.webkit.org/show_bug.cgi?id=196762 Reviewed by Ryosuke Niwa. * Modules/indexeddb/IDBCursor.h: * Modules/indexeddb/client/IDBConnectionToServer.cpp: * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h: * Modules/websockets/WebSocketFrame.cpp: * accessibility/AccessibilityARIAGridRow.cpp: (WebCore::AccessibilityARIAGridRow::parentTable const): * accessibility/AccessibilityObject.cpp: * accessibility/AccessibilityRenderObject.cpp: * animation/CSSAnimation.cpp: * animation/DeclarativeAnimation.cpp: * bindings/js/DOMGCOutputConstraint.h: * bindings/js/JSCanvasRenderingContext2DCustom.cpp: (WebCore::root): (WebCore::JSCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots): (WebCore::JSCanvasRenderingContext2D::visitAdditionalChildren): * bindings/js/JSDOMConvertNumbers.cpp: * bindings/js/JSDOMWindowCustom.cpp: * bindings/js/JSExtendableMessageEventCustom.cpp: * bindings/js/SerializedScriptValue.cpp: * css/CSSFontFaceSource.cpp: * css/CSSFontFaceSource.h: * css/MediaQueryMatcher.h: * css/parser/CSSPropertyParserHelpers.cpp: * dom/DocumentParser.cpp: * dom/EventPath.cpp: * dom/MouseEvent.h: * dom/SpectreGadget.cpp: * dom/SpectreGadget.h: * editing/ChangeListTypeCommand.cpp: * editing/EditAction.cpp: * editing/ReplaceSelectionCommand.cpp: * editing/TextGranularity.h: * html/HTMLFormControlsCollection.cpp: * html/HTMLImageElement.cpp: * html/canvas/CanvasRenderingContext2DBase.cpp: * inspector/InspectorController.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/WebHeapAgent.cpp: * inspector/agents/page/PageAuditAgent.cpp: * inspector/agents/page/PageConsoleAgent.cpp: * inspector/agents/page/PageNetworkAgent.cpp: * inspector/agents/worker/WorkerAuditAgent.cpp: * loader/CrossOriginAccessControl.h: * loader/CrossOriginPreflightResultCache.h: * loader/NavigationAction.cpp: * loader/ResourceLoadObserver.cpp: * page/FrameTree.cpp: * page/IntersectionObserver.cpp: * page/PageConfiguration.cpp: * page/PerformanceResourceTiming.cpp: * page/ResizeObservation.cpp: * page/UndoManager.cpp: * plugins/PluginData.cpp: * rendering/Grid.h: * rendering/GridBaselineAlignment.cpp: * rendering/GridBaselineAlignment.h: * rendering/GridLayoutFunctions.cpp: * rendering/GridLayoutFunctions.h: * rendering/GridTrackSizingAlgorithm.h: * rendering/RenderDeprecatedFlexibleBox.cpp: * rendering/RenderFlexibleBox.cpp: * rendering/RenderIFrame.cpp: * rendering/RenderLayerFilters.cpp: * rendering/TextDecorationPainter.cpp: * rendering/TextDecorationPainter.h: * rendering/TextPainter.cpp: * rendering/TextPainter.h: * rendering/style/StyleRareNonInheritedData.cpp: * rendering/style/StyleRareNonInheritedData.h: * rendering/svg/SVGRenderSupport.h: * rendering/updating/RenderTreeBuilder.cpp: * rendering/updating/RenderTreeBuilderSVG.cpp: * style/InlineTextBoxStyle.cpp: * style/InlineTextBoxStyle.h: * style/StylePendingResources.cpp: * svg/SVGMatrix.h: * svg/SVGViewSpec.h: * svg/SVGZoomAndPan.h: * workers/WorkerScriptLoader.cpp: * workers/WorkerScriptLoader.h: * workers/service/ServiceWorker.cpp: * workers/service/ServiceWorkerClientData.cpp: * workers/service/ServiceWorkerClients.cpp: * workers/service/ServiceWorkerClients.h: * workers/service/ServiceWorkerGlobalScope.cpp: * workers/service/ServiceWorkerJob.cpp: * workers/service/ServiceWorkerProvider.cpp: * workers/service/context/ServiceWorkerFetch.cpp: * workers/service/context/ServiceWorkerInspectorProxy.h: * workers/service/context/ServiceWorkerThread.cpp: * workers/service/context/ServiceWorkerThreadProxy.cpp: * workers/service/server/SWServerJobQueue.cpp: * workers/service/server/SWServerToContextConnection.cpp: * workers/service/server/SWServerWorker.cpp: * workers/service/server/SWServerWorker.h: * worklets/Worklet.h: Canonical link: https://commits.webkit.org/211049@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@244115 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-04-10 16:53:41 +00:00
#include "CSSFilter.h"
Simplify RenderLayer filter code https://bugs.webkit.org/show_bug.cgi?id=189248 Reviewed by Dean Jackson. Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo, and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing these together into RenderLayerFilters. RenderLayerFilters stores a reference to the CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content to be filtered. It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather than using a side hash (we can recoup the space in other ways layer). * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * css/CSSFilterImageValue.cpp: * rendering/CSSFilter.h: * rendering/FilterEffectRenderer.cpp: Removed. * rendering/FilterEffectRenderer.h: Removed. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::RenderLayer): (WebCore::RenderLayer::~RenderLayer): (WebCore::RenderLayer::paintsWithFilters const): (WebCore::RenderLayer::requiresFullLayerImageForFilters const): (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): (WebCore::RenderLayer::filtersForPainting const): (WebCore::RenderLayer::setupFilters): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::calculateClipRects const): (WebCore::RenderLayer::filter const): Deleted. (WebCore::RenderLayer::filterPainter const): Deleted. (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted. * rendering/RenderLayer.h: * rendering/RenderLayerFilterInfo.cpp: Removed. * rendering/RenderLayerFilters.cpp: Added. (WebCore::RenderLayerFilters::RenderLayerFilters): (WebCore::RenderLayerFilters::~RenderLayerFilters): (WebCore::RenderLayerFilters::setFilter): (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const): (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const): (WebCore::RenderLayerFilters::notifyFinished): (WebCore::RenderLayerFilters::updateReferenceFilterClients): (WebCore::RenderLayerFilters::removeReferenceFilterClients): (WebCore::RenderLayerFilters::buildFilter): (WebCore::RenderLayerFilters::beginFilterEffect): (WebCore::RenderLayerFilters::applyFilterEffect): * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h. Canonical link: https://commits.webkit.org/204269@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235630 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 20:27:09 +00:00
#include "CachedSVGDocument.h"
#include "CachedSVGDocumentReference.h"
WebCore should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF https://bugs.webkit.org/show_bug.cgi?id=196762 Reviewed by Ryosuke Niwa. * Modules/indexeddb/IDBCursor.h: * Modules/indexeddb/client/IDBConnectionToServer.cpp: * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h: * Modules/websockets/WebSocketFrame.cpp: * accessibility/AccessibilityARIAGridRow.cpp: (WebCore::AccessibilityARIAGridRow::parentTable const): * accessibility/AccessibilityObject.cpp: * accessibility/AccessibilityRenderObject.cpp: * animation/CSSAnimation.cpp: * animation/DeclarativeAnimation.cpp: * bindings/js/DOMGCOutputConstraint.h: * bindings/js/JSCanvasRenderingContext2DCustom.cpp: (WebCore::root): (WebCore::JSCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots): (WebCore::JSCanvasRenderingContext2D::visitAdditionalChildren): * bindings/js/JSDOMConvertNumbers.cpp: * bindings/js/JSDOMWindowCustom.cpp: * bindings/js/JSExtendableMessageEventCustom.cpp: * bindings/js/SerializedScriptValue.cpp: * css/CSSFontFaceSource.cpp: * css/CSSFontFaceSource.h: * css/MediaQueryMatcher.h: * css/parser/CSSPropertyParserHelpers.cpp: * dom/DocumentParser.cpp: * dom/EventPath.cpp: * dom/MouseEvent.h: * dom/SpectreGadget.cpp: * dom/SpectreGadget.h: * editing/ChangeListTypeCommand.cpp: * editing/EditAction.cpp: * editing/ReplaceSelectionCommand.cpp: * editing/TextGranularity.h: * html/HTMLFormControlsCollection.cpp: * html/HTMLImageElement.cpp: * html/canvas/CanvasRenderingContext2DBase.cpp: * inspector/InspectorController.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/WebHeapAgent.cpp: * inspector/agents/page/PageAuditAgent.cpp: * inspector/agents/page/PageConsoleAgent.cpp: * inspector/agents/page/PageNetworkAgent.cpp: * inspector/agents/worker/WorkerAuditAgent.cpp: * loader/CrossOriginAccessControl.h: * loader/CrossOriginPreflightResultCache.h: * loader/NavigationAction.cpp: * loader/ResourceLoadObserver.cpp: * page/FrameTree.cpp: * page/IntersectionObserver.cpp: * page/PageConfiguration.cpp: * page/PerformanceResourceTiming.cpp: * page/ResizeObservation.cpp: * page/UndoManager.cpp: * plugins/PluginData.cpp: * rendering/Grid.h: * rendering/GridBaselineAlignment.cpp: * rendering/GridBaselineAlignment.h: * rendering/GridLayoutFunctions.cpp: * rendering/GridLayoutFunctions.h: * rendering/GridTrackSizingAlgorithm.h: * rendering/RenderDeprecatedFlexibleBox.cpp: * rendering/RenderFlexibleBox.cpp: * rendering/RenderIFrame.cpp: * rendering/RenderLayerFilters.cpp: * rendering/TextDecorationPainter.cpp: * rendering/TextDecorationPainter.h: * rendering/TextPainter.cpp: * rendering/TextPainter.h: * rendering/style/StyleRareNonInheritedData.cpp: * rendering/style/StyleRareNonInheritedData.h: * rendering/svg/SVGRenderSupport.h: * rendering/updating/RenderTreeBuilder.cpp: * rendering/updating/RenderTreeBuilderSVG.cpp: * style/InlineTextBoxStyle.cpp: * style/InlineTextBoxStyle.h: * style/StylePendingResources.cpp: * svg/SVGMatrix.h: * svg/SVGViewSpec.h: * svg/SVGZoomAndPan.h: * workers/WorkerScriptLoader.cpp: * workers/WorkerScriptLoader.h: * workers/service/ServiceWorker.cpp: * workers/service/ServiceWorkerClientData.cpp: * workers/service/ServiceWorkerClients.cpp: * workers/service/ServiceWorkerClients.h: * workers/service/ServiceWorkerGlobalScope.cpp: * workers/service/ServiceWorkerJob.cpp: * workers/service/ServiceWorkerProvider.cpp: * workers/service/context/ServiceWorkerFetch.cpp: * workers/service/context/ServiceWorkerInspectorProxy.h: * workers/service/context/ServiceWorkerThread.cpp: * workers/service/context/ServiceWorkerThreadProxy.cpp: * workers/service/server/SWServerJobQueue.cpp: * workers/service/server/SWServerToContextConnection.cpp: * workers/service/server/SWServerWorker.cpp: * workers/service/server/SWServerWorker.h: * worklets/Worklet.h: Canonical link: https://commits.webkit.org/211049@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@244115 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-04-10 16:53:41 +00:00
#include "Logging.h"
Simplify RenderLayer filter code https://bugs.webkit.org/show_bug.cgi?id=189248 Reviewed by Dean Jackson. Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo, and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing these together into RenderLayerFilters. RenderLayerFilters stores a reference to the CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content to be filtered. It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather than using a side hash (we can recoup the space in other ways layer). * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * css/CSSFilterImageValue.cpp: * rendering/CSSFilter.h: * rendering/FilterEffectRenderer.cpp: Removed. * rendering/FilterEffectRenderer.h: Removed. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::RenderLayer): (WebCore::RenderLayer::~RenderLayer): (WebCore::RenderLayer::paintsWithFilters const): (WebCore::RenderLayer::requiresFullLayerImageForFilters const): (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): (WebCore::RenderLayer::filtersForPainting const): (WebCore::RenderLayer::setupFilters): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::calculateClipRects const): (WebCore::RenderLayer::filter const): Deleted. (WebCore::RenderLayer::filterPainter const): Deleted. (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted. * rendering/RenderLayer.h: * rendering/RenderLayerFilterInfo.cpp: Removed. * rendering/RenderLayerFilters.cpp: Added. (WebCore::RenderLayerFilters::RenderLayerFilters): (WebCore::RenderLayerFilters::~RenderLayerFilters): (WebCore::RenderLayerFilters::setFilter): (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const): (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const): (WebCore::RenderLayerFilters::notifyFinished): (WebCore::RenderLayerFilters::updateReferenceFilterClients): (WebCore::RenderLayerFilters::removeReferenceFilterClients): (WebCore::RenderLayerFilters::buildFilter): (WebCore::RenderLayerFilters::beginFilterEffect): (WebCore::RenderLayerFilters::applyFilterEffect): * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h. Canonical link: https://commits.webkit.org/204269@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235630 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 20:27:09 +00:00
#include "RenderSVGResourceFilter.h"
#include <wtf/NeverDestroyed.h>
namespace WebCore {
RenderLayerFilters::RenderLayerFilters(RenderLayer& layer)
: m_layer(layer)
{
}
RenderLayerFilters::~RenderLayerFilters()
{
removeReferenceFilterClients();
}
void RenderLayerFilters::setFilter(RefPtr<CSSFilter>&& filter)
{
m_filter = WTFMove(filter);
}
bool RenderLayerFilters::hasFilterThatMovesPixels() const
{
return m_filter && m_filter->hasFilterThatMovesPixels();
}
bool RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin() const
{
return m_filter && m_filter->hasFilterThatShouldBeRestrictedBySecurityOrigin();
}
Give some NetworkLoadMetrics to WebCoreNSURLSession's delegate https://bugs.webkit.org/show_bug.cgi?id=211759 <rdar://problem/62909440> Patch by Alex Christensen <achristensen@webkit.org> on 2020-05-12 Reviewed by Jer Noble. Source/WebCore: This required packaging the fetchStart time with the rest of the time deltas, passing a const NetworkLoadMetrics& down to the media loader, and packaging the data up in an ObjC object that pretends to be NSURLSessionTaskMetrics, just like WebCoreNSURLSession pretends to be an NSURLSession. I manually verified the NSDates are correct. This is not straightforward to automate tests for because of the inherant dynamic nature of timing data, and because our other WebCoreNSURLSession tests use WebKitLegacy, and that approach won't work here because we are only hooking up data from NSURLSession, which is only used in modern WebKit. * Modules/beacon/NavigatorBeacon.cpp: (WebCore::NavigatorBeacon::notifyFinished): * Modules/beacon/NavigatorBeacon.h: * bindings/js/CachedModuleScriptLoader.cpp: (WebCore::CachedModuleScriptLoader::notifyFinished): * bindings/js/CachedModuleScriptLoader.h: * dom/LoadableClassicScript.cpp: (WebCore::LoadableClassicScript::notifyFinished): * dom/LoadableClassicScript.h: * html/HTMLImageLoader.cpp: (WebCore::HTMLImageLoader::notifyFinished): * html/HTMLImageLoader.h: * html/ImageDocument.cpp: (WebCore::ImageDocument::finishedParsing): * loader/ApplicationManifestLoader.cpp: (WebCore::ApplicationManifestLoader::notifyFinished): * loader/ApplicationManifestLoader.h: * loader/CrossOriginPreflightChecker.cpp: (WebCore::CrossOriginPreflightChecker::notifyFinished): * loader/CrossOriginPreflightChecker.h: * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::notifyFinished): * loader/DocumentLoader.h: * loader/DocumentThreadableLoader.cpp: (WebCore::DocumentThreadableLoader::notifyFinished): * loader/DocumentThreadableLoader.h: * loader/ImageLoader.cpp: (WebCore::ImageLoader::notifyFinished): * loader/ImageLoader.h: * loader/LinkLoader.cpp: (WebCore::LinkLoader::notifyFinished): * loader/LinkLoader.h: * loader/LinkPreloadResourceClients.h: * loader/MediaResourceLoader.cpp: (WebCore::MediaResource::notifyFinished): * loader/MediaResourceLoader.h: * loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::didReceiveResponse): (WebCore::SubresourceLoader::didFinishLoading): * loader/TextTrackLoader.cpp: (WebCore::TextTrackLoader::notifyFinished): * loader/TextTrackLoader.h: * loader/appcache/ApplicationCacheResourceLoader.cpp: (WebCore::ApplicationCacheResourceLoader::responseReceived): (WebCore::ApplicationCacheResourceLoader::notifyFinished): * loader/appcache/ApplicationCacheResourceLoader.h: * loader/cache/CachedApplicationManifest.cpp: (WebCore::CachedApplicationManifest::finishLoading): * loader/cache/CachedApplicationManifest.h: * loader/cache/CachedCSSStyleSheet.cpp: (WebCore::CachedCSSStyleSheet::finishLoading): (WebCore::CachedCSSStyleSheet::checkNotify): * loader/cache/CachedCSSStyleSheet.h: * loader/cache/CachedFont.cpp: (WebCore::CachedFont::finishLoading): (WebCore::CachedFont::checkNotify): * loader/cache/CachedFont.h: * loader/cache/CachedImage.cpp: (WebCore::CachedImage::finishLoading): * loader/cache/CachedImage.h: * loader/cache/CachedRawResource.cpp: (WebCore::CachedRawResource::updateBuffer): (WebCore::CachedRawResource::finishLoading): * loader/cache/CachedRawResource.h: * loader/cache/CachedResource.cpp: (WebCore::CachedResource::load): (WebCore::CachedResource::checkNotify): (WebCore::CachedResource::finishLoading): (WebCore::CachedResource::error): (WebCore::CachedResource::cancelLoad): (WebCore::CachedResource::didAddClient): * loader/cache/CachedResource.h: * loader/cache/CachedResourceClient.h: (WebCore::CachedResourceClient::notifyFinished): * loader/cache/CachedSVGDocument.cpp: (WebCore::CachedSVGDocument::finishLoading): * loader/cache/CachedSVGDocument.h: * loader/cache/CachedScript.cpp: (WebCore::CachedScript::finishLoading): * loader/cache/CachedScript.h: * loader/cache/CachedTextTrack.cpp: (WebCore::CachedTextTrack::finishLoading): * loader/cache/CachedTextTrack.h: * loader/cache/CachedXSLStyleSheet.cpp: (WebCore::CachedXSLStyleSheet::finishLoading): (WebCore::CachedXSLStyleSheet::checkNotify): * loader/cache/CachedXSLStyleSheet.h: * loader/cache/KeepaliveRequestTracker.cpp: (WebCore::KeepaliveRequestTracker::notifyFinished): * loader/cache/KeepaliveRequestTracker.h: * loader/icon/IconLoader.cpp: (WebCore::IconLoader::notifyFinished): * loader/icon/IconLoader.h: * platform/graphics/PlatformMediaResourceLoader.h: (WebCore::PlatformMediaResourceClient::loadFinished): * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm: (WebCore::CachedResourceMediaLoader::notifyFinished): * platform/network/NetworkLoadMetrics.h: (WebCore::NetworkLoadMetrics::isolatedCopy const): (WebCore::NetworkLoadMetrics::operator== const): (WebCore::NetworkLoadMetrics::encode const): (WebCore::NetworkLoadMetrics::decode): (WTF::Persistence::Coder<Optional<WebCore::NetworkLoadPriority>>::encode): Deleted. (WTF::Persistence::Coder<Optional<WebCore::NetworkLoadPriority>>::decode): Deleted. * platform/network/cocoa/NetworkLoadMetrics.mm: (WebCore::copyTimingData): * platform/network/cocoa/WebCoreNSURLSession.mm: (networkLoadMetricsDate): (-[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:]): (-[WebCoreNSURLSessionTaskTransactionMetrics fetchStartDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics domainLookupStartDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics domainLookupEndDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics connectStartDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics secureConnectionStartDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics connectEndDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics requestStartDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics responseStartDate]): (-[WebCoreNSURLSessionTaskTransactionMetrics responseEndDate]): (-[WebCoreNSURLSessionTaskMetrics _initWithMetrics:]): (-[WebCoreNSURLSessionTaskMetrics transactionMetrics]): (WebCore::WebCoreNSURLSessionDataTaskClient::loadFinished): (-[WebCoreNSURLSessionDataTask _finish]): (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]): (-[WebCoreNSURLSessionDataTask resource:accessControlCheckFailedWithError:]): (-[WebCoreNSURLSessionDataTask resource:loadFailedWithError:]): (-[WebCoreNSURLSessionDataTask resourceFinished:metrics:]): (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:]): Deleted. (-[WebCoreNSURLSessionDataTask resourceFinished:]): Deleted. * rendering/RenderElement.cpp: (WebCore::RenderElement::notifyFinished): * rendering/RenderElement.h: * rendering/RenderImage.cpp: (WebCore::RenderImage::notifyFinished): * rendering/RenderImage.h: * rendering/RenderLayerFilters.cpp: (WebCore::RenderLayerFilters::notifyFinished): * rendering/RenderLayerFilters.h: * svg/SVGFEImageElement.cpp: (WebCore::SVGFEImageElement::notifyFinished): * svg/SVGFEImageElement.h: * svg/SVGUseElement.cpp: (WebCore::SVGUseElement::notifyFinished): * svg/SVGUseElement.h: Source/WebKit: This also reduces duplicate lookups in RemoteMediaResourceManager * GPUProcess/media/RemoteMediaResource.cpp: (WebKit::RemoteMediaResource::loadFinished): * GPUProcess/media/RemoteMediaResource.h: * GPUProcess/media/RemoteMediaResourceManager.cpp: (WebKit::RemoteMediaResourceManager::responseReceived): (WebKit::RemoteMediaResourceManager::redirectReceived): (WebKit::RemoteMediaResourceManager::dataSent): (WebKit::RemoteMediaResourceManager::dataReceived): (WebKit::RemoteMediaResourceManager::accessControlCheckFailed): (WebKit::RemoteMediaResourceManager::loadFailed): (WebKit::RemoteMediaResourceManager::loadFinished): * GPUProcess/media/RemoteMediaResourceManager.h: * GPUProcess/media/RemoteMediaResourceManager.messages.in: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]): * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp: (WebKit::RemoteMediaResourceProxy::loadFinished): * WebProcess/GPU/media/RemoteMediaResourceProxy.h: Canonical link: https://commits.webkit.org/224706@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261597 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-05-13 04:14:59 +00:00
void RenderLayerFilters::notifyFinished(CachedResource&, const NetworkLoadMetrics&)
Simplify RenderLayer filter code https://bugs.webkit.org/show_bug.cgi?id=189248 Reviewed by Dean Jackson. Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo, and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing these together into RenderLayerFilters. RenderLayerFilters stores a reference to the CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content to be filtered. It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather than using a side hash (we can recoup the space in other ways layer). * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * css/CSSFilterImageValue.cpp: * rendering/CSSFilter.h: * rendering/FilterEffectRenderer.cpp: Removed. * rendering/FilterEffectRenderer.h: Removed. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::RenderLayer): (WebCore::RenderLayer::~RenderLayer): (WebCore::RenderLayer::paintsWithFilters const): (WebCore::RenderLayer::requiresFullLayerImageForFilters const): (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): (WebCore::RenderLayer::filtersForPainting const): (WebCore::RenderLayer::setupFilters): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::calculateClipRects const): (WebCore::RenderLayer::filter const): Deleted. (WebCore::RenderLayer::filterPainter const): Deleted. (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted. * rendering/RenderLayer.h: * rendering/RenderLayerFilterInfo.cpp: Removed. * rendering/RenderLayerFilters.cpp: Added. (WebCore::RenderLayerFilters::RenderLayerFilters): (WebCore::RenderLayerFilters::~RenderLayerFilters): (WebCore::RenderLayerFilters::setFilter): (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const): (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const): (WebCore::RenderLayerFilters::notifyFinished): (WebCore::RenderLayerFilters::updateReferenceFilterClients): (WebCore::RenderLayerFilters::removeReferenceFilterClients): (WebCore::RenderLayerFilters::buildFilter): (WebCore::RenderLayerFilters::beginFilterEffect): (WebCore::RenderLayerFilters::applyFilterEffect): * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h. Canonical link: https://commits.webkit.org/204269@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235630 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 20:27:09 +00:00
{
// FIXME: This really shouldn't have to invalidate layer composition,
// but tests like css3/filters/effect-reference-delete.html fail if that doesn't happen.
if (auto* enclosingElement = m_layer.enclosingElement())
enclosingElement->invalidateStyleAndLayerComposition();
m_layer.renderer().repaint();
Simplify RenderLayer filter code https://bugs.webkit.org/show_bug.cgi?id=189248 Reviewed by Dean Jackson. Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo, and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing these together into RenderLayerFilters. RenderLayerFilters stores a reference to the CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content to be filtered. It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather than using a side hash (we can recoup the space in other ways layer). * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * css/CSSFilterImageValue.cpp: * rendering/CSSFilter.h: * rendering/FilterEffectRenderer.cpp: Removed. * rendering/FilterEffectRenderer.h: Removed. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::RenderLayer): (WebCore::RenderLayer::~RenderLayer): (WebCore::RenderLayer::paintsWithFilters const): (WebCore::RenderLayer::requiresFullLayerImageForFilters const): (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): (WebCore::RenderLayer::filtersForPainting const): (WebCore::RenderLayer::setupFilters): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::calculateClipRects const): (WebCore::RenderLayer::filter const): Deleted. (WebCore::RenderLayer::filterPainter const): Deleted. (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted. * rendering/RenderLayer.h: * rendering/RenderLayerFilterInfo.cpp: Removed. * rendering/RenderLayerFilters.cpp: Added. (WebCore::RenderLayerFilters::RenderLayerFilters): (WebCore::RenderLayerFilters::~RenderLayerFilters): (WebCore::RenderLayerFilters::setFilter): (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const): (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const): (WebCore::RenderLayerFilters::notifyFinished): (WebCore::RenderLayerFilters::updateReferenceFilterClients): (WebCore::RenderLayerFilters::removeReferenceFilterClients): (WebCore::RenderLayerFilters::buildFilter): (WebCore::RenderLayerFilters::beginFilterEffect): (WebCore::RenderLayerFilters::applyFilterEffect): * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h. Canonical link: https://commits.webkit.org/204269@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235630 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 20:27:09 +00:00
}
void RenderLayerFilters::updateReferenceFilterClients(const FilterOperations& operations)
{
removeReferenceFilterClients();
for (auto& operation : operations.operations()) {
if (!is<ReferenceFilterOperation>(*operation))
continue;
auto& referenceOperation = downcast<ReferenceFilterOperation>(*operation);
auto* documentReference = referenceOperation.cachedSVGDocumentReference();
if (auto* cachedSVGDocument = documentReference ? documentReference->document() : nullptr) {
// Reference is external; wait for notifyFinished().
cachedSVGDocument->addClient(*this);
m_externalSVGReferences.append(cachedSVGDocument);
} else {
// Reference is internal; add layer as a client so we can trigger filter repaint on SVG attribute change.
auto* filterElement = m_layer.renderer().document().getElementById(referenceOperation.fragment());
if (!filterElement)
continue;
auto* renderer = filterElement->renderer();
if (!is<RenderSVGResourceFilter>(renderer))
continue;
downcast<RenderSVGResourceFilter>(*renderer).addClientRenderLayer(&m_layer);
m_internalSVGReferences.append(filterElement);
}
}
}
void RenderLayerFilters::removeReferenceFilterClients()
{
for (auto& resourceHandle : m_externalSVGReferences)
resourceHandle->removeClient(*this);
m_externalSVGReferences.clear();
for (auto& filterElement : m_internalSVGReferences) {
if (auto* renderer = filterElement->renderer())
downcast<RenderSVGResourceContainer>(*renderer).removeClientRenderLayer(&m_layer);
}
m_internalSVGReferences.clear();
}
void RenderLayerFilters::buildFilter(RenderElement& renderer, float scaleFactor, RenderingMode renderingMode)
{
if (!m_filter) {
m_filter = CSSFilter::create();
m_filter->setFilterScale(scaleFactor);
m_filter->setRenderingMode(renderingMode);
} else if (m_filter->filterScale() != scaleFactor) {
m_filter->setFilterScale(scaleFactor);
m_filter->clearIntermediateResults();
}
// If the filter fails to build, remove it from the layer. It will still attempt to
// go through regular processing (e.g. compositing), but never apply anything.
// FIXME: this rebuilds the entire effects chain even if the filter style didn't change.
if (!m_filter->build(renderer, renderer.style().filter(), FilterConsumer::FilterProperty))
m_filter = nullptr;
}
GraphicsContext* RenderLayerFilters::beginFilterEffect(GraphicsContext& destinationContext, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect, const LayoutRect& layerRepaintRect)
{
if (!m_filter)
return nullptr;
auto& filter = *m_filter;
auto filterSourceRect = filter.computeSourceImageRectForDirtyRect(filterBoxRect, dirtyRect);
if (filterSourceRect.isEmpty())
return nullptr;
bool hasUpdatedBackingStore = filter.updateBackingStoreRect(filterSourceRect);
if (!filter.hasFilterThatMovesPixels())
m_repaintRect = dirtyRect;
else {
if (hasUpdatedBackingStore)
m_repaintRect = filterSourceRect;
else {
m_repaintRect = dirtyRect;
m_repaintRect.unite(layerRepaintRect);
m_repaintRect.intersect(filterSourceRect);
}
}
m_paintOffset = filterSourceRect.location();
resetDirtySourceRect();
CSS reference filter that references a tiled feTurbulence is blank https://bugs.webkit.org/show_bug.cgi?id=188950 Reviewed by Dean Jackson. Source/WebCore: We need to run the code that was in RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion() for CSS reference filters, to set up the various rects in the filter effects. Do this by moving the code to FilterEffect::determineFilterPrimitiveSubregion(), which makes sense because it recurses on the FilterEffect input chain. To make it CSS/SVGFilter agnostic, we move filterRegionInUserSpace() to the Filter base class (for CSSFilter, it just returns m_filterRegion). Test: css3/filters/reference-filter-set-filter-regions.html * platform/graphics/filters/Filter.h: * platform/graphics/filters/FilterEffect.cpp: (WebCore::FilterEffect::determineFilterPrimitiveSubregion): * platform/graphics/filters/FilterEffect.h: * rendering/CSSFilter.cpp: (WebCore::CSSFilter::determineFilterPrimitiveSubregion): * rendering/CSSFilter.h: * rendering/RenderLayerFilters.cpp: (WebCore::RenderLayerFilters::beginFilterEffect): * rendering/svg/RenderSVGResourceFilter.cpp: (WebCore::RenderSVGResourceFilter::applyResource): * rendering/svg/RenderSVGResourceFilterPrimitive.cpp: (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion): Deleted. * rendering/svg/RenderSVGResourceFilterPrimitive.h: * svg/graphics/filters/SVGFilter.h: LayoutTests: * css3/filters/reference-filter-set-filter-regions-expected.html: Added. * css3/filters/reference-filter-set-filter-regions.html: Added. Canonical link: https://commits.webkit.org/204280@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235644 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 22:51:47 +00:00
filter.determineFilterPrimitiveSubregion();
Simplify RenderLayer filter code https://bugs.webkit.org/show_bug.cgi?id=189248 Reviewed by Dean Jackson. Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo, and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing these together into RenderLayerFilters. RenderLayerFilters stores a reference to the CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content to be filtered. It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather than using a side hash (we can recoup the space in other ways layer). * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * css/CSSFilterImageValue.cpp: * rendering/CSSFilter.h: * rendering/FilterEffectRenderer.cpp: Removed. * rendering/FilterEffectRenderer.h: Removed. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::RenderLayer): (WebCore::RenderLayer::~RenderLayer): (WebCore::RenderLayer::paintsWithFilters const): (WebCore::RenderLayer::requiresFullLayerImageForFilters const): (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): (WebCore::RenderLayer::filtersForPainting const): (WebCore::RenderLayer::setupFilters): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::calculateClipRects const): (WebCore::RenderLayer::filter const): Deleted. (WebCore::RenderLayer::filterPainter const): Deleted. (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted. * rendering/RenderLayer.h: * rendering/RenderLayerFilterInfo.cpp: Removed. * rendering/RenderLayerFilters.cpp: Added. (WebCore::RenderLayerFilters::RenderLayerFilters): (WebCore::RenderLayerFilters::~RenderLayerFilters): (WebCore::RenderLayerFilters::setFilter): (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const): (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const): (WebCore::RenderLayerFilters::notifyFinished): (WebCore::RenderLayerFilters::updateReferenceFilterClients): (WebCore::RenderLayerFilters::removeReferenceFilterClients): (WebCore::RenderLayerFilters::buildFilter): (WebCore::RenderLayerFilters::beginFilterEffect): (WebCore::RenderLayerFilters::applyFilterEffect): * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h. Canonical link: https://commits.webkit.org/204269@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235630 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-04 20:27:09 +00:00
filter.allocateBackingStoreIfNeeded(destinationContext);
auto* sourceGraphicsContext = filter.inputContext();
if (!sourceGraphicsContext || filter.filterRegion().isEmpty() || ImageBuffer::sizeNeedsClamping(filter.filterRegion().size()))
return nullptr;
// Translate the context so that the contents of the layer is captured in the offscreen memory buffer.
sourceGraphicsContext->save();
sourceGraphicsContext->translate(-m_paintOffset);
sourceGraphicsContext->clearRect(m_repaintRect);
sourceGraphicsContext->clip(m_repaintRect);
return sourceGraphicsContext;
}
void RenderLayerFilters::applyFilterEffect(GraphicsContext& destinationContext)
{
ASSERT(m_filter->inputContext());
LOG_WITH_STREAM(Filters, stream << "\nRenderLayerFilters " << this << " applyFilterEffect");
auto& filter = *m_filter;
filter.inputContext()->restore();
filter.apply();
// Get the filtered output and draw it in place.
LayoutRect destRect = filter.outputRect();
destRect.move(m_paintOffset.x(), m_paintOffset.y());
if (auto* outputBuffer = filter.output())
destinationContext.drawImageBuffer(*outputBuffer, snapRectToDevicePixels(destRect, m_layer.renderer().document().deviceScaleFactor()));
filter.clearIntermediateResults();
LOG_WITH_STREAM(Filters, stream << "RenderLayerFilters " << this << " applyFilterEffect done\n");
}
} // namespace WebCore