benchmark.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import 'dart:io';
  2. import 'package:xterm/xterm.dart';
  3. void main() {
  4. // BenchmarkWrite().run();
  5. // BenchmarkWrite2().run();
  6. // BenchmarkWriteBuffer().run();
  7. // BenchmarkWriteCMatrix().run();
  8. BenchmarkWriteLines().run();
  9. }
  10. abstract class Benchmark {
  11. String explain();
  12. void benchmark();
  13. void run() {
  14. print('benchmark: ${explain()}');
  15. print('preheating...');
  16. benchmark();
  17. final sw = Stopwatch()..start();
  18. print('running...');
  19. benchmark();
  20. sw.stop();
  21. print('result: ${sw.elapsedMilliseconds} ms');
  22. }
  23. }
  24. class BenchmarkWrite extends Benchmark {
  25. static const cycle = 1 << 20;
  26. static const data = 'hello world';
  27. String explain() {
  28. return "write '$data' to Terminal for $cycle times";
  29. }
  30. void benchmark() {
  31. final terminal = Terminal(maxLines: 40000);
  32. for (var i = 0; i < cycle; i++) {
  33. terminal.write(data);
  34. }
  35. }
  36. }
  37. class BenchmarkWrite2 extends Benchmark {
  38. static const cycle = 100000;
  39. static const data = '100000';
  40. String explain() {
  41. return "write '$data' to Terminal for $cycle times";
  42. }
  43. void benchmark() {
  44. final terminal = Terminal(maxLines: 40000);
  45. for (var i = 0; i < cycle; i++) {
  46. terminal.write(data);
  47. }
  48. }
  49. }
  50. class BenchmarkWriteCMatrix extends Benchmark {
  51. BenchmarkWriteCMatrix() {
  52. data = File('script/cmatrix.txt').readAsStringSync();
  53. }
  54. static const cycle = 12;
  55. late final String data;
  56. String explain() {
  57. return 'write ${data.length / 1024} kb CMatrix -r output to Terminal for $cycle time(s)';
  58. }
  59. void benchmark() {
  60. final terminal = Terminal(maxLines: 40000);
  61. for (var i = 0; i < cycle; i++) {
  62. terminal.write(data);
  63. }
  64. }
  65. }
  66. class BenchmarkWriteLines extends Benchmark {
  67. BenchmarkWriteLines() {
  68. data = File('script/lines.txt').readAsStringSync();
  69. }
  70. static const cycle = 10;
  71. late final String data;
  72. String explain() {
  73. return 'write ${data.length / 1024} kb `find .` output to Terminal for $cycle time(s)';
  74. }
  75. void benchmark() {
  76. final terminal = Terminal(maxLines: 40000);
  77. for (var i = 0; i < cycle; i++) {
  78. terminal.write(data);
  79. }
  80. }
  81. }
  82. class BenchmarkWriteBuffer extends Benchmark {
  83. static const cycle = 1 << 20;
  84. static const data = 'hello world';
  85. String explain() {
  86. return "write '$data' to StringBuffer for $cycle times";
  87. }
  88. void benchmark() {
  89. final buffer = StringBuffer();
  90. for (var i = 0; i < cycle; i++) {
  91. buffer.write(data);
  92. }
  93. }
  94. }