Skip to content

gh-107954: Fix configuration type for the perf profiler #124636

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 27, 2024
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
21 changes: 13 additions & 8 deletions Doc/c-api/init_config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1248,19 +1248,24 @@ PyConfig

.. c:member:: int perf_profiling

Enable compatibility mode with the perf profiler?
Enable the Linux ``perf`` profiler support?

If non-zero, initialize the perf trampoline. See :ref:`perf_profiling`
for more information.
If equals to ``1``, enable support for the Linux ``perf`` profiler.

Set by :option:`-X perf <-X>` command-line option and by the
:envvar:`PYTHON_PERF_JIT_SUPPORT` environment variable for perf support
with stack pointers and :option:`-X perf_jit <-X>` command-line option
and by the :envvar:`PYTHON_PERF_JIT_SUPPORT` environment variable for perf
support with DWARF JIT information.
If equals to ``2``, enable support for the Linux ``perf`` profiler with
DWARF JIT support.

Set to ``1`` by :option:`-X perf <-X>` command-line option and the
:envvar:`PYTHONPERFSUPPORT` environment variable.

Set to ``2`` by the :option:`-X perf_jit <-X>` command-line option and
the :envvar:`PYTHON_PERF_JIT_SUPPORT` environment variable.

Default: ``-1``.

.. seealso::
See :ref:`perf_profiling` for more information.

.. versionadded:: 3.12

.. c:member:: int use_environment
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_capi/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def test_config_get(self):
("parser_debug", bool, None),
("parse_argv", bool, None),
("pathconfig_warnings", bool, None),
("perf_profiling", bool, None),
("perf_profiling", int, None),
("platlibdir", str, "platlibdir"),
("prefix", str | None, "prefix"),
("program_name", str, None),
Expand Down
13 changes: 8 additions & 5 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -560,7 +560,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'cpu_count': -1,
'faulthandler': False,
'tracemalloc': 0,
'perf_profiling': False,
'perf_profiling': 0,
'import_time': False,
'code_debug_ranges': True,
'show_ref_count': False,
Expand Down Expand Up @@ -652,7 +652,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
use_hash_seed=False,
faulthandler=False,
tracemalloc=False,
perf_profiling=False,
perf_profiling=0,
pathconfig_warnings=False,
)
if MS_WINDOWS:
Expand Down Expand Up @@ -966,7 +966,7 @@ def test_init_from_config(self):
'use_hash_seed': True,
'hash_seed': 123,
'tracemalloc': 2,
'perf_profiling': False,
'perf_profiling': 0,
'import_time': True,
'code_debug_ranges': False,
'show_ref_count': True,
Expand Down Expand Up @@ -1031,7 +1031,7 @@ def test_init_compat_env(self):
'use_hash_seed': True,
'hash_seed': 42,
'tracemalloc': 2,
'perf_profiling': False,
'perf_profiling': 0,
'import_time': True,
'code_debug_ranges': False,
'malloc_stats': True,
Expand All @@ -1051,6 +1051,7 @@ def test_init_compat_env(self):
'module_search_paths': self.IGNORE_CONFIG,
'safe_path': True,
'int_max_str_digits': 4567,
'perf_profiling': 1,
}
if Py_STATS:
config['_pystats'] = 1
Expand All @@ -1066,7 +1067,7 @@ def test_init_python_env(self):
'use_hash_seed': True,
'hash_seed': 42,
'tracemalloc': 2,
'perf_profiling': False,
'perf_profiling': 0,
'import_time': True,
'code_debug_ranges': False,
'malloc_stats': True,
Expand All @@ -1086,6 +1087,7 @@ def test_init_python_env(self):
'module_search_paths': self.IGNORE_CONFIG,
'safe_path': True,
'int_max_str_digits': 4567,
'perf_profiling': 1,
}
if Py_STATS:
config['_pystats'] = True
Expand Down Expand Up @@ -1763,6 +1765,7 @@ def test_initconfig_api(self):
'xoptions': {'faulthandler': True},
'hash_seed': 10,
'use_hash_seed': True,
'perf_profiling': 2,
}
config_dev_mode(preconfig, config)
self.check_all_configs("test_initconfig_api", config, preconfig,
Expand Down
5 changes: 5 additions & 0 deletions Programs/_testembed.c
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,7 @@ static void set_most_env_vars(void)
#ifdef Py_STATS
putenv("PYTHONSTATS=1");
#endif
putenv("PYTHONPERFSUPPORT=1");
}


Expand Down Expand Up @@ -1844,6 +1845,10 @@ static int test_initconfig_api(void)
goto error;
}

if (PyInitConfig_SetInt(config, "perf_profiling", 2) < 0) {
goto error;
}

// Set a UTF-8 string (program_name)
if (PyInitConfig_SetStr(config, "program_name", PROGRAM_NAME_UTF8) < 0) {
goto error;
Expand Down
2 changes: 1 addition & 1 deletion Python/initconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ static const PyConfigSpec PYCONFIG_SPEC[] = {
SPEC(orig_argv, WSTR_LIST, READ_ONLY, SYS_ATTR("orig_argv")),
SPEC(parse_argv, BOOL, READ_ONLY, NO_SYS),
SPEC(pathconfig_warnings, BOOL, READ_ONLY, NO_SYS),
SPEC(perf_profiling, BOOL, READ_ONLY, NO_SYS),
SPEC(perf_profiling, UINT, READ_ONLY, NO_SYS),
SPEC(program_name, WSTR, READ_ONLY, NO_SYS),
SPEC(run_command, WSTR_OPT, READ_ONLY, NO_SYS),
SPEC(run_filename, WSTR_OPT, READ_ONLY, NO_SYS),
Expand Down
Loading