{-# LANGUAGE NamedFieldPuns, RecordWildCards #-} module Graphics.BarChart.Parser.Criterion where import Text.CSV import System.FilePath import Graphics.BarChart.Types import Graphics.BarChart.Parser import Graphics.BarChart.Rendering -- | Used by 'writeCriterionChart' to generate a bar chart from -- criterion's summary file. -- criterionChart :: CSV -> BarChart RunTime criterionChart (_:csv) = intervalChart $ map (take 4) csv -- | Used by 'writeComparisonChart' to generate a bar chart from -- multiple summary files generated by criterion. -- comparisonChart :: Bool -> [(Label,CSV)] -> BarChart RunTime comparisonChart flip = drawMultiBarIntervals . (if flip then flipMultiBarIntervals else id) . mergeIntervals . map (\ (label,_:csv) -> (label, parseIntervals $ map (take 4) csv)) -- | Reads a summary file generated by criterion and writes a -- corresponding bar chart. -- writeCriterionChart :: Config -> FilePath -> IO () writeCriterionChart config file = renderWith config . criterionChart =<< readCSV file -- | Reads multiple summary files generated by criterion and creates a -- bar chart to compare them. If the first argument is 'True' the -- chart is flipped such that the bars represent different -- benchmarks rather than summaries. -- writeComparisonChart :: Bool -> Config -> [FilePath] -> IO () writeComparisonChart flip config@Config{..} files = do csvs <- mapM readCSV files renderWith config . comparisonChart flip $ zip (map dropExtension files) csvs