Changeset 141295 in webkit


Ignore:
Timestamp:
Jan 30, 2013 12:05:14 PM (11 years ago)
Author:
mhahnenberg@apple.com
Message:

Structure::m_outOfLineCapacity is unnecessary
https://bugs.webkit.org/show_bug.cgi?id=108206

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

We can calculate our out of line capacity by using the outOfLineSize and our knowledge about our resize policy.
According to GDB, this knocks Structures down from 136 bytes to 128 bytes (I'm guessing the extra bytes are from
better alignment of object fields), which puts Structures in a smaller size class. Woohoo! Looks neutral on our
benchmarks.

  • runtime/Structure.cpp:

(JSC::Structure::Structure):
(JSC):
(JSC::Structure::suggestedNewOutOfLineStorageCapacity):
(JSC::Structure::addPropertyTransition):
(JSC::Structure::addPropertyWithoutTransition):

  • runtime/Structure.h:

(Structure):
(JSC::Structure::outOfLineCapacity):
(JSC::Structure::totalStorageCapacity):

Source/WTF:

We're adding a new function that gives us the ability to round a value up to the next power of a certain base.

  • wtf/MathExtras.h:

(WTF::roundUpToPowerOf):

Location:
trunk/Source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r141222 r141295  
     12013-01-29  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Structure::m_outOfLineCapacity is unnecessary
     4        https://bugs.webkit.org/show_bug.cgi?id=108206
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        We can calculate our out of line capacity by using the outOfLineSize and our knowledge about our resize policy.
     9        According to GDB, this knocks Structures down from 136 bytes to 128 bytes (I'm guessing the extra bytes are from
     10        better alignment of object fields), which puts Structures in a smaller size class. Woohoo! Looks neutral on our
     11        benchmarks.
     12
     13        * runtime/Structure.cpp:
     14        (JSC::Structure::Structure):
     15        (JSC):
     16        (JSC::Structure::suggestedNewOutOfLineStorageCapacity):
     17        (JSC::Structure::addPropertyTransition):
     18        (JSC::Structure::addPropertyWithoutTransition):
     19        * runtime/Structure.h:
     20        (Structure):
     21        (JSC::Structure::outOfLineCapacity):
     22        (JSC::Structure::totalStorageCapacity):
     23
    1242013-01-29  Geoffrey Garen  <ggaren@apple.com>
    225
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r141099 r141295  
    158158    , m_classInfo(classInfo)
    159159    , m_transitionWatchpointSet(InitializedWatching)
    160     , m_outOfLineCapacity(0)
    161160    , m_inlineCapacity(inlineCapacity)
    162161    , m_offset(invalidOffset)
     
    185184    , m_classInfo(&s_info)
    186185    , m_transitionWatchpointSet(InitializedWatching)
    187     , m_outOfLineCapacity(0)
    188186    , m_inlineCapacity(0)
    189187    , m_offset(invalidOffset)
     
    208206    , m_classInfo(previous->m_classInfo)
    209207    , m_transitionWatchpointSet(InitializedWatching)
    210     , m_outOfLineCapacity(previous->m_outOfLineCapacity)
    211208    , m_inlineCapacity(previous->m_inlineCapacity)
    212209    , m_offset(invalidOffset)
     
    274271}
    275272
    276 void Structure::growOutOfLineCapacity()
    277 {
    278     m_outOfLineCapacity = nextOutOfLineStorageCapacity(m_outOfLineCapacity);
    279 }
    280 
    281273size_t Structure::suggestedNewOutOfLineStorageCapacity()
    282274{
    283     return nextOutOfLineStorageCapacity(m_outOfLineCapacity);
     275    return nextOutOfLineStorageCapacity(outOfLineCapacity());
    284276}
    285277 
     
    366358        ASSERT(structure != transition);
    367359        offset = transition->putSpecificValue(globalData, propertyName, attributes, specificValue);
    368         if (transition->outOfLineSize() > transition->outOfLineCapacity())
    369             transition->growOutOfLineCapacity();
    370360        return transition;
    371361    }
     
    392382
    393383    offset = transition->putSpecificValue(globalData, propertyName, attributes, specificValue);
    394     if (transition->outOfLineSize() > transition->outOfLineCapacity())
    395         transition->growOutOfLineCapacity();
    396384
    397385    transition->m_offset = offset;
     
    665653    pin();
    666654
    667     PropertyOffset offset = putSpecificValue(globalData, propertyName, attributes, specificValue);
    668     if (outOfLineSize() > outOfLineCapacity())
    669         growOutOfLineCapacity();
    670     return offset;
     655    return putSpecificValue(globalData, propertyName, attributes, specificValue);
    671656}
    672657
  • trunk/Source/JavaScriptCore/runtime/Structure.h

    r141050 r141295  
    183183        bool transitivelyTransitionedFrom(Structure* structureToFind);
    184184
    185         void growOutOfLineCapacity();
    186185        unsigned outOfLineCapacity() const
    187186        {
    188             ASSERT(structure()->classInfo() == &s_info);
    189             return m_outOfLineCapacity;
     187            unsigned outOfLineSize = this->outOfLineSize();
     188
     189            if (!outOfLineSize)
     190                return 0;
     191
     192            if (outOfLineSize <= initialOutOfLineCapacity)
     193                return initialOutOfLineCapacity;
     194
     195            ASSERT(outOfLineSize > initialOutOfLineCapacity);
     196            return WTF::roundUpToPowerOf<outOfLineGrowthFactor>(outOfLineSize);
    190197        }
    191198        unsigned outOfLineSize() const
     
    227234        {
    228235            ASSERT(structure()->classInfo() == &s_info);
    229             return m_outOfLineCapacity + inlineCapacity();
     236            return outOfLineCapacity() + inlineCapacity();
    230237        }
    231238
     
    436443        mutable InlineWatchpointSet m_transitionWatchpointSet;
    437444
    438         uint32_t m_outOfLineCapacity;
    439445        uint8_t m_inlineCapacity;
    440446        COMPILE_ASSERT(firstOutOfLineOffset < 256, firstOutOfLineOffset_fits);
  • trunk/Source/WTF/ChangeLog

    r141263 r141295  
     12013-01-29  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Structure::m_outOfLineCapacity is unnecessary
     4        https://bugs.webkit.org/show_bug.cgi?id=108206
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        We're adding a new function that gives us the ability to round a value up to the next power of a certain base.
     9
     10        * wtf/MathExtras.h:
     11        (WTF::roundUpToPowerOf):
     12
    1132013-01-30  Zeno Albisser  <zeno@webkit.org>
    214
  • trunk/Source/WTF/wtf/MathExtras.h

    r140186 r141295  
    430430}
    431431
     432namespace WTF {
     433
     434// Be careful, this might be super slow in a hot loop.
     435template<size_t exponent> inline size_t roundUpToPowerOf(size_t v)
     436{
     437    return round(pow(static_cast<double>(exponent), ceil(log(static_cast<double>(v)) / log(static_cast<double>(exponent)))));
     438}
     439
     440// From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
     441template<> inline size_t roundUpToPowerOf<2>(size_t v)
     442{
     443    v--;
     444    v |= v >> 1;
     445    v |= v >> 2;
     446    v |= v >> 4;
     447    v |= v >> 8;
     448    v |= v >> 16;
     449#if defined(__LP64__) && __LP64__
     450    v |= v >> 32;
     451#endif
     452    v++;
     453    return v;
     454}
     455
     456} // namespace WTF
     457
    432458#endif // #ifndef WTF_MathExtras_h
Note: See TracChangeset for help on using the changeset viewer.