We should use CARenderServerRenderLayerWithTransform for snapshots on iOS. This will let us own the backing IOSurface, which will let us make them purgeable and share more code with Mac.
Created attachment 261010 [details] Patch
Comment on attachment 261010 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=261010&action=review > Source/WebKit2/ChangeLog:11 > + This will let us own the backing IOSurface, which will let us make them > + purgeable and share more code with Mac. Except we're not going to make them purgeable for now and it's not clear that that is actually the plan so maybe we shouldn't mention that part :D > Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1110 > + auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(snapshotSize), WebCore::ColorSpaceDeviceRGB); We should do more perf testing here. > Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1111 > + CARenderServerRenderLayerWithTransform(MACH_PORT_NULL, self.layer.context.contextId, reinterpret_cast<uint64_t>(self.layer), surface->surface(), 0, 0, &transform); I wonder if we have to use some other function on older OSes, like _snapshotWhatever does? Probably. > Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:-44 > -#if PLATFORM(MAC) YAYYYYY
Also not sure I can really review this :D
(In reply to comment #2) > Comment on attachment 261010 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=261010&action=review > > > Source/WebKit2/ChangeLog:11 > > + This will let us own the backing IOSurface, which will let us make them > > + purgeable and share more code with Mac. > > Except we're not going to make them purgeable for now and it's not clear > that that is actually the plan so maybe we shouldn't mention that part :D > Fixed this! > > Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1110 > > + auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(snapshotSize), WebCore::ColorSpaceDeviceRGB); > > We should do more perf testing here. > Perf bot watcher has been alerted! > > Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1111 > > + CARenderServerRenderLayerWithTransform(MACH_PORT_NULL, self.layer.context.contextId, reinterpret_cast<uint64_t>(self.layer), surface->surface(), 0, 0, &transform); > > I wonder if we have to use some other function on older OSes, like > _snapshotWhatever does? Probably. > Tim and I considered this, and he changed his mind. > > Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:-44 > > -#if PLATFORM(MAC) > > YAYYYYY YAY. Thanks Tim! http://trac.webkit.org/changeset/189628
Build fix: http://trac.webkit.org/changeset/189630
Another build fix: http://trac.webkit.org/changeset/189635
More build fix: http://trac.webkit.org/changeset/189637