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

Side by Side Diff: ppapi/utility/completion_callback_factory_thread_traits.h

Issue 1885933002: Ensure that DLOG(FATAL) also asserts in release-with-asserts builds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add comment with installer fix Created 4 years, 8 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
« no previous file with comments | « net/spdy/hpack/hpack_huffman_decoder.cc ('k') | third_party/zlib/google/zip_reader.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 PPAPI_UTILITY_THREAD_SAFE_THREAD_TRAITS_H_ 5 #ifndef PPAPI_UTILITY_THREAD_SAFE_THREAD_TRAITS_H_
6 #define PPAPI_UTILITY_THREAD_SAFE_THREAD_TRAITS_H_ 6 #define PPAPI_UTILITY_THREAD_SAFE_THREAD_TRAITS_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "ppapi/cpp/logging.h" 10 #include "ppapi/cpp/logging.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 public: 78 public:
79 /// A simple reference counter that is not thread-safe. 79 /// A simple reference counter that is not thread-safe.
80 /// 80 ///
81 /// <strong>Note:</strong> in Debug mode, it checks that it is either called 81 /// <strong>Note:</strong> in Debug mode, it checks that it is either called
82 /// on the main thread, or always called on another thread. 82 /// on the main thread, or always called on another thread.
83 class RefCount { 83 class RefCount {
84 public: 84 public:
85 /// Default constructor. In debug mode, this checks that the object is being 85 /// Default constructor. In debug mode, this checks that the object is being
86 /// created on the main thread. 86 /// created on the main thread.
87 RefCount() : ref_(0) { 87 RefCount() : ref_(0) {
88 #ifndef NDEBUG 88 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
89 is_main_thread_ = Module::Get()->core()->IsMainThread(); 89 is_main_thread_ = Module::Get()->core()->IsMainThread();
90 #endif 90 #endif
91 } 91 }
92 92
93 /// Destructor. 93 /// Destructor.
94 ~RefCount() { 94 ~RefCount() {
95 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread()); 95 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread());
96 } 96 }
97 97
98 /// AddRef() increments the reference counter. 98 /// AddRef() increments the reference counter.
99 /// 99 ///
100 /// @return An int32_t with the incremented reference counter. 100 /// @return An int32_t with the incremented reference counter.
101 int32_t AddRef() { 101 int32_t AddRef() {
102 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread()); 102 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread());
103 return ++ref_; 103 return ++ref_;
104 } 104 }
105 105
106 /// Release() decrements the reference counter. 106 /// Release() decrements the reference counter.
107 /// 107 ///
108 /// @return An int32_t with the decremeneted reference counter. 108 /// @return An int32_t with the decremeneted reference counter.
109 int32_t Release() { 109 int32_t Release() {
110 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread()); 110 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread());
111 return --ref_; 111 return --ref_;
112 } 112 }
113 113
114 private: 114 private:
115 int32_t ref_; 115 int32_t ref_;
116 #ifndef NDEBUG 116 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
117 bool is_main_thread_; 117 bool is_main_thread_;
118 #endif 118 #endif
119 }; 119 };
120 120
121 /// A simple object that acts like a lock but does nothing. 121 /// A simple object that acts like a lock but does nothing.
122 /// 122 ///
123 /// <strong>Note:</strong> in Debug mode, it checks that it is either 123 /// <strong>Note:</strong> in Debug mode, it checks that it is either
124 /// called on the main thread, or always called on another thread. It also 124 /// called on the main thread, or always called on another thread. It also
125 /// asserts that the caller does not recursively lock. 125 /// asserts that the caller does not recursively lock.
126 class Lock { 126 class Lock {
127 public: 127 public:
128 Lock() { 128 Lock() {
129 #ifndef NDEBUG 129 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
130 is_main_thread_ = Module::Get()->core()->IsMainThread(); 130 is_main_thread_ = Module::Get()->core()->IsMainThread();
131 lock_held_ = false; 131 lock_held_ = false;
132 #endif 132 #endif
133 } 133 }
134 134
135 ~Lock() { 135 ~Lock() {
136 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread()); 136 PP_DCHECK(is_main_thread_ == Module::Get()->core()->IsMainThread());
137 } 137 }
138 138
139 /// Acquires the fake "lock". This does nothing except perform checks in 139 /// Acquires the fake "lock". This does nothing except perform checks in
140 /// debug mode. 140 /// debug mode.
141 void Acquire() { 141 void Acquire() {
142 #ifndef NDEBUG 142 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
143 PP_DCHECK(!lock_held_); 143 PP_DCHECK(!lock_held_);
144 lock_held_ = true; 144 lock_held_ = true;
145 #endif 145 #endif
146 } 146 }
147 147
148 /// Releases the fake "lock". This does nothing except perform checks in 148 /// Releases the fake "lock". This does nothing except perform checks in
149 /// debug mode. 149 /// debug mode.
150 void Release() { 150 void Release() {
151 #ifndef NDEBUG 151 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
152 PP_DCHECK(lock_held_); 152 PP_DCHECK(lock_held_);
153 lock_held_ = false; 153 lock_held_ = false;
154 #endif 154 #endif
155 } 155 }
156 156
157 private: 157 private:
158 #ifndef NDEBUG 158 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
159 bool is_main_thread_; 159 bool is_main_thread_;
160 bool lock_held_; 160 bool lock_held_;
161 #endif 161 #endif
162 }; 162 };
163 163
164 class AutoLock { 164 class AutoLock {
165 public: 165 public:
166 explicit AutoLock(Lock& lock) : lock_(lock) { 166 explicit AutoLock(Lock& lock) : lock_(lock) {
167 lock_.Acquire(); 167 lock_.Acquire();
168 } 168 }
169 ~AutoLock() { 169 ~AutoLock() {
170 lock_.Release(); 170 lock_.Release();
171 } 171 }
172 172
173 private: 173 private:
174 Lock& lock_; 174 Lock& lock_;
175 }; 175 };
176 }; 176 };
177 177
178 } // namespace pp 178 } // namespace pp
179 179
180 #endif // PPAPI_UTILITY_THREAD_SAFE_THREAD_TRAITS_H_ 180 #endif // PPAPI_UTILITY_THREAD_SAFE_THREAD_TRAITS_H_
OLDNEW
« no previous file with comments | « net/spdy/hpack/hpack_huffman_decoder.cc ('k') | third_party/zlib/google/zip_reader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698