OLD | NEW |
(Empty) | |
| 1 library petitparser.test.json_benchmark; |
| 2 |
| 3 import 'package:petitparser/json.dart'; |
| 4 |
| 5 import 'dart:convert'; |
| 6 |
| 7 double benchmark(Function function, [int warmup = 1000, int milliseconds = 5000]
) { |
| 8 var count = 0; |
| 9 var elapsed = 0; |
| 10 var watch = new Stopwatch(); |
| 11 while (warmup-- > 0) { |
| 12 function(); |
| 13 } |
| 14 watch.start(); |
| 15 while (elapsed < milliseconds) { |
| 16 function(); |
| 17 elapsed = watch.elapsedMilliseconds; |
| 18 count++; |
| 19 } |
| 20 return elapsed / count; |
| 21 } |
| 22 |
| 23 const jsonEvent = '{"type": "change", "eventPhase": 2, "bubbles": true, "cancela
ble": true, ' |
| 24 '"timeStamp": 0, "CAPTURING_PHASE": 1, "AT_TARGET": 2, "BUBBLING_PHASE": 3,
"isTrusted": ' |
| 25 'true, "MOUSEDOWN": 1, "MOUSEUP": 2, "MOUSEOVER": 4, "MOUSEOUT": 8, "MOUSEMO
VE": 16, ' |
| 26 '"MOUSEDRAG": 32, "CLICK": 64, "DBLCLICK": 128, "KEYDOWN": 256, "KEYUP": 512
, "KEYPRESS": ' |
| 27 '1024, "DRAGDROP": 2048, "FOCUS": 4096, "BLUR": 8192, "SELECT": 16384, "CHAN
GE": 32768, ' |
| 28 '"RESET": 65536, "SUBMIT": 131072, "SCROLL": 262144, "LOAD": 524288, "UNLOAD
": 1048576, ' |
| 29 '"XFER_DONE": 2097152, "ABORT": 4194304, "ERROR": 8388608, "LOCATE": 1677721
6, "MOVE": ' |
| 30 '33554432, "RESIZE": 67108864, "FORWARD": 134217728, "HELP": 268435456, "BAC
K": 536870912, ' |
| 31 '"TEXT": 1073741824, "ALT_MASK": 1, "CONTROL_MASK": 2, "SHIFT_MASK": 4, "MET
A_MASK": 8}'; |
| 32 |
| 33 final JsonParser json = new JsonParser(); |
| 34 |
| 35 dynamic native(String input) => JSON.decode(input); |
| 36 dynamic custom(String input) => json.parse(input).value; |
| 37 |
| 38 void main() { |
| 39 var nativeResult = native(jsonEvent); |
| 40 var customResult = custom(jsonEvent); |
| 41 |
| 42 if (nativeResult.toString() != customResult.toString()) { |
| 43 print('Results not matching!'); |
| 44 print(' Native: $nativeResult'); |
| 45 print(' Custom: $customResult'); |
| 46 return; |
| 47 } |
| 48 |
| 49 var nativeTime = benchmark(() => native(jsonEvent)); |
| 50 var customTime = benchmark(() => custom(jsonEvent)); |
| 51 var ratio = customTime / nativeTime; |
| 52 |
| 53 print('Slowdown: ${ratio.toStringAsFixed(1)}'); |
| 54 print('Native: ${nativeTime.toStringAsFixed(6)}'); |
| 55 print('Custom: ${customTime.toStringAsFixed(6)}'); |
| 56 } |
OLD | NEW |