]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[progress] Make the progress percentage settable
authorCharlie Brej <cbrej@cs.man.ac.uk>
Thu, 3 Sep 2009 12:45:41 +0000 (13:45 +0100)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Thu, 3 Sep 2009 12:45:41 +0000 (13:45 +0100)
The progress percentage is now settable. By "settable" this doesn't mean the
value will change to the new value, the set value is only a hint as to where
the progress should be at this point in time. So it it overshot or under-run,
the hint is used to determine how much time is left, and how fast to move the
bar.

src/libply/ply-progress.c
src/libply/ply-progress.h

index bd7567d95695842cfdc3c40d5e37a362254585a6..47b7ee6e8bbc18b0d40519b18beac2babef7835b 100644 (file)
@@ -256,6 +256,14 @@ ply_progress_get_percentage (ply_progress_t* progress)
   return percentage;
 }
 
+void
+ply_progress_set_percentage (ply_progress_t* progress, double percentage)
+{
+  progress->next_message_percentage = 1;
+  progress->scalar += percentage / (ply_progress_get_time(progress)-progress->dead_time);
+  progress->scalar /= 2;
+  return;
+}
 
 double
 ply_progress_get_time (ply_progress_t* progress)
@@ -361,6 +369,27 @@ main (int    argc,
   printf("Save and free cache\n");
   ply_progress_save_cache (progress, PLYMOUTH_TIME_DIRECTORY "/boot-duration");
   ply_progress_free(progress);
+
+  printf("\nManual set percentage run\n\n");
+
+  progress = ply_progress_new ();
+  progress->scalar = 1.0/5;  /* Original time estimate is 5 sec*/
+
+  percent = ply_progress_get_percentage (progress);
+  time = ply_progress_get_time (progress);
+  printf("Time:%f   \t Percentage: %f%%\n", time, percent*100);
+  srand ((int) ply_get_timestamp ());
+
+  for (i=0; i<12; i++)
+    {
+      ply_progress_set_percentage (progress, (double)i/12);
+      usleep ((rand () % slowness+slowness));
+      percent = ply_progress_get_percentage (progress);
+      time = ply_progress_get_time (progress);
+      printf("Time:%f   \t Percentage: %f%% (%f%%)\tScalar:%f\n", time, percent*100, (double)i/12*100, progress->scalar);
+    }
+  ply_progress_free(progress);
+
   return 0;
 }
 
index 0d642c62dcca94159876441c3db998734c1a61d0..434636a6aac330ef3f7e1f449dbc138bae3a9301 100644 (file)
@@ -31,6 +31,7 @@ ply_progress_t *ply_progress_new (void);
 void ply_progress_free (ply_progress_t* progress);
 void ply_progress_load_cache (ply_progress_t* progress, const char *filename);
 double ply_progress_get_percentage (ply_progress_t* progress);
+void ply_progress_set_percentage (ply_progress_t* progress, double percentage);
 double ply_progress_get_time (ply_progress_t* progress);
 void ply_progress_pause (ply_progress_t* progress);
 void ply_progress_unpause (ply_progress_t* progress);