Пример #1
0
        private void AddStartEvent(long ticks)
        {
            var realEvent = new RealEvent(EventType.Start, ticks);

            _queue.Enqueue(realEvent);
            _allEvents.Add(realEvent);
        }
 public RealEventEnumerator(Span <Bucket> buckets, int firstEventIndex, int lastEventIndex)
 {
     _buckets            = buckets;
     _firstEventIndex    = firstEventIndex;
     _lastEventIndex     = lastEventIndex;
     _canMove            = _buckets.Length > 0;
     _currentBucketIndex = 0;
     _currentEventIndex  = _firstEventIndex - 1;
     _currentItem        = default;
 }
Пример #3
0
        private void AddStopEvent(long ticks)
        {
            var realEvent = new RealEvent(EventType.Stop, ticks);

            _queue.Enqueue(realEvent);
            _allEvents.Add(realEvent);
            var count = _queue.Count;

            if (count >= 10)
            {
                _eventsBatchGenerated.Set();
            }
        }
Пример #4
0
        protected void WriteFile(Func <bool> continueWriting, bool append)
        {
            var thread = new Thread(() =>
            {
                using (var fileWriter = new FileWriter(_filename, append))
                {
                    int writtenEvents          = 0;
                    RealEvent lastEventWritten = default;
                    bool continueFlag          = true;
                    while ((continueFlag = continueWriting()) || !_queue.IsEmpty)
                    {
                        // we don't need to wait if there will be no more events
                        if (continueFlag && !_queue.IsEmpty)
                        {
                            _eventsBatchGenerated.WaitOne(3000);
                        }

                        while (_queue.TryDequeue(out RealEvent ev))
                        {
                            // start event should be first event ever
                            if (writtenEvents == 0 && ev.EventType == EventType.Stop)
                            {
                                continue;
                            }

                            if (writtenEvents > 0 && ev.Ticks <= lastEventWritten.Ticks)
                            {
                                throw new InvalidOperationException($"Events are not sorted. Previous event: {lastEventWritten}, current event: {ev}");
                            }

                            if (writtenEvents > 0 && ev.EventType == lastEventWritten.EventType)
                            {
                                throw new InvalidOperationException($"Event types are the same. Previous event: {lastEventWritten}, current event: {ev}");
                            }

                            fileWriter.WriteEvent(
                                ev,
                                new Payload(GetRandomNumber(), GetRandomNumber(), GetRandomNumber(), GetRandomNumber())
                                );
                            writtenEvents++;
                            lastEventWritten = ev;
                        }
                        Console.Write("\rNumber of events written: {0}", writtenEvents);
                    }
                }
            });

            thread.Start();
            thread.Join();
        }
        private BucketContainer CreateBucketContainer(EventPair[] eventPairs, long offset)
        {
            var  buckets           = new List <Bucket>();
            var  builder           = new BucketBuilder();
            long previousEventTime = offset;

            foreach (var pair in eventPairs)
            {
                long startEventTime = pair.IsAbsoluteOffset ? offset + pair.Offset : previousEventTime + pair.Offset;
                var  startEvent     = new RealEvent(EventType.Start, startEventTime);
                var  stopEvent      = new RealEvent(EventType.Stop, startEventTime + pair.Duration * pair.DurationTimeUnit.GetTimeUnitDuration());


                if (!builder.IsFitIntoCurrentBucket(startEvent.Ticks))
                {
                    if (builder.HasEvents)
                    {
                        buckets.Add(builder.Build(false));
                    }

                    builder.StartNewBucket(startEvent.Ticks);
                }

                builder.AddEvent(startEvent);

                if (!builder.IsFitIntoCurrentBucket(stopEvent.Ticks))
                {
                    buckets.Add(builder.Build(false));
                    builder.StartNewBucket(stopEvent.Ticks);
                }

                builder.AddEvent(stopEvent);
                previousEventTime = stopEvent.Ticks;
            }

            var bucket = builder.Build(false);

            if (bucket != null)
            {
                buckets.Add(bucket);
            }

            return(new BucketContainer(buckets.ToArray(), 0));
        }
Пример #6
0
        private bool GetEventsCount(out uint eventsCount, out long totalStreamLength)
        {
            try
            {
                totalStreamLength = _reader.BaseStream.Length;
                RealEvent ev      = new RealEvent();
                Payload   payload = new Payload();
                eventsCount = (uint)(totalStreamLength /
                                     (Marshal.SizeOf(ev) + Marshal.SizeOf(payload)));

                return(true);
            }
            catch (NotSupportedException)
            {
                eventsCount       = default;
                totalStreamLength = default;
                return(false);
            }
        }
        public bool MoveNext()
        {
            if (!_canMove)
            {
                return(false);
            }

            var result = EnumerationHelper.MoveNext(_buckets, ref _currentBucketIndex, ref _currentEventIndex, _lastEventIndex);

            if (result)
            {
                var bucket = _buckets[_currentBucketIndex];
                var ev     = bucket.Events[_currentEventIndex];
                _currentItem = new RealEvent(
                    ev.EventType,
                    bucket.GetAbsoluteTimeForEvent(ev)
                    );
            }

            return(result);
        }