1
0
forked from rpms/plymouth
plymouth/0006-two-step-Add-UseEndAnimation-setting.patch
Hans de Goede f97cb31771 Add patches fixing crash on monitor hot(un)plug (rhbz#1809681)
Add patches fixing delay between gdm telling us to deactivate and
  us telling gdm it is ok to continue
Drop plymouth-plugin-throbgress sub-package, the spinfinity theme now
  uses the two-step plugin
2020-03-09 10:58:24 +01:00

171 lines
6.2 KiB
Diff

From aba38f13c1af535efefb09683ced0920600e7dde Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Tue, 18 Feb 2020 22:03:58 +0100
Subject: [PATCH 6/7] two-step: Add UseEndAnimation setting
We try to start the end animation early based on our progress accounting
but this is highly unreliable because e.g.:
-It counts time to enter the diskcrypt passwd as normal boot time, while
this varies wildly from boot to boot
-Boot times for laptops can differ significantly between docked / undocked
state
Between gdm calling /bin/plymouth deactivate and the drm plugin's deactivate
method getting called there can be e.g. 2.1 seconds (from a random boot),
with a theoretical maximum of 3 seconds (2 seconds to finish the throbber +
1 second for the end animation).
On a modern system userland boot should be able to finish in say 5 seconds,
making gdm wait an additional 1 - 3 seconds for deactivation is a huge amount
of extra wait time!
This commit adds a new "UseEndAnimation" option to the two-step plugin,
which defaults to true. Setting this to false makes deactivation immediate.
This works nicely with the spinner (and bgrt) themes since we do not really
do anything special in the end animation there anyways and since we fade-over
into gdm things will still look ok, while shaving a signifcant chunk of our
boot time.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
src/plugins/splash/two-step/plugin.c | 42 +++++++++++++++++++++++++---
themes/bgrt/bgrt.plymouth.in | 3 ++
themes/spinner/spinner.plymouth.in | 9 ++++++
3 files changed, 50 insertions(+), 4 deletions(-)
diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c
index 3dfb011..964855c 100644
--- a/src/plugins/splash/two-step/plugin.c
+++ b/src/plugins/splash/two-step/plugin.c
@@ -121,6 +121,7 @@ typedef struct
bool progress_bar_show_percent_complete;
bool use_progress_bar;
bool use_animation;
+ bool use_end_animation;
bool use_firmware_background;
char *title;
char *subtitle;
@@ -262,12 +263,13 @@ view_free (view_t *view)
static void
view_load_end_animation (view_t *view)
{
+ ply_boot_splash_plugin_t *plugin = view->plugin;
const char *animation_prefix;
- ply_boot_splash_plugin_t *plugin;
- ply_trace ("loading animation");
+ if (!plugin->mode_settings[plugin->mode].use_end_animation)
+ return;
- plugin = view->plugin;
+ ply_trace ("loading animation");
switch (plugin->mode) {
case PLY_BOOT_SPLASH_MODE_BOOT_UP:
@@ -315,6 +317,7 @@ view_load_end_animation (view_t *view)
ply_trace ("optional animation didn't load");
ply_animation_free (view->end_animation);
view->end_animation = NULL;
+ plugin->mode_settings[plugin->mode].use_end_animation = false;
}
static bool
@@ -995,6 +998,13 @@ load_mode_settings (ply_boot_splash_plugin_t *plugin,
else
settings->use_animation = !settings->use_progress_bar;
+ /* This defaults to true for compat. with older themes */
+ if (ply_key_file_has_key (key_file, group_name, "UseEndAnimation"))
+ settings->use_end_animation =
+ ply_key_file_get_bool (key_file, group_name, "UseEndAnimation");
+ else
+ settings->use_end_animation = true;
+
/* If any mode uses the firmware background, then we need to load it */
if (settings->use_firmware_background)
plugin->use_firmware_background = true;
@@ -1260,6 +1270,25 @@ start_end_animation (ply_boot_splash_plugin_t *plugin,
return;
}
+ if (!plugin->mode_settings[plugin->mode].use_end_animation) {
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view = ply_list_node_get_data (node);
+
+ ply_progress_bar_hide (view->progress_bar);
+
+ if (view->throbber != NULL)
+ ply_throbber_stop (view->throbber, NULL);
+
+ if (view->progress_animation != NULL)
+ ply_progress_animation_hide (view->progress_animation);
+
+ node = ply_list_get_next_node (plugin->views, node);
+ }
+ ply_trigger_pull (trigger, NULL);
+ return;
+ }
+
ply_trace ("starting end animation");
node = ply_list_get_first_node (plugin->views);
@@ -1718,7 +1747,12 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
if (plugin->is_idle)
return;
- if (percent_done >= SHOW_ANIMATION_PERCENT) {
+ /*
+ * If we do not have an end animation, we keep showing progress until
+ * become_idle gets called.
+ */
+ if (plugin->mode_settings[plugin->mode].use_end_animation &&
+ percent_done >= SHOW_ANIMATION_PERCENT) {
if (plugin->stop_trigger == NULL) {
ply_trace ("boot progressed to end");
diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in
index ac07bc9..994a995 100644
--- a/themes/bgrt/bgrt.plymouth.in
+++ b/themes/bgrt/bgrt.plymouth.in
@@ -25,12 +25,15 @@ DialogClearsFirmwareBackground=true
MessageBelowAnimation=true
[boot-up]
+UseEndAnimation=false
UseFirmwareBackground=true
[shutdown]
+UseEndAnimation=false
UseFirmwareBackground=true
[reboot]
+UseEndAnimation=false
UseFirmwareBackground=true
[updates]
diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in
index 5e5078e..88121c5 100644
--- a/themes/spinner/spinner.plymouth.in
+++ b/themes/spinner/spinner.plymouth.in
@@ -23,6 +23,15 @@ ProgressBarBackgroundColor=0x606060
ProgressBarForegroundColor=0xffffff
MessageBelowAnimation=true
+[boot-up]
+UseEndAnimation=false
+
+[shutdown]
+UseEndAnimation=false
+
+[reboot]
+UseEndAnimation=false
+
[updates]
SuppressMessages=true
ProgressBarShowPercentComplete=true
--
2.25.1