【Defold】パフォーマンスを計測する

2019/08/14Defold, DEVELOP

Defoldには標準でパフォーマンス計測できる機能が用意されています。

そもそもDefold Engineって何?という方はこちら

プロファイラの表示

-- プロファイラ表示ON
msg.post("@system:", "toggle_profile")
一通りのパフォーマンスが計測できる

基本的に、どこが重いのかを確認する時にはこれを表示して確認すると良いでしょう。プロファイラを非表示にする場合はもう一度

msg.post("@system:", "toggle_profile")

を呼ぶと非表示になります。

FPS表示だけ欲しい

詳細なプロファイラは素晴らしいものですが、シンプルにフレームレートだけ表示できれば良い場合もあります。そんなときは簡単にスクリプトを書いてしまいましょう。

local M = {}
function M.new()
	local instance = {}
	instance.fps = 0.0;
	instance.update_interval = 1.0;
	instance.accumulated = 0.0;
	instance.time_until_next_interval = 0.0;
	instance.num_frames = 0;
	
	function instance.get_fps()
		return instance.fps
	end
	function instance.update(dt)
		instance.time_until_next_interval = instance.time_until_next_interval - dt;
		instance.accumulated =  instance.accumulated + (1.0 / dt);
		instance.num_frames = instance.num_frames + 1;
		
		if instance.time_until_next_interval <= 0.0 then
			
			instance.fps = instance.accumulated / instance.num_frames;
			instance.time_until_next_interval = instance.update_interval;
			instance.accumulated = 0.0;
			instance.num_frames = 0;
		end
				
	end
	
	return instance
end
return M

1フレームに1度だけupdate(dt)を呼びます。get_fps()で現在のフレームレートが取得できます。

local mira_fps = require("mira.fps.fps")
function init(self)
	self.fps = mira_fps.new()
end
function update(self, dt)
    -- FPS取得!
	print(string.format("fps: %s", self.fps.get_fps()))
	self.state.update(dt)
end

ゲーム専用のDebugメニューなどに表示したい時に使えます。

Posted by kazupon