• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 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