tag | 0496468c5f632220da111e63258dc443e32d53b7 | |
---|---|---|
tagger | The Android Open Source Project <initial-contribution@android.com> | Thu Nov 10 21:09:02 2022 -0800 |
object | acdbada55ff79ed4ecc614da0b39e3fcc33b7ead |
aml_tz3_312410020
commit | acdbada55ff79ed4ecc614da0b39e3fcc33b7ead | [log] [tgz] |
---|---|---|
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | Wed Jun 15 21:44:18 2022 +0000 |
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | Wed Jun 15 21:44:18 2022 +0000 |
tree | cca5bb2f710f5667d61900a53bea9e4dacef32a3 | |
parent | 99c028480d3790cb85c35f7eacacd7c892f4f0af [diff] | |
parent | 59506c3bb214deda76392af3da52b5aa82e2e57d [diff] |
Snap for 8730993 from 59506c3bb214deda76392af3da52b5aa82e2e57d to mainline-tzdata3-release Change-Id: Ifa5323c930a68f3845a0b4d054c0e91e4b45a4d8
If you call std::time::Instant::now()
on a WASM platform, it will panic. This crate provides a partial replacement for std::time::Instant
that works on WASM too. This defines the type instant::Instant
which is:
wasm32-unknown-unknown
or wasm32-unknown-asmjs
and you enabled either the stdweb
or the wasm-bindgen
feature. This emulation is based on the javascript performance.now()
function.std::time::Instant
otherwise.Note that even if the stdweb or wasm-bindgen feature is enabled, this crate will continue to rely on std::time::Instant
as long as you are not targeting wasm32. This allows for portable code that will work on both native and WASM platforms.
now
.By enabling the feature now
the function instant::now()
will be exported and will either:
performance.now()
when compiling for a WASM platform with the features stdweb or wasm-bindgen enabled, or using a custom javascript function.time::precise_time_s() * 1000.0
otherwise.The result is expressed in milliseconds.
instant
for a native platform.Cargo.toml:
[dependencies] instant = "0.1"
main.rs:
fn main() { // Will be the same as `std::time::Instant`. let now = instant::Instant::new(); }
instant
for a WASM platform.This example shows the use of the stdweb
feature. It would be similar with wasm-bindgen
.
Cargo.toml:
[dependencies] instant = { version = "0.1", features = [ "stdweb" ] }
main.rs:
fn main() { // Will emulate `std::time::Instant` based on `performance.now()`. let now = instant::Instant::new(); }
instant
for a WASM platform where performance.now()
is not available.This example shows the use of the inaccurate
feature.
Cargo.toml:
[dependencies] instant = { version = "0.1", features = [ "wasm-bindgen", "inaccurate" ] }
main.rs:
fn main() { // Will emulate `std::time::Instant` based on `Date.now()`. let now = instant::Instant::new(); }
instant
for any platform enabling a feature transitively.Cargo.toml:
[features] stdweb = [ "instant/stdweb" ] wasm-bindgen = [ "instant/wasm-bindgen" ] [dependencies] instant = "0.1"
lib.rs:
fn my_function() { // Will select the proper implementation depending on the // feature selected by the user. let now = instant::Instant::new(); }
now
.Cargo.toml:
[features] stdweb = [ "instant/stdweb" ] wasm-bindgen = [ "instant/wasm-bindgen" ] [dependencies] instant = { version = "0.1", features = [ "now" ] }
lib.rs:
fn my_function() { // Will select the proper implementation depending on the // feature selected by the user. let now_instant = instant::Instant::new(); let now_milliseconds = instant::now(); // In milliseconds. }
now
without stdweb
or wasm-bindgen
.Cargo.toml:
[dependencies] instant = { version = "0.", features = [ "now" ] }
lib.rs:
fn my_function() { // Will use the 'now' javascript implementation. let now_instant = instant::Instant::new(); let now_milliseconds = instant::now(); // In milliseconds. }
javascript WASM bindings file:
function now() { return Date.now() / 1000.0; }