mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Remove spin loop in bun build
This commit is contained in:
@@ -763,20 +763,17 @@ pub const MiniEventLoop = struct {
|
||||
pub fn tick(
|
||||
this: *MiniEventLoop,
|
||||
context: *anyopaque,
|
||||
comptime isDone: fn (*anyopaque) bool,
|
||||
) void {
|
||||
while (true) {
|
||||
_ = this.tickConcurrentWithCount();
|
||||
while (this.tasks.readItem()) |task| {
|
||||
task.run(context);
|
||||
while (!isDone(context)) {
|
||||
if (this.tickConcurrentWithCount() == 0 and this.tasks.count == 0) {
|
||||
this.loop.num_polls += 1;
|
||||
this.loop.tick();
|
||||
this.loop.num_polls -= 1;
|
||||
}
|
||||
|
||||
if (this.tickConcurrentWithCount() == 0) {
|
||||
if (this.loop.active > 0 or this.loop.num_polls > 0) {
|
||||
this.loop.run();
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
while (this.tasks.readItem()) |task| {
|
||||
task.run(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -845,6 +842,7 @@ pub const AnyEventLoop = union(enum) {
|
||||
pub fn tick(
|
||||
this: *AnyEventLoop,
|
||||
context: *anyopaque,
|
||||
comptime isDone: fn (*anyopaque) bool,
|
||||
) void {
|
||||
switch (this.*) {
|
||||
.jsc => {
|
||||
@@ -852,7 +850,7 @@ pub const AnyEventLoop = union(enum) {
|
||||
this.jsc.autoTick();
|
||||
},
|
||||
.mini => {
|
||||
this.mini.tick(context);
|
||||
this.mini.tick(context, isDone);
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,10 +315,13 @@ pub const BundleV2 = struct {
|
||||
return visitor.reachable.toOwnedSlice();
|
||||
}
|
||||
|
||||
fn isDone(ptr: *anyopaque) bool {
|
||||
var this = bun.cast(*BundleV2, ptr);
|
||||
return this.graph.parse_pending == 0;
|
||||
}
|
||||
|
||||
pub fn waitForParse(this: *BundleV2) void {
|
||||
while (this.graph.parse_pending > 0) {
|
||||
this.loop().tick(this);
|
||||
}
|
||||
this.loop().tick(this, isDone);
|
||||
|
||||
debug("Parsed {d} files, producing {d} ASTs", .{ this.graph.input_files.len, this.graph.ast.len });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user