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;
        }
Esempio n. 3
0
        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>());
        }