1234567891011121314151617181920212223242526 |
- (* Runtime support for high precision timer *)
- (* Copyright (C) Florian Negele *)
- MODULE Timer;
- IMPORT Unix;
- CONST Clock = Unix.CLOCK_MONOTONIC;
- TYPE Counter* = LONGWORD;
- PROCEDURE GetCounter- (): Counter;
- VAR timespec: Unix.Timespec; result: Counter;
- BEGIN {UNCOOPERATIVE, UNCHECKED}
- ASSERT (Unix.clock_gettime (Clock, ADDRESS OF timespec) = 0);
- result := timespec.tv_sec; result := result * 1000000; INC (result, timespec.tv_nsec DIV 1000); RETURN result;
- END GetCounter;
- PROCEDURE GetFrequency- (): Counter;
- VAR timespec: Unix.Timespec;
- BEGIN {UNCOOPERATIVE, UNCHECKED}
- IF Unix.clock_getres (Clock, ADDRESS OF timespec) # 0 THEN RETURN 0 END;
- ASSERT ((timespec.tv_sec = 0) & (timespec.tv_nsec = 1)); RETURN 1000000;
- END GetFrequency;
- END Timer.
|