[webkit-changes] [WebKit/WebKit] ecc193: [JSC] Prefer array move in unshift
Yusuke Suzuki
noreply at github.com
Wed Oct 26 13:33:27 PDT 2022
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ecc19320f35ab186fd51bc558b871367f53814e6
https://github.com/WebKit/WebKit/commit/ecc19320f35ab186fd51bc558b871367f53814e6
Author: Yusuke Suzuki <ysuzuki at apple.com>
Date: 2022-10-26 (Wed, 26 Oct 2022)
Changed paths:
M JSTests/stress/unshiftCountSlowCase-correct-postCapacity.js
M Source/JavaScriptCore/runtime/ArrayPrototype.cpp
M Source/JavaScriptCore/runtime/JSArray.cpp
M Source/JavaScriptCore/runtime/JSArray.h
Log Message:
-----------
[JSC] Prefer array move in unshift
https://bugs.webkit.org/show_bug.cgi?id=247027
rdar://101561203
Reviewed by Michael Saboff.
It turned out that we should always use array-move based unshift for non ArrayStorage arrays.
Converting normal arrays with ArrayStorage is too costly since it penaltizes many code having optimized
path for non ArrayStorage arrays. Plus, unshift operation is adding an element: this means we frequently
move elements to grow an array. So the balance between ArrayStorage based implementation v.s. array-move
is different from Array#shift. And using array-move based unshift is more efficient in most cases.
We also modified JSTests/stress/unshiftCountSlowCase-correct-postCapacity.js to make it ArrayStorage to align
the original test purpose. This test pass when memory is exhausted. Because of this change, this test gets
optimized, and it cannot exhaust the memory until the timeout now.
JetStream2/coffeescript-wtb gets 8.01% improvement and JetStream2/uglifyjs-wtb gets 4.50% improvement.
* Source/JavaScriptCore/runtime/ArrayPrototype.cpp:
(JSC::shift):
(JSC::unshift):
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/JSArray.cpp:
(JSC::JSArray::shiftCountWithAnyIndexingType):
(JSC::JSArray::unshiftCountWithAnyIndexingType):
* Source/JavaScriptCore/runtime/JSArray.h:
(JSC::JSArray::unshiftCount):
(JSC::JSArray::unshiftCountForShift): Deleted.
(JSC::JSArray::unshiftCountForSplice): Deleted.
Canonical link: https://commits.webkit.org/256033@main
More information about the webkit-changes
mailing list