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); }