556350de37
We have a similar ingestion strategy to Gold. I tried to use something off the shelf like benchmark.js but passing the PathKit context into the benchmarks was non-trivial. Plus, making a basic benchmarking tool ended up being not too hard. We should be able to re-use the docker container/aggregator for CanvasKit too. Bug: skia: Change-Id: I613dfc58ea57c31cf71566a8ac55f8df9272ad25 Reviewed-on: https://skia-review.googlesource.com/c/161620 Commit-Queue: Kevin Lubick <kjlubick@google.com> Reviewed-by: Joe Gregorio <jcgregorio@google.com> Reviewed-by: Stephan Altmueller <stephana@google.com>
150 lines
4.5 KiB
JavaScript
150 lines
4.5 KiB
JavaScript
/*
|
|
* This externs file prevents the Closure JS compiler from minifying away
|
|
* names of objects created by Emscripten.
|
|
* Basically, by defining empty objects and functions here, Closure will
|
|
* know not to rename them. This is needed because of our pre-js files,
|
|
* that is, the JS we hand-write to bundle into PathKit.
|
|
*
|
|
* Emscripten does not support automatically generating an externs file, so we
|
|
* do it by hand. The general process is to write some JS code, and then put any
|
|
* calls to PathKit or related things in here. Running ./compile.sh and then
|
|
* looking at the minified results or running the Release-PathKit trybot should
|
|
* verify nothing was missed. Optionally, looking directly at the minified
|
|
* pathkit.js can be useful when developing locally.
|
|
*
|
|
* Docs:
|
|
* https://github.com/cljsjs/packages/wiki/Creating-Externs
|
|
* https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System
|
|
*
|
|
* Example externs:
|
|
* https://github.com/google/closure-compiler/tree/master/externs
|
|
*/
|
|
|
|
var PathKit = {
|
|
SkBits2FloatUnsigned: function(num) {},
|
|
_malloc: function(size) {},
|
|
_free: function(ptr) {},
|
|
onRuntimeInitialized: function() {},
|
|
_FromCmds: function(ptr, size) {},
|
|
loadCmdsTypedArray: function(arr) {},
|
|
FromCmds: function(arr) {},
|
|
_SkCubicMap: function(cp1, cp2) {},
|
|
cubicYFromX: function(cpx1, cpy1, cpx2, cpy2, X) {},
|
|
cubicPtFromT: function(cpx1, cpy1, cpx2, cpy2, T) {},
|
|
|
|
/**
|
|
* @type {Float32Array}
|
|
*/
|
|
HEAPF32: {},
|
|
|
|
SkPath: {
|
|
_addPath: function(path, scaleX, skewX, transX, skewY, scaleY, transY, pers0, pers1, pers2) {},
|
|
_arc: function(x, y, radius, startAngle, endAngle, ccw) {},
|
|
_arcTo: function(x1, y1, x2, y2, radius) {},
|
|
_dash: function(on, off, phase) {},
|
|
_close: function() {},
|
|
_conicTo: function(x1, y1, x2, y2, w) {},
|
|
copy: function() {},
|
|
_cubicTo: function(cp1x, cp1y, cp2x, cp2y, x, y) {},
|
|
_ellipse: function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, ccw) {},
|
|
_lineTo: function(x1, y1) {},
|
|
_moveTo: function(x1, y1) {},
|
|
_op: function(otherPath, op) {},
|
|
_quadTo: function(cpx, cpy, x, y) {},
|
|
_rect: function(x, y, w, h) {},
|
|
_simplify: function() {},
|
|
_stroke: function(opts) {},
|
|
_trim: function(startT, stopT, isComplement) {},
|
|
_transform: function() {}, // takes 1 or 9 params
|
|
},
|
|
|
|
StrokeCap: {
|
|
BUTT: {},
|
|
ROUND: {},
|
|
SQUARE: {},
|
|
},
|
|
StrokeJoin: {
|
|
MITER: {},
|
|
ROUND: {},
|
|
BEVEL: {},
|
|
}
|
|
};
|
|
|
|
// Define StrokeOpts object
|
|
var StrokeOpts = {};
|
|
StrokeOpts.prototype.width;
|
|
StrokeOpts.prototype.miter_limit;
|
|
StrokeOpts.prototype.cap;
|
|
StrokeOpts.prototype.join;
|
|
|
|
// Define CubicMap object
|
|
var CubicMap = {};
|
|
CubicMap.prototype.computeYFromX = function(x) {};
|
|
CubicMap.prototype.computePtFromT = function(t) {};
|
|
|
|
|
|
// For whatever reason, the closure compiler thinks it can rename some of our
|
|
// prototype methods. Not entirely sure why.
|
|
// Listing them here prevents that.
|
|
PathKit.SkPath.prototype.addPath = function() {};
|
|
PathKit.SkPath.prototype.arc = function(x, y, radius, startAngle, endAngle, ccw) {};
|
|
PathKit.SkPath.prototype.arcTo = function(x1, y1, x2, y2, radius) {};
|
|
PathKit.SkPath.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {};
|
|
PathKit.SkPath.prototype.close = function() {};
|
|
PathKit.SkPath.prototype.closePath = function() {};
|
|
PathKit.SkPath.prototype.conicTo = function(x1, y1, x2, y2, w) {};
|
|
PathKit.SkPath.prototype.cubicTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {};
|
|
PathKit.SkPath.prototype.dash = function(on, off, phase) {};
|
|
PathKit.SkPath.prototype.ellipse = function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, ccw) {};
|
|
PathKit.SkPath.prototype.lineTo = function(x, y) {};
|
|
PathKit.SkPath.prototype.moveTo = function(x, y) {};
|
|
PathKit.SkPath.prototype.op = function(otherPath, op) {};
|
|
PathKit.SkPath.prototype.quadTo = function(x1, y1, x2, y2) {};
|
|
PathKit.SkPath.prototype.quadraticCurveTo = function(x1, y1, x2, y2) {};
|
|
PathKit.SkPath.prototype.rect = function(x, y, w, h) {};
|
|
PathKit.SkPath.prototype.simplify = function() {};
|
|
PathKit.SkPath.prototype.stroke = function(opts) {};
|
|
PathKit.SkPath.prototype.transform = function() {};
|
|
PathKit.SkPath.prototype.trim = function(startT, stopT, isComplement) {};
|
|
// The following was taken from https://github.com/google/closure-compiler/blob/master/contrib/externs/svg.js
|
|
|
|
/**
|
|
* @constructor
|
|
*/
|
|
function SVGMatrix(){}
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
*/
|
|
SVGMatrix.prototype.a;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
*/
|
|
SVGMatrix.prototype.b;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
*/
|
|
SVGMatrix.prototype.c;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
*/
|
|
SVGMatrix.prototype.d;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
*/
|
|
SVGMatrix.prototype.e;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
*/
|
|
SVGMatrix.prototype.f; |