perf(parser): only show progress bar for chapters >= 50KB

- Fix progress check logic: use lastProgress/10 != progress/10 to catch
  any 10% boundary crossing instead of requiring exact 10% match
- Only show progress bar for chapters >= 50KB where rendering overhead
  is worth the visual feedback
This commit is contained in:
Eunchurn Park 2025-12-26 13:38:00 +09:00
parent 802842e6f2
commit f41e7496ad
No known key found for this signature in database
GPG Key ID: 29D94D9C697E3F92

View File

@ -11,6 +11,9 @@
const char* HEADER_TAGS[] = {"h1", "h2", "h3", "h4", "h5", "h6"};
constexpr int NUM_HEADER_TAGS = sizeof(HEADER_TAGS) / sizeof(HEADER_TAGS[0]);
// Minimum file size (in bytes) to show progress bar - smaller chapters don't benefit from it
constexpr size_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB
const char* BLOCK_TAGS[] = {"p", "li", "div", "br", "blockquote"};
constexpr int NUM_BLOCK_TAGS = sizeof(BLOCK_TAGS) / sizeof(BLOCK_TAGS[0]);
@ -255,10 +258,11 @@ bool ChapterHtmlSlimParser::parseAndBuildPages() {
}
// Update progress (call every 10% change to avoid too frequent updates)
// Only show progress for larger chapters where rendering overhead is worth it
bytesRead += len;
if (progressFn && totalSize > 0) {
if (progressFn && totalSize >= MIN_SIZE_FOR_PROGRESS) {
const int progress = static_cast<int>((bytesRead * 100) / totalSize);
if (progress != lastProgress && progress % 10 == 0) {
if (lastProgress / 10 != progress / 10) {
lastProgress = progress;
progressFn(progress);
}