Float32ArrayAccessPatterns.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. var array = new Float32Array( 10000 * 3 );
  2. for( var j = 0, jl = array.length; j < jl; j ++ ) {
  3. array[j] = j;
  4. }
  5. var vectorArray = [];
  6. for( var j = 0, jl = array.length/3; j < jl; j ++ ) {
  7. vectorArray.push( new THREE.Vector3( j*3, j*3+1, j*3+2 ) );
  8. }
  9. var Float32ArrayCopyTest = function( array ) {
  10. var x, y, z;
  11. for (var i = 0, il = array.length / 3; i < il; i += 3) {
  12. x = array[i + 0];
  13. y = array[i + 1];
  14. z = array[i + 2];
  15. x *= 1.01;
  16. y *= 1.03;
  17. z *= 0.98;
  18. array[i + 0] = x;
  19. array[i + 1] = y;
  20. array[i + 2] = z;
  21. }
  22. };
  23. var Float32ArrayDirectTest = function( array ) {
  24. for (var i = 0, il = array.length / 3; i < il; i += 3) {
  25. array[i + 0] *= 1.01;
  26. array[i + 1] *= 1.03;
  27. array[i + 2] *= 0.98;
  28. }
  29. };
  30. var Float32ArrayVector3CopyTest = function( array ) {
  31. var value = new THREE.Vector3();
  32. for (var i = 0, il = array.length / 3; i < il; i += 3) {
  33. value.x = array[i + 0];
  34. value.y = array[i + 1];
  35. value.z = array[i + 2];
  36. value.x *= 1.01;
  37. value.y *= 1.03;
  38. value.z *= 0.98;
  39. array[i + 0] = value.x;
  40. array[i + 1] = value.y;
  41. array[i + 2] = value.z;
  42. }
  43. };
  44. var Float32ArrayArrayCopyTest = function( array ) {
  45. var value2 = [0,0,0];
  46. for (var i = 0, il = array.length / 3; i < il; i += 3) {
  47. value2[0] = array[i + 0];
  48. value2[1] = array[i + 1];
  49. value2[2] = array[i + 2];
  50. value2[0] *= 1.01;
  51. value2[1] *= 1.03;
  52. value2[2] *= 0.98;
  53. array[i + 0] = value2[0];
  54. array[i + 1] = value2[1];
  55. array[i + 2] = value2[2];
  56. }
  57. };
  58. var Float32ArrayFloat32ArrayCopyTest = function( array ) {
  59. var value3 = new Float32Array( 3 );
  60. for (var i = 0, il = array.length / 3; i < il; i += 3) {
  61. value3[0] = array[i + 0];
  62. value3[1] = array[i + 1];
  63. value3[2] = array[i + 2];
  64. value3[0] *= 1.01;
  65. value3[1] *= 1.03;
  66. value3[2] *= 0.98;
  67. array[i + 0] = value3[0];
  68. array[i + 1] = value3[1];
  69. array[i + 2] = value3[2];
  70. }
  71. };
  72. var Vector3ArrayVector3CopyTest = function( array ) {
  73. var value = new THREE.Vector3();
  74. for (var i = 0, il = vectorArray.length; i < il; i ++ ) {
  75. value.copy( vectorArray[i] );
  76. value.x *= 1.01;
  77. value.y *= 1.03;
  78. value.z *= 0.98;
  79. vectorArray[i].copy( value );
  80. }
  81. };
  82. var Vector3ArrayVector3RefTest = function( array ) {
  83. for (var i = 0, il = vectorArray.length; i < il; i ++ ) {
  84. var value = vectorArray[i];
  85. value.x *= 1.01;
  86. value.y *= 1.03;
  87. value.z *= 0.98;
  88. }
  89. };
  90. var Vector3ArrayVector3DirectTest = function( array ) {
  91. for (var i = 0, il = vectorArray.length; i < il; i ++ ) {
  92. vectorArray[i].x *= 1.01;
  93. vectorArray[i].y *= 1.03;
  94. vectorArray[i].z *= 0.98;
  95. }
  96. };
  97. var suite = new Benchmark.Suite;
  98. suite.add('Float32ArrayFloat32ArrayCopyTest', function() {
  99. Float32ArrayFloat32ArrayCopyTest( array );
  100. });
  101. suite.add('Float32DirectArray', function() {
  102. Float32ArrayDirectTest( array );
  103. });
  104. suite.add('Float32ArrayArrayCopyTest', function() {
  105. Float32ArrayArrayCopyTest( array );
  106. });
  107. suite.add('Float32CopyArray', function() {
  108. Float32ArrayCopyTest( array );
  109. });
  110. suite.add('Float32ArrayVector3CopyTest', function() {
  111. Float32ArrayVector3CopyTest( array );
  112. });
  113. suite.add('Vector3ArrayVector3Ref', function() {
  114. Vector3ArrayVector3RefTest( array );
  115. });
  116. suite.add('Vector3ArrayVector3Direct', function() {
  117. Vector3ArrayVector3DirectTest( array );
  118. });
  119. suite.add('Vector3ArrayVector3Copy', function() {
  120. Vector3ArrayVector3CopyTest( array );
  121. });
  122. suite.on('cycle', function(event, bench) {
  123. console.log(String(event.target));
  124. });
  125. suite.on('complete', function() {
  126. console.log('Fastest is ' + this.filter('fastest').pluck('name'));
  127. console.log( "Done" );
  128. });
  129. suite.run(true);