Skip to content

Commit 1dab816

Browse files
committed
Avoid to create any subarrays when optimizing 'save, transform, constructPath, restore' (bug 1961107)
Removing those `subarray`calls helps to improve performance by a factor 6 on Linux and by a factor of 3 on Windows 11.
1 parent 2f7d163 commit 1dab816

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

src/core/operator_list.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,11 +524,11 @@ addState(
524524
switch (buffer[k++]) {
525525
case DrawOPS.moveTo:
526526
case DrawOPS.lineTo:
527-
Util.applyTransform(buffer.subarray(k), transform);
527+
Util.applyTransformToBuffer(buffer, k, transform);
528528
k += 2;
529529
break;
530530
case DrawOPS.curveTo:
531-
Util.applyTransformToBezier(buffer.subarray(k), transform);
531+
Util.applyTransformToBezierBuffer(buffer, k, transform);
532532
k += 6;
533533
break;
534534
}

src/shared/util.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -737,19 +737,25 @@ class Util {
737737
p[1] = p0 * m[1] + p1 * m[3] + m[5];
738738
}
739739

740-
// For 2d affine transforms
741-
static applyTransformToBezier(p, transform) {
740+
static applyTransformToBuffer(buffer, pos, m) {
741+
const p0 = buffer[pos];
742+
const p1 = buffer[pos + 1];
743+
buffer[pos] = p0 * m[0] + p1 * m[2] + m[4];
744+
buffer[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];
745+
}
746+
747+
static applyTransformToBezierBuffer(buffer, pos, transform) {
742748
const m0 = transform[0];
743749
const m1 = transform[1];
744750
const m2 = transform[2];
745751
const m3 = transform[3];
746752
const m4 = transform[4];
747753
const m5 = transform[5];
748754
for (let i = 0; i < 6; i += 2) {
749-
const pI = p[i];
750-
const pI1 = p[i + 1];
751-
p[i] = pI * m0 + pI1 * m2 + m4;
752-
p[i + 1] = pI * m1 + pI1 * m3 + m5;
755+
const pI = buffer[pos + i];
756+
const pI1 = buffer[pos + i + 1];
757+
buffer[pos + i] = pI * m0 + pI1 * m2 + m4;
758+
buffer[pos + i + 1] = pI * m1 + pI1 * m3 + m5;
753759
}
754760
}
755761

0 commit comments

Comments
 (0)