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

Reply via email to