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

Side by Side Diff: webrtc/base/thread_checker_unittest.cc

Issue 1981893002: Adds macros to annotate variables and functions used from same thread or queue. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix example Created 4 years, 7 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 | « webrtc/base/thread_checker.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 // Borrowed from Chromium's src/base/threading/thread_checker_unittest.cc. 11 // Borrowed from Chromium's src/base/threading/thread_checker_unittest.cc.
12 12
13 #include <memory> 13 #include <memory>
14 14
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/base/constructormagic.h" 17 #include "webrtc/base/constructormagic.h"
18 #include "webrtc/base/task_queue.h"
18 #include "webrtc/base/thread.h" 19 #include "webrtc/base/thread.h"
19 #include "webrtc/base/thread_checker.h" 20 #include "webrtc/base/thread_checker.h"
20 21
21 // Duplicated from base/threading/thread_checker.h so that we can be 22 // Duplicated from base/threading/thread_checker.h so that we can be
22 // good citizens there and undef the macro. 23 // good citizens there and undef the macro.
23 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) 24 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
24 #define ENABLE_THREAD_CHECKER 1 25 #define ENABLE_THREAD_CHECKER 1
25 #else 26 #else
26 #define ENABLE_THREAD_CHECKER 0 27 #define ENABLE_THREAD_CHECKER 0
27 #endif 28 #endif
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 }, ""); 188 }, "");
188 } 189 }
189 #else 190 #else
190 TEST(ThreadCheckerTest, DetachFromThreadInRelease) { 191 TEST(ThreadCheckerTest, DetachFromThreadInRelease) {
191 ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl(); 192 ThreadCheckerClass::DetachThenCallFromDifferentThreadImpl();
192 } 193 }
193 #endif // ENABLE_THREAD_CHECKER 194 #endif // ENABLE_THREAD_CHECKER
194 195
195 #endif // GTEST_HAS_DEATH_TEST || !ENABLE_THREAD_CHECKER 196 #endif // GTEST_HAS_DEATH_TEST || !ENABLE_THREAD_CHECKER
196 197
198 class ThreadAnnotateTest {
199 public:
200 // Next two function should create warnings when compile (e.g. if used with
201 // specific T).
202 // TODO(danilchap): Find a way to test they do not compile when thread
203 // annotation checks enabled.
204 template<typename T>
205 void access_var_no_annotate() {
206 var_thread_ = 42;
207 }
208
209 template<typename T>
210 void access_fun_no_annotate() {
211 function();
212 }
213
214 // Functions below should be able to compile.
215 void access_var_annotate_thread() {
216 RTC_DCHECK_RUN_ON(thread_);
217 var_thread_ = 42;
218 }
219
220 void access_var_annotate_checker() {
221 RTC_DCHECK_RUN_ON(&checker_);
222 var_checker_ = 44;
223 }
224
225 void access_var_annotate_queue() {
226 RTC_DCHECK_RUN_ON(queue_);
227 var_queue_ = 46;
228 }
229
230 void access_fun_annotate() {
231 RTC_DCHECK_RUN_ON(thread_);
232 function();
233 }
234
235 void access_fun_and_var() {
236 RTC_DCHECK_RUN_ON(thread_);
237 fun_acccess_var();
238 }
239
240 private:
241 void function() RUN_ON(thread_) {}
242 void fun_acccess_var() RUN_ON(thread_) { var_thread_ = 13; }
243
244 rtc::Thread* thread_;
245 rtc::ThreadChecker checker_;
246 rtc::TaskQueue* queue_;
247
248 int var_thread_ ACCESS_ON(thread_);
249 int var_checker_ GUARDED_BY(checker_);
250 int var_queue_ ACCESS_ON(queue_);
251 };
252
197 // Just in case we ever get lumped together with other compilation units. 253 // Just in case we ever get lumped together with other compilation units.
198 #undef ENABLE_THREAD_CHECKER 254 #undef ENABLE_THREAD_CHECKER
199 255
200 } // namespace rtc 256 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/thread_checker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698