{-# 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{..}