benchmark.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. @override
  28. String explain() {
  29. return "write '$data' to Terminal for $cycle times";
  30. }
  31. @override
  32. void benchmark() {
  33. final terminal = Terminal(maxLines: 40000);
  34. for (var i = 0; i < cycle; i++) {
  35. terminal.write(data);
  36. }
  37. }
  38. }
  39. class BenchmarkWrite2 extends Benchmark {
  40. static const cycle = 100000;
  41. static const data = '100000';
  42. @override
  43. String explain() {
  44. return "write '$data' to Terminal for $cycle times";
  45. }
  46. @override
  47. void benchmark() {
  48. final terminal = Terminal(maxLines: 40000);
  49. for (var i = 0; i < cycle; i++) {
  50. terminal.write(data);
  51. }
  52. }
  53. }
  54. class BenchmarkWriteCMatrix extends Benchmark {
  55. BenchmarkWriteCMatrix() {
  56. data = File('script/cmatrix.txt').readAsStringSync();
  57. }
  58. static const cycle = 12;
  59. late final String data;
  60. @override
  61. String explain() {
  62. return 'write ${data.length / 1024} kb CMatrix -r output to Terminal for $cycle time(s)';
  63. }
  64. @override
  65. void benchmark() {
  66. final terminal = Terminal(maxLines: 40000);
  67. for (var i = 0; i < cycle; i++) {
  68. terminal.write(data);
  69. }
  70. }
  71. }
  72. class BenchmarkWriteLines extends Benchmark {
  73. BenchmarkWriteLines() {
  74. data = File('script/lines.txt').readAsStringSync();
  75. }
  76. static const cycle = 10;
  77. late final String data;
  78. @override
  79. String explain() {
  80. return 'write ${data.length / 1024} kb `find .` output to Terminal for $cycle time(s)';
  81. }
  82. @override
  83. void benchmark() {
  84. final terminal = Terminal(maxLines: 40000);
  85. for (var i = 0; i < cycle; i++) {
  86. terminal.write(data);
  87. }
  88. }
  89. }
  90. class BenchmarkWriteBuffer extends Benchmark {
  91. static const cycle = 1 << 20;
  92. static const data = 'hello world';
  93. @override
  94. String explain() {
  95. return "write '$data' to StringBuffer for $cycle times";
  96. }
  97. @override
  98. void benchmark() {
  99. final buffer = StringBuffer();
  100. for (var i = 0; i < cycle; i++) {
  101. buffer.write(data);
  102. }
  103. }
  104. }