Changeset 197595 in webkit


Ignore:
Timestamp:
Mar 4, 2016 3:33:22 PM (8 years ago)
Author:
akling@apple.com
Message:

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

Reviewed by Anders Carlsson.

Source/JavaScriptCore:

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):

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r197590 r197595  
     12016-03-04  Andreas Kling  <akling@apple.com>
     2
     3        [iOS] Throw away compiled RegExp code when navigating to a new page.
     4        <https://webkit.org/b/155015>
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Add a mechanism to have the VM discard all RegExp bytecode and JIT code.
     9
     10        * runtime/VM.cpp:
     11        (JSC::VM::deleteAllRegExpCode):
     12        * runtime/VM.h:
     13
    1142016-03-04  David Kilzer  <ddkilzer@apple.com>
    215
  • trunk/Source/JavaScriptCore/runtime/VM.cpp

    r197489 r197595  
    559559}
    560560
     561void VM::deleteAllRegExpCode()
     562{
     563    whenIdle([this]() {
     564        m_regExpCache->deleteAllCode();
     565        heap.reportAbandonedObjectGraph();
     566    });
     567}
     568
    561569void VM::deleteAllCode()
    562570{
  • trunk/Source/JavaScriptCore/runtime/VM.h

    r197489 r197595  
    580580    JS_EXPORT_PRIVATE void deleteAllCode();
    581581    JS_EXPORT_PRIVATE void deleteAllLinkedCode();
     582    JS_EXPORT_PRIVATE void deleteAllRegExpCode();
    582583
    583584    void registerWatchpointForImpureProperty(const Identifier&, Watchpoint*);
  • trunk/Source/WebCore/ChangeLog

    r197594 r197595  
     12016-03-04  Andreas Kling  <akling@apple.com>
     2
     3        [iOS] Throw away compiled RegExp code when navigating to a new page.
     4        <https://webkit.org/b/155015>
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Discard RegExp code when doing a top-level navigation.
     9        This frees up a couple hundred kilobytes on many pages.
     10
     11        * bindings/js/GCController.cpp:
     12        (WebCore::GCController::deleteAllRegExpCode):
     13        * bindings/js/GCController.h:
     14        * loader/FrameLoader.cpp:
     15        (WebCore::FrameLoader::commitProvisionalLoad):
     16
    1172016-03-04  Simon Fraser  <simon.fraser@apple.com>
    218
  • trunk/Source/WebCore/bindings/js/GCController.cpp

    r196308 r197595  
    129129}
    130130
     131void GCController::deleteAllRegExpCode()
     132{
     133    JSLockHolder lock(JSDOMWindow::commonVM());
     134    JSDOMWindow::commonVM().deleteAllRegExpCode();
     135}
     136
    131137} // namespace WebCore
  • trunk/Source/WebCore/bindings/js/GCController.h

    r196308 r197595  
    4848    WEBCORE_EXPORT void deleteAllCode();
    4949    WEBCORE_EXPORT void deleteAllLinkedCode();
     50    WEBCORE_EXPORT void deleteAllRegExpCode();
    5051
    5152private:
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r197254 r197595  
    17681768        GCController::singleton().deleteAllLinkedCode();
    17691769
     1770        // Same thing with RegExp bytecode and JIT code.
     1771        GCController::singleton().deleteAllRegExpCode();
     1772
    17701773        // Throw out decoded data for CachedImages when we are switching pages. The majority of it
    17711774        // will not be used by the next page.
Note: See TracChangeset for help on using the changeset viewer.