From ef0685963b57cb80d810833f5db240808041b275 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 3 Jan 2020 17:32:40 +0100 Subject: [PATCH] Added load time checks --- src/sfizz/FilePool.cpp | 11 +++++++++-- src/sfizz/FilePool.h | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index 56019db4..515f4470 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -29,7 +29,6 @@ #include "Oversampler.h" #include "AtomicGuard.h" #include "absl/types/span.h" -#include #include #include #include @@ -181,6 +180,7 @@ sfz::FilePromisePtr sfz::FilePool::getFilePromise(const std::string& filename) n promise->preloadedData = preloaded->second.preloadedData; promise->sampleRate = preloaded->second.sampleRate; promise->oversamplingFactor = oversamplingFactor; + promise->creationTime = std::chrono::high_resolution_clock::now(); if (!promiseQueue.try_push(promise)) { DBG("[sfizz] Could not enqueue the promise for " << filename << " (queue size " << promiseQueue.size() << ")"); @@ -229,7 +229,7 @@ void sfz::FilePool::loadingThread() noexcept { FilePromisePtr promise; while (!quitThread) { - + if (emptyQueue) { while(promiseQueue.try_pop(promise)) { // We're just dequeuing @@ -244,6 +244,9 @@ void sfz::FilePool::loadingThread() noexcept } threadsLoading++; + const auto waitDuration = std::chrono::high_resolution_clock::now() - promise->creationTime; + [[maybe_unused]] const auto waitDurationMillis = std::chrono::duration(waitDuration).count(); + fs::path file { rootDirectory / std::string(promise->filename) }; SndfileHandle sndFile(file.c_str()); if (sndFile.error() != 0) { @@ -255,6 +258,10 @@ void sfz::FilePool::loadingThread() noexcept promise->dataReady = true; threadsLoading--; + const auto duration = std::chrono::high_resolution_clock::now() - promise->creationTime; + [[maybe_unused]] const auto durationMillis = std::chrono::duration(duration).count(); + DBG("Promise filled in " << durationMillis << " ms (waiting for " << waitDurationMillis << " ms)"); + while (!filledPromiseQueue.try_push(promise)) { DBG("[sfizz] Error enqueuing the promise for " << promise->filename << " in the filledPromiseQueue"); std::this_thread::sleep_for(1ms); diff --git a/src/sfizz/FilePool.h b/src/sfizz/FilePool.h index 89793461..9e980532 100644 --- a/src/sfizz/FilePool.h +++ b/src/sfizz/FilePool.h @@ -34,6 +34,7 @@ #include "absl/strings/string_view.h" // #include "moodycamel/concurrentqueue.h" #include "atomic_queue/atomic_queue.h" +#include #include #include @@ -77,6 +78,7 @@ struct FilePromise Oversampling oversamplingFactor { config::defaultOversamplingFactor }; std::atomic_size_t availableFrames { 0 }; std::atomic dataReady { false }; + std::chrono::time_point creationTime; LEAK_DETECTOR(FilePromise); };