What version of Go are you using (go version)?
$ go version
go version go1.16.6 darwin/amd64
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
What did you do?
For the Webassembly version of Pigo face detection library I needed to transform the results returned by the getImageData Javascript method into a Uint8Array, which is the only value type accepted by the js.CopyBytesToGo function. For seamless user interaction it's requested the frame rate to be updated at a high frequency (ideally 60FPS) which cause the memory allocation to increase considerably and in the end the web browser crashes because of Out of memory error.

This is my code:
if err := det.UnpackCascades(); err == nil {
c.wg.Add(1)
go func() {
defer c.wg.Done()
c.renderer = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
c.reqID = c.window.Call("requestAnimationFrame", c.renderer)
// Draw the webcam frame to the canvas element
c.ctx.Call("drawImage", c.video, 0, 0)
rgba := c.ctx.Call("getImageData", 0, 0, width, height).Get("data")
uint8Arr := js.Global().Get("Uint8Array").New(rgba)
js.CopyBytesToGo(data, uint8Arr)
// pixels := c.rgbaToGrayscale(data)
// res := det.DetectFaces(pixels, height, width)
// c.drawDetection(res)
// if len(res) > 0 {
// c.send(string(c.stringify(res[0])))
// }
data = data[:cap(data)]
return nil
})
c.window.Call("requestAnimationFrame", c.renderer)
c.detectKeyPress()
<-c.done
c.renderer.Release()
}()
c.wg.Wait()
}
I commented out the above code section in the hope that memory consumption will decrease, but was not the case, so I'm quite confident that this issue is related to js.CopyBytesToGo method.
What did you expect to see?
To not crash the browser.
What did you see instead?
After a few minutes of continuous running the browser crashes.
What version of Go are you using (
go version)?What operating system and processor architecture are you using (
go env)?go envOutputWhat did you do?
For the Webassembly version of Pigo face detection library I needed to transform the results returned by the
getImageDataJavascript method into aUint8Array, which is the only value type accepted by thejs.CopyBytesToGofunction. For seamless user interaction it's requested the frame rate to be updated at a high frequency (ideally 60FPS) which cause the memory allocation to increase considerably and in the end the web browser crashes because ofOut of memoryerror.This is my code:
I commented out the above code section in the hope that memory consumption will decrease, but was not the case, so I'm quite confident that this issue is related to
js.CopyBytesToGomethod.What did you expect to see?
To not crash the browser.
What did you see instead?
After a few minutes of continuous running the browser crashes.