Simplify jettisoning of style resolvers on memory pressure.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Mar 2014 17:29:09 +0000 (17:29 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Mar 2014 17:29:09 +0000 (17:29 +0000)
<https://webkit.org/b/129644>

Now that we have Document::allDocuments(), we can jettison all the
style resolvers by walking the set of live documents and calling
clearStyleResolver() on each one, instead of having a function on
Page that walks the frame tree of every living page, etc.

Reviewed by Antti Koivisto.

* page/Page.cpp:
* page/Page.h:
* platform/mac/MemoryPressureHandlerMac.mm:
(WebCore::MemoryPressureHandler::releaseMemory):

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

Source/WebCore/ChangeLog
Source/WebCore/page/Page.cpp
Source/WebCore/page/Page.h
Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm

index 20bd340..48b4f21 100644 (file)
@@ -1,3 +1,20 @@
+2014-03-14  Andreas Kling  <akling@apple.com>
+
+        Simplify jettisoning of style resolvers on memory pressure.
+        <https://webkit.org/b/129644>
+
+        Now that we have Document::allDocuments(), we can jettison all the
+        style resolvers by walking the set of live documents and calling
+        clearStyleResolver() on each one, instead of having a function on
+        Page that walks the frame tree of every living page, etc.
+
+        Reviewed by Antti Koivisto.
+
+        * page/Page.cpp:
+        * page/Page.h:
+        * platform/mac/MemoryPressureHandlerMac.mm:
+        (WebCore::MemoryPressureHandler::releaseMemory):
+
 2014-03-07  Jer Noble  <jer.noble@apple.com>
 
         Add Remote Control command support to HTLMediaElement
index d1df772..d1a348a 100644 (file)
@@ -433,20 +433,6 @@ void Page::setNeedsRecalcStyleInAllFrames()
     }
 }
 
-void Page::jettisonStyleResolversInAllDocuments()
-{
-    if (!allPages)
-        return;
-
-    for (auto it = allPages->begin(), end = allPages->end(); it != end; ++it) {
-        Page& page = **it;
-        for (Frame* frame = &page.mainFrame(); frame; frame = frame->tree().traverseNext()) {
-            if (Document* document = frame->document())
-                document->clearStyleResolver();
-        }
-    }
-}
-
 void Page::refreshPlugins(bool reload)
 {
     if (!allPages)
index ff206a5..a6f7c39 100644 (file)
@@ -117,7 +117,6 @@ class Page : public Supplementable<Page> {
 
 public:
     static void updateStyleForAllPagesAfterGlobalChangeInEnvironment();
-    static void jettisonStyleResolversInAllDocuments();
 
     // It is up to the platform to ensure that non-null clients are provided where required.
     struct PageClients {
index 4c808e4..e16cdb2 100644 (file)
@@ -27,6 +27,7 @@
 #import "MemoryPressureHandler.h"
 
 #import <WebCore/CSSValuePool.h>
+#import <WebCore/Document.h>
 #import <WebCore/GCController.h>
 #import <WebCore/FontCache.h>
 #import <WebCore/MemoryCache.h>
@@ -170,7 +171,8 @@ void MemoryPressureHandler::releaseMemory(bool)
 
     clearWidthCaches();
 
-    Page::jettisonStyleResolversInAllDocuments();
+    for (auto* document : Document::allDocuments())
+        document->clearStyleResolver();
 
     gcController().discardAllCompiledCode();