• Jaroslav Sevcik's avatar
    [builtins] Shortcut for empty substrings. · 67f30185
    Jaroslav Sevcik authored
    There is no fast path for 0-length substrings, which implied runtime
    calls for some of the trickier types of strings (such as non-flat
    cons-strings). This made for a big performance gap between
    String.p.slice and String.p.substring for those inputs.
    
    This CL just adds the 0-length shortcut in CSA implementation
    of SubString.
    
    Here is an example where it makes difference:
    
      let s = "abcdefghijkalmnopqrst";
      let a = "";
    
      console.time("Substring");
      for (let i = 0; i < 100000; i++) {
        s += "0";
        a += s.substring(0, 0);
      }
      console.timeEnd("Substring");
    
    Before this change:
    > console.timeEnd: Substring, 640.308000
    
    After this change:
    > console.timeEnd: Substring, 13.242000
    
    For completeness, here is the time for slice:
    > console.timeEnd: Slice, 13.142000
    
    This also recovers performance in the jsdom library, as
    observed in https://github.com/jsdom/jsdom/issues/2350.
    
    Bug: v8:6730
    Change-Id: I7d2127e4506a86ec2a7ed378293476c3699dc47a
    Reviewed-on: https://chromium-review.googlesource.com/c/1365282
    Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
    Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58071}
    67f30185
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...