CoronaでFPSとその平均値、CPU使用率、メモリ消費量をモニタリングするモジュールです。結構適当かもしれん。
lib/util/simplefps.lua
module(..., package.seeall)
--FPSの定義、コンテンツに合わせる
local content_fps = 60;
--カウンタ表示用
displayObject = display.newGroup();
local textFront = display.newText("", display.contentWidth/2, 5, native.systemFont, 20 );
local textShadow = display.newText("", 1+display.contentWidth/2, 1+5, native.systemFont, 20 );
textFront:setTextColor ( 255,255,255 );
textShadow:setTextColor( 0,0,0 );
displayObject:insert( textShadow );
displayObject:insert( textFront );
--
local frame_count = 0;
local count_num = 0;
local total_frame = 0;
local cpu_count = 0;
local cpu_per = 0;
local cpu_ms = 0;
--
local function cpuChecker()
cpu_count = cpu_count + 1;
local d = cpu_count % content_fps;
if d == 1 then
cpu_ms = os.clock();
elseif d == 0 then
cpu_ms = os.clock()-cpu_ms;
cpu_per = math.floor(cpu_ms*100);
end;
end;
local function enterframeCheck( event )
frame_count = frame_count+1;
cpuChecker();
end;
local function oneSecondCheck( event )
count_num = count_num + 1;
total_frame = total_frame + frame_count;
local ave = math.floor( 10*total_frame/count_num )/10;
local mem = math.floor( collectgarbage( "count" )/1024*100)/100;
local tex = math.floor( system.getInfo( "textureMemoryUsed" )/1024/1024*100)/100;
local disp = "FPS:"..frame_count .. " AVE:".. ave .." MEM:"..mem.."MB".." TEX:"..tex.."MB ".."CPU:"..cpu_per.."%";
textFront.text , textShadow.text = disp , disp;
frame_count = 0;
end
Runtime:addEventListener( "enterFrame", enterframeCheck );
timer.performWithDelay( 1000, oneSecondCheck , 0 );
content_fps
の値はコンテンツのfpsに合わせて書き換えてください。
使いかた
main.lua
local fps = require "lib.util.simplefps";
fps.displayObject.y = display.contentHeight/2;
こんな感じ。配置座標はお好きなように。
で、以下が画面に表示されるはずです。
FPS: 1秒間に何枚画面描画されているか。content_fpsの値と近ければ良いかんじ。
AVE: このモジュールを読込んでからの平均fps
MEM: メモリ使用量
TEX: テクスチャメモリ使用量
CPU: CPU使用率。適当な算出ですが、CoronaシミュレータとiOSにおいては近似値が出ているはず(アクティビティモニタで確認してみてください)。Androidにおいては100%未満はうまく算出出来ません。
これを使うと、「iPhone5って速ええなあ、iPhone4の4倍かよ」とか「Macはやっぱスマホより圧倒的に速い」とか「Tegra3って全然速くないのね(泣」とか色々分かります。アプリをうっかり落とさないように、しっかりチューニングしましょう。