Speed up StringBuilder::appendQuotedJSONString()
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Jul 2015 08:32:19 +0000 (08:32 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Jul 2015 08:32:19 +0000 (08:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=147352

Patch by Benjamin Poulain <bpoulain@apple.com> on 2015-07-28
Reviewed by Andreas Kling.

* wtf/text/StringBuilder.cpp:
(WTF::appendQuotedJSONStringInternal):
The cases '"' and '\\' are not that uncommon, and they can easily
be handled in the original branch testing for them.

This is about 2.5% better on the JSON.stringify test.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@187484 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/text/StringBuilder.cpp

index 7d797ef..b1c30bd 100644 (file)
@@ -1,3 +1,17 @@
+2015-07-28  Benjamin Poulain  <bpoulain@apple.com>
+
+        Speed up StringBuilder::appendQuotedJSONString()
+        https://bugs.webkit.org/show_bug.cgi?id=147352
+
+        Reviewed by Andreas Kling.
+
+        * wtf/text/StringBuilder.cpp:
+        (WTF::appendQuotedJSONStringInternal):
+        The cases '"' and '\\' are not that uncommon, and they can easily
+        be handled in the original branch testing for them.
+
+        This is about 2.5% better on the JSON.stringify test.
+
 2015-07-27  Alex Christensen  <achristensen@webkit.org>
 
         Progress towards building AppleWin with CMake
index ff09afc..81c3a88 100644 (file)
@@ -365,7 +365,9 @@ template <typename OutputCharacterType, typename InputCharacterType>
 static void appendQuotedJSONStringInternal(OutputCharacterType*& output, const InputCharacterType* input, unsigned length)
 {
     for (const InputCharacterType* end = input + length; input != end; ++input) {
-        if (*input > 0x1F && *input != '"' && *input != '\\') {
+        if (LIKELY(*input > 0x1F)) {
+            if (*input == '"' || *input == '\\')
+                *output++ = '\\';
             *output++ = *input;
             continue;
         }
@@ -390,14 +392,6 @@ static void appendQuotedJSONStringInternal(OutputCharacterType*& output, const I
             *output++ = '\\';
             *output++ = 'b';
             break;
-        case '"':
-            *output++ = '\\';
-            *output++ = '"';
-            break;
-        case '\\':
-            *output++ = '\\';
-            *output++ = '\\';
-            break;
         default:
             ASSERT((*input & 0xFF00) == 0);
             static const char hexDigits[] = "0123456789abcdef";