Sindbad~EG File Manager

Current Path : /proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/
Upload File :
Current File : //proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/test_perf_profiler.cpython-312.pyc

�

'Μg-��*�ddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
mZmZddl
mZejsej d��ej"ddd��rej d��d	�Ze�sej d
��Gd�dej&�Zd
�Zd�Zd�Zej0e�d�ej0e�d�Gd�dej&���Zedk(rej6�yy)�N)�support)�make_script�assert_python_failure�assert_python_ok)�temp_dirztest module requires subprocessT)�address�memory�ubz,test crash randomly on ASAN/MSAN/UBSAN buildc�N�tjd�}|syt|�dk(S)N�PY_HAVE_PERF_TRAMPOLINEF�)�	sysconfig�get_config_var�int)�perf_trampolines �4/usr/local/lib/python3.12/test/test_perf_profiler.py�supports_trampoline_profilingrs)���.�.�/H�I�O������1�$�$�z'perf trampoline profiling not supportedc�N��eZdZ�fd�Zd	�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)
�TestPerfTrampolinec���t�|��ttjd�jd��|_y�Nz/tmp/z
perf-*.map��super�setUp�set�pathlib�Path�glob�
perf_files��self�	__class__s �rrzTestPerfTrampoline.setUp&�,���
��
���g�l�l�7�3�8�8��F�G��rc����t�|��ttjd�jd��|jz
}|D]}|j��yr�r�tearDownrrrrr �unlink�r"�files_to_delete�filer#s   �rr'zTestPerfTrampoline.tearDown*�M���
��������W�%�*�*�<�8�9�D�O�O�K�	�$�D��K�K�M�$rc��
�d}t�5}t|d|�}tjtj
d|gdtjtj��5}|j�\}}ddd�ddd�|jd�|jd�tjdj�d��}|j|j��|j�}|j�}	d	��d
|��d|��g}
|
D]��
t!�
fd�|	D�d�}|j#|d
�
�d��|j%d�d}|j'|j)d�d�|jt+|�j-t.j0�d���y#1swY��FxYw#1swY��KxYw)Nz�if 1:
                def foo():
                    pass

                def bar():
                    foo()

                def baz():
                    bar()

                baz()
                �perftest�-XperfT��text�stderr�stdout��
/tmp/perf-�.map�py::foo:�py::bar:�py::baz:c3�,�K�|]}�|vs�|���
y�w)N�)�.0�line�expected_symbols  �r�	<genexpr>z;TestPerfTrampoline.test_trampoline_works.<locals>.<genexpr>Rs�����U�z�t�_�PT�=T�d�z�s�	�zCould not find z
 in perf file� r�0xz&Address should not be prefixed with 0xz*Address should contain only hex characters)rr�
subprocess�Popen�sys�
executable�PIPE�communicate�assertEqualrr�pid�
assertTrue�exists�	read_text�
splitlines�next�assertIsNotNone�split�assertFalse�
startswithr�issubset�string�	hexdigits)r"�code�
script_dir�script�processr3r2�	perf_file�perf_file_contents�
perf_lines�expected_symbols�	perf_line�	perf_addrr>s             @r�test_trampoline_worksz(TestPerfTrampoline.test_trampoline_works2s�������Z�:� ��Z��>�F��!�!�����6�2��!���!���	�
�!(�!4�!4�!6����
��	
�����$������$��L�L�:�g�k�k�]�$�!?�@�	����	�(�(�*�+�&�0�0�2��'�2�2�4�
�&�v�h�/�8�F�8�1D��QW�PX�FY�Z��/�O��U�z�U�W[�\�I�� � ��o�o�=N�m�,\�]�!����,�Q�/�I����Y�1�1�$�7�9a�b��O�O�C�	�N�3�3�F�4D�4D�E�Gs�t� 0�!����Z�s$�AG�"F:�6G�:G	�?G�Gc��d}t�5}t|d|�}tjtj
d|gdtjtj��5}|j�\}}ddd�ddd�|jjd�|jd�tj��}tjd|j�d	��}tjd|�d	��}	|j|j!��|j|	j!��|j#�}
|j%d
��|
�|j%d|��|
�|j%d|��|
�|	j#�}|j%d
|��|�|j%d|��|�|j%d|��|�y#1swY��rxYw#1swY��wxYw)Na�if 1:
                import os, sys

                def foo_fork():
                    pass

                def bar_fork():
                    foo_fork()

                def baz_fork():
                    bar_fork()

                def foo():
                    pid = os.fork()
                    if pid == 0:
                        print(os.getpid())
                        baz_fork()
                    else:
                        _, status = os.waitpid(-1, 0)
                        sys.exit(status)

                def bar():
                    foo()

                def baz():
                    bar()

                baz()
                r.r/Tr0rr4r5r6r7r8r9z
