]> Cypherpunks repositories - gostls13.git/commitdiff
test: add a test for wasm memory usage
authorCherry Mui <cherryyz@google.com>
Fri, 25 Oct 2024 21:30:26 +0000 (17:30 -0400)
committerCherry Mui <cherryyz@google.com>
Mon, 28 Oct 2024 13:27:58 +0000 (13:27 +0000)
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 <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

test/wasmmemsize.dir/asm_wasm.s [new file with mode: 0644]
test/wasmmemsize.dir/main.go [new file with mode: 0644]
test/wasmmemsize.go [new file with mode: 0644]

diff --git a/test/wasmmemsize.dir/asm_wasm.s b/test/wasmmemsize.dir/asm_wasm.s
new file mode 100644 (file)
index 0000000..daccfcc
--- /dev/null
@@ -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 (file)
index 0000000..d3beab2
--- /dev/null
@@ -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 (file)
index 0000000..4498169
--- /dev/null
@@ -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