diff --git a/src/common/Tracing.ts b/src/common/Tracing.ts index cc0a13c2952..9a907999155 100644 --- a/src/common/Tracing.ts +++ b/src/common/Tracing.ts @@ -87,11 +87,19 @@ export class Tracing { if (screenshots) categories.push('disabled-by-default-devtools.screenshot'); + const excludedCategories = categories + .filter((cat) => cat.startsWith('-')) + .map((cat) => cat.slice(1)); + const includedCategories = categories.filter((cat) => !cat.startsWith('-')); + this._path = path; this._recording = true; await this._client.send('Tracing.start', { transferMode: 'ReturnAsStream', - categories: categories.join(','), + traceConfig: { + excludedCategories, + includedCategories, + }, }); } diff --git a/test/tracing.spec.ts b/test/tracing.spec.ts index 5e06f12b4c9..80de87f3bfa 100644 --- a/test/tracing.spec.ts +++ b/test/tracing.spec.ts @@ -56,15 +56,38 @@ describeChromeOnly('Tracing', function () { it('should run with custom categories if provided', async () => { await page.tracing.start({ path: outputFile, - categories: ['disabled-by-default-v8.cpu_profiler.hires'], + categories: ['-*', 'disabled-by-default-v8.cpu_profiler.hires'], }); await page.tracing.stop(); const traceJson = JSON.parse( fs.readFileSync(outputFile, { encoding: 'utf8' }) ); - expect(traceJson.metadata['trace-config']).toContain( - 'disabled-by-default-v8.cpu_profiler.hires' + const traceConfig = JSON.parse(traceJson.metadata['trace-config']); + expect(traceConfig.included_categories).toEqual([ + 'disabled-by-default-v8.cpu_profiler.hires', + ]); + expect(traceConfig.excluded_categories).toEqual(['*']); + expect(traceJson.traceEvents).not.toContainEqual( + expect.objectContaining({ + cat: 'toplevel', + }) + ); + }); + + it('should run with default categories', async () => { + await page.tracing.start({ + path: outputFile, + }); + await page.tracing.stop(); + + const traceJson = JSON.parse( + fs.readFileSync(outputFile, { encoding: 'utf8' }) + ); + expect(traceJson.traceEvents).toContainEqual( + expect.objectContaining({ + cat: 'toplevel', + }) ); }); it('should throw if tracing on two pages', async () => {