We used to expose the full power of the delayed progress API to the
callers, so that they can specify, not just the message to show and
expected total amount of work that is used to compute the percentage
of work performed so far, the percent-threshold parameter P and the
delay-seconds parameter N. The progress meter starts to show at N
seconds into the operation only if we have not yet completed P per-cent
of the total work.
Most callers used either (0%, 2s) or (50%, 1s) as (P, N), but there
are oddballs that chose more random-looking values like 95%.
For a smoother workload, (50%, 1s) would allow us to start showing
the progress meter earlier than (0%, 2s), while keeping the chance
of not showing progress meter for long running operation the same as
the latter. For a task that would take 2s or more to complete, it
is likely that less than half of it would complete within the first
second, if the workload is smooth. But for a spiky workload whose
earlier part is easier, such a setting is likely to fail to show the
progress meter entirely and (0%, 2s) is more appropriate.
But that is merely a theory. Realistically, it is of dubious value
to ask each codepath to carefully consider smoothness of their
workload and specify their own setting by passing two extra
parameters. Let's simplify the API by dropping both parameters and
have everybody use (0%, 2s).
Oh, by the way, the percent-threshold parameter and the structure
member were consistently misspelled, which also is now fixed ;-)
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
raw | patch | inline | side by side (parent: 4d7268b )
sb.found_guilty_entry = &found_guilty_entry;
sb.found_guilty_entry_data = π
if (show_progress)
sb.found_guilty_entry = &found_guilty_entry;
sb.found_guilty_entry_data = π
if (show_progress)
- pi.progress = start_progress_delay(_("Blaming lines"),
- sb.num_lines, 50, 1);
+ pi.progress = start_delayed_progress(_("Blaming lines"), sb.num_lines);
unsigned int nr = 0;
int result = 0;
if (show_progress)
unsigned int nr = 0;
int result = 0;
if (show_progress)
- progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2 );
+ progress = start_delayed_progress(_("Checking connectivity"), 0 );
while (pending.nr) {
struct object_array_entry *entry;
struct object *obj;
while (pending.nr) {
struct object_array_entry *entry;
struct object *obj;
void prune_packed_objects(int opts)
{
if (opts & PRUNE_PACKED_VERBOSE)
void prune_packed_objects(int opts)
{
if (opts & PRUNE_PACKED_VERBOSE)
- progress = start_progress_delay(_("Removing duplicate objects"),
- 256, 95, 2);
+ progress = start_delayed_progress(_("Removing duplicate objects"), 256);
for_each_loose_file_in_objdir(get_object_directory(),
prune_object, NULL, prune_subdir, &opts);
for_each_loose_file_in_objdir(get_object_directory(),
prune_object, NULL, prune_subdir, &opts);
if (show_progress == -1)
show_progress = isatty(2);
if (show_progress)
if (show_progress == -1)
show_progress = isatty(2);
if (show_progress)
- progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2 );
+ progress = start_delayed_progress(_("Checking connectivity"), 0 );
mark_reachable_objects(&revs, 1, expire, progress);
stop_progress(&progress);
mark_reachable_objects(&revs, 1, expire, progress);
stop_progress(&progress);
revs.limited = 1;
if (show_progress)
revs.limited = 1;
if (show_progress)
- progress = start_progress_delay(show_progress, 0, 0, 2 );
+ progress = start_delayed_progress(show_progress, 0 );
if (use_bitmap_index && !revs.prune) {
if (revs.count && !revs.left_right && !revs.cherry_mark) {
if (use_bitmap_index && !revs.prune) {
if (revs.count && !revs.left_right && !revs.cherry_mark) {
}
if (options->show_rename_progress) {
}
if (options->show_rename_progress) {
- progress = start_progress_delay (
+ progress = start_delayed_progress (
_("Performing inexact rename detection"),
_("Performing inexact rename detection"),
- rename_dst_nr * rename_src_nr, 50, 1 );
+ rename_dst_nr * rename_src_nr);
}
mx = xcalloc(st_mult(NUM_CANDIDATE_PER_DST, num_create), sizeof(*mx));
}
mx = xcalloc(st_mult(NUM_CANDIDATE_PER_DST, num_create), sizeof(*mx));
unsigned total;
unsigned last_percent;
unsigned delay;
unsigned total;
unsigned last_percent;
unsigned delay;
- unsigned delayed_percent_treshold;
+ unsigned delayed_percent_th reshold;
struct throughput *throughput;
uint64_t start_ns;
};
struct throughput *throughput;
uint64_t start_ns;
};
return 0;
if (progress->total) {
unsigned percent = n * 100 / progress->total;
return 0;
if (progress->total) {
unsigned percent = n * 100 / progress->total;
- if (percent > progress->delayed_percent_treshold) {
+ if (percent > progress->delayed_percent_th reshold) {
/* inhibit this progress report entirely */
clear_progress_signal();
progress->delay = -1;
/* inhibit this progress report entirely */
clear_progress_signal();
progress->delay = -1;
return progress ? display(progress, n, NULL) : 0;
}
return progress ? display(progress, n, NULL) : 0;
}
-struct progress *start_progress_delay(const char *title, unsigned total,
- unsigned percent_t reshold, unsigned delay)
+static st ruct progress *start_progress_delay(const char *title, unsigned total,
+ unsigned percent_th reshold, unsigned delay)
{
struct progress *progress = malloc(sizeof(*progress));
if (!progress) {
{
struct progress *progress = malloc(sizeof(*progress));
if (!progress) {
progress->total = total;
progress->last_value = -1;
progress->last_percent = -1;
progress->total = total;
progress->last_value = -1;
progress->last_percent = -1;
- progress->delayed_percent_treshold = percent_t reshold;
+ progress->delayed_percent_threshold = percent_th reshold;
progress->delay = delay;
progress->throughput = NULL;
progress->start_ns = getnanotime();
progress->delay = delay;
progress->throughput = NULL;
progress->start_ns = getnanotime();
+struct progress *start_delayed_progress(const char *title, unsigned total)
+{
+ return start_progress_delay(title, total, 0, 2);
+}
+
struct progress *start_progress(const char *title, unsigned total)
{
return start_progress_delay(title, total, 0, 0);
struct progress *start_progress(const char *title, unsigned total)
{
return start_progress_delay(title, total, 0, 0);
void display_throughput(struct progress *progress, off_t total);
int display_progress(struct progress *progress, unsigned n);
struct progress *start_progress(const char *title, unsigned total);
void display_throughput(struct progress *progress, off_t total);
int display_progress(struct progress *progress, unsigned n);
struct progress *start_progress(const char *title, unsigned total);
-struct progress *start_progress_delay(const char *title, unsigned total,
- unsigned percent_treshold, unsigned delay);
+struct progress *start_delayed_progress(const char *title, unsigned total);
void stop_progress(struct progress **progress);
void stop_progress_msg(struct progress **progress, const char *msg);
void stop_progress(struct progress **progress);
void stop_progress_msg(struct progress **progress, const char *msg);
- return start_progress_delay(_("Checking out files"),
- total, 50, 1);
+ return start_delayed_progress(_("Checking out files"), total);
}
static int check_updates(struct unpack_trees_options *o)
}
static int check_updates(struct unpack_trees_options *o)