{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE CPP #-}
module Weigh.GHCStats
(getGhcStatsSizeInBytes
,getStats
,gcCount
,totalBytesAllocated
,liveBytes
,maxBytesInUse
,maxOSBytes
)
where
import Data.Word
import GHC.Stats
import System.Mem
getStats :: IO RTSStats
getStats :: IO RTSStats
getStats = IO RTSStats
getRTSStats
gcCount :: RTSStats -> Word32
gcCount :: RTSStats -> Word32
gcCount = RTSStats -> Word32
gcs
totalBytesAllocated :: RTSStats -> Word64
totalBytesAllocated :: RTSStats -> Word64
totalBytesAllocated = RTSStats -> Word64
allocated_bytes
liveBytes :: RTSStats -> Word64
liveBytes :: RTSStats -> Word64
liveBytes = GCDetails -> Word64
gcdetails_live_bytes forall b c a. (b -> c) -> (a -> b) -> a -> c
. RTSStats -> GCDetails
gc
maxBytesInUse :: RTSStats -> Word64
maxBytesInUse :: RTSStats -> Word64
maxBytesInUse = RTSStats -> Word64
max_live_bytes
maxOSBytes :: RTSStats -> Word64
maxOSBytes :: RTSStats -> Word64
maxOSBytes = RTSStats -> Word64
max_mem_in_use_bytes
getGhcStatsSizeInBytes :: IO Word64
getGhcStatsSizeInBytes :: IO Word64
getGhcStatsSizeInBytes = do
RTSStats
s1 <- IO RTSStats
oneGetStats
RTSStats
s2 <- IO RTSStats
twoGetStats
forall (m :: * -> *) a. Monad m => a -> m a
return (forall a b. (Integral a, Num b) => a -> b
fromIntegral (RTSStats -> Word64
totalBytesAllocated RTSStats
s2 forall a. Num a => a -> a -> a
- RTSStats -> Word64
totalBytesAllocated RTSStats
s1))
where
oneGetStats :: IO RTSStats
oneGetStats = do
IO ()
performGC
!RTSStats
s <- IO RTSStats
getStats
forall (m :: * -> *) a. Monad m => a -> m a
return RTSStats
s
twoGetStats :: IO RTSStats
twoGetStats = do
IO ()
performGC
!RTSStats
_ <- IO RTSStats
getStats
!RTSStats
s <- IO RTSStats
getStats
forall (m :: * -> *) a. Monad m => a -> m a
return RTSStats
s