From: Eric Biggers Date: Tue, 24 Jun 2014 00:47:37 +0000 (-0500) Subject: extract.c: Send "extract streams" progress at least every 5 MB X-Git-Tag: v1.7.1~86 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=93ff837938b51373bc60153ef60409f6c1f795c8;hp=34193844b60cf16bb0a04e344ddf47a0614a7643 extract.c: Send "extract streams" progress at least every 5 MB --- diff --git a/NEWS b/NEWS index a903d01f..74052dc3 100644 --- a/NEWS +++ b/NEWS @@ -5,8 +5,9 @@ Version 1.7.1-BETA: Library users can now initialize and de-initialize the library multiple times in one run of an application program. - Library users will now receive WIMLIB_PROGRESS_MSG_WRITE_STREAMS - messages more frequently when writing large WIM files. + Library users will now receive WIMLIB_PROGRESS_MSG_WRITE_STREAMS and + WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS messages more frequently when + writing or extracting large WIM files. Added experimental new write flag: WIMLIB_WRITE_FLAG_SEND_DONE_WITH_FILE_MESSAGES. diff --git a/src/extract.c b/src/extract.c index 383aaf71..e62fa8a8 100644 --- a/src/extract.c +++ b/src/extract.c @@ -355,8 +355,23 @@ extract_chunk_wrapper(const void *chunk, size_t size, void *_ctx) { ctx->next_progress = UINT64_MAX; } else { - ctx->next_progress += progress->extract.total_bytes / 128; - if (ctx->next_progress > progress->extract.total_bytes) + /* Send new message as soon as another 1/128 of the + * total has been extracted. (Arbitrary number.) */ + ctx->next_progress = + progress->extract.completed_bytes + + progress->extract.total_bytes / 128; + + /* ... Unless that would be more than 5000000 bytes, in + * which case send the next after the next 5000000 + * bytes. (Another arbitrary number.) */ + if (progress->extract.completed_bytes + 5000000 < + ctx->next_progress) + ctx->next_progress = + progress->extract.completed_bytes + 5000000; + + /* ... But always send a message as soon as we're + * completely done. */ + if (progress->extract.total_bytes < ctx->next_progress) ctx->next_progress = progress->extract.total_bytes; } }