Branch: refs/heads/master Author: Jiří Techet techet@gmail.com Committer: Jiří Techet techet@gmail.com Date: Mon, 10 Jun 2024 19:47:29 UTC Commit: 0cf69303741737f2b7fd0a0de024f5ecc0755985 https://github.com/geany/geany/commit/0cf69303741737f2b7fd0a0de024f5ecc07559...
Log Message: ----------- Fix elevated CPU usage after ui_progress_bar_start/stop() is used
After calling ``` ui_progress_bar_start("foo"); ... ui_progress_bar_stop(); ```
which should theoretically completely stop the progress bar, I get elevated CPU usage of the whole Geany process ~1% CPU on idle (and around 4% on macOS) compared to 0% after Geany launch before the status bar progress bar is used (e.g. by compiling). GTK seems to keep the widget connected to "tick callback" which causes the higher CPU (in fact, there's no gtk_progress_bar_stop() so it can't do it).
The workaround to fix this problem is to call ``` gtk_progress_bar_set_fraction() ``` which switches the progress bar to the mode where it shows the user-provided progress and this removes the "tick callback".
Modified Paths: -------------- src/printing.c src/ui_utils.c
Modified: src/printing.c 2 lines changed, 2 insertions(+), 0 deletions(-) =================================================================== @@ -292,6 +292,8 @@ static void end_print(GtkPrintOperation *operation, GtkPrintContext *context, gp if (dinfo == NULL) return;
+ /* see ui_progress_bar_stop() for more details on why this is called */ + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(main_widgets.progressbar), 0.0); gtk_widget_hide(main_widgets.progressbar); g_object_unref(dinfo->sci); g_object_unref(dinfo->layout);
Modified: src/ui_utils.c 4 lines changed, 4 insertions(+), 0 deletions(-) =================================================================== @@ -2871,6 +2871,10 @@ void ui_progress_bar_stop(void) g_source_remove(progress_bar_timer_id); progress_bar_timer_id = 0; } + + /* hack to remove tick callback which is created for "activity mode" progress + * bars - without this it is called forever and causes elevated CPU usage */ + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(main_widgets.progressbar), 0.0); }
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).