Title: [286543] trunk/Source
Revision
286543
Author
[email protected]
Date
2021-12-06 06:35:01 -0800 (Mon, 06 Dec 2021)

Log Message

[LBSE] Toggling the Settings -> Enabled LBSE flag has no immediate effect
https://bugs.webkit.org/show_bug.cgi?id=233871

Reviewed by Rob Buis.

Toggling "Enable layer-based SVG engine" in e.g. MiniBrowser or from JS has no immediate effect.
A relayout is not enough: a full style / render tree rebuild is needed.

Source/WebCore:

Covered by existing tests.

* page/SettingsBase.cpp:
(WebCore::SettingsBase::layerBasedSVGEngineEnabledChanged): Rebuild style / renderers upon changes.
* page/SettingsBase.h:

Source/WTF:

* Scripts/Preferences/WebPreferencesInternal.yaml: When "LayerBasedSVGEngineEnabled" changes call
WebCore::SettingsBase::layerBasedSVGEngineEnabledChanged() to assure the switch from legacy to
LBSE engine and vice-versa is live and doesn't need reloads to take effect.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (286542 => 286543)


--- trunk/Source/WTF/ChangeLog	2021-12-06 14:28:26 UTC (rev 286542)
+++ trunk/Source/WTF/ChangeLog	2021-12-06 14:35:01 UTC (rev 286543)
@@ -1,3 +1,17 @@
+2021-12-06  Nikolas Zimmermann  <[email protected]>
+
+        [LBSE] Toggling the Settings -> Enabled LBSE flag has no immediate effect
+        https://bugs.webkit.org/show_bug.cgi?id=233871
+
+        Reviewed by Rob Buis.
+
+        Toggling "Enable layer-based SVG engine" in e.g. MiniBrowser or from JS has no immediate effect.
+        A relayout is not enough: a full style / render tree rebuild is needed.
+
+        * Scripts/Preferences/WebPreferencesInternal.yaml: When "LayerBasedSVGEngineEnabled" changes call
+        WebCore::SettingsBase::layerBasedSVGEngineEnabledChanged() to assure the switch from legacy to
+        LBSE engine and vice-versa is live and doesn't need reloads to take effect.
+
 2021-12-06  Youenn Fablet  <[email protected]>
 
         Enable NavigationPreloadManager by default

Modified: trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml (286542 => 286543)


--- trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml	2021-12-06 14:28:26 UTC (rev 286542)
+++ trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml	2021-12-06 14:35:01 UTC (rev 286543)
@@ -450,7 +450,7 @@
   humanReadableName: "Layer-based SVG Engine (LBSE)"
   humanReadableDescription: "Enable next-generation layer-based SVG Engine (LBSE)"
   condition: ENABLE(LAYER_BASED_SVG_ENGINE)
-  webcoreOnChange: setNeedsRelayoutAllFrames
+  webcoreOnChange: layerBasedSVGEngineEnabledChanged
   defaultValue:
     WebCore:
       default: false

Modified: trunk/Source/WebCore/ChangeLog (286542 => 286543)


--- trunk/Source/WebCore/ChangeLog	2021-12-06 14:28:26 UTC (rev 286542)
+++ trunk/Source/WebCore/ChangeLog	2021-12-06 14:35:01 UTC (rev 286543)
@@ -1,5 +1,21 @@
 2021-12-06  Nikolas Zimmermann  <[email protected]>
 
+        [LBSE] Toggling the Settings -> Enabled LBSE flag has no immediate effect
+        https://bugs.webkit.org/show_bug.cgi?id=233871
+
+        Reviewed by Rob Buis.
+
+        Toggling "Enable layer-based SVG engine" in e.g. MiniBrowser or from JS has no immediate effect.
+        A relayout is not enough: a full style / render tree rebuild is needed.
+
+        Covered by existing tests.
+
+        * page/SettingsBase.cpp:
+        (WebCore::SettingsBase::layerBasedSVGEngineEnabledChanged): Rebuild style / renderers upon changes.
+        * page/SettingsBase.h:
+
+2021-12-06  Nikolas Zimmermann  <[email protected]>
+
         [LBSE] Add RenderObject::isSVGRootOrLegacySVGRoot() helper
         https://bugs.webkit.org/show_bug.cgi?id=233870
 

Modified: trunk/Source/WebCore/page/SettingsBase.cpp (286542 => 286543)


--- trunk/Source/WebCore/page/SettingsBase.cpp	2021-12-06 14:28:26 UTC (rev 286542)
+++ trunk/Source/WebCore/page/SettingsBase.cpp	2021-12-06 14:35:01 UTC (rev 286543)
@@ -308,6 +308,29 @@
 
 #endif
 
+#if ENABLE(LAYER_BASED_SVG_ENGINE)
+
+void SettingsBase::layerBasedSVGEngineEnabledChanged()
+{
+    if (!m_page)
+        return;
+
+    for (auto* frame = &m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        auto* document = frame->document();
+        if (!document)
+            continue;
+
+        auto* documentElement = document->documentElement();
+        if (!documentElement)
+            continue;
+
+        documentElement->invalidateStyleAndRenderersForSubtree();
+        document->scheduleFullStyleRebuild();
+    }
+}
+
+#endif
+
 void SettingsBase::userStyleSheetLocationChanged()
 {
     if (m_page)

Modified: trunk/Source/WebCore/page/SettingsBase.h (286542 => 286543)


--- trunk/Source/WebCore/page/SettingsBase.h	2021-12-06 14:28:26 UTC (rev 286542)
+++ trunk/Source/WebCore/page/SettingsBase.h	2021-12-06 14:35:01 UTC (rev 286543)
@@ -139,6 +139,9 @@
 #if ENABLE(MEDIA_STREAM)
     void mockCaptureDevicesEnabledChanged();
 #endif
+#if ENABLE(LAYER_BASED_SVG_ENGINE)
+    void layerBasedSVGEngineEnabledChanged();
+#endif
 
     Page* m_page;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to