OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // The Watchdog class creates a second thread that can Alarm if a specific | 5 // The Watchdog class creates a second thread that can Alarm if a specific |
6 // duration of time passes without proper attention. The duration of time is | 6 // duration of time passes without proper attention. The duration of time is |
7 // specified at construction time. The Watchdog may be used many times by | 7 // specified at construction time. The Watchdog may be used many times by |
8 // simply calling Arm() (to start timing) and Disarm() (to reset the timer). | 8 // simply calling Arm() (to start timing) and Disarm() (to reset the timer). |
9 // The Watchdog is typically used under a debugger, where the stack traces on | 9 // The Watchdog is typically used under a debugger, where the stack traces on |
10 // other threads can be examined if/when the Watchdog alarms. | 10 // other threads can be examined if/when the Watchdog alarms. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 | 58 |
59 // Reset static data to initial state. Useful for tests, to ensure | 59 // Reset static data to initial state. Useful for tests, to ensure |
60 // they are independent. | 60 // they are independent. |
61 static void ResetStaticData(); | 61 static void ResetStaticData(); |
62 | 62 |
63 private: | 63 private: |
64 class ThreadDelegate : public PlatformThread::Delegate { | 64 class ThreadDelegate : public PlatformThread::Delegate { |
65 public: | 65 public: |
66 explicit ThreadDelegate(Watchdog* watchdog) : watchdog_(watchdog) { | 66 explicit ThreadDelegate(Watchdog* watchdog) : watchdog_(watchdog) { |
67 } | 67 } |
68 virtual void ThreadMain() OVERRIDE; | 68 void ThreadMain() override; |
| 69 |
69 private: | 70 private: |
70 void SetThreadName() const; | 71 void SetThreadName() const; |
71 | 72 |
72 Watchdog* watchdog_; | 73 Watchdog* watchdog_; |
73 }; | 74 }; |
74 | 75 |
75 enum State {ARMED, DISARMED, SHUTDOWN, JOINABLE }; | 76 enum State {ARMED, DISARMED, SHUTDOWN, JOINABLE }; |
76 | 77 |
77 bool enabled_; | 78 bool enabled_; |
78 | 79 |
79 Lock lock_; // Mutex for state_. | 80 Lock lock_; // Mutex for state_. |
80 ConditionVariable condition_variable_; | 81 ConditionVariable condition_variable_; |
81 State state_; | 82 State state_; |
82 const TimeDelta duration_; // How long after start_time_ do we alarm? | 83 const TimeDelta duration_; // How long after start_time_ do we alarm? |
83 const std::string thread_watched_name_; | 84 const std::string thread_watched_name_; |
84 PlatformThreadHandle handle_; | 85 PlatformThreadHandle handle_; |
85 ThreadDelegate delegate_; // Store it, because it must outlive the thread. | 86 ThreadDelegate delegate_; // Store it, because it must outlive the thread. |
86 | 87 |
87 TimeTicks start_time_; // Start of epoch, and alarm after duration_. | 88 TimeTicks start_time_; // Start of epoch, and alarm after duration_. |
88 | 89 |
89 DISALLOW_COPY_AND_ASSIGN(Watchdog); | 90 DISALLOW_COPY_AND_ASSIGN(Watchdog); |
90 }; | 91 }; |
91 | 92 |
92 } // namespace base | 93 } // namespace base |
93 | 94 |
94 #endif // BASE_THREADING_WATCHDOG_H_ | 95 #endif // BASE_THREADING_WATCHDOG_H_ |
OLD | NEW |