Skip to content
  • ggaren's avatar
    Reviewed by Darin Adler. · 4434b147
    ggaren authored
            
            Fixed http://bugs.webkit.org/show_bug.cgi?id=12900 Page tear-down 
            forces garbage collection once per frame
    
            Also fixed <rdar://problem/5286989> GC on window close does not always 
            bring the JS object count down to 0
            
            Implemented a 0-delay GC timer in WebCore. Instead of forcing GC
            immediately, code that thinks it has created a lot of garbage starts
            the timer. This has two advantages: 
    
            1) Multiple GCs can coalesce. In my pathological test case, this 
            improves performance by an order of magnitude. 
            
            2) Conservative marking is less likely to keep alive important dead
            objects, like the window object, because the stack is small and free of
            JS processing when the timer fires.
    
            Added GCController.h/.cpp, sometimes blindly:
            * WebCore.pro:
            * WebCore.vcproj/WebCore.vcproj:
            * WebCore.xcodeproj/project.pbxproj:
            * WebCoreSources.bkl:
    
            Added singleton that implements GC on a 0-delay timer:
            * bindings/js/GCController.h: Added.
            * bindings/js/GCController.cpp: Added.
            
            Changed Collector::collect() calls below to call to the singleton:
            * bindings/js/kjs_proxy.cpp:
            (WebCore::KJSProxy::~KJSProxy):
            * bindings/js/kjs_window.cpp:
            (KJS::Window::clear):
            * history/CachedPage.cpp:
            (WebCore::CachedPage::clear):
            
            * page/Frame.cpp:
            (WebCore::Frame::~Frame): Removed previous slightly hackish attempt to
            avoid conservative marking of the window object.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@24493 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    4434b147