diff options
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore')
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/ChangeLog | 29 | ||||
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp | 3 | ||||
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h | 10 |
3 files changed, 42 insertions, 0 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index 3321570176..d55356fde9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,3 +1,32 @@ +2009-02-02 Darin Adler <darin@apple.com> + + Reviewed by Dave Hyatt. + + Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity + https://bugs.webkit.org/show_bug.cgi?id=23676 + + * API/JSObjectRef.cpp: + (JSObjectCopyPropertyNames): Use reserveInitialCapacity. + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): Ditto. + (JSC::Lexer::clear): Ditto. + + * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of + reserveCapacity for use when the vector is brand new (still size 0 with no + capacity other than the inline capacity). + +2009-03-19 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Fixed <rdar://problem/6033712> -- a little bit of hardening in the Collector. + + SunSpider reports no change. I also verified in the disassembly that + we end up with a single compare to constant. + + * runtime/Collector.cpp: + (JSC::Heap::heapAllocate): + 2009-01-22 Oliver Hunt <oliver@apple.com> Reviewed by Geoff Garen. diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp index 69cb05e17a..7d3e27f219 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp @@ -365,6 +365,9 @@ collect: // didn't find a block, and GC didn't reclaim anything, need to allocate a new block size_t numBlocks = heap.numBlocks; if (usedBlocks == numBlocks) { + static const size_t maxNumBlocks = ULONG_MAX / sizeof(CollectorBlock*) / GROWTH_FACTOR; + if (numBlocks > maxNumBlocks) + CRASH(); numBlocks = max(MIN_ARRAY_SIZE, numBlocks * GROWTH_FACTOR); heap.numBlocks = numBlocks; heap.blocks = static_cast<CollectorBlock**>(fastRealloc(heap.blocks, numBlocks * sizeof(CollectorBlock*))); diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h index 880b45de87..1483129e25 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h @@ -503,6 +503,7 @@ namespace WTF { void grow(size_t size); void resize(size_t size); void reserveCapacity(size_t newCapacity); + void reserveInitialCapacity(size_t initialCapacity); void shrinkCapacity(size_t newCapacity); void shrinkToFit() { shrinkCapacity(size()); } @@ -733,6 +734,15 @@ namespace WTF { } template<typename T, size_t inlineCapacity> + inline void Vector<T, inlineCapacity>::reserveInitialCapacity(size_t initialCapacity) + { + ASSERT(!m_size); + ASSERT(capacity() == inlineCapacity); + if (initialCapacity > inlineCapacity) + m_buffer.allocateBuffer(initialCapacity); + } + + template<typename T, size_t inlineCapacity> void Vector<T, inlineCapacity>::shrinkCapacity(size_t newCapacity) { if (newCapacity >= capacity()) |