[webkit-changes] [WebKit/WebKit] 29e5f2: [JSC] Add Array.from(Array) fast path

Yusuke Suzuki noreply at github.com
Mon Oct 23 19:32:36 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 29e5f281e3273d83748455fb6d3325e7722a8b31
      https://github.com/WebKit/WebKit/commit/29e5f281e3273d83748455fb6d3325e7722a8b31
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-10-23 (Mon, 23 Oct 2023)

  Changed paths:
    A JSTests/microbenchmarks/array-from-array.js
    M Source/JavaScriptCore/builtins/ArrayConstructor.js
    M Source/JavaScriptCore/builtins/BuiltinNames.h
    M Source/JavaScriptCore/bytecode/LinkTimeConstant.h
    M Source/JavaScriptCore/runtime/ArrayPrototype.cpp
    M Source/JavaScriptCore/runtime/ArrayPrototype.h
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp

  Log Message:
  -----------
  [JSC] Add Array.from(Array) fast path
https://bugs.webkit.org/show_bug.cgi?id=263490
rdar://117290480

Reviewed by Michael Saboff.

This patch adds Array.from fast path for simple arrays without callbacks, like, `Array.from(array)`.
This is because this pattern can be used for fast array cloning. The fast path is 8.14x faster than
the Array.from generic path.

We should take Array.from fast path when array iterator protocol allows. This ensures that we can iterate
an array without creating an iterator. And it also ensures that our Array prototype chain is sane. So,
we can skip many costly operations and directly copy data.

    array-from-array              2.6646+-0.0174     ^      0.3271+-0.0155        ^ definitely 8.1469x faster

* JSTests/microbenchmarks/array-from-array.js: Added.
* Source/JavaScriptCore/builtins/ArrayConstructor.js:
* Source/JavaScriptCore/builtins/BuiltinNames.h:
* Source/JavaScriptCore/bytecode/LinkTimeConstant.h:
* Source/JavaScriptCore/runtime/ArrayPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/ArrayPrototype.h:
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):

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




More information about the webkit-changes mailing list