base-4.19.0.0: GHC/Clock.hsc
{-# LANGUAGE CPP #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude #-}
module GHC.Clock
( getMonotonicTime
, getMonotonicTimeNSec
) where
import GHC.Base
import GHC.Real
import Data.Word
#if defined(javascript_HOST_ARCH)
import GHC.Num
#endif
-- | Return monotonic time in seconds, since some unspecified starting point
--
-- @since 4.11.0.0
getMonotonicTime :: IO Double
getMonotonicTime = do
#if defined(javascript_HOST_ARCH)
w <- getMonotonicTimeMSec
return (w / 1000)
#else
w <- getMonotonicTimeNSec
return (fromIntegral w / 1000000000)
#endif
-- | Return monotonic time in nanoseconds, since some unspecified starting point
--
-- @since 4.11.0.0
#if defined(javascript_HOST_ARCH)
getMonotonicTimeNSec :: IO Word64
getMonotonicTimeNSec = do
w <- getMonotonicTimeMSec
return (floor w * 1000000)
foreign import javascript unsafe "performance.now" getMonotonicTimeMSec:: IO Double
#else
foreign import ccall unsafe "getMonotonicNSec"
getMonotonicTimeNSec :: IO Word64
#endif