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