Home | History | Annotate | Download | only in perf
      1 
      2 
      3 describe('PathKit\'s Path Behavior', 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     function drawPath() {
     20         let path = PathKit.NewPath();
     21         path.moveTo(20, 5);
     22         path.lineTo(30, 20);
     23         path.lineTo(40, 10);
     24         path.lineTo(50, 20);
     25         path.lineTo(60, 0);
     26         path.lineTo(20, 5);
     27 
     28         path.moveTo(20, 80);
     29         path.bezierCurveTo(90, 10, 160, 150, 190, 10);
     30 
     31         path.moveTo(36, 148);
     32         path.quadraticCurveTo(66, 188, 120, 136);
     33         path.lineTo(36, 148);
     34 
     35         path.rect(5, 170, 20, 20);
     36 
     37         path.moveTo(150, 180);
     38         path.arcTo(150, 100, 50, 200, 20);
     39         path.lineTo(160, 160);
     40 
     41         path.moveTo(20, 120);
     42         path.arc(20, 120, 18, 0, 1.75 * Math.PI);
     43         path.lineTo(20, 120);
     44 
     45         let secondPath = PathKit.NewPath();
     46         secondPath.ellipse(130, 25, 30, 10, -1*Math.PI/8, Math.PI/6, 1.5*Math.PI, false);
     47 
     48         path.addPath(secondPath);
     49 
     50         let m = document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGMatrix();
     51         m.a = 1; m.b = 0;
     52         m.c = 0; m.d = 1;
     53         m.e = 0; m.f = 20.5;
     54 
     55         path.addPath(secondPath, m);
     56         secondPath.delete();
     57         return path;
     58     }
     59 
     60     it('path_path2dapi', function(done) {
     61         function setup(ctx) { }
     62 
     63         function test(ctx) {
     64             path = drawPath();
     65             path.delete();
     66         }
     67 
     68         function teardown(ctx) { }
     69 
     70         LoadPathKit.then(() => {
     71             benchmarkAndReport('path_path2dapi', setup, test, teardown).then(() => {
     72                 done();
     73             }).catch(reportError(done));
     74         });
     75     });
     76 
     77     describe('import options', function() {
     78         it('path_copy', function(done) {
     79             function setup(ctx) {
     80                 ctx.path = PathKit.FromSVGString('M 205,5 L 795,5 L 595,295 L 5,295 L 205,5 z');
     81             }
     82 
     83             function test(ctx) {
     84                 let p = ctx.path.copy();
     85                 p.delete();
     86             }
     87 
     88             function teardown(ctx) {
     89                 ctx.path.delete();
     90             }
     91 
     92             LoadPathKit.then(() => {
     93                 benchmarkAndReport('path_copy', setup, test, teardown).then(() => {
     94                     done();
     95                 }).catch(reportError(done));
     96             });
     97         });
     98 
     99         it('path_from_api_calls', function(done) {
    100             function setup(ctx) { }
    101 
    102             function test(ctx) {
    103                 let p = PathKit.NewPath()
    104                                .moveTo(205, 5)
    105                                .lineTo(795, 5)
    106                                .lineTo(595, 295)
    107                                .lineTo(5, 295)
    108                                .lineTo(205, 5)
    109                                .close();
    110                 p.delete();
    111             }
    112 
    113             function teardown(ctx) { }
    114 
    115             LoadPathKit.then(() => {
    116                 benchmarkAndReport('path_from_api_calls', setup, test, teardown).then(() => {
    117                     done();
    118                 }).catch(reportError(done));
    119             });
    120         });
    121 
    122         it('path_fromCmds', function(done) {
    123             function setup(ctx) { }
    124 
    125             function test(ctx) {
    126                 let p = PathKit.FromCmds(
    127                     [[PathKit.MOVE_VERB, 205, 5],
    128                     [PathKit.LINE_VERB, 795, 5],
    129                     [PathKit.LINE_VERB, 595, 295],
    130                     [PathKit.LINE_VERB, 5, 295],
    131                     [PathKit.LINE_VERB, 205, 5],
    132                     [PathKit.CLOSE_VERB]]);
    133                 p.delete();
    134             }
    135 
    136             function teardown(ctx) { }
    137 
    138             LoadPathKit.then(() => {
    139                 benchmarkAndReport('path_fromCmds', setup, test, teardown).then(() => {
    140                     done();
    141                 }).catch(reportError(done));
    142             });
    143         });
    144 
    145         it('path_fromSVGString', function(done) {
    146             function setup(ctx) {}
    147 
    148             function test(ctx) {
    149                 // https://upload.wikimedia.org/wikipedia/commons/e/e7/Simple_parallelogram.svg
    150                 let p = PathKit.FromSVGString('M 205,5 L 795,5 L 595,295 L 5,295 L 205,5 z');
    151                 p.delete();
    152             }
    153 
    154             function teardown(ctx) { }
    155 
    156             LoadPathKit.then(() => {
    157                 benchmarkAndReport('path_fromSVGString', setup, test, teardown).then(() => {
    158                     done();
    159                 }).catch(reportError(done));
    160             });
    161         });
    162     });
    163 
    164     describe('export options', function() {
    165         it('path_toCmds', function(done) {
    166             function setup(ctx) {
    167                 ctx.path = drawPath();
    168             }
    169 
    170             function test(ctx) {
    171                 ctx.path.toCmds();
    172             }
    173 
    174             function teardown(ctx) {
    175                 ctx.path.delete();
    176             }
    177 
    178             LoadPathKit.then(() => {
    179                 benchmarkAndReport('path_toCmds', setup, test, teardown).then(() => {
    180                     done();
    181                 }).catch(reportError(done));
    182             });
    183         });
    184 
    185         it('path_toPath2D', function(done) {
    186             function setup(ctx) {
    187                 ctx.path = drawPath();
    188             }
    189 
    190             function test(ctx) {
    191                 ctx.path.toPath2D();
    192             }
    193 
    194             function teardown(ctx) {
    195                 ctx.path.delete();
    196             }
    197 
    198             LoadPathKit.then(() => {
    199                 benchmarkAndReport('path_toPath2D', setup, test, teardown).then(() => {
    200                     done();
    201                 }).catch(reportError(done));
    202             });
    203         });
    204 
    205         it('path_toSVGString', function(done) {
    206             function setup(ctx) {
    207                 ctx.path = drawPath();
    208             }
    209 
    210             function test(ctx) {
    211                 ctx.path.toSVGString();
    212             }
    213 
    214             function teardown(ctx) {
    215                 ctx.path.delete();
    216             }
    217 
    218             LoadPathKit.then(() => {
    219                 benchmarkAndReport('path_toSVGString', setup, test, teardown).then(() => {
    220                     done();
    221                 }).catch(reportError(done));
    222             });
    223         });
    224     });
    225 
    226     describe('matrix options', function() {
    227         function drawTriangle() {
    228             let path = PathKit.NewPath();
    229             path.moveTo(0, 0);
    230             path.lineTo(10, 0);
    231             path.lineTo(10, 10);
    232             path.close();
    233             return path;
    234         }
    235 
    236         it('path_add_path_svgmatrix', function(done) {
    237             function setup(ctx) {
    238                 ctx.path = drawTriangle();
    239             }
    240 
    241             function test(ctx) {
    242                 let path = PathKit.NewPath();
    243                 let m = document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGMatrix();
    244                 m.a = 1; m.b = 0;
    245                 m.c = 0; m.d = 1;
    246                 m.e = 0; m.f = 20.5;
    247                 path.addPath(ctx.path, m);
    248                 path.delete();
    249             }
    250 
    251             function teardown(ctx) {
    252                 ctx.path.delete();
    253             }
    254 
    255             LoadPathKit.then(() => {
    256                 benchmarkAndReport('path_add_path_svgmatrix', setup, test, teardown).then(() => {
    257                     done();
    258                 }).catch(reportError(done));
    259             });
    260         });
    261 
    262         it('path_add_path_svgmatrix_reuse', function(done) {
    263             function setup(ctx) {
    264                 ctx.path = drawTriangle();
    265                 let m = document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGMatrix();
    266                 ctx.matrix = m;
    267             }
    268 
    269             function test(ctx) {
    270                 let path = PathKit.NewPath();
    271                 let m = ctx.matrix
    272                 m.a = 1; m.b = 0;
    273                 m.c = 0; m.d = 1;
    274                 m.e = 0; m.f = 20.5;
    275                 path.addPath(ctx.path, m);
    276                 path.delete();
    277             }
    278 
    279             function teardown(ctx) {
    280                 ctx.path.delete();
    281             }
    282 
    283             LoadPathKit.then(() => {
    284                 benchmarkAndReport('path_add_path_svgmatrix_reuse', setup, test, teardown).then(() => {
    285                     done();
    286                 }).catch(reportError(done));
    287             });
    288         });
    289 
    290         it('path_add_path_svgmatrix_bare', function(done) {
    291             function setup(ctx) {
    292                 ctx.path = drawTriangle();
    293             }
    294 
    295             function test(ctx) {
    296                 let path = PathKit.NewPath();
    297                 path.addPath(ctx.path, 1, 0, 0, 1, 0, 20.5);
    298                 path.delete();
    299             }
    300 
    301             function teardown(ctx) {
    302                 ctx.path.delete();
    303             }
    304 
    305             LoadPathKit.then(() => {
    306                 benchmarkAndReport('path_add_path_svgmatrix_bare', setup, test, teardown).then(() => {
    307                     done();
    308                 }).catch(reportError(done));
    309             });
    310         });
    311     });
    312 
    313 });