mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
feat: 主线程事件循环加 worker onmessage 交付加端到端单测
This commit is contained in:
@@ -645,6 +645,9 @@ fn eval(code: &str, engine: &Engine, trace: bool, profile: bool, print_result: b
|
||||
let kernel = engine.kernel();
|
||||
format_result(guard.vm(), kernel.perm_interner().as_ref(), kernel.shape_forge().as_ref(), result);
|
||||
}
|
||||
// 主线程事件循环:消费 worker 消息、清理已断开 worker,直至无活跃
|
||||
// worker(脚本建了 Worker 不 terminate 时恒转,符合页面寿命语义)。
|
||||
run_worker_event_loop(guard.vm_mut());
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
Err(err) => {
|
||||
@@ -655,6 +658,27 @@ fn eval(code: &str, engine: &Engine, trace: bool, profile: bool, print_result: b
|
||||
}
|
||||
}
|
||||
|
||||
/// 主线程事件循环:消费 worker 消息并清理已断开 worker,循环直至无活跃 worker。
|
||||
///
|
||||
/// # 步骤
|
||||
/// 1. 循环条件:仍有活跃 worker。
|
||||
/// 2. `deliver_worker_messages` 交付 worker 消息到 `onmessage`。
|
||||
/// 3. `cleanup_disconnected_workers` 清理已退出 worker(通道断开即 join 加移除)。
|
||||
/// 4. 本轮未交付消息时 1ms 轮询(避免忙等)。
|
||||
///
|
||||
/// # 边界与前提
|
||||
/// - 终止条件为无活跃 worker;用户脚本建 Worker 不 terminate 时恒转(有意,
|
||||
/// 页面寿命 = worker 寿命)。
|
||||
fn run_worker_event_loop(vm: &mut Vm) {
|
||||
while !vm.active_workers().is_empty() {
|
||||
let delivered = vm.deliver_worker_messages();
|
||||
vm.cleanup_disconnected_workers();
|
||||
if !delivered {
|
||||
std::thread::sleep(Duration::from_millis(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn format_result(vm: &oxide_vm::vm::Vm, string_forge: &PermInterner, shape_forge: &ShapeForge, val: JsValue) {
|
||||
println!("{}", format_js_value(vm, string_forge, shape_forge, val));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user