# HG changeset patch # User Chris Cannam # Date 1154608935 0 # Node ID 6ec58bb8f7297e4e70616bd202efab3690c72e5d # Parent 8d92611901d30a9e0c2a1ab72a18cda5ecca06e2 * Suspend/resume fft data server write activity while reading from a server to repaint the spectrogram display. Makes a significant improvement to the otherwise dreadful responsiveness of spectrogram display. diff -r 8d92611901d3 -r 6ec58bb8f729 data/fft/FFTDataServer.cpp --- a/data/fft/FFTDataServer.cpp Wed Aug 02 16:42:17 2006 +0000 +++ b/data/fft/FFTDataServer.cpp Thu Aug 03 12:42:15 2006 +0000 @@ -22,7 +22,7 @@ #include "system/System.h" #define DEBUG_FFT_SERVER 1 -#define DEBUG_FFT_SERVER_FILL 1 +//#define DEBUG_FFT_SERVER_FILL 1 #ifdef DEBUG_FFT_SERVER_FILL #ifndef DEBUG_FFT_SERVER @@ -413,6 +413,9 @@ void FFTDataServer::resume() { +#ifdef DEBUG_FFT_SERVER + std::cerr << "FFTDataServer(" << this << "): resume" << std::endl; +#endif m_suspended = false; m_condition.wakeAll(); } @@ -553,6 +556,7 @@ { if (!haveCache(x)) { if (m_lastUsedCache == -1) { + if (m_suspended) resume(); m_fillThread->start(); } return false; @@ -646,6 +650,8 @@ m_workbuffer, m_workbuffer + m_fftSize/2, factor); + + if (m_suspended) resume(); } size_t diff -r 8d92611901d3 -r 6ec58bb8f729 data/fft/FFTDataServer.h --- a/data/fft/FFTDataServer.h Wed Aug 02 16:42:17 2006 +0000 +++ b/data/fft/FFTDataServer.h Thu Aug 03 12:42:15 2006 +0000 @@ -74,6 +74,7 @@ bool isColumnReady(size_t x); void suspend(); + void resume(); // also happens automatically if new data needed // Convenience functions: @@ -131,7 +132,6 @@ int m_lastUsedCache; FFTCache *getCache(size_t x, size_t &col) { - if (m_suspended) resume(); col = x % m_cacheWidth; int c = x / m_cacheWidth; // The only use of m_lastUsedCache without a lock is to @@ -179,7 +179,6 @@ void deleteProcessingData(); void fillColumn(size_t x); - void resume(); QString generateFileBasename() const; static QString generateFileBasename(const DenseTimeValueModel *model, diff -r 8d92611901d3 -r 6ec58bb8f729 data/fileio/MatrixFile.cpp --- a/data/fileio/MatrixFile.cpp Wed Aug 02 16:42:17 2006 +0000 +++ b/data/fileio/MatrixFile.cpp Thu Aug 03 12:42:15 2006 +0000 @@ -32,8 +32,8 @@ #include #include -#define DEBUG_MATRIX_FILE 1 -#define DEBUG_MATRIX_FILE_READ_SET 1 +//#define DEBUG_MATRIX_FILE 1 +//#define DEBUG_MATRIX_FILE_READ_SET 1 #ifdef DEBUG_MATRIX_FILE_READ_SET #ifndef DEBUG_MATRIX_FILE diff -r 8d92611901d3 -r 6ec58bb8f729 data/model/FFTModel.h --- a/data/model/FFTModel.h Wed Aug 02 16:42:17 2006 +0000 +++ b/data/model/FFTModel.h Thu Aug 03 12:42:15 2006 +0000 @@ -100,6 +100,9 @@ virtual Model *clone() const; + virtual void suspend() { m_server->suspend(); } + virtual void resume() { m_server->resume(); } + private: FFTModel(const FFTModel &); FFTModel &operator=(const FFTModel &); // not implemented