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 "content/browser/browser_thread_impl.h" | 5 #include "content/browser/browser_thread_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/atomicops.h" | 9 #include "base/atomicops.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 using base::subtle::AtomicWord; | 88 using base::subtle::AtomicWord; |
89 AtomicWord* storage = | 89 AtomicWord* storage = |
90 reinterpret_cast<AtomicWord*>(&globals.thread_delegates[identifier_]); | 90 reinterpret_cast<AtomicWord*>(&globals.thread_delegates[identifier_]); |
91 AtomicWord stored_pointer = base::subtle::NoBarrier_Load(storage); | 91 AtomicWord stored_pointer = base::subtle::NoBarrier_Load(storage); |
92 BrowserThreadDelegate* delegate = | 92 BrowserThreadDelegate* delegate = |
93 reinterpret_cast<BrowserThreadDelegate*>(stored_pointer); | 93 reinterpret_cast<BrowserThreadDelegate*>(stored_pointer); |
94 if (delegate) | 94 if (delegate) |
95 delegate->Init(); | 95 delegate->Init(); |
96 } | 96 } |
97 | 97 |
| 98 // We disable optimizations for this block of functions so the compiler doesn't |
| 99 // merge them all together. |
| 100 MSVC_DISABLE_OPTIMIZE() |
| 101 MSVC_PUSH_DISABLE_WARNING(4748) |
| 102 |
| 103 void BrowserThreadImpl::UIThreadRun(MessageLoop* message_loop) { |
| 104 volatile int line_number = __LINE__; |
| 105 Thread::Run(message_loop); |
| 106 CHECK_GT(line_number, 0); |
| 107 } |
| 108 |
| 109 void BrowserThreadImpl::DBThreadRun(MessageLoop* message_loop) { |
| 110 volatile int line_number = __LINE__; |
| 111 Thread::Run(message_loop); |
| 112 CHECK_GT(line_number, 0); |
| 113 } |
| 114 |
| 115 void BrowserThreadImpl::WebKitThreadRun(MessageLoop* message_loop) { |
| 116 volatile int line_number = __LINE__; |
| 117 Thread::Run(message_loop); |
| 118 CHECK_GT(line_number, 0); |
| 119 } |
| 120 |
| 121 void BrowserThreadImpl::FileThreadRun(MessageLoop* message_loop) { |
| 122 volatile int line_number = __LINE__; |
| 123 Thread::Run(message_loop); |
| 124 CHECK_GT(line_number, 0); |
| 125 } |
| 126 |
| 127 void BrowserThreadImpl::FileUserBlockingThreadRun(MessageLoop* message_loop) { |
| 128 volatile int line_number = __LINE__; |
| 129 Thread::Run(message_loop); |
| 130 CHECK_GT(line_number, 0); |
| 131 } |
| 132 |
| 133 void BrowserThreadImpl::ProcessLauncherThreadRun(MessageLoop* message_loop) { |
| 134 volatile int line_number = __LINE__; |
| 135 Thread::Run(message_loop); |
| 136 CHECK_GT(line_number, 0); |
| 137 } |
| 138 |
| 139 void BrowserThreadImpl::CacheThreadRun(MessageLoop* message_loop) { |
| 140 volatile int line_number = __LINE__; |
| 141 Thread::Run(message_loop); |
| 142 CHECK_GT(line_number, 0); |
| 143 } |
| 144 |
| 145 void BrowserThreadImpl::IOThreadRun(MessageLoop* message_loop) { |
| 146 volatile int line_number = __LINE__; |
| 147 Thread::Run(message_loop); |
| 148 CHECK_GT(line_number, 0); |
| 149 } |
| 150 |
| 151 MSVC_POP_WARNING() |
| 152 MSVC_ENABLE_OPTIMIZE(); |
| 153 |
| 154 void BrowserThreadImpl::Run(MessageLoop* message_loop) { |
| 155 BrowserThread::ID thread_id; |
| 156 if (!GetCurrentThreadIdentifier(&thread_id)) |
| 157 return Thread::Run(message_loop); |
| 158 |
| 159 switch (thread_id) { |
| 160 case BrowserThread::UI: |
| 161 return UIThreadRun(message_loop); |
| 162 case BrowserThread::DB: |
| 163 return DBThreadRun(message_loop); |
| 164 case BrowserThread::WEBKIT_DEPRECATED: |
| 165 return WebKitThreadRun(message_loop); |
| 166 case BrowserThread::FILE: |
| 167 return FileThreadRun(message_loop); |
| 168 case BrowserThread::FILE_USER_BLOCKING: |
| 169 return FileUserBlockingThreadRun(message_loop); |
| 170 case BrowserThread::PROCESS_LAUNCHER: |
| 171 return ProcessLauncherThreadRun(message_loop); |
| 172 case BrowserThread::CACHE: |
| 173 return CacheThreadRun(message_loop); |
| 174 case BrowserThread::IO: |
| 175 return IOThreadRun(message_loop); |
| 176 case BrowserThread::ID_COUNT: |
| 177 CHECK(false); // This shouldn't actually be reached! |
| 178 break; |
| 179 } |
| 180 Thread::Run(message_loop); |
| 181 } |
| 182 |
98 void BrowserThreadImpl::CleanUp() { | 183 void BrowserThreadImpl::CleanUp() { |
99 BrowserThreadGlobals& globals = g_globals.Get(); | 184 BrowserThreadGlobals& globals = g_globals.Get(); |
100 | 185 |
101 using base::subtle::AtomicWord; | 186 using base::subtle::AtomicWord; |
102 AtomicWord* storage = | 187 AtomicWord* storage = |
103 reinterpret_cast<AtomicWord*>(&globals.thread_delegates[identifier_]); | 188 reinterpret_cast<AtomicWord*>(&globals.thread_delegates[identifier_]); |
104 AtomicWord stored_pointer = base::subtle::NoBarrier_Load(storage); | 189 AtomicWord stored_pointer = base::subtle::NoBarrier_Load(storage); |
105 BrowserThreadDelegate* delegate = | 190 BrowserThreadDelegate* delegate = |
106 reinterpret_cast<BrowserThreadDelegate*>(stored_pointer); | 191 reinterpret_cast<BrowserThreadDelegate*>(stored_pointer); |
107 | 192 |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 AtomicWord* storage = reinterpret_cast<AtomicWord*>( | 461 AtomicWord* storage = reinterpret_cast<AtomicWord*>( |
377 &globals.thread_delegates[identifier]); | 462 &globals.thread_delegates[identifier]); |
378 AtomicWord old_pointer = base::subtle::NoBarrier_AtomicExchange( | 463 AtomicWord old_pointer = base::subtle::NoBarrier_AtomicExchange( |
379 storage, reinterpret_cast<AtomicWord>(delegate)); | 464 storage, reinterpret_cast<AtomicWord>(delegate)); |
380 | 465 |
381 // This catches registration when previously registered. | 466 // This catches registration when previously registered. |
382 DCHECK(!delegate || !old_pointer); | 467 DCHECK(!delegate || !old_pointer); |
383 } | 468 } |
384 | 469 |
385 } // namespace content | 470 } // namespace content |
OLD | NEW |