componentized/directory

wasi:clocks

interface dependency

WASI clock interfaces for monotonic and system clocks

interface monotonic-clock wasi:clocks/monotonic-clock@0.3.0 since 0.3.0

WASI Monotonic Clock is a clock API intended to let users measure elapsed time.

It is intended to be portable at least between Unix-family platforms and Windows.

A monotonic clock is a clock which has an unspecified initial value, and successive reads of the clock will produce non-decreasing values.

Types

use type duration

from wasi:clocks/types@0.3.0

A duration of time, in nanoseconds.

  • u64

type marksince 0.3.0

A mark on a monotonic clock is a number of nanoseconds since an unspecified initial value, and can only be compared to instances from the same monotonic-clock.

  • u64

Functions

functionnow: func() -> marksince 0.3.0

Read the current value of the clock.

The clock is monotonic, therefore calling this function repeatedly will produce a sequence of non-decreasing values.

For completeness, this function traps if it's not possible to represent the value of the clock in a mark. Consequently, implementations should ensure that the starting time is low enough to avoid the possibility of overflow in practice.

functionget-resolution: func() -> durationsince 0.3.0

Query the resolution of the clock. Returns the duration of time corresponding to a clock tick.

async functionwait-until: async func(when: mark)since 0.3.0

Wait until the specified mark has occurred.

async functionwait-for: async func(how-long: duration)since 0.3.0

Wait for the specified duration to elapse.

WIT

/// WASI Monotonic Clock is a clock API intended to let users measure elapsed
/// time.
///
/// It is intended to be portable at least between Unix-family platforms and
/// Windows.
///
/// A monotonic clock is a clock which has an unspecified initial value, and
/// successive reads of the clock will produce non-decreasing values.
@since(version = 0.3.0)
interface monotonic-clock {
  use types.{duration};

  /// A mark on a monotonic clock is a number of nanoseconds since an
  /// unspecified initial value, and can only be compared to instances from
  /// the same monotonic-clock.
  @since(version = 0.3.0)
  type mark = u64;

  /// Read the current value of the clock.
  ///
  /// The clock is monotonic, therefore calling this function repeatedly will
  /// produce a sequence of non-decreasing values.
  ///
  /// For completeness, this function traps if it's not possible to represent
  /// the value of the clock in a `mark`. Consequently, implementations
  /// should ensure that the starting time is low enough to avoid the
  /// possibility of overflow in practice.
  @since(version = 0.3.0)
  now: func() -> mark;

  /// Query the resolution of the clock. Returns the duration of time
  /// corresponding to a clock tick.
  @since(version = 0.3.0)
  get-resolution: func() -> duration;

  /// Wait until the specified mark has occurred.
  @since(version = 0.3.0)
  wait-until: async func(when: mark);

  /// Wait for the specified duration to elapse.
  @since(version = 0.3.0)
  wait-for: async func(how-long: duration);
}