183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 2cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// Redistribution and use in source and binary forms, with or without 3cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// modification, are permitted provided that the following conditions are 4cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// met: 5cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// 6cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// * Redistributions of source code must retain the above copyright 7cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// notice, this list of conditions and the following disclaimer. 8cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// * Redistributions in binary form must reproduce the above 9cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// copyright notice, this list of conditions and the following 10cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// disclaimer in the documentation and/or other materials provided 11cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// with the distribution. 12cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// * Neither the name of Google Inc. nor the names of its 13cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// contributors may be used to endorse or promote products derived 14cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// from this software without specific prior written permission. 15cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// 16cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 2883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org#ifndef V8_CIRCULAR_QUEUE_INL_H_ 2983e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org#define V8_CIRCULAR_QUEUE_INL_H_ 30cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 31cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org#include "circular-queue.h" 32cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 33cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.orgnamespace v8 { 34cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.orgnamespace internal { 35cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 36cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 37cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.orgvoid* SamplingCircularQueue::Enqueue() { 38ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org if (producer_pos_->enqueue_pos == producer_pos_->next_chunk_pos) { 39ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org if (producer_pos_->enqueue_pos == buffer_ + buffer_size_) { 40ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org producer_pos_->next_chunk_pos = buffer_; 41ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org producer_pos_->enqueue_pos = buffer_; 42ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org } 43ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org Acquire_Store(producer_pos_->next_chunk_pos, kEnqueueStarted); 44ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org // Skip marker. 45ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org producer_pos_->enqueue_pos += 1; 46ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org producer_pos_->next_chunk_pos += chunk_size_; 47ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org } 485d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org void* result = producer_pos_->enqueue_pos; 495d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org producer_pos_->enqueue_pos += record_size_; 505d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org return result; 51cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org} 52cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 53cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 54cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.orgvoid SamplingCircularQueue::WrapPositionIfNeeded( 55cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org SamplingCircularQueue::Cell** pos) { 56ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org if (*pos == buffer_ + buffer_size_) *pos = buffer_; 57cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org} 58cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 59cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 60cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org} } // namespace v8::internal 61cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 6283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org#endif // V8_CIRCULAR_QUEUE_INL_H_ 63