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