Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2432909f3aecc7641714799b06b4f909322bd6db
      
https://github.com/WebKit/WebKit/commit/2432909f3aecc7641714799b06b4f909322bd6db
  Author: Yusuke Suzuki <[email protected]>
  Date:   2023-12-12 (Tue, 12 Dec 2023)

  Changed paths:
    A JSTests/microbenchmarks/define-properties-all-of-keys.js
    A JSTests/microbenchmarks/define-properties-simple.js
    A JSTests/microbenchmarks/define-property-simple.js
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    M Source/JavaScriptCore/runtime/JSGlobalObject.h
    M Source/JavaScriptCore/runtime/ObjectConstructor.cpp

  Log Message:
  -----------
  [JSC] Improve Object.defineProperties & Object.defineProperty perf via fast 
iteration in ToPropertyDescriptor
https://bugs.webkit.org/show_bug.cgi?id=248754
rdar://103101281

Reviewed by Alexey Shvayka.

This patch set up "writable" "set" "get" "value" "enumerable" "configurable" 
watchpoints onto Object.prototype so that
we can quickly extract property descriptor from Object.defineProperty / 
Object.defineProperties descriptor objects.
We also extract these properties by enumerating all properties instead of doing 
hash table lookup multiple times since
in almost all cases this is faster because property descriptor object should be 
small.

It broadly improves Object.defineProperty / Object.defineProperties perf.

                                                      ToT                     
Patched

    redefine-property-accessor-dictionary        4.5682+-0.0286     ^      
3.5888+-0.0287        ^ definitely 1.2729x faster
    define-properties-all-of-keys               12.0816+-0.0671     ^      
8.8536+-0.0794        ^ definitely 1.3646x faster
    redefine-property-previous-attributes       41.2230+-0.5076     ^     
29.0349+-0.2499        ^ definitely 1.4198x faster
    redefine-property-data-dictionary            3.8830+-0.0141     ^      
2.9631+-0.0237        ^ definitely 1.3104x faster
    define-property-simple                       1.3220+-0.0180     ^      
1.1180+-0.0131        ^ definitely 1.1825x faster
    redefine-property-data                       3.4071+-0.0218     ^      
2.5390+-0.0303        ^ definitely 1.3419x faster
    redefine-property-accessor                   3.9898+-0.0219     ^      
2.9743+-0.0300        ^ definitely 1.3414x faster
    define-properties-simple                     9.9033+-0.0381     ^      
6.8733+-0.0296        ^ definitely 1.4408x faster

* JSTests/microbenchmarks/define-properties-all-of-keys.js: Added.
(const.properties.destroyed.set if):
(const.properties.writable.set if):
(test.Hey):
(test.):
(test):
* JSTests/microbenchmarks/define-properties-simple.js: Added.
(const.properties.destroyed.set if):
(const.properties.writable.set if):
(test.):
(test):
* JSTests/microbenchmarks/define-property-simple.js: Added.
(const.properties.destroyed.set if):
(const.properties.writable.set if):
(test.):
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::tryInstallPropertyDescriptorFastPathWatchpoint):
* Source/JavaScriptCore/runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::propertyDescriptorFastPathWatchpointSet):
* Source/JavaScriptCore/runtime/JSObject.h:
* Source/JavaScriptCore/runtime/JSObjectInlines.h:
(JSC::JSObject::getOwnPropertyIfPropertyExists):
* Source/JavaScriptCore/runtime/ObjectConstructor.cpp:
(JSC::toPropertyDescriptor):
(JSC::definePropertiesSlow):
(JSC::defineProperties):

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to