| 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 virtual void ThreadMain() override; |
| 69 private: | 69 private: |
| 70 void SetThreadName() const; | 70 void SetThreadName() const; |
| 71 | 71 |
| 72 Watchdog* watchdog_; | 72 Watchdog* watchdog_; |
| 73 }; | 73 }; |
| 74 | 74 |
| 75 enum State {ARMED, DISARMED, SHUTDOWN, JOINABLE }; | 75 enum State {ARMED, DISARMED, SHUTDOWN, JOINABLE }; |
| 76 | 76 |
| 77 bool enabled_; | 77 bool enabled_; |
| 78 | 78 |
| 79 Lock lock_; // Mutex for state_. | 79 Lock lock_; // Mutex for state_. |
| 80 ConditionVariable condition_variable_; | 80 ConditionVariable condition_variable_; |
| 81 State state_; | 81 State state_; |
| 82 const TimeDelta duration_; // How long after start_time_ do we alarm? | 82 const TimeDelta duration_; // How long after start_time_ do we alarm? |
| 83 const std::string thread_watched_name_; | 83 const std::string thread_watched_name_; |
| 84 PlatformThreadHandle handle_; | 84 PlatformThreadHandle handle_; |
| 85 ThreadDelegate delegate_; // Store it, because it must outlive the thread. | 85 ThreadDelegate delegate_; // Store it, because it must outlive the thread. |
| 86 | 86 |
| 87 TimeTicks start_time_; // Start of epoch, and alarm after duration_. | 87 TimeTicks start_time_; // Start of epoch, and alarm after duration_. |
| 88 | 88 |
| 89 DISALLOW_COPY_AND_ASSIGN(Watchdog); | 89 DISALLOW_COPY_AND_ASSIGN(Watchdog); |
| 90 }; | 90 }; |
| 91 | 91 |
| 92 } // namespace base | 92 } // namespace base |
| 93 | 93 |
| 94 #endif // BASE_THREADING_WATCHDOG_H_ | 94 #endif // BASE_THREADING_WATCHDOG_H_ |
| OLD | NEW |