Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d13ee4fd5e921444182d76a7a5d7a098174be736
      
https://github.com/WebKit/WebKit/commit/d13ee4fd5e921444182d76a7a5d7a098174be736
  Author: Simon Fraser <simon.fra...@apple.com>
  Date:   2024-02-27 (Tue, 27 Feb 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/TiledBacking.h
    M Source/WebCore/platform/graphics/ca/TileController.cpp
    M Source/WebCore/platform/graphics/ca/TileController.h
    M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/AsyncPDFRenderer.h
    M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/AsyncPDFRenderer.mm
    M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFPageCoverage.h
    M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFPageCoverage.mm
    M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm
    M Source/WebKit/WebProcess/WebPage/wc/GraphicsLayerWC.cpp

  Log Message:
  -----------
  [UnifiedPDF] After zooming, subframe/embed PDFs are messed up
https://bugs.webkit.org/show_bug.cgi?id=270211
rdar://123731682

Reviewed by Tim Horton.

The tile caching logic assumed that page scale factor (i.e. what scaleFactor() 
returns)
is the exact inverse of the scale factor that TiledBacking uses to map between 
tile coordinates
and painting coordinates.

This is true for main-frame PDFs, where the plugin takes over page scale, but 
for subframes,
page scale exists on some ancestor GraphicsLayer, yet the plugin's TiledBacking 
is aware
of this scale, because it's tracked through the GraphicsLayers. TileController 
accumulates the
scale on all ancestors in order to keep tiles at 512x512 in screen space.

So replace the uses of pageScaleFactor with `tilingScaleFactor` that we get 
from the TiledBacking.
This fixes computations that map from tile coordinates to painting coordinates, 
including fixing
blurry tiles, and missing tiles.

Also add a TiledBackingClient function that allows us to bump our configuration 
identifier when
the tiling scale factor changes, so we don't use stale tiles when the main 
frame is zoomed.

* Source/WebCore/platform/graphics/TiledBacking.h:
* Source/WebCore/platform/graphics/ca/TileController.cpp:
(WebCore::TileController::setContentsScale):
(WebCore::TileController::tilingScaleFactor const):
* Source/WebCore/platform/graphics/ca/TileController.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/AsyncPDFRenderer.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/AsyncPDFRenderer.mm:
(WebKit::AsyncPDFRenderer::tilingScaleFactorDidChange):
(WebKit::AsyncPDFRenderer::tileToPaintingTransform):
(WebKit::AsyncPDFRenderer::paintingToTileTransform):
(WebKit::AsyncPDFRenderer::enqueuePaintWithClip):
(WebKit::AsyncPDFRenderer::paintPDFIntoBuffer):
(WebKit::AsyncPDFRenderer::transferBufferToMainThread):
(WebKit::AsyncPDFRenderer::paintTilesForPage):
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFPageCoverage.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFPageCoverage.mm:
(WebKit::operator<<):
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:
(WebKit::UnifiedPDFPlugin::pageCoverageForRect const):
(WebKit::UnifiedPDFPlugin::paintPDFContent):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to