Skip to content

Instantly share code, notes, and snippets.

@shiguruikai
Created January 8, 2026 06:26
Show Gist options
  • Select an option

  • Save shiguruikai/cc8afbc3ad6705b0d0989febdfc99374 to your computer and use it in GitHub Desktop.

Select an option

Save shiguruikai/cc8afbc3ad6705b0d0989febdfc99374 to your computer and use it in GitHub Desktop.
import time
class FrameRateController:
def __init__(self, target_fps: float, smooth_alpha: float = 0.05):
self.target_fps = target_fps
self.target_frame_duration = 1.0 / target_fps
self.last_frame_time = time.perf_counter()
self.sleep_time = 0.0
self.smooth_alpha = smooth_alpha
self.smooth_frame_time = -1.0
def _update_fps_metrics(self, frame_time):
if self.smooth_frame_time < 0:
self.smooth_frame_time = self.target_frame_duration
else:
self.smooth_frame_time = self.smooth_alpha * frame_time + (1 - self.smooth_alpha) * self.smooth_frame_time
def get_fps(self) -> float:
return 1.0 / self.smooth_frame_time if self.smooth_frame_time > 0 else 0.0
def update(self) -> float:
now = time.perf_counter()
frame_time = now - self.last_frame_time
self.last_frame_time = now
self._update_fps_metrics(frame_time)
proc_time = frame_time - self.sleep_time
self.sleep_time = max(0.0, self.target_frame_duration - proc_time)
return self.sleep_time
import time
class FrameRateCounter:
def __init__(self, smooth_alpha: float = 0.05):
self.last_frame_time = time.perf_counter()
self.smooth_alpha = smooth_alpha
self.smooth_frame_time = -1.0
def reset(self):
self.last_frame_time = time.perf_counter()
self.smooth_frame_time = -1.0
def get_fps(self) -> float:
return 1.0 / self.smooth_frame_time if self.smooth_frame_time > 0 else 0.0
def update(self):
now = time.perf_counter()
frame_time = now - self.last_frame_time
self.last_frame_time = now
if self.smooth_frame_time < 0:
self.smooth_frame_time = frame_time
else:
self.smooth_frame_time = self.smooth_alpha * frame_time + (1 - self.smooth_alpha) * self.smooth_frame_time
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment