streamly-0.8.3: Dataflow programming and declarative concurrency
Copyright(c) 2021 Composewell Technologies
LicenseBSD-3-Clause
Maintainerstreamly@composewell.com
Stabilitypre-release
PortabilityGHC
Safe HaskellSafe-Inferred
LanguageHaskell2010

Streamly.Internal.Data.Time.Clock

Description

 
Synopsis

System clock

data Clock Source #

Clock types. A clock may be system-wide (that is, visible to all processes) or per-process (measuring time that is meaningful only within a process). All implementations shall support CLOCK_REALTIME. (The only suspend-aware monotonic is CLOCK_BOOTTIME on Linux.)

Constructors

Monotonic

The identifier for the system-wide monotonic clock, which is defined as a clock measuring real time, whose value cannot be set via clock_settime and which cannot have negative clock jumps. The maximum possible clock jump shall be implementation defined. For this clock, the value returned by getTime represents the amount of time (in seconds and nanoseconds) since an unspecified point in the past (for example, system start-up time, or the Epoch). This point does not change after system start-up time. Note that the absolute value of the monotonic clock is meaningless (because its origin is arbitrary), and thus there is no need to set it. Furthermore, realtime applications can rely on the fact that the value of this clock is never set.

Realtime

The identifier of the system-wide clock measuring real time. For this clock, the value returned by getTime represents the amount of time (in seconds and nanoseconds) since the Epoch.

ProcessCPUTime

The identifier of the CPU-time clock associated with the calling process. For this clock, the value returned by getTime represents the amount of execution time of the current process.

ThreadCPUTime

The identifier of the CPU-time clock associated with the calling OS thread. For this clock, the value returned by getTime represents the amount of execution time of the current OS thread.

MonotonicRaw

(since Linux 2.6.28; Linux and Mac OSX) Similar to CLOCK_MONOTONIC, but provides access to a raw hardware-based time that is not subject to NTP adjustments or the incremental adjustments performed by adjtime(3).

MonotonicCoarse

(since Linux 2.6.32; Linux and Mac OSX) A faster but less precise version of CLOCK_MONOTONIC. Use when you need very fast, but not fine-grained timestamps.

Uptime

(since Linux 2.6.39; Linux and Mac OSX) Identical to CLOCK_MONOTONIC, except it also includes any time that the system is suspended. This allows applications to get a suspend-aware monotonic clock without having to deal with the complications of CLOCK_REALTIME, which may have discontinuities if the time is changed using settimeofday(2).

RealtimeCoarse

(since Linux 2.6.32; Linux-specific) A faster but less precise version of CLOCK_REALTIME. Use when you need very fast, but not fine-grained timestamps.

Instances

Instances details
Enum Clock Source # 
Instance details

Defined in Streamly.Internal.Data.Time.Clock.Type

Generic Clock Source # 
Instance details

Defined in Streamly.Internal.Data.Time.Clock.Type

Associated Types

type Rep Clock :: Type -> Type #

Methods

from :: Clock -> Rep Clock x #

to :: Rep Clock x -> Clock #

Read Clock Source # 
Instance details

Defined in Streamly.Internal.Data.Time.Clock.Type

Show Clock Source # 
Instance details

Defined in Streamly.Internal.Data.Time.Clock.Type

Methods

showsPrec :: Int -> Clock -> ShowS #

show :: Clock -> String #

showList :: [Clock] -> ShowS #

Eq Clock Source # 
Instance details

Defined in Streamly.Internal.Data.Time.Clock.Type

Methods

(==) :: Clock -> Clock -> Bool #

(/=) :: Clock -> Clock -> Bool #

type Rep Clock Source # 
Instance details

Defined in Streamly.Internal.Data.Time.Clock.Type

type Rep Clock = D1 ('MetaData "Clock" "Streamly.Internal.Data.Time.Clock.Type" "streamly-0.8.3-7ePTR1H9Bp3FLh8wMmA1v5" 'False) (((C1 ('MetaCons "Monotonic" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Realtime" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ProcessCPUTime" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ThreadCPUTime" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "MonotonicRaw" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MonotonicCoarse" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Uptime" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "RealtimeCoarse" 'PrefixI 'False) (U1 :: Type -> Type))))

Async clock

asyncClock :: Clock -> Double -> IO (ThreadId, IORef MicroSecond64) Source #

asyncClock g starts a clock thread that updates an IORef with current time as a 64-bit value in microseconds, every g seconds. The IORef can be read asynchronously. The thread exits automatically when the reference to the returned ThreadId is lost.

Minimum granularity of clock update is 1 ms. Higher is better for performance.

CAUTION! This is safe only on a 64-bit machine. On a 32-bit machine a 64-bit Var cannot be read consistently without a lock while another thread is writing to it.

Adjustable Timer

data Timer Source #

Adjustable periodic timer.

timer :: Clock -> Double -> Double -> IO Timer Source #

timer clockType granularity period creates a timer. The timer produces timer ticks at specified time intervals that can be waited upon using waitTimer. If the previous tick is not yet processed, the new tick is lost.

resetTimer :: Timer -> IO () Source #

Resets the current period.

extendTimer :: Timer -> Double -> IO () Source #

Elongates the current period by specified amount.

Unimplemented

shortenTimer :: Timer -> Double -> IO () Source #

Shortens the current period by specified amount.

Unimplemented

readTimer :: Timer -> IO Double Source #

Show the remaining time in the current time period.

Unimplemented

waitTimer :: Timer -> IO () Source #

Blocking wait for a timer tick.