Bug: 171384879

Clone this repo:
  1. d4189ff Update Android.bp by running cargo_embargo am: 6a9c8a42b2 by James Farrell · 8 weeks ago main master
  2. 6a9c8a4 Update Android.bp by running cargo_embargo by James Farrell · 8 weeks ago
  3. 9d1ddc8 Update Android.bp by running cargo_embargo am: c361bd3199 by James Farrell · 10 weeks ago
  4. c361bd3 Update Android.bp by running cargo_embargo by James Farrell · 10 weeks ago
  5. 5b96f1d Migrate to cargo_embargo. am: 064020b2df am: 73c9fa1c04 am: 4f48d6d243 by Andrew Walbran · 8 months ago android14-qpr3-release android14-qpr3-s2-release emu-34-2-dev android-14.0.0_r50 android-14.0.0_r51 android-14.0.0_r52 android-14.0.0_r53 android-14.0.0_r54

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 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.
  • 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.

This crate also exports the function instant::now() which returns a representation of the current time as an f64, expressed in milliseconds, in a platform-agnostic way. instant::now() 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.
  • Return the time elapsed since the Unix Epoch on native, non-WASM platforms.

Note: The old feature, now, has been deprecated. instant::now() is always exported and the now feature flag no longer has any effect. It remains listed in Cargo.toml to avoid introducing breaking changes and may be removed in future versions.

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::now();
}

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::now();
}

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::now();
}

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::now();
}

Using instant::now()

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::Instant::now();
    let now_milliseconds = instant::now(); // In milliseconds.
}

Using the feature now without stdweb or wasm-bindgen.

Cargo.toml:

[dependencies]
instant = "0.1"

lib.rs:

fn my_function() {
    // Will use the 'now' javascript implementation.
    let now_instant = instant::Instant::now();
    let now_milliseconds = instant::now(); // In milliseconds.
}

javascript WASM bindings file:

function now() {
	return Date.now() / 1000.0;
}