Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 113e989f0ab0cc532236a591ac5212f25ac46800
https://github.com/WebKit/WebKit/commit/113e989f0ab0cc532236a591ac5212f25ac46800
Author: Yusuke Suzuki <[email protected]>
Date: 2026-02-24 (Tue, 24 Feb 2026)
Changed paths:
M Source/JavaScriptCore/runtime/ExecutableBase.h
M Source/JavaScriptCore/runtime/JSMicrotask.cpp
M Source/JavaScriptCore/runtime/MicrotaskQueue.cpp
M Source/JavaScriptCore/runtime/MicrotaskQueue.h
M Source/JavaScriptCore/runtime/MicrotaskQueueInlines.h
Log Message:
-----------
[JSC] Carefully remove costly access through microtask queue path
https://bugs.webkit.org/show_bug.cgi?id=308536
rdar://171058055
Reviewed by Keith Miller.
1. generatedJITCodeForCall()'s ref/deref becomes really costly. Do not
do it.
2. accessing JSCell::type() is costly when it is not in the cache line.
When creating QueuedTask, we already know that it is
JSMicrotaskDispatcher or JSGlobalObject. So let's add one bit in the
pointer which says it is JSMicrotaskDispatcher. So we can avoid
accessing memory and instead we can switch based on this pointer's
flag. We split MicrotaskQueue::enqueue to enqueue and enqueueSlow.
And enqueueSlow does more slower operation when it is
JSMicrotaskDispatcher.
* Source/JavaScriptCore/runtime/ExecutableBase.h:
(JSC::ExecutableBase::generatedJITCodeAddressForCall const):
* Source/JavaScriptCore/runtime/JSMicrotask.cpp:
(JSC::callMicrotask):
* Source/JavaScriptCore/runtime/MicrotaskQueue.cpp:
(JSC::QueuedTask::isRunnable const):
(JSC::MicrotaskQueue::enqueueSlow):
(JSC::MicrotaskQueue::enqueue): Deleted.
* Source/JavaScriptCore/runtime/MicrotaskQueue.h:
(JSC::QueuedTask::QueuedTask):
(JSC::QueuedTask::setDispatcher):
(JSC::QueuedTask::isJSMicrotaskDispatcher const):
* Source/JavaScriptCore/runtime/MicrotaskQueueInlines.h:
(JSC::QueuedTask::dispatcher const):
(JSC::QueuedTask::globalObject const):
(JSC::QueuedTask::jsMicrotaskDispatcher const):
(JSC::MicrotaskQueue::enqueue):
Canonical link: https://commits.webkit.org/308140@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications