Browse Source

Update `time` procedures for js targets

gingerBill 3 years ago
parent
commit
577fa2d29b
2 changed files with 27 additions and 8 deletions
  1. 17 8
      core/time/time_js.odin
  2. 10 0
      vendor/wasm/js/runtime.js

+ 17 - 8
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" () {

+ 10 - 0
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),