Commit e0b87aa2 authored by rtenneti@google.com's avatar rtenneti@google.com

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
parent 7e7a0047
......@@ -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();
......
......@@ -27,6 +27,7 @@ class CONTENT_EXPORT BrowserThreadImpl
protected:
virtual void Init() OVERRIDE;
virtual void Run(MessageLoop* message_loop) OVERRIDE;
virtual void CleanUp() OVERRIDE;
private:
......@@ -35,6 +36,17 @@ class CONTENT_EXPORT BrowserThreadImpl
// the API cleaner. Therefore make BrowserThread a friend class.
friend class BrowserThread;
// The following are unique function names that makes it possible to tell
// the thread id from the callstack alone in crash dumps.
void UIThreadRun(MessageLoop* message_loop);
void DBThreadRun(MessageLoop* message_loop);
void WebKitThreadRun(MessageLoop* message_loop);
void FileThreadRun(MessageLoop* message_loop);
void FileUserBlockingThreadRun(MessageLoop* message_loop);
void ProcessLauncherThreadRun(MessageLoop* message_loop);
void CacheThreadRun(MessageLoop* message_loop);
void IOThreadRun(MessageLoop* message_loop);
static bool PostTaskHelper(
BrowserThread::ID identifier,
const tracked_objects::Location& from_here,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment