Title: [294431] trunk/Source/WebCore
Revision
294431
Author
cdu...@apple.com
Date
2022-05-18 14:05:17 -0700 (Wed, 18 May 2022)

Log Message

Drop unnecessary EventTarget::isFiringEventListeners()
https://bugs.webkit.org/show_bug.cgi?id=240578

Reviewed by Geoffrey Garen.

Drop unnecessary EventTarget::isFiringEventListeners() flag. This flag was checked by
our GC logic to avoid collecting wrappers while they are firing events. However, those
checks are in hot code paths and it should be up to the code dispatching the event
to keep the wrapper alive, either via ActiveDOMObject or GCReachableRef.

* Source/WebCore/bindings/js/JSAbortSignalCustom.cpp:
(WebCore::JSAbortSignalOwner::isReachableFromOpaqueRoots):
* Source/WebCore/bindings/js/JSNodeCustom.cpp:
(WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
* Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
* Source/WebCore/dom/EventTarget.cpp:
(WebCore::EventTarget::fireEventListeners):
* Source/WebCore/dom/EventTarget.h:
(WebCore::EventTarget::isFiringEventListeners const): Deleted.

Canonical link: https://commits.webkit.org/250712@main

Modified Paths

Diff

Modified: trunk/Source/WebCore/bindings/js/JSAbortSignalCustom.cpp (294430 => 294431)


--- trunk/Source/WebCore/bindings/js/JSAbortSignalCustom.cpp	2022-05-18 21:04:52 UTC (rev 294430)
+++ trunk/Source/WebCore/bindings/js/JSAbortSignalCustom.cpp	2022-05-18 21:05:17 UTC (rev 294431)
@@ -31,20 +31,20 @@
 bool JSAbortSignalOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, JSC::AbstractSlotVisitor& visitor, const char** reason)
 {
     auto& abortSignal = JSC::jsCast<JSAbortSignal*>(handle.slot()->asCell())->wrapped();
-    if (abortSignal.isFiringEventListeners()) {
-        if (UNLIKELY(reason))
-            *reason = "EventTarget firing event listeners";
-        return true;
-    }
-
     if (abortSignal.aborted())
         return false;
 
-    if (abortSignal.isFollowingSignal())
+    if (abortSignal.isFollowingSignal()) {
+        if (UNLIKELY(reason))
+            *reason = "Is Following Signal";
         return true;
+    }
 
-    if (abortSignal.hasAbortEventListener() && abortSignal.hasActiveTimeoutTimer())
+    if (abortSignal.hasAbortEventListener() && abortSignal.hasActiveTimeoutTimer()) {
+        if (UNLIKELY(reason))
+            *reason = "Has Active Abort Listener";
         return true;
+    }
 
     return visitor.containsOpaqueRoot(&abortSignal);
 }

Modified: trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp (294430 => 294431)


--- trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp	2022-05-18 21:04:52 UTC (rev 294430)
+++ trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp	2022-05-18 21:05:17 UTC (rev 294431)
@@ -69,13 +69,6 @@
 {
     auto& node = jsCast<JSNode*>(handle.slot()->asCell())->wrapped();
     if (!node.isConnected()) {
-        // If a node is firing event listeners, its wrapper is observable because
-        // its wrapper is responsible for marking those event listeners.
-        if (node.isFiringEventListeners()) {
-            if (UNLIKELY(reason))
-                *reason = "Node which is firing event listeners";
-            return true;
-        }
         if (GCReachableRefMap::contains(node)) {
             if (UNLIKELY(reason))
                 *reason = "Node is scheduled to be used in an async script invocation)";

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (294430 => 294431)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2022-05-18 21:04:52 UTC (rev 294430)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2022-05-18 21:05:17 UTC (rev 294431)
@@ -5051,16 +5051,6 @@
             }
             push(@implContent, "    if (JSNodeOwner::isReachableFromOpaqueRoots(handle, 0, visitor, reason))\n");
             push(@implContent, "        return true;\n");
-        } elsif ($codeGenerator->InheritsInterface($interface, "EventTarget")) {
-            if (!$emittedJSCast) {
-                push(@implContent, "    auto* js${interfaceName} = jsCast<JS${interfaceName}*>(handle.slot()->asCell());\n");
-                $emittedJSCast = 1;
-            }
-            push(@implContent, "    if (js${interfaceName}->wrapped().isFiringEventListeners()) {\n");
-            push(@implContent, "        if (UNLIKELY(reason))\n");
-            push(@implContent, "            *reason = \"EventTarget firing event listeners\";\n");
-            push(@implContent, "        return true;\n");
-            push(@implContent, "    }\n");
         }
         if (GetGenerateIsReachable($interface)) {
             if (!$emittedJSCast) {

Modified: trunk/Source/WebCore/dom/EventTarget.cpp (294430 => 294431)


--- trunk/Source/WebCore/dom/EventTarget.cpp	2022-05-18 21:04:52 UTC (rev 294430)
+++ trunk/Source/WebCore/dom/EventTarget.cpp	2022-05-18 21:05:17 UTC (rev 294431)
@@ -290,8 +290,6 @@
     if (!data)
         return;
 
-    SetForScope firingEventListenersScope(data->isFiringEventListeners, true);
-
     if (auto* listenersVector = data->eventListenerMap.find(event.type())) {
         innerInvokeEventListeners(event, *listenersVector, phase);
         return;

Modified: trunk/Source/WebCore/dom/EventTarget.h (294430 => 294431)


--- trunk/Source/WebCore/dom/EventTarget.h	2022-05-18 21:04:52 UTC (rev 294430)
+++ trunk/Source/WebCore/dom/EventTarget.h	2022-05-18 21:05:17 UTC (rev 294431)
@@ -57,7 +57,6 @@
 public:
     EventTargetData() = default;
     EventListenerMap eventListenerMap;
-    bool isFiringEventListeners { false };
 };
 
 class EventTarget : public ScriptWrappable, public CanMakeWeakPtr<EventTarget> {
@@ -103,7 +102,6 @@
 
     enum class EventInvokePhase { Capturing, Bubbling };
     void fireEventListeners(Event&, EventInvokePhase);
-    bool isFiringEventListeners() const;
 
     template<typename Visitor> void visitJSEventListeners(Visitor&);
     void invalidateJSEventListeners(JSC::JSObject*);
@@ -142,12 +140,6 @@
     return const_cast<EventTarget*>(this)->eventTargetData();
 }
 
-inline bool EventTarget::isFiringEventListeners() const
-{
-    auto* data = ""
-    return data && data->isFiringEventListeners;
-}
-
 inline bool EventTarget::hasEventListeners() const
 {
     auto* data = ""
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to