This is related to bug 65767 and bug 157966ز Flushing the IOSurface of the ImageBuffer after calling putImageData() is expensive. Drawing the ImageBuffer to a GraphicsContext causes the cached image of the IOSurface to be flushed. But we should flush the cached image when getting the CFData of the ImageBuffer. There is no direct command to flush the cached image of an IOSurface. We do this by drawing an empty rectangle to the context of the IOSurface.
Created attachment 404637 [details] Patch
Created attachment 404687 [details] Patch
This patch gives a 15% progression to the Images test on MacBookPro15,2. I would expect all macOS and iOS devices will see similar progression.
<rdar://problem/65735991>
Created attachment 404688 [details] Patch
Comment on attachment 404688 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=404688&action=review > Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h:71 > + mutable bool m_pendingFlushCachedImage { false }; I think this needs a better name. Maybe m_requiresDrawAfterPutImageData or something. It's not really a "pending" (that's used for "something is going to happen in future"). Can we set m_pendingFlushCachedImage to false whenever any other CG drawing takes place as well?
Created attachment 404732 [details] Patch
Comment on attachment 404688 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=404688&action=review >> Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.h:71 >> + mutable bool m_pendingFlushCachedImage { false }; > > I think this needs a better name. Maybe m_requiresDrawAfterPutImageData or something. It's not really a "pending" (that's used for "something is going to happen in future"). > > Can we set m_pendingFlushCachedImage to false whenever any other CG drawing takes place as well? Setting m_pendingFlushCachedImage after any other CG drawing takes place will be a little bit involving because we have to hack all the CanvasRenderingContext2D drawing functions. I think we can look at this later.
Committed r264615: <https://trac.webkit.org/changeset/264615> All reviewed patches have been landed. Closing bug and clearing flags on attachment 404732 [details].