perf.odin 661 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package time
  2. Tick :: struct {
  3. _nsec: i64, // relative amount
  4. }
  5. tick_now :: proc() -> Tick {
  6. return _tick_now();
  7. }
  8. tick_diff :: proc(start, end: Tick) -> Duration {
  9. d := end._nsec - start._nsec;
  10. return Duration(d);
  11. }
  12. tick_lap_time :: proc(prev: ^Tick) -> Duration {
  13. d: Duration;
  14. t := tick_now();
  15. if prev._nsec != 0 {
  16. d = tick_diff(prev^, t);
  17. }
  18. prev^ = t;
  19. return d;
  20. }
  21. tick_since :: proc(start: Tick) -> Duration {
  22. return tick_diff(start, tick_now());
  23. }
  24. @(deferred_in_out=_tick_duration_end)
  25. SCOPED_TICK_DURATION :: proc(d: ^Duration) -> Tick {
  26. return tick_now();
  27. }
  28. _tick_duration_end :: proc(d: ^Duration, t: Tick) {
  29. d^ = tick_since(t);
  30. }