• 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
elements.h 10.7 KB