Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/MixerWorkerThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class MixerWorkerThread : public QThread
void wait();

private:
#define JOB_QUEUE_SIZE 1024
#define JOB_QUEUE_SIZE 8192
QAtomicPointer<ThreadableJob> m_items[JOB_QUEUE_SIZE];
AtomicInt m_queueSize;
AtomicInt m_itemsDone;
Expand Down
11 changes: 9 additions & 2 deletions src/core/MixerWorkerThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "MixerWorkerThread.h"

#include "denormals.h"
#include <QDebug>
#include <QMutex>
#include <QWaitCondition>
#include "ThreadableJob.h"
Expand Down Expand Up @@ -54,7 +55,13 @@ void MixerWorkerThread::JobQueue::addJob( ThreadableJob * _job )
// update job state
_job->queue();
// actually queue the job via atomic operations
m_items[m_queueSize.fetchAndAddOrdered(1)] = _job;
auto index = m_queueSize.fetchAndAddOrdered(1);
if (index < JOB_QUEUE_SIZE) {
m_items[index] = _job;
} else {
qWarning() << "Job queue is full!";
m_itemsDone.fetchAndAddOrdered(1);
}
}
}

Expand All @@ -66,7 +73,7 @@ void MixerWorkerThread::JobQueue::run()
while( processedJob && (int) m_itemsDone < (int) m_queueSize )
{
processedJob = false;
for( int i = 0; i < m_queueSize; ++i )
for( int i = 0; i < m_queueSize && i < JOB_QUEUE_SIZE; ++i )
{
ThreadableJob * job = m_items[i].fetchAndStoreOrdered( NULL );
if( job )
Expand Down