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

Side by Side Diff: Source/wtf/DoubleBufferedDeque.h

Issue 595023002: Implement idle task scheduling. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef DoubleBufferedDeque_h 5 #ifndef DoubleBufferedDeque_h
6 #define DoubleBufferedDeque_h 6 #define DoubleBufferedDeque_h
7 7
8 #include "wtf/Deque.h" 8 #include "wtf/Deque.h"
9 #include "wtf/Noncopyable.h" 9 #include "wtf/Noncopyable.h"
10 10
11 namespace WTF { 11 namespace WTF {
12 12
13 // A helper class for managing double buffered deques, typically where the clien t locks when appending or swapping. 13 // A helper class for managing double buffered deques, typically where the clien t locks when appending or swapping.
14 template <typename T> class DoubleBufferedDeque { 14 template <typename T> class DoubleBufferedDeque {
15 WTF_MAKE_NONCOPYABLE(DoubleBufferedDeque); 15 WTF_MAKE_NONCOPYABLE(DoubleBufferedDeque);
16 public: 16 public:
17 typedef typename PassTraits<T>::PassType PassType;
17 DoubleBufferedDeque() 18 DoubleBufferedDeque()
18 : m_activeIndex(0) { } 19 : m_activeIndex(0) { }
19 20
20 void append(const T& value) 21 void append(const PassType& value)
Sami 2014/09/24 14:00:40 Is this an optimization to avoid copies or somethi
rmcilroy 2014/09/29 17:42:58 This is required to be able to create a DoubleBuff
21 { 22 {
22 m_queue[m_activeIndex].append(value); 23 m_queue[m_activeIndex].append(value);
23 } 24 }
24 25
picksi1 2014/09/25 08:53:31 FWIW during my refactor I stopped using the Double
rmcilroy 2014/09/29 17:42:58 I would much prefer to fix this DoubleBufferedDequ
picksi1 2014/09/30 09:13:51 My changes felt against the spirit of the DoubleBu
rmcilroy 2014/09/30 09:56:19 Makes sense. You should never be scared of causing
25 bool isEmpty() const 26 bool isEmpty() const
26 { 27 {
27 return m_queue[m_activeIndex].isEmpty(); 28 return m_queue[m_activeIndex].isEmpty();
28 } 29 }
29 30
30 Deque<T>& swapBuffers() 31 Deque<T>& swapBuffers()
31 { 32 {
32 int oldIndex = m_activeIndex; 33 int oldIndex = m_activeIndex;
33 m_activeIndex ^= 1; 34 m_activeIndex ^= 1;
34 ASSERT(m_queue[m_activeIndex].isEmpty()); 35 ASSERT(m_queue[m_activeIndex].isEmpty());
35 return m_queue[oldIndex]; 36 return m_queue[oldIndex];
36 } 37 }
37 38
38 private: 39 private:
39 Deque<T> m_queue[2]; 40 Deque<T> m_queue[2];
40 int m_activeIndex; 41 int m_activeIndex;
41 }; 42 };
42 43
43 } // namespace WTF 44 } // namespace WTF
44 45
45 using WTF::DoubleBufferedDeque; 46 using WTF::DoubleBufferedDeque;
46 47
47 #endif // DoubleBufferedDeque_h 48 #endif // DoubleBufferedDeque_h
OLDNEW
« Source/platform/scheduler/TracedTask.cpp ('K') | « Source/platform/scheduler/TracedTask.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698