- Revision
- 285114
- Author
- timothy_hor...@apple.com
- Date
- 2021-11-01 10:14:17 -0700 (Mon, 01 Nov 2021)
Log Message
Add a testing preference to replay CG display lists manually
https://bugs.webkit.org/show_bug.cgi?id=232566
Reviewed by Wenson Hsieh.
Source/WebKit:
* Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
* Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
(WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
* Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
(WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
* UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
* UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
(WebKit::RemoteLayerTreeHost::replayCGDisplayListsIntoBackingStore const):
Plumb the preference through to _setWKContents.
* UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h:
* UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm:
(-[WKCompositingLayer _setWKContents:withDisplayList:replayForTesting:]):
(-[WKCompositingLayer drawInContext:]):
(-[WKCompositingLayer _setWKContents:withDisplayList:]): Deleted.
If the preference is set, store the display list instead of setting it on the layer,
and call setNeedsDisplay, and then replay the display list in drawInContext.
Source/WTF:
* Scripts/Preferences/WebPreferencesInternal.yaml:
Modified Paths
Diff
Modified: trunk/Source/WTF/ChangeLog (285113 => 285114)
--- trunk/Source/WTF/ChangeLog 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WTF/ChangeLog 2021-11-01 17:14:17 UTC (rev 285114)
@@ -1,3 +1,12 @@
+2021-11-01 Tim Horton <timothy_hor...@apple.com>
+
+ Add a testing preference to replay CG display lists manually
+ https://bugs.webkit.org/show_bug.cgi?id=232566
+
+ Reviewed by Wenson Hsieh.
+
+ * Scripts/Preferences/WebPreferencesInternal.yaml:
+
2021-10-29 Yusuke Suzuki <ysuz...@apple.com>
[JSC] Clean up Baseline StructureStubInfo management
Modified: trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml (285113 => 285114)
--- trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml 2021-11-01 17:14:17 UTC (rev 285114)
@@ -621,6 +621,17 @@
WebCore:
default: true
+ReplayCGDisplayListsIntoBackingStore:
+ type: bool
+ humanReadableName: "CG Display Lists: Replay for Testing"
+ humanReadableDescription: "Replay CG Display Lists into layer contents for testing"
+ webcoreBinding: none
+ condition: ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
+ exposed: [ WebKit ]
+ defaultValue:
+ WebKit:
+ default: false
+
ResourceLoadSchedulingEnabled:
type: bool
humanReadableName: "Resource Load Scheduling"
@@ -788,7 +799,7 @@
UseCGDisplayListsForDOMRendering:
type: bool
- humanReadableName: "Use CG Display Lists for DOM rendering"
+ humanReadableName: "CG Display Lists: DOM Rendering"
humanReadableDescription: "Use CG Display Lists for DOM rendering"
webcoreBinding: none
condition: ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
Modified: trunk/Source/WebKit/ChangeLog (285113 => 285114)
--- trunk/Source/WebKit/ChangeLog 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/ChangeLog 2021-11-01 17:14:17 UTC (rev 285114)
@@ -1,3 +1,28 @@
+2021-11-01 Tim Horton <timothy_hor...@apple.com>
+
+ Add a testing preference to replay CG display lists manually
+ https://bugs.webkit.org/show_bug.cgi?id=232566
+
+ Reviewed by Wenson Hsieh.
+
+ * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
+ * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
+ (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
+ * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
+ (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
+ * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
+ * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
+ (WebKit::RemoteLayerTreeHost::replayCGDisplayListsIntoBackingStore const):
+ Plumb the preference through to _setWKContents.
+
+ * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h:
+ * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm:
+ (-[WKCompositingLayer _setWKContents:withDisplayList:replayForTesting:]):
+ (-[WKCompositingLayer drawInContext:]):
+ (-[WKCompositingLayer _setWKContents:withDisplayList:]): Deleted.
+ If the preference is set, store the display list instead of setting it on the layer,
+ and call setNeedsDisplay, and then replay the display list in drawInContext.
+
2021-11-01 Ayumi Kojima <ayumi_koj...@apple.com>
Unreviewed, reverting r285055.
Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h (285113 => 285114)
--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h 2021-11-01 17:14:17 UTC (rev 285114)
@@ -74,7 +74,7 @@
PlatformCALayerRemote* layer() const { return m_layer; }
enum class LayerContentsType { IOSurface, CAMachPort };
- void applyBackingStoreToLayer(CALayer *, LayerContentsType);
+ void applyBackingStoreToLayer(CALayer *, LayerContentsType, bool replayCGDisplayListsIntoBackingStore);
void encode(IPC::Encoder&) const;
static WARN_UNUSED_RETURN bool decode(IPC::Decoder&, RemoteLayerBackingStore&);
Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm (285113 => 285114)
--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm 2021-11-01 17:14:17 UTC (rev 285114)
@@ -429,7 +429,7 @@
}
}
-void RemoteLayerBackingStore::applyBackingStoreToLayer(CALayer *layer, LayerContentsType contentsType)
+void RemoteLayerBackingStore::applyBackingStoreToLayer(CALayer *layer, LayerContentsType contentsType, bool replayCGDisplayListsIntoBackingStore)
{
ASSERT(m_bufferHandle);
layer.contentsOpaque = m_isOpaque;
@@ -465,12 +465,17 @@
ASSERT([layer isKindOfClass:[WKCompositingLayer class]]);
if (![layer isKindOfClass:[WKCompositingLayer class]])
return;
- [layer setValue:@1 forKeyPath:WKCGDisplayListEnabledKey];
- [layer setValue:@1 forKeyPath:WKCGDisplayListBifurcationEnabledKey];
+
+ if (!replayCGDisplayListsIntoBackingStore) {
+ [layer setValue:@1 forKeyPath:WKCGDisplayListEnabledKey];
+ [layer setValue:@1 forKeyPath:WKCGDisplayListBifurcationEnabledKey];
+ }
auto data = ""
- [(WKCompositingLayer *)layer _setWKContents:contents.get() withDisplayList:data.get()];
+ [(WKCompositingLayer *)layer _setWKContents:contents.get() withDisplayList:data.get() replayForTesting:replayCGDisplayListsIntoBackingStore];
return;
}
+#else
+ UNUSED_PARAM(replayCGDisplayListsIntoBackingStore);
#endif
layer.contents = contents.get();
Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm (285113 => 285114)
--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm 2021-11-01 17:14:17 UTC (rev 285114)
@@ -255,7 +255,7 @@
{
RemoteLayerBackingStore* backingStore = properties.backingStore.get();
if (backingStore && properties.backingStoreAttached)
- backingStore->applyBackingStoreToLayer(layer, layerContentsType);
+ backingStore->applyBackingStoreToLayer(layer, layerContentsType, layerTreeHost->replayCGDisplayListsIntoBackingStore());
else {
layer.contents = nil;
layer.contentsOpaque = NO;
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h (285113 => 285114)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h 2021-11-01 17:14:17 UTC (rev 285114)
@@ -75,6 +75,8 @@
CALayer *layerWithIDForTesting(uint64_t) const;
+ bool replayCGDisplayListsIntoBackingStore() const;
+
private:
void createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties&);
std::unique_ptr<RemoteLayerTreeNode> makeNode(const RemoteLayerTreeTransaction::LayerCreationProperties&);
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm (285113 => 285114)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm 2021-11-01 17:14:17 UTC (rev 285114)
@@ -82,6 +82,15 @@
#endif
}
+bool RemoteLayerTreeHost::replayCGDisplayListsIntoBackingStore() const
+{
+#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
+ return m_drawingArea->page().preferences().replayCGDisplayListsIntoBackingStore();
+#else
+ return false;
+#endif
+}
+
bool RemoteLayerTreeHost::updateLayerTree(const RemoteLayerTreeTransaction& transaction, float indicatorScaleFactor)
{
if (!m_drawingArea)
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h (285113 => 285114)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h 2021-11-01 17:14:17 UTC (rev 285114)
@@ -33,7 +33,7 @@
@interface WKCompositingLayer : CALayer
#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
-- (void)_setWKContents:(id)contents withDisplayList:(CFDataRef)data;
+- (void)_setWKContents:(id)contents withDisplayList:(CFDataRef)data replayForTesting:(BOOL)replay;
#endif
@end
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm (285113 => 285114)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm 2021-11-01 17:12:10 UTC (rev 285113)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm 2021-11-01 17:14:17 UTC (rev 285114)
@@ -36,7 +36,11 @@
#import <WebKitAdditions/CGDisplayListImageBufferAdditions.h>
#endif
-@implementation WKCompositingLayer
+@implementation WKCompositingLayer {
+#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
+ RetainPtr<CFDataRef> _displayListDataForTesting;
+#endif
+}
- (NSString *)description
{
@@ -44,14 +48,28 @@
}
#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
-- (void)_setWKContents:(id)contents withDisplayList:(CFDataRef)data
+
+- (void)_setWKContents:(id)contents withDisplayList:(CFDataRef)data replayForTesting:(BOOL)replay
{
+ if (replay) {
+ _displayListDataForTesting = data;
+ [self setNeedsDisplay];
+ return;
+ }
+
self.contents = contents;
- [self setValue:(id)data forKeyPath:WKCGDisplayListContentsKey];
-
-
+ [self setValue:(id)data forKeyPath:WKCGDisplayListContentsKey];
}
+- (void)drawInContext:(CGContextRef)context
+{
+ if (!_displayListDataForTesting)
+ return;
+ CGContextScaleCTM(context, 1, -1);
+ CGContextTranslateCTM(context, 0, -self.bounds.size.height);
+ WKCGContextDrawCGCommandsEncodedData(context, _displayListDataForTesting.get(), nullptr);
+}
+
#endif // ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
@end