Skip to content

Commit 6f97148

Browse files
committed
fixed review comments and made the code way easier
Signed-off-by: René <[email protected]>
1 parent 1820384 commit 6f97148

File tree

5 files changed

+28
-49
lines changed

5 files changed

+28
-49
lines changed

packages/playwright-core/src/client/tracing.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import type * as api from '../../types/types';
1818
import type * as channels from '@protocol/channels';
1919
import { Artifact } from './artifact';
2020
import { ChannelOwner } from './channelOwner';
21-
import { captureRawStack, filteredStackTrace } from '../utils';
2221

2322
export class Tracing extends ChannelOwner<channels.TracingChannel> implements api.Tracing {
2423
private _includeSources = false;
@@ -53,10 +52,6 @@ export class Tracing extends ChannelOwner<channels.TracingChannel> implements ap
5352
}
5453

5554
async group(name: string, options: { location?: { file: string, line?: number, column?: number } } = {}) {
56-
if (!options.location) {
57-
const filteredStack = filteredStackTrace(captureRawStack());
58-
options.location = filteredStack[0];
59-
}
6055
await this._channel.tracingGroup({ name, options });
6156
}
6257

packages/playwright-core/src/server/dispatchers/tracingDispatcher.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
import type * as channels from '@protocol/channels';
18+
import type { CallMetadata } from '@protocol/callMetadata';
1819
import type { Tracing } from '../trace/recorder/tracing';
1920
import { ArtifactDispatcher } from './artifactDispatcher';
2021
import { Dispatcher, existingDispatcher } from './dispatcher';
@@ -41,9 +42,9 @@ export class TracingDispatcher extends Dispatcher<Tracing, channels.TracingChann
4142
return await this._object.startChunk(params);
4243
}
4344

44-
async tracingGroup(params: channels.TracingTracingGroupParams): Promise<channels.TracingTracingGroupResult> {
45+
async tracingGroup(params: channels.TracingTracingGroupParams, metadata: CallMetadata): Promise<channels.TracingTracingGroupResult> {
4546
const { name, options } = params;
46-
await this._object.group(name, options);
47+
await this._object.group(name, options, metadata);
4748
}
4849

4950
async tracingGroupEnd(params: channels.TracingTracingGroupEndParams): Promise<channels.TracingTracingGroupEndResult> {

packages/playwright-core/src/server/trace/recorder/tracing.ts

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ type RecordingState = {
6262
recording: boolean;
6363
callIds: Set<string>;
6464
groupStack: string[];
65-
groupId: number;
6665
};
6766

6867
const kScreencastOptions = { width: 800, height: 600, quality: 90 };
@@ -151,7 +150,6 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps
151150
recording: false,
152151
callIds: new Set(),
153152
groupStack: [],
154-
groupId: 0,
155153
};
156154
this._fs.mkdir(this._state.resourcesDir);
157155
this._fs.writeFile(this._state.networkFile, '');
@@ -198,23 +196,27 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps
198196
return { traceName: this._state.traceName };
199197
}
200198

