private static MetricTimeSpan TicksToMetricTimeSpan(long timeSpan, TempoMap tempoMap) { if (timeSpan == 0) { return(new MetricTimeSpan()); } var valuesCache = tempoMap.GetValuesCache <MetricTempoMapValuesCache>(); var accumulatedMicroseconds = valuesCache.Microseconds.TakeWhile(m => m.Time < timeSpan).LastOrDefault(); var lastAccumulatedMicroseconds = accumulatedMicroseconds?.Microseconds ?? 0; var lastTime = accumulatedMicroseconds?.Time ?? 0; var lastMicrosecondsPerTick = accumulatedMicroseconds?.MicrosecondsPerTick ?? valuesCache.DefaultMicrosecondsPerTick; return(new MetricTimeSpan(RoundMicroseconds(lastAccumulatedMicroseconds + GetMicroseconds(timeSpan - lastTime, lastMicrosecondsPerTick)))); }
private static long MetricTimeSpanToTicks(MetricTimeSpan timeSpan, TempoMap tempoMap) { var timeMicroseconds = timeSpan.TotalMicroseconds; if (timeMicroseconds == 0) { return(0); } var valuesCache = tempoMap.GetValuesCache <MetricTempoMapValuesCache>(); var accumulatedMicroseconds = valuesCache.Microseconds.TakeWhile(m => m.Microseconds < timeMicroseconds).LastOrDefault(); var lastAccumulatedMicroseconds = accumulatedMicroseconds?.Microseconds ?? 0; var lastTime = accumulatedMicroseconds?.Time ?? 0; var lastTicksPerMicrosecond = accumulatedMicroseconds?.TicksPerMicrosecond ?? valuesCache.DefaultTicksPerMicrosecond; return(RoundMicroseconds(lastTime + (timeMicroseconds - lastAccumulatedMicroseconds) * lastTicksPerMicrosecond)); }