{-# LINE 1 "libraries\\base\\src\\System\\CPUTime.hsc" #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE CPP, CApiFFI #-}

-----------------------------------------------------------------------------

-- |

-- Module      :  System.CPUTime

-- Copyright   :  (c) The University of Glasgow 2001

-- License     :  BSD-style (see the file libraries/base/LICENSE)

--

-- Maintainer  :  libraries@haskell.org

-- Stability   :  provisional

-- Portability :  portable

--

-- The standard CPUTime library.

--

-----------------------------------------------------------------------------





-- For various _POSIX_* #defines


{-# LINE 23 "libraries\\base\\src\\System\\CPUTime.hsc" #-}


{-# LINE 25 "libraries\\base\\src\\System\\CPUTime.hsc" #-}

module System.CPUTime
    ( getCPUTime
    , cpuTimePrecision
    ) where

import Prelude
import System.IO.Unsafe (unsafePerformIO)

-- Here is where we decide which backend to use


{-# LINE 36 "libraries\\base\\src\\System\\CPUTime.hsc" #-}
import qualified System.CPUTime.Windows as I


{-# LINE 59 "libraries\\base\\src\\System\\CPUTime.hsc" #-}

-- | The 'cpuTimePrecision' constant is the smallest measurable difference

-- in CPU time that the implementation can record, and is given as an

-- integral number of picoseconds.

cpuTimePrecision :: Integer
cpuTimePrecision :: Integer
cpuTimePrecision = IO Integer -> Integer
forall a. IO a -> a
unsafePerformIO IO Integer
I.getCpuTimePrecision
{-# NOINLINE cpuTimePrecision #-}

-- | Computation 'getCPUTime' returns the number of picoseconds CPU time

-- used by the current program.  The precision of this result is

-- implementation-dependent.

getCPUTime :: IO Integer
getCPUTime :: IO Integer
getCPUTime = IO Integer
I.getCPUTime