From bbdc65bb3825dfde90603d1b26a2034e8963356c Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 25 Oct 2024 17:30:26 -0400 Subject: [PATCH] test: add a test for wasm memory usage Test that a small Wasm program uses 8 MB of linear memory. This reflects the current allocator. We test an exact value, but if the allocator changes, we can update or relax this. Updates #69018. Change-Id: Ifc0bb420af008bd30cde4745b3efde3ce091b683 Reviewed-on: https://go-review.googlesource.com/c/go/+/622378 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- test/wasmmemsize.dir/asm_wasm.s | 11 +++++++++++ test/wasmmemsize.dir/main.go | 30 ++++++++++++++++++++++++++++++ test/wasmmemsize.go | 11 +++++++++++ 3 files changed, 52 insertions(+) create mode 100644 test/wasmmemsize.dir/asm_wasm.s create mode 100644 test/wasmmemsize.dir/main.go create mode 100644 test/wasmmemsize.go diff --git a/test/wasmmemsize.dir/asm_wasm.s b/test/wasmmemsize.dir/asm_wasm.s new file mode 100644 index 0000000000..daccfcc753 --- /dev/null +++ b/test/wasmmemsize.dir/asm_wasm.s @@ -0,0 +1,11 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·currentMemory(SB), NOSPLIT, $0 + Get SP + CurrentMemory + I32Store ret+0(FP) + RET diff --git a/test/wasmmemsize.dir/main.go b/test/wasmmemsize.dir/main.go new file mode 100644 index 0000000000..d3beab2481 --- /dev/null +++ b/test/wasmmemsize.dir/main.go @@ -0,0 +1,30 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "io" +) + +// Expect 8 MB of memory usage for a small wasm program. +// This reflects the current allocator. We test an exact +// value here, but if the allocator changes, we can update +// or relax this. +const want = 8 << 20 + +var w = io.Discard + +func main() { + fmt.Fprintln(w, "hello world") + + const pageSize = 64 * 1024 + sz := uintptr(currentMemory()) * pageSize + if sz != want { + fmt.Printf("FAIL: unexpected memory size %d, want %d\n", sz, want) + } +} + +func currentMemory() int32 // implemented in assembly diff --git a/test/wasmmemsize.go b/test/wasmmemsize.go new file mode 100644 index 0000000000..4498169087 --- /dev/null +++ b/test/wasmmemsize.go @@ -0,0 +1,11 @@ +// runindir + +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This test checks the memory size of a small wasm program. + +//go:build wasm + +package ignored