WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-219007-20201125020941.patch (text/plain), 85.72 KB, created by
Said Abou-Hallawa
on 2020-11-25 02:09:42 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Said Abou-Hallawa
Created:
2020-11-25 02:09:42 PST
Size:
85.72 KB
patch
obsolete
>Subversion Revision: 270165 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 323ab6b4e6c441c063ec5384c6f90947bd1a469d..c0f11548a7f5de536cc04b97c7620ec84c2a501a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,78 @@ >+2020-11-25 Said Abou-Hallawa <said@apple.com> >+ >+ [GPU Process] Clean up recreating the ImageBufferBackend because of GPU crashing >+ https://bugs.webkit.org/show_bug.cgi?id=219007 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ -- Add the structure ImageBufferBackend::Parameters. Make ConcreteImageBuffer >+ own an instance of this structure. And make ImageBufferBackend own a >+ const reference to this structure. >+ -- Expose the ImageBufferBackend creation parameters through ImageBuffer. >+ -- Expose methods to set and clear the backend of an ImageBuffer. >+ -- Expose submitDrawingContext() and didFlush() through ImageBuffer so no >+ casting is needed when calling these functions through RemoteImageBuferProxy. >+ -- Replace all the instances of 'isAccelerated' by 'renderingMode' so no >+ need to convert one type to the other. >+ >+ * WebCore.xcodeproj/project.pbxproj: >+ * html/canvas/CanvasRenderingContext2DBase.cpp: >+ (WebCore::CanvasRenderingContext2DBase::prepareForDisplay): >+ * platform/graphics/ConcreteImageBuffer.h: >+ (WebCore::ConcreteImageBuffer::create): >+ (WebCore::ConcreteImageBuffer::ConcreteImageBuffer): >+ * platform/graphics/ImageBuffer.h: >+ (WebCore::ImageBuffer::submitDrawingContext): >+ (WebCore::ImageBuffer::submitDisplayList): >+ (WebCore::ImageBuffer::didFlush): >+ (WebCore::ImageBuffer::flushDrawingContextAndCommit): Deleted. >+ * platform/graphics/ImageBufferBackend.cpp: >+ (WebCore::ImageBufferBackend::ImageBufferBackend): >+ (WebCore::ImageBufferBackend::toBGRAData const): >+ * platform/graphics/ImageBufferBackend.h: >+ (WebCore::ImageBufferBackend::backendSize const): >+ (WebCore::ImageBufferBackend::memoryCost const): >+ (WebCore::ImageBufferBackend::bytesPerRow const): >+ (WebCore::ImageBufferBackend::toBackendCoordinates const): >+ (WebCore::ImageBufferBackend::logicalSize const): >+ (WebCore::ImageBufferBackend::resolutionScale const): >+ (WebCore::ImageBufferBackend::colorSpace const): >+ (WebCore::ImageBufferBackend::pixelFormat const): >+ (WebCore::ImageBufferBackend::logicalRect const): >+ (WebCore::ImageBufferBackend::backendRect const): >+ * platform/graphics/PlatformImageBuffer.h: >+ (isType): >+ * platform/graphics/cairo/ImageBufferCairoBackend.cpp: >+ (WebCore::ImageBufferCairoBackend::drawPattern): >+ * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp: >+ (WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace): >+ * platform/graphics/cg/ImageBufferCGBackend.cpp: >+ (WebCore::ImageBufferCGBackend::setupContext const): >+ (WebCore::ImageBufferCGBackend::copyImage const): >+ (WebCore::ImageBufferCGBackend::sinkIntoImage): >+ (WebCore::ImageBufferCGBackend::draw): >+ (WebCore::ImageBufferCGBackend::drawPattern): >+ (WebCore::ImageBufferCGBackend::baseTransform const): >+ (WebCore::ImageBufferCGBackend::toCFData const): >+ * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp: >+ (WebCore::ImageBufferCGBitmapBackend::create): >+ (WebCore::ImageBufferCGBitmapBackend::ImageBufferCGBitmapBackend): >+ (WebCore::ImageBufferCGBitmapBackend::copyNativeImage const): >+ * platform/graphics/cg/ImageBufferCGBitmapBackend.h: >+ * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp: >+ (WebCore::ImageBufferIOSurfaceBackend::create): >+ (WebCore::ImageBufferIOSurfaceBackend::ImageBufferIOSurfaceBackend): >+ (WebCore::ImageBufferIOSurfaceBackend::drawConsuming): >+ * platform/graphics/cg/ImageBufferIOSurfaceBackend.h: >+ * platform/graphics/displaylists/DisplayList.h: >+ * platform/graphics/displaylists/DisplayListFlushIdentifier.h: Added. >+ * platform/graphics/displaylists/DisplayListImageBuffer.h: >+ (WebCore::DisplayList::ImageBuffer::ImageBuffer): >+ * platform/graphics/win/ImageBufferDirect2DBackend.cpp: >+ (WebCore::ImageBufferDirect2DBackend::copyImage const): >+ (WebCore::ImageBufferDirect2DBackend::draw): >+ (WebCore::ImageBufferDirect2DBackend::drawPattern): >+ > 2020-11-22 Antti Koivisto <antti@apple.com> > > [LFC][Integration] Convert some remaining InlineBox access to use inline iterator >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index e97769beb40afc5f8dcc47cb141f8c580503314c..d0c834bb1575f452064f271606bd709af90e1716 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,57 @@ >+2020-11-25 Said Abou-Hallawa <said@apple.com> >+ >+ [GPU Process] Clean up recreating the ImageBufferBackend because of GPU crashing >+ https://bugs.webkit.org/show_bug.cgi?id=219007 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This is no need to store the backend parameters in RemoteImageBufferProxy. >+ These parameters can be accessed from the current ImageBufferBackend via >+ the ImageBuffer before the backend is cleared. >+ >+ Remove the traits definition for RemoteImageBufferProxy types because >+ they are wrong. All ImageBuffers have valid renderingResourceIdentifier() >+ regardless whether they are remote or not. ImageBuffer::setBackend and >+ ImageBuffer::commitFlushDisplayList() are now implemented in WebCore. >+ >+ * GPUProcess/graphics/RemoteImageBuffer.h: >+ (WebKit::RemoteImageBuffer::RemoteImageBuffer): >+ (WebKit::RemoteImageBuffer::submitDisplayList): Deleted. >+ * GPUProcess/graphics/RemoteRenderingBackend.cpp: >+ (WebKit::RemoteRenderingBackend::imageBufferBackendWasCreated): >+ (WebKit::RemoteRenderingBackend::applyDisplayListsFromHandle): >+ * GPUProcess/graphics/RemoteRenderingBackend.h: >+ * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm: >+ (WebKit::RemoteLayerBackingStore::display): >+ * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp: >+ (WebKit::ImageBufferShareableBitmapBackend::create): >+ (WebKit::ImageBufferShareableBitmapBackend::ImageBufferShareableBitmapBackend): >+ * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h: >+ * WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h: >+ (isType): Deleted. >+ * WebProcess/GPU/graphics/RemoteImageBufferProxy.h: >+ (WebKit::RemoteImageBufferProxy::create): >+ (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy): >+ (WebKit::RemoteImageBufferProxy::clearBackend): Deleted. >+ (WebKit::RemoteImageBufferProxy::createBackend): Deleted. >+ (WebKit::RemoteImageBufferProxy::didFlush): Deleted. >+ (WebKit::RemoteImageBufferProxy::size const): Deleted. >+ (WebKit::RemoteImageBufferProxy::renderingMode const): Deleted. >+ (WebKit::RemoteImageBufferProxy::colorSpace const): Deleted. >+ (WebKit::RemoteImageBufferProxy::pixelFormat const): Deleted. >+ (WebKit::RemoteImageBufferProxy::submitDisplayList): Deleted. >+ * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp: >+ (WebKit::RemoteRenderingBackendProxy::reestablishGPUProcessConnection): >+ (WebKit::RemoteRenderingBackendProxy::createImageBuffer): >+ (WebKit::RemoteRenderingBackendProxy::imageBufferBackendWasCreated): >+ (WebKit::RemoteRenderingBackendProxy::didFlush): >+ (WebKit::recreateImageBuffer): Deleted. >+ * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h: >+ * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in: >+ * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp: >+ (WebKit::ImageBufferShareableIOSurfaceBackend::create): >+ * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h: >+ > 2020-11-21 Sihui Liu <sihui_liu@apple.com> > > Implement audio capture for SpeechRecognition on macOS >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 91d74c74522597906791ad1e8a21283d54c61168..dd5aa1c1506de19793265673b7187b2ae4ed4438 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -2187,6 +2187,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, ); }; }; >+ 729C45E8256E0919000407CF /* DisplayListFlushIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 729C45E6256E05F9000407CF /* DisplayListFlushIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 729D05302531424300422098 /* RenderingResourceIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 729D052E25313E2600422098 /* RenderingResourceIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 72A73BEF245A3F90001C9D03 /* AnimationFrameRate.h in Headers */ = {isa = PBXBuildFile; fileRef = 722A815C238FD50500C00583 /* AnimationFrameRate.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 72AB9A21255A9FDE00E6EBF1 /* NativeImageReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 72AB9A1F255A9EA600E6EBF1 /* NativeImageReference.h */; settings = {ATTRIBUTES = (Private, ); }; }; >@@ -10072,6 +10073,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>"; }; >+ 729C45E6256E05F9000407CF /* DisplayListFlushIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DisplayListFlushIdentifier.h; sourceTree = "<group>"; }; > 729D052E25313E2600422098 /* RenderingResourceIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderingResourceIdentifier.h; sourceTree = "<group>"; }; > 72AB9A1F255A9EA600E6EBF1 /* NativeImageReference.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NativeImageReference.h; sourceTree = "<group>"; }; > 72BAC3A423E17327008D741C /* ImageBufferBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferBackend.cpp; sourceTree = "<group>"; }; >@@ -17790,6 +17792,7 @@ > 1CAF56DE2530245A0017B472 /* DisplayListDrawGlyphsRecorderCoreText.cpp */, > 55C0A29523FE2CE000F2CB93 /* DisplayListDrawingContext.cpp */, > 72EA09F923FCCC6A008504A5 /* DisplayListDrawingContext.h */, >+ 729C45E6256E05F9000407CF /* DisplayListFlushIdentifier.h */, > 72EA09F723FCCB3D008504A5 /* DisplayListImageBuffer.h */, > F422B8B6253F7065004E77E8 /* DisplayListItemBuffer.cpp */, > F422B8B5253F7065004E77E8 /* DisplayListItemBuffer.h */, >@@ -18022,7 +18025,6 @@ > A1CC564A1F4613BB00A4555B /* PaymentRequest */, > 1D00269A2374B9F800CA6CDF /* PictureInPicture */, > A9D247F90D757E4100FDF959 /* Plugins */, >- 89F60B17157F6A020075E157 /* Quota */, > BC9854460CD3DA5F00069BC1 /* Ranges */, > CD8C6C2422FDDA6400A720AB /* RemotePlayback */, > 5182C24C1F3142090059BA7C /* ServiceWorkers */, >@@ -31674,6 +31676,7 @@ > 0FE5FBD31C3DD51E0007A2CA /* DisplayList.h in Headers */, > 1CAF56DB25301AC80017B472 /* DisplayListDrawGlyphsRecorder.h in Headers */, > 55AD09402408964000DE4D2F /* DisplayListDrawingContext.h in Headers */, >+ 729C45E8256E0919000407CF /* DisplayListFlushIdentifier.h in Headers */, > 55AD093E2408963500DE4D2F /* DisplayListImageBuffer.h in Headers */, > F4D40BC9255463BF00721349 /* DisplayListItemBuffer.h in Headers */, > 0FE5FBD51C3DD51E0007A2CA /* DisplayListItems.h in Headers */, >diff --git a/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp b/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp >index a3954c7f5e42c72f41a38889465b312422a046f2..ed1ab05fd0a654353ebfd10882766ca950189ea3 100644 >--- a/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp >+++ b/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp >@@ -2042,7 +2042,7 @@ GraphicsContext* CanvasRenderingContext2DBase::drawingContext() const > void CanvasRenderingContext2DBase::prepareForDisplay() > { > if (auto buffer = canvasBase().buffer()) >- buffer->flushDrawingContextAndCommit(); >+ buffer->submitDrawingContext(); > } > > bool CanvasRenderingContext2DBase::needsPreparationForDisplay() const >diff --git a/Source/WebCore/platform/graphics/ConcreteImageBuffer.h b/Source/WebCore/platform/graphics/ConcreteImageBuffer.h >index 824299002ee660f0bae3f163ad1c89b03d4dda79..393132718a0c606f444bb2b49828c7b606c40ebd 100644 >--- a/Source/WebCore/platform/graphics/ConcreteImageBuffer.h >+++ b/Source/WebCore/platform/graphics/ConcreteImageBuffer.h >@@ -36,30 +36,41 @@ public: > template<typename ImageBufferType = ConcreteImageBuffer, typename... Arguments> > static RefPtr<ImageBufferType> create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, const HostWindow* hostWindow, Arguments&&... arguments) > { >- auto backend = BackendType::create(size, resolutionScale, colorSpace, pixelFormat, hostWindow); >+ auto parameters = std::unique_ptr<ImageBufferBackend::Parameters>(new ImageBufferBackend::Parameters({ size, resolutionScale, colorSpace, pixelFormat })); >+ auto backend = BackendType::create(*parameters, hostWindow); > if (!backend) > return nullptr; >- return adoptRef(new ImageBufferType(WTFMove(backend), std::forward<Arguments>(arguments)...)); >+ return adoptRef(new ImageBufferType(WTFMove(parameters), WTFMove(backend), std::forward<Arguments>(arguments)...)); > } > > template<typename ImageBufferType = ConcreteImageBuffer, typename... Arguments> > static RefPtr<ImageBufferType> create(const FloatSize& size, const GraphicsContext& context, Arguments&&... arguments) > { >- auto backend = BackendType::create(size, context); >+ auto parameters = std::unique_ptr<ImageBufferBackend::Parameters>(new ImageBufferBackend::Parameters({ size, 1, ColorSpace::SRGB, PixelFormat::BGRA8 })); >+ auto backend = BackendType::create(*parameters, context); > if (!backend) > return nullptr; >- return adoptRef(new ImageBufferType(WTFMove(backend), std::forward<Arguments>(arguments)...)); >+ return adoptRef(new ImageBufferType(WTFMove(parameters), WTFMove(backend), std::forward<Arguments>(arguments)...)); > } > >- bool isAccelerated() const override { return BackendType::isAccelerated; } >+ RenderingMode renderingMode() const override { return BackendType::renderingMode; } > > protected: >- ConcreteImageBuffer(std::unique_ptr<BackendType>&& backend = nullptr, RenderingResourceIdentifier renderingResourceIdentifier = RenderingResourceIdentifier::generate()) >- : m_backend(WTFMove(backend)) >+ ConcreteImageBuffer(std::unique_ptr<ImageBufferBackend::Parameters>&& parameters, std::unique_ptr<BackendType>&& backend = nullptr, RenderingResourceIdentifier renderingResourceIdentifier = RenderingResourceIdentifier::generate()) >+ : m_parameters(WTFMove(parameters)) >+ , m_backend(WTFMove(backend)) > , m_renderingResourceIdentifier(renderingResourceIdentifier) > { > } > >+ void setBackend(std::unique_ptr<ImageBufferBackend>&& backend) override >+ { >+ ASSERT(!m_backend); >+ m_backend = std::unique_ptr<BackendType> { static_cast<BackendType*>(backend.release()) }; >+ } >+ >+ void clearBackend() override { m_backend = nullptr; } >+ > virtual BackendType* ensureBackendCreated() const { return m_backend.get(); } > > RenderingResourceIdentifier renderingResourceIdentifier() const override { return m_renderingResourceIdentifier; } >@@ -78,19 +89,11 @@ protected: > } > } > >- AffineTransform baseTransform() const override >- { >- if (auto* backend = ensureBackendCreated()) >- return backend->baseTransform(); >- return { }; >- } >- >- IntSize logicalSize() const override >- { >- if (auto* backend = ensureBackendCreated()) >- return backend->logicalSize(); >- return { }; >- } >+ IntSize logicalSize() const override { return IntSize(m_parameters->logicalSize); } >+ float resolutionScale() const override { return m_parameters->resolutionScale; } >+ ColorSpace colorSpace() const override { return m_parameters->colorSpace; } >+ PixelFormat pixelFormat() const override { return m_parameters->pixelFormat; } >+ const ImageBufferBackend::Parameters& parameters() const override { return *m_parameters; } > > IntSize backendSize() const override > { >@@ -99,11 +102,11 @@ protected: > return { }; > } > >- float resolutionScale() const override >+ AffineTransform baseTransform() const override > { > if (auto* backend = ensureBackendCreated()) >- return backend->resolutionScale(); >- return 1; >+ return backend->baseTransform(); >+ return { }; > } > > size_t memoryCost() const override >@@ -291,6 +294,7 @@ protected: > backend->releaseBufferToPool(); > } > >+ std::unique_ptr<ImageBufferBackend::Parameters> m_parameters; > std::unique_ptr<BackendType> m_backend; > RenderingResourceIdentifier m_renderingResourceIdentifier; > }; >diff --git a/Source/WebCore/platform/graphics/ImageBuffer.h b/Source/WebCore/platform/graphics/ImageBuffer.h >index 62a3f7ffa3778a8c01390162543753aa7bd2c21d..77d926163d9646e295fd04b7c12d49f754c9b96e 100644 >--- a/Source/WebCore/platform/graphics/ImageBuffer.h >+++ b/Source/WebCore/platform/graphics/ImageBuffer.h >@@ -27,6 +27,7 @@ > > #pragma once > >+#include "DisplayListFlushIdentifier.h" > #include "ImageBufferBackend.h" > #include "RenderingMode.h" > #include "RenderingResourceIdentifier.h" >@@ -60,10 +61,13 @@ public: > static FloatRect clampedRect(const FloatRect&); > > static IntSize compatibleBufferSize(const FloatSize&, const GraphicsContext&); >- >+ > WEBCORE_EXPORT virtual ~ImageBuffer() = default; > >- virtual bool isAccelerated() const = 0; >+ virtual void setBackend(std::unique_ptr<ImageBufferBackend>&&) = 0; >+ virtual void clearBackend() = 0; >+ >+ virtual RenderingMode renderingMode() const = 0; > virtual RenderingResourceIdentifier renderingResourceIdentifier() const { return { }; } > > virtual GraphicsContext& context() const = 0; >@@ -72,12 +76,18 @@ public: > virtual DisplayList::DrawingContext* drawingContext() { return nullptr; } > virtual bool prefersPreparationForDisplay() { return false; } > virtual void flushDrawingContext() { } >- virtual void flushDrawingContextAndCommit() { } >+ virtual void submitDrawingContext() { } >+ virtual void submitDisplayList(const DisplayList::DisplayList&) { } >+ virtual void didFlush(DisplayList::FlushIdentifier) { } > >- virtual AffineTransform baseTransform() const = 0; > virtual IntSize logicalSize() const = 0; >- virtual IntSize backendSize() const = 0; > virtual float resolutionScale() const = 0; >+ virtual ColorSpace colorSpace() const = 0; >+ virtual PixelFormat pixelFormat() const = 0; >+ virtual const ImageBufferBackend::Parameters& parameters() const = 0; >+ >+ virtual IntSize backendSize() const = 0; >+ virtual AffineTransform baseTransform() const = 0; > > virtual size_t memoryCost() const = 0; > virtual size_t externalMemoryCost() const = 0; >diff --git a/Source/WebCore/platform/graphics/ImageBufferBackend.cpp b/Source/WebCore/platform/graphics/ImageBufferBackend.cpp >index 7f0fe9e6d966e74b45f85aad0e3b2fb84d9450b9..8b6996dfb9e8e9b8f11e1da1fc0c38c445571a40 100644 >--- a/Source/WebCore/platform/graphics/ImageBufferBackend.cpp >+++ b/Source/WebCore/platform/graphics/ImageBufferBackend.cpp >@@ -31,12 +31,9 @@ > > namespace WebCore { > >-ImageBufferBackend::ImageBufferBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat) >- : m_logicalSize(logicalSize) >+ImageBufferBackend::ImageBufferBackend(const Parameters& parameters, const IntSize& backendSize) >+ : m_parameters(parameters) > , m_backendSize(backendSize) >- , m_resolutionScale(resolutionScale) >- , m_colorSpace(colorSpace) >- , m_pixelFormat(pixelFormat) > { > } > >@@ -99,15 +96,15 @@ void ImageBufferBackend::convertToLuminanceMask() > > Vector<uint8_t> ImageBufferBackend::toBGRAData(void* data) const > { >- Vector<uint8_t> result(4 * m_logicalSize.area().unsafeGet()); >- size_t destBytesPerRow = m_logicalSize.width() * 4; >+ Vector<uint8_t> result(4 * logicalSize().area().unsafeGet()); >+ size_t destBytesPerRow = logicalSize().width() * 4; > size_t srcBytesPerRow = bytesPerRow(); > > uint8_t* srcRows = reinterpret_cast<uint8_t*>(data); > > copyImagePixels( > AlphaPremultiplication::Premultiplied, pixelFormat(), srcBytesPerRow, srcRows, >- AlphaPremultiplication::Unpremultiplied, PixelFormat::BGRA8, destBytesPerRow, result.data(), m_logicalSize); >+ AlphaPremultiplication::Unpremultiplied, PixelFormat::BGRA8, destBytesPerRow, result.data(), logicalSize()); > > return result; > } >diff --git a/Source/WebCore/platform/graphics/ImageBufferBackend.h b/Source/WebCore/platform/graphics/ImageBufferBackend.h >index 5806715a7b2c87576902a773584df1805825100f..707d44477d850e3f91de691c684b53a04dd0a3e8 100644 >--- a/Source/WebCore/platform/graphics/ImageBufferBackend.h >+++ b/Source/WebCore/platform/graphics/ImageBufferBackend.h >@@ -32,6 +32,7 @@ > #include "ImagePaintingOptions.h" > #include "IntRect.h" > #include "PlatformLayer.h" >+#include "RenderingMode.h" > #include <wtf/RefPtr.h> > #include <wtf/Vector.h> > >@@ -77,6 +78,13 @@ public: > > class ImageBufferBackend { > public: >+ struct Parameters { >+ FloatSize logicalSize; >+ float resolutionScale; >+ ColorSpace colorSpace; >+ PixelFormat pixelFormat; >+ }; >+ > WEBCORE_EXPORT virtual ~ImageBufferBackend() = default; > > WEBCORE_EXPORT static IntSize calculateBackendSize(const FloatSize&, float resolutionScale); >@@ -84,14 +92,10 @@ public: > virtual GraphicsContext& context() const = 0; > virtual void flushContext() { } > >- IntSize logicalSize() const { return m_logicalSize; } > IntSize backendSize() const { return m_backendSize; } >- float resolutionScale() const { return m_resolutionScale; } >- ColorSpace colorSpace() const { return m_colorSpace; } >- PixelFormat pixelFormat() const { return m_pixelFormat; } >- > virtual AffineTransform baseTransform() const { return AffineTransform(); } >- virtual size_t memoryCost() const { return 4 * m_backendSize.area().unsafeGet(); } >+ >+ virtual size_t memoryCost() const { return 4 * backendSize().area().unsafeGet(); } > virtual size_t externalMemoryCost() const { return 0; } > > virtual RefPtr<NativeImage> copyNativeImage(BackingStoreCopy) const = 0; >@@ -127,24 +131,29 @@ public: > virtual std::unique_ptr<ThreadSafeImageBufferFlusher> createFlusher() { return nullptr; } > > static constexpr bool isOriginAtUpperLeftCorner = false; >- static constexpr bool isAccelerated = false; >+ static constexpr RenderingMode renderingMode = RenderingMode::Unaccelerated; > > protected: >- WEBCORE_EXPORT ImageBufferBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace, PixelFormat); >+ WEBCORE_EXPORT ImageBufferBackend(const Parameters&, const IntSize& backendSize); > >- virtual unsigned bytesPerRow() const { return 4 * m_backendSize.width(); } >+ virtual unsigned bytesPerRow() const { return 4 * backendSize().width(); } > > template<typename T> > T toBackendCoordinates(T t) const > { > static_assert(std::is_same<T, IntPoint>::value || std::is_same<T, IntSize>::value || std::is_same<T, IntRect>::value); >- if (m_resolutionScale != 1) >- t.scale(m_resolutionScale); >+ if (resolutionScale() != 1) >+ t.scale(resolutionScale()); > return t; > } > >- IntRect logicalRect() const { return IntRect(IntPoint::zero(), m_logicalSize); }; >- IntRect backendRect() const { return IntRect(IntPoint::zero(), m_backendSize); }; >+ IntSize logicalSize() const { return IntSize(m_parameters.logicalSize); } >+ float resolutionScale() const { return m_parameters.resolutionScale; } >+ ColorSpace colorSpace() const { return m_parameters.colorSpace; } >+ PixelFormat pixelFormat() const { return m_parameters.pixelFormat; } >+ >+ IntRect logicalRect() const { return IntRect(IntPoint::zero(), logicalSize()); }; >+ IntRect backendRect() const { return IntRect(IntPoint::zero(), backendSize()); }; > > WEBCORE_EXPORT virtual void copyImagePixels( > AlphaPremultiplication srcAlphaFormat, PixelFormat srcPixelFormat, unsigned srcBytesPerRow, uint8_t* srcRows, >@@ -155,11 +164,8 @@ protected: > WEBCORE_EXPORT RefPtr<ImageData> getImageData(AlphaPremultiplication outputFormat, const IntRect& srcRect, void* data) const; > WEBCORE_EXPORT void putImageData(AlphaPremultiplication inputFormat, const ImageData&, const IntRect& srcRect, const IntPoint& destPoint, AlphaPremultiplication destFormat, void* data); > >- IntSize m_logicalSize; >+ const Parameters& m_parameters; > IntSize m_backendSize; >- float m_resolutionScale; >- ColorSpace m_colorSpace; >- PixelFormat m_pixelFormat; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/platform/graphics/PlatformImageBuffer.h b/Source/WebCore/platform/graphics/PlatformImageBuffer.h >index b05fa6516971d1767131d56a4639353ef94e4925..52dd83cc93d5553b379e587d4385d4f7805944bb 100644 >--- a/Source/WebCore/platform/graphics/PlatformImageBuffer.h >+++ b/Source/WebCore/platform/graphics/PlatformImageBuffer.h >@@ -75,5 +75,5 @@ using DisplayListAcceleratedImageBuffer = DisplayList::ImageBuffer<AcceleratedIm > } // namespace WebCore > > SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::AcceleratedImageBuffer) >- static bool isType(const WebCore::ImageBuffer& buffer) { return buffer.isAccelerated(); } >+ static bool isType(const WebCore::ImageBuffer& buffer) { return buffer.renderingMode() == WebCore::RenderingMode::Accelerated; } > SPECIALIZE_TYPE_TRAITS_END() >diff --git a/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.cpp b/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.cpp >index 12a5b60a2e9046a195892baf5dd7ed49633b3e74..b3bfd8127b87d1688eabb5cf4b2a71c3359cd2d0 100644 >--- a/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.cpp >+++ b/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.cpp >@@ -80,7 +80,7 @@ void ImageBufferCairoBackend::drawPattern(GraphicsContext& destContext, const Fl > } > > if (auto image = copyNativeImage(&destContext == &context() ? CopyBackingStore : DontCopyBackingStore)) >- Cairo::drawPattern(*destContext.platformContext(), image->platformImage().get(), m_logicalSize, destRect, srcRect, patternTransform, phase, options); >+ Cairo::drawPattern(*destContext.platformContext(), image->platformImage().get(), logicalSize(), destRect, srcRect, patternTransform, phase, options); > } > > void ImageBufferCairoBackend::clipToMask(GraphicsContext& destContext, const FloatRect& destRect) >diff --git a/Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp b/Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp >index 1cd0754b39143af429b46d5d78e451f0d1e074c3..bac02beb2b4a4558a4e94f2b99fca87ecb01042c 100644 >--- a/Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp >+++ b/Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp >@@ -79,16 +79,16 @@ void ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace(const std: > { > unsigned char* dataSrc = cairo_image_surface_get_data(m_surface.get()); > int stride = cairo_image_surface_get_stride(m_surface.get()); >- for (int y = 0; y < m_logicalSize.height(); ++y) { >+ for (int y = 0; y < logicalSize().height(); ++y) { > unsigned* row = reinterpret_cast_ptr<unsigned*>(dataSrc + stride * y); >- for (int x = 0; x < m_logicalSize.width(); x++) { >+ for (int x = 0; x < logicalSize().width(); x++) { > unsigned* pixel = row + x; > auto pixelComponents = unpremultiplied(asSRGBA(PackedColor::ARGB { *pixel })); > pixelComponents = { lookUpTable[pixelComponents.red], lookUpTable[pixelComponents.green], lookUpTable[pixelComponents.blue], pixelComponents.alpha }; > *pixel = PackedColor::ARGB { premultipliedCeiling(pixelComponents) }.value; > } > } >- cairo_surface_mark_dirty_rectangle(m_surface.get(), 0, 0, m_logicalSize.width(), m_logicalSize.height()); >+ cairo_surface_mark_dirty_rectangle(m_surface.get(), 0, 0, logicalSize().width(), logicalSize().height()); > } > > } // namespace WebCore >diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp b/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp >index 5017ba12c8b487b0ca06e543b1296365d6dd2b2b..950e9a7e6fec2bbaad72d467eeb66ea084def9a0 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp >+++ b/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp >@@ -79,8 +79,8 @@ void ImageBufferCGBackend::setupContext() const > { > // The initial CTM matches DisplayList::Recorder::clipToDrawingCommands()'s initial CTM. > context().scale(FloatSize(1, -1)); >- context().translate(0, -m_backendSize.height()); >- context().applyDeviceScaleFactor(m_resolutionScale); >+ context().translate(0, -backendSize().height()); >+ context().applyDeviceScaleFactor(resolutionScale()); > } > > static RetainPtr<CGImageRef> createCroppedImageIfNecessary(CGImageRef image, const IntSize& backendSize) >@@ -112,31 +112,31 @@ static RefPtr<Image> createBitmapImageAfterScalingIfNeeded(RefPtr<NativeImage>&& > RefPtr<Image> ImageBufferCGBackend::copyImage(BackingStoreCopy copyBehavior, PreserveResolution preserveResolution) const > { > RefPtr<NativeImage> image; >- if (m_resolutionScale == 1 || preserveResolution == PreserveResolution::Yes) >+ if (resolutionScale() == 1 || preserveResolution == PreserveResolution::Yes) > image = copyNativeImage(copyBehavior); > else > image = copyNativeImage(DontCopyBackingStore); >- return createBitmapImageAfterScalingIfNeeded(WTFMove(image), m_logicalSize, m_backendSize, m_resolutionScale, preserveResolution); >+ return createBitmapImageAfterScalingIfNeeded(WTFMove(image), logicalSize(), backendSize(), resolutionScale(), preserveResolution); > } > > RefPtr<Image> ImageBufferCGBackend::sinkIntoImage(PreserveResolution preserveResolution) > { >- return createBitmapImageAfterScalingIfNeeded(sinkIntoNativeImage(), m_logicalSize, m_backendSize, m_resolutionScale, preserveResolution); >+ return createBitmapImageAfterScalingIfNeeded(sinkIntoNativeImage(), logicalSize(), backendSize(), resolutionScale(), preserveResolution); > } > > void ImageBufferCGBackend::draw(GraphicsContext& destContext, const FloatRect& destRect, const FloatRect& srcRect, const ImagePaintingOptions& options) > { > FloatRect srcRectScaled = srcRect; >- srcRectScaled.scale(m_resolutionScale); >+ srcRectScaled.scale(resolutionScale()); > > if (auto image = copyNativeImage(&destContext == &context() ? CopyBackingStore : DontCopyBackingStore)) >- destContext.drawNativeImage(*image, m_backendSize, destRect, srcRectScaled, options); >+ destContext.drawNativeImage(*image, backendSize(), destRect, srcRectScaled, options); > } > > void ImageBufferCGBackend::drawPattern(GraphicsContext& destContext, const FloatRect& destRect, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, const FloatSize& spacing, const ImagePaintingOptions& options) > { > FloatRect adjustedSrcRect = srcRect; >- adjustedSrcRect.scale(m_resolutionScale); >+ adjustedSrcRect.scale(resolutionScale()); > > if (auto image = copyImage(&destContext == &context() ? CopyBackingStore : DontCopyBackingStore)) > image->drawPattern(destContext, destRect, adjustedSrcRect, patternTransform, phase, spacing, options); >@@ -161,7 +161,7 @@ void ImageBufferCGBackend::clipToMask(GraphicsContext& destContext, const FloatR > > AffineTransform ImageBufferCGBackend::baseTransform() const > { >- return AffineTransform(1, 0, 0, -1, 0, m_logicalSize.height()); >+ return AffineTransform(1, 0, 0, -1, 0, logicalSize().height()); > } > > RetainPtr<CFDataRef> ImageBufferCGBackend::toCFData(const String& mimeType, Optional<double> quality, PreserveResolution preserveResolution) const >@@ -190,7 +190,7 @@ RetainPtr<CFDataRef> ImageBufferCGBackend::toCFData(const String& mimeType, Opti > return nullptr; > > image = adoptCF(CGImageCreate(pixelArrayDimensions.width(), pixelArrayDimensions.height(), 8, 32, 4 * pixelArrayDimensions.width(), sRGBColorSpaceRef(), kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast, dataProvider.get(), 0, false, kCGRenderingIntentDefault)); >- } else if (m_resolutionScale == 1 || preserveResolution == PreserveResolution::Yes) { >+ } else if (resolutionScale() == 1 || preserveResolution == PreserveResolution::Yes) { > image = copyNativeImage(CopyBackingStore)->platformImage(); > image = createCroppedImageIfNecessary(image.get(), backendSize()); > } else { >diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.cpp b/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.cpp >index f218f27f2f53c5a4adbb6a5aedc3c49e48cd63a4..2e6224302eef20c0fe1e2db24bd88a7da9557c59 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.cpp >+++ b/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.cpp >@@ -39,11 +39,11 @@ namespace WebCore { > > WTF_MAKE_ISO_ALLOCATED_IMPL(ImageBufferCGBitmapBackend); > >-std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, CGColorSpaceRef cgColorSpace, PixelFormat pixelFormat, const HostWindow*) >+std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(const Parameters& parameters, CGColorSpaceRef cgColorSpace, const HostWindow*) > { >- ASSERT(pixelFormat == PixelFormat::BGRA8); >+ ASSERT(parameters.pixelFormat == PixelFormat::BGRA8); > >- IntSize backendSize = calculateBackendSize(size, resolutionScale); >+ IntSize backendSize = calculateBackendSize(parameters.logicalSize, parameters.resolutionScale); > if (backendSize.isEmpty()) > return nullptr; > >@@ -70,24 +70,24 @@ std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(c > > auto dataProvider = adoptCF(CGDataProviderCreateWithData(0, data, numBytes, releaseImageData)); > >- return std::unique_ptr<ImageBufferCGBitmapBackend>(new ImageBufferCGBitmapBackend(size, backendSize, resolutionScale, colorSpace, pixelFormat, data, WTFMove(dataProvider), WTFMove(context))); >+ return std::unique_ptr<ImageBufferCGBitmapBackend>(new ImageBufferCGBitmapBackend(parameters, backendSize, data, WTFMove(dataProvider), WTFMove(context))); > } > >-std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(const FloatSize& size, const GraphicsContext& context) >+std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(const Parameters& parameters, const GraphicsContext& context) > { > if (auto cgColorSpace = contextColorSpace(context)) >- return ImageBufferCGBitmapBackend::create(size, 1, ColorSpace::SRGB, cgColorSpace.get(), PixelFormat::BGRA8, nullptr); >- >- return ImageBufferCGBitmapBackend::create(size, 1, ColorSpace::SRGB, PixelFormat::BGRA8, nullptr); >+ return ImageBufferCGBitmapBackend::create(parameters, cgColorSpace.get(), nullptr); >+ >+ return ImageBufferCGBitmapBackend::create(parameters, nullptr); > } > >-std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, const HostWindow* hostWindow) >+std::unique_ptr<ImageBufferCGBitmapBackend> ImageBufferCGBitmapBackend::create(const Parameters& parameters, const HostWindow* hostWindow) > { >- return ImageBufferCGBitmapBackend::create(size, resolutionScale, colorSpace, cachedCGColorSpace(colorSpace), pixelFormat, hostWindow); >+ return ImageBufferCGBitmapBackend::create(parameters, cachedCGColorSpace(parameters.colorSpace), hostWindow); > } > >-ImageBufferCGBitmapBackend::ImageBufferCGBitmapBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, void* data, RetainPtr<CGDataProviderRef>&& dataProvider, std::unique_ptr<GraphicsContext>&& context) >- : ImageBufferCGBackend(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat) >+ImageBufferCGBitmapBackend::ImageBufferCGBitmapBackend(const Parameters& parameters, const IntSize& backendSize, void* data, RetainPtr<CGDataProviderRef>&& dataProvider, std::unique_ptr<GraphicsContext>&& context) >+ : ImageBufferCGBackend(parameters, backendSize) > , m_data(data) > , m_dataProvider(WTFMove(dataProvider)) > , m_context(WTFMove(context)) >@@ -112,7 +112,7 @@ RefPtr<NativeImage> ImageBufferCGBitmapBackend::copyNativeImage(BackingStoreCopy > case DontCopyBackingStore: > return NativeImage::create(adoptCF(CGImageCreate( > m_backendSize.width(), m_backendSize.height(), 8, 32, bytesPerRow(), >- cachedCGColorSpace(m_colorSpace), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, m_dataProvider.get(), >+ cachedCGColorSpace(colorSpace()), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, m_dataProvider.get(), > 0, true, kCGRenderingIntentDefault))); > } > >diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.h b/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.h >index e92c92f5d50fde57aaa3ca5c2ff29df08b864d29..2b63fa8db11e4b2d9123b992d91098844912358e 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.h >+++ b/Source/WebCore/platform/graphics/cg/ImageBufferCGBitmapBackend.h >@@ -36,9 +36,9 @@ class ImageBufferCGBitmapBackend : public ImageBufferCGBackend { > WTF_MAKE_ISO_ALLOCATED(ImageBufferCGBitmapBackend); > WTF_MAKE_NONCOPYABLE(ImageBufferCGBitmapBackend); > public: >- static std::unique_ptr<ImageBufferCGBitmapBackend> create(const FloatSize&, float resolutionScale, ColorSpace, CGColorSpaceRef, PixelFormat, const HostWindow*); >- static std::unique_ptr<ImageBufferCGBitmapBackend> create(const FloatSize&, float resolutionScale, ColorSpace, PixelFormat, const HostWindow*); >- static std::unique_ptr<ImageBufferCGBitmapBackend> create(const FloatSize&, const GraphicsContext&); >+ static std::unique_ptr<ImageBufferCGBitmapBackend> create(const Parameters&, CGColorSpaceRef, const HostWindow*); >+ static std::unique_ptr<ImageBufferCGBitmapBackend> create(const Parameters&, const HostWindow*); >+ static std::unique_ptr<ImageBufferCGBitmapBackend> create(const Parameters&, const GraphicsContext&); > > GraphicsContext& context() const override; > >@@ -52,7 +52,7 @@ public: > static constexpr bool isOriginAtUpperLeftCorner = true; > > private: >- ImageBufferCGBitmapBackend(const FloatSize& logicalSize, const IntSize& physicalSize, float resolutionScale, ColorSpace, PixelFormat, void* data, RetainPtr<CGDataProviderRef>&&, std::unique_ptr<GraphicsContext>&&); >+ ImageBufferCGBitmapBackend(const Parameters&, const IntSize& backendSize, void* data, RetainPtr<CGDataProviderRef>&&, std::unique_ptr<GraphicsContext>&&); > > void* m_data; > RetainPtr<CGDataProviderRef> m_dataProvider; >diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp b/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp >index ad3ff1d79772037640e2d69954128860b7748c36..749dc437f0584bef44c7210a5cfa98de1a0f7f07 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp >+++ b/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp >@@ -64,13 +64,13 @@ RetainPtr<CGColorSpaceRef> ImageBufferIOSurfaceBackend::contextColorSpace(const > return ImageBufferCGBackend::contextColorSpace(context); > } > >-std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, CGColorSpaceRef cgColorSpace, PixelFormat pixelFormat, const HostWindow* hostWindow) >+std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create(const Parameters& parameters, CGColorSpaceRef cgColorSpace, const HostWindow* hostWindow) > { >- IntSize backendSize = calculateBackendSize(size, resolutionScale); >+ IntSize backendSize = calculateBackendSize(parameters.logicalSize, parameters.resolutionScale); > if (backendSize.isEmpty()) > return nullptr; > >- auto surface = IOSurface::create(backendSize, backendSize, cgColorSpace, IOSurface::formatForPixelFormat(pixelFormat)); >+ auto surface = IOSurface::create(backendSize, backendSize, cgColorSpace, IOSurface::formatForPixelFormat(parameters.pixelFormat)); > if (!surface) > return nullptr; > >@@ -80,24 +80,24 @@ std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create > > CGContextClearRect(cgContext.get(), FloatRect(FloatPoint::zero(), backendSize)); > >- return makeUnique<ImageBufferIOSurfaceBackend>(size, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(surface)); >+ return makeUnique<ImageBufferIOSurfaceBackend>(parameters, backendSize, WTFMove(surface)); > } > >-std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create(const FloatSize& size, const GraphicsContext& context) >+std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create(const Parameters& parameters, const GraphicsContext& context) > { > if (auto cgColorSpace = contextColorSpace(context)) >- return ImageBufferIOSurfaceBackend::create(size, 1, ColorSpace::SRGB, cgColorSpace.get(), PixelFormat::BGRA8, nullptr); >- >- return ImageBufferIOSurfaceBackend::create(size, 1, ColorSpace::SRGB, PixelFormat::BGRA8, nullptr); >+ return ImageBufferIOSurfaceBackend::create(parameters, cgColorSpace.get(), nullptr); >+ >+ return ImageBufferIOSurfaceBackend::create(parameters, nullptr); > } > >-std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, const HostWindow* hostWindow) >+std::unique_ptr<ImageBufferIOSurfaceBackend> ImageBufferIOSurfaceBackend::create(const Parameters& parameters, const HostWindow* hostWindow) > { >- return ImageBufferIOSurfaceBackend::create(size, resolutionScale, colorSpace, cachedCGColorSpace(colorSpace), pixelFormat, hostWindow); >+ return ImageBufferIOSurfaceBackend::create(parameters, cachedCGColorSpace(parameters.colorSpace), hostWindow); > } > >-ImageBufferIOSurfaceBackend::ImageBufferIOSurfaceBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, std::unique_ptr<IOSurface>&& surface) >- : ImageBufferCGBackend(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat) >+ImageBufferIOSurfaceBackend::ImageBufferIOSurfaceBackend(const Parameters& parameters, const IntSize& backendSize, std::unique_ptr<IOSurface>&& surface) >+ : ImageBufferCGBackend(parameters, backendSize) > , m_surface(WTFMove(surface)) > { > ASSERT(m_surface); >@@ -148,7 +148,7 @@ RefPtr<NativeImage> ImageBufferIOSurfaceBackend::sinkIntoNativeImage() > void ImageBufferIOSurfaceBackend::drawConsuming(GraphicsContext& destContext, const FloatRect& destRect, const FloatRect& srcRect, const ImagePaintingOptions& options) > { > FloatRect adjustedSrcRect = srcRect; >- adjustedSrcRect.scale(m_resolutionScale); >+ adjustedSrcRect.scale(resolutionScale()); > > if (auto image = sinkIntoNativeImage()) > destContext.drawNativeImage(*image, m_backendSize, destRect, adjustedSrcRect, options); >diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h b/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h >index de982111e52c12edb08dc788b50ecefb36507650..f1e2d94f56a5ba49037c8e5c354ac82e60e31a3d 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h >+++ b/Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h >@@ -39,11 +39,11 @@ class WEBCORE_EXPORT ImageBufferIOSurfaceBackend : public ImageBufferCGBackend { > public: > static IntSize calculateBackendSize(const FloatSize& logicalSize, float resolutionScale); > >- static std::unique_ptr<ImageBufferIOSurfaceBackend> create(const FloatSize&, float resolutionScale, ColorSpace, CGColorSpaceRef, PixelFormat, const HostWindow*); >- static std::unique_ptr<ImageBufferIOSurfaceBackend> create(const FloatSize&, float resolutionScale, ColorSpace, PixelFormat, const HostWindow*); >- static std::unique_ptr<ImageBufferIOSurfaceBackend> create(const FloatSize&, const GraphicsContext&); >+ static std::unique_ptr<ImageBufferIOSurfaceBackend> create(const Parameters&, CGColorSpaceRef, const HostWindow*); >+ static std::unique_ptr<ImageBufferIOSurfaceBackend> create(const Parameters&, const HostWindow*); >+ static std::unique_ptr<ImageBufferIOSurfaceBackend> create(const Parameters&, const GraphicsContext&); > >- ImageBufferIOSurfaceBackend(const FloatSize& logicalSize, const IntSize& physicalSize, float resolutionScale, ColorSpace, PixelFormat, std::unique_ptr<IOSurface>&&); >+ ImageBufferIOSurfaceBackend(const Parameters&, const IntSize& backendSize, std::unique_ptr<IOSurface>&&); > > GraphicsContext& context() const override; > void flushContext() override; >@@ -69,7 +69,7 @@ public: > void releaseBufferToPool() override; > > static constexpr bool isOriginAtUpperLeftCorner = true; >- static constexpr bool isAccelerated = true; >+ static constexpr RenderingMode renderingMode = RenderingMode::Accelerated; > > protected: > static RetainPtr<CGColorSpaceRef> contextColorSpace(const GraphicsContext&); >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayList.h b/Source/WebCore/platform/graphics/displaylists/DisplayList.h >index 26fc973072112730393e2dcbc87d0c6b9ca54258..16b197f9ee2d28dbe921d930943d430461dfcd86 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayList.h >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayList.h >@@ -33,7 +33,6 @@ > #include <wtf/FastMalloc.h> > #include <wtf/HashSet.h> > #include <wtf/Noncopyable.h> >-#include <wtf/ObjectIdentifier.h> > #include <wtf/Vector.h> > #include <wtf/text/WTFString.h> > >@@ -45,9 +44,6 @@ namespace WebCore { > > namespace DisplayList { > >-enum FlushIdentifierType { }; >-using FlushIdentifier = ObjectIdentifier<FlushIdentifierType>; >- > enum AsTextFlag { > None = 0, > IncludesPlatformOperations = 1 << 0, >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListFlushIdentifier.h b/Source/WebCore/platform/graphics/displaylists/DisplayListFlushIdentifier.h >new file mode 100644 >index 0000000000000000000000000000000000000000..9cf78168ebb7fc737b9b4a6cf8d53729f5a060ec >--- /dev/null >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListFlushIdentifier.h >@@ -0,0 +1,39 @@ >+/* >+ * 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 { >+ >+namespace DisplayList { >+ >+enum FlushIdentifierType { }; >+using FlushIdentifier = ObjectIdentifier<FlushIdentifierType>; >+ >+} // DisplayList >+ >+} // namespace WebCore >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h b/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h >index f5b223402aeb37728b7301fb667118a3b2e8b040..34311d52778eaf2370911d50262b87981ac61589 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h >@@ -34,6 +34,7 @@ namespace DisplayList { > template<typename BackendType> > class ImageBuffer : public ConcreteImageBuffer<BackendType> { > using BaseConcreteImageBuffer = ConcreteImageBuffer<BackendType>; >+ using BaseConcreteImageBuffer::logicalSize; > > public: > static auto create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, const HostWindow* hostWindow) >@@ -46,14 +47,15 @@ public: > return BaseConcreteImageBuffer::template create<ImageBuffer>(size, context, size); > } > >- ImageBuffer(std::unique_ptr<BackendType>&& dataBackend, const FloatSize& size) >- : BaseConcreteImageBuffer(WTFMove(dataBackend)) >+ ImageBuffer(std::unique_ptr<ImageBufferBackend::Parameters>&& parameters, std::unique_ptr<BackendType>&& dataBackend, const FloatSize& size) >+ : BaseConcreteImageBuffer(WTFMove(parameters), WTFMove(dataBackend)) > , m_drawingContext(size, initialDrawingContextCTM(size)) > { > } > >- ImageBuffer(const FloatSize& size, Recorder::Delegate* delegate = nullptr) >- : m_drawingContext(size, initialDrawingContextCTM(size), delegate) >+ ImageBuffer(std::unique_ptr<ImageBufferBackend::Parameters>&& parameters, Recorder::Delegate* delegate = nullptr) >+ : BaseConcreteImageBuffer(WTFMove(parameters)) >+ , m_drawingContext(logicalSize(), initialDrawingContextCTM(logicalSize()), delegate) > { > } > >diff --git a/Source/WebCore/platform/graphics/win/ImageBufferDirect2DBackend.cpp b/Source/WebCore/platform/graphics/win/ImageBufferDirect2DBackend.cpp >index 378aaf4c40c4e122acbe069432c7ad7ec209ed73..01d2e780285b11fec39b4cd26bf4cfff08073377 100644 >--- a/Source/WebCore/platform/graphics/win/ImageBufferDirect2DBackend.cpp >+++ b/Source/WebCore/platform/graphics/win/ImageBufferDirect2DBackend.cpp >@@ -171,7 +171,7 @@ static RefPtr<Image> createBitmapImageAfterScalingIfNeeded(ID2D1BitmapRenderTarg > RefPtr<Image> ImageBufferDirect2DBackend::copyImage(BackingStoreCopy copyBehavior, PreserveResolution preserveResolution) const > { > PlatformImagePtr image; >- if (m_resolutionScale == 1 || preserveResolution == PreserveResolution::Yes) >+ if (resolutionScale() == 1 || preserveResolution == PreserveResolution::Yes) > image = copyNativeImage(copyBehavior)->platformImage(); > else > image = copyNativeImage(DontCopyBackingStore)->platformImage(); >@@ -269,7 +269,7 @@ PlatformImagePtr ImageBufferDirect2DBackend::compatibleBitmap(ID2D1RenderTarget* > void ImageBufferDirect2DBackend::draw(GraphicsContext& destContext, const FloatRect& destRect, const FloatRect& srcRect, const ImagePaintingOptions& options) > { > FloatRect adjustedSrcRect = srcRect; >- adjustedSrcRect.scale(m_resolutionScale, m_resolutionScale); >+ adjustedSrcRect.scale(resolutionScale()); > > auto compatibleBitmap = compatibleBitmap(destContext.platformContext()->renderTarget()); > >@@ -283,7 +283,7 @@ void ImageBufferDirect2DBackend::draw(GraphicsContext& destContext, const FloatR > void ImageBufferDirect2DBackend::drawPattern(GraphicsContext& destContext, const FloatRect& destRect, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, const FloatSize& spacing, const ImagePaintingOptions& options) > { > FloatRect adjustedSrcRect = srcRect; >- adjustedSrcRect.scale(m_resolutionScale); >+ adjustedSrcRect.scale(resolutionScale()); > > if (auto image = copyImage(&destContext == &context() ? CopyBackingStore : DontCopyBackingStore)) > image->drawPattern(destContext, destRect, adjustedSrcRect, patternTransform, phase, spacing, options); >diff --git a/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h b/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h >index 5c7545bfe6692620d013fdc886d75ef39c81afdd..65021f003f155fe8d10b0acf62b7b7172d1a325b 100644 >--- a/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h >+++ b/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h >@@ -49,12 +49,12 @@ public: > return BaseConcreteImageBuffer::template create<RemoteImageBuffer>(size, resolutionScale, colorSpace, pixelFormat, nullptr, remoteRenderingBackend, renderingResourceIdentifier); > } > >- RemoteImageBuffer(std::unique_ptr<BackendType>&& backend, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) >- : BaseConcreteImageBuffer(WTFMove(backend), renderingResourceIdentifier) >+ RemoteImageBuffer(std::unique_ptr<WebCore::ImageBufferBackend::Parameters>&& parameters, std::unique_ptr<BackendType>&& backend, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) >+ : BaseConcreteImageBuffer(WTFMove(parameters), WTFMove(backend), renderingResourceIdentifier) > , m_remoteRenderingBackend(remoteRenderingBackend) > , m_renderingResourceIdentifier(renderingResourceIdentifier) > { >- m_remoteRenderingBackend.imageBufferBackendWasCreated(m_backend->logicalSize(), m_backend->backendSize(), m_backend->resolutionScale(), m_backend->colorSpace(), m_backend->pixelFormat(), m_backend->createImageBufferBackendHandle(), renderingResourceIdentifier); >+ m_remoteRenderingBackend.imageBufferBackendWasCreated(m_backend->backendSize(), m_backend->createImageBufferBackendHandle(), renderingResourceIdentifier); > } > > ~RemoteImageBuffer() >@@ -65,17 +65,6 @@ public: > context().restore(); > } > >- WebCore::DisplayList::ReplayResult submitDisplayList(const WebCore::DisplayList::DisplayList& displayList) >- { >- if (displayList.isEmpty()) >- return { }; >- >- const auto& imageBuffers = m_remoteRenderingBackend.remoteResourceCache().imageBuffers(); >- const auto& nativeImages = m_remoteRenderingBackend.remoteResourceCache().nativeImages(); >- WebCore::DisplayList::Replayer replayer { BaseConcreteImageBuffer::context(), displayList, &imageBuffers, &nativeImages, this }; >- return replayer.replay(); >- } >- > private: > bool apply(WebCore::DisplayList::ItemHandle item, WebCore::GraphicsContext& context) override > { >@@ -101,6 +90,17 @@ private: > return m_remoteRenderingBackend.applyMediaItem(item, context); > } > >+ void submitDisplayList(const WebCore::DisplayList::DisplayList& displayList) override >+ { >+ if (displayList.isEmpty()) >+ return; >+ >+ const auto& imageBuffers = m_remoteRenderingBackend.remoteResourceCache().imageBuffers(); >+ const auto& nativeImages = m_remoteRenderingBackend.remoteResourceCache().nativeImages(); >+ WebCore::DisplayList::Replayer replayer { BaseConcreteImageBuffer::context(), displayList, &imageBuffers, &nativeImages, this }; >+ replayer.replay(); >+ } >+ > RemoteRenderingBackend& m_remoteRenderingBackend; > WebCore::RenderingResourceIdentifier m_renderingResourceIdentifier; > }; >diff --git a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp >index f59c38724f8f62ee7802b920237f688473d7fbf9..2ca248cbce29afe956e012711ad6a1d67b70fa9e 100644 >--- a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp >+++ b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp >@@ -99,9 +99,9 @@ bool RemoteRenderingBackend::applyMediaItem(DisplayList::ItemHandle item, Graphi > return true; > } > >-void RemoteRenderingBackend::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, ImageBufferBackendHandle handle, RenderingResourceIdentifier renderingResourceIdentifier) >+void RemoteRenderingBackend::imageBufferBackendWasCreated(const IntSize& backendSize, ImageBufferBackendHandle handle, RenderingResourceIdentifier renderingResourceIdentifier) > { >- send(Messages::RemoteRenderingBackendProxy::ImageBufferBackendWasCreated(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(handle), renderingResourceIdentifier), m_renderingBackendIdentifier); >+ send(Messages::RemoteRenderingBackendProxy::ImageBufferBackendWasCreated(backendSize, WTFMove(handle), renderingResourceIdentifier), m_renderingBackendIdentifier); > } > > void RemoteRenderingBackend::didFlush(DisplayList::FlushIdentifier flushIdentifier, RenderingResourceIdentifier renderingResourceIdentifier) >@@ -148,10 +148,7 @@ void RemoteRenderingBackend::applyDisplayListsFromHandle(ImageBuffer& destinatio > return; > } > >- if (destination.isAccelerated()) >- static_cast<AcceleratedRemoteImageBuffer&>(destination).submitDisplayList(*displayList); >- else >- static_cast<UnacceleratedRemoteImageBuffer&>(destination).submitDisplayList(*displayList); >+ destination.submitDisplayList(*displayList); > > CheckedSize checkedOffset = offset; > checkedOffset += sizeToRead; >diff --git a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h >index 6406668fae05057e9df3264f575249489d705c78..efb9b122cba04f798c4a89948c241968a24621b9 100644 >--- a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h >+++ b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h >@@ -70,7 +70,7 @@ public: > bool applyMediaItem(WebCore::DisplayList::ItemHandle, WebCore::GraphicsContext&); > > // Messages to be sent. >- void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, ImageBufferBackendHandle, WebCore::RenderingResourceIdentifier); >+ void imageBufferBackendWasCreated(const WebCore::IntSize& backendSize, ImageBufferBackendHandle, WebCore::RenderingResourceIdentifier); > void didFlush(WebCore::DisplayList::FlushIdentifier, WebCore::RenderingResourceIdentifier); > > void setNextItemBufferToRead(WebCore::DisplayList::ItemBufferIdentifier); >diff --git a/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm b/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm >index ef94c6b0205043d371bf0f9696c8d8ca636c0125..5f44a39bc0c174256d67499aba5f340bbf3e7e71 100644 >--- a/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm >+++ b/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm >@@ -315,8 +315,7 @@ bool RemoteLayerBackingStore::display() > > m_layer->owner()->platformCALayerLayerDidDisplay(m_layer); > >- // FIXME: This method has a weird name. This is "submit work". >- m_frontBuffer.imageBuffer->flushDrawingContextAndCommit(); >+ m_frontBuffer.imageBuffer->submitDrawingContext(); > > m_frontBufferFlusher = m_frontBuffer.imageBuffer->createFlusher(); > >diff --git a/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp b/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp >index 855c894966c587bb0e6aec5119de4b9445087d4b..cac5672bd8040f3e52b66ed30c62df661c453e1b 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp >+++ b/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp >@@ -43,17 +43,17 @@ using namespace WebCore; > > WTF_MAKE_ISO_ALLOCATED_IMPL(ImageBufferShareableBitmapBackend); > >-std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, const HostWindow*) >+std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBackend::create(const Parameters& parameters, const HostWindow*) > { >- ASSERT(pixelFormat == PixelFormat::BGRA8); >+ ASSERT(parameters.pixelFormat == PixelFormat::BGRA8); > >- IntSize backendSize = calculateBackendSize(size, resolutionScale); >+ IntSize backendSize = calculateBackendSize(parameters.logicalSize, parameters.resolutionScale); > if (backendSize.isEmpty()) > return nullptr; > > ShareableBitmap::Configuration configuration; > #if PLATFORM(COCOA) >- configuration.colorSpace = { cachedCGColorSpace(colorSpace) }; >+ configuration.colorSpace = { cachedCGColorSpace(parameters.colorSpace) }; > #endif > auto bitmap = ShareableBitmap::createShareable(backendSize, configuration); > if (!bitmap) >@@ -63,10 +63,10 @@ std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBac > if (!context) > return nullptr; > >- return makeUnique<ImageBufferShareableBitmapBackend>(size, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(bitmap), WTFMove(context)); >+ return makeUnique<ImageBufferShareableBitmapBackend>(parameters, backendSize, WTFMove(bitmap), WTFMove(context)); > } > >-std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBackend::create(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, ImageBufferBackendHandle handle) >+std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBackend::create(const Parameters& parameters, const IntSize& backendSize, ImageBufferBackendHandle handle) > { > if (!WTF::holds_alternative<ShareableBitmap::Handle>(handle)) { > ASSERT_NOT_REACHED(); >@@ -81,11 +81,11 @@ std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBac > if (!context) > return nullptr; > >- return makeUnique<ImageBufferShareableBitmapBackend>(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(bitmap), WTFMove(context)); >+ return makeUnique<ImageBufferShareableBitmapBackend>(parameters, backendSize, WTFMove(bitmap), WTFMove(context)); > } > >-ImageBufferShareableBitmapBackend::ImageBufferShareableBitmapBackend(const FloatSize& logicalSize, const IntSize& physicalSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, RefPtr<ShareableBitmap>&& bitmap, std::unique_ptr<GraphicsContext>&& context) >- : PlatformImageBufferBackend(logicalSize, physicalSize, resolutionScale, colorSpace, pixelFormat) >+ImageBufferShareableBitmapBackend::ImageBufferShareableBitmapBackend(const Parameters& parameters, const IntSize& backendSize, RefPtr<ShareableBitmap>&& bitmap, std::unique_ptr<GraphicsContext>&& context) >+ : PlatformImageBufferBackend(parameters, backendSize) > , m_bitmap(WTFMove(bitmap)) > , m_context(WTFMove(context)) > { >diff --git a/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h b/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h >index 0c7f047f8835e4b8d63c15f41ec92102e4585399..ea36076149a4e052fe2443957e0a3b9922f55359 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h >+++ b/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h >@@ -43,10 +43,10 @@ class ImageBufferShareableBitmapBackend : public WebCore::PlatformImageBufferBac > WTF_MAKE_ISO_ALLOCATED(ImageBufferShareableBitmapBackend); > WTF_MAKE_NONCOPYABLE(ImageBufferShareableBitmapBackend); > public: >- static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, const WebCore::HostWindow*); >- static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& internalSize, float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, ImageBufferBackendHandle); >+ static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const Parameters&, const WebCore::HostWindow*); >+ static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const Parameters&, const WebCore::IntSize& backendSize, ImageBufferBackendHandle); > >- ImageBufferShareableBitmapBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& physicalSize, float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, RefPtr<ShareableBitmap>&&, std::unique_ptr<WebCore::GraphicsContext>&&); >+ ImageBufferShareableBitmapBackend(const Parameters&, const WebCore::IntSize& backendSize, RefPtr<ShareableBitmap>&&, std::unique_ptr<WebCore::GraphicsContext>&&); > > ImageBufferBackendHandle createImageBufferBackendHandle() const; > >diff --git a/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h b/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h >index 05176783d5531bfe70f850bf2c149f78822d0e39..9aff088e37ca76a7f864ae7e42bbb7004f1f1523 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h >+++ b/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBufferProxy.h >@@ -37,14 +37,4 @@ using AcceleratedRemoteImageBufferProxy = RemoteImageBufferProxy<AcceleratedImag > > } // 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) >diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h b/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h >index 31cd02d1b0f21ede5822bf945bad46edef1eb37a..fcdef506d8267b84f33b57a8f9352dffce36f317 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h >+++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h >@@ -50,14 +50,16 @@ class RemoteImageBufferProxy : public WebCore::DisplayList::ImageBuffer<BackendT > using BaseDisplayListImageBuffer::m_backend; > using BaseDisplayListImageBuffer::m_drawingContext; > using BaseDisplayListImageBuffer::m_renderingResourceIdentifier; >+ using BaseDisplayListImageBuffer::resolutionScale; > > public: >- static RefPtr<RemoteImageBufferProxy> create(const WebCore::FloatSize& size, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::PixelFormat pixelFormat, RemoteRenderingBackendProxy& remoteRenderingBackendProxy) >+ static RefPtr<RemoteImageBufferProxy> create(const WebCore::FloatSize& size, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::PixelFormat pixelFormat, RemoteRenderingBackendProxy& remoteRenderingBackendProxy) > { > if (BackendType::calculateBackendSize(size, resolutionScale).isEmpty()) > return nullptr; > >- return adoptRef(new RemoteImageBufferProxy(size, renderingMode, resolutionScale, colorSpace, pixelFormat, remoteRenderingBackendProxy)); >+ auto parameters = std::unique_ptr<WebCore::ImageBufferBackend::Parameters>(new WebCore::ImageBufferBackend::Parameters({ size, resolutionScale, colorSpace, pixelFormat })); >+ return adoptRef(new RemoteImageBufferProxy(WTFMove(parameters), remoteRenderingBackendProxy)); > } > > ~RemoteImageBufferProxy() >@@ -69,27 +71,6 @@ public: > m_remoteRenderingBackendProxy->releaseRemoteResource(m_renderingResourceIdentifier); > } > >- void clearBackend() { m_backend = nullptr; } >- >- void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::PixelFormat pixelFormat, ImageBufferBackendHandle handle) >- { >- ASSERT(!m_backend); >- m_backend = BackendType::create(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(handle)); >- } >- >- void didFlush(WebCore::DisplayList::FlushIdentifier flushIdentifier) >- { >- auto locker = holdLock(m_receivedFlushIdentifierLock); >- m_receivedFlushIdentifier = flushIdentifier; >- m_receivedFlushIdentifierChangedCondition.notifyAll(); >- } >- >- const WebCore::FloatSize& size() const { return m_size; } >- WebCore::RenderingMode renderingMode() const { return m_renderingMode; } >- float resolutionScale() const final { return m_resolutionScale; } >- WebCore::ColorSpace colorSpace() const { return m_colorSpace; } >- WebCore::PixelFormat pixelFormat() const { return m_pixelFormat; } >- > ImageBufferBackendHandle createImageBufferBackendHandle() > { > ensureBackendCreated(); >@@ -113,14 +94,9 @@ public: > > protected: > friend class RemoteRenderingBackend; >- RemoteImageBufferProxy(const WebCore::FloatSize& size, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::PixelFormat pixelFormat, RemoteRenderingBackendProxy& remoteRenderingBackendProxy) >- : BaseDisplayListImageBuffer(size, this) >+ RemoteImageBufferProxy(std::unique_ptr<WebCore::ImageBufferBackend::Parameters>&& parameters, RemoteRenderingBackendProxy& remoteRenderingBackendProxy) >+ : BaseDisplayListImageBuffer(WTFMove(parameters), this) > , m_remoteRenderingBackendProxy(makeWeakPtr(remoteRenderingBackendProxy)) >- , m_size(size) >- , m_renderingMode(renderingMode) >- , m_resolutionScale(resolutionScale) >- , m_colorSpace(colorSpace) >- , m_pixelFormat(pixelFormat) > { > ASSERT(m_remoteRenderingBackendProxy); > m_remoteRenderingBackendProxy->remoteResourceCacheProxy().cacheImageBuffer(*this); >@@ -131,6 +107,13 @@ protected: > > bool hasPendingFlush() const { return m_sentFlushIdentifier != m_receivedFlushIdentifier; } > >+ void didFlush(WebCore::DisplayList::FlushIdentifier flushIdentifier) override >+ { >+ auto locker = holdLock(m_receivedFlushIdentifierLock); >+ m_receivedFlushIdentifier = flushIdentifier; >+ m_receivedFlushIdentifierChangedCondition.notifyAll(); >+ } >+ > void waitForDidFlushWithTimeout() > { > if (!m_remoteRenderingBackendProxy) >@@ -169,8 +152,8 @@ protected: > void putImageData(WebCore::AlphaPremultiplication inputFormat, const WebCore::ImageData& imageData, const WebCore::IntRect& srcRect, const WebCore::IntPoint& destPoint = { }, WebCore::AlphaPremultiplication destFormat = WebCore::AlphaPremultiplication::Premultiplied) override > { > // The math inside ImageData::create() doesn't agree with the math inside ImageBufferBackend::putImageData() about how m_resolutionScale interacts with the data in the ImageBuffer. >- // This means that putImageData() is only called when m_resolutionScale == 1. >- ASSERT_IMPLIES(m_backend, m_backend->resolutionScale() == 1); >+ // This means that putImageData() is only called when resolutionScale() == 1. >+ ASSERT(resolutionScale() == 1); > m_drawingContext.recorder().putImageData(inputFormat, imageData, srcRect, destPoint, destFormat); > } > >@@ -185,11 +168,11 @@ protected: > void flushDrawingContext() override > { > TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd); >- flushDrawingContextAndCommit(); >+ submitDrawingContext(); > waitForDidFlushWithTimeout(); > } > >- void flushDrawingContextAndCommit() override >+ void submitDrawingContext() override > { > if (!m_remoteRenderingBackendProxy) > return; >@@ -200,12 +183,12 @@ protected: > > m_sentFlushIdentifier = WebCore::DisplayList::FlushIdentifier::generate(); > displayList.template append<WebCore::DisplayList::FlushContext>(m_sentFlushIdentifier); >- m_remoteRenderingBackendProxy->submitDisplayList(displayList, m_renderingResourceIdentifier); >- m_itemCountInCurrentDisplayList = 0; >+ submitDisplayList(displayList); > displayList.clear(); >+ m_itemCountInCurrentDisplayList = 0; > } > >- void submitDisplayList(const WebCore::DisplayList::DisplayList& displayList) >+ void submitDisplayList(const WebCore::DisplayList::DisplayList& displayList) override > { > if (!m_remoteRenderingBackendProxy || displayList.isEmpty()) > return; >@@ -351,11 +334,6 @@ protected: > WebCore::DisplayList::FlushIdentifier m_receivedFlushIdentifier; > WeakPtr<RemoteRenderingBackendProxy> m_remoteRenderingBackendProxy; > size_t m_itemCountInCurrentDisplayList { 0 }; >- WebCore::FloatSize m_size; >- WebCore::RenderingMode m_renderingMode; >- float m_resolutionScale; >- WebCore::ColorSpace m_colorSpace; >- WebCore::PixelFormat m_pixelFormat; > }; > > template<typename BackendType> >diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp >index e52ca40735e979e387d83d14d27c4966178ecfc7..676c3c55d82137a9f48ce3468e7a1be0853735f1 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp >+++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp >@@ -70,24 +70,15 @@ void RemoteRenderingBackendProxy::connectToGPUProcess() > send(Messages::GPUConnectionToWebProcess::CreateRenderingBackend(m_renderingBackendIdentifier), 0); > } > >-template<typename T> >-static void recreateImageBuffer(RemoteRenderingBackendProxy& proxy, T& imageBuffer, RenderingResourceIdentifier resourceIdentifier, RenderingBackendIdentifier renderingBackendIdentifier) >-{ >- imageBuffer.clearBackend(); >- proxy.send(Messages::RemoteRenderingBackend::CreateImageBuffer(imageBuffer.size(), imageBuffer.renderingMode(), imageBuffer.resolutionScale(), imageBuffer.colorSpace(), imageBuffer.pixelFormat(), resourceIdentifier), renderingBackendIdentifier); >-} >- > void RemoteRenderingBackendProxy::reestablishGPUProcessConnection() > { > connectToGPUProcess(); > >- for (auto& pair : m_remoteResourceCacheProxy.imageBuffers()) { >- if (auto& baseImageBuffer = pair.value) { >- if (is<AcceleratedRemoteImageBufferProxy>(*baseImageBuffer)) >- recreateImageBuffer(*this, downcast<AcceleratedRemoteImageBufferProxy>(*baseImageBuffer), pair.key, m_renderingBackendIdentifier); >- else >- recreateImageBuffer(*this, downcast<UnacceleratedRemoteImageBufferProxy>(*baseImageBuffer), pair.key, m_renderingBackendIdentifier); >- } >+ for (auto& imageBuffer : m_remoteResourceCacheProxy.imageBuffers().values()) { >+ if (!imageBuffer) >+ continue; >+ send(Messages::RemoteRenderingBackend::CreateImageBuffer(imageBuffer->logicalSize(), imageBuffer->renderingMode(), imageBuffer->resolutionScale(), imageBuffer->colorSpace(), imageBuffer->pixelFormat(), imageBuffer->renderingResourceIdentifier()), m_renderingBackendIdentifier); >+ imageBuffer->clearBackend(); > } > } > >@@ -129,10 +120,10 @@ RefPtr<ImageBuffer> RemoteRenderingBackendProxy::createImageBuffer(const FloatSi > RefPtr<ImageBuffer> imageBuffer; > > if (renderingMode == RenderingMode::Accelerated) >- imageBuffer = AcceleratedRemoteImageBufferProxy::create(size, renderingMode, resolutionScale, colorSpace, pixelFormat, *this); >+ imageBuffer = AcceleratedRemoteImageBufferProxy::create(size, resolutionScale, colorSpace, pixelFormat, *this); > > if (!imageBuffer) >- imageBuffer = UnacceleratedRemoteImageBufferProxy::create(size, renderingMode, resolutionScale, colorSpace, pixelFormat, *this); >+ imageBuffer = UnacceleratedRemoteImageBufferProxy::create(size, resolutionScale, colorSpace, pixelFormat, *this); > > if (imageBuffer) { > send(Messages::RemoteRenderingBackend::CreateImageBuffer(size, renderingMode, resolutionScale, colorSpace, pixelFormat, imageBuffer->renderingResourceIdentifier()), m_renderingBackendIdentifier); >@@ -183,28 +174,22 @@ void RemoteRenderingBackendProxy::releaseRemoteResource(RenderingResourceIdentif > send(Messages::RemoteRenderingBackend::ReleaseRemoteResource(renderingResourceIdentifier), m_renderingBackendIdentifier); > } > >-void RemoteRenderingBackendProxy::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, ImageBufferBackendHandle handle, RenderingResourceIdentifier renderingResourceIdentifier) >+void RemoteRenderingBackendProxy::imageBufferBackendWasCreated(const IntSize& backendSize, ImageBufferBackendHandle handle, RenderingResourceIdentifier renderingResourceIdentifier) > { > auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(renderingResourceIdentifier); > if (!imageBuffer) > return; >- >- if (imageBuffer->isAccelerated()) >- downcast<AcceleratedRemoteImageBufferProxy>(*imageBuffer).createBackend(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(handle)); >+ >+ if (imageBuffer->renderingMode() == RenderingMode::Accelerated) >+ imageBuffer->setBackend(AcceleratedImageBufferShareableBackend::create(imageBuffer->parameters(), backendSize, WTFMove(handle))); > else >- downcast<UnacceleratedRemoteImageBufferProxy>(*imageBuffer).createBackend(logicalSize, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(handle)); >+ imageBuffer->setBackend(UnacceleratedImageBufferShareableBackend::create(imageBuffer->parameters(), backendSize, WTFMove(handle))); > } > > void RemoteRenderingBackendProxy::didFlush(DisplayList::FlushIdentifier flushIdentifier, RenderingResourceIdentifier renderingResourceIdentifier) > { >- auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(renderingResourceIdentifier); >- if (!imageBuffer) >- return; >- >- if (imageBuffer->isAccelerated()) >- downcast<AcceleratedRemoteImageBufferProxy>(*imageBuffer).didFlush(flushIdentifier); >- else >- downcast<UnacceleratedRemoteImageBufferProxy>(*imageBuffer).didFlush(flushIdentifier); >+ if (auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(renderingResourceIdentifier)) >+ imageBuffer->didFlush(flushIdentifier); > } > > void RemoteRenderingBackendProxy::updateReusableHandles() >diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h >index 95f8d2b412fb91df77c68f136b00786f024d7e26..98f84aad11baeb7b075dd22916950bf0e24af878 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h >+++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h >@@ -95,7 +95,7 @@ private: > void updateReusableHandles(); > > // Messages to be received. >- void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, ImageBufferBackendHandle, WebCore::RenderingResourceIdentifier); >+ void imageBufferBackendWasCreated(const WebCore::IntSize& backendSize, ImageBufferBackendHandle, WebCore::RenderingResourceIdentifier); > void didFlush(WebCore::DisplayList::FlushIdentifier, WebCore::RenderingResourceIdentifier); > > RemoteResourceCacheProxy m_remoteResourceCacheProxy { *this }; >diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in >index 920de3f777540164051ff51cd21b50559854f844..5222f4d4053cc287ed3b220455603cfe4edd4bc5 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in >+++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in >@@ -23,7 +23,7 @@ > #if ENABLE(GPU_PROCESS) > > messages -> RemoteRenderingBackendProxy NotRefCounted { >- ImageBufferBackendWasCreated(WebCore::FloatSize logicalSize, WebCore::IntSize backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, enum:uint8_t WebCore::PixelFormat pixelFormat, WebKit::ImageBufferBackendHandle handle, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) >+ ImageBufferBackendWasCreated(WebCore::IntSize backendSize, WebKit::ImageBufferBackendHandle handle, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) > DidFlush(WebCore::DisplayList::FlushIdentifier flushIdentifier, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) > } > >diff --git a/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp b/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp >index 51627c5edd891b94f36391c0ab4c2808c680beff..eec288fbdad2c10b4fe32fae97e7ef31de5820dd 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp >+++ b/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp >@@ -37,13 +37,13 @@ using namespace WebCore; > > WTF_MAKE_ISO_ALLOCATED_IMPL(ImageBufferShareableIOSurfaceBackend); > >-std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurfaceBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, const HostWindow*) >+std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurfaceBackend::create(const Parameters& parameters, const HostWindow*) > { >- IntSize backendSize = calculateBackendSize(size, resolutionScale); >+ IntSize backendSize = calculateBackendSize(parameters.logicalSize, parameters.resolutionScale); > if (backendSize.isEmpty()) > return nullptr; > >- auto surface = IOSurface::create(backendSize, backendSize, cachedCGColorSpace(colorSpace), IOSurface::formatForPixelFormat(pixelFormat)); >+ auto surface = IOSurface::create(backendSize, backendSize, cachedCGColorSpace(parameters.colorSpace), IOSurface::formatForPixelFormat(parameters.pixelFormat)); > if (!surface) > return nullptr; > >@@ -53,21 +53,21 @@ std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurf > > CGContextClearRect(cgContext.get(), FloatRect(FloatPoint::zero(), backendSize)); > >- return makeUnique<ImageBufferShareableIOSurfaceBackend>(size, backendSize, resolutionScale, colorSpace, pixelFormat, WTFMove(surface)); >+ return makeUnique<ImageBufferShareableIOSurfaceBackend>(parameters, backendSize, WTFMove(surface)); > } > >-std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurfaceBackend::create(const FloatSize& logicalSize, const IntSize& internalSize, float resolutionScale, ColorSpace colorSpace, PixelFormat pixelFormat, ImageBufferBackendHandle handle) >+std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurfaceBackend::create(const Parameters& parameters, const IntSize& backendSize, ImageBufferBackendHandle handle) > { > if (!WTF::holds_alternative<MachSendRight>(handle)) { > ASSERT_NOT_REACHED(); > return nullptr; > } > >- auto surface = IOSurface::createFromSendRight(WTFMove(WTF::get<MachSendRight>(handle)), cachedCGColorSpace(colorSpace)); >+ auto surface = IOSurface::createFromSendRight(WTFMove(WTF::get<MachSendRight>(handle)), cachedCGColorSpace(parameters.colorSpace)); > if (!surface) > return nullptr; > >- return makeUnique<ImageBufferShareableIOSurfaceBackend>(logicalSize, internalSize, resolutionScale, colorSpace, pixelFormat, WTFMove(surface)); >+ return makeUnique<ImageBufferShareableIOSurfaceBackend>(parameters, backendSize, WTFMove(surface)); > } > > ImageBufferBackendHandle ImageBufferShareableIOSurfaceBackend::createImageBufferBackendHandle() const >diff --git a/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h b/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h >index ed51624eb0aa1050e13bfa17ea34f0fe3c1fff6d..1ea46ae274eafb7642f06088d5a2af85ad6d0257 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h >+++ b/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h >@@ -39,8 +39,8 @@ class ImageBufferShareableIOSurfaceBackend : public WebCore::ImageBufferIOSurfac > WTF_MAKE_ISO_ALLOCATED(ImageBufferShareableIOSurfaceBackend); > WTF_MAKE_NONCOPYABLE(ImageBufferShareableIOSurfaceBackend); > public: >- static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, const WebCore::HostWindow*); >- static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& internalSize, float resolutionScale, WebCore::ColorSpace, WebCore::PixelFormat, ImageBufferBackendHandle); >+ static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const Parameters&, const WebCore::HostWindow*); >+ static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const Parameters&, const WebCore::IntSize& backendSize, ImageBufferBackendHandle); > > using WebCore::ImageBufferIOSurfaceBackend::ImageBufferIOSurfaceBackend; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
ews-feeder
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 219007
:
414293
|
414861
|
414879
|
414880
|
414885
|
414912
|
414935
|
415043
|
415045
|
415046
|
415050
|
415395
|
415434
|
415445