void FramerateEqualizer::_init()
{
    const Compound* compound = getCompound();

    if( _nSamples > 0 || !compound )
        return;

    _nSamples = 1;

    // Subscribe to child channel load events
    const Compounds& children = compound->getChildren();
    
    EQASSERT( _loadListeners.empty( ));
    _loadListeners.resize( children.size( ));
    
    for( size_t i = 0; i < children.size(); ++i )
    {
        Compound*      child        = children[i];
        const uint32_t period       = child->getInheritPeriod();
        LoadListener&  loadListener = _loadListeners[i];
        
        loadListener.parent = this;
        loadListener.period = period;
        
        LoadSubscriber subscriber( &loadListener );
        child->accept( subscriber );
        
        _nSamples = EQ_MAX( _nSamples, period );
    }

    _nSamples = EQ_MIN( _nSamples, 100 );
}
void FramerateEqualizer::_exit()
{
    const Compound* compound = getCompound();
    if( !compound || _nSamples == 0 )
        return;

    const Compounds& children = compound->getChildren();

    EQASSERT( _loadListeners.size() == children.size( ));
    for( size_t i = 0; i < children.size(); ++i )
    {
        Compound*      child        = children[i];
        LoadListener&  loadListener = _loadListeners[i];
        
        LoadUnsubscriber unsubscriber( &loadListener );
        child->accept( unsubscriber );
    }
    
    _loadListeners.clear();
    _times.clear();
    _nSamples = 0;
}