From 22a93a9c39d3603b3763d7a8d5f85d417ff7f887 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Mon, 30 Jun 2025 15:03:52 -0700 Subject: [PATCH] add pump message loop calls --- src/app.zig | 4 ++++ src/browser/browser.zig | 7 ++++++- src/main.zig | 1 + src/runtime/js.zig | 9 ++++++++- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/app.zig b/src/app.zig index 88599598..f78fa8c8 100644 --- a/src/app.zig +++ b/src/app.zig @@ -4,6 +4,7 @@ const Allocator = std.mem.Allocator; const log = @import("log.zig"); const Loop = @import("runtime/loop.zig").Loop; const http = @import("http/client.zig"); +const Platform = @import("runtime/js.zig").Platform; const Telemetry = @import("telemetry/telemetry.zig").Telemetry; const Notification = @import("notification.zig").Notification; @@ -13,6 +14,7 @@ const Notification = @import("notification.zig").Notification; pub const App = struct { loop: *Loop, config: Config, + platform: *const Platform, allocator: Allocator, telemetry: Telemetry, http_client: http.Client, @@ -28,6 +30,7 @@ pub const App = struct { pub const Config = struct { run_mode: RunMode, + platform: *const Platform, tls_verify_host: bool = true, http_proxy: ?std.Uri = null, proxy_type: ?http.ProxyType = null, @@ -53,6 +56,7 @@ pub const App = struct { .loop = loop, .allocator = allocator, .telemetry = undefined, + .platform = config.platform, .app_dir_path = app_dir_path, .notification = notification, .http_client = try http.Client.init(allocator, loop, .{ diff --git a/src/browser/browser.zig b/src/browser/browser.zig index 8bf24e36..7e9699aa 100644 --- a/src/browser/browser.zig +++ b/src/browser/browser.zig @@ -27,6 +27,8 @@ const App = @import("../app.zig").App; const Session = @import("session.zig").Session; const Notification = @import("../notification.zig").Notification; +const log = @import("../log.zig"); + const http = @import("../http/client.zig"); // Browser is an instance of the browser. @@ -47,7 +49,7 @@ pub const Browser = struct { pub fn init(app: *App) !Browser { const allocator = app.allocator; - const env = try Env.init(allocator, .{}); + const env = try Env.init(allocator, app.platform, .{}); errdefer env.deinit(); const notification = try Notification.init(allocator, app.notification); @@ -95,6 +97,9 @@ pub const Browser = struct { } pub fn runMicrotasks(self: *const Browser) void { + while (self.env.pumpMessageLoop()) { + log.debug(.browser, "pumpMessageLoop", .{}); + } return self.env.runMicrotasks(); } }; diff --git a/src/main.zig b/src/main.zig index f54c90fb..a7f3a050 100644 --- a/src/main.zig +++ b/src/main.zig @@ -83,6 +83,7 @@ fn run(alloc: Allocator) !void { var app = try App.init(alloc, .{ .run_mode = args.mode, + .platform = &platform, .http_proxy = args.httpProxy(), .proxy_type = args.proxyType(), .proxy_auth = args.proxyAuth(), diff --git a/src/runtime/js.zig b/src/runtime/js.zig index 3e471f44..b7fa12b3 100644 --- a/src/runtime/js.zig +++ b/src/runtime/js.zig @@ -156,6 +156,8 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { return struct { allocator: Allocator, + platform: *const Platform, + // the global isolate isolate: v8.Isolate, @@ -181,7 +183,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { const Opts = struct {}; - pub fn init(allocator: Allocator, _: Opts) !*Self { + pub fn init(allocator: Allocator, platform: *const Platform, _: Opts) !*Self { // var params = v8.initCreateParams(); var params = try allocator.create(v8.CreateParams); errdefer allocator.destroy(params); @@ -215,6 +217,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { errdefer allocator.destroy(env); env.* = .{ + .platform = platform, .isolate = isolate, .templates = undefined, .allocator = allocator, @@ -270,6 +273,10 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { self.isolate.performMicrotasksCheckpoint(); } + pub fn pumpMessageLoop(self: *const Self) bool { + return self.platform.inner.pumpMessageLoop(self.isolate, false); + } + pub fn newExecutionWorld(self: *Self) !ExecutionWorld { return .{ .env = self,