Skip to content
Snippets Groups Projects
  • Jacob's avatar
    104c293f
    syscall/js: allocate arg slices on stack for small numbers of args · 104c293f
    Jacob authored
    The existing implementation causes unnecessary heap allocations for
    javascript syscalls: Call, Invoke, and New. The new change seeks to
    hint the Go compiler to allocate arg slices with length <=16 to the
    stack.
    
    Original Work: CL 367045
    - Calling a JavaScript function with 16 arguments or fewer will not
    induce two additional heap allocations, at least with the current Go
    compiler.
    - Using syscall/js features with slices and strings of
    statically-known length will not cause them to be escaped to the heap,
    at least with the current Go compiler.
    - The reduction in allocations has the additional benefit that the
    garbage collector runs less often, blocking WebAssembly's one and only
    thread less often.
    
    Fixes #39740
    
    Change-Id: I815047e1d4f8ada796318e2064d38d3e63f73098
    GitHub-Last-Rev: 36df1b33a4506e216767d8a73395f2fafdd80eba
    GitHub-Pull-Request: golang/go#66684
    Reviewed-on: https://go-review.googlesource.com/c/go/+/576575
    
    
    Reviewed-by: default avatarCherry Mui <cherryyz@google.com>
    Reviewed-by: default avatarDmitri Shuralyov <dmitshur@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    104c293f
    History
    syscall/js: allocate arg slices on stack for small numbers of args
    Jacob authored
    The existing implementation causes unnecessary heap allocations for
    javascript syscalls: Call, Invoke, and New. The new change seeks to
    hint the Go compiler to allocate arg slices with length <=16 to the
    stack.
    
    Original Work: CL 367045
    - Calling a JavaScript function with 16 arguments or fewer will not
    induce two additional heap allocations, at least with the current Go
    compiler.
    - Using syscall/js features with slices and strings of
    statically-known length will not cause them to be escaped to the heap,
    at least with the current Go compiler.
    - The reduction in allocations has the additional benefit that the
    garbage collector runs less often, blocking WebAssembly's one and only
    thread less often.
    
    Fixes #39740
    
    Change-Id: I815047e1d4f8ada796318e2064d38d3e63f73098
    GitHub-Last-Rev: 36df1b33a4506e216767d8a73395f2fafdd80eba
    GitHub-Pull-Request: golang/go#66684
    Reviewed-on: https://go-review.googlesource.com/c/go/+/576575
    
    
    Reviewed-by: default avatarCherry Mui <cherryyz@google.com>
    Reviewed-by: default avatarDmitri Shuralyov <dmitshur@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.