py::foo_fork:z
py::bar_fork:z
py::baz_fork:)rrrBrCrDrErFrGrH�
returncoder�striprrrIrJrKrL�assertIn)r"rVrWrXrYr3r2�	child_pidrZ�perf_child_filer[�child_perf_file_contentss            r� test_trampoline_works_with_forksz3TestPerfTrampoline.test_trampoline_works_with_forksXs�����:�Z�:� ��Z��>�F��!�!�����6�2��!���!���	�
�!(�!4�!4�!6����
��	
����+�+�Q�/������$������'�	��L�L�:�g�k�k�]�$�!?�@�	�!�,�,��I�;�d�'C�D�����	�(�(�*�+�����.�.�0�1�&�0�0�2���
�
����)�+=�>��
�
����)�+=�>��
�
����)�+=�>�#2�#<�#<�#>� ��
�
�
�f�X�.�0H�I��
�
�
�f�X�.�0H�I��
�
�
�f�X�.�0H�I�1����Z�s$�AG2�!G%�5G2�%G/	�*G2�2G<c���d}t�5}t|d|�}tjtj
|gdtjtj��5}|j�\}}ddd�ddd�|jd�|jd�tjdj�d��}|j|j��|j�}|jd��|�|j!d	|��|�|j!d
|��|�|j!d|��|�y#1swY��xYw#1swY��xYw)Na�if 1:
                import sys
                def foo():
                    pass

                def spam():
                    pass

                def bar():
                    sys.deactivate_stack_trampoline()
                    foo()
                    sys.activate_stack_trampoline("perf")
                    spam()

                def baz():
                    bar()

                sys.activate_stack_trampoline("perf")
                baz()
                r.Tr0r4r5r6r7z	py::spam:r8r9)rrrBrCrDrErFrGrHrrrIrJrKrL�assertNotInrd)	r"rVrWrXrYr3r2rZr[s	         r�test_sys_apizTestPerfTrampoline.test_sys_api�s:����(�Z�:� ��Z��>�F��!�!�����(��!���!���	�
�!(�!4�!4�!6����
��	
�����$������$��L�L�:�g�k�k�]�$�!?�@�	����	�(�(�*�+�&�0�0�2�����8�F�8�,�.@�A��
�
�	�&��*�,>�?��
�
����)�+=�>��
�
����)�+=�>�#����Z�s$�AE� E�4E�E	�E�E$c� �d}td|�y)Nz�if 1:
                import sys
                sys.activate_stack_trampoline("perf")
                sys.activate_stack_trampoline("perf")
                �-c�r�r"rVs  r�%test_sys_api_with_existing_trampolinez8TestPerfTrampoline.test_sys_api_with_existing_trampoline�s����
	��t�$rc�h�d}td|�\}}}|jd|j��y)Nzjif 1:
                import sys
                sys.activate_stack_trampoline("invalid")
                rmzinvalid backend: invalid)rrd�decode)r"rV�rc�out�errs     r�$test_sys_api_with_invalid_trampolinez7TestPerfTrampoline.test_sys_api_with_invalid_trampoline�s2����-�T�4�8���C���
�
�0�#�*�*�,�?rc� �d}td|�y)Naif 1:
                import sys
                sys.activate_stack_trampoline("perf")
                assert sys.is_stack_trampoline_active() is True
                sys.deactivate_stack_trampoline()
                assert sys.is_stack_trampoline_active() is False
                rmrnros  r�test_sys_api_get_statusz*TestPerfTrampoline.test_sys_api_get_status�s����	��t�$r��returnN)�__name__�
