Ignore:
Timestamp:
May 17, 2011, 7:39:00 PM (14 years ago)
Author:
[email protected]
Message:

Source/JavaScriptCore: Rolling back in r86653 with build fixed.

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.

  • 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:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/DerivedSources.pro

    r86657 r86727  
    1515
    1616LUT_FILES += \
     17    runtime/ArrayConstructor.cpp \
    1718    runtime/ArrayPrototype.cpp \
     19    runtime/BooleanPrototype.cpp \
     20    runtime/DateConstructor.cpp \
    1821    runtime/DatePrototype.cpp \
     22    runtime/ErrorPrototype.cpp \
     23    runtime/JSGlobalObject.cpp \
    1924    runtime/JSONObject.cpp \
    2025    runtime/MathObject.cpp \
    2126    runtime/NumberConstructor.cpp \
     27    runtime/NumberPrototype.cpp \
    2228    runtime/ObjectConstructor.cpp \
     29    runtime/ObjectPrototype.cpp \
    2330    runtime/RegExpConstructor.cpp \
    2431    runtime/RegExpObject.cpp \
    25     runtime/StringPrototype.cpp
     32    runtime/RegExpPrototype.cpp \
     33    runtime/StringConstructor.cpp \
     34    runtime/StringPrototype.cpp \
    2635
    2736KEYWORDLUT_FILES += \
Note: See TracChangeset for help on using the changeset viewer.