mmtimer resolution question
Jeremy White
jwhite at codeweavers.com
Fri Feb 11 07:50:03 CST 2005
I'm taking a public thread that I responded to privately back
to public view:
Robert Reif wrote:
> Jeremy White wrote:
>
>>> Putting traces into the mmtimer thread loop shows
>>> WaitForSingleObject is sleeping for about 20 ms and then
>>> calling the callback twice to catch up.
>>
>>
>>
>> Well, that means mmtimer is right.
>>
>> You might try putting traces around the
>> conditional YieldExecution on line 730
>> of ntdll/sync.c and see if that chews up time;
>> if it does, removing the Yield might help.
>>
>>
> Interesting results. It fixes the sound quality and FIXME problem
> but it is still going about 20 ms between callback pairs.
>
> Could the yield just be aggravating the timer resolution problem?
I think this is the thread priority problem I mentioned earlier.
The behavior of winmm is correct; it is supposed to deliver every
single timer request, even if it has to double or triple (or
more!) up to do it. I verified that very carefully on Windows.
The reason you see pretty steady 10 ms resolution on Windows
is that the winmm thread on Windows is flagged as a priority
15 thread, so it does not get interrupted or time sliced away;
it fires precisely when it wants to. It's much harder to
achieve the same thing on Linux, sadly.
Hmm. As I sit here and think about this, though, I do find myself a
little bit puzzled. I would have expected that, if my understanding
is right, you would have seen much more dramatic time gaps. On a
2.6 kernel, for example, I would expect you to see jumps on the order
of 100 ms (hence ten winmm requests fired). And exactly 20 ms
spacing is a little too consistent and interesting a number; it
suggests that there is a more precise understanding that should
be available.
That may be a function of the test program, though. I suspect in a 'real'
program, where other active threads are demanding more cpu that you
might get more sporadic results. It might be interesting to add a spin
looping thread to the test case and see if you suddenly get larger gaps.
Cheers,
Jeremy
More information about the wine-devel
mailing list