Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 22 additions & 13 deletions 35 Lib/test/libregrtest/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ def __init__(self):
# used by --junit-xml
self.testsuite_xml = None

self.win_load_tracker = None

def get_executed(self):
return (set(self.good) | set(self.bad) | set(self.skipped)
| set(self.resource_denieds) | set(self.environment_changed)
Expand Down Expand Up @@ -154,9 +156,9 @@ def display_progress(self, test_index, text):
line = f"[{line}] {text}"

# add the system load prefix: "load avg: 1.80 "
if self.getloadavg:
load_avg_1min = self.getloadavg()
line = f"load avg: {load_avg_1min:.2f} {line}"
load_avg = self.getloadavg()
if load_avg is not None:
line = f"load avg: {load_avg:.2f} {line}"

# add the timestamp prefix: "0:01:05 "
test_time = time.monotonic() - self.start_time
Expand Down Expand Up @@ -490,6 +492,10 @@ def run_tests(self):
self.run_tests_sequential()

def finalize(self):
if self.win_load_tracker is not None:
self.win_load_tracker.close()
self.win_load_tracker = None

if self.next_single_filename:
if self.next_single_test:
with open(self.next_single_filename, 'w') as fp:
Expand Down Expand Up @@ -560,6 +566,15 @@ def main(self, tests=None, **kwargs):
with support.temp_cwd(test_cwd, quiet=True):
self._main(tests, kwargs)

def getloadavg(self):
if self.win_load_tracker is not None:
return self.win_load_tracker.getloadavg()

if hasattr(os, 'getloadavg'):
return os.getloadavg()[0]

return None

def _main(self, tests, kwargs):
if self.ns.huntrleaks:
warmup, repetitions, _ = self.ns.huntrleaks
Expand Down Expand Up @@ -591,23 +606,17 @@ def _main(self, tests, kwargs):
self.list_cases()
sys.exit(0)

self.getloadavg = None
# If we're on windows and this is the parent runner (not a worker),
# report the load average.
if hasattr(os, 'getloadavg'):
def getloadavg_1m():
return os.getloadavg()[0]
self.getloadavg = getloadavg_1m
elif sys.platform == 'win32' and (self.ns.worker_args is None):
# track the load average.
if sys.platform == 'win32' and (self.ns.worker_args is None):
from test.libregrtest.win_utils import WindowsLoadTracker

try:
load_tracker = WindowsLoadTracker()
self.getloadavg = load_tracker.getloadavg
self.win_load_tracker = WindowsLoadTracker()
except FileNotFoundError as error:
# Windows IoT Core and Windows Nano Server do not provide
# typeperf.exe for x64, x86 or ARM
print('Failed to create WindowsLoadTracker: {}'.format(error))
print(f'Failed to create WindowsLoadTracker: {error}')

self.run_tests()
self.display_result()
Expand Down
8 changes: 7 additions & 1 deletion 8 Lib/test/libregrtest/win_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,15 @@ def start(self):
# Close our copy of the write end of the pipe
os.close(command_stdout)

def __del__(self):
def close(self):
if self.p is None:
return
self.p.kill()
self.p.wait()
self.p = None

def __del__(self):
self.close()

def read_output(self):
import _winapi
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.