Android VTS 12.0 Release 1 (SP1A.210812.016)
Snap for 7160059 from a18edb3289aec2ac3b8adcc24ddf8c70b717a0bc to sc-release

Change-Id: I0c0a86ba70dd059b9add54ab0adcd3338dac121f
tree: cca5bb2f710f5667d61900a53bea9e4dacef32a3
  1. .circleci/
  2. src/
  3. tests/
  4. .cargo_vcs_info.json
  5. .gitignore
  6. Android.bp
  7. AUTHORS
  8. Cargo.toml
  9. Cargo.toml.orig
  10. LICENSE
  11. METADATA
  12. MODULE_LICENSE_BSD_LIKE
  13. OWNERS
  14. README.md
  15. TEST_MAPPING
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 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.

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;
}