OLD | NEW |
---|---|
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 #include "base/threading/thread.h" | 5 #include "base/threading/thread.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 | 137 |
138 bool Thread::WaitUntilThreadStarted() const { | 138 bool Thread::WaitUntilThreadStarted() const { |
139 DCHECK(owning_sequence_checker_.CalledOnValidSequence()); | 139 DCHECK(owning_sequence_checker_.CalledOnValidSequence()); |
140 if (!message_loop_) | 140 if (!message_loop_) |
141 return false; | 141 return false; |
142 base::ThreadRestrictions::ScopedAllowWait allow_wait; | 142 base::ThreadRestrictions::ScopedAllowWait allow_wait; |
143 start_event_.Wait(); | 143 start_event_.Wait(); |
144 return true; | 144 return true; |
145 } | 145 } |
146 | 146 |
147 void Thread::FlushForTesting() { | |
danakj
2016/09/15 18:09:33
I'd prefer a free function in base/test/ actually.
gab
2016/09/15 20:18:33
Maybe discoverability is a reason? i.e. I just rea
| |
148 DCHECK(owning_sequence_checker_.CalledOnValidSequence()); | |
149 if (!message_loop_) | |
150 return; | |
151 | |
152 WaitableEvent done(WaitableEvent::ResetPolicy::AUTOMATIC, | |
153 WaitableEvent::InitialState::NOT_SIGNALED); | |
154 task_runner()->PostTask(FROM_HERE, | |
155 Bind(&WaitableEvent::Signal, Unretained(&done))); | |
156 done.Wait(); | |
157 } | |
158 | |
147 void Thread::Stop() { | 159 void Thread::Stop() { |
148 DCHECK(joinable_); | 160 DCHECK(joinable_); |
149 | 161 |
150 // TODO(gab): Fix improper usage of this API (http://crbug.com/629139) and | 162 // TODO(gab): Fix improper usage of this API (http://crbug.com/629139) and |
151 // enable this check, until then synchronization with Start() via | 163 // enable this check, until then synchronization with Start() via |
152 // |thread_lock_| is required... | 164 // |thread_lock_| is required... |
153 // DCHECK(owning_sequence_checker_.CalledOnValidSequence()); | 165 // DCHECK(owning_sequence_checker_.CalledOnValidSequence()); |
154 AutoLock lock(thread_lock_); | 166 AutoLock lock(thread_lock_); |
155 | 167 |
156 StopSoon(); | 168 StopSoon(); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
331 run_loop_ = nullptr; | 343 run_loop_ = nullptr; |
332 } | 344 } |
333 | 345 |
334 void Thread::ThreadQuitHelper() { | 346 void Thread::ThreadQuitHelper() { |
335 DCHECK(run_loop_); | 347 DCHECK(run_loop_); |
336 run_loop_->QuitWhenIdle(); | 348 run_loop_->QuitWhenIdle(); |
337 SetThreadWasQuitProperly(true); | 349 SetThreadWasQuitProperly(true); |
338 } | 350 } |
339 | 351 |
340 } // namespace base | 352 } // namespace base |
OLD | NEW |