From 91437969ddb28bc81b3652986a67aae7e2465db2 Mon Sep 17 00:00:00 2001 From: Kulanthaivel Palanichamy Date: Wed, 15 Aug 2012 17:14:48 -0700 Subject: [WebKit] Browsermark DomAdvSearch and DomSearch optimizations This patch is a combination of the following optimizations. Optimize appendCharactersReplacingEntities [Performance] Optimize innerHTML and outerHTML https://bugs.webkit.org/show_bug.cgi?id=81214 Optimize Dromaeo/dom-query.html by caching NodeRareData on Document https://bugs.webkit.org/show_bug.cgi?id=90059 Optimize Dromaeo/dom-attr.html by speeding up Element::getAttribute() https://bugs.webkit.org/show_bug.cgi?id=90174 Change argument types of Element::getAttribute*() from String to AtomicString https://bugs.webkit.org/show_bug.cgi?id=90246 Conflicts: Source/WebCore/ChangeLog Source/WebCore/dom/Document.cpp Source/WebCore/dom/Document.h Conflicts: Source/WebCore/ChangeLog Change-Id: I9ca3d2e883155e2ad08c3cb0c5912b935ebe9406 --- Source/JavaScriptCore/wtf/text/StringBuilder.h | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'Source/JavaScriptCore') diff --git a/Source/JavaScriptCore/wtf/text/StringBuilder.h b/Source/JavaScriptCore/wtf/text/StringBuilder.h index f10af64..e891932 100644 --- a/Source/JavaScriptCore/wtf/text/StringBuilder.h +++ b/Source/JavaScriptCore/wtf/text/StringBuilder.h @@ -43,6 +43,9 @@ public: void append(const String& string) { + if (!string.length()) + return; + // If we're appending to an empty string, and there is not buffer // (in case reserveCapacity has been called) then just retain the // string. @@ -54,6 +57,22 @@ public: append(string.characters(), string.length()); } + void append(const StringBuilder& other) + { + if (!other.m_length) + return; + + // If we're appending to an empty string, and there is not a buffer (reserveCapacity has not been called) + // then just retain the string. + if (!m_length && !m_buffer && !other.m_string.isNull()) { + m_string = other.m_string; + m_length = other.m_length; + return; + } + + append(other.characters(), other.m_length); + } + void append(const char* characters) { if (characters) @@ -114,6 +133,16 @@ public: return m_buffer->characters()[i]; } + const UChar* characters() const + { + if (!m_length) + return 0; + if (!m_string.isNull()) + return m_string.characters(); + ASSERT(m_buffer); + return m_buffer->characters(); + } + void clear() { m_length = 0; -- cgit v1.1