Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2340b02da4545f77aa1c4f2be26aa84117ca2f1d
      
https://github.com/WebKit/WebKit/commit/2340b02da4545f77aa1c4f2be26aa84117ca2f1d
  Author: Yijia Huang <[email protected]>
  Date:   2024-10-01 (Tue, 01 Oct 2024)

  Changed paths:
    A 
JSTests/microbenchmarks/string-replace-one-char-long-string-string-string.js
    A 
JSTests/microbenchmarks/string-replace-one-char-short-string-string-string.js
    M Source/JavaScriptCore/dfg/DFGOperations.cpp
    M Source/JavaScriptCore/runtime/JSString.h
    M Source/JavaScriptCore/runtime/JSStringInlines.h
    M Source/JavaScriptCore/runtime/Operations.h
    M Source/JavaScriptCore/runtime/StringPrototype.cpp
    M Source/JavaScriptCore/runtime/StringPrototypeInlines.h

  Log Message:
  -----------
  [JSC] Add a fast path for String.prototype.replace one char with a simple 
string
https://bugs.webkit.org/show_bug.cgi?id=280429
rdar://136775172

Reviewed by Yusuke Suzuki.

Rope string consists of three fibers which can be either a rope string
or a regular string. To replace one character with a simple string in
a rope string. The current implementation constructs the entire string
by concatenating all fiber leaves first, which is costly. This patch
proposes a fast path for replacing one character, which finds the
matched fiber leaf first and then reconstructs with rope strings.
This approach can get rid of the costly overhead for resolving the
entire string.

Micro-benchmark Result with `--inner 20 --outer 20`:
                                                        before                  
  after

string-replace-one-char-long-string-string-string   2.0279+-0.0171     ^      
0.2663+-0.0066        ^ definitely 7.6157x faster
string-replace-one-char-short-string-string-string  1.0679+-0.0078     ^      
0.8676+-0.0085        ^ definitely 1.2309x faster

* JSTests/microbenchmarks/string-replace-one-char.js: Added.
(test):
* Source/JavaScriptCore/runtime/JSString.cpp:
(JSC::JSString::replaceOneCharImpl):
(JSC::JSString::replaceOneChar):
* Source/JavaScriptCore/runtime/JSString.h:
* Source/JavaScriptCore/runtime/RegExp.h:
* Source/JavaScriptCore/runtime/StringPrototype.cpp:
(JSC::tryReplaceOneChar):
(JSC::replaceUsingRegExpSearch):

Canonical link: https://commits.webkit.org/284507@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to