Changeset 626ec62 in ingen


Ignore:
Timestamp:
10/23/15 09:42:17 (22 months ago)
Author:
David Robillard <d@…>
Branches:
master, groups, nodeless, parallel, parameters, sequencefix
Children:
707c59c
Parents:
425786b
Message:

Reduce overhead

git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5770 a436a847-0d15-0410-975c-d299462d15a1

Location:
src/server
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/server/GraphImpl.cpp

    r3353177 r626ec62  
    212212    for (uint32_t i = 0; i < num_ports(); ++i) { 
    213213        PortImpl* const port = _ports->at(i); 
    214         port->pre_process(context); 
    215         port->pre_run(context); 
    216         port->connect_buffers(); 
     214        if (!port->is_driver_port()) { 
     215            port->pre_process(context); 
     216            port->pre_run(context); 
     217            port->connect_buffers(); 
     218        } 
    217219    } 
    218220} 
  • src/server/InputPort.cpp

    rdd79e76 r626ec62  
    149149            buffer(v)->update_value_buffer(context.offset()); 
    150150        } 
    151         return; 
    152     } 
    153  
    154     if (_arcs.empty()) { 
     151    } else if (_arcs.empty()) { 
     152        // No incoming arcs, just update set state 
    155153        for (uint32_t v = 0; v < _poly; ++v) { 
    156154            update_set_state(context, v); 
    157155        } 
    158156    } else if (direct_connect()) { 
     157        // Directly connected, use source's buffer directly 
    159158        for (uint32_t v = 0; v < _poly; ++v) { 
    160159            _voices->at(v).buffer = _arcs.front().buffer(v); 
  • src/server/JackDriver.cpp

    rdc5c579 r626ec62  
    313313                                  graph_port->poly(), 
    314314                                  false); 
     315        graph_port->set_is_driver_port(true); 
    315316        return eport; 
    316317    } else { 
  • src/server/PortImpl.cpp

    rdc6bde3 r626ec62  
    7676    , _is_sample_rate(false) 
    7777    , _is_toggled(false) 
     78    , _is_driver_port(false) 
    7879{ 
    7980    assert(block != NULL); 
     
    263264 
    264265void 
    265 PortImpl::update_set_state(Context& context, uint32_t voice) 
    266 { 
    267     SetState& state = _voices->at(voice).set_state; 
     266PortImpl::update_set_state(Context& context, uint32_t v) 
     267{ 
     268    Voice&    voice = _voices->at(v); 
     269    SetState& state = voice.set_state; 
     270    BufferRef buf   = voice.buffer; 
    268271    switch (state.state) { 
    269272    case SetState::State::SET: 
     273        break; 
     274    case SetState::State::SET_CYCLE_1: 
    270275        if (state.time < context.start() && 
    271             buffer(voice)->is_sequence() && 
    272             buffer(voice)->value_type() == _bufs.uris().atom_Float && 
     276            buf->is_sequence() && 
     277            buf->value_type() == _bufs.uris().atom_Float && 
    273278            !_parent->path().is_root()) { 
    274             buffer(voice)->clear(); 
     279            buf->clear(); 
    275280            state.time = context.start(); 
    276281        } 
     282        state.state = SetState::State::SET; 
    277283        break; 
    278284    case SetState::State::HALF_SET_CYCLE_1: 
     
    280286        break; 
    281287    case SetState::State::HALF_SET_CYCLE_2: 
    282         if (buffer(voice)->is_sequence()) { 
    283             buffer(voice)->clear(); 
    284             buffer(voice)->append_event( 
     288        if (buf->is_sequence()) { 
     289            buf->clear(); 
     290            buf->append_event( 
    285291                0, sizeof(float), _bufs.uris().atom_Float, 
    286292                (const uint8_t*)&state.value); 
    287293        } else { 
    288             buffer(voice)->set_block(state.value, 0, context.nframes()); 
    289         } 
    290         state.state = SetState::State::SET; 
     294            buf->set_block(state.value, 0, context.nframes()); 
     295        } 
     296        state.state = SetState::State::SET_CYCLE_1; 
    291297        break; 
    292298    } 
  • src/server/PortImpl.hpp

    rdc6bde3 r626ec62  
    4545public: 
    4646    struct SetState { 
    47         enum class State { SET, HALF_SET_CYCLE_1, HALF_SET_CYCLE_2 }; 
     47        enum class State { 
     48            /// Partially set, first cycle: AAAAA => AAABB. 
     49            HALF_SET_CYCLE_1, 
     50 
     51            /// Partially set, second cycle: AAABB => BBBBB. 
     52            HALF_SET_CYCLE_2, 
     53 
     54            /// Fully set, first cycle (clear events if necessary). 
     55            SET_CYCLE_1, 
     56 
     57            /// Fully set, second cycle and onwards (done). 
     58            SET 
     59        }; 
    4860 
    4961        SetState() : state(State::SET), value(0), time(0) {} 
     
    128140                           FrameTime      time, 
    129141                           Sample         value); 
     142 
     143    void set_is_driver_port(bool b) { _is_driver_port = b; } 
     144    bool is_driver_port() const     { return _is_driver_port; } 
    130145 
    131146    /** Called once per process cycle */ 
     
    265280    bool                _is_sample_rate; 
    266281    bool                _is_toggled; 
     282    bool                _is_driver_port; 
    267283}; 
    268284 
Note: See TracChangeset for help on using the changeset viewer.