Reviewed by John.
Overall speedup on cvs-base is about 5%. - reduce QString use in the tokenizer and tighten up QString implementation for a speedup - fix up the QFontFamily implementation, using new QString features too, for a speedup * khtml/html/htmltokenizer.h: Take const QString & instead of QString to avoid an extra copy. * khtml/html/htmltokenizer.cpp: (HTMLTokenizer::begin): Use QString::null instead of "" for QString objects; faster. (HTMLTokenizer::scriptHandler): In APPLE_CHANGES, use new prepend that avoids the need to create a temporary QString. Use QString::null instead of QString() for a null string, and also made other small fixes to avoid temporary QStrings. (HTMLTokenizer::setSrc): Take const QString & instead of QString to avoid an extra copy. * kwq/KWQFont.h: Rename QFontFamily to KWQFontFamily. Make family() inline, add inline familyIsEmpty(). Change KWQFontFamily to store both the QString for the family and the NSString instead of only the NSString to avoid constant conversions back and forth. Remove type cases in CREATE_FAMILY_ARRAY that could result in copying the font object. * kwq/KWQFont.mm: (KWQFontFamily::KWQFontFamily): Fix bug where a copied family object would have a random ref count instead of a ref count of 0. Also update for NSString change. (KWQFontFamily::operator=): Use the ref before deref algorithm instead of the check for self-assignment. (KWQFontFamily::getNSFamily): Compute the NSString for the family name here. To avoid making an NSString every time, use a CFDictionary with QString as a key and NSString as a value instead of using an NSSet. (KWQFontFamily::setFamily): Invalidate the NSString family when the QString family is changed. Moved the code to make things unique to getNSFamily. (KWQFontFamily::operator==): Call getNSFamily rather than * kwq/KWQString.h: Added a prepend and insert overload that take a QChar pointer and length, for use in the tokenizer, and a hash function, for use in CFDictionary. Also added a global set of CFDictionaryKeyCallBacks. * kwq/KWQString.mm: (QString::prepend): New overload calls new insert overload. (QString::insert): Old insert slightly tightened by calling detach() only after the early exit and removing an extra detach from a function that already does forceUnicode. Added the new insert that takes a QChar * and a length. (operator==): Rewrite this so that it is efficient and doesn't involve creating a QString temporary or doing a function call. (QString::hash): Wrote this. Used the same hash algorithm I did in my recent KJS work. (retainQString): Added. For use in CFDictionaryKey callback. (releaseQString): Added. For use in CFDictionaryKey callback. (describeQString): Added. For use in CFDictionaryKey callback. (equalQString): Added. For use in CFDictionaryKey callback. (hashQString): Added. For use in CFDictionaryKey callback. * khtml/rendering/font.h: Change name to KWQFontFamily. * khtml/rendering/font.cpp: (Font::update): Call familyIsEmpty() instead of family().isEmpty() to avoid making and destroying a QString every time. Also put this batch of KWQFontFamily-specific changes inside #if APPLE_CHANGES. Much to my dismay, we have others elsewhere that aren't ifdef'd. * khtml/css/cssstyleselector.cpp: (CSSStyleSelector::applyRule): Change name to KWQFontFamily. Clearly this code needs some #if APPLE_CHANGES, and changing the class name helps make that clear. - change KHTMLSettings so using it doesn't require copying QStrings for a speedup * kwq/KWQKHTMLSettings.h: Made all the functions static members to avoid the unnecessary overhead of passing a this pointer. Added lots of setXXX functions for use by the WebCoreSettings code that gets called by WebKit when settings are changed. Return objects by reference because we can and it avoids copying QString objects. * kwq/KWQKHTMLSettings.mm: Changed all the functions in here to return the same global object each time, and made the set functions update those globals. * kwq/WebCoreSettings.mm: All the setters now call through to KHTMLSettings set functions. - fixed 3126513 -- crash in KWQKHTMLPart::clearTimers() deallocating KWQPageState - did some cleanup in the bridge and the part; part of the process of moving real work out of the bridge * kwq/KWQKHTMLPart.h: Rearrange things to be a little more logical. Mark isFrameSet() const. added an attributedString function here so it's not inside WebCoreBridge. Added an overload of clearTimers that takes a view parameter. * kwq/KWQKHTMLPart.cpp: (KWQKHTMLPart::isFrameSet): Mark this const. * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::clearTimers): Add the overload that takes the view parameter. (KWQKHTMLPart::attributedString): Moved this code in here from the bridge. * kwq/WebCoreBridge.mm: (-[WebCoreBridge selectedAttributedString]): Call the attributedString function in its new home in KWQKHTMLPart. (-[WebCoreBridge attributedStringFrom:startOffset:to:endOffset:]): Ditto. (-[KWQPageState initWithDocument:URL:windowProperties:locationProperties:]): Take a const KURL & instead of a KURL to avoid unnecessary copying. (-[KWQPageState dealloc]): Call the new clearTimers that takes a view parameter. This should fix the crash in autorelease pool deallocation mentioned above. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@3033 268f45cc-cd09-0410-ab3c-d52691b4dbfc