• ggaren@apple.com's avatar
    Switched ropes from malloc memory to GC memory · fbf6d9a0
    ggaren@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=70364
    
    Reviewed by Gavin Barraclough.
    
    ~1% SunSpider speedup. Neutral elsewhere. Removes one cause for strings
    having C++ destructors.
    
    * heap/MarkStack.cpp:
    (JSC::visitChildren): Call the JSString visitChildren function now,
    since it's no longer a no-op.
    
    * runtime/JSString.cpp:
    (JSC::JSString::~JSString): Moved this destructor out of line because
    it's called virtually, so there's no value to inlining.
    
    (JSC::JSString::RopeBuilder::expand): Switched RopeBuilder to be a thin
    initializing wrapper around JSString. JSString now represents ropes
    directly, rather than relying on an underlying malloc object.
    
    (JSC::JSString::visitChildren): Visit our rope fibers, since they're GC
    objects now.
    
    (JSC::JSString::resolveRope):
    (JSC::JSString::resolveRopeSlowCase):
    (JSC::JSString::outOfMemory): Updated for operating on JSStrings instead
    of malloc objects.
    
    (JSC::JSString::replaceCharacter): Removed optimizations for substringing
    ropes and replacing subsections of ropes. We want to reimplement versions
    of these optimizations in the future, but this patch already has good
    performance without them.
    
    * runtime/JSString.h:
    (JSC::RopeBuilder::JSString):
    (JSC::RopeBuilder::finishCreation):
    (JSC::RopeBuilder::createNull):
    (JSC::RopeBuilder::create):
    (JSC::RopeBuilder::createHasOtherOwner):
    (JSC::jsSingleCharacterString):
    (JSC::jsSingleCharacterSubstring):
    (JSC::jsNontrivialString):
    (JSC::jsString):
    (JSC::jsSubstring):
    (JSC::jsOwnedString): Lots of mechanical changes here. The two important
    things are: (1) The fibers in JSString::m_fibers are JSStrings now, not
    malloc objects; (2) I simplified the JSString constructor interface to
    only accept PassRefPtr<StringImpl>, instead of variations on that like
    UString, reducing refcount churn.
    
    * runtime/JSValue.h:
    * runtime/JSValue.cpp:
    (JSC::JSValue::toPrimitiveString): Updated this function to return a
    JSString instead of a UString, since that's what clients want now.
    
    * runtime/Operations.cpp:
    (JSC::jsAddSlowCase):
    * runtime/Operations.h:
    (JSC::jsString):
    * runtime/SmallStrings.cpp:
    (JSC::SmallStrings::createEmptyString): Updated for interface changes above.
    
    * runtime/StringConstructor.cpp:
    (JSC::constructWithStringConstructor):
    * runtime/StringObject.h:
    (JSC::StringObject::create): Don't create a new JSString if we already
    have a JSString.
    
    * runtime/StringPrototype.cpp:
    (JSC::stringProtoFuncConcat): Updated for interface changes above.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@97827 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    fbf6d9a0
StringConstructor.cpp 4.86 KB