OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 SafePoint_h | 5 #ifndef SafePoint_h |
6 #define SafePoint_h | 6 #define SafePoint_h |
7 | 7 |
8 #include "platform/heap/ThreadState.h" | 8 #include "platform/heap/ThreadState.h" |
9 #include "wtf/ThreadingPrimitives.h" | 9 #include "wtf/ThreadingPrimitives.h" |
10 | 10 |
11 namespace blink { | 11 namespace blink { |
12 | 12 |
13 class SafePointScope final { | 13 class SafePointScope final { |
14 STACK_ALLOCATED(); | 14 STACK_ALLOCATED(); |
15 WTF_MAKE_NONCOPYABLE(SafePointScope); | 15 WTF_MAKE_NONCOPYABLE(SafePointScope); |
16 | 16 |
17 public: | 17 public: |
18 explicit SafePointScope(BlinkGC::StackState stackState, | 18 explicit SafePointScope(BlinkGC::StackState stackState, |
19 ThreadState* state = ThreadState::current()) | 19 ThreadState* state = ThreadState::current()) |
20 : m_state(state) { | 20 : m_state(state) { |
21 if (m_state) { | 21 if (m_state) { |
22 RELEASE_ASSERT(!m_state->isAtSafePoint()); | 22 CHECK(!m_state->isAtSafePoint()); |
23 m_state->enterSafePoint(stackState, this); | 23 m_state->enterSafePoint(stackState, this); |
24 } | 24 } |
25 } | 25 } |
26 | 26 |
27 ~SafePointScope() { | 27 ~SafePointScope() { |
28 if (m_state) | 28 if (m_state) |
29 m_state->leaveSafePoint(); | 29 m_state->leaveSafePoint(); |
30 } | 30 } |
31 | 31 |
32 private: | 32 private: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 // When leaving the safepoint we might end up release the mutex | 64 // When leaving the safepoint we might end up release the mutex |
65 // if another thread is requesting a GC, see | 65 // if another thread is requesting a GC, see |
66 // SafePointBarrier::checkAndPark. This is the case where we | 66 // SafePointBarrier::checkAndPark. This is the case where we |
67 // loop around to reacquire the lock. | 67 // loop around to reacquire the lock. |
68 state->leaveSafePoint(this); | 68 state->leaveSafePoint(this); |
69 } | 69 } |
70 } while (!m_locked); | 70 } while (!m_locked); |
71 } | 71 } |
72 | 72 |
73 ~SafePointAwareMutexLocker() { | 73 ~SafePointAwareMutexLocker() { |
74 ASSERT(m_locked); | 74 DCHECK(m_locked); |
75 m_mutex.unlock(); | 75 m_mutex.unlock(); |
76 } | 76 } |
77 | 77 |
78 private: | 78 private: |
79 friend class SafePointBarrier; | 79 friend class SafePointBarrier; |
80 | 80 |
81 void reset() { | 81 void reset() { |
82 ASSERT(m_locked); | 82 DCHECK(m_locked); |
83 m_mutex.unlock(); | 83 m_mutex.unlock(); |
84 m_locked = false; | 84 m_locked = false; |
85 } | 85 } |
86 | 86 |
87 MutexBase& m_mutex; | 87 MutexBase& m_mutex; |
88 bool m_locked; | 88 bool m_locked; |
89 }; | 89 }; |
90 | 90 |
91 class SafePointBarrier final { | 91 class SafePointBarrier final { |
92 USING_FAST_MALLOC(SafePointBarrier); | 92 USING_FAST_MALLOC(SafePointBarrier); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 | 153 |
154 Mutex m_mutex; | 154 Mutex m_mutex; |
155 | 155 |
156 ThreadCondition m_parked; | 156 ThreadCondition m_parked; |
157 ThreadCondition m_resume; | 157 ThreadCondition m_resume; |
158 }; | 158 }; |
159 | 159 |
160 } // namespace blink | 160 } // namespace blink |
161 | 161 |
162 #endif | 162 #endif |
OLD | NEW |