(original) (raw)
{-# LINE 1 "libraries/base/GHC/Stats.hsc" #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RecordWildCards #-} {-# OPTIONS_GHC -funbox-strict-fields #-}
module GHC.Stats (
RTSStats(..), GCDetails(..), RtsTime
, getRTSStats
, getRTSStatsEnabled) where
import Control.Monad import Data.Int import Data.Word import GHC.Base import GHC.Generics (Generic) import GHC.Read ( Read ) import GHC.Show ( Show ) import GHC.IO.Exception import Foreign.Marshal.Alloc import Foreign.Storable import Foreign.Ptr
foreign import ccall "getRTSStats" getRTSStats_ :: Ptr () -> IO ()
foreign import ccall "getRTSStatsEnabled" getRTSStatsEnabled :: IO Bool
data RTSStats = RTSStats {
gcs :: Word32, major_gcs :: Word32
, allocated_bytes :: Word64
, max_live_bytes :: Word64
, max_large_objects_bytes :: Word64
, max_compact_bytes :: Word64
, max_slop_bytes :: Word64
, max_mem_in_use_bytes :: Word64
, cumulative_live_bytes :: Word64
, copied_bytes :: Word64
, par_copied_bytes :: Word64
, cumulative_par_max_copied_bytes :: Word64
, cumulative_par_balanced_copied_bytes :: Word64
, init_cpu_ns :: RtsTime
, init_elapsed_ns :: RtsTime
, mutator_cpu_ns :: RtsTime
, mutator_elapsed_ns :: RtsTime
, gc_cpu_ns :: RtsTime
, gc_elapsed_ns :: RtsTime
, cpu_ns :: RtsTime
, elapsed_ns :: RtsTime
, nonmoving_gc_sync_cpu_ns :: RtsTime
, nonmoving_gc_sync_elapsed_ns :: RtsTime
, nonmoving_gc_sync_max_elapsed_ns :: RtsTime
, nonmoving_gc_cpu_ns :: RtsTime
, nonmoving_gc_elapsed_ns :: RtsTime
, nonmoving_gc_max_elapsed_ns :: RtsTime
, gc :: GCDetails } deriving ( Read , Show , Generic )
data GCDetails = GCDetails {
gcdetails_gen :: Word32, gcdetails_threads :: Word32
, gcdetails_allocated_bytes :: Word64
, gcdetails_live_bytes :: Word64
, gcdetails_large_objects_bytes :: Word64
, gcdetails_compact_bytes :: Word64
, gcdetails_slop_bytes :: Word64
, gcdetails_mem_in_use_bytes :: Word64
, gcdetails_copied_bytes :: Word64
, gcdetails_par_max_copied_bytes :: Word64
, gcdetails_par_balanced_copied_bytes :: Word64
, gcdetails_sync_elapsed_ns :: RtsTime
, gcdetails_cpu_ns :: RtsTime
, gcdetails_elapsed_ns :: RtsTime
, gcdetails_nonmoving_gc_sync_cpu_ns :: RtsTime
, gcdetails_nonmoving_gc_sync_elapsed_ns :: RtsTime } deriving ( Read , Show , Generic )
type RtsTime = Int64
getRTSStats :: IO RTSStats
getRTSStats = do
statsEnabled <- getRTSStatsEnabled
unless statsEnabled . ioError $ IOError
Nothing
UnsupportedOperation
""
"GHC.Stats.getRTSStats: GC stats not enabled. Use +RTS -T -RTS' to enable them." Nothing Nothing allocaBytes ((368)) $ \p -> do {-# LINE 201 "libraries/base/GHC/Stats.hsc" #-} getRTSStats_ p gcs <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p {-# LINE 203 "libraries/base/GHC/Stats.hsc" #-} major_gcs <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) p {-# LINE 204 "libraries/base/GHC/Stats.hsc" #-} allocated_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p {-# LINE 205 "libraries/base/GHC/Stats.hsc" #-} max_live_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) p {-# LINE 206 "libraries/base/GHC/Stats.hsc" #-} max_large_objects_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 24)) p {-# LINE 207 "libraries/base/GHC/Stats.hsc" #-} max_compact_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 32)) p {-# LINE 208 "libraries/base/GHC/Stats.hsc" #-} max_slop_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 40)) p {-# LINE 209 "libraries/base/GHC/Stats.hsc" #-} max_mem_in_use_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 48)) p {-# LINE 210 "libraries/base/GHC/Stats.hsc" #-} cumulative_live_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 56)) p {-# LINE 211 "libraries/base/GHC/Stats.hsc" #-} copied_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 64)) p {-# LINE 212 "libraries/base/GHC/Stats.hsc" #-} par_copied_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 72)) p {-# LINE 213 "libraries/base/GHC/Stats.hsc" #-} cumulative_par_max_copied_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 80)) p {-# LINE 215 "libraries/base/GHC/Stats.hsc" #-} cumulative_par_balanced_copied_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 88)) p {-# LINE 217 "libraries/base/GHC/Stats.hsc" #-} init_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 96)) p {-# LINE 218 "libraries/base/GHC/Stats.hsc" #-} init_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 104)) p {-# LINE 219 "libraries/base/GHC/Stats.hsc" #-} mutator_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 112)) p {-# LINE 220 "libraries/base/GHC/Stats.hsc" #-} mutator_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 120)) p {-# LINE 221 "libraries/base/GHC/Stats.hsc" #-} gc_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 128)) p {-# LINE 222 "libraries/base/GHC/Stats.hsc" #-} gc_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 136)) p {-# LINE 223 "libraries/base/GHC/Stats.hsc" #-} cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 144)) p {-# LINE 224 "libraries/base/GHC/Stats.hsc" #-} elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 152)) p {-# LINE 225 "libraries/base/GHC/Stats.hsc" #-} nonmoving_gc_sync_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 320)) p {-# LINE 226 "libraries/base/GHC/Stats.hsc" #-} nonmoving_gc_sync_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 328)) p {-# LINE 227 "libraries/base/GHC/Stats.hsc" #-} nonmoving_gc_sync_max_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 336)) p {-# LINE 228 "libraries/base/GHC/Stats.hsc" #-} nonmoving_gc_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 344)) p {-# LINE 229 "libraries/base/GHC/Stats.hsc" #-} nonmoving_gc_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 352)) p {-# LINE 230 "libraries/base/GHC/Stats.hsc" #-} nonmoving_gc_max_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 360)) p {-# LINE 231 "libraries/base/GHC/Stats.hsc" #-} let pgc = ((\hsc_ptr -> hsc_ptr plusPtr` 160)) p
{-# LINE 232 "libraries/base/GHC/Stats.hsc" #-}
gc <- do
gcdetails_gen <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) pgc
{-# LINE 234 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_threads <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) pgc
{-# LINE 235 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_allocated_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) pgc
{-# LINE 236 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_live_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) pgc
{-# LINE 237 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_large_objects_bytes <-
((\hsc_ptr -> peekByteOff hsc_ptr 24)) pgc
{-# LINE 239 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_compact_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 32)) pgc
{-# LINE 240 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_slop_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 40)) pgc
{-# LINE 241 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_mem_in_use_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 48)) pgc
{-# LINE 242 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_copied_bytes <- ((\hsc_ptr -> peekByteOff hsc_ptr 56)) pgc
{-# LINE 243 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_par_max_copied_bytes <-
((\hsc_ptr -> peekByteOff hsc_ptr 64)) pgc
{-# LINE 245 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_par_balanced_copied_bytes <-
((\hsc_ptr -> peekByteOff hsc_ptr 72)) pgc
{-# LINE 247 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_sync_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 80)) pgc
{-# LINE 248 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 88)) pgc
{-# LINE 249 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 96)) pgc
{-# LINE 250 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_nonmoving_gc_sync_cpu_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 104)) pgc
{-# LINE 251 "libraries/base/GHC/Stats.hsc" #-}
gcdetails_nonmoving_gc_sync_elapsed_ns <- ((\hsc_ptr -> peekByteOff hsc_ptr 112)) pgc
{-# LINE 252 "libraries/base/GHC/Stats.hsc" #-}
return GCDetails{..}
return RTSStats{..}