private void MicroThreadCallbackEnd(object sender, SchedulerThreadEventArgs e) { long endTime = GetTicksFromStopwatch(); int intervalCount; lock (threadExecutionIntervals) { List<TimeInterval> intervals = threadExecutionIntervals[e.ThreadId]; intervals.Last().End(endTime); intervalCount = intervals.Count; } long jobId = GetMicrothreadJobIdFromThreadInfo(e.ThreadId, intervalCount); var jobInfo = new MicrothreadNotification(e.ThreadId, e.MicroThread.Id, jobId, endTime, MicrothreadNotification.NotificationType.JobEnded); lock (microthreadNotifications) { microthreadNotifications.Add(jobInfo); } }
private void MicroThreadEnded(object sender, SchedulerThreadEventArgs e) { lock (buildStepResultsToSend) { buildStepResultsToSend.Add(e.MicroThread.Id); } }
private void MicroThreadCallbackStart(object sender, SchedulerThreadEventArgs e) { TimeInterval timeInterval; int intervalCount; lock (threadExecutionIntervals) { List<TimeInterval> intervals = threadExecutionIntervals[e.ThreadId]; if (intervals.Count > 0 && !intervals.Last().HasEnded) throw new InvalidOperationException("Starting a new microthread on a thread still running another microthread."); timeInterval = new TimeInterval(GetTicksFromStopwatch()); intervals.Add(timeInterval); intervalCount = intervals.Count; } // Rely on intervals.Count, so must be called after intervals.Add! long jobId = GetMicrothreadJobIdFromThreadInfo(e.ThreadId, intervalCount); var jobInfo = new MicrothreadNotification(e.ThreadId, e.MicroThread.Id, jobId, timeInterval.StartTime, MicrothreadNotification.NotificationType.JobStarted); lock (microthreadNotifications) { microthreadNotifications.Add(jobInfo); } }
private void MicroThreadStarted(object sender, SchedulerThreadEventArgs e) { // Not useful anymore? Let's do nothing for the moment }