[webkit-changes] [WebKit/WebKit] 8382d4: [CG] A large PDFDocumentImage may be displayed pix...

Said Abou-Hallawa noreply at github.com
Mon Feb 6 17:18:03 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8382d4d3c6e3e691c2c1e1d0efc7d2a535898c93
      https://github.com/WebKit/WebKit/commit/8382d4d3c6e3e691c2c1e1d0efc7d2a535898c93
  Author: Said Abou-Hallawa <said at apple.com>
  Date:   2023-02-06 (Mon, 06 Feb 2023)

  Changed paths:
    M LayoutTests/fast/images/cached-clipped-pdf-expected.html
    M LayoutTests/fast/images/cached-clipped-pdf.html
    M LayoutTests/fast/images/displaced-non-cached-pdf.html
    M LayoutTests/fast/images/pdf-as-image-dest-rect-change-expected.txt
    M LayoutTests/fast/images/pdf-as-image-dest-rect-change.html
    M LayoutTests/fast/images/pdf-in-canvas.html
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    R Source/WebCore/page/PDFImageCachingPolicy.h
    M Source/WebCore/page/Settings.yaml
    M Source/WebCore/page/SettingsBase.h
    A Source/WebCore/platform/graphics/CachedSubimage.cpp
    A Source/WebCore/platform/graphics/CachedSubimage.h
    M Source/WebCore/platform/graphics/FloatRect.h
    M Source/WebCore/platform/graphics/GeneratedImage.h
    M Source/WebCore/platform/graphics/GraphicsContext.cpp
    M Source/WebCore/platform/graphics/Image.cpp
    M Source/WebCore/platform/graphics/Image.h
    M Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp
    M Source/WebCore/platform/graphics/cg/PDFDocumentImage.h
    M Source/WebCore/platform/mediastream/WebRTCProvider.h
    M Source/WebCore/rendering/RenderImage.cpp
    M Source/WebCore/svg/graphics/SVGImage.h
    M Source/WebCore/svg/graphics/SVGImageForContainer.h
    M Source/WebCore/testing/InternalSettings.cpp
    M Source/WebCore/testing/InternalSettings.h
    M Source/WebCore/testing/InternalSettings.idl
    M Source/WebCore/testing/Internals.cpp
    M Source/WebCore/testing/Internals.h
    M Source/WebCore/testing/Internals.idl

  Log Message:
  -----------
  [CG] A large PDFDocumentImage may be displayed pixelated
https://bugs.webkit.org/show_bug.cgi?id=245664
rdar://97254192

Reviewed by Simon Fraser.

Introduce a new class called CachedSubimage. This class will be responsible of
creating a local ImageBuffer, drawing the source rectangle of the Image to the
ImageBuffer then drawing this ImageBuffer to the destination GraphicsContext.

The geometry of CachedSubimage will be calculated such that the resolution of
the CachedSubimage ImageBuffer matches the effective resolution of the destination
retangle when it is drawm to GraphicsContext.

For GPU Process rendering, we have to draw the PDF image in WebProcess into a local
ImageBuffer, get a NativeImage from this ImageBuffer and then send it to GPUProcess.
CachedSubimage will be used to do this seemlessly for all PDFDocumentImages regardless
of their size.

If Image::shouldDrawFromCachedSubimage() is true, a CachedSubimage of the Image
with the current resolution will be generated. If the local ImageBuffer can't be
created and Image::mustDrawFromCachedSubimage() is true, a pixelated CachedSubimage
of the Image will be created. If the pixelated CachedSubimage could not be created,
the Image will not be drawn.

* LayoutTests/fast/images/cached-clipped-pdf-expected.html:
* LayoutTests/fast/images/cached-clipped-pdf.html:
* LayoutTests/fast/images/displaced-non-cached-pdf.html:
* LayoutTests/fast/images/pdf-as-image-dest-rect-change-expected.txt:
* LayoutTests/fast/images/pdf-as-image-dest-rect-change.html:
* LayoutTests/fast/images/pdf-in-canvas.html:
* Source/WebCore/Headers.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/page/PDFImageCachingPolicy.h: Removed.
* Source/WebCore/page/Settings.yaml:
* Source/WebCore/page/SettingsBase.h:
* Source/WebCore/platform/graphics/CachedSubimage.cpp: Added.
(WebCore::CachedSubimage::create):
(WebCore::calculateCachedSubimageSourceRect):
(WebCore::CachedSubimage::createCachedSubimage):
(WebCore::CachedSubimage::createPixelatedCachedSubimage):
(WebCore::CachedSubimage::CachedSubimage):
(WebCore::CachedSubimage::canBeUsed const):
(WebCore::CachedSubimage::draw):
* Source/WebCore/platform/graphics/CachedSubimage.h: Added.
* Source/WebCore/platform/graphics/FloatRect.h:
(WebCore::areEssentiallyEqual):
* Source/WebCore/platform/graphics/GeneratedImage.h:
* Source/WebCore/platform/graphics/GraphicsContext.cpp:
(WebCore::GraphicsContext::drawImage):
* Source/WebCore/platform/graphics/Image.cpp:
(WebCore::Image::drawCachedSubimage):
(WebCore::Image::destroyDecodedData):
* Source/WebCore/platform/graphics/Image.h:
(WebCore::Image::cachedSubimageCreateCountForTesting const):
(WebCore::Image::cachedSubimageDrawCountForTesting const):
(WebCore::Image::shouldDrawFromCachedSubimage const):
(WebCore::Image::mustDrawFromCachedSubimage const):
(WebCore::Image::drawCachedSubimage):
* Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:
(WebCore::PDFDocumentImage::decodedSizeChanged):
(WebCore::PDFDocumentImage::shouldDrawFromCachedSubimage const):
(WebCore::PDFDocumentImage::mustDrawFromCachedSubimage const):
(WebCore::PDFDocumentImage::draw):
(WebCore::PDFDocumentImage::destroyDecodedData):
(WebCore::PDFDocumentImage::createPDFDocument):
(WebCore::PDFDocumentImage::setPdfImageCachingPolicy): Deleted.
(WebCore::PDFDocumentImage::cacheParametersMatch const): Deleted.
(WebCore::transformContextForPainting): Deleted.
(WebCore::cachedImageRect): Deleted.
(WebCore::PDFDocumentImage::updateCachedImageIfNeeded): Deleted.
* Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:
* Source/WebCore/platform/mediastream/WebRTCProvider.h:
* Source/WebCore/rendering/RenderImage.cpp:
(WebCore::RenderImage::paintIntoRect):
* Source/WebCore/svg/graphics/SVGImage.h:
* Source/WebCore/svg/graphics/SVGImageForContainer.h:
* Source/WebCore/testing/InternalSettings.cpp:
(WebCore::InternalSettings::Backup::Backup):
(WebCore::InternalSettings::Backup::restoreTo):
(WebCore::InternalSettings::setStorageBlockingPolicy):
(WebCore::InternalSettings::setPDFImageCachingPolicy): Deleted.
* Source/WebCore/testing/InternalSettings.h:
* Source/WebCore/testing/InternalSettings.idl:
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::imageCachedSubimageCreateCount):
(WebCore::pdfDocumentImageFromImageElement): Deleted.
(WebCore::Internals::pdfDocumentCachingCount): Deleted.
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:

Canonical link: https://commits.webkit.org/259928@main




More information about the webkit-changes mailing list