ちょいと気になったので、色々実験してみた。
リフレッシュレートを取得するコードは、ぐぐれば沢山あるので省略。
手持ちの端末で表示した結果、
60.0
という値が表示された。
(なぜ取得関数は、float型で返すのだろうか…)
今作成しているアプリは、GLを使わず、Canvasを使用して描画している。
2Dのゲームなので、これで十分だ。
1フレーム分の処理にかかった時間から、スリープ時間を算出してsleepしているわけだが、
この sleep処理をコメントアウトしても、60fps以上が出ない。
特にFPSを制御する命令など入れた覚えはないのだが…。
で、調べたら、描画するためのCanvasを取得する関数、
canvas = holder.lockCanvas();
これが原因らしい。
どうやら、内部で、リフレッシュレートに合わせた操作をしているらしく、
リフレッシュレートよりも早い間隔でアクセスすると、処理時間の算出がうまくいかないようだ。
ためしにコメントアウトすると、
FPS = 279789
なんか、とんでもない値が(笑
--------
追記。
手持ちのKEIANタブデットで、FPSを取得したら、
71.591
という中途半端な数値が表示された…。