Advertisement
Guest User

Android FloatBuffer benchmark

a guest
Sep 7th, 2010
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.18 KB | None | 0 0
  1.  
  2. package droid.ryanm.buffertest;
  3.  
  4. import java.nio.ByteBuffer;
  5. import java.nio.ByteOrder;
  6. import java.nio.FloatBuffer;
  7. import java.nio.IntBuffer;
  8. import java.util.Random;
  9.  
  10. import android.app.Activity;
  11. import android.os.Bundle;
  12. import android.util.Log;
  13. import android.widget.ScrollView;
  14. import android.widget.TextView;
  15.  
  16. /**
  17.  * @author ryanm
  18.  */
  19. public class BufferTest extends Activity
  20. {
  21.     private ScrollView sv;
  22.  
  23.     private TextView tv;
  24.  
  25.     private ByteBuffer bb;
  26.  
  27.     private FloatBuffer floats;
  28.  
  29.     private IntBuffer ints;
  30.  
  31.     private float[] data;
  32.  
  33.     private int[] intData;
  34.  
  35.     private Thread testThread = new Thread( "Buffer perf test" ) {
  36.         @Override
  37.         public void run()
  38.         {
  39.             int e = 10000;
  40.  
  41.             bb = ByteBuffer.allocateDirect( 4 * e ).order( ByteOrder.nativeOrder() );
  42.             floats = bb.asFloatBuffer();
  43.             ints = bb.asIntBuffer();
  44.  
  45.             data = data( e );
  46.             intData = new int[ e ];
  47.  
  48.             e = 16;
  49.             test( e *= 2 );
  50.             test( e *= 2 );
  51.             test( e *= 2 );
  52.             test( e *= 2 );
  53.             test( e *= 2 );
  54.             test( e *= 2 );
  55.             test( e *= 2 );
  56.             test( e *= 2 );
  57.             test( e *= 2 );
  58.             test( 10000 );
  59.         };
  60.     };
  61.  
  62.     private void test( int elements )
  63.     {
  64.         int time = 1000;
  65.         log( elements + " elements" );
  66.         singlePut( data, elements, floats, time );
  67.         bulkPut( data, elements, floats, time );
  68.         bulkIntPut( intData, elements, ints, time );
  69.         bulkConvertPut( data, elements, ints, time );
  70.     }
  71.  
  72.     private void singlePut( float[] data, int elements, FloatBuffer target, int testTime )
  73.     {
  74.         long start = System.currentTimeMillis();
  75.         long elapsed = 0;
  76.         int reps = 0;
  77.  
  78.         target.clear();
  79.  
  80.         do
  81.         {
  82.             for( int i = 0; i < elements; i++ )
  83.             {
  84.                 target.put( i, data[ i ] );
  85.             }
  86.             reps++;
  87.             elapsed = System.currentTimeMillis() - start;
  88.         }
  89.         while( elapsed < testTime );
  90.  
  91.         long bytes = ( long ) elements * ( long ) reps * 4;
  92.  
  93.         log( "Single\t\t" + bytes / elapsed + " kbps" );
  94.     }
  95.  
  96.     private void bulkPut( float[] data, int elements, FloatBuffer target, int testTime )
  97.     {
  98.         long start = System.currentTimeMillis();
  99.         long elapsed = 0;
  100.         int reps = 0;
  101.  
  102.         target.clear();
  103.  
  104.         do
  105.         {
  106.             target.put( data, 0, elements );
  107.             target.flip();
  108.  
  109.             reps++;
  110.             elapsed = System.currentTimeMillis() - start;
  111.         }
  112.         while( elapsed < testTime );
  113.  
  114.         long bytes = ( long ) elements * ( long ) reps * 4;
  115.  
  116.         log( "Bulk\t\t" + bytes / elapsed + " kbps" );
  117.     }
  118.  
  119.     private void bulkConvertPut( float[] data, int elements, IntBuffer target, int testTime )
  120.     {
  121.         long start = System.currentTimeMillis();
  122.         long elapsed = 0;
  123.         int reps = 0;
  124.  
  125.         target.clear();
  126.  
  127.         do
  128.         {
  129.             for( int i = 0; i < elements; i++ )
  130.             {
  131.                 intData[ i ] = Float.floatToIntBits( data[ i ] );
  132.             }
  133.  
  134.             target.put( intData, 0, elements );
  135.             target.flip();
  136.  
  137.             reps++;
  138.             elapsed = System.currentTimeMillis() - start;
  139.         }
  140.         while( elapsed < testTime );
  141.  
  142.         long bytes = ( long ) elements * ( long ) reps * 4;
  143.  
  144.         log( "convert\t" + bytes / elapsed + " kbps" );
  145.     }
  146.  
  147.     private void bulkIntPut( int[] data, int elements, IntBuffer target, int testTime )
  148.     {
  149.         long start = System.currentTimeMillis();
  150.         long elapsed = 0;
  151.         int reps = 0;
  152.  
  153.         target.clear();
  154.  
  155.         do
  156.         {
  157.             target.put( intData, 0, elements );
  158.             target.flip();
  159.  
  160.             reps++;
  161.             elapsed = System.currentTimeMillis() - start;
  162.         }
  163.         while( elapsed < testTime );
  164.  
  165.         long bytes = ( long ) elements * ( long ) reps * 4;
  166.  
  167.         log( "int\t\t\t" + bytes / elapsed + " kbps" );
  168.     }
  169.  
  170.     @Override
  171.     public void onCreate( Bundle savedInstanceState )
  172.     {
  173.         super.onCreate( savedInstanceState );
  174.  
  175.         tv = new TextView( this );
  176.         sv = new ScrollView( this );
  177.         sv.addView( tv );
  178.         setContentView( sv );
  179.  
  180.         testThread.start();
  181.     }
  182.  
  183.     private void log( final String s )
  184.     {
  185.         Log.i( "BufferTest", s );
  186.  
  187.         tv.post( new Runnable() {
  188.  
  189.             @Override
  190.             public void run()
  191.             {
  192.                 StringBuilder buff = new StringBuilder( tv.getText() );
  193.                 buff.append( s ).append( "\n" );
  194.                 tv.setText( buff.toString() );
  195.             }
  196.         } );
  197.     }
  198.  
  199.     private float[] data( int elements )
  200.     {
  201.         float[] data = new float[ elements ];
  202.         Random rng = new Random();
  203.  
  204.         for( int i = 0; i < data.length; i++ )
  205.         {
  206.             data[ i ] = 100 * rng.nextFloat();
  207.         }
  208.  
  209.         return data;
  210.     }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement