TracktionEngine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
graph::MultiThreadedNodePlayer Class Reference

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

#include <tracktion_MultiThreadedNodePlayer.h>

Public Member Functions

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

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()

graph::MultiThreadedNodePlayer::MultiThreadedNodePlayer ( )

Creates an empty MultiThreadedNodePlayer.

◆ ~MultiThreadedNodePlayer()

graph::MultiThreadedNodePlayer::~MultiThreadedNodePlayer ( )

Destructor.

Member Function Documentation

◆ setNumThreads()

void 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.

◆ setNode() [1/2]

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

Sets the Node to process.

◆ setNode() [2/2]

void 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 graph::MultiThreadedNodePlayer::prepareToPlay ( double  sampleRateToUse,
int  blockSizeToUse 
)

Prepares the current Node to be played.

◆ getNode()

Node * graph::MultiThreadedNodePlayer::getNode ( )

Returns the current Node.

◆ process()

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

Process a block of the Node.

◆ clearNode()

void 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.

◆ getSampleRate()

double graph::MultiThreadedNodePlayer::getSampleRate ( ) const

Returns the current sample rate.


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