Home | History | Annotate | Download | only in utils
      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 
      7 import time
      8 
      9 
     10 class 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 GetTimeout(self):
     41     """Returns the timout of the watchdog."""
     42     return self._timeout
     43 
     44   def IsTimedOut(self):
     45     """Whether the watchdog has timed out.
     46 
     47     Returns:
     48       True if the watchdog has timed out, False otherwise.
     49     """
     50     remaining = self.GetRemaining()
     51     return remaining is not None and remaining < 0
     52