Diff
Modified: trunk/Source/WebCore/ChangeLog (276898 => 276899)
--- trunk/Source/WebCore/ChangeLog 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/ChangeLog 2021-05-03 15:02:50 UTC (rev 276899)
@@ -1,3 +1,89 @@
+2021-05-03 Sam Weinig <wei...@apple.com>
+
+ Remove default parameter values for color space and pixel format from ImageBuffer::create to make it clear everwhere we are explicitly requesting SRGB/BGRA8 buffers
+ https://bugs.webkit.org/show_bug.cgi?id=225288
+
+ Reviewed by Anders Carlsson.
+
+ To make it super clear exactly what type of ImageBuffers we are creating, this
+ removes the default parameters for the scale, color space and pixel format from
+ the ImageBuffer::create() functions.
+
+ This allows us to easily see exactly where we are creating 8-bit sRGB buffers
+ and potentially losing non-sRGB and wide (> 8-bit) source data. In practice, many
+ of these sites are wrong and should be updated to use a color space and pixel
+ format matching the source they are going to be copying/buffering.
+
+ I did not update the ImageBuffer::createCompatibleBuffer, as it is less clear what
+ to do about them, or what exactly is meant by "compatible", as it seems to be
+ inconsistent from one to the other.
+
+ Ultimately, if we want to make it easy to create an ImageBuffer that has the same
+ underlying characteristics of whatever a GraphicsContext is drawing to, we will need
+ to update GraphicsContext to be able to provide scale, color space and pixel format
+ information directly. This will probably require some new mechanism for representing
+ color space that can either be a DestinationColorSpace or a platform specific color
+ space object (e.g. CGColorSpaceRef).
+
+ * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
+ (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
+ * Modules/mediasession/MediaMetadata.cpp:
+ (WebCore::ArtworkImageLoader::notifyFinished):
+ * css/CSSFilterImageValue.cpp:
+ (WebCore::CSSFilterImageValue::image):
+ * html/ImageBitmap.cpp:
+ (WebCore::ImageBitmap::createImageBuffer):
+ * html/canvas/CanvasRenderingContext2DBase.cpp:
+ (WebCore::CanvasRenderingContext2DBase::createCompositingBuffer):
+ * html/canvas/ImageBitmapRenderingContext.cpp:
+ (WebCore::ImageBitmapRenderingContext::setOutputBitmap):
+ * html/canvas/WebGLRenderingContextBase.cpp:
+ (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
+ * html/shadow/MediaControlTextTrackContainerElement.cpp:
+ (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
+ * inspector/InspectorCanvas.cpp:
+ (WebCore::InspectorCanvas::indexForData):
+ (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
+ * page/FrameSnapshotting.cpp:
+ (WebCore::snapshotFrameRectWithClip):
+ * page/PageConsoleClient.cpp:
+ (WebCore::PageConsoleClient::screenshot):
+ * platform/graphics/BitmapImage.cpp:
+ (WebCore::BitmapImage::preTransformedNativeImageForCurrentFrame):
+ * platform/graphics/CrossfadeGeneratedImage.cpp:
+ (WebCore::CrossfadeGeneratedImage::drawPattern):
+ * platform/graphics/ImageBuffer.cpp:
+ (WebCore::ImageBuffer::createCompatibleBuffer):
+ * platform/graphics/ImageBuffer.h:
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ScratchBuffer::getScratchBuffer):
+ (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
+ (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
+ (WebCore::ShadowBlur::drawRectShadowWithTiling):
+ (WebCore::ShadowBlur::drawInsetShadowWithTiling):
+ (WebCore::ShadowBlur::drawShadowLayer):
+ * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
+ (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer):
+ * platform/graphics/filters/FilterEffect.cpp:
+ (WebCore::FilterEffect::imageBufferResult):
+ (WebCore::FilterEffect::convertImageDataToColorSpace):
+ (WebCore::FilterEffect::convertImageBufferToColorSpace):
+ (WebCore::FilterEffect::createImageBufferResult):
+ * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp:
+ (Nicosia::GCGLLayer::swapBuffersIfNeeded):
+ * platform/graphics/texmap/BitmapTexture.cpp:
+ (WebCore::BitmapTexture::updateContents):
+ * platform/mock/MockRealtimeVideoSource.cpp:
+ (WebCore::MockRealtimeVideoSource::imageBuffer const):
+ * rendering/CSSFilter.cpp:
+ (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
+ * rendering/shapes/Shape.cpp:
+ (WebCore::Shape::createRasterShape):
+ * rendering/svg/SVGRenderingContext.cpp:
+ (WebCore::SVGRenderingContext::createImageBuffer):
+ * svg/graphics/SVGImage.cpp:
+ (WebCore::SVGImage::nativeImage):
+
2021-05-03 Chris Lord <cl...@igalia.com>
Decoding an SVG off the main thread causes a crash
Modified: trunk/Source/WebCore/Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp (276898 => 276899)
--- trunk/Source/WebCore/Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -285,7 +285,7 @@
auto bitmapImage = BitmapImage::create();
bitmapImage->setData(WTFMove(bufferToSanitize), true);
- auto imageBuffer = ImageBuffer::create(bitmapImage->size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(bitmapImage->size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!imageBuffer) {
m_data = { nullString() };
return;
Modified: trunk/Source/WebCore/Modules/mediasession/MediaMetadata.cpp (276898 => 276899)
--- trunk/Source/WebCore/Modules/mediasession/MediaMetadata.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/Modules/mediasession/MediaMetadata.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -80,7 +80,7 @@
RefPtr<SharedBuffer> bufferToSanitize = m_cachedImage->image()->data();
auto bitmapImage = BitmapImage::create();
bitmapImage->setData(WTFMove(bufferToSanitize), true);
- auto imageBuffer = ImageBuffer::create(bitmapImage->size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(bitmapImage->size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!imageBuffer) {
m_callback(nullptr);
return;
Modified: trunk/Source/WebCore/css/CSSFilterImageValue.cpp (276898 => 276899)
--- trunk/Source/WebCore/css/CSSFilterImageValue.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/css/CSSFilterImageValue.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -116,7 +116,7 @@
// Transform Image into ImageBuffer.
// FIXME (149424): This buffer should not be unconditionally unaccelerated.
- auto texture = ImageBuffer::create(size, RenderingMode::Unaccelerated);
+ auto texture = ImageBuffer::create(size, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!texture)
return &Image::nullImage();
Modified: trunk/Source/WebCore/html/ImageBitmap.cpp (276898 => 276899)
--- trunk/Source/WebCore/html/ImageBitmap.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/html/ImageBitmap.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -89,7 +89,7 @@
}
// FIXME <https://webkit.org/b/218482> Enable worker based ImageBitmap and OffscreenCanvas drawing to use GPU Process rendering
- return ImageBuffer::create(size, renderingMode, resolutionScale);
+ return ImageBuffer::create(size, renderingMode, resolutionScale, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
}
void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, ImageBitmap::Source&& source, ImageBitmapOptions&& options, ImageBitmap::Promise&& promise)
Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp (276898 => 276899)
--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -1829,7 +1829,7 @@
RefPtr<ImageBuffer> CanvasRenderingContext2DBase::createCompositingBuffer(const IntRect& bufferRect)
{
- return ImageBuffer::create(bufferRect.size(), isAccelerated() ? RenderingMode::Accelerated : RenderingMode::Unaccelerated);
+ return ImageBuffer::create(bufferRect.size(), isAccelerated() ? RenderingMode::Accelerated : RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
}
void CanvasRenderingContext2DBase::compositeBuffer(ImageBuffer& buffer, const IntRect& bufferRect, CompositeOperator op)
Modified: trunk/Source/WebCore/html/canvas/ImageBitmapRenderingContext.cpp (276898 => 276899)
--- trunk/Source/WebCore/html/canvas/ImageBitmapRenderingContext.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/html/canvas/ImageBitmapRenderingContext.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -95,7 +95,7 @@
// only reason I can think of is toDataURL(), but that doesn't seem like
// a good enough argument to waste memory.
- canvas()->setImageBufferAndMarkDirty(ImageBuffer::create(FloatSize(canvas()->width(), canvas()->height()), bufferRenderingMode));
+ canvas()->setImageBufferAndMarkDirty(ImageBuffer::create(FloatSize(canvas()->width(), canvas()->height()), bufferRenderingMode, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8));
// 1.4. Set the output bitmap's origin-clean flag to true.
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (276898 => 276899)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -7623,7 +7623,7 @@
}
// FIXME (149423): Should this ImageBuffer be unconditionally unaccelerated?
- auto temp = ImageBuffer::create(size, RenderingMode::Unaccelerated);
+ auto temp = ImageBuffer::create(size, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!temp)
return nullptr;
ASSERT(m_buffers.size() > 0);
Modified: trunk/Source/WebCore/html/shadow/MediaControlTextTrackContainerElement.cpp (276898 => 276899)
--- trunk/Source/WebCore/html/shadow/MediaControlTextTrackContainerElement.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/html/shadow/MediaControlTextTrackContainerElement.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -418,7 +418,7 @@
IntRect paintingRect = IntRect(IntPoint(), layer->size());
// FIXME (149422): This buffer should not be unconditionally unaccelerated.
- auto buffer = ImageBuffer::create(paintingRect.size(), RenderingMode::Unaccelerated, deviceScaleFactor);
+ auto buffer = ImageBuffer::create(paintingRect.size(), RenderingMode::Unaccelerated, deviceScaleFactor, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!buffer)
return nullptr;
Modified: trunk/Source/WebCore/inspector/InspectorCanvas.cpp (276898 => 276899)
--- trunk/Source/WebCore/inspector/InspectorCanvas.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/inspector/InspectorCanvas.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -1143,7 +1143,7 @@
if (CachedImage* cachedImage = imageElement->cachedImage()) {
Image* image = cachedImage->image();
if (image && image != &Image::nullImage()) {
- auto imageBuffer = ImageBuffer::create(image->size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(image->size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
imageBuffer->context().drawImage(*image, FloatPoint(0, 0));
dataURL = imageBuffer->toDataURL("image/png");
}
@@ -1157,7 +1157,7 @@
unsigned videoWidth = videoElement->videoWidth();
unsigned videoHeight = videoElement->videoHeight();
- auto imageBuffer = ImageBuffer::create(FloatSize(videoWidth, videoHeight), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(FloatSize(videoWidth, videoHeight), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (imageBuffer) {
videoElement->paintCurrentFrameInContext(imageBuffer->context(), FloatRect(0, 0, videoWidth, videoHeight));
dataURL = imageBuffer->toDataURL("image/png");
@@ -1194,7 +1194,7 @@
if (auto* cachedImage = cssImageValue->image()) {
auto* image = cachedImage->image();
if (image && image != &Image::nullImage()) {
- auto imageBuffer = ImageBuffer::create(image->size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(image->size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
imageBuffer->context().drawImage(*image, FloatPoint(0, 0));
dataURL = imageBuffer->toDataURL("image/png");
}
@@ -1435,7 +1435,7 @@
{
auto& tileImage = canvasPattern.pattern().tileImage();
FloatRect rect = { { }, tileImage.size() };
- auto imageBuffer = ImageBuffer::create(tileImage.size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(tileImage.size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
imageBuffer->context().drawNativeImage(tileImage, tileImage.size(), rect, rect);
String repeat;
Modified: trunk/Source/WebCore/page/FrameSnapshotting.cpp (276898 => 276899)
--- trunk/Source/WebCore/page/FrameSnapshotting.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/page/FrameSnapshotting.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -111,7 +111,7 @@
if (options & SnapshotOptionsPaintWithIntegralScaleFactor)
scaleFactor = ceilf(scaleFactor);
- auto buffer = ImageBuffer::create(imageRect.size(), RenderingMode::Unaccelerated, scaleFactor);
+ auto buffer = ImageBuffer::create(imageRect.size(), RenderingMode::Unaccelerated, scaleFactor, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!buffer)
return nullptr;
buffer->context().translate(-imageRect.x(), -imageRect.y());
Modified: trunk/Source/WebCore/page/PageConsoleClient.cpp (276898 => 276899)
--- trunk/Source/WebCore/page/PageConsoleClient.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/page/PageConsoleClient.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -326,7 +326,7 @@
if (auto* cachedImage = imageElement.cachedImage()) {
auto* image = cachedImage->image();
if (image && image != &Image::nullImage()) {
- snapshot = ImageBuffer::create(image->size(), RenderingMode::Unaccelerated);
+ snapshot = ImageBuffer::create(image->size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
snapshot->context().drawImage(*image, FloatPoint(0, 0));
}
}
@@ -343,7 +343,7 @@
auto& videoElement = downcast<HTMLVideoElement>(*node);
unsigned videoWidth = videoElement.videoWidth();
unsigned videoHeight = videoElement.videoHeight();
- snapshot = ImageBuffer::create(FloatSize(videoWidth, videoHeight), RenderingMode::Unaccelerated);
+ snapshot = ImageBuffer::create(FloatSize(videoWidth, videoHeight), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
videoElement.paintCurrentFrameInContext(snapshot->context(), FloatRect(0, 0, videoWidth, videoHeight));
}
#endif
@@ -368,7 +368,7 @@
target = possibleTarget;
if (UNLIKELY(InspectorInstrumentation::hasFrontends())) {
auto sourceSize = imageData->size();
- if (auto imageBuffer = ImageBuffer::create(sourceSize, RenderingMode::Unaccelerated)) {
+ if (auto imageBuffer = ImageBuffer::create(sourceSize, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8)) {
IntRect sourceRect(IntPoint(), sourceSize);
imageBuffer->putImageData(AlphaPremultiplication::Unpremultiplied, *imageData, sourceRect);
dataURL = imageBuffer->toDataURL("image/png"_s, WTF::nullopt, PreserveResolution::Yes);
Modified: trunk/Source/WebCore/platform/graphics/BitmapImage.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/BitmapImage.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/BitmapImage.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -164,7 +164,7 @@
return image;
auto correctedSizeFloat = correctedSize ? FloatSize(correctedSize.value()) : size();
- auto buffer = ImageBuffer::create(correctedSizeFloat, RenderingMode::Unaccelerated);
+ auto buffer = ImageBuffer::create(correctedSizeFloat, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!buffer)
return image;
Modified: trunk/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -103,7 +103,7 @@
void CrossfadeGeneratedImage::drawPattern(GraphicsContext& context, const FloatRect& dstRect, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, const FloatSize& spacing, const ImagePaintingOptions& options)
{
- auto imageBuffer = ImageBuffer::create(size(), context.renderingMode());
+ auto imageBuffer = ImageBuffer::create(size(), context.renderingMode(), 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!imageBuffer)
return;
Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -73,19 +73,6 @@
return imageBuffer;
}
-RefPtr<ImageBuffer> ImageBuffer::create(const FloatSize& size, const GraphicsContext& context)
-{
- RefPtr<ImageBuffer> imageBuffer;
-
- if (context.renderingMode() == RenderingMode::Accelerated)
- imageBuffer = AcceleratedImageBuffer::create(size, context);
-
- if (!imageBuffer)
- imageBuffer = UnacceleratedImageBuffer::create(size, context);
-
- return imageBuffer;
-}
-
RefPtr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const FloatSize& size, const GraphicsContext& context)
{
if (size.isEmpty())
@@ -93,14 +80,20 @@
IntSize scaledSize = ImageBuffer::compatibleBufferSize(size, context);
- auto imageBuffer = ImageBuffer::create(scaledSize, context);
+ RefPtr<ImageBuffer> imageBuffer;
+
+ if (context.renderingMode() == RenderingMode::Accelerated)
+ imageBuffer = AcceleratedImageBuffer::create(scaledSize, context);
+
if (!imageBuffer)
+ imageBuffer = UnacceleratedImageBuffer::create(scaledSize, context);
+
+ if (!imageBuffer)
return nullptr;
// Set up a corresponding scale factor on the graphics context.
imageBuffer->context().scale(scaledSize / size);
return imageBuffer;
-
}
RefPtr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const FloatSize& size, DestinationColorSpace colorSpace, const GraphicsContext& context)
@@ -121,7 +114,7 @@
RefPtr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const FloatSize& size, float resolutionScale, DestinationColorSpace colorSpace, const GraphicsContext& context)
{
- return ImageBuffer::create(size, context.renderingMode(), resolutionScale, colorSpace);
+ return ImageBuffer::create(size, context.renderingMode(), resolutionScale, colorSpace, PixelFormat::BGRA8);
}
bool ImageBuffer::sizeNeedsClamping(const FloatSize& size)
Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.h (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/ImageBuffer.h 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.h 2021-05-03 15:02:50 UTC (rev 276899)
@@ -45,9 +45,8 @@
class ImageBuffer : public ThreadSafeRefCounted<ImageBuffer>, public CanMakeWeakPtr<ImageBuffer> {
public:
// Will return a null pointer on allocation failure.
- WEBCORE_EXPORT static RefPtr<ImageBuffer> create(const FloatSize&, RenderingMode, ShouldUseDisplayList, RenderingPurpose, float resolutionScale = 1, DestinationColorSpace = DestinationColorSpace::SRGB, PixelFormat = PixelFormat::BGRA8, const HostWindow* = nullptr);
- WEBCORE_EXPORT static RefPtr<ImageBuffer> create(const FloatSize&, RenderingMode, float resolutionScale = 1, DestinationColorSpace = DestinationColorSpace::SRGB, PixelFormat = PixelFormat::BGRA8, const HostWindow* = nullptr);
- static RefPtr<ImageBuffer> create(const FloatSize&, const GraphicsContext&);
+ WEBCORE_EXPORT static RefPtr<ImageBuffer> create(const FloatSize&, RenderingMode, ShouldUseDisplayList, RenderingPurpose, float resolutionScale, DestinationColorSpace, PixelFormat, const HostWindow* = nullptr);
+ WEBCORE_EXPORT static RefPtr<ImageBuffer> create(const FloatSize&, RenderingMode, float resolutionScale, DestinationColorSpace, PixelFormat, const HostWindow* = nullptr);
// Create an image buffer compatible with the context, with suitable resolution for drawing into the buffer and then into this context.
static RefPtr<ImageBuffer> createCompatibleBuffer(const FloatSize&, const GraphicsContext&);
Modified: trunk/Source/WebCore/platform/graphics/ShadowBlur.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/ShadowBlur.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/ShadowBlur.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -85,7 +85,7 @@
clearScratchBuffer();
// ShadowBlur is not used with accelerated drawing, so it's OK to make an unconditionally unaccelerated buffer.
- m_imageBuffer = ImageBuffer::create(roundedSize, RenderingMode::Unaccelerated, 1);
+ m_imageBuffer = ImageBuffer::create(roundedSize, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
return m_imageBuffer;
}
@@ -604,7 +604,7 @@
void ShadowBlur::drawRectShadowWithoutTiling(const AffineTransform&, const FloatRoundedRect& shadowedRect, const LayerImageProperties& layerImageProperties, const DrawBufferCallback& drawBuffer)
{
- auto layerImage = ImageBuffer::create(expandedIntSize(layerImageProperties.layerSize), RenderingMode::Unaccelerated, 1);
+ auto layerImage = ImageBuffer::create(expandedIntSize(layerImageProperties.layerSize), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!layerImage)
return;
@@ -632,7 +632,7 @@
void ShadowBlur::drawInsetShadowWithoutTiling(const AffineTransform&, const FloatRect& fullRect, const FloatRoundedRect& holeRect, const LayerImageProperties& layerImageProperties, const DrawBufferCallback& drawBuffer)
{
- auto layerImage = ImageBuffer::create(expandedIntSize(layerImageProperties.layerSize), RenderingMode::Unaccelerated, 1);
+ auto layerImage = ImageBuffer::create(expandedIntSize(layerImageProperties.layerSize), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!layerImage)
return;
@@ -705,7 +705,7 @@
#endif
if (!layerImageBuffer) {
- layerImageBuffer = ImageBuffer::create(templateSize, RenderingMode::Unaccelerated, 1);
+ layerImageBuffer = ImageBuffer::create(templateSize, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!layerImageBuffer)
return;
}
@@ -763,7 +763,7 @@
#endif
if (!layerImageBuffer) {
- layerImageBuffer = ImageBuffer::create(templateSize, RenderingMode::Unaccelerated, 1);
+ layerImageBuffer = ImageBuffer::create(templateSize, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!layerImageBuffer)
return;
}
@@ -933,7 +933,7 @@
adjustBlurRadius(transform);
- auto layerImage = ImageBuffer::create(expandedIntSize(layerImageProperties->layerSize), RenderingMode::Unaccelerated, 1);
+ auto layerImage = ImageBuffer::create(expandedIntSize(layerImageProperties->layerSize), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!layerImage)
return;
Modified: trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm 2021-05-03 15:02:50 UTC (rev 276899)
@@ -276,7 +276,7 @@
void FilterEffectRendererCoreImage::renderToImageBuffer(FilterEffect& lastEffect)
{
FloatSize clampedSize = ImageBuffer::clampedSize(lastEffect.absolutePaintRect().size());
- m_outputImageBuffer = ImageBuffer::create(clampedSize, RenderingMode::Accelerated, lastEffect.filter().filterScale(), lastEffect.resultColorSpace());
+ m_outputImageBuffer = ImageBuffer::create(clampedSize, RenderingMode::Accelerated, lastEffect.filter().filterScale(), lastEffect.resultColorSpace(), PixelFormat::BGRA8);
if (!m_outputImageBuffer) {
clearResult();
Modified: trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -273,7 +273,7 @@
if (m_imageBufferResult)
return m_imageBufferResult.get();
- m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), m_filter.renderingMode(), m_filter.filterScale(), m_resultColorSpace);
+ m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), m_filter.renderingMode(), m_filter.filterScale(), m_resultColorSpace, PixelFormat::BGRA8);
if (!m_imageBufferResult)
return nullptr;
@@ -439,7 +439,7 @@
destinationRect.scale(1 / m_filter.filterScale());
FloatSize clampedSize = ImageBuffer::clampedSize(destinationRect.size());
// Create an ImageBuffer to store incoming ImageData
- auto buffer = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), operatingColorSpace());
+ auto buffer = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), operatingColorSpace(), PixelFormat::BGRA8);
if (!buffer)
return nullptr;
buffer->putImageData(outputFormat, inputData, destinationRect);
@@ -450,7 +450,7 @@
{
FloatSize clampedSize = ImageBuffer::clampedSize(rect.size());
// Create an ImageBuffer with the correct color space and utilize CG to handle color space conversion
- auto convertedBuffer = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), targetColorSpace);
+ auto convertedBuffer = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), targetColorSpace, PixelFormat::BGRA8);
if (!convertedBuffer)
return nullptr;
// Color space conversion happens internally when drawing from one image buffer to another
@@ -554,7 +554,7 @@
return nullptr;
FloatSize clampedSize = ImageBuffer::clampedSize(m_absolutePaintRect.size());
- m_imageBufferResult = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), m_resultColorSpace);
+ m_imageBufferResult = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), m_resultColorSpace, PixelFormat::BGRA8);
return m_imageBufferResult.get();
}
Modified: trunk/Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -81,7 +81,7 @@
IntSize textureSize(m_context.m_currentWidth, m_context.m_currentHeight);
TextureMapperGL::Flags flags = m_context.contextAttributes().alpha ? TextureMapperGL::ShouldBlend : 0;
#if USE(ANGLE)
- auto imageBuffer = ImageBuffer::create(textureSize, RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(textureSize, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!imageBuffer)
return;
Modified: trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -38,7 +38,7 @@
{
// Making an unconditionally unaccelerated buffer here is OK because this code
// isn't used by any platforms that respect the accelerated bit.
- auto imageBuffer = ImageBuffer::create(targetRect.size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(targetRect.size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!imageBuffer)
return;
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (276898 => 276899)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -454,7 +454,7 @@
if (m_imageBuffer)
return m_imageBuffer.get();
- m_imageBuffer = ImageBuffer::create(captureSize(), RenderingMode::Unaccelerated);
+ m_imageBuffer = ImageBuffer::create(captureSize(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!m_imageBuffer)
return nullptr;
Modified: trunk/Source/WebCore/rendering/CSSFilter.cpp (276898 => 276899)
--- trunk/Source/WebCore/rendering/CSSFilter.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/rendering/CSSFilter.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -344,11 +344,11 @@
IntSize logicalSize { m_sourceDrawingRegion.size() };
if (!sourceImage() || sourceImage()->logicalSize() != logicalSize) {
#if USE(DIRECT2D)
- setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), &targetContext, filterScale()));
+ setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), &targetContext, filterScale(), DestinationColorSpace::SRGB, PixelFormat::BGRA8));
#else
UNUSED_PARAM(targetContext);
RenderingMode mode = m_filterRenderer ? RenderingMode::Accelerated : renderingMode();
- setSourceImage(ImageBuffer::create(logicalSize, mode, filterScale()));
+ setSourceImage(ImageBuffer::create(logicalSize, mode, filterScale(), DestinationColorSpace::SRGB, PixelFormat::BGRA8));
#endif
}
m_graphicsBufferAttached = true;
Modified: trunk/Source/WebCore/rendering/shapes/Shape.cpp (276898 => 276899)
--- trunk/Source/WebCore/rendering/shapes/Shape.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/rendering/shapes/Shape.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -181,7 +181,7 @@
IntRect marginRect = snappedIntRect(marginR);
auto intervals = makeUnique<RasterShapeIntervals>(marginRect.height(), -marginRect.y());
// FIXME (149420): This buffer should not be unconditionally unaccelerated.
- auto imageBuffer = ImageBuffer::create(imageRect.size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(imageRect.size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
auto createShape = [&]() {
auto rasterShape = makeUnique<RasterShape>(WTFMove(intervals), marginRect.size());
Modified: trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp (276898 => 276899)
--- trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -247,10 +247,10 @@
FloatSize clampedSize = ImageBuffer::clampedSize(paintRect.size(), scale);
#if USE(DIRECT2D)
- auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace);
+ auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace, PixelFormat::BGRA8);
#else
UNUSED_PARAM(context);
- auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace);
+ auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace, PixelFormat::BGRA8);
#endif
if (!imageBuffer)
return nullptr;
@@ -274,10 +274,10 @@
return nullptr;
#if USE(DIRECT2D)
- auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace);
+ auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace, PixelFormat::BGRA8);
#else
UNUSED_PARAM(context);
- auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace);
+ auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace, PixelFormat::BGRA8);
#endif
if (!imageBuffer)
return nullptr;
Modified: trunk/Source/WebCore/svg/graphics/SVGImage.cpp (276898 => 276899)
--- trunk/Source/WebCore/svg/graphics/SVGImage.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebCore/svg/graphics/SVGImage.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -217,7 +217,7 @@
if (!m_page)
return nullptr;
- auto imageBuffer = ImageBuffer::create(size(), RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create(size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!imageBuffer)
return nullptr;
Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (276898 => 276899)
--- trunk/Source/WebKitLegacy/mac/ChangeLog 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog 2021-05-03 15:02:50 UTC (rev 276899)
@@ -1,3 +1,14 @@
+2021-05-03 Sam Weinig <wei...@apple.com>
+
+ Remove default parameter values for color space and pixel format from ImageBuffer::create to make it clear everwhere we are explicitly requesting SRGB/BGRA8 buffers
+ https://bugs.webkit.org/show_bug.cgi?id=225288
+
+ Reviewed by Anders Carlsson.
+
+ * WebCoreSupport/WebContextMenuClient.mm:
+ (WebContextMenuClient::imageForCurrentSharingServicePickerItem):
+ Pass arguments explicitly that were previously default values.
+
2021-04-29 Darin Adler <da...@apple.com>
Extend SortedArrayMap further to work on case-folded strings, use in MIMETypeRegistry
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebContextMenuClient.mm (276898 => 276899)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebContextMenuClient.mm 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebContextMenuClient.mm 2021-05-03 15:02:50 UTC (rev 276899)
@@ -213,7 +213,7 @@
return nil;
// This is effectively a snapshot, and will be painted in an unaccelerated fashion in line with FrameSnapshotting.
- auto buffer = ImageBuffer::create(rect.size(), RenderingMode::Unaccelerated);
+ auto buffer = ImageBuffer::create(rect.size(), RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
if (!buffer)
return nil;
Modified: trunk/Tools/ChangeLog (276898 => 276899)
--- trunk/Tools/ChangeLog 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Tools/ChangeLog 2021-05-03 15:02:50 UTC (rev 276899)
@@ -1,3 +1,14 @@
+2021-05-03 Sam Weinig <wei...@apple.com>
+
+ Remove default parameter values for color space and pixel format from ImageBuffer::create to make it clear everwhere we are explicitly requesting SRGB/BGRA8 buffers
+ https://bugs.webkit.org/show_bug.cgi?id=225288
+
+ Reviewed by Anders Carlsson.
+
+ * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
+ (TestWebKitAPI::TEST):
+ Pass arguments explicitly that were previously default values.
+
2021-05-03 Aakash Jain <aakash_j...@apple.com>
Remove unused gtk_im_multicontext_get_slave from valgrind/suppressions.txt
Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp (276898 => 276899)
--- trunk/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp 2021-05-03 14:04:22 UTC (rev 276898)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp 2021-05-03 15:02:50 UTC (rev 276899)
@@ -69,7 +69,7 @@
}
{
- auto imageBuffer = ImageBuffer::create({ 100, 100 }, RenderingMode::Unaccelerated);
+ auto imageBuffer = ImageBuffer::create({ 100, 100 }, RenderingMode::Unaccelerated, 1, DestinationColorSpace::SRGB, PixelFormat::BGRA8);
ImageBufferHashMap imageBufferMap;
imageBufferMap.set(imageBufferIdentifier, imageBuffer.releaseNonNull());