{-# LANGUAGE FlexibleContexts #-} module Main where import Data.Char (isSpace) import BenchGraph (bgraph, defaultConfig, Config(..), ComparisonStyle(..)) import WithCli (withCli) import Data.List ------------------------------------------------------------------------------- benchmarks :: [String] benchmarks = [ "streamly/async" , "streamly/ahead" , "streamly/parallel" , "async/mapConcurrently_" ] createCharts :: String -> IO () createCharts input = do let cfg title = defaultConfig { chartTitle = Just title , outputDir = "charts" , comparisonStyle = CompareFull , classifyBenchmark = \bm -> case bm `elem` benchmarks of True -> Just ("Operations", bm) False -> Nothing , sortBenchmarks = \bs -> let i = intersect benchmarks bs in i ++ (bs \\ i) } -- links in README.rst eat up the space so we match the same let toOutfile title field = (filter (not . isSpace) (takeWhile (/= '(') title)) ++ "-" ++ field makeOneGraph infile field title = do let title' = title ++ " (" ++ field ++ ")" ++ " (Lower is Better)" bgraph infile (toOutfile title field) field (cfg title') putStrLn "Creating time charts..." makeOneGraph input "time" "Concurrency overhead (100,000 threads)" putStrLn "\nCreating allocation charts..." makeOneGraph input "allocated" "Concurrency overhead (100,000 threads)" putStrLn "\nCreating maxrss charts..." makeOneGraph input "maxrss" "Concurrency overhead (100,000 threads)" -- Pass main :: IO () main = withCli createCharts