{-# LINE 1 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} {-# LANGUAGE CPP, CApiFFI, NumDecimals #-} {-# LINE 5 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} {-# LINE 6 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} {-# LINE 7 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} {-# LINE 8 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} {-# LINE 9 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} module System.CPUTime.Posix.ClockGetTime ( getCPUTime , getCpuTimePrecision ) where {-# LINE 16 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} import Foreign import Foreign.C import System.CPUTime.Utils getCPUTime :: IO Integer getCPUTime = fmap snd $ withTimespec $ \ts -> throwErrnoIfMinus1_ "clock_gettime" $ clock_gettime (2) ts {-# LINE 25 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} getCpuTimePrecision :: IO Integer getCpuTimePrecision = fmap snd $ withTimespec $ \ts -> throwErrnoIfMinus1_ "clock_getres" $ clock_getres (2) ts {-# LINE 30 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} data Timespec -- | Perform the given action to fill in a @struct timespec@, returning the -- result of the action and the value of the @timespec@ in picoseconds. withTimespec :: (Ptr Timespec -> IO a) -> IO (a, Integer) withTimespec action = allocaBytes (16) $ \p_ts -> do {-# LINE 38 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} r <- action p_ts u_sec <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p_ts :: IO CTime {-# LINE 40 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} u_nsec <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p_ts :: IO CLong {-# LINE 41 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-} return (r, cTimeToInteger u_sec * 1e12 + fromIntegral u_nsec * 1e3) foreign import capi unsafe "time.h clock_getres" clock_getres :: CInt -> Ptr Timespec -> IO CInt foreign import capi unsafe "time.h clock_gettime" clock_gettime :: CInt -> Ptr Timespec -> IO CInt {-# LINE 56 "libraries/base/System/CPUTime/Posix/ClockGetTime.hsc" #-}