TracktionEngine
Public Member Functions | List of all members
tracktion::graph::MultiThreadedNodePlayer Class Reference

Plays back a node with mutiple threads. More...

Public Member Functions

 MultiThreadedNodePlayer ()
 Creates an empty MultiThreadedNodePlayer. More...
 
 ~MultiThreadedNodePlayer ()
 Destructor. More...
 
void setNumThreads (size_t)
 Sets the number of threads to use for rendering. More...
 
void setNode (std::unique_ptr< Node >)
 Sets the Node to process. More...
 
void setNode (std::unique_ptr< Node > newNode, double sampleRateToUse, int blockSizeToUse)
 Sets the Node to process with a new sample rate and block size. More...
 
void prepareToPlay (double sampleRateToUse, int blockSizeToUse)
 Prepares the current Node to be played. More...
 
NodegetNode ()
 Returns the current Node. More...
 
int process (const Node::ProcessContext &)
 Process a block of the Node. More...
 
void clearNode ()
 Clears the current Node. More...
 
double getSampleRate () const
 Returns the current sample rate. More...
 

Detailed Description

Plays back a node with mutiple threads.

This uses a simpler internal mechanism than the LockFreeMultiThreadedNodePlayer but uses spin locks do do so so isn't completely wait-free.

The thread pool uses a hybrid method of trying to keep processing threads spinning where possible but falling back to a condition variable if they spin for too long.

This is mainly here to compare performance with the LockFreeMultiThreadedNodePlayer.

See also
LockFreeMultiThreadedNodePlayer

Constructor & Destructor Documentation

◆ MultiThreadedNodePlayer()

tracktion::graph::MultiThreadedNodePlayer::MultiThreadedNodePlayer ( )

Creates an empty MultiThreadedNodePlayer.

◆ ~MultiThreadedNodePlayer()

tracktion::graph::MultiThreadedNodePlayer::~MultiThreadedNodePlayer ( )

Destructor.

Member Function Documentation

◆ setNumThreads()

void tracktion::graph::MultiThreadedNodePlayer::setNumThreads ( size_t  )

Sets the number of threads to use for rendering.

This can be 0 in which case only the process calling thread will be used for processing. N.B. this will pause processing whilst updating the threads so there will be a gap in the audio.

Referenced by tracktion::engine::MultiThreadedNodePlayer::setNumThreads().

◆ setNode() [1/2]

void tracktion::graph::MultiThreadedNodePlayer::setNode ( std::unique_ptr< Node )

◆ setNode() [2/2]

void tracktion::graph::MultiThreadedNodePlayer::setNode ( std::unique_ptr< Node newNode,
double  sampleRateToUse,
int  blockSizeToUse 
)

Sets the Node to process with a new sample rate and block size.

◆ prepareToPlay()

void tracktion::graph::MultiThreadedNodePlayer::prepareToPlay ( double  sampleRateToUse,
int  blockSizeToUse 
)

Prepares the current Node to be played.

Referenced by tracktion::engine::MultiThreadedNodePlayer::prepareToPlay().

◆ getNode()

Node* tracktion::graph::MultiThreadedNodePlayer::getNode ( )

Returns the current Node.

Referenced by tracktion::engine::MultiThreadedNodePlayer::getNode().

◆ process()

int tracktion::graph::MultiThreadedNodePlayer::process ( const Node::ProcessContext )

Process a block of the Node.

Referenced by tracktion::engine::MultiThreadedNodePlayer::process().

◆ clearNode()

void tracktion::graph::MultiThreadedNodePlayer::clearNode ( )

Clears the current Node.

Note that this shouldn't be called concurrently with setNode. If it's called concurrently with process, it will block until the current process call has finished. This should be used sparingly as its a heavyweight operation which has to stop any processing threads and restart them again afterwrds.

Referenced by tracktion::engine::MultiThreadedNodePlayer::clearNode().

◆ getSampleRate()

double tracktion::graph::MultiThreadedNodePlayer::getSampleRate ( ) const

The documentation for this class was generated from the following file: