Changeset 141295 in webkit
- Timestamp:
- Jan 30, 2013 12:05:14 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r141222 r141295 1 2013-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 1 24 2013-01-29 Geoffrey Garen <ggaren@apple.com> 2 25 -
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r141099 r141295 158 158 , m_classInfo(classInfo) 159 159 , m_transitionWatchpointSet(InitializedWatching) 160 , m_outOfLineCapacity(0)161 160 , m_inlineCapacity(inlineCapacity) 162 161 , m_offset(invalidOffset) … … 185 184 , m_classInfo(&s_info) 186 185 , m_transitionWatchpointSet(InitializedWatching) 187 , m_outOfLineCapacity(0)188 186 , m_inlineCapacity(0) 189 187 , m_offset(invalidOffset) … … 208 206 , m_classInfo(previous->m_classInfo) 209 207 , m_transitionWatchpointSet(InitializedWatching) 210 , m_outOfLineCapacity(previous->m_outOfLineCapacity)211 208 , m_inlineCapacity(previous->m_inlineCapacity) 212 209 , m_offset(invalidOffset) … … 274 271 } 275 272 276 void Structure::growOutOfLineCapacity()277 {278 m_outOfLineCapacity = nextOutOfLineStorageCapacity(m_outOfLineCapacity);279 }280 281 273 size_t Structure::suggestedNewOutOfLineStorageCapacity() 282 274 { 283 return nextOutOfLineStorageCapacity( m_outOfLineCapacity);275 return nextOutOfLineStorageCapacity(outOfLineCapacity()); 284 276 } 285 277 … … 366 358 ASSERT(structure != transition); 367 359 offset = transition->putSpecificValue(globalData, propertyName, attributes, specificValue); 368 if (transition->outOfLineSize() > transition->outOfLineCapacity())369 transition->growOutOfLineCapacity();370 360 return transition; 371 361 } … … 392 382 393 383 offset = transition->putSpecificValue(globalData, propertyName, attributes, specificValue); 394 if (transition->outOfLineSize() > transition->outOfLineCapacity())395 transition->growOutOfLineCapacity();396 384 397 385 transition->m_offset = offset; … … 665 653 pin(); 666 654 667 PropertyOffset offset = putSpecificValue(globalData, propertyName, attributes, specificValue); 668 if (outOfLineSize() > outOfLineCapacity()) 669 growOutOfLineCapacity(); 670 return offset; 655 return putSpecificValue(globalData, propertyName, attributes, specificValue); 671 656 } 672 657 -
trunk/Source/JavaScriptCore/runtime/Structure.h
r141050 r141295 183 183 bool transitivelyTransitionedFrom(Structure* structureToFind); 184 184 185 void growOutOfLineCapacity();186 185 unsigned outOfLineCapacity() const 187 186 { 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); 190 197 } 191 198 unsigned outOfLineSize() const … … 227 234 { 228 235 ASSERT(structure()->classInfo() == &s_info); 229 return m_outOfLineCapacity+ inlineCapacity();236 return outOfLineCapacity() + inlineCapacity(); 230 237 } 231 238 … … 436 443 mutable InlineWatchpointSet m_transitionWatchpointSet; 437 444 438 uint32_t m_outOfLineCapacity;439 445 uint8_t m_inlineCapacity; 440 446 COMPILE_ASSERT(firstOutOfLineOffset < 256, firstOutOfLineOffset_fits); -
trunk/Source/WTF/ChangeLog
r141263 r141295 1 2013-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 1 13 2013-01-30 Zeno Albisser <zeno@webkit.org> 2 14 -
trunk/Source/WTF/wtf/MathExtras.h
r140186 r141295 430 430 } 431 431 432 namespace WTF { 433 434 // Be careful, this might be super slow in a hot loop. 435 template<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 441 template<> 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 432 458 #endif // #ifndef WTF_MathExtras_h
Note: See TracChangeset
for help on using the changeset viewer.