はかせのラボ

私の頭の中を書いていく雑記ブログです

プログラミング ようやっとFPSが担保できた話

あいさつ

どうも、はかせです。
今回はDebugビルドでも60以上のFPSを担保できるようになりました。
なのでその話です。

ボトルネックは?

大きく分けて二つです。
・毎フレーム作っていたローカル変数
デバッグ用のログ出力

一つずつ話します。

毎フレーム作っていたローカル変数

これは前回の修正でもある程度減らしたんですが、
今回の修正で描画にかかわる部分に関しては全てメンバ変数に上げました。

毎フレーム作っていたのは弾用の構造体データなんですが、
この構造体座標データとか持ってるんでサイズが112バイトと少々大きいです。

たったそれだけかよって思うかもしれませんが、
弾幕シューティングという性質上数百~数千の弾が発生して、
それにそれぞれこの構造体が作られあてがわれるので
塵つもで1~2ミリ秒ほど食っていきます

デバッグ用のログ出力

ログの出力ってのは割と馬鹿にならないコストになります。
というのもログの出力ってのは結論ストリームを使ったIO処理です。

IO処理が通常の処理に比べて重いのは自明の理なのでやっぱり重いです。
呼ぶ頻度にもよりますが、
毎フレーム呼べばそれだけで1~2ミリ秒くらい食っていきます

結果

それでは結果です。
f:id:hakase0274:20190630232502p:plain

60どころか190出てますねw
実際Releaseビルドでやっても似たような結果でした。

あとがき

今回はDebugビルドでもFPS担保できるようになった話でした。
計算量の削減とかローカル変数のメンバ化とか
色々黒魔術チックなことしましたが、
結果を見る限り、60出すだけならログ外すだけでよかった気がしますw

それでは今回はこの辺でノシ

今回作ったものはgithubに上げました
github.com