Hey Joerg,
Op 06-03-12 11:21, Joerg-Cyril.Hoehle@t-systems.com schreef:
Hi,
If you can run MS-Windows without virtual machine, please visit testbot https://testbot.winehq.org/JobDetails.pl?Key=17175 download the 32 or 64bit executable and execute it.
I can't really trust vm machines for timing, but so far it appears that:
- Vista/w2k8SE/w7 perform rate correction so as to maintain an average number of callbacks
sync.c:583: TimerQueue period 10ms with 0 stress, flags 0 sync.c:558: thread 1340 hpctime 30 delta 15 sync.c:558: thread 1340 hpctime 46 delta 16 sync.c:558: thread 1340 hpctime 46 delta 0 sync.c:601: 80 callbacks within 796/800ms, avg 9.950/10
They'll refire with up to 0 wait upon noticing that it's very late!
sync.c:583: TimerQueue period 10ms with 7 stress, flags 10 sync.c:558: thread 1340 hpctime 46 delta 15 sync.c:570: thread 1340 busy 7ms sync.c:558: thread 1340 hpctime 53 delta 7 sync.c:570: thread 1340 busy 7ms sync.c:558: thread 1340 hpctime 62 delta 9 sync.c:570: thread 1340 busy 7ms sync.c:558: thread 1340 hpctime 77 delta 15 sync.c:570: thread 1340 busy 7ms sync.c:558: thread 1340 hpctime 84 delta 7 sync.c:570: thread 1340 busy 7ms sync.c:601: 59 callbacks within 607/600ms, avg 10.288/10
It maintains its average even the callback is busy for 7ms within each 10ms interval.
sync.c:583: TimerQueue period 10ms with 12 stress, flags 20 sync.c:558: thread 828 hpctime 31 delta 12 sync.c:570: thread 828 busy 12ms sync.c:558: thread 828 hpctime 43 delta 12 sync.c:570: thread 828 busy 12ms sync.c:601: 42 callbacks within 507/400ms, avg 12.071/10
This one surprises me. No multiple threads are used. Wine uses several threads here. When every callback is busy for 12ms, MS does not reach an average 10ms per invocation, whereas Wine does, thanks to several threads that execute the callbacks concurrently.
I want to figure out why several threads were not used.
sync.c:601: 40 callbacks within 4624/4680ms, avg 115.600/117 Ok. Note that the average is usually slightly lower than expected, simply because the first callback is asked to fire at time period/2.
- w2k/xp do not maintain an average (at least on testbot)
sync.c:583: TimerQueue period 10ms with 0 stress, flags 0 sync.c:558: thread 836 hpctime 30 delta 15 sync.c:558: thread 836 hpctime 46 delta 16 sync.c:601: 51 callbacks within 796/800ms, avg 15.608/10
So at least in testbot, the minimum rate is the well-known 15.625ms interval. Note that the 15.625ms is visible in the w7 testbot results too.
sync.c:583: TimerQueue period 117ms with 0 stress, flags 20 sync.c:558: thread 840 hpctime 311 delta 125 sync.c:558: thread 840 hpctime 436 delta 125 sync.c:601: 37 callbacks within 4561/4680ms, avg 123.270/117
Unlike w7, it never corrects to a smaller interval like 109ms to reach the requested average of 117ms.
This is good news for audio in Wine, because we can make CreateTimerQueue mimic Vista/w2k8/w7 behaviour to give us a stable rate (on average).
The logs are quite long, you can send me them per e-mail.
Thank you, Jörg Höhle
Have you tried changing the resolution with timeBeginPeriod? Supposedly affects those too..
~Maarten