Unix.Timer.Mod 759 B

1234567891011121314151617181920212223242526
  1. (* Runtime support for high precision timer *)
  2. (* Copyright (C) Florian Negele *)
  3. MODULE Timer;
  4. IMPORT Unix;
  5. CONST Clock = Unix.CLOCK_MONOTONIC;
  6. TYPE Counter* = LONGWORD;
  7. PROCEDURE GetCounter- (): Counter;
  8. VAR timespec: Unix.Timespec; result: Counter;
  9. BEGIN {UNCOOPERATIVE, UNCHECKED}
  10. ASSERT (Unix.clock_gettime (Clock, ADDRESS OF timespec) = 0);
  11. result := timespec.tv_sec; result := result * 1000000; INC (result, timespec.tv_nsec DIV 1000); RETURN result;
  12. END GetCounter;
  13. PROCEDURE GetFrequency- (): Counter;
  14. VAR timespec: Unix.Timespec;
  15. BEGIN {UNCOOPERATIVE, UNCHECKED}
  16. IF Unix.clock_getres (Clock, ADDRESS OF timespec) # 0 THEN RETURN 0 END;
  17. ASSERT ((timespec.tv_sec = 0) & (timespec.tv_nsec = 1)); RETURN 1000000;
  18. END GetFrequency;
  19. END Timer.