compute_timer_precision()   D
last analyzed

Complexity

Conditions 8

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

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