• Richard Musiol's avatar
    runtime, sycall/js: add support for callbacks from JavaScript · e083dc63
    Richard Musiol authored
    This commit adds support for JavaScript callbacks back into
    WebAssembly. This is experimental API, just like the rest of the
    syscall/js package. The time package now also uses this mechanism
    to properly support timers without resorting to a busy loop.
    
    JavaScript code can call into the same entry point multiple times.
    The new RUN register is used to keep track of the program's
    run state. Possible values are: starting, running, paused and exited.
    If no goroutine is ready any more, the scheduler can put the
    program into the "paused" state and the WebAssembly code will
    stop running. When a callback occurs, the JavaScript code puts
    the callback data into a queue and then calls into WebAssembly
    to allow the Go code to continue running.
    
    Updates #18892
    Updates #25506
    
    Change-Id: Ib8701cfa0536d10d69bd541c85b0e2a754eb54fb
    Reviewed-on: https://go-review.googlesource.com/114197Reviewed-by: 's avatarAustin Clements <austin@google.com>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    e083dc63
lock_js.go 3.8 KB