Safe Haskell | None |
---|---|
Language | Haskell2010 |
Weigh
Description
Framework for seeing how much a function allocates.
WARNING: weigh is incompatible with profiling. It reports much more allocations with profiling turned on.
Example:
import Weigh main = mainWith (do func "integers count 0" count 0 func "integers count 1" count 1 func "integers count 2" count 2 func "integers count 3" count 3 func "integers count 10" count 10 func "integers count 100" count 100) where count :: Integer -> () count 0 = () count a = count (a - 1)
Use wgroup
to group sets of tests.
Synopsis
- mainWith :: Weigh a -> IO ()
- weighResults :: Weigh a -> IO ([Grouped (Weight, Maybe String)], Config)
- setColumns :: [Column] -> Weigh ()
- data Column
- setFormat :: Format -> Weigh ()
- data Format
- setConfig :: Config -> Weigh ()
- data Config = Config {
- configColumns :: [Column]
- configPrefix :: String
- configFormat :: !Format
- defaultConfig :: Config
- func :: NFData a => String -> (b -> a) -> b -> Weigh ()
- func' :: (NFData a, NFData b) => String -> (b -> a) -> b -> Weigh ()
- io :: NFData a => String -> (b -> IO a) -> b -> Weigh ()
- value :: NFData a => String -> a -> Weigh ()
- action :: NFData a => String -> IO a -> Weigh ()
- wgroup :: String -> Weigh () -> Weigh ()
- validateAction :: NFData a => String -> (b -> IO a) -> b -> (Weight -> Maybe String) -> Weigh ()
- validateFunc :: NFData a => String -> (b -> a) -> b -> (Weight -> Maybe String) -> Weigh ()
- maxAllocs :: Word64 -> Weight -> Maybe String
- data Weigh a
- data Weight = Weight {
- weightLabel :: !String
- weightAllocatedBytes :: !Word64
- weightGCs :: !Word32
- weightLiveBytes :: !Word64
- weightMaxBytes :: !Word64
- weightMaxOSBytes :: !Word64
- commas :: (Num a, Integral a, Show a) => a -> String
- reportGroup :: Config -> [Char] -> [Grouped (Weight, Maybe String)] -> [Char]
- weighDispatch :: Maybe String -> [Grouped Action] -> IO (Maybe [Grouped Weight])
- weighFunc :: NFData a => (b -> a) -> b -> IO (Word64, Word32, Word64, Word64, Word64)
- weighFuncResult :: NFData a => (b -> a) -> b -> IO (a, (Word64, Word32, Word64, Word64, Word64))
- weighAction :: NFData a => (b -> IO a) -> b -> IO (Word64, Word32, Word64, Word64, Word64)
- weighActionResult :: NFData a => (b -> IO a) -> b -> IO (a, (Word64, Word32, Word64, Word64, Word64))
- data Grouped a
Main entry points
mainWith :: Weigh a -> IO () Source #
Just run the measuring and print a report. Uses weighResults
.
weighResults :: Weigh a -> IO ([Grouped (Weight, Maybe String)], Config) Source #
Run the measuring and return all the results, each one may have an error.
Configuration
setColumns :: [Column] -> Weigh () Source #
Set the columns to display in the config
Table column.
Constructors
Case | Case name for the column |
Allocated | Total bytes allocated |
GCs | Total number of GCs |
Live | Total amount of live data in the heap |
Check | Table column indicating about the test status |
Max | Maximum residency memory in use |
MaxOS | Maximum memory in use by the RTS. Valid only for GHC >= 8.2.2. For unsupported GHC, this is reported as 0. |
Weigh configuration.
Constructors
Config | |
Fields
|
defaultConfig :: Config Source #
Default config.
Simple combinators
Arguments
:: NFData a | |
=> String | Name of the case. |
-> (b -> a) | Function that does some action to measure. |
-> b | Argument to that function. |
-> Weigh () |
Weigh a function applied to an argument.
Implemented in terms of validateFunc
.
func' :: (NFData a, NFData b) => String -> (b -> a) -> b -> Weigh () Source #
Weigh a function applied to an argument. Unlike func
, the argument
is evaluated to normal form before the function is applied.
Arguments
:: NFData a | |
=> String | Name of the case. |
-> (b -> IO a) | Aciton that does some IO to measure. |
-> b | Argument to that function. |
-> Weigh () |
Weigh an action applied to an argument.
Implemented in terms of validateAction
.
Arguments
:: NFData a | |
=> String | Name for the value. |
-> a | The value to measure. |
-> Weigh () |
Weigh a value.
Implemented in terms of action
.
Arguments
:: NFData a | |
=> String | Name for the value. |
-> IO a | The action to measure. |
-> Weigh () |
Weigh an IO action.
Implemented in terms of validateAction
.
Validating combinators
Arguments
:: NFData a | |
=> String | Name of the action. |
-> (b -> IO a) | The function which performs some IO. |
-> b | Argument to the function. Doesn't have to be forced. |
-> (Weight -> Maybe String) | A validating function, returns maybe an error. |
-> Weigh () |
Weigh an IO action, validating the result.
Arguments
:: NFData a | |
=> String | Name of the function. |
-> (b -> a) | The function which calculates something. |
-> b | Argument to the function. Doesn't have to be forced. |
-> (Weight -> Maybe String) | A validating function, returns maybe an error. |
-> Weigh () |
Weigh a function, validating the result
Validators
Arguments
:: Word64 | The upper bound. |
-> Weight -> Maybe String |
Make a validator that set sthe maximum allocations.
Types
Weigh specification monad.
How much a computation weighed in at.
Constructors
Weight | |
Fields
|
Instances
Handy utilities
commas :: (Num a, Integral a, Show a) => a -> String Source #
Formatting an integral number to 1,000,000, etc.
Internals
Arguments
:: Maybe String | The content of then env variable WEIGH_CASE. |
-> [Grouped Action] | Weigh name:action mapping. |
-> IO (Maybe [Grouped Weight]) |
Weigh a set of actions. The value of the actions are forced completely to ensure they are fully allocated.
Arguments
:: NFData a | |
=> (b -> a) | A function whose memory use we want to measure. |
-> b | Argument to the function. Doesn't have to be forced. |
-> IO (Word64, Word32, Word64, Word64, Word64) | Bytes allocated and garbage collections. |
Weigh a pure function. This function is built on top of weighFuncResult
,
which is heavily documented inside
Arguments
:: NFData a | |
=> (b -> a) | A function whose memory use we want to measure. |
-> b | Argument to the function. Doesn't have to be forced. |
-> IO (a, (Word64, Word32, Word64, Word64, Word64)) | Result, Bytes allocated, GCs. |
Weigh a pure function and return the result. This function is heavily documented inside.
Arguments
:: NFData a | |
=> (b -> IO a) | A function whose memory use we want to measure. |
-> b | Argument to the function. Doesn't have to be forced. |
-> IO (Word64, Word32, Word64, Word64, Word64) | Bytes allocated and garbage collections. |
Weigh an IO action. This function is based on weighActionResult
, which is
heavily documented inside.
Arguments
:: NFData a | |
=> (b -> IO a) | A function whose memory use we want to measure. |
-> b | Argument to the function. Doesn't have to be forced. |
-> IO (a, (Word64, Word32, Word64, Word64, Word64)) | Result, Bytes allocated and GCs. |
Weigh an IO action, and return the result. This function is heavily documented inside.
Some grouped thing.
Instances
Functor Grouped Source # | |
Foldable Grouped Source # | |
Defined in Weigh Methods fold :: Monoid m => Grouped m -> m foldMap :: Monoid m => (a -> m) -> Grouped a -> m foldMap' :: Monoid m => (a -> m) -> Grouped a -> m foldr :: (a -> b -> b) -> b -> Grouped a -> b foldr' :: (a -> b -> b) -> b -> Grouped a -> b foldl :: (b -> a -> b) -> b -> Grouped a -> b foldl' :: (b -> a -> b) -> b -> Grouped a -> b foldr1 :: (a -> a -> a) -> Grouped a -> a foldl1 :: (a -> a -> a) -> Grouped a -> a elem :: Eq a => a -> Grouped a -> Bool maximum :: Ord a => Grouped a -> a minimum :: Ord a => Grouped a -> a | |
Traversable Grouped Source # | |
Eq a => Eq (Grouped a) Source # | |
Show a => Show (Grouped a) Source # | |
Generic (Grouped a) Source # | |
NFData a => NFData (Grouped a) Source # | |
type Rep (Grouped a) Source # | |
Defined in Weigh type Rep (Grouped a) = D1 ('MetaData "Grouped" "Weigh" "weigh-0.0.16-9W8kh4ttmtxAY9is5xXmmM" 'False) (C1 ('MetaCons "Grouped" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Grouped a])) :+: C1 ('MetaCons "Singleton" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) |