using System; namespace OpenTap { class TimeSpanAverager { int averageCnt = 0; long[] weights = new long[10]; int averageIndex = 0; public void PushTimeSpan(TimeSpan ts) { var indexOfValue = averageIndex = (averageIndex + 1) % weights.Length; weights[indexOfValue] = ts.Ticks; averageCnt = Math.Min(weights.Length, averageCnt + 1); } static TimeSpan defaultSpan = TimeSpan.FromSeconds(0.1); public TimeSpan GetAverage() { if (averageCnt == 0) return defaultSpan; long sum = 0; for(int i = 0; i < averageCnt; i++) { sum += weights[i]; } var avg = TimeSpan.FromTicks(sum / averageCnt); return avg; } } }