示例#1
0
            public void OnEvent(ref PerfValueEvent data, long sequence, bool endOfBatch)
            {
                var next = _buffer.Next();

                _buffer[next].Value = data.Value;
                _buffer.Publish(next);
            }
示例#2
0
 public void Dispose()
 {
     if (_ringBuffer != null)
     {
         _ringBuffer.Publish(_startSequence, _endSequence);
     }
 }
示例#3
0
 public void Dispose()
 {
     if (_ringBuffer != null)
     {
         _ringBuffer.Publish(_sequence);
     }
 }
示例#4
0
        public long Run(ThroughputSessionContext sessionContext)
        {
            long expectedCount = _batchEventProcessor.Sequence.Value + _iterations;

            _latch.Reset();
            _eventHandler.Reset(_latch, expectedCount);
            var processorTask = _executor.Execute(_batchEventProcessor.Run);

            _batchEventProcessor.WaitUntilStarted(TimeSpan.FromSeconds(5));

            sessionContext.Start();

            for (long i = 0; i < _iterations; i++)
            {
                long sequence = _ringBuffer.Next();
                _ringBuffer[sequence].Value = i;
                _ringBuffer.Publish(sequence);
            }

            _latch.WaitOne();
            sessionContext.Stop();
            PerfTestUtil.WaitForEventProcessorSequence(expectedCount, _batchEventProcessor);
            _batchEventProcessor.Halt();
            processorTask.Wait(2000);

            sessionContext.SetBatchData(_eventHandler.BatchesProcessedCount.Value, _iterations);

            PerfTestUtil.FailIfNot(_expectedResult, _eventHandler.Value, $"Handler should have processed {_expectedResult} events, but was: {_eventHandler.Value}");

            return(_iterations);
        }
示例#5
0
            public void OnEvent(ref StubValueEvent data, long sequence, bool endOfBatch)
            {
                if (!endOfBatch)
                {
                    _ringBuffer.Publish(_ringBuffer.Next());
                }

                _signal.Signal();
            }
示例#6
0
            private void Send()
            {
                _t0 = Stopwatch.GetTimestamp();
                var next = _buffer.Next();

                _buffer[next].Value = _counter;
                _buffer.Publish(next);

                _counter++;
            }
示例#7
0
    public static void PublishStubEvent(this ValueRingBuffer <StubValueEvent> ringBuffer, int value)
    {
        var sequence = ringBuffer.Next();

        try
        {
            ringBuffer[sequence].Value = value;
        }
        finally
        {
            ringBuffer.Publish(sequence);
        }
    }
示例#8
0
 public void Dispose() => _ringBuffer.Publish(_startSequence, _endSequence);
示例#9
0
 public void Dispose() => _ringBuffer.Publish(_sequence);
 public void ShouldDelegateNextAndPublish()
 {
     _ringBuffer.Publish(_ringBuffer.Next());
 }