[JSC] Make Strong::set cheap
https://bugs.webkit.org/show_bug.cgi?id=241090
Reviewed by Mark Lam.
HandleSet::writeBarrier is frequently called because it is called every time we set a value in Strong<>.
This patch optimizes it,
- We should make it inline function since it has a super fast path major use can be covered. And this function is small.
- We should not always remove a node from the list first. We should insert / remove it only when necessary.
- Remove m_immediateList since it is not necessary.
- Make HandleNode as a derived class of BasicRawSentinelNode to make implementation simpler.
This change improves promise benchmarks score since promise uses microtasks which hold values via Strong<>.
ToT
Time(doxbee-async-bluebird): 42.8 ms.
Time(doxbee-async-es2017-babel): 36.4 ms.
Time(doxbee-async-es2017-native): 28.3 ms.
Time(doxbee-promises-bluebird): 514.2 ms.
Time(doxbee-promises-es2015-native): 44.8 ms.
Time(fibonacci-async-es2017-babel): 380.5 ms.
Time(fibonacci-async-es2017-native): 218.2 ms.
Time(parallel-async-bluebird): 648.8 ms.
Time(parallel-async-es2017-babel): 116.9 ms.
Time(parallel-async-es2017-native): 115.6 ms.
Time(parallel-promises-bluebird): 638 ms.
Time(parallel-promises-es2015-native): 82 ms.
Patched
Time(doxbee-async-bluebird): 38 ms.
Time(doxbee-async-es2017-babel): 27 ms.
Time(doxbee-async-es2017-native): 19.5 ms.
Time(doxbee-promises-bluebird): 508.3 ms.
Time(doxbee-promises-es2015-native): 33.3 ms.
Time(fibonacci-async-es2017-babel): 349.1 ms.
Time(fibonacci-async-es2017-native): 151 ms.
Time(parallel-async-bluebird): 639.6 ms.
Time(parallel-async-es2017-babel): 100.9 ms.
Time(parallel-async-es2017-native): 101.9 ms.
Time(parallel-promises-bluebird): 614 ms.
Time(parallel-promises-es2015-native): 70.9 ms.
- Source/JavaScriptCore/heap/HandleSet.cpp:
(JSC::HandleSet::writeBarrier): Deleted.
- Source/JavaScriptCore/heap/HandleSet.h:
(JSC::HandleSet::heapFor):
(JSC::HandleSet::allocate):
(JSC::HandleSet::deallocate):
(JSC::HandleSet::writeBarrier):
(JSC::HandleSet::toHandle): Deleted.
(JSC::HandleSet::toNode): Deleted.
(JSC::HandleNode::HandleNode): Deleted.
(JSC::HandleNode::setPrev): Deleted.
(JSC::HandleNode::prev): Deleted.
(JSC::HandleNode::setNext): Deleted.
(JSC::HandleNode::next): Deleted.
- Source/JavaScriptCore/heap/Strong.h:
(JSC::Strong::set):
Canonical link: https://commits.webkit.org/251131@main