• 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...
cctest Loading commit data...
common Loading commit data...
debugger Loading commit data...
fuzzer Loading commit data...
inspector Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mkgrokdump Loading commit data...
mozilla Loading commit data...
preparser Loading commit data...
promises-aplus Loading commit data...
test262 Loading commit data...
unittests Loading commit data...
wasm-spec-tests Loading commit data...
webkit Loading commit data...
BUILD.gn Loading commit data...
bot_default.gyp Loading commit data...
bot_default.isolate Loading commit data...
default.gyp Loading commit data...
default.isolate Loading commit data...
optimize_for_size.gyp Loading commit data...
optimize_for_size.isolate Loading commit data...
perf.gyp Loading commit data...
perf.isolate Loading commit data...