blob: a6cb5e78bd8f5b50a7e35e8cdfff23a514aac6d0 [file] [log] [blame]
/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* 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.android;
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);
}
}