Skip to content

Commit

Permalink
gh-103053: Skip test_freeze_simple_script() on PGO build (#109591)
Browse files Browse the repository at this point in the history
Skip test_freeze_simple_script() of test_tools.test_freeze if Python
is built with "./configure --enable-optimizations", which means with
Profile Guided Optimization (PGO): it just makes the test too slow.
The freeze tool is tested by many other CIs with other (faster)
compiler flags.

test.pythoninfo now gets also get_build_info() of
test.libregrtests.utils.
  • Loading branch information
vstinner authored Sep 20, 2023
1 parent 3e3a7da commit 81cd1bd
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 10 deletions.
12 changes: 2 additions & 10 deletions Lib/test/libregrtest/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,16 +310,8 @@ def get_build_info():
elif '-flto' in ldflags_nodist:
optimizations.append('LTO')

# --enable-optimizations
pgo_options = (
# GCC
'-fprofile-use',
# clang: -fprofile-instr-use=code.profclangd
'-fprofile-instr-use',
# ICC
"-prof-use",
)
if any(option in cflags_nodist for option in pgo_options):
if support.check_cflags_pgo():
# PGO (--enable-optimizations)
optimizations.append('PGO')
if optimizations:
build.append('+'.join(optimizations))
Expand Down
11 changes: 11 additions & 0 deletions Lib/test/pythoninfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -956,6 +956,16 @@ def collect_tempfile(info_add):

info_add('tempfile.gettempdir', tempfile.gettempdir())


def collect_libregrtest_utils(info_add):
try:
from test.libregrtest import utils
except ImportError:
return

info_add('libregrtests.build_info', ' '.join(utils.get_build_info()))


def collect_info(info):
error = False
info_add = info.add
Expand Down Expand Up @@ -995,6 +1005,7 @@ def collect_info(info):
collect_tkinter,
collect_windows,
collect_zlib,
collect_libregrtest_utils,

# Collecting from tests should be last as they have side effects.
collect_test_socket,
Expand Down
15 changes: 15 additions & 0 deletions Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,21 @@ def python_is_optimized():
return final_opt not in ('', '-O0', '-Og')


def check_cflags_pgo():
# Check if Python was built with ./configure --enable-optimizations:
# with Profile Guided Optimization (PGO).
cflags_nodist = sysconfig.get_config_var('PY_CFLAGS_NODIST') or ''
pgo_options = (
# GCC
'-fprofile-use',
# clang: -fprofile-instr-use=code.profclangd
'-fprofile-instr-use',
# ICC
"-prof-use",
)
return any(option in cflags_nodist for option in pgo_options)


_header = 'nP'
_align = '0n'
_vheader = _header + 'n'
Expand Down
4 changes: 4 additions & 0 deletions Lib/test/test_tools/test_freeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
@support.requires_zlib()
@unittest.skipIf(sys.platform.startswith('win'), 'not supported on Windows')
@support.skip_if_buildbot('not all buildbots have enough space')
# gh-103053: Skip test if Python is built with Profile Guided Optimization
# (PGO), since the test is just too slow in this case.
@unittest.skipIf(support.check_cflags_pgo(),
'test is too slow with PGO')
class TestFreeze(unittest.TestCase):

@support.requires_resource('cpu') # Building Python is slow
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Skip test_freeze_simple_script() of test_tools.test_freeze if Python is built
with ``./configure --enable-optimizations``, which means with Profile Guided
Optimization (PGO): it just makes the test too slow. The freeze tool is tested
by many other CIs with other (faster) compiler flags. Patch by Victor Stinner.

0 comments on commit 81cd1bd

Please sign in to comment.