Ti.UI.Viewでパーティクルベンチマーク

Ti.UI.Viewで点を描いて動かすとどれくらいFPSがでるか計測してみた。
以下がソース。
実行すると黒い点が画面上を飛び回ります。

var window = Titanium.UI.createWindow({  
    backgroundColor:'#fff'
});

var view_num = 10;
var points = [];
for( var i = 0; i < view_num; i++){
    var point = Ti.UI.createView({
        backgroundColor : 'red',
        width: 2,
        height: 2,
        center: window.center
    });

    var sign = (parseInt(Math.random()*10)%2) ? 1 : -1;
    point.vx = sign * parseInt(Math.random()*10);
    var sign = (parseInt(Math.random()*10)%2) ? 1 : -1;
    point.vy = sign * parseInt(Math.random()*10);

    points.push( point );
    window.add( point );
}

var fps_text = Ti.UI.createTextField({
    value : '0 fps',
    left : 0,
});

window.add( fps_text );

function render(){
    for( var i = 0; i < points.length; i++){
        var point = points[i];
        var newx = point.center.x + point.vx;
        var newy = point.center.y + point.vy;

        if( newx <= 0 ){
            newx = 0;
            point.vx *= -1;
        }
        else if( window.width <= newx ){
            newx = window.width;
            point.vx *= -1;
        }

        if( newy <= 0 ){
            newy = 0;
            point.vy *= -1;
        }
        else if( window.height <= newy ){
            newy = window.height;
            point.vy *= -1;
        }

        point.center = { x : newx,
                         y : newy };
    }
}

window.open();

var last_time = new Date().getTime();
var elapsed_time = 0;
var framecount = 0;
setInterval( function(){
    render();
    var now = new Date().getTime();
    elapsed_time += (now - last_time);
    last_time = now;
    framecount++;
    if( 990 <= elapsed_time ){
        fps_text.value = '' + framecount + ' fps';
        framecount = 0;
        elapsed_time = 0;
    }
}, 33);
  • iPhone3GSだと8個描いて30fps切る感じ。
  • Ti.UI.Animationを使えばもっと速くなる気がしないでもないが、FPSの測り方が分からない。。。