サンプルプログラム1



// グラフィックを使ったiアプリベンチマーク
//       by de. 2001
// 改変などはご自由にどうぞ。

import com.nttdocomo.ui.*;
import com.nttdocomo.util.*;
import java.util.Random;

//メインのクラス
public class IgBench extends IApplication
{
    private IgBenchCanvas canvas;

    public void start(){
        canvas=new IgBenchCanvas(this);
        Display.setCurrent(canvas);
    }
}

//-- IgBenchCanvasクラス
class IgBenchCanvas extends Canvas {
    //-- このクラスで使う変数の定義
    private IApplication application;
    long  tStart,tCurrent;
    String szMes1,szMes2;

    //-- コンストラクタ
    public IgBenchCanvas(IApplication application)
    {
        this.application=application;
        tStart = System.currentTimeMillis();
        szMes1 = "iアプリベンチ";
        szMes2 = "(整数 + 描画版)";
        setSoftLabel(Frame.SOFT_KEY_1, "開始");
        setSoftLabel(Frame.SOFT_KEY_2, "終了");
    }

    // -- [イベント] ソフトキーが押された
    public void processEvent(int type,int param){
        if ((type==Display.KEY_PRESSED_EVENT) &&
                    (param==Display.KEY_SOFT2)){
            application.terminate();
        }

        if ((type==Display.KEY_RELEASED_EVENT) &&
                    (param==Display.KEY_SOFT1)){
            int a0,a1,i;
            long t;

            szMes1 = "計測中";
            szMes2 = "(整数)";
            repaint();

            //---整数演算
            t = System.currentTimeMillis();
            for(i = 0; i < 50000; i++) {
                a0 = a1 = 1;
                a1 = (a1 * 3 - a0 * 2) % 3;
            }
            t = System.currentTimeMillis() - t;

            szMes1 = "計測中";
            szMes2 = "(描画)";
            repaint();

            //--- グラフィック
            tStart = System.currentTimeMillis();
            DoBenchWork(); //-- ベンチ本体をコール
            tCurrent = System.currentTimeMillis() - tStart;
            //
            szMes1 = "結果(数値) : " + Long.toString(t) + "ms";
            szMes2 = "結果(描画) : " + Long.toString(tCurrent) + "ms";
            repaint();
        }
    }

    /*  ---  開始・終了  ---  */
    public void paint(Graphics g)
    {
        Font font;
        int maxX=getWidth();
        int maxY=getHeight();

        font=Font.getDefaultFont();
        g.setColor(g.getColorOfName(Graphics.WHITE));
        g.fillRect(0,maxY/2-font.getHeight(),
                maxX,font.getHeight()*3);

        g.setColor(g.getColorOfName(Graphics.BLACK));
        g.drawString(szMes1,
          getWidth ()/2-font.stringWidth(szMes1)/2,
          getHeight()/2-font.getHeight()/2+font.getAscent());
        g.drawString(szMes2,
          getWidth ()/2-font.stringWidth(szMes2)/2,
          getHeight()/2+font.getHeight()/2+font.getAscent());
    }

    //-- ベンチマークワーク実行
    private void DoBenchWork()
    {
        int i,x,y;
        int maxX,maxY;
        int rcolor;
        Graphics g;
        Random r = new Random();

        g=getGraphics();
        maxX = getWidth();
        maxY = getHeight();
        x=0;
        y=0;
        for(i=0;i<100;i++){
            
            x =x+1;
            if(x>(maxX-49)){
                x=0;
                y=y+1;
            };
            rcolor = r.nextInt() % 3;

            g.lock();
            switch(rcolor){
                case 0:
                g.setColor(g.getColorOfName(Graphics.RED));
                break;

                case 1:
                g.setColor(g.getColorOfName(Graphics.GREEN));
                break;

                case 2:
                g.setColor(g.getColorOfName(Graphics.GRAY));

            }
            g.fillRect(x,y,48,48);
            tCurrent = System.currentTimeMillis() - tStart;
            szMes1 = "Now : " + Long.toString(tCurrent) + "ms";
            g.unlock(false);
        }
    }
}

(2001年2月21日)

[Text by 大和哲]


【PC Watchホームページ】


ウォッチ編集部内PC Watch担当 pc-watch-info@impress.co.jp

Copyright (c) 2001 impress corporation All rights reserved.