mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-26 02:42:02 +01:00
internal/jsutil: Optimize byteLength calls by using bind
This commit is contained in:
parent
ffe9a6f72d
commit
65e148700f
@ -18,7 +18,10 @@ import (
|
|||||||
"syscall/js"
|
"syscall/js"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var go2cpp = js.Global().Get("go2cpp").Truthy()
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
object = js.Global().Get("Object")
|
||||||
arrayBuffer = js.Global().Get("ArrayBuffer")
|
arrayBuffer = js.Global().Get("ArrayBuffer")
|
||||||
uint8Array = js.Global().Get("Uint8Array")
|
uint8Array = js.Global().Get("Uint8Array")
|
||||||
float32Array = js.Global().Get("Float32Array")
|
float32Array = js.Global().Get("Float32Array")
|
||||||
@ -37,18 +40,57 @@ var (
|
|||||||
temporaryFloat32Array = float32Array.New(temporaryArrayBuffer)
|
temporaryFloat32Array = float32Array.New(temporaryArrayBuffer)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
temporaryArrayBufferByteLengthFunc js.Value
|
||||||
|
temporaryUint8ArrayByteLengthFunc js.Value
|
||||||
|
temporaryFloat32ArrayByteLengthFunc js.Value
|
||||||
|
)
|
||||||
|
|
||||||
|
func objectPrototype() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if go2cpp {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
temporaryArrayBufferByteLengthFunc = object.Call("getOwnPropertyDescriptor", arrayBuffer.Get("prototype"), "byteLength").Get("get").Call("bind", temporaryArrayBuffer)
|
||||||
|
temporaryUint8ArrayByteLengthFunc = object.Call("getOwnPropertyDescriptor", object.Call("getPrototypeOf", uint8Array).Get("prototype"), "byteLength").Get("get").Call("bind", temporaryUint8Array)
|
||||||
|
temporaryFloat32ArrayByteLengthFunc = object.Call("getOwnPropertyDescriptor", object.Call("getPrototypeOf", float32Array).Get("prototype"), "byteLength").Get("get").Call("bind", temporaryFloat32Array)
|
||||||
|
}
|
||||||
|
|
||||||
|
func temporaryArrayBufferByteLength() int {
|
||||||
|
if go2cpp {
|
||||||
|
return temporaryArrayBuffer.Get("byteLength").Int()
|
||||||
|
}
|
||||||
|
return temporaryArrayBufferByteLengthFunc.Invoke().Int()
|
||||||
|
}
|
||||||
|
|
||||||
|
func temporaryUint8ArrayByteLength() int {
|
||||||
|
if go2cpp {
|
||||||
|
return temporaryUint8Array.Get("byteLength").Int()
|
||||||
|
}
|
||||||
|
return temporaryUint8ArrayByteLengthFunc.Invoke().Int()
|
||||||
|
}
|
||||||
|
|
||||||
|
func temporaryFloat32ArrayByteLength() int {
|
||||||
|
if go2cpp {
|
||||||
|
return temporaryFloat32Array.Get("byteLength").Int()
|
||||||
|
}
|
||||||
|
return temporaryFloat32ArrayByteLengthFunc.Invoke().Int()
|
||||||
|
}
|
||||||
|
|
||||||
func ensureTemporaryArrayBufferSize(byteLength int) {
|
func ensureTemporaryArrayBufferSize(byteLength int) {
|
||||||
bufl := temporaryArrayBuffer.Get("byteLength").Int()
|
bufl := temporaryArrayBufferByteLength()
|
||||||
if bufl < byteLength {
|
if bufl < byteLength {
|
||||||
for bufl < byteLength {
|
for bufl < byteLength {
|
||||||
bufl *= 2
|
bufl *= 2
|
||||||
}
|
}
|
||||||
temporaryArrayBuffer = arrayBuffer.New(bufl)
|
temporaryArrayBuffer = arrayBuffer.New(bufl)
|
||||||
}
|
}
|
||||||
if temporaryUint8Array.Get("byteLength").Int() < bufl {
|
if temporaryUint8ArrayByteLength() < bufl {
|
||||||
temporaryUint8Array = uint8Array.New(temporaryArrayBuffer)
|
temporaryUint8Array = uint8Array.New(temporaryArrayBuffer)
|
||||||
}
|
}
|
||||||
if temporaryFloat32Array.Get("byteLength").Int() < bufl {
|
if temporaryFloat32ArrayByteLength() < bufl {
|
||||||
temporaryFloat32Array = float32Array.New(temporaryArrayBuffer)
|
temporaryFloat32Array = float32Array.New(temporaryArrayBuffer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user