1# Copyright 2013 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5"""WatchdogTimer timeout objects.""" 6 7import time 8 9 10class WatchdogTimer(object): 11 """A resetable timeout-based watchdog. 12 13 This object is threadsafe. 14 """ 15 16 def __init__(self, timeout): 17 """Initializes the watchdog. 18 19 Args: 20 timeout: The timeout in seconds. If timeout is None it will never timeout. 21 """ 22 self._start_time = time.time() 23 self._timeout = timeout 24 25 def Reset(self): 26 """Resets the timeout countdown.""" 27 self._start_time = time.time() 28 29 def GetElapsed(self): 30 """Returns the elapsed time of the watchdog.""" 31 return time.time() - self._start_time 32 33 def GetRemaining(self): 34 """Returns the remaining time of the watchdog.""" 35 if self._timeout: 36 return self._timeout - self.GetElapsed() 37 else: 38 return None 39 40 def IsTimedOut(self): 41 """Whether the watchdog has timed out. 42 43 Returns: 44 True if the watchdog has timed out, False otherwise. 45 """ 46 remaining = self.GetRemaining() 47 return remaining is not None and remaining < 0 48