public void DensityHintsAreEqualToDensities() { BucketContainer bucketContainer = _fixture.SampleEvents3; var densitiesBySeconds = bucketContainer.GetDensities(bucketContainer.FirstTimestamp, bucketContainer.LastTimestamp, Durations.Second); var densitiesByMinutes = bucketContainer.GetDensities(bucketContainer.FirstTimestamp, bucketContainer.LastTimestamp, Durations.Minute); _densityPrecalculationProcess.Complete(bucketContainer); var hints = bucketContainer.DensityHintContainer; Assert.NotNull(hints); Assert.Equal(densitiesBySeconds.Length, (int)hints.Seconds.Keys.Max()); Assert.Equal(densitiesByMinutes.Length, (int)hints.Minutes.Keys.Max()); foreach (var hint in hints.Seconds) { Assert.True(hint.Key >= 1); Assert.Equal(densitiesBySeconds[hint.Key - 1], hint.Value); } foreach (var hint in hints.Minutes) { Assert.True(hint.Key >= 1); Assert.Equal(densitiesByMinutes[hint.Key - 1], hint.Value); } }
private static void ShowChart(BucketContainer container, long start, long end, ushort chartWidth) { SegmentSize[] preferredSizes = container.GetPreferredSegmentSizes(start, end, chartWidth); if (preferredSizes.Length < 1) { throw new InvalidOperationException(); } long segmentSize = preferredSizes[preferredSizes.Length - 1].RequestedValue; end = start + segmentSize * chartWidth; Console.WriteLine("Here are densities for chart of width equal to {0}px", chartWidth); var densities = container.GetDensities(start, end, segmentSize); foreach (var density in densities) { Console.BackgroundColor = ConsoleColor.Black; Console.Write($"{{0,{7}:0.00}}% ", density * 100); Console.BackgroundColor = ConsoleColor.Gray; var percent = (int)(density * (Console.WindowWidth - 10)); for (var i = 1; i <= percent; i++) { Console.Write(' '); } Console.WriteLine(); } Console.WriteLine(); Console.BackgroundColor = ConsoleColor.Black; }
private static void RunPerfomanceTests(BucketContainer container, long start, long end, long[] segmentSizes) { bool isWarmUp = true; int tries = 0; while (tries < 2) { var stopWatch = new Stopwatch(); foreach (var segmentSize in segmentSizes) { long tStart = start, tEnd = Math.Min(start + segmentSize * 4000, end); stopWatch.Start(); var densities = container.GetDensities(tStart, tEnd, segmentSize); var elapsed = stopWatch.ElapsedMilliseconds; stopWatch.Reset(); if (!isWarmUp) { Console.WriteLine("Segment size {0,10}: {1,4}ms elapsed for the range with length {2}μs: average density = {3}", segmentSize, elapsed, tEnd - tStart, densities.Average()); } } tries++; isWarmUp = false; } }
public IEnumerable <IFigure> GetFiguresToDraw(long offset, long width, SegmentSize segmentSize) { if (ChartHeight <= 0) { return(Enumerable.Empty <IFigure>()); } long firstTimestamp = _container.FirstTimestamp; long start = firstTimestamp + offset; long end = firstTimestamp + offset + width * segmentSize.DisplayedValue; if (segmentSize.RequestedValue > 1) { Span <double> densities = _container.GetDensities(start, end, segmentSize.RequestedValue, ref _targetBuffer); return(GetFiguresFromDensities(_targetBuffer, 0, densities.Length)); } else if (segmentSize.RequestedValue == 1) { var events = _container.GetRealEvents(start, end + 1); return(GetFiguresFromEvents(events, offset, start, end)); } return(Enumerable.Empty <IFigure>()); }