201-
async group(name: string, options: { location?: { file: string, line?: number, column?: number } } = {}): Promise<void> {
199+
async group(name: string, options: { location?: { file: string, line?: number, column?: number } } = {}, metadata: CallMetadata): Promise<void> {
202200
if (!this._state)
203201
return;
204-
const stackFrame: StackFrame = {
205-
file: options.location?.file || '',
206-
line: options.location?.line || 0,
207-
column: options.location?.column || 0,
208-
};
202+
const stackFrames: StackFrame[] = [];
203+
const { file, line, column } = options.location ?? metadata.location ?? {};
204+
if (file) {
205+
stackFrames.push({
206+
file,
207+
line: line ?? 0,
208+
column: column ?? 0,
209+
});
210+
}
209211
const event: trace.BeforeActionTraceEvent = {
210212
type: 'before',
211-
callId: `group-${this._state.groupId++}`,
212-
startTime: monotonicTime(),
213+
callId: metadata.id,
214+
startTime: metadata.startTime,
213215
apiName: name,
214216
class: 'Tracing',
215217
method: 'group',
216218
params: { },
217-
stack: [stackFrame],
219+
stack: stackFrames,
218220
};
219221
if (this._state.groupStack.length)
220222
event.parentId = this._state.groupStack[this._state.groupStack.length - 1];
@@ -403,22 +405,19 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps
403405

404406
onBeforeCall(sdkObject: SdkObject, metadata: CallMetadata) {
405407
// IMPORTANT: no awaits before this._appendTraceEvent in this method.
406-
const event = createBeforeActionTraceEvent(metadata);
408+
const event = createBeforeActionTraceEvent(
409+
metadata,
410+
this._state?.groupStack.length ? this._state.groupStack[this._state.groupStack.length - 1] : undefined
411+
);
407412
if (!event)
408413
return Promise.resolve();
409-
this._applyOpenGroup(event);
410414
sdkObject.attribution.page?.temporarilyDisableTracingScreencastThrottling();
411415
event.beforeSnapshot = `before@${metadata.id}`;
412416
this._state?.callIds.add(metadata.id);
413417
this._appendTraceEvent(event);
414418
return this._captureSnapshot(event.beforeSnapshot, sdkObject, metadata);
415419
}
416420

417-
private _applyOpenGroup(event: trace.BeforeActionTraceEvent) {
418-
if (event.parentId === undefined && this._state?.groupStack.length)
419-
event.parentId = this._state?.groupStack[this._state.groupStack.length - 1];
420-
}
421-
422421
onBeforeInputAction(sdkObject: SdkObject, metadata: CallMetadata) {
423422
if (!this._state?.callIds.has(metadata.id))
424423
return Promise.resolve();
@@ -626,10 +625,10 @@ export function shouldCaptureSnapshot(metadata: CallMetadata): boolean {
626625
return commandsWithTracingSnapshots.has(metadata.type + '.' + metadata.method);
627626
}
628627

629-
function createBeforeActionTraceEvent(metadata: CallMetadata): trace.BeforeActionTraceEvent | null {
628+
function createBeforeActionTraceEvent(metadata: CallMetadata, parentId?: string): trace.BeforeActionTraceEvent | null {
630629
if (metadata.internal || metadata.method.startsWith('tracing'))
631630
return null;
632-
return {
631+
const event: trace.BeforeActionTraceEvent = {
633632
type: 'before',
634633
callId: metadata.id,
635634
startTime: metadata.startTime,
@@ -640,6 +639,9 @@ function createBeforeActionTraceEvent(metadata: CallMetadata): trace.BeforeActio
640639
stepId: metadata.stepId,
641640
pageId: metadata.pageId,
642641
};
642+
if (parentId)
643+
event.parentId = parentId;
644+
return event;
643645
}
644646

645647
function createInputActionTraceEvent(metadata: CallMetadata): trace.InputActionTraceEvent | null {

packages/playwright-core/src/utils/stackTrace.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,25 +47,6 @@ export function captureRawStack(): RawStack {
4747
return stack.split('\n');
4848
}
4949

50-
export function filterStackFile(file: string) {
51-
if (!process.env.PWDEBUGIMPL && file.startsWith(CORE_DIR))
52-
return false;
53-
return true;
54-
}
55-
56-
export function filteredStackTrace(rawStack: RawStack): StackFrame[] {
57-
const frames: StackFrame[] = [];
58-
for (const line of rawStack) {
59-
const frame = parseStackTraceLine(line);
60-
if (!frame || !frame.file)
61-
continue;
62-
if (!filterStackFile(frame.file))
63-
continue;
64-
frames.push(frame);
65-
}
66-
return frames;
67-
}
68-
6950
export function captureLibraryStackTrace(): { frames: StackFrame[], apiName: string } {
7051
const stack = captureRawStack();
7152

packages/playwright-core/types/types.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20996,8 +20996,8 @@ export interface Touchscreen {
2099620996
*/
2099720997
export interface Tracing {
2099820998
/**
20999-
* Creates a new inline group in the trace log, causing any subsequent calls to be indented by an additional level,
21000-
* until [tracing.groupEnd()](https://playwright.dev/docs/api/class-tracing#tracing-group-end) is called.
20999+
* Creates a new inline group in the trace, causing any subsequent calls to belong to this group, until
21000+
* [tracing.groupEnd()](https://playwright.dev/docs/api/class-tracing#tracing-group-end) is called.
2100121001
* @param name Group name shown in the trace viewer.
2100221002
* @param options
2100321003
*/
@@ -21021,7 +21021,7 @@ export interface Tracing {
2102121021
}): Promise<void>;
2102221022

2102321023
/**
21024-
* Closes the last opened inline group in the trace log.
21024+
* Closes the last opened inline group in the trace.
2102521025
*/
2102621026
groupEnd(): Promise<void>;
2102721027

0 commit comments

Comments
 (0)