Skip to content

Commit

Permalink
fix: parse report.jsonl without creating large string (#28366)
Browse files Browse the repository at this point in the history
Reference #28362
  • Loading branch information
yury-s authored Nov 28, 2023
1 parent 022b363 commit 2e762fd
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions packages/playwright/src/reporters/merge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,19 +81,37 @@ const commonEvents = new Set(commonEventNames);
const commonEventRegex = new RegExp(`${commonEventNames.join('|')}`);

function parseCommonEvents(reportJsonl: Buffer): JsonEvent[] {
return reportJsonl.toString().split('\n')
return splitBufferLines(reportJsonl)
.map(line => line.toString('utf8'))
.filter(line => commonEventRegex.test(line)) // quick filter
.map(line => JSON.parse(line) as JsonEvent)
.filter(event => commonEvents.has(event.method));
}

function parseTestEvents(reportJsonl: Buffer): JsonEvent[] {
return reportJsonl.toString().split('\n')
return splitBufferLines(reportJsonl)
.map(line => line.toString('utf8'))
.filter(line => line.length)
.map(line => JSON.parse(line) as JsonEvent)
.filter(event => !commonEvents.has(event.method));
}

function splitBufferLines(buffer: Buffer) {
const lines = [];
let start = 0;
while (start < buffer.length) {
// 0x0A is the byte for '\n'
const end = buffer.indexOf(0x0A, start);
if (end === -1) {
lines.push(buffer.slice(start));
break;
}
lines.push(buffer.slice(start, end));
start = end + 1;
}
return lines;
}

async function extractAndParseReports(dir: string, shardFiles: string[], internalizer: JsonStringInternalizer, printStatus: StatusCallback) {
const shardEvents: { file: string, localPath: string, metadata: BlobReportMetadata, parsedEvents: JsonEvent[] }[] = [];
await fs.promises.mkdir(path.join(dir, 'resources'), { recursive: true });
Expand Down

0 comments on commit 2e762fd

Please sign in to comment.