diff options
Diffstat (limited to 'flow/gsl/gsl-iplan.txt')
-rw-r--r-- | flow/gsl/gsl-iplan.txt | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/flow/gsl/gsl-iplan.txt b/flow/gsl/gsl-iplan.txt new file mode 100644 index 0000000..e37b55d --- /dev/null +++ b/flow/gsl/gsl-iplan.txt @@ -0,0 +1,57 @@ +How to integrate the GSL engine into artsd? + +Open issues: + - adapting the driver model + - adapting main loop callbacks + - adapting the start()/stop() semantics + - multi streams + - midi/audio timing + - synchronization + - threadsafe module api + - how to live without the threading layer + +[*] adapting main loop callbacks + +the engine uses a three-state mainloop callback, which consists of + +1. prepare +2. check +3. dispatch + +with the following rules applying + +1. you always need to prepare, to obtain pollfds +2. you check to see whether something needs to be done +3. you dispatch to make the engine do something + +which will need to be treated in aRts as two state strategy, which is: +================================================================================ +INIT: + prepare -> register fds with the IOManager +-- +ON NOTIFY: + unregister fds with the IOManager + + reselect all fds + check -> check if engine needs work + dispatch -> make engine do something + + prepare -> reregister fds with the IOManager + +as temporary measure, we could eventually build an imaginary fd into the +engine, which could be used for triggering calculations manually - we might +also take the real fd, on the other hand, which would only lead to the +IOManager sending out two notifications, which is not too critical +================================================================================ +problem: + +iomanager reentrancy - the engine probably needs to be partially reentrant, +if we are to expect that a synchronous destruction of a module (such as in +a remote unref) transactionsynchronizes itself with the engine - but if we +expect this, then we will need to register some fds reentrant with the engine + +well - we could - for a start - try to NOT reselect all fds to get a snapshot +of the whole world in one piece - but try to 1:1 map iomanager callbacks to +revents - this might or might not work + + |