benchmark.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. var encoder = require('./meshopt_encoder.js');
  2. var decoder = require('./meshopt_decoder.js');
  3. var { performance } = require('perf_hooks');
  4. process.on('unhandledRejection', error => {
  5. console.log('unhandledRejection', error);
  6. process.exit(1);
  7. });
  8. function bytes(view) {
  9. return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
  10. }
  11. var tests = {
  12. roundtripVertexBuffer: function() {
  13. var N = 1024*1024;
  14. var data = new Uint8Array(N * 16);
  15. for (var i = 0; i < N * 16; i += 4)
  16. {
  17. data[i + 0] = 0;
  18. data[i + 1] = (i % 16) * 1;
  19. data[i + 2] = (i % 16) * 2;
  20. data[i + 3] = (i % 16) * 8;
  21. }
  22. var decoded = new Uint8Array(N * 16);
  23. var t0 = performance.now();
  24. var encoded = encoder.encodeVertexBuffer(data, N, 16);
  25. var t1 = performance.now();
  26. decoder.decodeVertexBuffer(decoded, N, 16, encoded);
  27. var t2 = performance.now();
  28. return { encodeVertex: t1 - t0, decodeVertex: t2 - t1, bytes: N * 16 };
  29. },
  30. roundtripIndexBuffer: function() {
  31. var N = 1024*1024;
  32. var data = new Uint32Array(N * 3);
  33. for (var i = 0; i < N * 3; i += 6)
  34. {
  35. var v = i / 6;
  36. data[i + 0] = v;
  37. data[i + 1] = v + 1;
  38. data[i + 2] = v + 2;
  39. data[i + 3] = v + 2;
  40. data[i + 4] = v + 1;
  41. data[i + 5] = v + 3;
  42. }
  43. var decoded = new Uint32Array(data.length);
  44. var t0 = performance.now();
  45. var encoded = encoder.encodeIndexBuffer(bytes(data), data.length, 4);
  46. var t1 = performance.now();
  47. decoder.decodeIndexBuffer(bytes(decoded), data.length, 4, encoded);
  48. var t2 = performance.now();
  49. return { encodeIndex: t1 - t0, decodeIndex: t2 - t1, bytes: N * 12 };
  50. },
  51. };
  52. Promise.all([encoder.ready, decoder.ready]).then(() => {
  53. var reps = 10;
  54. var data = {}
  55. for (var key in tests) {
  56. data[key] = tests[key]();
  57. }
  58. for (var i = 1; i < reps; ++i) {
  59. for (var key in tests) {
  60. var nd = tests[key]();
  61. var od = data[key];
  62. for (var idx in nd) {
  63. od[idx] = Math.min(od[idx], nd[idx]);
  64. }
  65. }
  66. }
  67. for (var key in tests) {
  68. var rep = key;
  69. rep += ":\n";
  70. for (var idx in data[key]) {
  71. if (idx != "bytes") {
  72. rep += idx;
  73. rep += " ";
  74. rep += data[key][idx];
  75. rep += " ms (";
  76. rep += data[key].bytes / 1024 / 1024 / 1024 / data[key][idx] * 1000;
  77. rep += " GB/s)";
  78. rep += "\n";
  79. }
  80. }
  81. console.log(rep);
  82. }
  83. });