mirror of
https://github.com/facebook/zstd.git
synced 2025-08-07 06:23:00 +03:00
[pzstd] Add status update for MB written
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
#include "utils/ThreadPool.h"
|
#include "utils/ThreadPool.h"
|
||||||
#include "utils/WorkQueue.h"
|
#include "utils/WorkQueue.h"
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -85,14 +86,16 @@ static std::uint64_t handleOneInput(const Options &options,
|
|||||||
options.determineParameters());
|
options.determineParameters());
|
||||||
});
|
});
|
||||||
// Start writing
|
// Start writing
|
||||||
bytesWritten = writeFile(errorHolder, outs, outputFd, options.decompress);
|
bytesWritten = writeFile(errorHolder, outs, outputFd, options.decompress,
|
||||||
|
options.verbosity);
|
||||||
} else {
|
} else {
|
||||||
// Add a job that reads the input and starts all the decompression jobs
|
// Add a job that reads the input and starts all the decompression jobs
|
||||||
executor.add([&errorHolder, &outs, &executor, inputFd, &bytesRead] {
|
executor.add([&errorHolder, &outs, &executor, inputFd, &bytesRead] {
|
||||||
bytesRead = asyncDecompressFrames(errorHolder, outs, executor, inputFd);
|
bytesRead = asyncDecompressFrames(errorHolder, outs, executor, inputFd);
|
||||||
});
|
});
|
||||||
// Start writing
|
// Start writing
|
||||||
bytesWritten = writeFile(errorHolder, outs, outputFd, options.decompress);
|
bytesWritten = writeFile(errorHolder, outs, outputFd, options.decompress,
|
||||||
|
options.verbosity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (options.verbosity > 1 && !errorHolder.hasError()) {
|
if (options.verbosity > 1 && !errorHolder.hasError()) {
|
||||||
@@ -579,11 +582,33 @@ static bool writeData(ByteRange data, FILE* fd) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updateWritten(int verbosity, std::uint64_t bytesWritten) {
|
||||||
|
if (verbosity <= 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
using Clock = std::chrono::system_clock;
|
||||||
|
static Clock::time_point then;
|
||||||
|
constexpr std::chrono::milliseconds refreshRate{150};
|
||||||
|
|
||||||
|
auto now = Clock::now();
|
||||||
|
if (now - then > refreshRate) {
|
||||||
|
then = now;
|
||||||
|
std::fprintf(stderr, "\rWritten: %u MB ",
|
||||||
|
static_cast<std::uint32_t>(bytesWritten >> 20));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::uint64_t writeFile(
|
std::uint64_t writeFile(
|
||||||
ErrorHolder& errorHolder,
|
ErrorHolder& errorHolder,
|
||||||
WorkQueue<std::shared_ptr<BufferWorkQueue>>& outs,
|
WorkQueue<std::shared_ptr<BufferWorkQueue>>& outs,
|
||||||
FILE* outputFd,
|
FILE* outputFd,
|
||||||
bool decompress) {
|
bool decompress,
|
||||||
|
int verbosity) {
|
||||||
|
auto lineClearGuard = makeScopeGuard([verbosity] {
|
||||||
|
if (verbosity > 1) {
|
||||||
|
std::fprintf(stderr, "\r%79s\r", "");
|
||||||
|
}
|
||||||
|
});
|
||||||
std::uint64_t bytesWritten = 0;
|
std::uint64_t bytesWritten = 0;
|
||||||
std::shared_ptr<BufferWorkQueue> out;
|
std::shared_ptr<BufferWorkQueue> out;
|
||||||
// Grab the output queue for each decompression job (in order).
|
// Grab the output queue for each decompression job (in order).
|
||||||
@@ -608,6 +633,7 @@ std::uint64_t writeFile(
|
|||||||
return bytesWritten;
|
return bytesWritten;
|
||||||
}
|
}
|
||||||
bytesWritten += buffer.size();
|
bytesWritten += buffer.size();
|
||||||
|
updateWritten(verbosity, bytesWritten);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bytesWritten;
|
return bytesWritten;
|
||||||
|
@@ -84,11 +84,13 @@ std::uint64_t asyncDecompressFrames(
|
|||||||
* (de)compression job.
|
* (de)compression job.
|
||||||
* @param outputFd The file descriptor to write to
|
* @param outputFd The file descriptor to write to
|
||||||
* @param decompress Are we decompressing?
|
* @param decompress Are we decompressing?
|
||||||
|
* @param verbosity The verbosity level to log at
|
||||||
* @returns The number of bytes written
|
* @returns The number of bytes written
|
||||||
*/
|
*/
|
||||||
std::uint64_t writeFile(
|
std::uint64_t writeFile(
|
||||||
ErrorHolder& errorHolder,
|
ErrorHolder& errorHolder,
|
||||||
WorkQueue<std::shared_ptr<BufferWorkQueue>>& outs,
|
WorkQueue<std::shared_ptr<BufferWorkQueue>>& outs,
|
||||||
FILE* outputFd,
|
FILE* outputFd,
|
||||||
bool decompress);
|
bool decompress,
|
||||||
|
int verbosity);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user