Hello Yoshimi-devs,

generally speaking, Logging is a notorious and obnoxious topic.
While most developers want it "just to work", anyone who has been around in this
business for long enough can share a lot of "war stories" related to logging.

That being said -- I'd like to bring up the question how relevant / necessary /
heartfelt is the current state-of-affairs actually? Does anyone really care
that the logging works as it works now in Yoshimi?

I'm asking because its one of the recurrent pain points whenever you're in
the unfortunate situation of doing any kind of maintenance work.

Currently
 - a significant fraction of all usages of these horrible synth-pointers or
   references passed around almost everywhere are just due to the SynthEngine
   being abused for logging -- a concern which really is not related to
   generating sound -- it just seems convenient, because ....

 - we have separate loggers per Engine instance (theoretically the logging
   settings could even be configured differently for each instance)

 - but this is only relevant if the user has configured the log messages
   to go to the "console" widget in the GUI

 - in which case they will be dumped into a std::list, which is one of
   the slowest containers, as each entry causes memory allocations and
   pointer based data structures are bad for the cache performance

 - and last but not least, the way it is done is not threadsafe;
   the main thread and the background thread and the GUI thread are
   contending for the same container. If the GUI just happens to
   remove the last log entries while e.g. the background thread
   adds new ones, we'll get a memory corruption. Leading to those
   kind of crashes that happen rarely, and are never reproducible.


A bit of wishful thinking:
If it turned out that we do not actually need all that sophistication...
Then there could be a single static logging function as entrance point,
which dumps all messages into a ringbuffer. And the GUI thread could
pull them out and write them either to STDERR or into a single widget
related to the "primary synth"

What do we need logging for?
- see start-up messages to draw conclusion when the connection fail
- see error messages when loading corrupted data from XML
- see error messages when file system operations somehow fail
- maybe there are some special diagnostics sometimes relevant for devs
- the sound-testsuite also watches STDOUT to interact with Yoshimi
- and then the audio backends have the tendency to flood the log
  with messages, which in some cases are also relevant for diagnostics

Maybe we could reconsider and discuss that topic a bit more...

anyway...
Have a nice Easter!
-- Hermann






_______________________________________________
Yoshimi-devel mailing list
Yoshimi-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/yoshimi-devel

Reply via email to