 Chromium Code Reviews
 Chromium Code Reviews Issue 2136563002:
  Remove calls to MessageLoop::current() in base.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 2136563002:
  Remove calls to MessageLoop::current() in base.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| 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 #ifndef BASE_THREADING_THREAD_H_ | 5 #ifndef BASE_THREADING_THREAD_H_ | 
| 6 #define BASE_THREADING_THREAD_H_ | 6 #define BASE_THREADING_THREAD_H_ | 
| 7 | 7 | 
| 8 #include <stddef.h> | 8 #include <stddef.h> | 
| 9 | 9 | 
| 10 #include <memory> | 10 #include <memory> | 
| 11 #include <string> | 11 #include <string> | 
| 12 | 12 | 
| 13 #include "base/base_export.h" | 13 #include "base/base_export.h" | 
| 14 #include "base/callback.h" | 14 #include "base/callback.h" | 
| 15 #include "base/macros.h" | 15 #include "base/macros.h" | 
| 16 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" | 
| 17 #include "base/message_loop/timer_slack.h" | 17 #include "base/message_loop/timer_slack.h" | 
| 18 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" | 
| 19 #include "base/synchronization/lock.h" | 19 #include "base/synchronization/lock.h" | 
| 20 #include "base/synchronization/waitable_event.h" | 20 #include "base/synchronization/waitable_event.h" | 
| 21 #include "base/threading/platform_thread.h" | 21 #include "base/threading/platform_thread.h" | 
| 22 #include "build/build_config.h" | 22 #include "build/build_config.h" | 
| 23 | 23 | 
| 24 namespace base { | 24 namespace base { | 
| 25 | 25 | 
| 26 class MessagePump; | 26 class MessagePump; | 
| 27 class RunLoop; | |
| 27 | 28 | 
| 28 // A simple thread abstraction that establishes a MessageLoop on a new thread. | 29 // A simple thread abstraction that establishes a MessageLoop on a new thread. | 
| 29 // The consumer uses the MessageLoop of the thread to cause code to execute on | 30 // The consumer uses the MessageLoop of the thread to cause code to execute on | 
| 30 // the thread. When this object is destroyed the thread is terminated. All | 31 // the thread. When this object is destroyed the thread is terminated. All | 
| 31 // pending tasks queued on the thread's message loop will run to completion | 32 // pending tasks queued on the thread's message loop will run to completion | 
| 32 // before the thread is terminated. | 33 // before the thread is terminated. | 
| 33 // | 34 // | 
| 34 // WARNING! SUBCLASSES MUST CALL Stop() IN THEIR DESTRUCTORS! See ~Thread(). | 35 // WARNING! SUBCLASSES MUST CALL Stop() IN THEIR DESTRUCTORS! See ~Thread(). | 
| 35 // | 36 // | 
| 36 // After the thread is stopped, the destruction sequence is: | 37 // After the thread is stopped, the destruction sequence is: | 
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 // | 184 // | 
| 184 PlatformThreadId GetThreadId() const; | 185 PlatformThreadId GetThreadId() const; | 
| 185 | 186 | 
| 186 // Returns true if the thread has been started, and not yet stopped. | 187 // Returns true if the thread has been started, and not yet stopped. | 
| 187 bool IsRunning() const; | 188 bool IsRunning() const; | 
| 188 | 189 | 
| 189 protected: | 190 protected: | 
| 190 // Called just prior to starting the message loop | 191 // Called just prior to starting the message loop | 
| 191 virtual void Init() {} | 192 virtual void Init() {} | 
| 192 | 193 | 
| 193 // Called to start the message loop | 194 // Called to start the run loop | 
| 194 virtual void Run(MessageLoop* message_loop); | 195 virtual void Run(RunLoop* run_loop); | 
| 195 | 196 | 
| 196 // Called just after the message loop ends | 197 // Called just after the message loop ends | 
| 197 virtual void CleanUp() {} | 198 virtual void CleanUp() {} | 
| 198 | 199 | 
| 199 static void SetThreadWasQuitProperly(bool flag); | 200 static void SetThreadWasQuitProperly(bool flag); | 
| 200 static bool GetThreadWasQuitProperly(); | 201 static bool GetThreadWasQuitProperly(); | 
| 201 | 202 | 
| 202 void set_message_loop(MessageLoop* message_loop) { | 203 void set_message_loop(MessageLoop* message_loop) { | 
| 203 message_loop_ = message_loop; | 204 message_loop_ = message_loop; | 
| 204 } | 205 } | 
| 205 | 206 | 
| 206 private: | 207 private: | 
| 207 #if defined(OS_WIN) | 208 #if defined(OS_WIN) | 
| 208 enum ComStatus { | 209 enum ComStatus { | 
| 209 NONE, | 210 NONE, | 
| 210 STA, | 211 STA, | 
| 211 MTA, | 212 MTA, | 
| 212 }; | 213 }; | 
| 213 #endif | 214 #endif | 
| 214 | 215 | 
| 215 // PlatformThread::Delegate methods: | 216 // PlatformThread::Delegate methods: | 
| 216 void ThreadMain() override; | 217 void ThreadMain() override; | 
| 217 | 218 | 
| 219 void ThreadQuitHelper(); | |
| 220 | |
| 218 #if defined(OS_WIN) | 221 #if defined(OS_WIN) | 
| 219 // Whether this thread needs to initialize COM, and if so, in what mode. | 222 // Whether this thread needs to initialize COM, and if so, in what mode. | 
| 220 ComStatus com_status_; | 223 ComStatus com_status_; | 
| 221 #endif | 224 #endif | 
| 222 | 225 | 
| 223 // If true, we're in the middle of stopping, and shouldn't access | 226 // If true, we're in the middle of stopping, and shouldn't access | 
| 224 // |message_loop_|. It may non-nullptr and invalid. | 227 // |message_loop_|. It may non-nullptr and invalid. | 
| 225 // Should be written on the thread that created this thread. Also read data | 228 // Should be written on the thread that created this thread. Also read data | 
| 226 // could be wrong on other threads. | 229 // could be wrong on other threads. | 
| 227 bool stopping_; | 230 bool stopping_; | 
| 228 | 231 | 
| 229 // True while inside of Run(). | 232 // True while inside of Run(). | 
| 230 bool running_; | 233 bool running_; | 
| 231 mutable base::Lock running_lock_; // Protects |running_|. | 234 mutable base::Lock running_lock_; // Protects |running_|. | 
| 232 | 235 | 
| 233 // The thread's handle. | 236 // The thread's handle. | 
| 234 PlatformThreadHandle thread_; | 237 PlatformThreadHandle thread_; | 
| 235 mutable base::Lock thread_lock_; // Protects |thread_|. | 238 mutable base::Lock thread_lock_; // Protects |thread_|. | 
| 236 | 239 | 
| 237 // The thread's id once it has started. | 240 // The thread's id once it has started. | 
| 238 PlatformThreadId id_; | 241 PlatformThreadId id_; | 
| 239 mutable WaitableEvent id_event_; // Protects |id_|. | 242 mutable WaitableEvent id_event_; // Protects |id_|. | 
| 240 | 243 | 
| 241 // The thread's message loop. Valid only while the thread is alive. Set | 244 // The thread's MessageLoop and RunLoop. Valid only while the thread is alive. | 
| 242 // by the created thread. | 245 // Set by the created thread. | 
| 243 MessageLoop* message_loop_; | 246 MessageLoop* message_loop_; | 
| 247 RunLoop* run_loop_; | |
| 
gab
2016/07/21 19:10:51
Note: this turns out to not be relevant in this sp
 | |
| 244 | 248 | 
| 245 // Stores Options::timer_slack_ until the message loop has been bound to | 249 // Stores Options::timer_slack_ until the message loop has been bound to | 
| 246 // a thread. | 250 // a thread. | 
| 247 TimerSlack message_loop_timer_slack_; | 251 TimerSlack message_loop_timer_slack_; | 
| 248 | 252 | 
| 249 // The name of the thread. Used for debugging purposes. | 253 // The name of the thread. Used for debugging purposes. | 
| 250 std::string name_; | 254 std::string name_; | 
| 251 | 255 | 
| 252 // Signaled when the created thread gets ready to use the message loop. | 256 // Signaled when the created thread gets ready to use the message loop. | 
| 253 mutable WaitableEvent start_event_; | 257 mutable WaitableEvent start_event_; | 
| 254 | 258 | 
| 255 friend void ThreadQuitHelper(); | |
| 256 | |
| 257 DISALLOW_COPY_AND_ASSIGN(Thread); | 259 DISALLOW_COPY_AND_ASSIGN(Thread); | 
| 258 }; | 260 }; | 
| 259 | 261 | 
| 260 } // namespace base | 262 } // namespace base | 
| 261 | 263 | 
| 262 #endif // BASE_THREADING_THREAD_H_ | 264 #endif // BASE_THREADING_THREAD_H_ | 
| OLD | NEW |