__module__�__qualname__rr'r`rhrkrprvrx�
__classcell__�r#s@rrr%s2���H��$u�L8J�t(?�T%�@�%rrc�:�tjd�}|syd|vS)N�PY_CORE_CFLAGSFzno-omit-frame-pointer)rr)�cflagss r�is_unwinding_reliabler��s$��
�
%�
%�&6�
7�F���"�f�,�,rc��	ddg}tj|d��}d|vryt	�5}	|dz}ddd	d
d|dt
jd
df
}tj||dtj��}d|vr
	ddd�y	ddd�y#tjtf$rYywxYw#tjtf$rYddd�ywxYw#1swYyxYw)N�perfz--helpT)r1Fz	perf.data�/perf_output.perf�record�-g�--call-graph=fp�-o�--rmzprint("hello"))�cwdr1r2�hello)rB�check_output�SubprocessError�OSErrorrrDrE�STDOUT)�cmdr3rW�output_files    r�perf_command_worksr��s����x� ���(�(��4�8���&� ��
��z�	�$�':�:�K����!�������� ��C� �,�,���$�z�7H�7H��F��&� ��-
��*!�+
�0��C
�&�&��0�����6�*�*�G�4�	��'
��$	��%
�0�s@�B�C�AB+�4C�B(�'B(�+C�C�C�C�Cc�P�|r0tjj�}|j|�nd}|dz}ddddd|df}t	j
||ztjtj|��}|jr-t|j�td	|j����d
}t	j
ddd|ftjtj|d
��}|jjdd�|jjdd�fS)Nr�r�r�r�r�r�r�)r3r2�envzPerf failed with return code )r�rXrXz-iT)r3r2r��checkzutf-8�replace)
�os�environ�copy�updaterB�runrFrb�printr2�
ValueErrorr3rr)r��args�env_varsr�r��base_cmd�procs       r�run_perfr�s����j�j�o�o����
�
�8�����+�+�K���$�(9�4��d�S�H��>�>��4���������	�D����
�d�k�k���8����8I�J�K�K�!�H��>�>�	��4��-����������D��;�;���g�y�1�4�;�;�3E�3E���4��rzperf command doesn't workzUnwinding is unreliablec�6��eZdZ�fd�Zd�fd�Zd�Zd�Z�xZS)�TestPerfProfilerc���t�|��ttjd�jd��|_yrrr!s �rrzTestPerfProfiler.setUp(r$rc����t�|��ttjd�jd��|jz
}|D]}|j��yrr&r)s   �rr'zTestPerfProfiler.tearDown,r,rc�@�t�5}d}t|d|�}t|tjd|�\}}|j|d�|j
d|��|�|j
d|��|�|j
d|��|�ddd�y#1swYyxYw)N�!if 1:
                def foo(n):
                    x = 0
                    for i in range(n):
                        x += i

                def bar(n):
                    foo(n)

                def baz(n):
                    bar(n)

                baz(10000000)
                r.r/r4r7r8r9)rrr�rDrErHrd�r"rWrVrXr3r2s      r�7test_python_calls_appear_in_the_stack_if_perf_activatedzHTestPerfProfiler.test_python_calls_appear_in_the_stack_if_perf_activated4s���
�Z�:�
�D�!��Z��>�F�%�j�#�.�.�(�F�S�N�F�F����V�R�(��M�M�H�V�H�-�v�6��M�M�H�V�H�-�v�6��M�M�H�V�H�-�v�6�+�Z�Z�s�BB�Bc�>�t�5}d}t|d|�}t|tj|�\}}|j|d�|j
d|��|�|j
d|��|�|j
d|��|�ddd�y#1swYyxYw)Nr�r.r4r7r8r9)rrr�rDrErHrjr�s      r�>test_python_calls_do_not_appear_in_the_stack_if_perf_activatedzOTestPerfProfiler.test_python_calls_do_not_appear_in_the_stack_if_perf_activatedLs���
�Z�:�
�D�!��Z��>�F�%�j�#�.�.�&�I�N�F�F����V�R�(����x��x�0�&�9����x��x�0�&�9����x��x�0�&�9�+�Z�Z�s�A?B�Bry)r{r|r}rr'r�r�r~rs@rr�r�%s���H��7�0:rr��__main__)�unittestrTrBrDrr�r�testr�test.support.script_helperrrr�test.support.os_helperr�has_subprocess_support�SkipTest�check_sanitizerr�TestCaserr�r�r��
skipUnlessr�r{�mainr;rr�<module>r�s)���
��
��	�����
,��%�%�
�(�
�
�=�
>�>��7���4���>��(�
�
�J�
K�K�%�%�&�
�(�
�
�E�
F�F�o%��*�*�o%�d-�%�P�>����'�)�+F�G�����*�,�.G�H�;:�x�(�(�;:�I�H�;:�|�z���H�M�M�O�r

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists