diff --git a/Services/Compositor/CompositorState.cpp b/Services/Compositor/CompositorState.cpp index 270b26c7db..0a21bc7c78 100644 --- a/Services/Compositor/CompositorState.cpp +++ b/Services/Compositor/CompositorState.cpp @@ -284,13 +284,10 @@ void CompositorState::present_frame(Web::Compositor::CompositorContextId context m_pending_async_presents.append(context_id, viewport_rect, prepared_frame->bitmap_id); auto* pending_present = &m_pending_async_presents.last(); - auto event_loop_reference = Core::EventLoop::current_weak(); + auto& event_loop = Core::EventLoop::current(); auto self = NonnullRefPtr { *this }; - m_display_list_player->flush_async(*prepared_frame->rendered_surface, [self = move(self), event_loop_reference = move(event_loop_reference), pending_present] { - auto event_loop = event_loop_reference->take(); - if (!event_loop.is_alive()) - return; - event_loop->deferred_invoke([self = move(self), pending_present] { + m_display_list_player->flush_async(*prepared_frame->rendered_surface, [self = move(self), &event_loop, pending_present] { + event_loop.deferred_invoke([self = move(self), pending_present] { self->did_finish_async_present(*pending_present); }); }); diff --git a/Services/Compositor/VSyncScheduler.cpp b/Services/Compositor/VSyncScheduler.cpp index 6b1fcb351a..c928015dd2 100644 --- a/Services/Compositor/VSyncScheduler.cpp +++ b/Services/Compositor/VSyncScheduler.cpp @@ -76,7 +76,7 @@ static CVReturn display_link_callback(CVDisplayLinkRef, CVTimeStamp const*, CVTi class DisplayLinkState final : public AtomicRefCounted { public: - static RefPtr create(u64 display_id, NonnullRefPtr event_loop, Function&& tick_callback) + static RefPtr create(u64 display_id, Core::EventLoop& event_loop, Function&& tick_callback) { CVDisplayLinkRef display_link = nullptr; @@ -88,7 +88,7 @@ public: if (result != kCVReturnSuccess || !display_link) return nullptr; - auto state = adopt_ref(*new DisplayLinkState(move(event_loop), display_link)); + auto state = adopt_ref(*new DisplayLinkState(event_loop, display_link)); # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" @@ -114,7 +114,7 @@ public: bool consume_tick_request(); bool is_valid() const; - NonnullRefPtr event_loop; + Core::EventLoop& event_loop; Function tick_callback; Atomic invalidated { false }; Atomic tick_requested { false }; @@ -122,8 +122,8 @@ public: NonnullRefPtr idle_stop_timer; private: - DisplayLinkState(NonnullRefPtr event_loop, CVDisplayLinkRef display_link) - : event_loop(move(event_loop)) + DisplayLinkState(Core::EventLoop& event_loop, CVDisplayLinkRef display_link) + : event_loop(event_loop) , display_link(display_link) , idle_stop_timer(Core::Timer::create_single_shot(display_link_idle_stop_delay_ms, [this] { stop_display_link_if_idle(); @@ -217,7 +217,7 @@ class CVDisplayLinkVSyncScheduler final : public VSyncScheduler { public: static OwnPtr try_create(u64 display_id, Function&& tick_callback) { - auto state = DisplayLinkState::create(display_id, Core::EventLoop::current_weak(), move(tick_callback)); + auto state = DisplayLinkState::create(display_id, Core::EventLoop::current(), move(tick_callback)); if (!state) return nullptr; return adopt_own(*new CVDisplayLinkVSyncScheduler(state.release_nonnull())); @@ -248,11 +248,7 @@ static CVReturn display_link_callback(CVDisplayLinkRef, CVTimeStamp const*, CVTi if (!state->consume_tick_request()) return kCVReturnSuccess; - auto event_loop = state->event_loop->take(); - if (!event_loop.is_alive()) - return kCVReturnSuccess; - - event_loop->deferred_invoke([state = move(state)] { + state->event_loop.deferred_invoke([state = move(state)] { if (!state->is_valid()) return; state->tick_callback(); diff --git a/Services/WebDriver/Session.cpp b/Services/WebDriver/Session.cpp index c8b230284a..22b1cb6a45 100644 --- a/Services/WebDriver/Session.cpp +++ b/Services/WebDriver/Session.cpp @@ -128,7 +128,7 @@ Session::Session(NonnullRefPtr client, JsonObject const& capabilities, S , m_options(capabilities) , m_session_id(move(session_id)) , m_session_flags(flags) - , m_event_loop(Core::EventLoop::current_weak()) + , m_event_loop(Core::EventLoop::current()) { } @@ -278,9 +278,7 @@ ErrorOr Session::create_server(NonnullRefPtr promise) m_web_content_mach_port_server->on_bootstrap_request = [this, promise](auto request) { auto result = m_transport_bootstrap_server.handle_bootstrap_request(request.pid, move(request.reply_port)); if (result.is_error()) { - auto event_loop = m_event_loop->take(); - VERIFY(event_loop); - event_loop->deferred_invoke([promise, error = result.release_error()]() mutable { + m_event_loop.deferred_invoke([promise, error = result.release_error()]() mutable { promise->resolve(move(error)); }); return; @@ -291,9 +289,7 @@ ErrorOr Session::create_server(NonnullRefPtr promise) VERIFY_NOT_REACHED(); }, [this, promise](IPC::TransportBootstrapMachServer::OnDemandTransport& transport) { - auto event_loop = m_event_loop->take(); - VERIFY(event_loop); - event_loop->deferred_invoke([this, promise, transport = move(transport.ports)]() mutable { + m_event_loop.deferred_invoke([this, promise, transport = move(transport.ports)]() mutable { if (auto result = accept_web_content_transport(make(move(transport.receive_right), move(transport.send_right)), promise); result.is_error()) promise->resolve(result.release_error()); }); diff --git a/Services/WebDriver/Session.h b/Services/WebDriver/Session.h index a72b794db2..72615d31a9 100644 --- a/Services/WebDriver/Session.h +++ b/Services/WebDriver/Session.h @@ -112,7 +112,7 @@ private: ByteString m_web_content_endpoint; Optional m_browser_process; - NonnullRefPtr m_event_loop; + Core::EventLoop& m_event_loop; #if defined(AK_OS_MACOS) OwnPtr m_web_content_mach_port_server;