Source code for robotpy_ext.misc.looptimer

import logging
import math
import wpilib

_getFPGATimestamp = wpilib.Timer.getFPGATimestamp


[docs] class LoopTimer: """ A utility class that measures the number of loops that a robot program executes, and computes the min/max/average period for loops in the last second. Example usage:: class Robot(wpilib.TimedRobot): def teleopInit(self): self.loop_timer = LoopTimer(self.logger) def teleopPeriodic(self): self.loop_timer.measure() Mainly intended for debugging purposes to measure how much lag. """ def __init__(self, logger: logging.Logger): self.logger = logger self.timer = wpilib.Timer() self.timer.start() self.reset()
[docs] def reset(self) -> None: self.timer.reset() self.start = self.last = _getFPGATimestamp() self.min_time = math.inf self.max_time = -1 self.loops = 0
[docs] def measure(self) -> None: """ Computes loop performance information and periodically dumps it to the info logger. """ # compute min/max/count now = _getFPGATimestamp() diff = now - self.last self.min_time = min(self.min_time, diff) self.max_time = max(self.max_time, diff) self.loops += 1 self.last = now if self.timer.advanceIfElapsed(1): self.logger.info( "Loops: %d; min: %.3f; max: %.3f; period: %.3f; avg: %.3f", self.loops, self.min_time, self.max_time, now - self.start, (now - self.start) / self.loops, ) self.min_time = math.inf self.max_time = -1 self.start = now self.loops = 0