blob: 95edb725e2c16d6a34cc764f84eabbf4ea7d28bd [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
from argparse import Namespace
import time
class Timing:
def __init__(self):
self.active_timing = None
self.committed = []
self.created_ns = time.time_ns()
def begin(self, title):
assert self.active_timing is None
self.active_timing = Namespace(title=title, start_ns=time.time_ns())
def end(self):
assert self.active_timing is not None
self.committed.append(Namespace(
title=self.active_timing.title,
duration_ns= time.time_ns() - self.active_timing.start_ns))
self.active_timing = None
def report(self):
assert self.active_timing is None
total_duration_ns = time.time_ns() - self.created_ns
timed_duration_ns = 0
for timing in self.committed:
print(f'{timing.title}: {timing.duration_ns // 1_000_000}ms')
timed_duration_ns = timed_duration_ns + timing.duration_ns
unaccounted_ns = total_duration_ns - timed_duration_ns
print(f'Unaccounted: {unaccounted_ns // 1_000_000}ms')