Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4280)

Unified Diff: chrome/browser/metrics/thread_watcher.h

Issue 7134007: Added command line switches "crash-on-hang-threads" and "crash-on-hang-seconds" (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/metrics/thread_watcher.h
===================================================================
--- chrome/browser/metrics/thread_watcher.h (revision 88502)
+++ chrome/browser/metrics/thread_watcher.h (working copy)
@@ -32,10 +32,12 @@
#define CHROME_BROWSER_METRICS_THREAD_WATCHER_H_
#include <map>
+#include <set>
#include <string>
#include <vector>
#include "base/basictypes.h"
+#include "base/command_line.h"
#include "base/gtest_prod_util.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
@@ -158,16 +160,13 @@
// It increments unresponsive_count_ by 1.
void GotNoResponse();
+ // Helper method to get |unresponsive_count_|.
+ uint32 unresponsive_count() const { return unresponsive_count_; }
+
// This is the number of ping messages to be sent when the user is idle.
// ping_count_ will be initialized to kPingCount whenever user becomes active.
static const int kPingCount;
- // This value is used to determine if the watched thread is responsive or not.
- // If unresponsive_count_ is less than kUnresponsiveCount then watched thread
- // is considered as responsive (in responsive_count_histogram_) otherwise it
- // is considered as unresponsive (in unresponsive_count_histogram_).
- static const int kUnresponsiveCount;
-
// The thread_id of the thread being watched. Only one instance can exist for
// the given thread_id of the thread being watched.
const BrowserThread::ID thread_id_;
@@ -223,7 +222,7 @@
// is zero then watched thread has responded with a pong message. This is
// incremented by 1 when we got no response (GotNoResponse) from the watched
// thread.
- int unresponsive_count_;
+ uint32 unresponsive_count_;
// This is set to true when we would have crashed the browser because the
// watched thread hasn't responded atleast 6 times. It is reset to false when
@@ -248,7 +247,7 @@
typedef std::map<BrowserThread::ID, ThreadWatcher*> RegistrationList;
// This singleton holds the global list of registered ThreadWatchers.
- ThreadWatcherList();
+ explicit ThreadWatcherList(const CommandLine& command_line);
// Destructor deletes all registered ThreadWatcher instances.
virtual ~ThreadWatcherList();
@@ -273,8 +272,19 @@
// This method is accessible on UI thread.
static void RemoveNotifications();
+ // Returns true if watched thread's |unresponsive_count_| is less than
+ // |crash_on_unresponsive_count_|. A watched thread is considered as
+ // unresponsive if it has not responded with a pong message for
+ // |crash_on_unresponsive_count_| number of ping messages.
+ static bool IsResponsive(ThreadWatcher* watcher);
+
+ // Returns true if the watched thread is not responsive and is listed
+ // as one of the threads in "--crash-on-hang-threads" command line switch.
+ static bool CrashOnHang(ThreadWatcher* watcher);
+
// This method returns number of watched threads that have responded and
- // threads that have not responded with a pong message.
+ // threads that have not responded with a pong message for
+ // |crash_on_unresponsive_count_| number of ping messages.
static void GetStatusOfThreads(int* no_of_responding_threads,
int* no_of_unresponding_threads);
@@ -316,6 +326,11 @@
// received pong message or not.
static const int kUnresponsiveSeconds;
+ // This is used to initialize |crash_on_unresponsive_count_|.
+ // |crash_on_unresponsive_count_| is used to determine if the watched thread
+ // is responsive or not.
jar (doing other things) 2011/06/10 00:38:33 nit: Don't bother explaining the variable... since
ramant (doing other things) 2011/06/13 03:26:02 Done.
+ static const int kUnresponsiveCount;
+
// Lock for access to registered_.
base::Lock lock_;
@@ -328,6 +343,19 @@
// This is the last time when woke all thread watchers up.
base::TimeTicks last_wakeup_time_;
+ // This is used to determine if the watched thread is responsive or not. If
+ // watched thread's |unresponsive_count_| is greater than or equal to
+ // |crash_on_unresponsive_count_| then we could crash the browser if the
+ // watched thread is listed in the "--crash-on-hang-threads" command line
+ // switch. It is initialized with |kUnresponsiveCount|, but can be overwritten
+ // by the command line switch "--crash-on-hang-seconds".
+ uint32 crash_on_unresponsive_count_;
+
+ // This is the set of watched thread's names that are to be crashed if they
+ // have not responded with a pong message for |crash_on_unresponsive_count_|
+ // number of ping messages.
+ std::set<std::string> crash_on_hang_thread_names_;
+
DISALLOW_COPY_AND_ASSIGN(ThreadWatcherList);
};

Powered by Google App Engine
This is Rietveld 408576698