Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(659)

Unified Diff: src/circular-queue-inl.h

Issue 22849002: Rewrite SamplingCircularQueue (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Don't create extra copy of event Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698