Final optimizations and dependency cleanup for mlua-luau-scheduler

This commit is contained in:
Filip Tibell 2025-04-30 14:54:10 +02:00
parent d425d2568a
commit 9c9b90d70d
No known key found for this signature in database
12 changed files with 29 additions and 28 deletions

2
Cargo.lock generated
View file

@ -1992,8 +1992,6 @@ dependencies = [
"async-fs",
"async-io",
"blocking",
"concurrent-queue",
"event-listener",
"futures-lite",
"mlua",
"rustc-hash 2.1.1",

View file

@ -18,8 +18,6 @@ workspace = true
[dependencies]
async-executor = "1.13"
blocking = "1.6"
concurrent-queue = "2.5"
event-listener = "5.4"
futures-lite = "2.6"
rustc-hash = "2.1"
tracing = "0.1"

View file

@ -0,0 +1,5 @@
mod multi;
mod once;
pub(crate) use self::multi::MultiEvent;
pub(crate) use self::once::OnceEvent;

View file

@ -8,10 +8,10 @@ use std::{
};
/**
Internal state for queue events.
Internal state for events.
*/
#[derive(Debug, Default)]
struct QueueEventState {
struct MultiEventState {
generation: Cell<u64>,
wakers: RefCell<Vec<Waker>>,
}
@ -20,11 +20,11 @@ struct QueueEventState {
A single-threaded event signal that can be notified multiple times.
*/
#[derive(Debug, Clone, Default)]
pub(crate) struct QueueEvent {
state: Rc<QueueEventState>,
pub(crate) struct MultiEvent {
state: Rc<MultiEventState>,
}
impl QueueEvent {
impl MultiEvent {
/**
Creates a new event.
*/
@ -51,8 +51,8 @@ impl QueueEvent {
/**
Creates a listener that implements `Future` and resolves when `notify` is called.
*/
pub fn listen(&self) -> QueueListener {
QueueListener {
pub fn listen(&self) -> MultiListener {
MultiListener {
state: self.state.clone(),
generation: self.state.generation.get(),
}
@ -63,12 +63,12 @@ impl QueueEvent {
A listener future that resolves when the corresponding [`QueueEvent`] is notified.
*/
#[derive(Debug)]
pub(crate) struct QueueListener {
state: Rc<QueueEventState>,
pub(crate) struct MultiListener {
state: Rc<MultiEventState>,
generation: u64,
}
impl Future for QueueListener {
impl Future for MultiListener {
type Output = ();
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
@ -88,4 +88,4 @@ impl Future for QueueListener {
}
}
impl Unpin for QueueListener {}
impl Unpin for MultiListener {}

View file

@ -1,24 +1,24 @@
use std::{cell::Cell, rc::Rc};
use event_listener::Event;
use crate::events::OnceEvent;
#[derive(Debug, Clone)]
pub(crate) struct Exit {
code: Rc<Cell<Option<u8>>>,
event: Rc<Event>,
event: OnceEvent,
}
impl Exit {
pub fn new() -> Self {
Self {
code: Rc::new(Cell::new(None)),
event: Rc::new(Event::new()),
event: OnceEvent::new(),
}
}
pub fn set(&self, code: u8) {
self.code.set(Some(code));
self.event.notify(usize::MAX);
self.event.notify();
}
pub fn get(&self) -> Option<u8> {

View file

@ -1,6 +1,7 @@
#![allow(clippy::cargo_common_metadata)]
mod error_callback;
mod events;
mod exit;
mod functions;
mod queue;

View file

@ -2,20 +2,20 @@ use std::{cell::RefCell, mem, pin::Pin, rc::Rc};
use futures_lite::prelude::*;
use super::event::QueueEvent;
use crate::events::MultiEvent;
pub type LocalBoxFuture<'fut> = Pin<Box<dyn Future<Output = ()> + 'fut>>;
struct FuturesQueueInner<'fut> {
queue: RefCell<Vec<LocalBoxFuture<'fut>>>,
event: QueueEvent,
event: MultiEvent,
}
impl FuturesQueueInner<'_> {
pub fn new() -> Self {
Self {
queue: RefCell::new(Vec::new()),
event: QueueEvent::new(),
event: MultiEvent::new(),
}
}
}

View file

@ -1,5 +1,4 @@
mod deferred;
mod event;
mod futures;
mod spawned;
mod threads;

View file

@ -6,19 +6,19 @@ use mlua::prelude::*;
use crate::{threads::ThreadId, traits::IntoLuaThread};
use super::event::QueueEvent;
use crate::events::MultiEvent;
#[derive(Debug)]
struct ThreadQueueInner {
queue: RefCell<Vec<(LuaThread, LuaMultiValue)>>,
event: QueueEvent,
event: MultiEvent,
}
impl ThreadQueueInner {
fn new() -> Self {
Self {
queue: RefCell::new(Vec::new()),
event: QueueEvent::new(),
event: MultiEvent::new(),
}
}
}

View file

@ -5,7 +5,8 @@ use std::{cell::RefCell, rc::Rc};
use mlua::prelude::*;
use rustc_hash::FxHashMap;
use super::{event::OnceEvent, id::ThreadId};
use super::id::ThreadId;
use crate::events::OnceEvent;
struct ThreadEvent {
result: Option<LuaResult<LuaMultiValue>>,

View file

@ -1,4 +1,3 @@
mod event;
mod id;
mod map;