| Index: chrome/test/pyautolib/timer_queue.py
|
| ===================================================================
|
| --- chrome/test/pyautolib/timer_queue.py (revision 261231)
|
| +++ chrome/test/pyautolib/timer_queue.py (working copy)
|
| @@ -1,85 +0,0 @@
|
| -# Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import copy
|
| -import threading
|
| -import time
|
| -
|
| -class TimerQueue(threading.Thread):
|
| - """Executes timers at a given interval.
|
| -
|
| - This class provides the ability to run methods at a given interval. All
|
| - methods are fired synchronously. Only one method is running at a time.
|
| -
|
| - Example of using TimerQueue:
|
| - def _fooPrinter(word):
|
| - print('foo : %s' % word)
|
| -
|
| - timers = TimerQueue()
|
| - timers.addTimer(self._fooPrinter, 15, args=('hello',))
|
| - timers.start()
|
| -
|
| - >> hello will be printed after 15 seconds
|
| -
|
| - Note: TimerQueue is a subclass of threading.Thread, call start() to activate;
|
| - do not call run() directly.
|
| - """
|
| -
|
| - def __init__(self):
|
| - """Initializes a TimerQueue object."""
|
| - threading.Thread.__init__(self, name='timer_thread')
|
| - self.timer_queue_lock = threading.Lock()
|
| - self.terminate = False
|
| - self.wait_time = 1
|
| - self.timers = []
|
| -
|
| - def AddTimer(self, method, interval, args=()):
|
| - """Adds a timer to the queue.
|
| -
|
| - Args:
|
| - method: the method to be called at the given interval
|
| - interval: delay between method runs, in seconds
|
| - args: arguments to be passed to the method
|
| - """
|
| - self.timer_queue_lock.acquire()
|
| - next_time = time.time() + interval
|
| - self.timers.append({'method': method, 'interval': interval,
|
| - 'next time': next_time, 'args': copy.copy(args)})
|
| - self.timer_queue_lock.release()
|
| -
|
| - def SetResolution(self, resolution):
|
| - """Sets the timer check frequency, in seconds."""
|
| - self.wait_time = resolution
|
| -
|
| - def RemoveTimer(self, method):
|
| - """Removes a timer from the queue.
|
| -
|
| - Args:
|
| - method: the timer containing the given method to be removed
|
| - """
|
| - self.timer_queue_lock.acquire()
|
| - for timer in self.timers:
|
| - if timer['method'] == method:
|
| - self.timers.remove(timer)
|
| - break
|
| - self.timer_queue_lock.release()
|
| -
|
| - def Stop(self):
|
| - """Stops the timer."""
|
| - self.terminate = True
|
| -
|
| - def run(self):
|
| - """Primary run loop for the timer."""
|
| - while True:
|
| - now = time.time()
|
| - self.timer_queue_lock.acquire()
|
| - for timer in self.timers:
|
| - if timer['next time'] <= now:
|
| - # Use * to break the list into separate arguments
|
| - timer['method'](*timer['args'])
|
| - timer['next time'] += timer['interval']
|
| - self.timer_queue_lock.release()
|
| - if self.terminate:
|
| - return
|
| - time.sleep(self.wait_time)
|
|
|