Chromium Code Reviews| Index: content/browser/browser_thread_impl.cc |
| =================================================================== |
| --- content/browser/browser_thread_impl.cc (revision 147800) |
| +++ content/browser/browser_thread_impl.cc (working copy) |
| @@ -95,6 +95,96 @@ |
| delegate->Init(); |
| } |
| +// We disable optimizations for this block of functions so the compiler doesn't |
| +// merge them all together. |
| +// TODO(rtenneti): What is the equivalent for other compilers? |
| +#if defined(COMPILER_MSVC) |
|
sky
2012/07/23 15:49:17
Use MSVC_PUSH_DISABLE/POP_DISABLE to avoid the ifd
ramant (doing other things)
2012/07/23 17:33:04
Done.
|
| +#pragma optimize("", off) |
| +MSVC_PUSH_DISABLE_WARNING(4748) |
| +#endif |
| + |
| +void BrowserThreadImpl::UIThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
|
sky
2012/07/23 15:49:17
Why do you need the line numbers on all these?
ramant (doing other things)
2012/07/23 17:33:04
Compilers could optimize away all *ThreadRun funct
|
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::DBThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::WebKitThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::FileThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::FileUserBlockingThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::ProcessLauncherThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::CacheThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +void BrowserThreadImpl::IOThreadRun(MessageLoop* message_loop) { |
| + volatile int line_number = __LINE__; |
| + Thread::Run(message_loop); |
| + CHECK_GT(line_number, 0); |
| +} |
| + |
| +#if defined(COMPILER_MSVC) |
| +MSVC_POP_WARNING() |
| +#pragma optimize("", on) |
| +#endif |
| + |
| +void BrowserThreadImpl::Run(MessageLoop* message_loop) { |
| + BrowserThread::ID thread_id; |
| + if (!GetCurrentThreadIdentifier(&thread_id)) |
| + return Thread::Run(message_loop); |
| + |
| + switch (thread_id) { |
| + case BrowserThread::UI: |
| + return UIThreadRun(message_loop); |
| + case BrowserThread::DB: |
| + return DBThreadRun(message_loop); |
| + case BrowserThread::WEBKIT_DEPRECATED: |
| + return WebKitThreadRun(message_loop); |
| + case BrowserThread::FILE: |
| + return FileThreadRun(message_loop); |
| + case BrowserThread::FILE_USER_BLOCKING: |
| + return FileUserBlockingThreadRun(message_loop); |
| + case BrowserThread::PROCESS_LAUNCHER: |
| + return ProcessLauncherThreadRun(message_loop); |
| + case BrowserThread::CACHE: |
| + return CacheThreadRun(message_loop); |
| + case BrowserThread::IO: |
| + return IOThreadRun(message_loop); |
| + case BrowserThread::ID_COUNT: |
| + CHECK(false); // This shouldn't actually be reached! |
| + break; |
| + } |
| + Thread::Run(message_loop); |
| +} |
| + |
| void BrowserThreadImpl::CleanUp() { |
| BrowserThreadGlobals& globals = g_globals.Get(); |