Title: [197595] trunk/Source
Revision
197595
Author
[email protected]
Date
2016-03-04 15:33:22 -0800 (Fri, 04 Mar 2016)

Log Message

[iOS] Throw away compiled RegExp code when navigating to a new page.
<https://webkit.org/b/155015>

Reviewed by Anders Carlsson.

Source/_javascript_Core:

Add a mechanism to have the VM discard all RegExp bytecode and JIT code.

* runtime/VM.cpp:
(JSC::VM::deleteAllRegExpCode):
* runtime/VM.h:

Source/WebCore:

Discard RegExp code when doing a top-level navigation.
This frees up a couple hundred kilobytes on many pages.

* bindings/js/GCController.cpp:
(WebCore::GCController::deleteAllRegExpCode):
* bindings/js/GCController.h:
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::commitProvisionalLoad):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (197594 => 197595)


--- trunk/Source/_javascript_Core/ChangeLog	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-03-04 23:33:22 UTC (rev 197595)
@@ -1,3 +1,16 @@
+2016-03-04  Andreas Kling  <[email protected]>
+
+        [iOS] Throw away compiled RegExp code when navigating to a new page.
+        <https://webkit.org/b/155015>
+
+        Reviewed by Anders Carlsson.
+
+        Add a mechanism to have the VM discard all RegExp bytecode and JIT code.
+
+        * runtime/VM.cpp:
+        (JSC::VM::deleteAllRegExpCode):
+        * runtime/VM.h:
+
 2016-03-04  David Kilzer  <[email protected]>
 
         REGRESSION (r197531): _javascript_Core ASan build fails due to weak external symbol

Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (197594 => 197595)


--- trunk/Source/_javascript_Core/runtime/VM.cpp	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp	2016-03-04 23:33:22 UTC (rev 197595)
@@ -558,6 +558,14 @@
     });
 }
 
+void VM::deleteAllRegExpCode()
+{
+    whenIdle([this]() {
+        m_regExpCache->deleteAllCode();
+        heap.reportAbandonedObjectGraph();
+    });
+}
+
 void VM::deleteAllCode()
 {
     whenIdle([this]() {

Modified: trunk/Source/_javascript_Core/runtime/VM.h (197594 => 197595)


--- trunk/Source/_javascript_Core/runtime/VM.h	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/_javascript_Core/runtime/VM.h	2016-03-04 23:33:22 UTC (rev 197595)
@@ -579,6 +579,7 @@
 
     JS_EXPORT_PRIVATE void deleteAllCode();
     JS_EXPORT_PRIVATE void deleteAllLinkedCode();
+    JS_EXPORT_PRIVATE void deleteAllRegExpCode();
 
     void registerWatchpointForImpureProperty(const Identifier&, Watchpoint*);
     

Modified: trunk/Source/WebCore/ChangeLog (197594 => 197595)


--- trunk/Source/WebCore/ChangeLog	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/WebCore/ChangeLog	2016-03-04 23:33:22 UTC (rev 197595)
@@ -1,3 +1,19 @@
+2016-03-04  Andreas Kling  <[email protected]>
+
+        [iOS] Throw away compiled RegExp code when navigating to a new page.
+        <https://webkit.org/b/155015>
+
+        Reviewed by Anders Carlsson.
+
+        Discard RegExp code when doing a top-level navigation.
+        This frees up a couple hundred kilobytes on many pages.
+
+        * bindings/js/GCController.cpp:
+        (WebCore::GCController::deleteAllRegExpCode):
+        * bindings/js/GCController.h:
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::commitProvisionalLoad):
+
 2016-03-04  Simon Fraser  <[email protected]>
 
         Use larger tiles when possible to reduce per-tile painting overhead

Modified: trunk/Source/WebCore/bindings/js/GCController.cpp (197594 => 197595)


--- trunk/Source/WebCore/bindings/js/GCController.cpp	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/WebCore/bindings/js/GCController.cpp	2016-03-04 23:33:22 UTC (rev 197595)
@@ -128,4 +128,10 @@
     JSDOMWindow::commonVM().deleteAllLinkedCode();
 }
 
+void GCController::deleteAllRegExpCode()
+{
+    JSLockHolder lock(JSDOMWindow::commonVM());
+    JSDOMWindow::commonVM().deleteAllRegExpCode();
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/bindings/js/GCController.h (197594 => 197595)


--- trunk/Source/WebCore/bindings/js/GCController.h	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/WebCore/bindings/js/GCController.h	2016-03-04 23:33:22 UTC (rev 197595)
@@ -47,6 +47,7 @@
     WEBCORE_EXPORT void setJavaScriptGarbageCollectorTimerEnabled(bool);
     WEBCORE_EXPORT void deleteAllCode();
     WEBCORE_EXPORT void deleteAllLinkedCode();
+    WEBCORE_EXPORT void deleteAllRegExpCode();
 
 private:
     GCController(); // Use singleton() instead.

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (197594 => 197595)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2016-03-04 23:32:22 UTC (rev 197594)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2016-03-04 23:33:22 UTC (rev 197595)
@@ -1767,6 +1767,9 @@
         // outweigh the cost of recompiling in the case of a future backwards navigation.
         GCController::singleton().deleteAllLinkedCode();
 
+        // Same thing with RegExp bytecode and JIT code.
+        GCController::singleton().deleteAllRegExpCode();
+
         // Throw out decoded data for CachedImages when we are switching pages. The majority of it
         // will not be used by the next page.
         MemoryCache::singleton().destroyDecodedDataForAllImages();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to