Chromium Code Reviews| Index: src/circular-queue-inl.h |
| diff --git a/src/circular-queue-inl.h b/src/circular-queue-inl.h |
| index b48070ab5d24a064e4f8a91a72020e80d8f02954..88257c340a1fc9393d6522b768b34d91ec0a2c94 100644 |
| --- a/src/circular-queue-inl.h |
| +++ b/src/circular-queue-inl.h |
| @@ -33,21 +33,20 @@ |
| namespace v8 { |
| namespace internal { |
| - |
| -void* SamplingCircularQueue::Enqueue() { |
| - if (producer_pos_->enqueue_pos == producer_pos_->next_chunk_pos) { |
| - if (producer_pos_->enqueue_pos == buffer_ + buffer_size_) { |
| - producer_pos_->next_chunk_pos = buffer_; |
| - producer_pos_->enqueue_pos = buffer_; |
| - } |
| - Acquire_Store(producer_pos_->next_chunk_pos, kEnqueueStarted); |
| +void* SamplingCircularQueue::StartEnqueue() { |
| + MemoryBarrier(); |
| + if (Acquire_Load(producer_pos_->enqueue_pos) == kEmpty) { |
| // Skip marker. |
| - producer_pos_->enqueue_pos += 1; |
| - producer_pos_->next_chunk_pos += chunk_size_; |
| + return producer_pos_->enqueue_pos + 1; |
| } |
| - void* result = producer_pos_->enqueue_pos; |
| - producer_pos_->enqueue_pos += record_size_; |
| - return result; |
| + return NULL; |
| +} |
| + |
| + |
| +void SamplingCircularQueue::FinishEnqueue() { |
| + Release_Store(producer_pos_->enqueue_pos, kFull); |
| + producer_pos_->enqueue_pos += entry_size_; |
| + WrapPositionIfNeeded(&producer_pos_->enqueue_pos); |
| } |
|
Benedikt Meurer
2013/08/13 09:31:32
This assumes that there is always only a single pr
|