Hello Pingfan, >If the dump progress is slow, it is better to show an estimate of >remaining time of the progress to the user. The estimator simply uses >the average speed to work. I like it, thanks for your work. I have a minor comment. [snip] > void >-print_progress(const char *msg, unsigned long current, unsigned long end) >+print_progress(const char *msg, unsigned long current, unsigned long end, struct timeval *start) > { > float progress; > time_t tm; > static time_t last_time = 0; > static unsigned int lapse = 0; > static const char *spinner = "/|\\-"; >+ struct timeval delta; >+ double eta; >+ char eta_msg[32] = "eta: "; I thinks this "eta: " should be set in eta_to_human_short(), because... > if (current < end) { > tm = time(NULL); >@@ -368,13 +388,19 @@ print_progress(const char *msg, unsigned long current, unsigned long end) > } else > progress = 100; > >+ if (start != NULL) { >+ calc_delta(start, &delta); >+ eta = delta.tv_sec + delta.tv_usec/1e6; >+ eta = (100 - progress) * eta/progress; >+ eta_to_human_short(eta, eta_msg+5); the offset for "eta: " is here as a magic number. It has low maintainability since the number is independent of the actual string length. Thanks, Atsushi Kumagai >+ } > if (flag_ignore_r_char) { >- PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c\n", >- msg, progress, spinner[lapse % 4]); >+ PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c %16s\n", >+ msg, progress, spinner[lapse % 4], eta_msg); > } else { > PROGRESS_MSG("\r"); >- PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c", >- msg, progress, spinner[lapse % 4]); >+ PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c %16s", >+ msg, progress, spinner[lapse % 4], eta_msg); > } > lapse++; > } >diff --git a/print_info.h b/print_info.h >index 01e3706..1ce3593 100644 >--- a/print_info.h >+++ b/print_info.h >@@ -25,7 +25,8 @@ extern int flag_ignore_r_char; > > void show_version(void); > void print_usage(void); >-void print_progress(const char *msg, unsigned long current, unsigned long end); >+void print_progress(const char *msg, unsigned long current, unsigned long end, struct timeval *start); >+ > void print_execution_time(char *step_name, struct timeval *tv_start); > > /* >-- >2.7.4 > > >_______________________________________________ >kexec mailing list >kexec at lists.infradead.org >http://lists.infradead.org/mailman/listinfo/kexec