private Action TestToAction(IPerformanceTest test, Barrier barrier, IPerformanceTestRunnerListener listener) { return(() => { if (!barrier.SignalAndWait(BarrierWaitTimeout)) { throw new TestFirstException("Timed out waiting for 'Invoke' barrier"); } var testListener = new TestListenerAdapter(listener, new PerformanceSuite.PerfTestContext { AgentId = "0", MachineId = Environment.MachineName }); test.InvokeTest(testListener); if (!barrier.SignalAndWait(BarrierWaitTimeout)) { throw new TestFirstException("Timed out waiting for 'AfterInvokeInTestThread' barrier"); } }); }
public void Start(PerformanceSuite.PerfTestContext ctxt, IPerformanceTestRunnerListener runListener) { m_endAt = DateTime.Now.Add(m_runFor); m_threads.Clear(); m_threads = new List <ActionCompleteThread>(); for (var i = 01; i < m_numThreads; i++) { var threadListener = new TestListenerAdapter(runListener, ctxt); var threadAction = NewInvokeTestAction(threadListener); m_threads.Add(new ActionCompleteThread(threadAction.Invoke).Where(t => t.Priority = m_threadPriority)); } m_threads.ForEach(t => t.Start()); //wait for runners to complete while (DateTime.Now < m_endAt && m_threads.Any(t => !t.Completed)) { Thread.Sleep(1000); } m_threads.ForEach(t => t.Abort()); }