app.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. * @file benchmark application instance
  3. * @author Wenli Zhang
  4. */
  5. define(function (require) {
  6. var TestManager = require('./testManager');
  7. var vm = new Vue({
  8. el: '#app',
  9. data: {
  10. caseNames: ['line sampling'],
  11. amounts: (function () {
  12. var arr = [];
  13. for (var i = 1000000; i > 0; i -= 10000) {
  14. arr.push(i);
  15. }
  16. return arr;
  17. })(),
  18. times: [],
  19. result: '',
  20. hasRun: false,
  21. isRunning: false,
  22. elapsedTime: 0,
  23. progress: 0
  24. },
  25. methods: {
  26. run: run,
  27. download: download
  28. }
  29. });
  30. var manager = new TestManager(vm.amounts, vm.caseNames);
  31. function run() {
  32. var results = [];
  33. var start = new Date();
  34. var updateUI = function () {
  35. var progress = Math.ceil(manager.getProgress() * 100);
  36. vm.$set('progress', progress);
  37. var end = new Date();
  38. vm.$set('elapsedTime', end - start);
  39. for (var i = 0; i < results.length; ++i) {
  40. var test = results[i];
  41. if (!vm.times[test.amountId]) {
  42. vm.$set('times[' + test.amountId + ']', []);
  43. }
  44. vm.$set('times[' + test.amountId + '][' + test.caseId
  45. + ']', test.time);
  46. }
  47. results = [];
  48. };
  49. vm.$set('hasRun', false);
  50. vm.$set('isRunning', true);
  51. vm.$set('progress', 0);
  52. manager.init();
  53. for (var aid = 0; aid < vm.amounts.length; ++aid) {
  54. for (var cid = 0; cid < vm.caseNames.length; ++cid) {
  55. // run a test case in each loop
  56. (function (aid, cid) {
  57. setTimeout(function () {
  58. var test = manager.run(cid, aid);
  59. results.push(test);
  60. if (aid === vm.amounts.length - 1
  61. && cid === vm.caseNames.length - 1) {
  62. // last test case
  63. vm.$set('hasRun', true);
  64. vm.$set('isRunning', false);
  65. vm.$set('result', manager.exportResult());
  66. updateUI();
  67. }
  68. }, 0);
  69. })(aid, cid);
  70. // log results
  71. setTimeout(updateUI, 0);
  72. }
  73. }
  74. setTimeout(function () {
  75. manager.drawReport(document.getElementById('report'));
  76. }, 0);
  77. }
  78. function download() {
  79. // save to file
  80. var blob = new Blob([vm.result], {
  81. type: 'text/json; charset=urf-8'
  82. });
  83. saveAs(blob, 'result.json');
  84. }
  85. });