xuty 4 лет назад
Родитель
Сommit
d6ab6026f2
3 измененных файлов с 38 добавлено и 21 удалено
  1. 19 19
      lib/terminal/ansi.dart
  2. 2 2
      lib/utli/debug_handler.dart
  3. 17 0
      script/benchmark.dart

+ 19 - 19
lib/terminal/ansi.dart

@@ -7,7 +7,7 @@ import 'package:xterm/terminal/terminal.dart';
 typedef AnsiHandler = void Function(Queue<int>, Terminal);
 
 void ansiHandler(Queue<int> queue, Terminal terminal) {
-  final charAfterEsc = String.fromCharCode(queue.removeFirst());
+  final charAfterEsc = queue.removeFirst();
 
   final handler = _ansiHandlers[charAfterEsc];
   if (handler != null) {
@@ -20,24 +20,24 @@ void ansiHandler(Queue<int> queue, Terminal terminal) {
   terminal.debug.onError('unsupported ansi sequence: $charAfterEsc');
 }
 
-final _ansiHandlers = <String, AnsiHandler>{
-  '[': csiHandler,
-  ']': oscHandler,
-  '7': _ansiSaveCursorHandler,
-  '8': _ansiRestoreCursorHandler,
-  'D': _ansiIndexHandler,
-  'E': _ansiNextLineHandler,
-  'H': _ansiTabSetHandler,
-  'M': _ansiReverseIndexHandler,
-  'P': _unsupportedHandler, // Sixel
-  'c': _unsupportedHandler,
-  '#': _unsupportedHandler,
-  '(': _scsHandler(0), //  G0
-  ')': _scsHandler(1), //  G1
-  '*': _voidHandler(1), // TODO: G2 (vt220)
-  '+': _voidHandler(1), // TODO: G3 (vt220)
-  '>': _voidHandler(0), // TODO: Normal Keypad
-  '=': _voidHandler(0), // TODO: Application Keypad
+final _ansiHandlers = <int, AnsiHandler>{
+  '['.codeUnitAt(0): csiHandler,
+  ']'.codeUnitAt(0): oscHandler,
+  '7'.codeUnitAt(0): _ansiSaveCursorHandler,
+  '8'.codeUnitAt(0): _ansiRestoreCursorHandler,
+  'D'.codeUnitAt(0): _ansiIndexHandler,
+  'E'.codeUnitAt(0): _ansiNextLineHandler,
+  'H'.codeUnitAt(0): _ansiTabSetHandler,
+  'M'.codeUnitAt(0): _ansiReverseIndexHandler,
+  'P'.codeUnitAt(0): _unsupportedHandler, // Sixel
+  'c'.codeUnitAt(0): _unsupportedHandler,
+  '#'.codeUnitAt(0): _unsupportedHandler,
+  '('.codeUnitAt(0): _scsHandler(0), //  G0
+  ')'.codeUnitAt(0): _scsHandler(1), //  G1
+  '*'.codeUnitAt(0): _voidHandler(1), // TODO: G2 (vt220)
+  '+'.codeUnitAt(0): _voidHandler(1), // TODO: G3 (vt220)
+  '>'.codeUnitAt(0): _voidHandler(0), // TODO: Normal Keypad
+  '='.codeUnitAt(0): _voidHandler(0), // TODO: Application Keypad
 };
 
 AnsiHandler _voidHandler(int sequenceLength) {

+ 2 - 2
lib/utli/debug_handler.dart

@@ -26,10 +26,10 @@ class DebugHandler {
     print(AnsiColor.green('<CSI $csi>'));
   }
 
-  void onEsc(String charAfterEsc) {
+  void onEsc(int charAfterEsc) {
     if (!_enabled) return;
     _checkBuffer();
-    print(AnsiColor.green('<ESC $charAfterEsc>'));
+    print(AnsiColor.green('<ESC ${String.fromCharCode(charAfterEsc)}>'));
   }
 
   void onOsc(List<String> params) {

+ 17 - 0
script/benchmark.dart

@@ -2,6 +2,7 @@ import 'package:xterm/xterm.dart';
 
 void main() {
   BenchmarkWrite().run();
+  BenchmarkWrite2().run();
   BenchmarkWriteBuffer().run();
 }
 
@@ -38,6 +39,22 @@ class BenchmarkWrite extends Benchmark {
   }
 }
 
+class BenchmarkWrite2 extends Benchmark {
+  static const cycle = 100000;
+  static const data = '100000';
+
+  String explain() {
+    return "write '$data' to Terminal for $cycle times";
+  }
+
+  void benchmark() {
+    final terminal = Terminal();
+    for (var i = 0; i < cycle; i++) {
+      terminal.write(data);
+    }
+  }
+}
+
 class BenchmarkWriteBuffer extends Benchmark {
   static const cycle = 1 << 20;
   static const data = 'hello world';