[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