From 79796dda15c5633654bf85f9669144aa66e3227a Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 13 May 2024 16:30:07 -0700 Subject: [PATCH] monotonic time --- .../src/server/trace/recorder/tracing.ts | 2 +- packages/playwright/src/worker/testTracing.ts | 2 +- packages/trace-viewer/src/entries.ts | 5 ++--- packages/trace-viewer/src/traceModernizer.ts | 16 ++++++++++------ packages/trace/src/trace.ts | 2 +- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/playwright-core/src/server/trace/recorder/tracing.ts b/packages/playwright-core/src/server/trace/recorder/tracing.ts index 0c00b8b708..5f0bfb15df 100644 --- a/packages/playwright-core/src/server/trace/recorder/tracing.ts +++ b/packages/playwright-core/src/server/trace/recorder/tracing.ts @@ -105,7 +105,7 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps options: {}, platform: process.platform, wallTime: 0, - monotonicTimeOffset: 0, + monotonicTime: 0, sdkLanguage: context.attribution.playwright.options.sdkLanguage, testIdAttributeName }; diff --git a/packages/playwright/src/worker/testTracing.ts b/packages/playwright/src/worker/testTracing.ts index 7f4badf2cf..5462564c49 100644 --- a/packages/playwright/src/worker/testTracing.ts +++ b/packages/playwright/src/worker/testTracing.ts @@ -56,7 +56,7 @@ export class TestTracing { options: {}, platform: process.platform, wallTime: Date.now(), - monotonicTimeOffset: Date.now() - monotonicTime(), + monotonicTime: monotonicTime(), sdkLanguage: 'javascript', }; this._appendTraceEvent(this._contextCreatedEvent); diff --git a/packages/trace-viewer/src/entries.ts b/packages/trace-viewer/src/entries.ts index 2198b1d3fa..a53fd0314b 100644 --- a/packages/trace-viewer/src/entries.ts +++ b/packages/trace-viewer/src/entries.ts @@ -26,8 +26,7 @@ export type ContextEntry = { browserName: string; channel?: string; platform?: string; - wallTime?: number; - monotonicTimeOffset: number; + wallTime: number; sdkLanguage?: Language; testIdAttributeName?: string; title?: string; @@ -59,7 +58,7 @@ export function createEmptyContext(): ContextEntry { origin: 'testRunner', traceUrl: '', startTime: Number.MAX_SAFE_INTEGER, - monotonicTimeOffset: 0, + wallTime: Number.MAX_SAFE_INTEGER, endTime: 0, browserName: '', options: { diff --git a/packages/trace-viewer/src/traceModernizer.ts b/packages/trace-viewer/src/traceModernizer.ts index ea463e19e1..1ade445382 100644 --- a/packages/trace-viewer/src/traceModernizer.ts +++ b/packages/trace-viewer/src/traceModernizer.ts @@ -78,6 +78,7 @@ export class TraceModernizer { contextEntry.title = event.title; contextEntry.platform = event.platform; contextEntry.wallTime = event.wallTime; + contextEntry.startTime = event.monotonicTime; contextEntry.sdkLanguage = event.sdkLanguage; contextEntry.options = event.options; contextEntry.testIdAttributeName = event.testIdAttributeName; @@ -176,11 +177,13 @@ export class TraceModernizer { } private _modernize(event: any): trace.TraceEvent[] { - if (this._version === undefined) + // In trace 6->7 we also need to modernize context-options event. + let version = this._version || event.version; + if (version === undefined) return [event]; const lastVersion: trace.VERSION = 7; let events = [event]; - for (let version = this._version; version < lastVersion; ++version) + for (; version < lastVersion; ++version) events = (this as any)[`_modernize_${version}_to_${version + 1}`].call(this, events); return events; } @@ -375,18 +378,19 @@ export class TraceModernizer { options: {}, platform: process.platform, wallTime: 0, - monotonicTimeOffset: 0, + monotonicTime: 0, sdkLanguage: 'javascript', }; result.push(event); } for (const event of events) { if (event.type === 'context-options') { - result.push({ ...event, monotonicTimeOffset: 0, origin: 'library' }); + result.push({ ...event, monotonicTime: 0, origin: 'library' }); continue; } - if (!this._contextEntry.monotonicTimeOffset && event.type === 'before') - this._contextEntry.monotonicTimeOffset = event.wallTime - event.startTime; + // Take wall time from the first event. + if (!this._contextEntry.wallTime && event.type === 'before') + this._contextEntry.wallTime = event.wallTime; result.push(event); } return result; diff --git a/packages/trace/src/trace.ts b/packages/trace/src/trace.ts index 8ea5ad14e1..7387f612aa 100644 --- a/packages/trace/src/trace.ts +++ b/packages/trace/src/trace.ts @@ -38,7 +38,7 @@ export type ContextCreatedTraceEvent = { channel?: string, platform: string, wallTime: number, - monotonicTimeOffset: number, + monotonicTime: number, title?: string, options: BrowserContextEventOptions, sdkLanguage?: Language,