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