summaryrefslogtreecommitdiffstats
path: root/content/browser/browser_thread_impl.cc
diff options
context:
space:
mode:
authorrtenneti@google.com <rtenneti@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-23 21:21:23 +0000
committerrtenneti@google.com <rtenneti@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-23 21:21:23 +0000
commite0b87aa21c53a58a12279ffaff1d93309cc77b28 (patch)
tree9a65444d7471ad43169f7146f0e38cfce48751d3 /content/browser/browser_thread_impl.cc
parent7e7a004713c446d6b888f75901f73176a0282982 (diff)
downloadchromium_src-e0b87aa21c53a58a12279ffaff1d93309cc77b28.zip
chromium_src-e0b87aa21c53a58a12279ffaff1d93309cc77b28.tar.gz
chromium_src-e0b87aa21c53a58a12279ffaff1d93309cc77b28.tar.bz2
Added unique function names (IOThreadRun, DBThreadRun, etc)
which make it possible to tell the thread name in crash dumps from the call stack. Added a volatile automatic variable to avoid global optimizers optimizing the function. This change would help us to triage ThreadWatcher crashes for IO thread. It would also help in debugging crashes. R=sky, jar Review URL: https://chromiumcodereview.appspot.com/10796079 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147949 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/browser_thread_impl.cc')
-rw-r--r--content/browser/browser_thread_impl.cc85
1 files changed, 85 insertions, 0 deletions
diff --git a/content/browser/browser_thread_impl.cc b/content/browser/browser_thread_impl.cc
index 13ab5a5..901c03b 100644
--- a/content/browser/browser_thread_impl.cc
+++ b/content/browser/browser_thread_impl.cc
@@ -95,6 +95,91 @@ void BrowserThreadImpl::Init() {
delegate->Init();
}
+// We disable optimizations for this block of functions so the compiler doesn't
+// merge them all together.
+MSVC_DISABLE_OPTIMIZE()
+MSVC_PUSH_DISABLE_WARNING(4748)
+
+void BrowserThreadImpl::UIThreadRun(MessageLoop* message_loop) {
+ volatile int line_number = __LINE__;
+ 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);
+}
+
+MSVC_POP_WARNING()
+MSVC_ENABLE_OPTIMIZE();
+
+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();