pathops.bench.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. describe('PathKit\'s Pathops', function() {
  2. // see https://fiddle.skia.org/c/@discrete_path
  3. function drawStar(X=128, Y=128, R=116) {
  4. let p = PathKit.NewPath();
  5. p.moveTo(X + R, Y);
  6. for (let i = 1; i < 8; i++) {
  7. let a = 2.6927937 * i;
  8. p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a));
  9. }
  10. p.closePath();
  11. return p;
  12. }
  13. it('pathops_simplify', function(done) {
  14. function setup(ctx) {
  15. ctx.path = drawStar();
  16. }
  17. function test(ctx) {
  18. let path = ctx.path.copy().simplify();
  19. path.delete();
  20. }
  21. function teardown(ctx) {
  22. ctx.path.delete();
  23. }
  24. LoadPathKit.then(() => {
  25. benchmarkAndReport('pathops_simplify', setup, test, teardown).then(() => {
  26. done();
  27. }).catch(reportError(done));
  28. });
  29. });
  30. it('pathops_diff', function(done) {
  31. function setup(ctx) {
  32. // Values chosen abitrarily to have some overlap and some not.
  33. ctx.path1 = drawStar(X=120, Y=120);
  34. ctx.path2 = drawStar(X=140, Y=145);
  35. }
  36. function test(ctx) {
  37. let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.DIFFERENCE);
  38. path.delete();
  39. }
  40. function teardown(ctx) {
  41. ctx.path1.delete();
  42. ctx.path2.delete();
  43. }
  44. LoadPathKit.then(() => {
  45. benchmarkAndReport('pathops_diff', setup, test, teardown).then(() => {
  46. done();
  47. }).catch(reportError(done));
  48. });
  49. });
  50. it('pathops_intersect', function(done) {
  51. function setup(ctx) {
  52. // Values chosen abitrarily to have some overlap and some not.
  53. ctx.path1 = drawStar(X=120, Y=120);
  54. ctx.path2 = drawStar(X=140, Y=145);
  55. }
  56. function test(ctx) {
  57. let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.INTERSECT);
  58. path.delete();
  59. }
  60. function teardown(ctx) {
  61. ctx.path1.delete();
  62. ctx.path2.delete();
  63. }
  64. LoadPathKit.then(() => {
  65. benchmarkAndReport('pathops_intersect', setup, test, teardown).then(() => {
  66. done();
  67. }).catch(reportError(done));
  68. });
  69. });
  70. it('pathops_union', function(done) {
  71. function setup(ctx) {
  72. // Values chosen abitrarily to have some overlap and some not.
  73. ctx.path1 = drawStar(X=120, Y=120);
  74. ctx.path2 = drawStar(X=140, Y=145);
  75. }
  76. function test(ctx) {
  77. let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.UNION);
  78. path.delete();
  79. }
  80. function teardown(ctx) {
  81. ctx.path1.delete();
  82. ctx.path2.delete();
  83. }
  84. LoadPathKit.then(() => {
  85. benchmarkAndReport('pathops_union', setup, test, teardown).then(() => {
  86. done();
  87. }).catch(reportError(done));
  88. });
  89. });
  90. it('pathops_xor', function(done) {
  91. function setup(ctx) {
  92. // Values chosen abitrarily to have some overlap and some not.
  93. ctx.path1 = drawStar(X=120, Y=120);
  94. ctx.path2 = drawStar(X=140, Y=145);
  95. }
  96. function test(ctx) {
  97. let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.XOR);
  98. path.delete();
  99. }
  100. function teardown(ctx) {
  101. ctx.path1.delete();
  102. ctx.path2.delete();
  103. }
  104. LoadPathKit.then(() => {
  105. benchmarkAndReport('pathops_xor', setup, test, teardown).then(() => {
  106. done();
  107. }).catch(reportError(done));
  108. });
  109. });
  110. it('pathops_reverse_diff', function(done) {
  111. function setup(ctx) {
  112. // Values chosen abitrarily to have some overlap and some not.
  113. ctx.path1 = drawStar(X=120, Y=120);
  114. ctx.path2 = drawStar(X=140, Y=145);
  115. }
  116. function test(ctx) {
  117. let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.REVERSE_DIFFERENCE);
  118. path.delete();
  119. }
  120. function teardown(ctx) {
  121. ctx.path1.delete();
  122. ctx.path2.delete();
  123. }
  124. LoadPathKit.then(() => {
  125. benchmarkAndReport('pathops_reverse_diff', setup, test, teardown).then(() => {
  126. done();
  127. }).catch(reportError(done));
  128. });
  129. });
  130. });