• Benedikt Meurer's avatar
    [builtins] Add fast-path for JSTypedArray to CreateListFromArrayLike. · f31bae03
    Benedikt Meurer authored
    It's quite common today to use Function#apply together with typed
    arrays, for example to construct a String from character codes (or code
    points) within a Uint8Array or Uint16Array, i.e.
    
      String.fromCharCode.apply(undefined, uint8array)
    
    is seen quite often on the web. But there are other interesting cases
    like
    
      Math.max.apply(undefined, float64array)
    
    to compute the maximum value in a Float64Array, which is definitely not
    the fastest implementation, but quite convenient and readable.
    Unfortunately these cases hit the super-slow-path of the Function#apply
    machinery in V8 currently, because Function#apply doesn't have any
    fast-path for TypedArrays.
    
    This CL adds a proper fast-path to CreateListFromArrayLike to the
    ElementsAccessor, which can be used as long as the typed array that's
    passed wasn't neutered. With this fast-path in place, the performance on
    the micro-benchmark mentioned in the issue improves from
    
      stringFromCharCode: 6386 ms.
      stringFromCodePoint: 8752 ms.
    
    to
    
      stringFromCharCode: 1932 ms.
      stringFromCodePoint: 4262 ms.
    
    which corresponds to a 2.0x-3.3x improvement.
    
    Bug: v8:2435
    Change-Id: I4d39666e53644b11d5856982b005928e26f296fe
    Reviewed-on: https://chromium-review.googlesource.com/657405Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#47936}
    f31bae03
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles 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...
.editorconfig Loading commit data...
.gitignore Loading commit data...
.gn 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...
Makefile Loading commit data...
Makefile.android 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...