Skip to content

Instantly share code, notes, and snippets.

@yjbanov
Last active June 30, 2020 16:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yjbanov/2fa6e86cd83d9943ca5912c0fe7581cf to your computer and use it in GitHub Desktop.
Save yjbanov/2fa6e86cd83d9943ca5912c0fe7581cf to your computer and use it in GitHub Desktop.
@JS('window.flutter_canvas_kit.BlendMode.Clear.value')
external int get canvasKitBlendModeClear;
@JS('window.flutter_canvas_kit.BlendMode.Src.value')
external int get canvasKitBlendModeSrc;
@JS('window.flutter_canvas_kit.BlendMode.Dst.value')
external int get canvasKitBlendModeDst;
@JS('window.flutter_canvas_kit.BlendMode.SrcOver.value')
external int get canvasKitBlendModeSrcOver;
@JS('window.flutter_canvas_kit.BlendMode.DstOver.value')
external int get canvasKitBlendModeDstOver;
@JS('window.flutter_canvas_kit.BlendMode.SrcIn.value')
external int get canvasKitBlendModeSrcIn;
@JS('window.flutter_canvas_kit.BlendMode.DstIn.value')
external int get canvasKitBlendModeDstIn;
@JS('window.flutter_canvas_kit.BlendMode.SrcOut.value')
external int get canvasKitBlendModeSrcOut;
@JS('window.flutter_canvas_kit.BlendMode.DstOut.value')
external int get canvasKitBlendModeDstOut;
@JS('window.flutter_canvas_kit.BlendMode.SrcATop.value')
external int get canvasKitBlendModeSrcATop;
@JS('window.flutter_canvas_kit.BlendMode.DstATop.value')
external int get canvasKitBlendModeDstATop;
@JS('window.flutter_canvas_kit.BlendMode.Xor.value')
external int get canvasKitBlendModeXor;
@JS('window.flutter_canvas_kit.BlendMode.Plus.value')
external int get canvasKitBlendModePlus;
@JS('window.flutter_canvas_kit.BlendMode.Modulate.value')
external int get canvasKitBlendModeModulate;
@JS('window.flutter_canvas_kit.BlendMode.Screen.value')
external int get canvasKitBlendModeScreen;
@JS('window.flutter_canvas_kit.BlendMode.Overlay.value')
external int get canvasKitBlendModeOverlay;
@JS('window.flutter_canvas_kit.BlendMode.Darken.value')
external int get canvasKitBlendModeDarken;
@JS('window.flutter_canvas_kit.BlendMode.Lighten.value')
external int get canvasKitBlendModeLighten;
@JS('window.flutter_canvas_kit.BlendMode.ColorDodge.value')
external int get canvasKitBlendModeColorDodge;
@JS('window.flutter_canvas_kit.BlendMode.ColorBurn.value')
external int get canvasKitBlendModeColorBurn;
@JS('window.flutter_canvas_kit.BlendMode.HardLight.value')
external int get canvasKitBlendModeHardLight;
@JS('window.flutter_canvas_kit.BlendMode.SoftLight.value')
external int get canvasKitBlendModeSoftLight;
@JS('window.flutter_canvas_kit.BlendMode.Difference.value')
external int get canvasKitBlendModeDifference;
@JS('window.flutter_canvas_kit.BlendMode.Exclusion.value')
external int get canvasKitBlendModeExclusion;
@JS('window.flutter_canvas_kit.BlendMode.Multiply.value')
external int get canvasKitBlendModeMultiply;
@JS('window.flutter_canvas_kit.BlendMode.Hue.value')
external int get canvasKitBlendModeHue;
@JS('window.flutter_canvas_kit.BlendMode.Saturation.value')
external int get canvasKitBlendModeSaturation;
@JS('window.flutter_canvas_kit.BlendMode.Color.value')
external int get canvasKitBlendModeColor;
@JS('window.flutter_canvas_kit.BlendMode.Luminosity.value')
external int get canvasKitBlendModeLuminosity;
typedef int BlendModeGetter();
void benchmarkAtJS() {
final List<BlendModeGetter> flatGetters = <BlendModeGetter>[
() => canvasKitBlendModeClear,
() => canvasKitBlendModeSrc,
() => canvasKitBlendModeDst,
() => canvasKitBlendModeSrcOver,
() => canvasKitBlendModeDstOver,
() => canvasKitBlendModeSrcIn,
() => canvasKitBlendModeDstIn,
() => canvasKitBlendModeSrcOut,
() => canvasKitBlendModeDstOut,
() => canvasKitBlendModeSrcATop,
() => canvasKitBlendModeDstATop,
() => canvasKitBlendModeXor,
() => canvasKitBlendModePlus,
() => canvasKitBlendModeModulate,
() => canvasKitBlendModeScreen,
() => canvasKitBlendModeOverlay,
() => canvasKitBlendModeDarken,
() => canvasKitBlendModeLighten,
() => canvasKitBlendModeColorDodge,
() => canvasKitBlendModeColorBurn,
() => canvasKitBlendModeHardLight,
() => canvasKitBlendModeSoftLight,
() => canvasKitBlendModeDifference,
() => canvasKitBlendModeExclusion,
() => canvasKitBlendModeMultiply,
() => canvasKitBlendModeHue,
() => canvasKitBlendModeSaturation,
() => canvasKitBlendModeColor,
() => canvasKitBlendModeLuminosity,
];
final List<BlendModeGetter> structuredGetters = <BlendModeGetter>[
() => canvasKit2.BlendMode.Clear.value,
() => canvasKit2.BlendMode.Src.value,
() => canvasKit2.BlendMode.Dst.value,
() => canvasKit2.BlendMode.SrcOver.value,
() => canvasKit2.BlendMode.DstOver.value,
() => canvasKit2.BlendMode.SrcIn.value,
() => canvasKit2.BlendMode.DstIn.value,
() => canvasKit2.BlendMode.SrcOut.value,
() => canvasKit2.BlendMode.DstOut.value,
() => canvasKit2.BlendMode.SrcATop.value,
() => canvasKit2.BlendMode.DstATop.value,
() => canvasKit2.BlendMode.Xor.value,
() => canvasKit2.BlendMode.Plus.value,
() => canvasKit2.BlendMode.Modulate.value,
() => canvasKit2.BlendMode.Screen.value,
() => canvasKit2.BlendMode.Overlay.value,
() => canvasKit2.BlendMode.Darken.value,
() => canvasKit2.BlendMode.Lighten.value,
() => canvasKit2.BlendMode.ColorDodge.value,
() => canvasKit2.BlendMode.ColorBurn.value,
() => canvasKit2.BlendMode.HardLight.value,
() => canvasKit2.BlendMode.SoftLight.value,
() => canvasKit2.BlendMode.Difference.value,
() => canvasKit2.BlendMode.Exclusion.value,
() => canvasKit2.BlendMode.Multiply.value,
() => canvasKit2.BlendMode.Hue.value,
() => canvasKit2.BlendMode.Saturation.value,
() => canvasKit2.BlendMode.Color.value,
() => canvasKit2.BlendMode.Luminosity.value,
];
final int len = flatGetters.length;
for (int j = 0; j < 10; j++) {
print('Benchmarking flat getters');
final Stopwatch sw = Stopwatch();
sw.start();
for (int i = 0; i < 10000; i++) {
flatGetters[i % len]();
}
sw.stop();
print('Flat getters took ${sw.elapsedMicroseconds}us');
sw.reset();
print('Benchmarking structured getters');
sw.start();
for (int i = 0; i < 10000; i++) {
structuredGetters[i % len]();
}
sw.stop();
print('Structured getters took ${sw.elapsedMicroseconds}us');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment