[Python-checkins] bpo-37707: Exclude expensive unit tests from PGO task (GH-15009) (#15024)
Neil Schemenauer
webhook-mailer at python.org
Tue Jul 30 14:34:49 EDT 2019
https://github.com/python/cpython/commit/382cb85401bb010ead411c0532499ffe16c3cf27
commit: 382cb85401bb010ead411c0532499ffe16c3cf27
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: Neil Schemenauer <nas-github at arctrix.com>
date: 2019-07-30T11:34:32-07:00
summary:
bpo-37707: Exclude expensive unit tests from PGO task (GH-15009) (#15024)
Mark some individual tests to skip when --pgo is used. The tests
marked increase the PGO task time significantly and likely don't
help improve optimization of the final executable.
(cherry picked from commit 52a48e62c6a94577152f9301bbe5f3bc806cfcf1)
Co-authored-by: Neil Schemenauer <nas-github at arctrix.com>
files:
A Misc/NEWS.d/next/Build/2019-07-29-11-36-16.bpo-37707.Sm-dGk.rst
M Lib/test/libregrtest/main.py
M Lib/test/pickletester.py
M Lib/test/support/__init__.py
M Lib/test/test_bz2.py
M Lib/test/test_itertools.py
M Lib/test/test_lzma.py
M Lib/test/test_statistics.py
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 2b6607df15dd..87278d0c76a2 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -643,6 +643,7 @@ def _main(self, tests, kwargs):
input("Press any key to continue...")
support.PGO = self.ns.pgo
+ support.PGO_EXTENDED = self.ns.pgo_extended
setup_tests(self.ns)
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 2bc99e6becfd..5d402a4711bf 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -2281,6 +2281,7 @@ def test_setitems_on_non_dicts(self):
FRAME_SIZE_MIN = 4
FRAME_SIZE_TARGET = 64 * 1024
+ @support.skip_if_pgo_task
def check_frame_opcodes(self, pickled):
"""
Check the arguments of FRAME opcodes in a protocol 4+ pickle.
@@ -2328,6 +2329,7 @@ def check_frame_opcodes(self, pickled):
elif frameless_start is not None:
self.assertLess(pos - frameless_start, self.FRAME_SIZE_MIN)
+ @support.skip_if_pgo_task
def test_framing_many_objects(self):
obj = list(range(10**5))
for proto in range(4, pickle.HIGHEST_PROTOCOL + 1):
@@ -2417,6 +2419,7 @@ def remove_frames(pickled, keep_frame=None):
count_opcode(pickle.FRAME, pickled))
self.assertEqual(obj, self.loads(some_frames_pickle))
+ @support.skip_if_pgo_task
def test_framed_write_sizes_with_delayed_writer(self):
class ChunkAccumulator:
"""Accumulate pickler output in a list of raw chunks."""
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 1ada1f927d9c..b88eb5804a96 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -971,6 +971,10 @@ def dec(*args, **kwargs):
# useful for PGO
PGO = False
+# Set by libregrtest/main.py if we are running the extended (time consuming)
+# PGO task. If this is True, PGO is also True.
+PGO_EXTENDED = False
+
@contextlib.contextmanager
def temp_dir(path=None, quiet=False):
"""Return a context manager that creates a temporary directory.
@@ -2636,6 +2640,12 @@ def skip_unless_xattr(test):
msg = "no non-broken extended attribute support"
return test if ok else unittest.skip(msg)(test)
+def skip_if_pgo_task(test):
+ """Skip decorator for tests not run in (non-extended) PGO task"""
+ ok = not PGO or PGO_EXTENDED
+ msg = "Not run for (non-extended) PGO task"
+ return test if ok else unittest.skip(msg)(test)
+
_bind_nix_socket_error = None
def skip_unless_bind_unix_socket(test):
"""Decorator for tests requiring a functional bind() for unix sockets."""
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index f158b901b9c9..eb2f72ee4a5d 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -643,6 +643,7 @@ def testCompressChunks10(self):
data += bz2c.flush()
self.assertEqual(ext_decompress(data), self.TEXT)
+ @support.skip_if_pgo_task
@bigmemtest(size=_4G + 100, memuse=2)
def testCompress4G(self, size):
# "Test BZ2Compressor.compress()/flush() with >4GiB input"
@@ -701,6 +702,7 @@ def testEOFError(self):
self.assertRaises(EOFError, bz2d.decompress, b"anything")
self.assertRaises(EOFError, bz2d.decompress, b"")
+ @support.skip_if_pgo_task
@bigmemtest(size=_4G + 100, memuse=3.3)
def testDecompress4G(self, size):
# "Test BZ2Decompressor.decompress() with >4GiB input"
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index ea060a98a5ee..573739fde14c 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -2062,6 +2062,7 @@ def gen2(x):
self.assertRaises(AssertionError, list, cycle(gen1()))
self.assertEqual(hist, [0,1])
+ @support.skip_if_pgo_task
def test_long_chain_of_empty_iterables(self):
# Make sure itertools.chain doesn't run into recursion limits when
# dealing with long chains of empty iterables. Even with a high
diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py
index 3dc2c1e7e3b7..117de0a1b554 100644
--- a/Lib/test/test_lzma.py
+++ b/Lib/test/test_lzma.py
@@ -333,6 +333,7 @@ def test_decompressor_multistream(self):
# Test with inputs larger than 4GiB.
+ @support.skip_if_pgo_task
@bigmemtest(size=_4G + 100, memuse=2)
def test_compressor_bigmem(self, size):
lzc = LZMACompressor()
@@ -344,6 +345,7 @@ def test_compressor_bigmem(self, size):
finally:
ddata = None
+ @support.skip_if_pgo_task
@bigmemtest(size=_4G + 100, memuse=3)
def test_decompressor_bigmem(self, size):
lzd = LZMADecompressor()
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
index ed2f6579b0b9..104718ed7db6 100644
--- a/Lib/test/test_statistics.py
+++ b/Lib/test/test_statistics.py
@@ -14,6 +14,7 @@
import random
import sys
import unittest
+from test import support
from decimal import Decimal
from fractions import Fraction
@@ -2462,6 +2463,7 @@ def test_cdf(self):
self.assertEqual(X.cdf(float('Inf')), 1.0)
self.assertTrue(math.isnan(X.cdf(float('NaN'))))
+ @support.skip_if_pgo_task
def test_inv_cdf(self):
NormalDist = statistics.NormalDist
diff --git a/Misc/NEWS.d/next/Build/2019-07-29-11-36-16.bpo-37707.Sm-dGk.rst b/Misc/NEWS.d/next/Build/2019-07-29-11-36-16.bpo-37707.Sm-dGk.rst
new file mode 100644
index 000000000000..c0d58ab747b2
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2019-07-29-11-36-16.bpo-37707.Sm-dGk.rst
@@ -0,0 +1,3 @@
+Mark some individual tests to skip when --pgo is used. The tests marked
+increase the PGO task time significantly and likely don't help improve
+optimization of the final executable.
More information about the Python-checkins
mailing list