[webkit-changes] [WebKit/WebKit] de7538: REGRESSION(268243 at main) ~9/21: MotionMark Images 1...

Kimmo Kinnunen noreply at github.com
Tue Sep 26 00:34:20 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: de7538e40c42ca6292df250a984e8737ca9baec6
      https://github.com/WebKit/WebKit/commit/de7538e40c42ca6292df250a984e8737ca9baec6
  Author: Kimmo Kinnunen <kkinnunen at apple.com>
  Date:   2023-09-26 (Tue, 26 Sep 2023)

  Changed paths:
    M Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp
    M Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.h

  Log Message:
  -----------
  REGRESSION(268243 at main) ~9/21: MotionMark Images 15% on multiple models
https://bugs.webkit.org/show_bug.cgi?id=262032
rdar://115907669

Reviewed by Matt Woodrow.

Before 268243 at main, call ImageBuffer::copyImageForDrawing() would do the work:
  if (can use ref)
    <do the work of create native image reference>
  else
    <do the work of copy native image>

After 268243 at main, the invocation was moved to GraphicsContext::nativeImageForDrawing():
  if (can use ref)
     imageBuffer->createNativeImageReference();
  else
     imageBuffer->copyNativeImage();

ImageBufferShareableMappedIOSurfaceBackend happened to have an
copyNativeImage() override that caused a difference in behavior.

Remove this code altogether, it was a leftover from eariler days
working around the issues of backbuffer reading from WP and updating
from GPUP. This code was not needed anymore. It is not correct, as
IOSurface seed cannot be used to determine read cache invalidation
accurately. The seed is updated during HW rasterization, which happens
at undefined time. The drawing commands might be on their way from WP
-> GPUP or from GPUP -> CG, and not yet issued at the HW rasterization
level.

The read cache is cleared when the drawing context, e.g.
RemoteDisplayListRecorderProxy detects the first modification after a
copyNativeImage() call.
RemoteImageBufferProxy::backingStoreWillChange() notification will
invalidate the read caches.

* Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.h:
* Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:

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




More information about the webkit-changes mailing list