1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-10 18:10:56 +09:00

LibCore: Move event queueing to a per-thread event queue

Instead of juggling events between individual instances of
Core::EventLoop, move queueing and processing to a separate per-thread
queue (ThreadEventQueue).
This commit is contained in:
Andreas Kling 2023-04-23 19:45:12 +02:00
parent 3a70a16ca7
commit 1587caef84
Notes: sideshowbarker 2024-07-17 10:16:43 +09:00
6 changed files with 184 additions and 102 deletions

View file

@ -0,0 +1,44 @@
/*
* Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/NonnullOwnPtr.h>
#include <AK/OwnPtr.h>
namespace Core {
// Per-thread global event queue. This is where events are queued for the EventLoop to process.
// There is only one ThreadEventQueue per thread, and it is accessed via ThreadEventQueue::current().
// It is allowed to post events to other threads' event queues.
class ThreadEventQueue {
AK_MAKE_NONCOPYABLE(ThreadEventQueue);
AK_MAKE_NONMOVABLE(ThreadEventQueue);
public:
static ThreadEventQueue& current();
// Process all queued events. Returns the number of events that were processed.
size_t process();
// Posts an event to the event queue.
void post_event(Object& receiver, NonnullOwnPtr<Event>);
// Used by Threading::BackgroundAction.
void add_job(NonnullRefPtr<Promise<NonnullRefPtr<Object>>>);
// Returns true if there are events waiting to be flushed.
bool has_pending_events() const;
private:
ThreadEventQueue();
~ThreadEventQueue();
struct Private;
OwnPtr<Private> m_private;
};
}