Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package droid.ryanm.buffertest;
- import java.nio.ByteBuffer;
- import java.nio.ByteOrder;
- import java.nio.FloatBuffer;
- import java.nio.IntBuffer;
- import java.util.Random;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.widget.ScrollView;
- import android.widget.TextView;
- /**
- * @author ryanm
- */
- public class BufferTest extends Activity
- {
- private ScrollView sv;
- private TextView tv;
- private ByteBuffer bb;
- private FloatBuffer floats;
- private IntBuffer ints;
- private float[] data;
- private int[] intData;
- private Thread testThread = new Thread( "Buffer perf test" ) {
- @Override
- public void run()
- {
- int e = 10000;
- bb = ByteBuffer.allocateDirect( 4 * e ).order( ByteOrder.nativeOrder() );
- floats = bb.asFloatBuffer();
- ints = bb.asIntBuffer();
- data = data( e );
- intData = new int[ e ];
- e = 16;
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( e *= 2 );
- test( 10000 );
- };
- };
- private void test( int elements )
- {
- int time = 1000;
- log( elements + " elements" );
- singlePut( data, elements, floats, time );
- bulkPut( data, elements, floats, time );
- bulkIntPut( intData, elements, ints, time );
- bulkConvertPut( data, elements, ints, time );
- }
- private void singlePut( float[] data, int elements, FloatBuffer target, int testTime )
- {
- long start = System.currentTimeMillis();
- long elapsed = 0;
- int reps = 0;
- target.clear();
- do
- {
- for( int i = 0; i < elements; i++ )
- {
- target.put( i, data[ i ] );
- }
- reps++;
- elapsed = System.currentTimeMillis() - start;
- }
- while( elapsed < testTime );
- long bytes = ( long ) elements * ( long ) reps * 4;
- log( "Single\t\t" + bytes / elapsed + " kbps" );
- }
- private void bulkPut( float[] data, int elements, FloatBuffer target, int testTime )
- {
- long start = System.currentTimeMillis();
- long elapsed = 0;
- int reps = 0;
- target.clear();
- do
- {
- target.put( data, 0, elements );
- target.flip();
- reps++;
- elapsed = System.currentTimeMillis() - start;
- }
- while( elapsed < testTime );
- long bytes = ( long ) elements * ( long ) reps * 4;
- log( "Bulk\t\t" + bytes / elapsed + " kbps" );
- }
- private void bulkConvertPut( float[] data, int elements, IntBuffer target, int testTime )
- {
- long start = System.currentTimeMillis();
- long elapsed = 0;
- int reps = 0;
- target.clear();
- do
- {
- for( int i = 0; i < elements; i++ )
- {
- intData[ i ] = Float.floatToIntBits( data[ i ] );
- }
- target.put( intData, 0, elements );
- target.flip();
- reps++;
- elapsed = System.currentTimeMillis() - start;
- }
- while( elapsed < testTime );
- long bytes = ( long ) elements * ( long ) reps * 4;
- log( "convert\t" + bytes / elapsed + " kbps" );
- }
- private void bulkIntPut( int[] data, int elements, IntBuffer target, int testTime )
- {
- long start = System.currentTimeMillis();
- long elapsed = 0;
- int reps = 0;
- target.clear();
- do
- {
- target.put( intData, 0, elements );
- target.flip();
- reps++;
- elapsed = System.currentTimeMillis() - start;
- }
- while( elapsed < testTime );
- long bytes = ( long ) elements * ( long ) reps * 4;
- log( "int\t\t\t" + bytes / elapsed + " kbps" );
- }
- @Override
- public void onCreate( Bundle savedInstanceState )
- {
- super.onCreate( savedInstanceState );
- tv = new TextView( this );
- sv = new ScrollView( this );
- sv.addView( tv );
- setContentView( sv );
- testThread.start();
- }
- private void log( final String s )
- {
- Log.i( "BufferTest", s );
- tv.post( new Runnable() {
- @Override
- public void run()
- {
- StringBuilder buff = new StringBuilder( tv.getText() );
- buff.append( s ).append( "\n" );
- tv.setText( buff.toString() );
- }
- } );
- }
- private float[] data( int elements )
- {
- float[] data = new float[ elements ];
- Random rng = new Random();
- for( int i = 0; i < data.length; i++ )
- {
- data[ i ] = 100 * rng.nextFloat();
- }
- return data;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement