private static void RunLoop(RunConfig runConfig)
{
var runners = runConfig.GetRunners();
object preRunState = null;
object preLoopState = null;
if (runConfig.PreRuns != null) preRunState = runConfig.PreRuns();
Action<ILocator, int, object, object> run = runConfig.Run;
Func<ILocator, int, object, object> preLoopRun = runConfig.PreLoops;
Action<ILocator, object, object> postLoopRun = runConfig.PostLoops;
for (var l=0; l < RUNS; l++) {
p().BeginGroup((l+1).ToString());
foreach (var r in runners) {
if (preLoopRun != null) preLoopState = preLoopRun(r, l, preRunState);
var k = new PerfCounter(r.Name); k.Begin();
for (var i = 0; i < LOOPS; i++) {
run(r, i, preRunState, preLoopState);
}
k.End(); p().Collect(k);
if (postLoopRun != null) postLoopRun(r, preRunState, preLoopState);
}
p().EndGroup();
}
p().Flush();
if (runConfig.PostRuns != null) runConfig.PostRuns(preRunState);
}