xref: /aosp_15_r20/external/skia/modules/pathkit/perf/effects.bench.js (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerdescribe('PathKit\'s Effects', function() {
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Worker    // see https://fiddle.skia.org/c/@discrete_path
4*c8dee2aaSAndroid Build Coastguard Worker    function drawStar(X=128, Y=128, R=116) {
5*c8dee2aaSAndroid Build Coastguard Worker        let p = PathKit.NewPath();
6*c8dee2aaSAndroid Build Coastguard Worker        p.moveTo(X + R, Y);
7*c8dee2aaSAndroid Build Coastguard Worker        for (let i = 1; i < 8; i++) {
8*c8dee2aaSAndroid Build Coastguard Worker          let a = 2.6927937 * i;
9*c8dee2aaSAndroid Build Coastguard Worker          p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a));
10*c8dee2aaSAndroid Build Coastguard Worker        }
11*c8dee2aaSAndroid Build Coastguard Worker        p.closePath();
12*c8dee2aaSAndroid Build Coastguard Worker        return p;
13*c8dee2aaSAndroid Build Coastguard Worker    }
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker    it('effects_dash', function(done) {
16*c8dee2aaSAndroid Build Coastguard Worker        function setup(ctx) {
17*c8dee2aaSAndroid Build Coastguard Worker            ctx.path = drawStar();
18*c8dee2aaSAndroid Build Coastguard Worker        }
19*c8dee2aaSAndroid Build Coastguard Worker
20*c8dee2aaSAndroid Build Coastguard Worker        function test(ctx) {
21*c8dee2aaSAndroid Build Coastguard Worker            let path = ctx.path.copy().dash(10, 3, 1);
22*c8dee2aaSAndroid Build Coastguard Worker            path.delete();
23*c8dee2aaSAndroid Build Coastguard Worker        }
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard Worker        function teardown(ctx) {
26*c8dee2aaSAndroid Build Coastguard Worker            ctx.path.delete();
27*c8dee2aaSAndroid Build Coastguard Worker        }
28*c8dee2aaSAndroid Build Coastguard Worker
29*c8dee2aaSAndroid Build Coastguard Worker        LoadPathKit.then(() => {
30*c8dee2aaSAndroid Build Coastguard Worker            benchmarkAndReport('effects_dash', setup, test, teardown).then(() => {
31*c8dee2aaSAndroid Build Coastguard Worker                done();
32*c8dee2aaSAndroid Build Coastguard Worker            }).catch(reportError(done));
33*c8dee2aaSAndroid Build Coastguard Worker        });
34*c8dee2aaSAndroid Build Coastguard Worker    });
35*c8dee2aaSAndroid Build Coastguard Worker
36*c8dee2aaSAndroid Build Coastguard Worker    it('effects_trim', function(done) {
37*c8dee2aaSAndroid Build Coastguard Worker        function setup(ctx) {
38*c8dee2aaSAndroid Build Coastguard Worker            ctx.path = drawStar();
39*c8dee2aaSAndroid Build Coastguard Worker        }
40*c8dee2aaSAndroid Build Coastguard Worker
41*c8dee2aaSAndroid Build Coastguard Worker        function test(ctx) {
42*c8dee2aaSAndroid Build Coastguard Worker            let path = ctx.path.copy().trim(0.25, .8);
43*c8dee2aaSAndroid Build Coastguard Worker            path.delete();
44*c8dee2aaSAndroid Build Coastguard Worker        }
45*c8dee2aaSAndroid Build Coastguard Worker
46*c8dee2aaSAndroid Build Coastguard Worker        function teardown(ctx) {
47*c8dee2aaSAndroid Build Coastguard Worker            ctx.path.delete();
48*c8dee2aaSAndroid Build Coastguard Worker        }
49*c8dee2aaSAndroid Build Coastguard Worker
50*c8dee2aaSAndroid Build Coastguard Worker        LoadPathKit.then(() => {
51*c8dee2aaSAndroid Build Coastguard Worker            benchmarkAndReport('effects_trim', setup, test, teardown).then(() => {
52*c8dee2aaSAndroid Build Coastguard Worker                done();
53*c8dee2aaSAndroid Build Coastguard Worker            }).catch(reportError(done));
54*c8dee2aaSAndroid Build Coastguard Worker        });
55*c8dee2aaSAndroid Build Coastguard Worker    });
56*c8dee2aaSAndroid Build Coastguard Worker
57*c8dee2aaSAndroid Build Coastguard Worker    it('effects_trim_complement', function(done) {
58*c8dee2aaSAndroid Build Coastguard Worker        function setup(ctx) {
59*c8dee2aaSAndroid Build Coastguard Worker            ctx.path = drawStar();
60*c8dee2aaSAndroid Build Coastguard Worker        }
61*c8dee2aaSAndroid Build Coastguard Worker
62*c8dee2aaSAndroid Build Coastguard Worker        function test(ctx) {
63*c8dee2aaSAndroid Build Coastguard Worker            let path = ctx.path.copy().trim(0.25, .8, true);
64*c8dee2aaSAndroid Build Coastguard Worker            path.delete();
65*c8dee2aaSAndroid Build Coastguard Worker        }
66*c8dee2aaSAndroid Build Coastguard Worker
67*c8dee2aaSAndroid Build Coastguard Worker        function teardown(ctx) {
68*c8dee2aaSAndroid Build Coastguard Worker            ctx.path.delete();
69*c8dee2aaSAndroid Build Coastguard Worker        }
70*c8dee2aaSAndroid Build Coastguard Worker
71*c8dee2aaSAndroid Build Coastguard Worker        LoadPathKit.then(() => {
72*c8dee2aaSAndroid Build Coastguard Worker            benchmarkAndReport('effects_trim_complement', setup, test, teardown).then(() => {
73*c8dee2aaSAndroid Build Coastguard Worker                done();
74*c8dee2aaSAndroid Build Coastguard Worker            }).catch(reportError(done));
75*c8dee2aaSAndroid Build Coastguard Worker        });
76*c8dee2aaSAndroid Build Coastguard Worker    });
77*c8dee2aaSAndroid Build Coastguard Worker
78*c8dee2aaSAndroid Build Coastguard Worker    it('effects_transform', function(done) {
79*c8dee2aaSAndroid Build Coastguard Worker        function setup(ctx) {
80*c8dee2aaSAndroid Build Coastguard Worker            ctx.path = drawStar();
81*c8dee2aaSAndroid Build Coastguard Worker        }
82*c8dee2aaSAndroid Build Coastguard Worker
83*c8dee2aaSAndroid Build Coastguard Worker        function test(ctx) {
84*c8dee2aaSAndroid Build Coastguard Worker            let path = ctx.path.copy().transform(3, 0, 0,
85*c8dee2aaSAndroid Build Coastguard Worker                                             0, 3, 0,
86*c8dee2aaSAndroid Build Coastguard Worker                                             0, 0, 1);
87*c8dee2aaSAndroid Build Coastguard Worker            path.delete();
88*c8dee2aaSAndroid Build Coastguard Worker        }
89*c8dee2aaSAndroid Build Coastguard Worker
90*c8dee2aaSAndroid Build Coastguard Worker        function teardown(ctx) {
91*c8dee2aaSAndroid Build Coastguard Worker            ctx.path.delete();
92*c8dee2aaSAndroid Build Coastguard Worker        }
93*c8dee2aaSAndroid Build Coastguard Worker
94*c8dee2aaSAndroid Build Coastguard Worker        LoadPathKit.then(() => {
95*c8dee2aaSAndroid Build Coastguard Worker            benchmarkAndReport('effects_transform', setup, test, teardown).then(() => {
96*c8dee2aaSAndroid Build Coastguard Worker                done();
97*c8dee2aaSAndroid Build Coastguard Worker            }).catch(reportError(done));
98*c8dee2aaSAndroid Build Coastguard Worker        });
99*c8dee2aaSAndroid Build Coastguard Worker    });
100*c8dee2aaSAndroid Build Coastguard Worker
101*c8dee2aaSAndroid Build Coastguard Worker    it('effects_stroke', function(done) {
102*c8dee2aaSAndroid Build Coastguard Worker        function setup(ctx) {
103*c8dee2aaSAndroid Build Coastguard Worker            ctx.path = drawStar();
104*c8dee2aaSAndroid Build Coastguard Worker        }
105*c8dee2aaSAndroid Build Coastguard Worker
106*c8dee2aaSAndroid Build Coastguard Worker        function test(ctx) {
107*c8dee2aaSAndroid Build Coastguard Worker            let path = ctx.path.copy().stroke({
108*c8dee2aaSAndroid Build Coastguard Worker                    width: 15,
109*c8dee2aaSAndroid Build Coastguard Worker                    join: PathKit.StrokeJoin.BEVEL,
110*c8dee2aaSAndroid Build Coastguard Worker                    cap: PathKit.StrokeCap.BUTT,
111*c8dee2aaSAndroid Build Coastguard Worker                    miter_limit: 2,
112*c8dee2aaSAndroid Build Coastguard Worker                });
113*c8dee2aaSAndroid Build Coastguard Worker            path.delete();
114*c8dee2aaSAndroid Build Coastguard Worker        }
115*c8dee2aaSAndroid Build Coastguard Worker
116*c8dee2aaSAndroid Build Coastguard Worker        function teardown(ctx) {
117*c8dee2aaSAndroid Build Coastguard Worker            ctx.path.delete();
118*c8dee2aaSAndroid Build Coastguard Worker        }
119*c8dee2aaSAndroid Build Coastguard Worker
120*c8dee2aaSAndroid Build Coastguard Worker        LoadPathKit.then(() => {
121*c8dee2aaSAndroid Build Coastguard Worker            benchmarkAndReport('effects_stroke', setup, test, teardown).then(() => {
122*c8dee2aaSAndroid Build Coastguard Worker                done();
123*c8dee2aaSAndroid Build Coastguard Worker            }).catch(reportError(done));
124*c8dee2aaSAndroid Build Coastguard Worker        });
125*c8dee2aaSAndroid Build Coastguard Worker    });
126*c8dee2aaSAndroid Build Coastguard Worker
127*c8dee2aaSAndroid Build Coastguard Worker});