• ggaren@apple.com's avatar
    Source/JavaScriptCore: Rolling back in r86653 with build fixed. · 19fe5092
    ggaren@apple.com authored
    Reviewed by Gavin Barraclough and Oliver Hunt.
    
    Global object initialization is expensive
    https://bugs.webkit.org/show_bug.cgi?id=60933
            
    Changed a bunch of globals to allocate their properties lazily, and changed
    the global object to allocate a bunch of its globals lazily.
            
    This reduces the footprint of a global object from 287 objects with 58
    functions for 24K to 173 objects with 20 functions for 15K.
    
    Large patch, but it's all mechanical.
    
    * DerivedSources.make:
    * JavaScriptCore.exp: Build!
    
    * create_hash_table: Added a special case for fromCharCode, since it uses
    a custom "thunk generator".
    
    * heap/Heap.cpp:
    (JSC::TypeCounter::operator()): Fixed a bug where the type counter would
    overcount objects that were owned through more than one mechanism because
    it was getting in the way of counting the results for this patch.
    
    * interpreter/CallFrame.h:
    (JSC::ExecState::arrayConstructorTable):
    (JSC::ExecState::arrayPrototypeTable):
    (JSC::ExecState::booleanPrototypeTable):
    (JSC::ExecState::dateConstructorTable):
    (JSC::ExecState::errorPrototypeTable):
    (JSC::ExecState::globalObjectTable):
    (JSC::ExecState::numberConstructorTable):
    (JSC::ExecState::numberPrototypeTable):
    (JSC::ExecState::objectPrototypeTable):
    (JSC::ExecState::regExpPrototypeTable):
    (JSC::ExecState::stringConstructorTable): Added new tables.
    
    * runtime/ArrayConstructor.cpp:
    (JSC::ArrayConstructor::ArrayConstructor):
    (JSC::ArrayConstructor::getOwnPropertySlot):
    (JSC::ArrayConstructor::getOwnPropertyDescriptor):
    * runtime/ArrayConstructor.h:
    (JSC::ArrayConstructor::createStructure):
    * runtime/ArrayPrototype.cpp:
    (JSC::ArrayPrototype::getOwnPropertySlot):
    (JSC::ArrayPrototype::getOwnPropertyDescriptor):
    * runtime/ArrayPrototype.h:
    * runtime/BooleanPrototype.cpp:
    (JSC::BooleanPrototype::BooleanPrototype):
    (JSC::BooleanPrototype::getOwnPropertySlot):
    (JSC::BooleanPrototype::getOwnPropertyDescriptor):
    * runtime/BooleanPrototype.h:
    (JSC::BooleanPrototype::createStructure):
    * runtime/DateConstructor.cpp:
    (JSC::DateConstructor::DateConstructor):
    (JSC::DateConstructor::getOwnPropertySlot):
    (JSC::DateConstructor::getOwnPropertyDescriptor):
    * runtime/DateConstructor.h:
    (JSC::DateConstructor::createStructure):
    * runtime/ErrorPrototype.cpp:
    (JSC::ErrorPrototype::ErrorPrototype):
    (JSC::ErrorPrototype::getOwnPropertySlot):
    (JSC::ErrorPrototype::getOwnPropertyDescriptor):
    * runtime/ErrorPrototype.h:
    (JSC::ErrorPrototype::createStructure): Standardized these objects
    to use static tables for function properties.
    
    * runtime/JSGlobalData.cpp:
    (JSC::JSGlobalData::JSGlobalData):
    (JSC::JSGlobalData::~JSGlobalData):
    * runtime/JSGlobalData.h: Added new tables.
    
    * runtime/JSGlobalObject.cpp:
    (JSC::JSGlobalObject::reset):
    (JSC::JSGlobalObject::addStaticGlobals):
    (JSC::JSGlobalObject::getOwnPropertySlot):
    (JSC::JSGlobalObject::getOwnPropertyDescriptor):
    * runtime/JSGlobalObject.h:
    * runtime/JSGlobalObjectFunctions.cpp:
    * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a
    static table for its global functions. This required uninlining some
    things to avoid a circular header dependency. However, those things
    probably shouldn't have been inlined in the first place.
            
    Even more global object properties can be made lazy, but that requires
    more in-depth changes.
    
    * runtime/MathObject.cpp:
    * runtime/NumberConstructor.cpp:
    (JSC::NumberConstructor::getOwnPropertySlot):
    (JSC::NumberConstructor::getOwnPropertyDescriptor):
    * runtime/NumberPrototype.cpp:
    (JSC::NumberPrototype::NumberPrototype):
    (JSC::NumberPrototype::getOwnPropertySlot):
    (JSC::NumberPrototype::getOwnPropertyDescriptor):
    * runtime/NumberPrototype.h:
    (JSC::NumberPrototype::createStructure):
    * runtime/ObjectPrototype.cpp:
    (JSC::ObjectPrototype::ObjectPrototype):
    (JSC::ObjectPrototype::put):
    (JSC::ObjectPrototype::getOwnPropertySlot):
    (JSC::ObjectPrototype::getOwnPropertyDescriptor):
    * runtime/ObjectPrototype.h:
    (JSC::ObjectPrototype::createStructure):
    * runtime/RegExpPrototype.cpp:
    (JSC::RegExpPrototype::RegExpPrototype):
    (JSC::RegExpPrototype::getOwnPropertySlot):
    (JSC::RegExpPrototype::getOwnPropertyDescriptor):
    * runtime/RegExpPrototype.h:
    (JSC::RegExpPrototype::createStructure):
    * runtime/StringConstructor.cpp:
    (JSC::StringConstructor::StringConstructor):
    (JSC::StringConstructor::getOwnPropertySlot):
    (JSC::StringConstructor::getOwnPropertyDescriptor):
    * runtime/StringConstructor.h:
    (JSC::StringConstructor::createStructure): Standardized these objects
    to use static tables for function properties.
    
    LayoutTests: Global object initialization is expensive
    https://bugs.webkit.org/show_bug.cgi?id=60933
            
    Reviewed by Gavin Barraclough.
    
    Added a few more expected failures, now that more code uses static hash
    tables.
            
    The fact that built-ins are not deletable, but should be, is covered by
    https://bugs.webkit.org/show_bug.cgi?id=61014
    
    * sputnik/Conformance/15_Native_Objects/15.6_Boolean/15.6.2/S15.6.2.1_A4-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.6_Boolean/15.6.3/15.6.3.1_Boolean.prototype/S15.6.3.1_A1-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.6_Boolean/15.6.4/S15.6.4_A1-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.7_Number/15.7.2/S15.7.2.1_A4-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.7_Number/15.7.3/15.7.3.1_Number.prototype/S15.7.3.1_A2_T1-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.7_Number/15.7.4/S15.7.4_A1-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.2_Date.parse/S15.9.4.2_A1_T2-expected.txt:
    * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.3_Date.UTC/S15.9.4.3_A1_T2-expected.txt:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@86727 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    19fe5092
ErrorPrototype.cpp 3.4 KB