The new and improved throtteling code (for bad timers) looks like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| private long lastFrame=0; float yield=10000f; float frameAverage=16f;
[...]
long timeNow = System.currentTimeMillis();
frameAverage = (frameAverage * 10 + (timeNow - lastFrame)) / 11; lastFrame=timeNow;
yield+=yield*((16f/frameAverage)-1)*0.1f+0.05f;
for(int i=0;i<yield;i++) Thread.yield(); |
It uses
rolling average and proportional adjusting yield (with some damping).
It seems to work very well. Adjusting happens more gentle and sensible than before. Currently fuzetsu and bad sector are using that kind of throtteling.