064379727e
Differential Revision: https://phabricator.services.mozilla.com/D117803 |
||
---|---|---|
.. | ||
src | ||
tests | ||
.cargo-checksum.json | ||
AUTHORS | ||
Cargo.toml | ||
LICENSE | ||
README.md |
README.md
Instant
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:
- A struct emulating the behavior of std::time::Instant if you are targeting
wasm32-unknown-unknown
orwasm32-unknown-asmjs
and you enabled either thestdweb
or thewasm-bindgen
feature. This emulation is based on the javascriptperformance.now()
function. - A type alias for
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.
The feature now
.
By enabling the feature now
the function instant::now()
will be exported and will either:
- Call
performance.now()
when compiling for a WASM platform with the features stdweb or wasm-bindgen enabled, or using a custom javascript function. - Call
time::precise_time_s() * 1000.0
otherwise.
The result is expressed in milliseconds.
Examples
Using 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();
}
Using 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();
}
Using 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();
}
Using 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();
}
Using the feature 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.
}
Using the feature 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;
}