@@ -14,24 +14,22 @@ import scala.annotation.internal.sharable
14
14
object Bench extends Driver :
15
15
16
16
@ sharable private var numRuns = 1
17
-
18
- private def ntimes (n : Int )(op : => Reporter ): Reporter =
19
- (0 until n).foldLeft(emptyReporter)((_, _) => op)
20
-
17
+ @ sharable private var numCompilers = 1
18
+ @ sharable private var waitAfter = - 1
19
+ @ sharable private var curCompiler = 0
21
20
@ sharable private var times : Array [Int ] = _
22
21
23
22
override def doCompile (compiler : Compiler , files : List [AbstractFile ])(using Context ): Reporter =
24
- times = new Array [Int ](numRuns)
25
23
var reporter : Reporter = emptyReporter
26
24
for i <- 0 until numRuns do
25
+ val curRun = curCompiler * numRuns + i
27
26
val start = System .nanoTime()
28
27
reporter = super .doCompile(compiler, files)
29
- times(i ) = ((System .nanoTime - start) / 1000000 ).toInt
30
- println(s " time elapsed: ${times(i )}ms " )
31
- if ctx.settings.Xprompt .value then
28
+ times(curRun ) = ((System .nanoTime - start) / 1000000 ).toInt
29
+ println(s " time elapsed: ${times(curRun )}ms " )
30
+ if ctx.settings.Xprompt .value || waitAfter == curRun + 1 then
32
31
print(" hit <return> to continue >" )
33
32
System .in.nn.read()
34
- println()
35
33
reporter
36
34
37
35
def extractNumArg (args : Array [String ], name : String , default : Int = 1 ): (Int , Array [String ]) = {
@@ -42,20 +40,26 @@ object Bench extends Driver:
42
40
43
41
def reportTimes () =
44
42
val best = times.sorted
45
- val measured = numRuns / 3
43
+ val measured = numCompilers * numRuns / 3
46
44
val avgBest = best.take(measured).sum / measured
47
45
val avgLast = times.reverse.take(measured).sum / measured
48
- println(s " best out of $numRuns runs: ${best(0 )}" )
46
+ println(s " best out of ${numCompilers * numRuns} runs: ${best(0 )}" )
49
47
println(s " average out of best $measured: $avgBest" )
50
48
println(s " average out of last $measured: $avgLast" )
51
49
52
- override def process (args : Array [String ], rootCtx : Context ): Reporter =
50
+ override def process (args : Array [String ]): Reporter =
53
51
val (numCompilers, args1) = extractNumArg(args, " #compilers" )
54
52
val (numRuns, args2) = extractNumArg(args1, " #runs" )
53
+ val (waitAfter, args3) = extractNumArg(args2, " #wait-after" , - 1 )
54
+ this .numCompilers = numCompilers
55
55
this .numRuns = numRuns
56
+ this .waitAfter = waitAfter
57
+ this .times = new Array [Int ](numCompilers * numRuns)
56
58
var reporter : Reporter = emptyReporter
57
- for i <- 0 until numCompilers do
58
- reporter = super .process(args2, rootCtx)
59
+ curCompiler = 0
60
+ while curCompiler < numCompilers do
61
+ reporter = super .process(args3)
62
+ curCompiler += 1
59
63
reportTimes()
60
64
reporter
61
65
0 commit comments