progress meter: add disabled code for a more stable ETA
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 13 Feb 2018 15:48:52 +0000 (16:48 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 13 Feb 2018 15:48:52 +0000 (16:48 +0100)
Compiles to ~25 bytes if enabled.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/libbb.h
libbb/progress.c

index 2c34859a25a1ad5e26d4c1249c151f79a2819e61..c02621d9495ef93dd70ee508b91d904d3af5db67 100644 (file)
@@ -1949,6 +1949,7 @@ typedef struct bb_progress_t {
        unsigned last_update_sec;
        unsigned last_change_sec;
        unsigned start_sec;
+       /*unsigned last_eta;*/
        const char *curfile;
 } bb_progress_t;
 
index f1d980d68b25f51f6f3953ee030ba4eedcb1d18b..23e974ce702401d2236040aba93fb70fc9f36968 100644 (file)
@@ -57,6 +57,9 @@ void FAST_FUNC bb_progress_init(bb_progress_t *p, const char *curfile)
        p->last_update_sec = p->start_sec;
        p->last_change_sec = p->start_sec;
        p->last_size = 0;
+#if 0
+       p->last_eta = INT_MAX;
+#endif
 }
 
 /* File already had beg_size bytes.
@@ -192,6 +195,16 @@ void FAST_FUNC bb_progress_update(bb_progress_t *p,
                /* if 32bit, can overflow ^^^^^^^^^^, but this would only show bad ETA */
                if (eta >= 1000*60*60)
                        eta = 1000*60*60 - 1;
+#if 0
+               /* To prevent annoying "back-and-forth" estimation jitter,
+                * if new ETA is larger than the last just by a few seconds,
+                * disregard it, and show last one. The end result is that
+                * ETA usually only decreases, unless download slows down a lot.
+                */
+               if ((unsigned)(eta - p->last_eta) < 10)
+                       eta = p->last_eta;
+               p->last_eta = eta;
+#endif
                secs = eta % 3600;
                hours = eta / 3600;
                fprintf(stderr, "%3u:%02u:%02u ETA", hours, secs / 60, secs % 60);