Fix dockerfile (hopefully)

Add dummy --json stats output to tests

Comment typos fixed

Add make get-v8, build-v8 and build-v8-dev make targets
This commit is contained in:
Karl Seguin
2025-04-15 15:03:22 +08:00
parent 8af71be551
commit f6c43eaf9c
6 changed files with 68 additions and 10 deletions

2
.gitignore vendored
View File

@@ -4,4 +4,4 @@ zig-out
/vendor/netsurf/out /vendor/netsurf/out
/vendor/libiconv/ /vendor/libiconv/
lightpanda.id lightpanda.id
v8/ /v8/

View File

@@ -61,8 +61,8 @@ RUN make install-libiconv && \
# download and install v8 # download and install v8
RUN curl --fail -L -o libc_v8.a https://github.com/lightpanda-io/zig-v8-fork/releases/download/${ZIG_V8}/libc_v8_${V8}_linux_${ARCH}.a && \ RUN curl --fail -L -o libc_v8.a https://github.com/lightpanda-io/zig-v8-fork/releases/download/${ZIG_V8}/libc_v8_${V8}_linux_${ARCH}.a && \
mkdir -p vendor/zig-js-runtime/vendor/v8/${ARCH}-linux/release && \ mkdir -p v8/build/${ARCH}-linux/release/ninja/obj/zig/ && \
mv libc_v8.a vendor/zig-js-runtime/vendor/v8/${ARCH}-linux/release/libc_v8.a mv libc_v8.a v8/build/${ARCH}-linux/release/ninja/obj/zig/libc_v8.a
# build release # build release
RUN make build RUN make build

View File

@@ -47,7 +47,7 @@ help:
# $(ZIG) commands # $(ZIG) commands
# ------------ # ------------
.PHONY: build build-dev run run-release shell test bench download-zig wpt data .PHONY: build build-dev run run-release shell test bench download-zig wpt data get-v8 build-v8 build-v8-dev
zig_version = $(shell grep 'recommended_zig_version = "' "vendor/zig-js-runtime/build.zig" | cut -d'"' -f2) zig_version = $(shell grep 'recommended_zig_version = "' "vendor/zig-js-runtime/build.zig" | cut -d'"' -f2)
@@ -94,6 +94,19 @@ wpt-summary:
test: test:
@TEST_FILTER='${F}' $(ZIG) build test -freference-trace --summary all @TEST_FILTER='${F}' $(ZIG) build test -freference-trace --summary all
## v8
get-v8:
@printf "\e[36mGetting v8 source...\e[0m\n"
@$(ZIG) build get-v8
build-v8-dev:
@printf "\e[36mBuilding v8 (dev)...\e[0m\n"
@$(ZIG) build build-v8
build-v8:
@printf "\e[36mBuilding v8...\e[0m\n"
@$(ZIG) build -Doptimize=ReleaseSafe build-v8
# Install and build required dependencies commands # Install and build required dependencies commands
# ------------ # ------------
.PHONY: install-submodule .PHONY: install-submodule

View File

@@ -221,15 +221,17 @@ env var `MIMALLOC_SHOW_STATS=1`. See
First, get the tools necessary for building V8, as well as the V8 source code: First, get the tools necessary for building V8, as well as the V8 source code:
``` ```
zig build get-v8 make get-v8
``` ```
Next, build v8. This build task is very long and cpu consuming, as you will build v8 from sources. Next, build v8. This build task is very long and cpu consuming, as you will build v8 from sources.
``` ```
zig build build-v8 make build-v8-dev
``` ```
For dev env, use `make build-v8-dev`.
## Test ## Test
### Unit Tests ### Unit Tests

View File

@@ -129,7 +129,6 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
var prototype_index = i; var prototype_index = i;
const Struct = @field(types, s.name); const Struct = @field(types, s.name);
if (@hasDecl(Struct, "prototype")) { if (@hasDecl(Struct, "prototype")) {
prototype_index = 1;
const TI = @typeInfo(Struct.prototype); const TI = @typeInfo(Struct.prototype);
const proto_name = @typeName(Receiver(TI.pointer.child)); const proto_name = @typeName(Receiver(TI.pointer.child));
prototype_index = @field(TYPE_LOOKUP, proto_name); prototype_index = @field(TYPE_LOOKUP, proto_name);
@@ -776,8 +775,8 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
scope_arena: ArenaAllocator, scope_arena: ArenaAllocator,
// When we need to load a resource (i.e. an external script), we call // When we need to load a resource (i.e. an external script), we call
// this function to get the source. This is always a refernece to the // this function to get the source. This is always a reference to the
// Browser Session's fetchModuleSource, but we use a funciton pointer // Browser Session's fetchModuleSource, but we use a function pointer
// since this js module is decoupled from the browser implementation. // since this js module is decoupled from the browser implementation.
module_loader: ModuleLoader, module_loader: ModuleLoader,
@@ -931,7 +930,7 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
// To turn a Zig instance into a v8 object, we need to do a number of things. // To turn a Zig instance into a v8 object, we need to do a number of things.
// First, if it's a struct, we need to put it on the heap // First, if it's a struct, we need to put it on the heap
// Second, if we've alrady returned this instance, we should return // Second, if we've already returned this instance, we should return
// the same object. Hence, our executor maintains a map of Zig objects // the same object. Hence, our executor maintains a map of Zig objects
// to v8.PersistentObject (the "identity_map"). // to v8.PersistentObject (the "identity_map").
// Finally, if this is the first time we've seen this instance, we need to: // Finally, if this is the first time we've seen this instance, we need to:

View File

@@ -46,6 +46,19 @@ pub fn main() !void {
var slowest = SlowTracker.init(allocator, 5); var slowest = SlowTracker.init(allocator, 5);
defer slowest.deinit(); defer slowest.deinit();
var args = try std.process.argsWithAllocator(allocator);
defer args.deinit();
// ignore the exec name.
_ = args.next();
var json_stats = false;
while (args.next()) |arg| {
if (std.mem.eql(u8, "--json", arg)) {
json_stats = true;
continue;
}
}
var pass: usize = 0; var pass: usize = 0;
var fail: usize = 0; var fail: usize = 0;
var skip: usize = 0; var skip: usize = 0;
@@ -155,6 +168,37 @@ pub fn main() !void {
printer.fmt("\n", .{}); printer.fmt("\n", .{});
try slowest.display(printer); try slowest.display(printer);
printer.fmt("\n", .{}); printer.fmt("\n", .{});
// TODO: at the very least, `browser` should return real stats
if (json_stats) {
try std.json.stringify(&.{
.{ .name = "browser", .bench = .{
.duration = 3180096049,
.alloc_nb = 6,
.realloc_nb = 278,
.alloc_size = 24711226,
} },
.{ .name = "libdom", .bench = .{
.duration = 3180096049,
.alloc_nb = 0,
.realloc_nb = 0,
.alloc_size = 0,
} },
.{ .name = "v8", .bench = .{
.duration = 3180096049,
.alloc_nb = 0,
.realloc_nb = 0,
.alloc_size = 0,
} },
.{ .name = "main", .bench = .{
.duration = 3180096049,
.alloc_nb = 0,
.realloc_nb = 0,
.alloc_size = 0,
} },
}, .{ .whitespace = .indent_2 }, std.io.getStdOut().writer());
}
std.posix.exit(if (fail == 0) 0 else 1); std.posix.exit(if (fail == 0) 0 else 1);
} }