| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import time |
| |
| |
| class Timer: |
| '''A timer to keep track of how long jobs have been running |
| |
| This has a notion of start time (the time when the object was constructed), |
| together with a time when the results should next be printed. |
| |
| ''' |
| |
| print_interval = 5 |
| |
| def __init__(self): |
| self.start = time.monotonic() |
| self.next_print = self.start + Timer.print_interval |
| self.first_print = True |
| |
| def period(self): |
| '''Return the float time in seconds since start''' |
| return time.monotonic() - self.start |
| |
| def hms(self): |
| '''Get the time since start in hh:mm:ss''' |
| period = self.period() |
| secs = int(period + 0.5) |
| mins = secs // 60 |
| hours = mins // 60 |
| return '{:02}:{:02}:{:02}'.format(hours, mins % 60, secs % 60) |
| |
| def check_time(self): |
| '''Return true if we have passed next_print. |
| |
| If so, increment next_print by print_interval unless the result would |
| be in the past, in which case set it to the current time plus |
| print_interval. |
| |
| ''' |
| now = time.monotonic() |
| |
| if self.first_print: |
| self.first_print = False |
| return True |
| |
| if now < self.next_print: |
| return False |
| |
| self.next_print += Timer.print_interval |
| if self.next_print <= now: |
| self.next_print = now + Timer.print_interval |
| |
| return True |