Title: [155168] trunk/Source/WebCore
Revision
155168
Author
[email protected]
Date
2013-09-05 18:34:05 -0700 (Thu, 05 Sep 2013)

Log Message

FrameLoader: Convert three little loops to using Vector<Ref<Frame>>.
<https://webkit.org/b/120798>

Reviewed by Antti Koivisto.

Also apply a bit of inline capacity + reserveInitialCapacity + uncheckedAppend
in FrameLoader::detachChildren() since we know the final size from the start.

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::detachChildren):
(WebCore::FrameLoader::checkLoadComplete):
(WebCore::FrameLoader::shouldClose):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (155167 => 155168)


--- trunk/Source/WebCore/ChangeLog	2013-09-06 01:24:45 UTC (rev 155167)
+++ trunk/Source/WebCore/ChangeLog	2013-09-06 01:34:05 UTC (rev 155168)
@@ -1,5 +1,20 @@
 2013-09-05  Andreas Kling  <[email protected]>
 
+        FrameLoader: Convert three little loops to using Vector<Ref<Frame>>.
+        <https://webkit.org/b/120798>
+
+        Reviewed by Antti Koivisto.
+
+        Also apply a bit of inline capacity + reserveInitialCapacity + uncheckedAppend
+        in FrameLoader::detachChildren() since we know the final size from the start.
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::detachChildren):
+        (WebCore::FrameLoader::checkLoadComplete):
+        (WebCore::FrameLoader::shouldClose):
+
+2013-09-05  Andreas Kling  <[email protected]>
+
         ContainerNode: Apply Ref<T> to some popular DOM functions.
         <https://webkit.org/b/120800>
 

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (155167 => 155168)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2013-09-06 01:24:45 UTC (rev 155167)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2013-09-06 01:34:05 UTC (rev 155168)
@@ -2318,14 +2318,12 @@
 
 void FrameLoader::detachChildren()
 {
-    typedef Vector<RefPtr<Frame> > FrameVector;
-    FrameVector childrenToDetach;
-    childrenToDetach.reserveCapacity(m_frame.tree().childCount());
+    Vector<Ref<Frame>, 16> childrenToDetach;
+    childrenToDetach.reserveInitialCapacity(m_frame.tree().childCount());
     for (Frame* child = m_frame.tree().lastChild(); child; child = child->tree().previousSibling())
-        childrenToDetach.append(child);
-    FrameVector::iterator end = childrenToDetach.end();
-    for (FrameVector::iterator it = childrenToDetach.begin(); it != end; ++it)
-        (*it)->loader().detachFromParent();
+        childrenToDetach.uncheckedAppend(*child);
+    for (unsigned i = 0; i < childrenToDetach.size(); ++i)
+        childrenToDetach[i]->loader().detachFromParent();
 }
 
 void FrameLoader::closeAndRemoveChild(Frame* child)
@@ -2348,16 +2346,18 @@
     
     m_shouldCallCheckLoadComplete = false;
 
+    if (!m_frame.page())
+        return;
+
     // FIXME: Always traversing the entire frame tree is a bit inefficient, but 
     // is currently needed in order to null out the previous history item for all frames.
-    if (Page* page = m_frame.page()) {
-        Vector<RefPtr<Frame>, 10> frames;
-        for (RefPtr<Frame> frame = &page->mainFrame(); frame; frame = frame->tree().traverseNext())
-            frames.append(frame);
-        // To process children before their parents, iterate the vector backwards.
-        for (size_t i = frames.size(); i; --i)
-            frames[i - 1]->loader().checkLoadCompleteForThisFrame();
-    }
+    Vector<Ref<Frame>, 16> frames;
+    for (Frame* frame = &m_frame.page()->mainFrame(); frame; frame = frame->tree().traverseNext())
+        frames.append(*frame);
+
+    // To process children before their parents, iterate the vector backwards.
+    for (unsigned i = frames.size(); i; --i)
+        frames[i - 1]->loader().checkLoadCompleteForThisFrame();
 }
 
 int FrameLoader::numPendingOrLoadingRequests(bool recurse) const
@@ -2722,10 +2722,10 @@
         return true;
 
     // Store all references to each subframe in advance since beforeunload's event handler may modify frame
-    Vector<RefPtr<Frame> > targetFrames;
-    targetFrames.append(&m_frame);
+    Vector<Ref<Frame>, 16> targetFrames;
+    targetFrames.append(m_frame);
     for (Frame* child = m_frame.tree().firstChild(); child; child = child->tree().traverseNext(&m_frame))
-        targetFrames.append(child);
+        targetFrames.append(*child);
 
     bool shouldClose = false;
     {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to