Float32Array.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. var input = new Float32Array( 10000 * 3 );
  2. var output = new Float32Array( 10000 * 3 );
  3. for( var j = 0, jl = input.length; j < jl; j ++ ) {
  4. input[j] = j;
  5. }
  6. var inputVectors = [];
  7. var outputVectors = [];
  8. for( var j = 0, jl = input.length/3; j < jl; j ++ ) {
  9. inputVectors.push( new THREE.Vector3( j*3, j*3+1, j*3+2 ) );
  10. outputVectors.push( new THREE.Vector3() );
  11. }
  12. var suite = new Benchmark.Suite;
  13. suite.add('Float32Array-Float32Array', function() {
  14. var value3 = new Float32Array( 3 );
  15. for (var i = 0, il = input.length / 3; i < il; i += 3) {
  16. value3[0] = input[i + 0];
  17. value3[1] = input[i + 1];
  18. value3[2] = input[i + 2];
  19. value3[0] *= 1.01;
  20. value3[1] *= 1.03;
  21. value3[2] *= 0.98;
  22. output[i + 0] = value3[0];
  23. output[i + 1] = value3[1];
  24. output[i + 2] = value3[2];
  25. }
  26. });
  27. suite.add('Float32Array-Array', function() {
  28. var value2 = [0,0,0];
  29. for (var i = 0, il = input.length / 3; i < il; i += 3) {
  30. value2[0] = input[i + 0];
  31. value2[1] = input[i + 1];
  32. value2[2] = input[i + 2];
  33. value2[0] *= 1.01;
  34. value2[1] *= 1.03;
  35. value2[2] *= 0.98;
  36. output[i + 0] = value2[0];
  37. output[i + 1] = value2[1];
  38. output[i + 2] = value2[2];
  39. }
  40. });
  41. suite.add('Float32Array-Literal', function() {
  42. var x, y, z;
  43. for (var i = 0, il = input.length / 3; i < il; i += 3) {
  44. x = input[i + 0];
  45. y = input[i + 1];
  46. z = input[i + 2];
  47. x *= 1.01;
  48. y *= 1.03;
  49. z *= 0.98;
  50. output[i + 0] = x;
  51. output[i + 1] = y;
  52. output[i + 2] = z;
  53. }
  54. });
  55. suite.add('Float32Array-Vector3', function() {
  56. var value = new THREE.Vector3();
  57. for (var i = 0, il = input.length / 3; i < il; i += 3) {
  58. value.x = input[i + 0];
  59. value.y = input[i + 1];
  60. value.z = input[i + 2];
  61. value.x *= 1.01;
  62. value.y *= 1.03;
  63. value.z *= 0.98;
  64. output[i + 0] = value.x;
  65. output[i + 1] = value.y;
  66. output[i + 2] = value.z;
  67. }
  68. });
  69. suite.add('Vector3Array-Direct', function() {
  70. for (var i = 0, il = inputVectors.length; i < il; i ++ ) {
  71. outputVectors[i].copy( inputVectors[i] );
  72. outputVectors[i].x *= 1.01;
  73. outputVectors[i].y *= 1.03;
  74. outputVectors[i].z *= 0.98;
  75. }
  76. });
  77. suite.add('Vector3Array-Vector3', function() {
  78. var value = new THREE.Vector3();
  79. for (var i = 0, il = inputVectors.length; i < il; i ++ ) {
  80. value.copy( inputVectors[i] );
  81. value.x *= 1.01;
  82. value.y *= 1.03;
  83. value.z *= 0.98;
  84. outputVectors[i].copy( value );
  85. }
  86. });
  87. suite.on('cycle', function(event, bench) {
  88. console.log(String(event.target));
  89. });
  90. suite.on('complete', function() {
  91. console.log('Fastest is ' + this.filter('fastest').pluck('name'));
  92. console.log( "Done" );
  93. });
  94. suite.run(true);