From 9b724eb5f29d3899016d1d5b279e14ce05773594 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 25 Jan 2025 07:41:23 +0330 Subject: [PATCH] Use binary repeat_counts file for better performance, Changed repeat_counts from uint32_t to size_t for better alignment in the file, Changed repeat_counts save time to every 1minute as destructor not working --- .../csrc/offline-tts-cache-mechanism.cc | 26 +++++++++++++------ .../csrc/offline-tts-cache-mechanism.h | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/sherpa-onnx/csrc/offline-tts-cache-mechanism.cc b/sherpa-onnx/csrc/offline-tts-cache-mechanism.cc index ecd19f4c6..0d769728c 100644 --- a/sherpa-onnx/csrc/offline-tts-cache-mechanism.cc +++ b/sherpa-onnx/csrc/offline-tts-cache-mechanism.cc @@ -119,13 +119,13 @@ std::vector OfflineTtsCacheMechanism::GetWavFile( repeat_counts_[text_hash]++; // Increment the repeat count } - // Save the repeat counts every 10 minutes - //auto now = std::chrono::steady_clock::now(); - //if (std::chrono::duration_cast( - //now - last_save_time_).count() >= 10 * 60) { + // Save the repeat counts every minute + auto now = std::chrono::steady_clock::now(); + if (std::chrono::duration_cast( + now - last_save_time_).count() >= 1 * 60) { SaveRepeatCounts(); - //last_save_time_ = now; - //} + last_save_time_ = now; + } return samples; } @@ -206,7 +206,7 @@ void OfflineTtsCacheMechanism::LoadRepeatCounts() { // Read each entry for (size_t i = 0; i < num_entries; ++i) { std::size_t text_hash; - int32_t count; + std::size_t count; ifs.read(reinterpret_cast(&text_hash), sizeof(text_hash)); ifs.read(reinterpret_cast(&count), sizeof(count)); repeat_counts_[text_hash] = count; @@ -214,6 +214,9 @@ void OfflineTtsCacheMechanism::LoadRepeatCounts() { } void OfflineTtsCacheMechanism::SaveRepeatCounts() { + // Start timing + auto start_time = std::chrono::steady_clock::now(); + std::string repeat_count_file = cache_dir_ + "/repeat_counts.bin"; // Open the file for writing in binary mode @@ -233,6 +236,13 @@ void OfflineTtsCacheMechanism::SaveRepeatCounts() { ofs.write(reinterpret_cast(&entry.first), sizeof(entry.first)); ofs.write(reinterpret_cast(&entry.second), sizeof(entry.second)); } + + // End timing + auto end_time = std::chrono::steady_clock::now(); + auto elapsed_time = std::chrono::duration_cast(end_time - start_time).count(); + + // Print the time taken + SHERPA_ONNX_LOGE("SaveRepeatCounts took %lld milliseconds", elapsed_time); } void OfflineTtsCacheMechanism::RemoveWavFile(const std::size_t &text_hash) { @@ -294,7 +304,7 @@ void OfflineTtsCacheMechanism::EnsureCacheLimit() { std::size_t OfflineTtsCacheMechanism::GetLeastRepeatedFile() { std::size_t least_repeated_file = 0; - int32_t min_count = std::numeric_limits::max(); + std::size_t min_count = std::numeric_limits::max(); for (const auto &entry : repeat_counts_) { if (entry.second <= 1) { diff --git a/sherpa-onnx/csrc/offline-tts-cache-mechanism.h b/sherpa-onnx/csrc/offline-tts-cache-mechanism.h index b1e5dd0da..9945b1f3c 100644 --- a/sherpa-onnx/csrc/offline-tts-cache-mechanism.h +++ b/sherpa-onnx/csrc/offline-tts-cache-mechanism.h @@ -72,7 +72,7 @@ class OfflineTtsCacheMechanism { int32_t used_cache_size_bytes_; // Map of text hash to repeat count - std::unordered_map repeat_counts_; + std::unordered_map repeat_counts_; // Vector of cached file names std::vector cache_vector_;