[webkit-changes] [WebKit/WebKit] 3e8cc7: [JSC] Add fast path for Object.assign(target, Name...
Commit Queue
noreply at github.com
Fri Sep 8 09:09:37 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3e8cc7706222b0efa402b2bf003729c3913101e7
https://github.com/WebKit/WebKit/commit/3e8cc7706222b0efa402b2bf003729c3913101e7
Author: Yijia Huang <yijia_huang at apple.com>
Date: 2023-09-08 (Fri, 08 Sep 2023)
Changed paths:
A JSTests/microbenchmarks/object-assign-array-storage-source.js
A JSTests/microbenchmarks/object-assign-contiguous-source.js
A JSTests/microbenchmarks/object-assign-double-source.js
A JSTests/microbenchmarks/object-assign-empty-target-sp3-charts-chartjs.js
A JSTests/microbenchmarks/object-assign-int32-source.js
A JSTests/microbenchmarks/object-assign-multiple-sources.js
A JSTests/stress/object-assign-multiple-non-array-sources.js
A JSTests/stress/object-assign-non-array-with-array-storage-source.js
A JSTests/stress/object-assign-non-array-with-contiguous-source.js
A JSTests/stress/object-assign-slow-put-array-storage-source.js
M Source/JavaScriptCore/dfg/DFGOperations.cpp
M Source/JavaScriptCore/runtime/JSObject.cpp
M Source/JavaScriptCore/runtime/JSObject.h
M Source/JavaScriptCore/runtime/JSObjectInlines.h
M Source/JavaScriptCore/runtime/ObjectConstructor.cpp
M Source/JavaScriptCore/runtime/ObjectConstructorInlines.h
M Source/JavaScriptCore/runtime/Structure.h
M Source/JavaScriptCore/runtime/StructureInlines.h
Log Message:
-----------
[JSC] Add fast path for Object.assign(target, NamedProperties + IndexedProperties)
https://bugs.webkit.org/show_bug.cgi?id=261219
rdar://115070621
Reviewed by Yusuke Suzuki.
Previously, we have fast path only for Object.assign(target, NamedProperties).
This patch extends the Object.assign fast path for source consists of
NamedProperties and IndexedProperties.
without with
object-assign-slow-put-array-storage-source 9.3211+-0.0820 ^ 4.7620+-0.0325 ^ definitely 1.9574x faster
object-assign-contiguous-source 6.5756+-0.2071 ^ 2.4984+-0.0273 ^ definitely 2.6320x faster
object-assign-int32-source 6.4450+-0.0493 ^ 2.6511+-0.0796 ^ definitely 2.4310x faster
object-assign-multiple-sources 22.1794+-0.1457 ^ 10.5955+-0.2918 ^ definitely 2.0933x faster
object-assign-array-storage-source 9.2886+-0.0758 ^ 4.7451+-0.2034 ^ definitely 1.9575x faster
object-assign-double-source 6.5618+-0.1262 ^ 2.8638+-0.0560 ^ definitely 2.2913x faster
object-assign-empty-target-sp3-charts-chartjs 2.8745+-0.0313 ^ 1.8253+-0.0134 ^ definitely 1.5748x faster
* JSTests/microbenchmarks/object-assign-empty-target-array-storage-source.js: Added.
* JSTests/microbenchmarks/object-assign-empty-target-contiguous-source.js: Added.
* JSTests/microbenchmarks/object-assign-empty-target-double-source.js: Added.
* JSTests/microbenchmarks/object-assign-empty-target-int32-source.js: Added.
* JSTests/microbenchmarks/object-assign-empty-target-slow-put-array-storage-source.js: Added.
* JSTests/microbenchmarks/object-assign-empty-target-sp3-charts.js: Added.
* JSTests/stress/object-assign-empty-indexed-property-source.js: Added.
(shouldBe):
(test):
* Source/JavaScriptCore/dfg/DFGOperations.cpp:
(JSC::DFG::JSC_DEFINE_JIT_OPERATION):
* Source/JavaScriptCore/runtime/JSObject.cpp:
(JSC::JSObject::copyArrayStorage):
(JSC::JSObject::putOwnDataPropertyBatching):
* Source/JavaScriptCore/runtime/JSObject.h:
(JSC::isEmptyJSFinalObject):
* Source/JavaScriptCore/runtime/JSObjectInlines.h:
(JSC::JSObject::fastForEachPropertyWithSideEffectFreeFunctor):
* Source/JavaScriptCore/runtime/ObjectConstructor.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/ObjectConstructorInlines.h:
(JSC::objectAssignFast):
* Source/JavaScriptCore/runtime/Structure.h:
* Source/JavaScriptCore/runtime/StructureInlines.h:
(JSC::Structure::canPerformFastPropertyEnumeration const):
Canonical link: https://commits.webkit.org/267797@main
More information about the webkit-changes
mailing list