Changeset 37645 in webkit for trunk/JavaScriptCore/kjs/JSObject.h


Ignore:
Timestamp:
Oct 16, 2008, 7:57:02 PM (17 years ago)
Author:
[email protected]
Message:

2008-10-16 Sam Weinig <[email protected]>

Reviewed by Maciej Stachowiak.

Fix for https://bugs.webkit.org/show_bug.cgi?id=21683
Don't create intermediate StructureIDs for builtin objects

First step in reduce number of StructureIDs created when initializing the
JSGlobalObject.

  • In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning the StructureID. This patch just implements this strategy for ObjectPrototype but alone reduces the number of StructureIDs create for about:blank by 10, from 142 to 132.
  • kjs/JSGlobalObject.cpp: (JSC::JSGlobalObject::reset):
  • kjs/JSObject.cpp: (JSC::JSObject::putDirectFunctionWithoutTransition):
  • kjs/JSObject.h: (JSC::JSObject::putDirectWithoutTransition):
  • kjs/ObjectPrototype.cpp: (JSC::ObjectPrototype::ObjectPrototype):
  • kjs/ObjectPrototype.h:
  • kjs/StructureID.cpp: (JSC::StructureID::addPropertyWithoutTransition):
  • kjs/StructureID.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/JSObject.h

    r37497 r37645  
    158158        void putDirect(const Identifier& propertyName, JSValue* value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot);
    159159        void putDirectFunction(ExecState* exec, InternalFunction* function, unsigned attr = 0);
     160        void putDirectWithoutTransition(const Identifier& propertyName, JSValue* value, unsigned attr);
     161        void putDirectFunctionWithoutTransition(ExecState* exec, InternalFunction* function, unsigned attr);
    160162
    161163        // Fast access to known property offsets.
     
    414416}
    415417
     418inline void JSObject::putDirectWithoutTransition(const Identifier& propertyName, JSValue* value, unsigned attributes)
     419{
     420    size_t currentCapacity = m_structureID->propertyStorageCapacity();
     421    size_t offset = m_structureID->addPropertyWithoutTransition(propertyName, attributes);
     422    if (currentCapacity != m_structureID->propertyStorageCapacity())
     423        allocatePropertyStorage(currentCapacity, m_structureID->propertyStorageCapacity());
     424    m_propertyStorage[offset] = value;
     425}
     426
    416427inline void JSObject::transitionTo(StructureID* newStructureID)
    417428{
Note: See TracChangeset for help on using the changeset viewer.