Skip to content

Commit 7573f64

Browse files
vanyaxkIvan Kohutavelad
committed
perf(transmuxer): various performance improvements (#6003)
This change improves loop performance - creating new arrays is not performant in large loops, and a traditional for loop is more performant than for .. of for large concatenations --------- Co-authored-by: Ivan Kohut <ivan.kohut@lamin.ar> Co-authored-by: Álvaro Velad Galván <ladvan91@hotmail.com>
1 parent ebd2043 commit 7573f64

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

lib/transmuxer/ts_transmuxer.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ shaka.transmuxer.TsTransmuxer = class {
705705
/** @type {?number} */
706706
let baseMediaDecodeTime = null;
707707

708-
let nalus = [];
708+
const nalus = [];
709709
const videoData = tsParser.getVideoData();
710710
if (!videoData.length) {
711711
throw new shaka.util.Error(
@@ -716,7 +716,7 @@ shaka.transmuxer.TsTransmuxer = class {
716716
for (let i = 0; i < videoData.length; i++) {
717717
const pes = videoData[i];
718718
const dataNalus = pes.nalus;
719-
nalus = nalus.concat(dataNalus);
719+
nalus.push(...dataNalus);
720720
const frame = H264.parseFrame(dataNalus);
721721
if (!frame) {
722722
continue;
@@ -797,7 +797,7 @@ shaka.transmuxer.TsTransmuxer = class {
797797
/** @type {?number} */
798798
let baseMediaDecodeTime = null;
799799

800-
let nalus = [];
800+
const nalus = [];
801801
const videoData = tsParser.getVideoData();
802802
if (!videoData.length) {
803803
throw new shaka.util.Error(
@@ -808,7 +808,7 @@ shaka.transmuxer.TsTransmuxer = class {
808808
for (let i = 0; i < videoData.length; i++) {
809809
const pes = videoData[i];
810810
const dataNalus = pes.nalus;
811-
nalus = nalus.concat(dataNalus);
811+
nalus.push(...dataNalus);
812812
const frame = H265.parseFrame(dataNalus);
813813
if (!frame) {
814814
continue;

lib/util/uint8array_utils.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,21 +107,26 @@ shaka.util.Uint8ArrayUtils = class {
107107
* @export
108108
*/
109109
static concat(...varArgs) {
110+
const BufferUtils = shaka.util.BufferUtils;
110111
let totalLength = 0;
111-
for (const arr of varArgs) {
112-
totalLength += arr.byteLength;
112+
for (let i = 0; i < varArgs.length; ++i) {
113+
const value = varArgs[i];
114+
totalLength += value.byteLength;
113115
}
114116

115117
const result = new Uint8Array(totalLength);
116118
let offset = 0;
117-
for (const arr of varArgs) {
118-
if (arr instanceof Uint8Array) {
119-
result.set(arr, offset);
119+
120+
for (let i = 0; i < varArgs.length; ++i) {
121+
const value = varArgs[i];
122+
if (value instanceof Uint8Array) {
123+
result.set(value, offset);
120124
} else {
121-
result.set(shaka.util.BufferUtils.toUint8(arr), offset);
125+
result.set(BufferUtils.toUint8(value), offset);
122126
}
123-
offset += arr.byteLength;
127+
offset += value.byteLength;
124128
}
129+
125130
return result;
126131
}
127132
};

0 commit comments

Comments
 (0)