Title: [291495] trunk/Source/WebCore
- Revision
- 291495
- Author
- cdu...@apple.com
- Date
- 2022-03-18 13:09:08 -0700 (Fri, 18 Mar 2022)
Log Message
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: trunk/Source/WebCore/ChangeLog (291494 => 291495)
--- trunk/Source/WebCore/ChangeLog 2022-03-18 19:42:42 UTC (rev 291494)
+++ trunk/Source/WebCore/ChangeLog 2022-03-18 20:09:08 UTC (rev 291495)
@@ -1,3 +1,25 @@
+2022-03-18 Chris Dumez <cdu...@apple.com>
+
+ 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):
+
2022-03-18 Alex Christensen <achristen...@webkit.org>
Keep a strong reference to session in [WebCoreNSURLSessionDataTask _restart]
Modified: trunk/Source/WebCore/dom/EventListenerMap.cpp (291494 => 291495)
--- trunk/Source/WebCore/dom/EventListenerMap.cpp 2022-03-18 19:42:42 UTC (rev 291494)
+++ trunk/Source/WebCore/dom/EventListenerMap.cpp 2022-03-18 20:09:08 UTC (rev 291495)
@@ -88,7 +88,7 @@
assertNoActiveIterators();
for (auto& entry : m_entries) {
- for (auto& listener : *entry.second)
+ for (auto& listener : entry.second)
listener->markAsRemoved();
}
@@ -140,9 +140,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;
}
@@ -165,8 +163,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;
}
@@ -175,11 +173,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;
@@ -205,8 +203,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;
}
@@ -226,7 +224,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)
@@ -267,7 +265,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: trunk/Source/WebCore/dom/EventListenerMap.h (291494 => 291495)
--- trunk/Source/WebCore/dom/EventListenerMap.h 2022-03-18 19:42:42 UTC (rev 291494)
+++ trunk/Source/WebCore/dom/EventListenerMap.h 2022-03-18 20:09:08 UTC (rev 291495)
@@ -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