[pypy-commit] pypy py3k-get_clock_info: add get_clock_info('process_time')
pjenvey
pypy.commits at gmail.com
Sat May 28 00:27:36 EDT 2016
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k-get_clock_info
Changeset: r84772:8f5877a05ea5
Date: 2016-05-27 21:26 -0700
http://bitbucket.org/pypy/pypy/changeset/8f5877a05ea5/
Log: add get_clock_info('process_time')
diff --git a/pypy/module/time/interp_time.py b/pypy/module/time/interp_time.py
--- a/pypy/module/time/interp_time.py
+++ b/pypy/module/time/interp_time.py
@@ -934,7 +934,7 @@
if _WIN:
# untested so far
- def process_time(space):
+ def process_time(space, w_info=None):
from rpython.rlib.rposix import GetCurrentProcess, GetProcessTimes
current_process = GetCurrentProcess()
with lltype.scoped_alloc(rwin32.FILETIME) as creation_time, \
@@ -947,29 +947,48 @@
kernel_time.c_dwHighDateTime << 32)
user_time2 = (user_time.c_dwLowDateTime |
user_time.c_dwHighDateTime << 32)
+ if w_info is not None:
+ fill_clock_info(space, w_info,
+ "GetProcessTimes()", 1e-7, True, False)
return space.wrap((float(kernel_time2) + float(user_time2)) * 1e-7)
else:
have_times = hasattr(rposix, 'c_times')
- def process_time(space):
+ def process_time(space, w_info=None):
if HAS_CLOCK_GETTIME and (
cConfig.CLOCK_PROF is not None or
cConfig.CLOCK_PROCESS_CPUTIME_ID is not None):
if cConfig.CLOCK_PROF is not None:
clk_id = cConfig.CLOCK_PROF
+ function = "clock_gettime(CLOCK_PROF)"
else:
clk_id = cConfig.CLOCK_PROCESS_CPUTIME_ID
+ function = "clock_gettime(CLOCK_PROCESS_CPUTIME_ID)"
with lltype.scoped_alloc(TIMESPEC) as timespec:
ret = c_clock_gettime(clk_id, timespec)
if ret == 0:
+ if w_info is not None:
+ with lltype.scoped_alloc(TIMESPEC) as tsres:
+ ret = c_clock_gettime(clk_id, tsres)
+ if ret == 0:
+ res = tsres.c_tv_sec + tsres.c_tv_nsec * 1e-9
+ else:
+ res = 1e-9
+ fill_clock_info(space, w_info, function,
+ res, True, False)
return space.wrap(_timespec_to_seconds(timespec))
+
if True: # XXX available except if it isn't?
from rpython.rlib.rtime import (c_getrusage, RUSAGE, RUSAGE_SELF,
decode_timeval)
with lltype.scoped_alloc(RUSAGE) as rusage:
ret = c_getrusage(RUSAGE_SELF, rusage)
if ret == 0:
+ if w_info is not None:
+ fill_clock_info(space, w_info,
+ "getrusage(RUSAGE_SELF)",
+ 1e-6, True, False)
return space.wrap(decode_timeval(rusage.c_ru_utime) +
decode_timeval(rusage.c_ru_stime))
if have_times:
@@ -977,6 +996,10 @@
ret = rposix.c_times(tms)
if rffi.cast(lltype.Signed, ret) != -1:
cpu_time = float(tms.c_tms_utime + tms.c_tms_stime)
+ if w_info is not None:
+ fill_clock_info(space, w_info, "times()",
+ 1.0 / rposix.CLOCK_TICKS_PER_SECOND,
+ True, False)
return space.wrap(cpu_time / rposix.CLOCK_TICKS_PER_SECOND)
return clock(space)
@@ -1016,6 +1039,13 @@
return space.wrap((1.0 * value) / CLOCKS_PER_SEC)
+def fill_clock_info(space, w_info, impl, res, mono, adj):
+ space.setattr(w_info, space.wrap('implementation'), space.wrap(impl))
+ space.setattr(w_info, space.wrap('resolution'), space.wrap(res))
+ space.setattr(w_info, space.wrap('monotonic'), space.wrap(mono))
+ space.setattr(w_info, space.wrap('adjustable'), space.wrap(adj))
+
+
def get_clock_info_dict(space, name):
if name == "time":
return 5#floattime(info)
diff --git a/pypy/module/time/test/test_time.py b/pypy/module/time/test/test_time.py
--- a/pypy/module/time/test/test_time.py
+++ b/pypy/module/time/test/test_time.py
@@ -397,3 +397,10 @@
# Not really sure what to test about this
# At least this tests that the attr exists...
assert clock_info.resolution > 0
+
+ def test_get_clock_info_process_time(self):
+ import time
+ clock_info = time.get_clock_info("process_time")
+ assert clock_info.monotonic
+ assert not clock_info.adjustable
+ assert clock_info.resolution > 0
More information about the pypy-commit
mailing list