Skip to content
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

Performance prohibitively slow with RadioList in float container #1981

Open
patrickkidd opened this issue Apr 9, 2025 · 1 comment
Open

Comments

@patrickkidd
Copy link

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
Copy link
Author

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}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant