Thunar responsiveness issues

Alexis BRENON @Xfce brenon.alexis+xfce at gmail.com
Mon Mar 8 21:48:38 CET 2021


Le lun. 8 mars 2021 à 20:56, Viktor Semykin <thesame.ml at gmail.com> a écrit :
>
> Hello Xfce team!
>

Hi,

>
> Some time ago I faced performance issues while using Thunar with my phone
> connected by MTP. The Thunar UI froze often and was not very responsive with
> scrolling, selecting files and other mere file actions. I think it's not only
> MTP but any slow GIO.
>
> I tried to find the cause of issues and this is what I discovered so far. Some
> UI functions make calls that drill down to IO, and freeze while waiting for IO
> to finish.
>
> This is the list of calls I found. The tree structure represents the call stack.
>
> * List model performs IO:
>
>         thunar_list_model_get_value
>         `-thunar_file_get_content_type
>           `-g_file_query_info                         -- [1]
>
> * Icon renderer performs IO:
>
>         thunar_icon_renderer_render
>         `-thunar_icon_factory_load_file_icon
>           +-thunar_icon_factory_get_show_thumbnail
>           | `-thunar_file_get_preview_type
>           |   `-g_file_query_filesystem_info          -- [2]
>           +-g_loadable_icon_load                      -- [3]
>           `-thunar_file_get_icon_name
>             `-thunar_file_get_content_type
>               `-g_file_query_info                     -- [4]
>
> * UI performs IO:
>
>         thunar_standard_view_get_property
>         `-thunar_list_model_get_statusbar_text
>           `-thunar_g_file_get_free_space
>             `-g_file_query_filesystem_info            -- [5]
>
> I believe there are other IO calls too, but I haven't found them yet.
>
> I'd like to solve the issue, but before doing so I wanted to discuss the
> solution with the community. I see two approaches to it:
>
> 1. Ad-hoc solution
>
>     * Prefetch `GFileInfo` with content-type beforehand. This solves [1] and
>       [4], but slows down folder opening.
>
>     * Prefetch file system info in `ThunarFolder` to prevent [2].
>
>     * How to deal with [3]? I have no good clues for now.
>

These solutions look to me like patches or workarounds.
Is it possible to measure the impact of such solutions on folder
opening time and overall memory consumption?
What happens with a folder of 10, 100, or 1000 files?

>
> 2. Async model solution
>
>     * Create a layer that connects GtkTreeModel to async values. When the value
>       is pending the `get_value` call returns a placeholder (blank or "...");
>       when the value is ready return it.
>
>     * Use asynchronous `thunar_file_async_get_content_type` in the list model.
>       This solves [1].
>
>     * Move the code from `thunar_icon_renderer_render` to a new
>       `thunar_file_async_get_icon` that returns the icon asynchronously. This
>       solves [2] [3] and [4].
>
>     This solution increases code complexity because it introduces a new layer
>     and a notion of async values that can be pending or ready.

Asynchronous development always seems more tricky ^^
But I think that, with a good implementation/library/framework, it can
provide a good solution for this problem as well as open new
perspectives (what about folder lazy loading ?)

>
> For the status bar ([5]) it seems just enough to listen to the
> `notify::statusbar-text` signal.
>
> I'm looking forward to the opinion of the community. Do you think any of these
> solutions could be accepted to the Thunar code? Maybe you could think up
> something better? Because I'm not absolutely happy with the approaches above.

Until now, I didn't take part in Xfce development but I like
asynchronous programming, so do not hesitate to ping me for any
feedback.

Kind regards,
Alexis.

>
> Thank you. Let me know if the message formatting is broken and has to be fixed
> somehow.
> _______________________________________________
> Xfce4-dev mailing list
> Xfce4-dev at xfce.org
> https://mail.xfce.org/mailman/listinfo/xfce4-dev


More information about the Xfce4-dev mailing list