Skip to content

[BUG] Rofi is slow to appear when cold #2283

@yuki-tsubaki

Description

@yuki-tsubaki

Rofi version (rofi -v or git commit in case of build issue)

2.0.0

Configuration

https://gist.github.com/yuki-tsubaki/af0d69e5dcf013a7053bee6e42fd2ba3

Theme

https://gist.github.com/yuki-tsubaki/78d7018967d1786f6ea70706f9530442

Timing report

https://gist.github.com/yuki-tsubaki/17118b8a96705b05804c218a99dc1b4f

Launch command

rofi -dmenu

Step to reproduce

  • Launch rofi (really any command, I did with -dmenu to exclude desktop caching issues)

Expected behavior

Rofi launches in at least under a second even when cold for at least simple things like dmenu.

Actual behavior

Dmenu takes almost 2 seconds to show when run cold:

The following shows a cleaned up version of the data with the offending portions in bold (all the times are accurate; I didn't use any LLM to format it, just Emacs):

Accumulated time Partial time Code Task
0.000001 0.000000 Started  
0.001267 0.001267 ../rofi-2.0.0/source/rofi.c:main:1012  
0.001965 0.000698 ../rofi-2.0.0/source/rofi.c:main:1062  
0.002577 0.000612 ../rofi-2.0.0/source/rofi.c:main:1092 Setup Locale
0.002700 0.000123 ../rofi-2.0.0/source/rofi.c:main:1094 Collect MODES
0.002737 0.000037 ../rofi-2.0.0/source/rofi.c:main:1096 Setup MODES
0.002784 0.000047 ../rofi-2.0.0/source/rofi.c:main:1100 Setup mainloop
0.002945 0.000161 ../rofi-2.0.0/source/rofi.c:main:1103 NK Bindings
0.003083 0.000138 ../rofi-2.0.0/source/rofi.c:main:1107 Setup abe
0.003966 0.000883 ../rofi-2.0.0/source/rofi.c:main:1178 Load cmd config
0.004421 0.000455 ../rofi-2.0.0/source/xcb/display.c:xcb_display_setup:1676 Open Display
0.004928 0.000507 ../rofi-2.0.0/source/xcb/display.c:xcb_display_setup:1692 Setup XCB
0.007109 0.002181 ../rofi-2.0.0/source/rofi.c:main:1261 Setup Display
0.007123 0.000014 ../rofi-2.0.0/source/view.c:rofi_view_workers_initialize:1993 Setup Threadpool, start
0.007200 0.000077 ../rofi-2.0.0/source/view.c:rofi_view_workers_initialize:2019 Setup Threadpool, done
0.007210 0.000010 ../rofi-2.0.0/source/rofi.c:main:1298 Workers initialize
0.014590 0.007380 ../rofi-2.0.0/source/rofi.c:main:1300 Icon fetcher initialize
0.014627 0.000037 ../rofi-2.0.0/source/rofi.c:main:1308 Pid file created
0.014634 0.000007 ../rofi-2.0.0/source/rofi.c:main:1314 Text box setup
0.015701 0.001067 ../rofi-2.0.0/source/rofi.c:main:1321 Setup late Display
0.015817 0.000116 ../rofi-2.0.0/source/rofi.c:main:1326 Theme setup
0.015923 0.000106 ../rofi-2.0.0/source/rofi.c:startup:819 Startup
0.015938 0.000015 ../rofi-2.0.0/source/rofi.c:startup:831 Grab keyboard
0.016028 0.000090 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:646 xcb create window
0.016049 0.000021 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:650 xcb create gc
0.016441 0.000392 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:660 create cairo surface
0.016538 0.000097 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:669 pango cairo font setup
0.016560 0.000022 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:713 configure font
0.668243 0.651683 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:721 textbox setup
0.668286 0.000043 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:735 setup window attributes
0.668296 0.000010 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:750 setup window fullscreen
0.668303 0.000007 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:757 setup window name and class
0.668310 0.000007 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:766 setup startup notification
0.668316 0.000006 ../rofi-2.0.0/source/xcb/view.c:xcb___create_window:768 done
0.668334 0.000018 ../rofi-2.0.0/source/rofi.c:startup:833 Create Window
0.668340 0.000006 ../rofi-2.0.0/source/rofi.c:startup:835 Parse ABE
0.668348 0.000008 ../rofi-2.0.0/source/rofi.c:startup:838 Config sanity check
0.668442 0.000094 ../rofi-2.0.0/source/view.c:rofi_view_create:1798  
0.668451 0.000009 ../rofi-2.0.0/source/view.c:rofi_view_create:1833 Startup notification
0.668456 0.000005 ../rofi-2.0.0/source/view.c:rofi_view_create:1836 Get active monitor
0.668749 0.000293 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:764 Filter start
0.668759 0.000010 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:769 Filter reload rows
0.668764 0.000005 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:774 Filter tokenize
0.668769 0.000005 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:860 Filter matching done
0.668775 0.000006 ../rofi-2.0.0/source/widgets/listview.c:listview_set_num_elements:626 listview_set_num_elements
0.668781 0.000006 ../rofi-2.0.0/source/widgets/listview.c:listview_set_num_elements:632 Set selected
0.668793 0.000012 ../rofi-2.0.0/source/widgets/listview.c:listview_set_num_elements:634 recompute elements
0.668801 0.000008 ../rofi-2.0.0/source/widgets/listview.c:listview_set_num_elements:636 queue redraw
0.668840 0.000039 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:873 Update filter lines
0.668855 0.000015 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:891 Filter resize window based on window
0.668861 0.000006 ../rofi-2.0.0/source/view.c:rofi_view_refilter_real:893 Filter done
0.668866 0.000005 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:223  
0.668888 0.000022 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:243 Background
0.669058 0.000170 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:256 widgets
0.670074 0.001016 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:199 Update start
0.670085 0.000011 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:223  
0.670092 0.000007 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:243 Background
0.670120 0.000028 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:256 widgets
0.670126 0.000006 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:202 Expose
0.670135 0.000009 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:206 flush
0.670269 0.000134 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:199 Update start
0.670278 0.000009 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:202 Expose
0.670288 0.000010 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:206 flush
1.870271 1.199983 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:199 Update start
1.870397 0.000126 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:223  
1.870443 0.000046 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:243 Background
1.870643 0.000200 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:256 widgets
1.870666 0.000023 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:202 Expose
1.870708 0.000042 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:206 flush
3.070830 1.200122 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:199 Update start
3.070885 0.000055 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:223  
3.070913 0.000028 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:243 Background
3.071053 0.000140 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_update:256 widgets
3.071064 0.000011 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:202 Expose
3.071083 0.000019 ../rofi-2.0.0/source/xcb/view.c:xcb_rofi_view_repaint:206 flush
3.453550 0.000000 Stopped  

Additional information

I have a Sandisk WD Black SN850X NVMe SSD and the system was not under load during the time when tested. I also tested locking all the libraries and the binary in memory and got these results still: ldd $(which rofi) | rg -e '=> (.*?) \(0x.*\)' -r '$1' -o | xargs vmtouch -fl. I will also point out that the issue happens exactly the same when I run it like this rofi -dmenu -theme /dev/null so I know it isn't my theme that is causing the issue.

I've checked if the issue exists in the latest stable release

  • Yes, I have checked the problem exists in the latest stable version

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions