MicroBenchmarks.java :  » Game » libgdx » com » badlogic » gdx » tests » Android Open Source

Android Open Source » Game » libgdx 
libgdx » com » badlogic » gdx » tests » MicroBenchmarks.java
/*
 * Copyright 2010 Mario Zechner (contact@badlogicgames.com), Nathan Sweet (admin@esotericsoftware.com)
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */

package com.badlogic.gdx.tests;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ScrollView;
import android.widget.TextView;

import com.badlogic.gdx.utils.BufferUtils;

public class MicroBenchmarks extends Activity {
  final int TRIES = 5;
  long start = 0;
  ScrollView sv;
  TextView tv;
  Thread testThread = new Thread(new Runnable() {

    @Override public void run () {
      ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024 * Float.SIZE / 8);
      buffer.order(ByteOrder.nativeOrder());
      FloatBuffer floatBuffer = buffer.asFloatBuffer();
      IntBuffer intBuffer = buffer.asIntBuffer();

      float[] floatArray = new float[1024 * 1024];
      int[] intArray = new int[1024 * 1024];

      // single put
      tic();
      for (int tries = 0; tries < TRIES; tries++) {
        for (int i = 0; i < floatArray.length; i++)
          floatBuffer.put(floatArray[i]);
        floatBuffer.clear();
      }
      toc("single put");

      // single indexed put
      tic();
      for (int tries = 0; tries < TRIES; tries++) {
        for (int i = 0; i < floatArray.length; i++)
          floatBuffer.put(i, floatArray[i]);
        floatBuffer.clear();
      }
      toc("single indexed put");

      // bulk put
      tic();
      for (int tries = 0; tries < TRIES; tries++) {
        floatBuffer.put(floatArray);
        floatBuffer.clear();
      }
      toc("vector put");

      // convert bulk put
      tic();
      for (int tries = 0; tries < TRIES; tries++) {
        for (int i = 0; i < floatArray.length; i++)
          intArray[i] = Float.floatToIntBits(floatArray[i]);
        intBuffer.put(intArray);
        intBuffer.clear();
      }
      toc("convert bulk put");

      // jni bulk put
      tic();
      for (int tries = 0; tries < TRIES; tries++) {
        BufferUtils.copy(floatArray, floatBuffer, floatArray.length, 0);
        floatBuffer.clear();
      }
      toc("jni bulk put");
    }

  });

  public void onCreate (Bundle bundle) {
    super.onCreate(bundle);

    tv = new TextView(this);
    sv = new ScrollView(this);
    sv.addView(tv);
    setContentView(sv);

    testThread.start();
  }

  void tic () {
    start = System.nanoTime();
  }

  void toc (final String info) {
    final float time = (System.nanoTime() - start) / 1000000000.0f;

    tv.post(new Runnable() {

      @Override public void run () {
        StringBuilder buff = new StringBuilder(tv.getText());
        buff.append(info).append(", ").append(time).append(" secs\n");
        tv.setText(buff.toString());
      }
    });

    Log.d("MicroBenchmarks", info + ", " + time);
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.