On Fri, Jul 31, 2009 at 2:51 PM, Tofu Linden<[email protected]> wrote: > If I understand your description correctly - > > I think the bug is that OpenAL should NOT be mixing sources that are > not in a playing state. That would be an AL bug (especially since > sources are traditionally considered a 'cheap' resource in AL as > long as they're not doing anything).
They are not doing that, I was counting the number of elements in a linked list, but those sources that are non-playing are skipped in that list and don't use CPU. > Now, if we're leaving those sources in a playing state but just > feeding silence into them - that would be a viewer bug. This turns out to be the case. A muted sound is left playing and it's gain is set to 0. Effectively this means that we're mixing silence. In fact, it turns out to be a lot worse than just mixing silence: libopenal for some reason uses 2 to 3 times more cpu to mix a channel that has it's gain set to 0, than mixing one with a large gain! The whole "intermittent" comes from the fact that I can play 31 non-muted channels, but not 31 muted ones. In the latter case the lock is hardly released by the audio thread thus. > I don't think that moving AL calls out of the main thread is > the correct solution - (most) AL calls are not expected to significantly > block in the first place, and this sounds like it is AL's own > calls waiting for locks on AL's own backend. This would bite > any AL-using app - this AL implementation should be fixed. > > I suggest investigating whether the viewer is doing the right thing > (stopping non-playing sources) and if so, taking investigation over > to the problematic AL implementation (openal-soft?). > > Thanks! I'd be happy, now that I know that mixing channels with a gain of 0 cost much more cpu, to fix and close this bug by stopping sound sources instead of setting their gain to 0. _______________________________________________ Policies and (un)subscribe information available here: http://wiki.secondlife.com/wiki/SLDev Please read the policies before posting to keep unmoderated posting privileges
