Title: [285114] trunk/Source
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
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to