2010-05-17 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 May 2010 08:09:57 +0000 (08:09 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 May 2010 08:09:57 +0000 (08:09 +0000)
        Reviewed by Oliver Hunt.

        GC more promptly when navigating to a new inner window, but not at all when it went in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=39254
        <rdar://problem/7996370>

        ~1% PLT speedup
        ~4% iBench HTML speedup

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectSoon): Change back to a 0 delay timer instead of
        0.5 second.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell): Add a new boolean parameter. Don't
        garbageColectSoon if the page is going into the page cache.
        * bindings/js/ScriptController.h: Prototype change for above.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Indicate when the page is going into the page cache.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@59659 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bindings/js/GCController.cpp
WebCore/bindings/js/ScriptController.cpp
WebCore/bindings/js/ScriptController.h
WebCore/loader/FrameLoader.cpp

index 4067aa9ce0ffec9573e5a98498e02f4a3cdead43..49ccfb93e6d87cc2be6a14a9dbc82c3c1c0a81d5 100644 (file)
@@ -1,3 +1,24 @@
+2010-05-17  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        GC more promptly when navigating to a new inner window, but not at all when it went in the page cache
+        https://bugs.webkit.org/show_bug.cgi?id=39254
+        <rdar://problem/7996370>
+
+        ~1% PLT speedup
+        ~4% iBench HTML speedup
+
+        * bindings/js/GCController.cpp:
+        (WebCore::GCController::garbageCollectSoon): Change back to a 0 delay timer instead of
+        0.5 second.
+        * bindings/js/ScriptController.cpp:
+        (WebCore::ScriptController::clearWindowShell): Add a new boolean parameter. Don't
+        garbageColectSoon if the page is going into the page cache.
+        * bindings/js/ScriptController.h: Prototype change for above.
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::clear): Indicate when the page is going into the page cache.
+
 2010-05-18  Adam Barth  <abarth@webkit.org>
 
         Reviewed by Eric Seidel.
index d5a17891ba08d19cd9b2a10e1ee0f423e6336177..f193b2eaacb679bfedca370ed87d4f8af7487031 100644 (file)
@@ -61,7 +61,7 @@ GCController::GCController()
 void GCController::garbageCollectSoon()
 {
     if (!m_GCTimer.isActive())
-        m_GCTimer.startOneShot(0.5);
+        m_GCTimer.startOneShot(0);
 }
 
 void GCController::gcTimerFired(Timer<GCController>*)
index 508b2f8506712f1129f685cc097efa3d0d7e2815..b2dfc9a2330d5d3efc6f68ee5a0459f9659091d4 100644 (file)
@@ -181,7 +181,7 @@ void ScriptController::getAllWorlds(Vector<DOMWrapperWorld*>& worlds)
     static_cast<WebCoreJSClientData*>(JSDOMWindow::commonJSGlobalData()->clientData)->getAllWorlds(worlds);
 }
 
-void ScriptController::clearWindowShell()
+void ScriptController::clearWindowShell(bool goingIntoPageCache)
 {
     if (m_windowShells.isEmpty())
         return;
@@ -203,8 +203,10 @@ void ScriptController::clearWindowShell()
         }
     }
 
-    // It's likely that resetting our windows created a lot of garbage.
-    gcController().garbageCollectSoon();
+    // It's likely that resetting our windows created a lot of garbage, unless
+    // it went in a back/forward cache.
+    if (!goingIntoPageCache)
+        gcController().garbageCollectSoon();
 }
 
 JSDOMWindowShell* ScriptController::initScript(DOMWrapperWorld* world)
index ed6c0a0e91a9a8a47e30da6de681296ea8ff12c6..a894ce3adc0e9aa2bbc65b5948a40ad97648efee 100644 (file)
@@ -132,7 +132,7 @@ public:
     
     const String* sourceURL() const { return m_sourceURL; } // 0 if we are not evaluating any script
 
-    void clearWindowShell();
+    void clearWindowShell(bool goingIntoPageCache = false);
     void updateDocument();
 
     // Notifies the ScriptController that the securityOrigin of the current
index 26b6fb651b9dd4f4193213bf4536c5e89fd3efdd..2b15dc3b443dd395ed4eae71db28a9fb52e2c3c9 100644 (file)
@@ -733,7 +733,7 @@ void FrameLoader::clear(bool clearWindowProperties, bool clearScriptObjects, boo
     // Do this after detaching the document so that the unload event works.
     if (clearWindowProperties) {
         m_frame->clearDOMWindow();
-        m_frame->script()->clearWindowShell();
+        m_frame->script()->clearWindowShell(m_frame->document()->inPageCache());
     }
 
     m_frame->selection()->clear();