[JSC] Optimize Kraken stringify
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Dec 2016 10:28:55 +0000 (10:28 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Dec 2016 10:28:55 +0000 (10:28 +0000)
commit88ac19673bff584eaa7bb470a53d228f3295eb1e
tree7b1b6a435558a85e453c9e6a0219a59ab642ecac
parent9461038a63cd83ad1b8c09ab58c33f0a4907241f
[JSC] Optimize Kraken stringify
https://bugs.webkit.org/show_bug.cgi?id=165857

Reviewed by Darin Adler.

Kraken json-stringify-tinderbox performance heavily relies on StringBuilder::appendQuotedJSONString.
According to the result produced by Linux `perf`, it occupies 28% of execution time.

We tighten the hottest loop in the above function. We create the super fast path for non escaping case.
And add " and \ cases (since including " in the string is common). Then we fallback to the slow case.

It improves the performance 5.5% in Kraken json-stringify-tinderbox in MBP.

    Performance result in my MBP (dandelion).

        Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
        between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
        jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
        with 95% confidence intervals in milliseconds.

                                           baseline                  patched

        json-stringify-tinderbox        29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster

        <arithmetic>                    29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster

    Performance result in my Linux laptop (hanayamata).

        Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
        between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
        jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
        with 95% confidence intervals in milliseconds.

                                           baseline                  patched

        json-stringify-tinderbox        26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster

        <arithmetic>                    26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster

* wtf/text/StringBuilder.cpp:
(WTF::appendQuotedJSONStringInternalSlow):
(WTF::appendQuotedJSONStringInternal):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@209858 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WTF/ChangeLog
Source/WTF/wtf/text/StringBuilder.cpp