Title: [131620] trunk/Source/WebCore
- Revision
- 131620
- Author
- [email protected]
- Date
- 2012-10-17 10:46:36 -0700 (Wed, 17 Oct 2012)
Log Message
Shrink EventTargetData by making firingEventListeners vector optional.
<http://webkit.org/b/99532>
<rdar://problem/12515099>
Reviewed by Anders Carlsson.
The majority of event listeners never actually fire, and EventTargetData::firingEventListeners
is just sitting there taking up space. Make it an OwnPtr instead, shrinking EventTargetData
by 48 bytes and progressing Membuster3 by 395kB.
* dom/EventTarget.cpp:
(WebCore::EventTarget::removeEventListener):
(WebCore::EventTarget::fireEventListeners):
(WebCore::EventTarget::removeAllEventListeners):
* dom/EventTarget.h:
(WebCore::EventTarget::isFiringEventListeners):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (131619 => 131620)
--- trunk/Source/WebCore/ChangeLog 2012-10-17 17:30:37 UTC (rev 131619)
+++ trunk/Source/WebCore/ChangeLog 2012-10-17 17:46:36 UTC (rev 131620)
@@ -1,3 +1,22 @@
+2012-10-17 Andreas Kling <[email protected]>
+
+ Shrink EventTargetData by making firingEventListeners vector optional.
+ <http://webkit.org/b/99532>
+ <rdar://problem/12515099>
+
+ Reviewed by Anders Carlsson.
+
+ The majority of event listeners never actually fire, and EventTargetData::firingEventListeners
+ is just sitting there taking up space. Make it an OwnPtr instead, shrinking EventTargetData
+ by 48 bytes and progressing Membuster3 by 395kB.
+
+ * dom/EventTarget.cpp:
+ (WebCore::EventTarget::removeEventListener):
+ (WebCore::EventTarget::fireEventListeners):
+ (WebCore::EventTarget::removeAllEventListeners):
+ * dom/EventTarget.h:
+ (WebCore::EventTarget::isFiringEventListeners):
+
2012-10-17 Christophe Dumez <[email protected]>
xss-DENIED-xsl-document-securityOrigin.xml crashes with icon assertion
Modified: trunk/Source/WebCore/dom/EventTarget.cpp (131619 => 131620)
--- trunk/Source/WebCore/dom/EventTarget.cpp 2012-10-17 17:30:37 UTC (rev 131619)
+++ trunk/Source/WebCore/dom/EventTarget.cpp 2012-10-17 17:46:36 UTC (rev 131620)
@@ -84,16 +84,19 @@
// Notify firing events planning to invoke the listener at 'index' that
// they have one less listener to invoke.
- for (size_t i = 0; i < d->firingEventIterators.size(); ++i) {
- if (eventType != d->firingEventIterators[i].eventType)
+ if (!d->firingEventIterators)
+ return true;
+ for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
+ FiringEventIterator& firingIterator = d->firingEventIterators->at(i);
+ if (eventType != firingIterator.eventType)
continue;
- if (indexOfRemovedListener >= d->firingEventIterators[i].end)
+ if (indexOfRemovedListener >= firingIterator.end)
continue;
- --d->firingEventIterators[i].end;
- if (indexOfRemovedListener <= d->firingEventIterators[i].iterator)
- --d->firingEventIterators[i].iterator;
+ --firingIterator.end;
+ if (indexOfRemovedListener <= firingIterator.iterator)
+ --firingIterator.iterator;
}
return true;
@@ -185,7 +188,9 @@
size_t i = 0;
size_t end = entry.size();
- d->firingEventIterators.append(FiringEventIterator(event->type(), i, end));
+ if (!d->firingEventIterators)
+ d->firingEventIterators = adoptPtr(new FiringEventIteratorVector);
+ d->firingEventIterators->append(FiringEventIterator(event->type(), i, end));
for ( ; i < end; ++i) {
RegisteredEventListener& registeredListener = entry[i];
if (event->eventPhase() == Event::CAPTURING_PHASE && !registeredListener.useCapture)
@@ -205,7 +210,7 @@
registeredListener.listener->handleEvent(context, event);
InspectorInstrumentation::didHandleEvent(cookie);
}
- d->firingEventIterators.removeLast();
+ d->firingEventIterators->removeLast();
}
const EventListenerVector& EventTarget::getEventListeners(const AtomicString& eventType)
@@ -232,9 +237,11 @@
// Notify firing events planning to invoke the listener at 'index' that
// they have one less listener to invoke.
- for (size_t i = 0; i < d->firingEventIterators.size(); ++i) {
- d->firingEventIterators[i].iterator = 0;
- d->firingEventIterators[i].end = 0;
+ if (d->firingEventIterators) {
+ for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
+ d->firingEventIterators->at(i).iterator = 0;
+ d->firingEventIterators->at(i).end = 0;
+ }
}
}
Modified: trunk/Source/WebCore/dom/EventTarget.h (131619 => 131620)
--- trunk/Source/WebCore/dom/EventTarget.h 2012-10-17 17:30:37 UTC (rev 131619)
+++ trunk/Source/WebCore/dom/EventTarget.h 2012-10-17 17:46:36 UTC (rev 131620)
@@ -97,7 +97,7 @@
~EventTargetData();
EventListenerMap eventListenerMap;
- FiringEventIteratorVector firingEventIterators;
+ OwnPtr<FiringEventIteratorVector> firingEventIterators;
};
class EventTarget {
@@ -190,7 +190,7 @@
EventTargetData* d = eventTargetData();
if (!d)
return false;
- return d->firingEventIterators.size() != 0;
+ return d->firingEventIterators && !d->firingEventIterators->isEmpty();
}
inline bool EventTarget::hasEventListeners()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes