| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 CHROME_BROWSER_CHROME_THREAD_H_ | 5 #ifndef CHROME_BROWSER_CHROME_THREAD_H_ |
| 6 #define CHROME_BROWSER_CHROME_THREAD_H_ | 6 #define CHROME_BROWSER_CHROME_THREAD_H_ |
| 7 | 7 |
| 8 #include "base/lock.h" | 8 #include "base/lock.h" |
| 9 #include "base/task.h" | 9 #include "base/task.h" |
| 10 #include "base/thread.h" | 10 #include "base/thread.h" |
| 11 | 11 |
| 12 class MessageLoopProxy; |
| 13 |
| 12 /////////////////////////////////////////////////////////////////////////////// | 14 /////////////////////////////////////////////////////////////////////////////// |
| 13 // ChromeThread | 15 // ChromeThread |
| 14 // | 16 // |
| 15 // This class represents a thread that is known by a browser-wide name. For | 17 // This class represents a thread that is known by a browser-wide name. For |
| 16 // example, there is one IO thread for the entire browser process, and various | 18 // example, there is one IO thread for the entire browser process, and various |
| 17 // pieces of code find it useful to retrieve a pointer to the IO thread's | 19 // pieces of code find it useful to retrieve a pointer to the IO thread's |
| 18 // Invoke a task by thread ID: | 20 // Invoke a task by thread ID: |
| 19 // | 21 // |
| 20 // ChromeThread::PostTask(ChromeThread::IO, FROM_HERE, task); | 22 // ChromeThread::PostTask(ChromeThread::IO, FROM_HERE, task); |
| 21 // | 23 // |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 static bool IsWellKnownThread(ID identifier); | 121 static bool IsWellKnownThread(ID identifier); |
| 120 | 122 |
| 121 // Callable on any thread. Returns whether you're currently on a particular | 123 // Callable on any thread. Returns whether you're currently on a particular |
| 122 // thread. | 124 // thread. |
| 123 static bool CurrentlyOn(ID identifier); | 125 static bool CurrentlyOn(ID identifier); |
| 124 | 126 |
| 125 // If the current message loop is one of the known threads, returns true and | 127 // If the current message loop is one of the known threads, returns true and |
| 126 // sets identifier to its ID. Otherwise returns false. | 128 // sets identifier to its ID. Otherwise returns false. |
| 127 static bool GetCurrentThreadIdentifier(ID* identifier); | 129 static bool GetCurrentThreadIdentifier(ID* identifier); |
| 128 | 130 |
| 131 // Callers can hold on to a refcounted MessageLoopProxy beyond the lifetime |
| 132 // of the thread. |
| 133 static scoped_refptr<MessageLoopProxy> GetMessageLoopProxyForThread( |
| 134 ID identifier); |
| 135 |
| 129 // Use these templates in conjuction with RefCountedThreadSafe when you want | 136 // Use these templates in conjuction with RefCountedThreadSafe when you want |
| 130 // to ensure that an object is deleted on a specific thread. This is needed | 137 // to ensure that an object is deleted on a specific thread. This is needed |
| 131 // when an object can hop between threads (i.e. IO -> FILE -> IO), and thread | 138 // when an object can hop between threads (i.e. IO -> FILE -> IO), and thread |
| 132 // switching delays can mean that the final IO tasks executes before the FILE | 139 // switching delays can mean that the final IO tasks executes before the FILE |
| 133 // task's stack unwinds. This would lead to the object destructing on the | 140 // task's stack unwinds. This would lead to the object destructing on the |
| 134 // FILE thread, which often is not what you want (i.e. to unregister from | 141 // FILE thread, which often is not what you want (i.e. to unregister from |
| 135 // NotificationService, to notify other objects on the creating thread etc). | 142 // NotificationService, to notify other objects on the creating thread etc). |
| 136 template<ID thread> | 143 template<ID thread> |
| 137 struct DeleteOnThread { | 144 struct DeleteOnThread { |
| 138 template<typename T> | 145 template<typename T> |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 static Lock lock_; | 189 static Lock lock_; |
| 183 | 190 |
| 184 // An array of the ChromeThread objects. This array is protected by |lock_|. | 191 // An array of the ChromeThread objects. This array is protected by |lock_|. |
| 185 // The threads are not owned by this array. Typically, the threads are owned | 192 // The threads are not owned by this array. Typically, the threads are owned |
| 186 // on the UI thread by the g_browser_process object. ChromeThreads remove | 193 // on the UI thread by the g_browser_process object. ChromeThreads remove |
| 187 // themselves from this array upon destruction. | 194 // themselves from this array upon destruction. |
| 188 static ChromeThread* chrome_threads_[ID_COUNT]; | 195 static ChromeThread* chrome_threads_[ID_COUNT]; |
| 189 }; | 196 }; |
| 190 | 197 |
| 191 #endif // CHROME_BROWSER_CHROME_THREAD_H_ | 198 #endif // CHROME_BROWSER_CHROME_THREAD_H_ |
| OLD | NEW |