Changeset 27448 in webkit for trunk/JavaScriptCore/wtf/Vector.h


Ignore:
Timestamp:
Nov 5, 2007, 1:27:15 PM (18 years ago)
Author:
ggaren
Message:

JavaScriptCore:

Reviewed by Darin Adler.


http://bugs.webkit.org/show_bug.cgi?id=15835

Switched List implementation from a custom heap allocator to an inline
Vector, for a disappointing .5% SunSpider speedup.


Also renamed List::slice to List::getSlice because "get" is the
conventional prefix for functions returning a value through an out
parameter.

  • kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function calls and memory accesses.
  • kjs/bool_object.cpp: (BooleanObjectImp::construct): Removed questionable use of iterator.
  • kjs/list.cpp:
  • kjs/list.h: New List class, implemented in terms of Vector. Two interesting differences:
    1. The inline capacity is 8, not 5. Many of the Lists constructed during a SunSpider run are larger than 5; almost none are larger than 8.
  1. The growth factor is 4, not 2. Since we can guarantee that Lists aren't long-lived, we can grow them more aggressively, to avoid excessive copying.
  • kjs/regexp_object.cpp: (RegExpObjectImp::construct): Removed redundant function calls.
  • kjs/string_object.cpp: (KJS::StringObjectImp::construct): Removed questionable use of iterator.
  • wtf/Vector.h: (WTF::::uncheckedAppend): Added a fast, unchecked version of append.

WebCore:

Reviewed by Darin Adler.


http://bugs.webkit.org/show_bug.cgi?id=15835

Small adaptations to new KJS::List class.

  • bindings/js/kjs_window.cpp: (KJS::WindowFunc::callAsFunction): (KJS::ScheduledAction::ScheduledAction):

WebKit:

Reviewed by Darin Adler.


http://bugs.webkit.org/show_bug.cgi?id=15835

Small adaptations to new KJS::List class.

  • ForwardingHeaders/kjs/value.h: Added.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/wtf/Vector.h

    r26618 r27448  
    457457        template<typename U> void append(const U*, size_t);
    458458        template<typename U> void append(const U&);
     459        template<typename U> void uncheckedAppend(const U& val);
    459460        template<typename U, size_t c> void append(const Vector<U, c>&);
    460461
     
    666667        if (size() == capacity())
    667668            ptr = expandCapacity(size() + 1, ptr);
     669        new (end()) T(*ptr);
     670        ++m_size;
     671    }
     672
     673    // This version of append saves a branch in the case where you know that the
     674    // vector's capacity is large enough for the append to succeed.
     675
     676    template<typename T, size_t inlineCapacity> template<typename U>
     677    inline void Vector<T, inlineCapacity>::uncheckedAppend(const U& val)
     678    {
     679        ASSERT(size() < capacity());
     680        const U* ptr = &val;
    668681        new (end()) T(*ptr);
    669682        ++m_size;
Note: See TracChangeset for help on using the changeset viewer.