void WaveformWidgetFactory::addTimerListener(QWidget* pWidget) { // Do not hold the pointer to of timer listeners since they may be deleted. // We don't activate update() or repaint() directly so listener widgets // can decide whether to paint or not. connect(this, SIGNAL(waveformUpdateTick()), pWidget, SLOT(maybeUpdate()), Qt::DirectConnection); }
void WaveformWidgetFactory::render() { ScopedTimer t(QString("WaveformWidgetFactory::render() %1waveforms") .arg(m_waveformWidgetHolders.size())); //int paintersSetupTime0 = 0; //int paintersSetupTime1 = 0; if (!m_skipRender) { if (m_type) { // no regular updates for an empty waveform // next rendered frame is displayed after next buffer swap and than after VSync for (int i = 0; i < m_waveformWidgetHolders.size(); i++) { // Calculate play position for the new Frame in following run m_waveformWidgetHolders[i].m_waveformWidget->preRender(m_vsyncThread); } //qDebug() << "prerender" << m_vsyncThread->elapsed(); // It may happen that there is an artificially delayed due to // anti tearing driver settings // all render commands are delayed until the swap from the previous run is executed for (int i = 0; i < m_waveformWidgetHolders.size(); i++) { WaveformWidgetAbstract* pWaveformWidget = m_waveformWidgetHolders[i].m_waveformWidget; if (pWaveformWidget->getWidth() > 0 && pWaveformWidget->getWidget()->isVisible()) { (void)pWaveformWidget->render(); } // qDebug() << "render" << i << m_vsyncThread->elapsed(); } } // Notify all other waveform-like widgets (e.g. WSpinny's) that they should // update. //int t1 = m_vsyncThread->elapsed(); emit(waveformUpdateTick()); //qDebug() << "emit" << m_vsyncThread->elapsed() - t1; m_frameCnt += 1.0; int timeCnt = m_time.elapsed(); if (timeCnt > 1000) { m_time.start(); m_frameCnt = m_frameCnt * 1000 / timeCnt; // latency correction emit(waveformMeasured(m_frameCnt, m_vsyncThread->rtErrorCnt())); m_frameCnt = 0.0; } } //qDebug() << "refresh end" << m_vsyncThread->elapsed(); m_vsyncThread->vsyncSlotFinished(); }
void WaveformWidgetFactory::addTimerListener(QWidget* pWidget) { // Do not hold the pointer to of timer listeners since they may be deleted connect(this, SIGNAL(waveformUpdateTick()), pWidget, SLOT(repaint()), Qt::DirectConnection); }