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

Side by Side Diff: src/base/ring-buffer.h

Issue 2413243002: Introduce a CompilerDispatcherTracer and track how long jobs take (Closed)
Patch Set: Created 4 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef V8_BASE_RING_BUFFER_H_
6 #define V8_BASE_RING_BUFFER_H_
7
8 #include "src/base/macros.h"
9
10 namespace v8 {
11 namespace base {
12
13 template <typename T>
14 class RingBuffer {
15 public:
16 RingBuffer() { Reset(); }
17 static const int kSize = 10;
18 void Push(const T& value) {
19 if (count_ == kSize) {
20 elements_[start_++] = value;
21 if (start_ == kSize) start_ = 0;
22 } else {
23 DCHECK_EQ(start_, 0);
24 elements_[count_++] = value;
25 }
26 }
27
28 int Count() const { return count_; }
29
30 template <typename Callback>
31 T Sum(Callback callback, const T& initial) const {
32 int j = start_ + count_ - 1;
33 if (j >= kSize) j -= kSize;
34 T result = initial;
35 for (int i = 0; i < count_; i++) {
36 result = callback(result, elements_[j]);
37 if (--j == -1) j += kSize;
38 }
39 return result;
40 }
41
42 void Reset() { start_ = count_ = 0; }
43
44 private:
45 T elements_[kSize];
46 int start_;
47 int count_;
48 DISALLOW_COPY_AND_ASSIGN(RingBuffer);
49 };
50
51 } // namespace base
52 } // namespace v8
53
54 #endif // V8_BASE_RING_BUFFER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698