ShrinkToFit() all the DFA's vectors when we no longer need to add new nodes to it
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Jul 2015 00:12:24 +0000 (00:12 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Jul 2015 00:12:24 +0000 (00:12 +0000)
https://bugs.webkit.org/show_bug.cgi?id=147341

Patch by Benjamin Poulain <bpoulain@apple.com> on 2015-07-27
Reviewed by Geoffrey Garen.

Add a finalizer to the DFA to reduce the total memory needed
to store it.

On real test lists, this cuts the peak memory usage by about 1 megabyte.

The NFA already had a finalizer, no need to modify that one.

* contentextensions/DFA.cpp:
(WebCore::ContentExtensions::DFA::finalize):
* contentextensions/DFA.h:
* contentextensions/NFAToDFA.cpp:
(WebCore::ContentExtensions::NFAToDFA::convert):

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

Source/WebCore/ChangeLog
Source/WebCore/contentextensions/DFA.cpp
Source/WebCore/contentextensions/DFA.h
Source/WebCore/contentextensions/NFAToDFA.cpp

index 42d653b..953d88c 100644 (file)
@@ -1,3 +1,23 @@
+2015-07-27  Benjamin Poulain  <bpoulain@apple.com>
+
+        ShrinkToFit() all the DFA's vectors when we no longer need to add new nodes to it
+        https://bugs.webkit.org/show_bug.cgi?id=147341
+
+        Reviewed by Geoffrey Garen.
+
+        Add a finalizer to the DFA to reduce the total memory needed
+        to store it.
+
+        On real test lists, this cuts the peak memory usage by about 1 megabyte.
+
+        The NFA already had a finalizer, no need to modify that one.
+
+        * contentextensions/DFA.cpp:
+        (WebCore::ContentExtensions::DFA::finalize):
+        * contentextensions/DFA.h:
+        * contentextensions/NFAToDFA.cpp:
+        (WebCore::ContentExtensions::NFAToDFA::convert):
+
 2015-07-27  Brady Eidson  <beidson@apple.com>
 
         Crash in WebCore::DocumentLoader::willSendRequest() with ContentFilter and AppCache.
index d01cd2a..40dee4a 100644 (file)
@@ -51,6 +51,14 @@ size_t DFA::memoryUsed() const
         + nodes.capacity() * sizeof(DFANode);
 }
 
+void DFA::shrinkToFit()
+{
+    nodes.shrinkToFit();
+    actions.shrinkToFit();
+    transitionRanges.shrinkToFit();
+    transitionDestinations.shrinkToFit();
+}
+
 void DFA::minimize()
 {
     DFAMinimizer::minimize(*this);
index a209641..97a6a1c 100644 (file)
@@ -41,6 +41,7 @@ namespace ContentExtensions {
 struct WEBCORE_EXPORT DFA {
     static DFA empty();
 
+    void shrinkToFit();
     void minimize();
     unsigned graphSize() const;
     size_t memoryUsed() const;
index ed2f0f9..843df30 100644 (file)
@@ -387,6 +387,7 @@ DFA NFAToDFA::convert(NFA& nfa)
         dfaSourceNode.setTransitions(transitionsStart, static_cast<uint8_t>(transitionsLength));
     } while (!unprocessedNodes.isEmpty());
 
+    dfa.shrinkToFit();
     return dfa;
 }