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(); |