aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-21 16:35:06 +0100
committergingerBill <bill@gingerbill.org>2022-05-21 16:35:06 +0100
commit577fa2d29b87565bbecdd8c1d5fadccac79c404a (patch)
tree2aad6cab68f58febd12aa5202db99a6369171ab2
parent72fcf16a394c2690df1fe41334fa59c36713f215 (diff)
Update `time` procedures for js targets
-rw-r--r--core/time/time_js.odin25
-rw-r--r--vendor/wasm/js/runtime.js10
2 files changed, 27 insertions, 8 deletions
diff --git a/core/time/time_js.odin b/core/time/time_js.odin
index 9a7163f38..226f921f9 100644
--- a/core/time/time_js.odin
+++ b/core/time/time_js.odin
@@ -2,22 +2,31 @@
//+build js
package time
-_IS_SUPPORTED :: false
+foreign import "odin_env"
+
+_IS_SUPPORTED :: true
_now :: proc "contextless" () -> Time {
- return {}
+ foreign odin_env {
+ time_now :: proc "contextless" () -> i64 ---
+ }
+ return Time{time_now()}
}
_sleep :: proc "contextless" (d: Duration) {
+ foreign odin_env {
+ time_sleep :: proc "contextless" (ms: u32) ---
+ }
+ if d > 0 {
+ time_sleep(u32(d/1e6))
+ }
}
_tick_now :: proc "contextless" () -> Tick {
- // mul_div_u64 :: proc "contextless" (val, num, den: i64) -> i64 {
- // q := val / den
- // r := val % den
- // return q * num + r * num / den
- // }
- return {}
+ foreign odin_env {
+ tick_now :: proc "contextless" () -> i64 ---
+ }
+ return Tick{tick_now()}
}
_yield :: proc "contextless" () {
diff --git a/vendor/wasm/js/runtime.js b/vendor/wasm/js/runtime.js
index 6cec2d0c0..f24c85bcd 100644
--- a/vendor/wasm/js/runtime.js
+++ b/vendor/wasm/js/runtime.js
@@ -1280,8 +1280,18 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
evaluate: (str_ptr, str_len) => { eval.call(null, wasmMemoryInterface.loadString(str_ptr, str_len)); },
time_now: () => {
+ // convert ms to ns
+ return Date.now() * 1e6;
+ },
+ time_tick_now: () => {
+ // convert ms to ns
return performance.now() * 1e6;
},
+ time_sleep: (duration_ms) => {
+ if (duration_ms > 0) {
+ // TODO(bill): Does this even make any sense?
+ }
+ },
sqrt: (x) => Math.sqrt(x),
sin: (x) => Math.sin(x),