Ladybird: Use only the Qt event loop to speed everything up :^)

This patch removes the dual-event-loop setup, leaving only the Qt event
loop. We teach LibWeb how to drive Qt by installing an EventLoopPlugin.

This removes the 50ms latency on all UI interactions (and network
requests, etc.)
This commit is contained in:
Andreas Kling 2022-09-07 20:33:15 +02:00 committed by Andrew Kaster
commit 37d844fd66
Notes: sideshowbarker 2024-07-17 05:02:35 +09:00
9 changed files with 209 additions and 28 deletions

View file

@ -0,0 +1,40 @@
/*
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#define AK_DONT_REPLACE_STD
#include "EventLoopPluginQt.h"
#include "TimerQt.h"
#include <AK/Function.h>
#include <AK/NonnullRefPtr.h>
#include <QCoreApplication>
#include <QTimer>
namespace Ladybird {
EventLoopPluginQt::EventLoopPluginQt() = default;
EventLoopPluginQt::~EventLoopPluginQt() = default;
void EventLoopPluginQt::spin_until(Function<bool()> goal_condition)
{
while (!goal_condition())
QCoreApplication::processEvents();
}
void EventLoopPluginQt::deferred_invoke(Function<void()> function)
{
VERIFY(function);
QTimer::singleShot(0, [function = move(function)] {
function();
});
}
NonnullRefPtr<Web::Platform::Timer> EventLoopPluginQt::create_timer()
{
return TimerQt::create();
}
}