Completed
Push — master ( 7b504c...b6f606 )
by Ionel Cristian
01:16
created

compute_timer_precision()   D

Complexity

Conditions 8

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
c 0
b 0
f 0
dl 0
loc 23
rs 4.7619
1
from time import time as timeout_timer
2
try:
3
    from __pypy__.time import clock_gettime
4
    from __pypy__.time import CLOCK_MONOTONIC
5
6
    def monotonic():
7
        return clock_gettime(CLOCK_MONOTONIC)
8
except ImportError:
9
    from timeit import default_timer
10
else:
11
    default_timer = monotonic
12
13
from .compat import XRANGE
14
15
16
def compute_timer_precision(timer):
17
    precision = None
18
    points = 0
19
    timeout = timeout_timer() + 1.0
20
    previous = timer()
21
    while timeout_timer() < timeout or points < 5:
22
        for _ in XRANGE(10):
23
            t1 = timer()
24
            t2 = timer()
25
            dt = t2 - t1
26
            if 0 < dt:
27
                break
28
        else:
29
            dt = t2 - previous
30
            if dt <= 0.0:
31
                continue
32
        if precision is not None:
33
            precision = min(precision, dt)
34
        else:
35
            precision = dt
36
        points += 1
37
        previous = timer()
38
    return precision
39