Skip to content

Commit 8aade10

Browse files
committed
progress: simplify "delayed" progress API
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4d7268b commit 8aade10

File tree

9 files changed

+19
-18
lines changed

9 files changed

+19
-18
lines changed

builtin/blame.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,8 +925,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
925925
sb.found_guilty_entry = &found_guilty_entry;
926926
sb.found_guilty_entry_data = &pi;
927927
if (show_progress)
928-
pi.progress = start_progress_delay(_("Blaming lines"),
929-
sb.num_lines, 50, 1);
928+
pi.progress = start_delayed_progress(_("Blaming lines"), sb.num_lines);
930929

931930
assign_blame(&sb, opt);
932931

builtin/fsck.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ static int traverse_reachable(void)
188188
unsigned int nr = 0;
189189
int result = 0;
190190
if (show_progress)
191-
progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2);
191+
progress = start_delayed_progress(_("Checking connectivity"), 0);
192192
while (pending.nr) {
193193
struct object_array_entry *entry;
194194
struct object *obj;

builtin/prune-packed.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ static int prune_object(const struct object_id *oid, const char *path,
3737
void prune_packed_objects(int opts)
3838
{
3939
if (opts & PRUNE_PACKED_VERBOSE)
40-
progress = start_progress_delay(_("Removing duplicate objects"),
41-
256, 95, 2);
40+
progress = start_delayed_progress(_("Removing duplicate objects"), 256);
4241

4342
for_each_loose_file_in_objdir(get_object_directory(),
4443
prune_object, NULL, prune_subdir, &opts);

builtin/prune.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
138138
if (show_progress == -1)
139139
show_progress = isatty(2);
140140
if (show_progress)
141-
progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2);
141+
progress = start_delayed_progress(_("Checking connectivity"), 0);
142142

143143
mark_reachable_objects(&revs, 1, expire, progress);
144144
stop_progress(&progress);

builtin/rev-list.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
364364
revs.limited = 1;
365365

366366
if (show_progress)
367-
progress = start_progress_delay(show_progress, 0, 0, 2);
367+
progress = start_delayed_progress(show_progress, 0);
368368

369369
if (use_bitmap_index && !revs.prune) {
370370
if (revs.count && !revs.left_right && !revs.cherry_mark) {

diffcore-rename.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,9 @@ void diffcore_rename(struct diff_options *options)
532532
}
533533

534534
if (options->show_rename_progress) {
535-
progress = start_progress_delay(
535+
progress = start_delayed_progress(
536536
_("Performing inexact rename detection"),
537-
rename_dst_nr * rename_src_nr, 50, 1);
537+
rename_dst_nr * rename_src_nr);
538538
}
539539

540540
mx = xcalloc(st_mult(NUM_CANDIDATE_PER_DST, num_create), sizeof(*mx));

progress.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct progress {
3434
unsigned total;
3535
unsigned last_percent;
3636
unsigned delay;
37-
unsigned delayed_percent_treshold;
37+
unsigned delayed_percent_threshold;
3838
struct throughput *throughput;
3939
uint64_t start_ns;
4040
};
@@ -88,7 +88,7 @@ static int display(struct progress *progress, unsigned n, const char *done)
8888
return 0;
8989
if (progress->total) {
9090
unsigned percent = n * 100 / progress->total;
91-
if (percent > progress->delayed_percent_treshold) {
91+
if (percent > progress->delayed_percent_threshold) {
9292
/* inhibit this progress report entirely */
9393
clear_progress_signal();
9494
progress->delay = -1;
@@ -205,8 +205,8 @@ int display_progress(struct progress *progress, unsigned n)
205205
return progress ? display(progress, n, NULL) : 0;
206206
}
207207

208-
struct progress *start_progress_delay(const char *title, unsigned total,
209-
unsigned percent_treshold, unsigned delay)
208+
static struct progress *start_progress_delay(const char *title, unsigned total,
209+
unsigned percent_threshold, unsigned delay)
210210
{
211211
struct progress *progress = malloc(sizeof(*progress));
212212
if (!progress) {
@@ -219,14 +219,19 @@ struct progress *start_progress_delay(const char *title, unsigned total,
219219
progress->total = total;
220220
progress->last_value = -1;
221221
progress->last_percent = -1;
222-
progress->delayed_percent_treshold = percent_treshold;
222+
progress->delayed_percent_threshold = percent_threshold;
223223
progress->delay = delay;
224224
progress->throughput = NULL;
225225
progress->start_ns = getnanotime();
226226
set_progress_signal();
227227
return progress;
228228
}
229229

230+
struct progress *start_delayed_progress(const char *title, unsigned total)
231+
{
232+
return start_progress_delay(title, total, 0, 2);
233+
}
234+
230235
struct progress *start_progress(const char *title, unsigned total)
231236
{
232237
return start_progress_delay(title, total, 0, 0);

progress.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ struct progress;
66
void display_throughput(struct progress *progress, off_t total);
77
int display_progress(struct progress *progress, unsigned n);
88
struct progress *start_progress(const char *title, unsigned total);
9-
struct progress *start_progress_delay(const char *title, unsigned total,
10-
unsigned percent_treshold, unsigned delay);
9+
struct progress *start_delayed_progress(const char *title, unsigned total);
1110
void stop_progress(struct progress **progress);
1211
void stop_progress_msg(struct progress **progress, const char *msg);
1312

unpack-trees.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,7 @@ static struct progress *get_progress(struct unpack_trees_options *o)
343343
total++;
344344
}
345345

346-
return start_progress_delay(_("Checking out files"),
347-
total, 50, 1);
346+
return start_delayed_progress(_("Checking out files"), total);
348347
}
349348

350349
static int check_updates(struct unpack_trees_options *o)

0 commit comments

Comments
 (0)