diff --git a/src/waveform/vsyncthread.cpp b/src/waveform/vsyncthread.cpp index 9b8ec2e1af9..08c0bfbfad3 100644 --- a/src/waveform/vsyncthread.cpp +++ b/src/waveform/vsyncthread.cpp @@ -24,7 +24,7 @@ VSyncThread::VSyncThread(QObject* pParent) VSyncThread::~VSyncThread() { m_bDoRendering = false; - m_semaVsyncSlot.release(2); // Two slots + m_semaVsyncSlot.release(m_vSyncMode == ST_PLL ? 1 : 2); // Two slots, one for PLL wait(); //delete m_glw; } @@ -95,7 +95,6 @@ void VSyncThread::run() { // and render them for the next swap emit vsyncSwapAndRender(); m_semaVsyncSlot.acquire(); - m_semaVsyncSlot.acquire(); if (m_sinceLastSwap.toIntegerMicros() > sleepForSkippedFrames + pllDeltaOut * 3 / 2) { m_droppedFrames++; // Adjusting the offset on each frame drop ends up at diff --git a/src/waveform/waveformwidgetfactory.cpp b/src/waveform/waveformwidgetfactory.cpp index f61198e43f0..17212b2f0db 100644 --- a/src/waveform/waveformwidgetfactory.cpp +++ b/src/waveform/waveformwidgetfactory.cpp @@ -687,7 +687,7 @@ void WaveformWidgetFactory::notifyZoomChange(WWaveformViewer* viewer) { } } -void WaveformWidgetFactory::render() { +void WaveformWidgetFactory::renderSelf() { ScopedTimer t("WaveformWidgetFactory::render() %1waveforms", static_cast(m_waveformWidgetHolders.size())); @@ -759,10 +759,14 @@ void WaveformWidgetFactory::render() { m_pGuiTick->process(); //qDebug() << "refresh end" << m_vsyncThread->elapsed(); +} + +void WaveformWidgetFactory::render() { + renderSelf(); m_vsyncThread->vsyncSlotFinished(); } -void WaveformWidgetFactory::swap() { +void WaveformWidgetFactory::swapSelf() { ScopedTimer t("WaveformWidgetFactory::swap() %1waveforms", static_cast(m_waveformWidgetHolders.size())); @@ -797,13 +801,17 @@ void WaveformWidgetFactory::swap() { // If we are using WVuMeter, this does nothing emit swapVuMeters(); } - //qDebug() << "swap end" << m_vsyncThread->elapsed(); +} + +void WaveformWidgetFactory::swap() { + swapSelf(); m_vsyncThread->vsyncSlotFinished(); } void WaveformWidgetFactory::swapAndRender() { - swap(); - render(); + swapSelf(); + renderSelf(); + m_vsyncThread->vsyncSlotFinished(); } void WaveformWidgetFactory::slotFrameSwapped() { diff --git a/src/waveform/waveformwidgetfactory.h b/src/waveform/waveformwidgetfactory.h index 8c4761eb893..17054366918 100644 --- a/src/waveform/waveformwidgetfactory.h +++ b/src/waveform/waveformwidgetfactory.h @@ -162,6 +162,9 @@ class WaveformWidgetFactory : public QObject, public Singleton QString buildWidgetDisplayName() const;