Home | History | Annotate | Download | only in perf
      1 
      2 
      3 describe('PathKit\'s Effects', function() {
      4     // Note, don't try to print the PathKit object - it can cause Karma/Jasmine to lock up.
      5     var PathKit = null;
      6     const LoadPathKit = new Promise(function(resolve, reject) {
      7         if (PathKit) {
      8             resolve();
      9         } else {
     10             PathKitInit({
     11                 locateFile: (file) => '/pathkit/'+file,
     12             }).ready().then((_PathKit) => {
     13                 PathKit = _PathKit;
     14                 resolve();
     15             });
     16         }
     17     });
     18 
     19     // see https://fiddle.skia.org/c/@discrete_path
     20     function drawStar(X=128, Y=128, R=116) {
     21         let p = PathKit.NewPath();
     22         p.moveTo(X + R, Y);
     23         for (let i = 1; i < 8; i++) {
     24           let a = 2.6927937 * i;
     25           p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a));
     26         }
     27         p.closePath();
     28         return p;
     29     }
     30 
     31     it('effects_dash', function(done) {
     32         function setup(ctx) {
     33             ctx.path = drawStar();
     34         }
     35 
     36         function test(ctx) {
     37             let path = ctx.path.copy().dash(10, 3, 1);
     38             path.delete();
     39         }
     40 
     41         function teardown(ctx) {
     42             ctx.path.delete();
     43         }
     44 
     45         LoadPathKit.then(() => {
     46             benchmarkAndReport('effects_dash', setup, test, teardown).then(() => {
     47                 done();
     48             }).catch(reportError(done));
     49         });
     50     });
     51 
     52     it('effects_trim', function(done) {
     53         function setup(ctx) {
     54             ctx.path = drawStar();
     55         }
     56 
     57         function test(ctx) {
     58             let path = ctx.path.copy().trim(0.25, .8);
     59             path.delete();
     60         }
     61 
     62         function teardown(ctx) {
     63             ctx.path.delete();
     64         }
     65 
     66         LoadPathKit.then(() => {
     67             benchmarkAndReport('effects_trim', setup, test, teardown).then(() => {
     68                 done();
     69             }).catch(reportError(done));
     70         });
     71     });
     72 
     73     it('effects_trim_complement', function(done) {
     74         function setup(ctx) {
     75             ctx.path = drawStar();
     76         }
     77 
     78         function test(ctx) {
     79             let path = ctx.path.copy().trim(0.25, .8, true);
     80             path.delete();
     81         }
     82 
     83         function teardown(ctx) {
     84             ctx.path.delete();
     85         }
     86 
     87         LoadPathKit.then(() => {
     88             benchmarkAndReport('effects_trim_complement', setup, test, teardown).then(() => {
     89                 done();
     90             }).catch(reportError(done));
     91         });
     92     });
     93 
     94     it('effects_transform', function(done) {
     95         function setup(ctx) {
     96             ctx.path = drawStar();
     97         }
     98 
     99         function test(ctx) {
    100             let path = ctx.path.copy().transform(3, 0, 0,
    101                                              0, 3, 0,
    102                                              0, 0, 1);
    103             path.delete();
    104         }
    105 
    106         function teardown(ctx) {
    107             ctx.path.delete();
    108         }
    109 
    110         LoadPathKit.then(() => {
    111             benchmarkAndReport('effects_transform', setup, test, teardown).then(() => {
    112                 done();
    113             }).catch(reportError(done));
    114         });
    115     });
    116 
    117     it('effects_stroke', function(done) {
    118         function setup(ctx) {
    119             ctx.path = drawStar();
    120         }
    121 
    122         function test(ctx) {
    123             let path = ctx.path.copy().stroke({
    124                     width: 15,
    125                     join: PathKit.StrokeJoin.BEVEL,
    126                     cap: PathKit.StrokeCap.BUTT,
    127                     miter_limit: 2,
    128                 });
    129             path.delete();
    130         }
    131 
    132         function teardown(ctx) {
    133             ctx.path.delete();
    134         }
    135 
    136         LoadPathKit.then(() => {
    137             benchmarkAndReport('effects_stroke', setup, test, teardown).then(() => {
    138                 done();
    139             }).catch(reportError(done));
    140         });
    141     });
    142 
    143 });