Commit graph

5 commits

Author SHA1 Message Date
Andreas Kling
ad183e04d4 LibWeb: Store idle tasks separately from normal tasks
Idle callbacks are only appropriate when the event loop has no other
runnable work. TaskQueue previously stored idle tasks in the same FIFO
list as all other tasks, so an idle callback queued during an idle
period could still run ahead of later posted-message work.

Keep idle tasks in a separate queue and only select from it after all
normal runnable tasks have been considered. This keeps cleanup queued
with requestIdleCallback from racing React hydration on Shopify.
2026-05-13 20:54:10 +02:00
Jelle Raaijmakers
a5000d07c0 LibWeb: Prevent running permanently unrunnable tasks in EventLoop
In `::spin_processing_tasks_with_source_until()`, we would first take a
set of tasks based on a filter, and then run them one by one. If there
was more than one task matched and put in that vector, they could
interfere with each other's runnability by making later tasks
permanently unrunnable.

The `::take_tasks_matching()` API is a footgun - remove it in favor of
an API that takes tasks one by one, performing the runnability check
just in time.
2026-03-26 18:48:27 +01:00
Andreas Kling
3bfb0534be LibGC: Rename MarkedVector => RootVector
Let's try to make it a bit more clear that this is a Vector of GC roots.
2024-12-26 19:10:44 +01:00
Shannon Booth
f87041bf3a LibGC+Everywhere: Factor out a LibGC from LibJS
Resulting in a massive rename across almost everywhere! Alongside the
namespace change, we now have the following names:

 * JS::NonnullGCPtr -> GC::Ref
 * JS::GCPtr -> GC::Ptr
 * JS::HeapFunction -> GC::Function
 * JS::CellImpl -> GC::Cell
 * JS::Handle -> GC::Root
2024-11-15 14:49:20 +01:00
Timothy Flynn
93712b24bf Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Renamed from Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.h (Browse further)