Performance prohibitively slow with RadioList in float container
Opened this issue · 1 comments
patrickkidd commented
I have a float container with a 50-item RadioList over my full-screen layout app. It seems like performance gets twice as slow - 2-3 second respond time to arrow key selections in the RadioList - in the float container. Then if we pop a simple yes/no dialog things get even slower. What techniques can I use to optimize performance for these?
patrickkidd commented
Looks like there can also be be very slow performance with anything that scrolls. I wonder where to start? Here is the notable profiler output capturing only up and down arrow keys that set a current highlighted line index in a text callback passed to a FormattedTextControl.
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
9 0.000 0.000 4.888 0.543 /home/pstinson/.pyenv/versions/3.9.13/lib/python3.9/asyncio/base_events.py:1830(_run_once)
53 0.000 0.000 4.887 0.092 /home/pstinson/.pyenv/versions/3.9.13/lib/python3.9/asyncio/events.py:78(_run)
57/53 0.000 0.000 4.887 0.092 {method 'run' of 'Context' objects}
7 0.000 0.000 4.629 0.661 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/eventloop/utils.py:69(schedule)
4 0.000 0.000 4.629 1.157 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:483(redraw)
4 0.000 0.000 4.629 1.157 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:515(_redraw)
4 0.000 0.000 4.629 1.157 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:523(run_in_context)
4 0.000 0.000 4.621 1.155 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/renderer.py:583(render)
4 0.001 0.000 4.556 1.139 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:798(write_to_screen)
8/4 0.000 0.000 4.555 1.139 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py:115(write_to_screen)
64 0.040 0.001 3.883 0.061 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:622(_divide_widths)
12/4 0.000 0.000 3.743 0.936 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:369(write_to_screen)
1084 0.003 0.000 3.170 0.003 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1630(_merge_dimensions)
64 0.000 0.000 3.136 0.049 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:633(<listcomp>)
464 0.002 0.000 3.133 0.007 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1572(preferred_width)
96 0.000 0.000 3.126 0.033 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1577(preferred_content_width)
44 0.000 0.000 3.125 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/controls.py:351(preferred_width)
144494 1.949 0.000 3.118 0.000 {built-in method builtins.sum}
68/56 0.000 0.000 3.112 0.056 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:560(preferred_height)
44 0.005 0.000 3.101 0.070 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/controls.py:357(<listcomp>)
7800 0.005 0.000 3.099 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/utils.py:172(get_cwidth)
3602 0.006 0.000 3.094 0.001 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/utils.py:141(__missing__)
20/12 0.000 0.000 2.778 0.231 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2647(write_to_screen)
32/20 0.000 0.000 2.349 0.117 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:322(preferred_height)
32/20 0.000 0.000 2.347 0.117 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:326(<listcomp>)
20/16 0.001 0.000 2.268 0.142 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:673(write_to_screen)
12 0.006 0.001 1.801 0.150 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:426(_divide_heights)
12 0.000 0.000 1.713 0.143 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:438(<listcomp>)
4 0.000 0.000 1.430 0.357 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2695(write_to_screen)
16 0.000 0.000 1.270 0.079 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2692(preferred_height)
16 0.000 0.000 1.270 0.079 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py:100(preferred_height)
48/32 0.000 0.000 1.261 0.039 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2641(preferred_height)
1030172 1.164 0.000 1.164 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/utils.py:150(<genexpr>)
16 0.000 0.000 1.141 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2689(preferred_width)
16 0.000 0.000 1.141 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py:86(preferred_width)
16 0.000 0.000 1.140 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:312(preferred_width)
16 0.000 0.000 1.139 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:317(<listcomp>)
16 0.000 0.000 1.138 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:550(preferred_width)
16 0.000 0.000 1.137 0.071 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:554(<listcomp>)
44/32 0.000 0.000 0.973 0.030 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:578(<listcomp>)
139052 0.309 0.000 0.766 0.000 {built-in method builtins.next}
139120 0.456 0.000 0.457 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/utils.py:237(take_using_weights)
20 0.000 0.000 0.325 0.016 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:705(<listcomp>)
200 0.001 0.000 0.270 0.001 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1701(write_to_screen)
200 0.003 0.000 0.268 0.001 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1758(_write_to_screen_at_index)
4 0.000 0.000 0.257 0.064 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/input/vt100.py:165(callback_wrapper)
4 0.000 0.000 0.257 0.064 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:692(read_from_input)
238 0.001 0.000 0.256 0.001 {method 'send' of 'generator' objects}
4 0.000 0.000 0.256 0.064 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py:226(process_keys)
60 0.001 0.000 0.255 0.004 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py:146(_process)
8 0.201 0.025 0.223 0.028 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py:278(_copy_over_mouse_handlers)
120 0.009 0.000 0.211 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:1433(_key_bindings)
4092 0.013 0.000 0.208 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/layout.py:83(find_all_controls)
4092 0.019 0.000 0.195 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/layout.py:75(find_all_windows)
96 0.001 0.000 0.177 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1941(_copy_body)
96 0.007 0.000 0.175 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2103(copy)
6448 0.021 0.000 0.173 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/layout.py:337(walk)
3192 0.168 0.000 0.168 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1978(copy_line)
46748/6448 0.149 0.000 0.151 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/layout.py:395(walk)
60 0.000 0.000 0.126 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py:118(_get_matches)
60 0.000 0.000 0.113 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:1443(get_bindings_for_keys)
60 0.000 0.000 0.112 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py:128(_is_prefix_of_longer_match)
60 0.000 0.000 0.111 0.002 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:1446(get_bindings_starting_with_keys)
4 0.023 0.006 0.064 0.016 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/renderer.py:36(_output_screen_diff)
96 0.001 0.000 0.059 0.001 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:2205(_apply_style)
192 0.058 0.000 0.058 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/screen.py:277(fill_area)
620 0.002 0.000 0.047 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1603(preferred_height)
340 0.001 0.000 0.040 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py:1608(preferred_content_height)
112 0.012 0.000 0.039 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/controls.py:381(create_content)
32 0.001 0.000 0.037 0.001 /home/pstinson/diagnosticlink/mxconsole/widgets/menu.py:104(create_content)
92 0.000 0.000 0.035 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/controls.py:360(preferred_height)
1606 0.018 0.000 0.034 0.000 {built-in method builtins.max}
216 0.000 0.000 0.032 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/renderer.py:142(get_max_column_index)
8 0.029 0.004 0.030 0.004 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py:251(_copy_over_screen)
211448 0.023 0.000 0.023 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py:298(wrap_mouse_handler)
188 0.000 0.000 0.022 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/formatted_text/utils.py:62(fragment_list_to_text)
192 0.014 0.000 0.022 0.000 {method 'join' of 'str' objects}
5152 0.018 0.000 0.020 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/formatted_text/utils.py:73(split_lines)
8318 0.016 0.000 0.016 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/renderer.py:155(<genexpr>)
60 0.001 0.000 0.015 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py:296(_call_handler)
96 0.013 0.000 0.013 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/mouse_handlers.py:39(set_mouse_handler_for_range)
480/120 0.005 0.000 0.013 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_bindings.py:595(_update_cache)
60 0.001 0.000 0.013 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py:126(<listcomp>)
777 0.002 0.000 0.011 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/filters/base.py:125(__call__)
2520/840 0.004 0.000 0.011 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_bindings.py:600(<genexpr>)
120 0.000 0.000 0.010 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/application/application.py:400(current_buffer)
140 0.000 0.000 0.010 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/layout/dimension.py:117(sum_layout_dimensions)
1560/240 0.002 0.000 0.009 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_bindings.py:515(_version)
120 0.002 0.000 0.009 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/buffer.py:234(__init__)
7036 0.008 0.000 0.008 0.000 /home/pstinson/diagnosticlink/.venv/lib/python3.9/site-packages/prompt_toolkit/formatted_text/utils.py:70(<genexpr>)
837 0.002 0.000 0.008 0.000 {built-in method builtins.all}