diff --git a/tools/jfjoch_process.cpp b/tools/jfjoch_process.cpp index c42e80eb..081a6443 100644 --- a/tools/jfjoch_process.cpp +++ b/tools/jfjoch_process.cpp @@ -389,6 +389,8 @@ int main(int argc, char **argv) { IndexAndRefine indexer(experiment, &indexer_pool); + std::atomic finished_count = 0; + auto worker = [&](int thread_id) { JFJochBitShuffleCompressor compressor(experiment.GetCompressionAlgorithm()); std::vector compressed_buffer; @@ -481,6 +483,8 @@ int main(int argc, char **argv) { break; } + finished_count.fetch_add(1); + // Progress log if (current_idx_offset > 0 && current_idx_offset % 100 == 0) { std::optional indexing_rate; @@ -489,13 +493,20 @@ int main(int argc, char **argv) { indexing_rate = plots.GetIndexingRate(); } + const auto now = std::chrono::steady_clock::now(); + const double elapsed_s = std::chrono::duration(now - start_time).count(); + const int processed_images = finished_count.load(); + const double frame_rate_hz = (elapsed_s > 0.0) ? (processed_images / elapsed_s) : 0.0; + if (indexing_rate.has_value()) { - logger.Info("Processed {} / {} images (indexing rate {:.1f}%)", + logger.Info("Processed {} / {} images ({:.2f} Hz, indexing rate {:.1f}%)", current_idx_offset, images_to_process, + frame_rate_hz, indexing_rate.value() * 100.0f); } else { - logger.Info("Processed {} / {} images (indexing rate N/A)", - current_idx_offset, images_to_process); + logger.Info("Processed {} / {} images ({:.2f} Hz, indexing rate N/A)", + current_idx_offset, images_to_process, + frame_rate_hz); } } }