Mercurial > hg > svgui
changeset 381:44670ce11a0c spectrogram-cache-rejig
* Some debug output and tweaks
author | Chris Cannam |
---|---|
date | Thu, 08 May 2008 09:23:16 +0000 |
parents | 64e84e5efb76 |
children | |
files | layer/SpectrogramLayer.cpp |
diffstat | 1 files changed, 42 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/layer/SpectrogramLayer.cpp Wed Feb 27 11:59:42 2008 +0000 +++ b/layer/SpectrogramLayer.cpp Thu May 08 09:23:16 2008 +0000 @@ -1716,7 +1716,7 @@ // Plan: // // - the QImage cache is managed by the GUI thread (which creates, -// sizes and destroys it). +// sizes and destroys it) // // - but the cache is drawn on by another thread (paint thread) // @@ -1758,7 +1758,9 @@ // paints. The GUI thread should then never modify the cache // image without holding its specific mutex.) - Profiler profiler("SpectrogramLayer::paint", false); + Profiler profiler("SpectrogramLayer::paint", true); + + std::cerr << "SpectrogramLayer::paint entering" << std::endl; QMutexLocker locker(&m_pixmapCacheMutex); @@ -1767,6 +1769,8 @@ float ratio = float(v->getZoomLevel()) / float(getWindowIncrement()); int imageWidth = lrintf(v->width() * ratio); + std::cerr << "SpectrogramLayer::paint: view width = " << v->width() << ", ratio = " << ratio << ", imageWidth = " << imageWidth << std::endl; + PixmapCache *cache = m_pixmapCaches[v]; if (!cache) { cache = new PixmapCache; @@ -1778,8 +1782,8 @@ cache->mutex.unlock(); #ifdef DEBUG_SPECTROGRAM_REPAINT std::cerr << "SpectrogramLayer::paint: Created new cache, size " - << v->width() << "x" << v->height() << " (" - << v->width() * v->height() * 4 << " bytes)" << std::endl; + << imageWidth << "x" << v->height() << " (" + << imageWidth * v->height() * 4 << " bytes)" << std::endl; #endif return; //!!! prod paint thread } @@ -1915,8 +1919,12 @@ if (!m_exiting) { //!!! wait on condition - if (workToDo) ; // usleep(100); - else sleep(1); + if (workToDo) { + // usleep(100); + std::cerr << "SpectrogramLayer::PaintThread::run: still work to do, continuing" << std::endl; + } else { + sleep(10); + } } } } @@ -1926,7 +1934,7 @@ bool SpectrogramLayer::paintCache(View *v) const { - Profiler profiler("SpectrogramLayer::paintCache", false); + Profiler profiler("SpectrogramLayer::paintCache", true); m_pixmapCacheMutex.lock(); @@ -1944,6 +1952,11 @@ QMutexLocker locker(&cache.mutex); m_pixmapCacheMutex.unlock(); +#ifdef DEBUG_SPECTROGRAM_REPAINT + std::cerr << "SpectrogramLayer::paintCache(): Have cache to paint onto" + << std::endl; +#endif + QImage &image = *cache.pixmap; //!!! rename to cache.image const DenseTimeValueModel *model = m_model; @@ -2144,6 +2157,7 @@ } bool runOutOfData = false; + int runOutOfDataAt = x1; std::cerr << "painting from " << x0 << " to " << x1 << std::endl; @@ -2169,6 +2183,7 @@ std::cerr << "Met unavailable column at col " << col << std::endl; #endif runOutOfData = true; + runOutOfDataAt = x0 + x; break; } @@ -2357,11 +2372,21 @@ #endif } */ + + if (runOutOfData) { + std::cerr << "ran out of data, setting x1 to " << runOutOfDataAt + << std::endl; + x1 = runOutOfDataAt; + } + if (cache.validArea.width() > 0) { int vx0 = 0, vx1 = 0; vx0 = cache.validArea.x(); vx1 = cache.validArea.x() + cache.validArea.width(); + + std::cerr << "set cache valid region from " + << cache.validArea.x() << " -> " << cache.validArea.x() + cache.validArea.width(); cache.validArea = QRect (std::min(vx0, x0), cache.validArea.y(), @@ -2369,9 +2394,17 @@ x1 - std::min(vx0, x0)), cache.validArea.height()); + std::cerr << " to " + << cache.validArea.x() << " -> " << cache.validArea.x() + cache.validArea.width() + << std::endl; + } else { cache.validArea = QRect(x0, 0, x1 - x0, h); + + std::cerr << "set cache valid region from empty to " + << cache.validArea.x() << " -> " << cache.validArea.x() + cache.validArea.width() + << std::endl; } /* @@ -2620,8 +2653,6 @@ if (x0 < vx0) { if (x0 + paintBlockWidth < vx0) { x0 = vx0 - paintBlockWidth; -// } else { -// x0 = 0; } x1 = vx0; } else if (x0 >= vx1) { @@ -2664,6 +2695,8 @@ // } } } + + std::cerr << "SpectrogramLayer::selectPaintStrip: returning " << x0 << " -> " << x1 << std::endl; } void