-
ggaren@apple.com authored
Reviewed by Geoffrey Garen. 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. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@86653 268f45cc-cd09-0410-ab3c-d52691b4dbfc
836c5d91