| 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 |