Title: [292336] branches/safari-613-branch/Source/WebCore/dom
Revision
292336
Author
alanc...@apple.com
Date
2022-04-04 14:56:05 -0700 (Mon, 04 Apr 2022)

Log Message

Cherry-pick r291495. rdar://91259284

    Avoid extra pointer dereference in EventListenerMap::m_entries
    https://bugs.webkit.org/show_bug.cgi?id=238075

    Reviewed by Geoffrey Garen.

    This is a confirmed 0.5-0.8% progression on Speedometer according to A/B
    bots.

    dom/EventListenerMap.cpp:
    (WebCore::EventListenerMap::clear):
    (WebCore::EventListenerMap::add):
    (WebCore::EventListenerMap::remove):
    (WebCore::EventListenerMap::find):
    (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
    (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
    (WebCore::EventListenerIterator::nextListener):
    (WebCore::EventListenerMap::find const): Deleted.

    dom/EventListenerMap.h:
    (WebCore::EventListenerMap::find const):

Modified Paths

Diff

Modified: branches/safari-613-branch/Source/WebCore/dom/EventListenerMap.cpp (292335 => 292336)


--- branches/safari-613-branch/Source/WebCore/dom/EventListenerMap.cpp	2022-04-04 21:56:03 UTC (rev 292335)
+++ branches/safari-613-branch/Source/WebCore/dom/EventListenerMap.cpp	2022-04-04 21:56:05 UTC (rev 292336)
@@ -88,7 +88,7 @@
     assertNoActiveIterators();
 
     for (auto& entry : m_entries) {
-        for (auto& listener : *entry.second)
+        for (auto& listener : entry.second)
             listener->markAsRemoved();
     }
 
@@ -144,9 +144,7 @@
         return true;
     }
 
-    auto listeners = makeUnique<EventListenerVector>();
-    listeners->uncheckedAppend(RegisteredEventListener::create(WTFMove(listener), options));
-    m_entries.append({ eventType, WTFMove(listeners) });
+    m_entries.append({ eventType, EventListenerVector { RegisteredEventListener::create(WTFMove(listener), options) } });
     return true;
 }
 
@@ -169,8 +167,8 @@
 
     for (unsigned i = 0; i < m_entries.size(); ++i) {
         if (m_entries[i].first == eventType) {
-            bool wasRemoved = removeListenerFromVector(*m_entries[i].second, listener, useCapture);
-            if (m_entries[i].second->isEmpty())
+            bool wasRemoved = removeListenerFromVector(m_entries[i].second, listener, useCapture);
+            if (m_entries[i].second.isEmpty())
                 m_entries.remove(i);
             return wasRemoved;
         }
@@ -179,11 +177,11 @@
     return false;
 }
 
-EventListenerVector* EventListenerMap::find(const AtomString& eventType) const
+EventListenerVector* EventListenerMap::find(const AtomString& eventType)
 {
     for (auto& entry : m_entries) {
         if (entry.first == eventType)
-            return entry.second.get();
+            return &entry.second;
     }
 
     return nullptr;
@@ -209,8 +207,8 @@
 
     for (unsigned i = 0; i < m_entries.size(); ++i) {
         if (m_entries[i].first == eventType) {
-            removeFirstListenerCreatedFromMarkup(*m_entries[i].second);
-            if (m_entries[i].second->isEmpty())
+            removeFirstListenerCreatedFromMarkup(m_entries[i].second);
+            if (m_entries[i].second.isEmpty())
                 m_entries.remove(i);
             return;
         }
@@ -230,7 +228,7 @@
 void EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget(EventTarget* target)
 {
     for (auto& entry : m_entries)
-        copyListenersNotCreatedFromMarkupToTarget(entry.first, *entry.second, target);
+        copyListenersNotCreatedFromMarkupToTarget(entry.first, entry.second, target);
 }
 
 EventListenerIterator::EventListenerIterator(EventTarget* target)
@@ -271,7 +269,7 @@
         return nullptr;
 
     for (; m_entryIndex < m_map->m_entries.size(); ++m_entryIndex) {
-        EventListenerVector& listeners = *m_map->m_entries[m_entryIndex].second;
+        EventListenerVector& listeners = m_map->m_entries[m_entryIndex].second;
         if (m_index < listeners.size())
             return &listeners[m_index++]->callback();
         m_index = 0;

Modified: branches/safari-613-branch/Source/WebCore/dom/EventListenerMap.h (292335 => 292336)


--- branches/safari-613-branch/Source/WebCore/dom/EventListenerMap.h	2022-04-04 21:56:03 UTC (rev 292335)
+++ branches/safari-613-branch/Source/WebCore/dom/EventListenerMap.h	2022-04-04 21:56:05 UTC (rev 292336)
@@ -59,7 +59,8 @@
     void replace(const AtomString& eventType, EventListener& oldListener, Ref<EventListener>&& newListener, const RegisteredEventListener::Options&);
     bool add(const AtomString& eventType, Ref<EventListener>&&, const RegisteredEventListener::Options&);
     bool remove(const AtomString& eventType, EventListener&, bool useCapture);
-    WEBCORE_EXPORT EventListenerVector* find(const AtomString& eventType) const;
+    WEBCORE_EXPORT EventListenerVector* find(const AtomString& eventType);
+    const EventListenerVector* find(const AtomString& eventType) const { return const_cast<EventListenerMap*>(this)->find(eventType); }
     Vector<AtomString> eventTypes() const;
 
     void removeFirstEventListenerCreatedFromMarkup(const AtomString& eventType);
@@ -72,7 +73,7 @@
 
     void assertNoActiveIterators() const;
 
-    Vector<std::pair<AtomString, std::unique_ptr<EventListenerVector>>, 2> m_entries;
+    Vector<std::pair<AtomString, EventListenerVector>> m_entries;
 
 #ifndef NDEBUG
     std::atomic<int> m_activeIteratorCount { 0 };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to