mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-25 11:48:06 +00:00
LibCore: Remove unused "visible for timer purposes" concept
This was a long-unused leftover from SerenityOS.
This commit is contained in:
parent
0037df88d5
commit
c47e253c60
Notes:
github-actions[bot]
2025-08-11 14:57:04 +00:00
Author: https://github.com/awesomekling
Commit: c47e253c60
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5817
Reviewed-by: https://github.com/gmta ✅
17 changed files with 24 additions and 63 deletions
|
@ -122,9 +122,9 @@ void EventLoop::unregister_signal(int handler_id)
|
||||||
EventLoopManager::the().unregister_signal(handler_id);
|
EventLoopManager::the().unregister_signal(handler_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t EventLoop::register_timer(EventReceiver& object, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible fire_when_not_visible)
|
intptr_t EventLoop::register_timer(EventReceiver& object, int milliseconds, bool should_reload)
|
||||||
{
|
{
|
||||||
return EventLoopManager::the().register_timer(object, milliseconds, should_reload, fire_when_not_visible);
|
return EventLoopManager::the().register_timer(object, milliseconds, should_reload);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventLoop::unregister_timer(intptr_t timer_id)
|
void EventLoop::unregister_timer(intptr_t timer_id)
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
bool was_exit_requested();
|
bool was_exit_requested();
|
||||||
|
|
||||||
// The registration functions act upon the current loop of the current thread.
|
// The registration functions act upon the current loop of the current thread.
|
||||||
static intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible);
|
static intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload);
|
||||||
static void unregister_timer(intptr_t timer_id);
|
static void unregister_timer(intptr_t timer_id);
|
||||||
|
|
||||||
static void register_notifier(Badge<Notifier>, Notifier&);
|
static void register_notifier(Badge<Notifier>, Notifier&);
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
|
|
||||||
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() = 0;
|
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() = 0;
|
||||||
|
|
||||||
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) = 0;
|
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload) = 0;
|
||||||
virtual void unregister_timer(intptr_t timer_id) = 0;
|
virtual void unregister_timer(intptr_t timer_id) = 0;
|
||||||
|
|
||||||
virtual void register_notifier(Notifier&) = 0;
|
virtual void register_notifier(Notifier&) = 0;
|
||||||
|
|
|
@ -201,18 +201,11 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: While TimerShouldFireWhenNotVisible::Yes prevents the timer callback from being
|
ThreadEventQueue::current().post_event(*strong_owner, make<TimerEvent>());
|
||||||
// called, it doesn't allow event loop to sleep since it needs to constantly check if
|
|
||||||
// is_visible_for_timer_purposes changed. A better solution will be to unregister a
|
|
||||||
// timer and register it back again when needed. This also has an added benefit of
|
|
||||||
// making fire_when_not_visible and is_visible_for_timer_purposes obsolete.
|
|
||||||
if (fire_when_not_visible == TimerShouldFireWhenNotVisible::Yes || strong_owner->is_visible_for_timer_purposes())
|
|
||||||
ThreadEventQueue::current().post_event(*strong_owner, make<TimerEvent>());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AK::Duration interval;
|
AK::Duration interval;
|
||||||
bool should_reload { false };
|
bool should_reload { false };
|
||||||
TimerShouldFireWhenNotVisible fire_when_not_visible { TimerShouldFireWhenNotVisible::No };
|
|
||||||
WeakPtr<EventReceiver> owner;
|
WeakPtr<EventReceiver> owner;
|
||||||
pthread_t owner_thread { 0 };
|
pthread_t owner_thread { 0 };
|
||||||
Atomic<bool> is_being_deleted { false };
|
Atomic<bool> is_being_deleted { false };
|
||||||
|
@ -618,7 +611,7 @@ void EventLoopManagerUnix::unregister_signal(int handler_id)
|
||||||
info.signal_handlers.remove(remove_signal_number);
|
info.signal_handlers.remove(remove_signal_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t EventLoopManagerUnix::register_timer(EventReceiver& object, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible fire_when_not_visible)
|
intptr_t EventLoopManagerUnix::register_timer(EventReceiver& object, int milliseconds, bool should_reload)
|
||||||
{
|
{
|
||||||
VERIFY(milliseconds >= 0);
|
VERIFY(milliseconds >= 0);
|
||||||
auto& thread_data = ThreadData::the();
|
auto& thread_data = ThreadData::the();
|
||||||
|
@ -628,7 +621,6 @@ intptr_t EventLoopManagerUnix::register_timer(EventReceiver& object, int millise
|
||||||
timer->interval = AK::Duration::from_milliseconds(milliseconds);
|
timer->interval = AK::Duration::from_milliseconds(milliseconds);
|
||||||
timer->reload(MonotonicTime::now_coarse());
|
timer->reload(MonotonicTime::now_coarse());
|
||||||
timer->should_reload = should_reload;
|
timer->should_reload = should_reload;
|
||||||
timer->fire_when_not_visible = fire_when_not_visible;
|
|
||||||
thread_data.timeouts.schedule_absolute(timer);
|
thread_data.timeouts.schedule_absolute(timer);
|
||||||
return bit_cast<intptr_t>(timer);
|
return bit_cast<intptr_t>(timer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ public:
|
||||||
|
|
||||||
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() override;
|
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() override;
|
||||||
|
|
||||||
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) override;
|
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload) override;
|
||||||
virtual void unregister_timer(intptr_t timer_id) override;
|
virtual void unregister_timer(intptr_t timer_id) override;
|
||||||
|
|
||||||
virtual void register_notifier(Notifier&) override;
|
virtual void register_notifier(Notifier&) override;
|
||||||
|
|
|
@ -53,7 +53,6 @@ namespace Core {
|
||||||
|
|
||||||
struct EventLoopTimer {
|
struct EventLoopTimer {
|
||||||
WeakPtr<EventReceiver> owner;
|
WeakPtr<EventReceiver> owner;
|
||||||
TimerShouldFireWhenNotVisible fire_when_not_visible = TimerShouldFireWhenNotVisible::No;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ThreadData {
|
struct ThreadData {
|
||||||
|
@ -135,8 +134,7 @@ size_t EventLoopImplementationWindows::pump(PumpMode)
|
||||||
} else {
|
} else {
|
||||||
auto& timer = *timers.get(event_handles[i]);
|
auto& timer = *timers.get(event_handles[i]);
|
||||||
if (auto strong_owner = timer.owner.strong_ref())
|
if (auto strong_owner = timer.owner.strong_ref())
|
||||||
if (timer.fire_when_not_visible == TimerShouldFireWhenNotVisible::Yes || strong_owner->is_visible_for_timer_purposes())
|
event_queue.post_event(*strong_owner, make<TimerEvent>());
|
||||||
event_queue.post_event(*strong_owner, make<TimerEvent>());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -195,7 +193,7 @@ void EventLoopManagerWindows::unregister_notifier(Notifier& notifier)
|
||||||
ThreadData::the()->notifiers.remove_all_matching([&](auto&, auto value) { return value == ¬ifier; });
|
ThreadData::the()->notifiers.remove_all_matching([&](auto&, auto value) { return value == ¬ifier; });
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t EventLoopManagerWindows::register_timer(EventReceiver& object, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible fire_when_not_visible)
|
intptr_t EventLoopManagerWindows::register_timer(EventReceiver& object, int milliseconds, bool should_reload)
|
||||||
{
|
{
|
||||||
VERIFY(milliseconds >= 0);
|
VERIFY(milliseconds >= 0);
|
||||||
// FIXME: This is a temporary fix for issue #3641
|
// FIXME: This is a temporary fix for issue #3641
|
||||||
|
@ -211,7 +209,7 @@ intptr_t EventLoopManagerWindows::register_timer(EventReceiver& object, int mill
|
||||||
|
|
||||||
auto& timers = ThreadData::the()->timers;
|
auto& timers = ThreadData::the()->timers;
|
||||||
VERIFY(!timers.get(timer).has_value());
|
VERIFY(!timers.get(timer).has_value());
|
||||||
timers.set(Handle(timer), { object, fire_when_not_visible });
|
timers.set(Handle(timer), { object });
|
||||||
return reinterpret_cast<intptr_t>(timer);
|
return reinterpret_cast<intptr_t>(timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ public:
|
||||||
|
|
||||||
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() override;
|
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() override;
|
||||||
|
|
||||||
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) override;
|
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload) override;
|
||||||
virtual void unregister_timer(intptr_t timer_id) override;
|
virtual void unregister_timer(intptr_t timer_id) override;
|
||||||
|
|
||||||
virtual void register_notifier(Notifier&) override;
|
virtual void register_notifier(Notifier&) override;
|
||||||
|
|
|
@ -46,14 +46,14 @@ void EventReceiver::custom_event(CustomEvent&)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventReceiver::start_timer(int ms, TimerShouldFireWhenNotVisible fire_when_not_visible)
|
void EventReceiver::start_timer(int ms)
|
||||||
{
|
{
|
||||||
if (m_timer_id) {
|
if (m_timer_id) {
|
||||||
dbgln("{} {:p} already has a timer!", class_name(), this);
|
dbgln("{} {:p} already has a timer!", class_name(), this);
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_timer_id = Core::EventLoop::register_timer(*this, ms, true, fire_when_not_visible);
|
m_timer_id = Core::EventLoop::register_timer(*this, ms, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventReceiver::stop_timer()
|
void EventReceiver::stop_timer()
|
||||||
|
@ -74,9 +74,4 @@ void EventReceiver::dispatch_event(Core::Event& e)
|
||||||
event(e);
|
event(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EventReceiver::is_visible_for_timer_purposes() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,6 @@
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
enum class TimerShouldFireWhenNotVisible {
|
|
||||||
No = 0,
|
|
||||||
Yes
|
|
||||||
};
|
|
||||||
|
|
||||||
#define C_OBJECT(klass) \
|
#define C_OBJECT(klass) \
|
||||||
public: \
|
public: \
|
||||||
virtual StringView class_name() const override \
|
virtual StringView class_name() const override \
|
||||||
|
@ -64,7 +59,7 @@ public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool fast_is() const = delete;
|
bool fast_is() const = delete;
|
||||||
|
|
||||||
void start_timer(int ms, TimerShouldFireWhenNotVisible = TimerShouldFireWhenNotVisible::No);
|
void start_timer(int ms);
|
||||||
void stop_timer();
|
void stop_timer();
|
||||||
bool has_timer() const { return m_timer_id; }
|
bool has_timer() const { return m_timer_id; }
|
||||||
|
|
||||||
|
@ -72,8 +67,6 @@ public:
|
||||||
|
|
||||||
void dispatch_event(Core::Event&);
|
void dispatch_event(Core::Event&);
|
||||||
|
|
||||||
virtual bool is_visible_for_timer_purposes() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
EventReceiver();
|
EventReceiver();
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,6 @@ class UDPSocket;
|
||||||
|
|
||||||
struct ProxyData;
|
struct ProxyData;
|
||||||
|
|
||||||
enum class TimerShouldFireWhenNotVisible;
|
|
||||||
|
|
||||||
#ifdef AK_OS_MACH
|
#ifdef AK_OS_MACH
|
||||||
class MachPort;
|
class MachPort;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,7 +16,7 @@ class EventLoopManagerMacOS final : public Core::EventLoopManager {
|
||||||
public:
|
public:
|
||||||
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
||||||
|
|
||||||
virtual intptr_t register_timer(Core::EventReceiver&, int interval_milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible) override;
|
virtual intptr_t register_timer(Core::EventReceiver&, int interval_milliseconds, bool should_reload) override;
|
||||||
virtual void unregister_timer(intptr_t timer_id) override;
|
virtual void unregister_timer(intptr_t timer_id) override;
|
||||||
|
|
||||||
virtual void register_notifier(Core::Notifier&) override;
|
virtual void register_notifier(Core::Notifier&) override;
|
||||||
|
|
|
@ -207,7 +207,7 @@ NonnullOwnPtr<Core::EventLoopImplementation> EventLoopManagerMacOS::make_impleme
|
||||||
return EventLoopImplementationMacOS::create();
|
return EventLoopImplementationMacOS::create();
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t EventLoopManagerMacOS::register_timer(Core::EventReceiver& receiver, int interval_milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible should_fire_when_not_visible)
|
intptr_t EventLoopManagerMacOS::register_timer(Core::EventReceiver& receiver, int interval_milliseconds, bool should_reload)
|
||||||
{
|
{
|
||||||
auto& thread_data = ThreadData::the();
|
auto& thread_data = ThreadData::the();
|
||||||
|
|
||||||
|
@ -225,12 +225,6 @@ intptr_t EventLoopManagerMacOS::register_timer(Core::EventReceiver& receiver, in
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (should_fire_when_not_visible == Core::TimerShouldFireWhenNotVisible::No) {
|
|
||||||
if (!receiver->is_visible_for_timer_purposes()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::TimerEvent event;
|
Core::TimerEvent event;
|
||||||
receiver->dispatch_event(event);
|
receiver->dispatch_event(event);
|
||||||
});
|
});
|
||||||
|
|
|
@ -244,28 +244,24 @@ void EventLoopImplementationQt::set_main_loop()
|
||||||
event_loop_manager.set_main_loop_signal_notifiers({});
|
event_loop_manager.set_main_loop_signal_notifiers({});
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qt_timer_fired(Core::TimerShouldFireWhenNotVisible should_fire_when_not_visible, Core::EventReceiver& object)
|
static void qt_timer_fired(Core::EventReceiver& object)
|
||||||
{
|
{
|
||||||
if (should_fire_when_not_visible == Core::TimerShouldFireWhenNotVisible::No) {
|
|
||||||
if (!object.is_visible_for_timer_purposes())
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Core::TimerEvent event;
|
Core::TimerEvent event;
|
||||||
object.dispatch_event(event);
|
object.dispatch_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t EventLoopManagerQt::register_timer(Core::EventReceiver& object, int milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible should_fire_when_not_visible)
|
intptr_t EventLoopManagerQt::register_timer(Core::EventReceiver& object, int milliseconds, bool should_reload)
|
||||||
{
|
{
|
||||||
auto timer = new QTimer;
|
auto timer = new QTimer;
|
||||||
timer->setTimerType(Qt::PreciseTimer);
|
timer->setTimerType(Qt::PreciseTimer);
|
||||||
timer->setInterval(milliseconds);
|
timer->setInterval(milliseconds);
|
||||||
timer->setSingleShot(!should_reload);
|
timer->setSingleShot(!should_reload);
|
||||||
auto weak_object = object.make_weak_ptr();
|
auto weak_object = object.make_weak_ptr();
|
||||||
QObject::connect(timer, &QTimer::timeout, [should_fire_when_not_visible, weak_object = move(weak_object)] {
|
QObject::connect(timer, &QTimer::timeout, [weak_object = move(weak_object)] {
|
||||||
auto object = weak_object.strong_ref();
|
auto object = weak_object.strong_ref();
|
||||||
if (!object)
|
if (!object)
|
||||||
return;
|
return;
|
||||||
qt_timer_fired(should_fire_when_not_visible, *object);
|
qt_timer_fired(*object);
|
||||||
});
|
});
|
||||||
timer->start();
|
timer->start();
|
||||||
return bit_cast<intptr_t>(timer);
|
return bit_cast<intptr_t>(timer);
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
virtual ~EventLoopManagerQt() override;
|
virtual ~EventLoopManagerQt() override;
|
||||||
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
||||||
|
|
||||||
virtual intptr_t register_timer(Core::EventReceiver&, int milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible) override;
|
virtual intptr_t register_timer(Core::EventReceiver&, int milliseconds, bool should_reload) override;
|
||||||
virtual void unregister_timer(intptr_t timer_id) override;
|
virtual void unregister_timer(intptr_t timer_id) override;
|
||||||
|
|
||||||
virtual void register_notifier(Core::Notifier&) override;
|
virtual void register_notifier(Core::Notifier&) override;
|
||||||
|
|
|
@ -85,7 +85,7 @@ NonnullOwnPtr<Core::EventLoopImplementation> ALooperEventLoopManager::make_imple
|
||||||
return ALooperEventLoopImplementation::create();
|
return ALooperEventLoopImplementation::create();
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t ALooperEventLoopManager::register_timer(Core::EventReceiver& receiver, int milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible visibility)
|
intptr_t ALooperEventLoopManager::register_timer(Core::EventReceiver& receiver, int milliseconds, bool should_reload)
|
||||||
{
|
{
|
||||||
JavaEnvironment env(global_vm);
|
JavaEnvironment env(global_vm);
|
||||||
auto& thread_data = EventLoopThreadData::the();
|
auto& thread_data = EventLoopThreadData::the();
|
||||||
|
@ -96,7 +96,7 @@ intptr_t ALooperEventLoopManager::register_timer(Core::EventReceiver& receiver,
|
||||||
long timer_id = env.get()->CallLongMethod(m_timer_service, m_register_timer, timer, !should_reload, millis);
|
long timer_id = env.get()->CallLongMethod(m_timer_service, m_register_timer, timer, !should_reload, millis);
|
||||||
|
|
||||||
// FIXME: Is there a race condition here? Maybe we should take a lock on the timers...
|
// FIXME: Is there a race condition here? Maybe we should take a lock on the timers...
|
||||||
thread_data.timers.set(timer_id, { receiver.make_weak_ptr(), visibility });
|
thread_data.timers.set(timer_id, { receiver.make_weak_ptr() });
|
||||||
|
|
||||||
return timer_id;
|
return timer_id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
virtual ~ALooperEventLoopManager() override;
|
virtual ~ALooperEventLoopManager() override;
|
||||||
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
||||||
|
|
||||||
virtual intptr_t register_timer(Core::EventReceiver&, int milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible) override;
|
virtual intptr_t register_timer(Core::EventReceiver&, int milliseconds, bool should_reload) override;
|
||||||
virtual void unregister_timer(intptr_t timer_id) override;
|
virtual void unregister_timer(intptr_t timer_id) override;
|
||||||
|
|
||||||
virtual void register_notifier(Core::Notifier&) override;
|
virtual void register_notifier(Core::Notifier&) override;
|
||||||
|
@ -49,7 +49,6 @@ private:
|
||||||
|
|
||||||
struct TimerData {
|
struct TimerData {
|
||||||
WeakPtr<Core::EventReceiver> receiver;
|
WeakPtr<Core::EventReceiver> receiver;
|
||||||
Core::TimerShouldFireWhenNotVisible visibility;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EventLoopThreadData {
|
struct EventLoopThreadData {
|
||||||
|
|
|
@ -25,10 +25,6 @@ Java_org_serenityos_ladybird_TimerExecutorService_00024Timer_nativeRun(JNIEnv*,
|
||||||
if (!receiver)
|
if (!receiver)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (timer_data->visibility == Core::TimerShouldFireWhenNotVisible::No)
|
|
||||||
if (!receiver->is_visible_for_timer_purposes())
|
|
||||||
return;
|
|
||||||
|
|
||||||
event_loop_impl.post_event(*receiver, make<Core::TimerEvent>());
|
event_loop_impl.post_event(*receiver, make<Core::TimerEvent>());
|
||||||
}
|
}
|
||||||
// Flush the event loop on this thread to keep any garbage from building up
|
// Flush the event loop on this thread to keep any garbage from building up
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue