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

Reply via email to