Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e1e2cbbf2d6f36f82c6b7094312c230f6d152a2a
https://github.com/WebKit/WebKit/commit/e1e2cbbf2d6f36f82c6b7094312c230f6d152a2a
Author: Alexey Shvayka <[email protected]>
Date: 2023-05-10 (Wed, 10 May 2023)
Changed paths:
A JSTests/stress/object-prototype-is-immutable-prototype-object.js
M Source/JavaScriptCore/runtime/JSObject.cpp
M Source/JavaScriptCore/runtime/ProxyObject.cpp
M Source/JavaScriptCore/runtime/ProxyObject.h
Log Message:
-----------
[JSC] Cache lookups of ProxyObject's traps
https://bugs.webkit.org/show_bug.cgi?id=256554
<rdar://problem/109119378>
Reviewed by Yusuke Suzuki.
This patch introduces a caching of handler's traps by storing an array of
property offsets, handler's
structure ID, and handler's prototype structure ID. We optimize for common case
of ProxyObject's handler
being a plain JSFinalObject inheriting from Object.prototype, which
[[Prototype]] is always `null`.
For now, only 3 of the most popular traps are cached: "has", "get", and "set".
Also, removes extra isCell() check from getMethod() to micro-optimize lookup of
other traps.
This change progresses microbenchmarks with missing handlers by 60-70% when IC
is off,
and speeds up Speedometer2/Flight-TodoMVC by 2%.
ToT patch
proxy-has-miss-handler 310.7297+-1.4310 ^ 182.3500+-0.2509 ^
definitely 1.7040x faster
proxy-set-miss-handler 1305.7705+-2.9307 ^ 1179.7164+-4.0497 ^
definitely 1.1069x faster
proxy-get-miss-handler 310.6261+-0.1537 ^ 190.5240+-0.3619 ^
definitely 1.6304x faster
<geometric> 501.3743+-1.0979 ^ 344.7815+-0.4166 ^
definitely 1.4542x faster
* Source/JavaScriptCore/runtime/JSObject.cpp:
(JSC::JSObject::getMethod):
* Source/JavaScriptCore/runtime/ProxyObject.cpp:
(JSC::ProxyObject::ProxyObject):
(JSC::ProxyObject::getHandlerTrap):
(JSC::ProxyObject::clearHandlerTrapsOffsetsCache):
(JSC::performProxyGet):
(JSC::ProxyObject::performHasProperty):
(JSC::ProxyObject::performPut):
(JSC::ProxyObject::visitChildrenImpl):
* Source/JavaScriptCore/runtime/ProxyObject.h:
Canonical link: https://commits.webkit.org/263944@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes