module Text.Show.Text.GHC.Stats (showbGCStatsPrec) where
import Data.Text.Lazy.Builder (Builder)
import GHC.Show (appPrec)
import GHC.Stats (GCStats(..))
import Prelude hiding (Show)
import Text.Show.Text.Class (Show(showbPrec), showbParen)
import Text.Show.Text.Data.Integral (showbInt64Prec)
import Text.Show.Text.Data.Floating (showbDoublePrec)
import Text.Show.Text.Utils ((<>), s)
showbGCStatsPrec :: Int -> GCStats -> Builder
showbGCStatsPrec p gcStats = showbParen (p > appPrec) $
"GCStats {bytesAllocated = "
<> showbInt64Prec 0 (bytesAllocated gcStats)
<> ", numGcs = "
<> showbInt64Prec 0 (numGcs gcStats)
<> ", maxBytesUsed = "
<> showbInt64Prec 0 (maxBytesUsed gcStats)
<> ", numByteUsageSamples = "
<> showbInt64Prec 0 (numByteUsageSamples gcStats)
<> ", cumulativeBytesUsed = "
<> showbInt64Prec 0 (cumulativeBytesUsed gcStats)
<> ", bytesCopied = "
<> showbInt64Prec 0 (bytesCopied gcStats)
<> ", currentBytesUsed = "
<> showbInt64Prec 0 (currentBytesUsed gcStats)
<> ", currentBytesSlop = "
<> showbInt64Prec 0 (currentBytesSlop gcStats)
<> ", maxBytesSlop = "
<> showbInt64Prec 0 (maxBytesSlop gcStats)
<> ", peakMegabytesAllocated = "
<> showbInt64Prec 0 (peakMegabytesAllocated gcStats)
<> ", mutatorCpuSeconds = "
<> showbDoublePrec 0 (mutatorCpuSeconds gcStats)
<> ", mutatorWallSeconds = "
<> showbDoublePrec 0 (mutatorWallSeconds gcStats)
<> ", gcCpuSeconds = "
<> showbDoublePrec 0 (gcCpuSeconds gcStats)
<> ", gcWallSeconds = "
<> showbDoublePrec 0 (gcWallSeconds gcStats)
<> ", cpuSeconds = "
<> showbDoublePrec 0 (cpuSeconds gcStats)
<> ", wallSeconds = "
<> showbDoublePrec 0 (wallSeconds gcStats)
#if MIN_VERSION_base(4,6,0)
<> ", parTotBytesCopied = "
<> showbInt64Prec 0 (parTotBytesCopied gcStats)
#else
<> ", parAvgBytesCopied = "
<> showbInt64Prec 0 (parAvgBytesCopied gcStats)
#endif
<> ", parMaxBytesCopied = "
<> showbInt64Prec 0 (parMaxBytesCopied gcStats)
<> s '}'
instance Show GCStats where
showbPrec = showbGCStatsPrec