Adds Runtime.WithCapacityPages to avoid allocations during runtime. (#514)

`Runtime.WithMemoryCapacityPages` is a function that determines memory
capacity in pages (65536 bytes per page). The inputs are the min and
possibly nil max defined by the module, and the default is to return
the min.

Ex. To set capacity to max when exists:
```golang
c.WithMemoryCapacityPages(func(minPages uint32, maxPages *uint32) uint32 {
	if maxPages != nil {
		return *maxPages
	}
	return minPages
})
```

Note: This applies at compile time, ModuleBuilder.Build or Runtime.CompileModule.

Fixes #500

Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
Crypt Keeper
2022-04-29 17:54:48 +08:00
committed by GitHub
parent 189b694140
commit 2c03098dba
30 changed files with 532 additions and 217 deletions

View File

@@ -18,12 +18,12 @@ func TestRuntimeConfig(t *testing.T) {
expected *RuntimeConfig
}{
{
name: "WithMemoryMaxPages",
name: "WithMemoryLimitPages",
with: func(c *RuntimeConfig) *RuntimeConfig {
return c.WithMemoryMaxPages(1)
return c.WithMemoryLimitPages(1)
},
expected: &RuntimeConfig{
memoryMaxPages: 1,
memoryLimitPages: 1,
},
},
{
@@ -83,6 +83,24 @@ func TestRuntimeConfig(t *testing.T) {
require.Equal(t, &RuntimeConfig{}, input)
})
}
t.Run("WithMemoryCapacityPages", func(t *testing.T) {
c := NewRuntimeConfig()
// Test default returns min
require.Equal(t, uint32(1), c.memoryCapacityPages(1, nil))
// Nil ignored
c = c.WithMemoryCapacityPages(nil)
require.Equal(t, uint32(1), c.memoryCapacityPages(1, nil))
// Assign a valid function
c = c.WithMemoryCapacityPages(func(minPages uint32, maxPages *uint32) uint32 {
return 2
})
// Returns updated value
require.Equal(t, uint32(2), c.memoryCapacityPages(1, nil))
})
}
func TestRuntimeConfig_FeatureToggle(t *testing.T) {