#!/usr/bin/env python3
# type: ignore

import os
import time
import numpy as np

import cereal.messaging as messaging
from openpilot.system.manager.process_config import managed_processes


N = int(os.getenv("N", "5"))
TIME = int(os.getenv("TIME", "30"))

if __name__ == "__main__":
  sock = messaging.sub_sock('modelV2', conflate=False, timeout=1000)

  execution_times = []

  for _ in range(N):
    os.environ['LOGPRINT'] = 'debug'
    managed_processes['modeld'].start()
    time.sleep(5)

    t = []
    start = time.monotonic()
    while time.monotonic() - start < TIME:
      msgs = messaging.drain_sock(sock, wait_for_one=True)
      for m in msgs:
        t.append(m.modelV2.modelExecutionTime)

    execution_times.append(np.array(t[10:]) * 1000)
    managed_processes['modeld'].stop()

  print("\n\n")
  print(f"ran modeld {N} times for {TIME}s each")
  for _, t in enumerate(execution_times):
    print(f"\tavg: {sum(t)/len(t):0.2f}ms, min: {min(t):0.2f}ms, max: {max(t):0.2f}ms")
  print("\n\n")
