on master help sign in
Add the ability to select fields to report
commit09f2fa7cb436f304ec3a335232ac1f4dfc9647e5 authorHarendra Kumar <harendra@composewell.com> dateThu 9 Jul 2020, 17:33 (6 years ago) parent37bcdcd
2 files changed+49−26
bench.sh+19−6 benchmark/Chart.hs+30−20
bench.sh+19−6
@@ -125,6 +125,7 @@ list_comparisons () {
125125print_help () {
126126 echo "Usage: $0 "
127127 echo " [--benchmarks <"bench1 bench2 ..." | help>]"
128+ echo " [--fields <"field1 field2 ..." | help>]"
128129 echo " [--graphs]"
129130 echo " [--no-measure]"
130131 echo " [--append]"
@@ -136,6 +137,7 @@ print_help () {
136137 echo " -- <gauge options or benchmarks>"
137138 echo
138139 echo "--benchmarks: benchmarks to run, use 'help' for list of benchmarks"
140+ echo "--fields: measurement fields to report, use 'help' for a list"
139141 echo "--graphs: Generate graphical reports"
140142 echo "--no-measure: Don't run benchmarks, run reports from previous results"
141143 echo "--append: Don't overwrite previous results, append for comparison"
@@ -394,7 +396,7 @@ run_reports() {
394396 do
395397 echo "Generating reports for ${i}..."
396398 $prog $(test "$GRAPH" = 1 && echo "--graphs") \
397− --benchmark $i
399+ --benchmark $i --fields "$FIELDS"
398400 done
399401}
400402
@@ -403,6 +405,9 @@ run_reports() {
403405#-----------------------------------------------------------------------------
404406
405407DEFAULT_BENCHMARKS="$all_grp"
408+DEFAULT_FIELDS="allocated bytescopied cputime"
409+ALL_FIELDS="$FIELDS time cycles utime stime minflt majflt nvcsw nivcsw"
410+FIELDS=$DEFAULT_FIELDS
406411
407412COMPARE=0
408413BASE=
@@ -438,6 +443,7 @@ do
438443 -h|--help|help) print_help ;;
439444 # options with arguments
440445 --benchmarks) shift; BENCHMARKS=$1; shift ;;
446+ --fields) shift; FIELDS=$1; shift ;;
441447 --base) shift; BASE=$1; shift ;;
442448 --candidate) shift; CANDIDATE=$1; shift ;;
443449 --cabal-build-flags) shift; CABAL_BUILD_FLAGS=$1; shift ;;
@@ -476,10 +482,10 @@ only_real_benchmarks () {
476482 done
477483}
478484
479−has_benchmark () {
480− for i in $BENCHMARKS_ORIG
485+has_item () {
486+ for i in $1
481487 do
482− if test "$i" = "$1"
488+ if test "$i" = "$2"
483489 then
484490 echo "$i"
485491 break
@@ -488,7 +494,7 @@ has_benchmark () {
488494}
489495
490496BENCHMARKS_ORIG=$BENCHMARKS
491−if test "$(has_benchmark help)" = "help"
497+if test "$(has_item "$BENCHMARKS_ORIG" help)" = "help"
492498then
493499 list_bench_groups
494500 list_comparisons
@@ -496,6 +502,13 @@ then
496502 exit
497503fi
498504
505+if test "$(has_item "$FIELDS" help)" = "help"
506+then
507+ echo "Supported fields: $ALL_FIELDS"
508+ echo "Default fields: $DEFAULT_FIELDS"
509+ exit
510+fi
511+
499512if test "$LONG" -ne 0
500513then
501514 if test -n "$BENCHMARKS"
@@ -559,7 +572,7 @@ fi
559572COMPARISON_REPORTS=""
560573for i in $COMPARISONS
561574do
562− if test "$(has_benchmark $i)" = $i
575+ if test "$(has_item "$BENCHMARKS_ORIG" $i)" = $i
563576 then
564577 COMPARISON_REPORTS="$COMPARISON_REPORTS $i"
565578 mkdir -p "charts/$i"
benchmark/Chart.hs+30−20
@@ -26,10 +26,11 @@ data BenchType
2626data Options = Options
2727 { genGraphs :: Bool
2828 , benchType :: Maybe BenchType
29+ , fields :: [String]
2930 } deriving Show
3031
3132defaultOptions :: Options
32−defaultOptions = Options False Nothing
33+defaultOptions = Options False Nothing ["time"]
3334
3435setGenGraphs :: Monad m => Bool -> StateT (a, Options) m ()
3536setGenGraphs val = do
@@ -41,6 +42,11 @@ setBenchType val = do
4142 (args, opts) <- get
4243 put (args, opts { benchType = Just val })
4344
45+setFields :: Monad m => [String] -> StateT (a, Options) m ()
46+setFields val = do
47+ (args, opts) <- get
48+ put (args, opts { fields = val })
49+
4450-- Like the shell "shift" to shift the command line arguments
4551shift :: StateT ([String], Options) (MaybeT IO) (Maybe String)
4652shift = do
@@ -59,6 +65,16 @@ parseBench = do
5965 liftIO $ putStrLn "please provide a benchmark type "
6066 mzero
6167
68+parseFields :: StateT ([String], Options) (MaybeT IO) ()
69+parseFields = do
70+ x <- shift
71+ case x of
72+ Just str -> setFields (words str)
73+ Nothing -> do
74+ liftIO $ putStrLn
75+ "please provide a list of fields after --fields"
76+ mzero
77+
6278-- totally imperative style option parsing
6379parseOptions :: IO (Maybe Options)
6480parseOptions = do
@@ -71,8 +87,9 @@ parseOptions = do
7187
7288 parseOpt opt =
7389 case opt of
74− "--graphs" -> setGenGraphs True
75− "--benchmark" -> parseBench
90+ "--graphs" -> setGenGraphs True
91+ "--benchmark" -> parseBench
92+ "--fields" -> parseFields
7693 str -> do
7794 liftIO $ putStrLn $ "Unrecognized option " <> str
7895 mzero
@@ -147,28 +164,21 @@ benchShow Options{..} cfg func inp out =
147164
148165main :: IO ()
149166main = do
150− let cfg = defaultConfig
151− { presentation = Groups PercentDiff
152− , selectBenchmarks = selectBench
153− , selectFields = filter
154− ( flip elem [ "time"
155− , "mean"
156− , "cputime"
157− , "allocated"
158− , "bytescopied"
159− , "maxrss"
160− ]
161− . fmap toLower
162− )
163− }
164167 res <- parseOptions
165−
166168 case res of
167169 Nothing -> do
168170 putStrLn "cannot parse options"
169171 return ()
170− Just opts@Options{..} ->
171− case benchType of
172+ Just opts@Options{fields = fs, benchType = btype} ->
173+ let cfg = defaultConfig
174+ { presentation = Groups PercentDiff
175+ , selectBenchmarks = selectBench
176+ , selectFields = filter
177+ ( flip elem fs
178+ . fmap toLower
179+ )
180+ }
181+ in case btype of
172182 Just (Compare str) ->
173183 showComparisons opts cfg
174184 { title = Just str }