@@ -33,19 +33,44 @@ commands =
3333 diff-cover coverage.xml --compare-branch =origin/main --html-report diffcov.html
3434 diff-cover coverage.xml --compare-branch =origin/main --fail-under =100
3535
36+ [perf]
37+ deps =
38+ ipython
39+ pyperf
40+ path
41+ commands =
42+ python -c " import path; path.Path('{env:SCOPE}.json').remove_p()"
43+
44+ python -m pyperf timeit --name discovery --append {env:SCOPE}.json -s ' import importlib_metadata' ' importlib_metadata.distribution("ipython")'
45+
46+ python -m pyperf timeit --name ' entry_points()' --append {env:SCOPE}.json -s ' import importlib_metadata' ' importlib_metadata.entry_points()'
47+
48+ python -m pyperf timeit --name ' cached distribution' --append {env:SCOPE}.json -s ' import importlib_metadata; importlib_metadata.distribution("ipython")' ' importlib_metadata.distribution("ipython")'
49+
50+ python -m pyperf timeit --name ' uncached distribution' --append {env:SCOPE}.json -s ' import importlib, importlib_metadata' ' importlib.invalidate_caches(); importlib_metadata.distribution("ipython")'
51+
3652[testenv:perf]
3753use_develop = False
54+ # change dir to avoid picking up local package.
55+ changedir = {toxworkdir}
56+ setenv =
57+ SCOPE = local
58+ deps = {[perf]deps}
59+ commands = {[perf]commands}
60+
61+ [testenv:perf-ref]
62+ # compare perf results to the main branch
63+ skip_install = True
64+ # change dir to avoid picking up local package.
65+ changedir = {toxworkdir}
66+ setenv =
67+ SCOPE = main
3868deps =
39- ipython
69+ {[perf]deps}
70+ git+https://github.com/python/importlib_metadata
4071commands =
41- python -c ' print("Simple discovery performance")'
42- python -m timeit -s ' import importlib_metadata' -- ' importlib_metadata.distribution("ipython")'
43- python -c ' print("Entry point discovery performance")'
44- python -m timeit -s ' import importlib_metadata' -- ' importlib_metadata.entry_points()'
45- python -c ' print("Cached lookup performance")'
46- python -m timeit -s ' import importlib_metadata; importlib_metadata.distribution("ipython")' -- ' importlib_metadata.distribution("ipython")'
47- python -c ' print("Uncached lookup performance")'
48- python -m timeit -s ' import importlib, importlib_metadata' -- ' importlib.invalidate_caches(); importlib_metadata.distribution("ipython")'
72+ {[perf]commands}
73+ python -m pyperf compare_to --verbose main.json local.json --table
4974
5075[testenv:release]
5176skip_install = True
0 commit comments