On my app I noticed that each time I called setTargetFPS the transitions
would become faster and faster, until finally they don't even take one
frame. The problem was that the FP math for calculating changeRatio
would (because of rounding err) keep shrinking the number of ticksPerFrame.
This change instead computs ticksPerFrame/perTransition based on the
requested display time, so error can't accumulate from a series of calls.
(In my app I only bump up target FPS before each transition but then
I lower it down again afterwards to save CPU)