[WIP] Add WebSocket connection and activities in the Performance tool [devtools/devtools-frontend : main]

0 views
Skip to first unread message

Christy Chen (Gerrit)

unread,
Jun 6, 2024, 4:29:37 PMJun 6
to Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen

Message from Christy Chen

Set Ready For Review

Open in Gerrit

Related details

Attention is currently required from:
  • Christy Chen
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 22
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Christy Chen <chr...@microsoft.com>
Gerrit-Comment-Date: Thu, 06 Jun 2024 20:29:33 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 6, 2024, 9:24:32 PMJun 6
to Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Paul Irish and Robert Paveza

Christy Chen voted and added 1 comment

Votes added by Christy Chen

Commit-Queue+1

1 comment

Patchset-level comments
File-level comment, Patchset 22 (Latest):
Christy Chen . resolved

Adding websocket connection to Network track, appreciate if you can have a look. Thank you!

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 22
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Fri, 07 Jun 2024 01:24:29 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
unsatisfied_requirement
open
diffy

Paul Irish (Gerrit)

unread,
Jun 6, 2024, 11:19:33 PMJun 6
to Christy Chen, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen and Robert Paveza

Paul Irish added 1 comment

Patchset-level comments
Paul Irish . resolved

Just tried it out using https://territorial.io/
Really like the UI. This is great.

I'll take a deeper look tomorrow. :)

Open in Gerrit

Related details

Attention is currently required from:
  • Christy Chen
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 22
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Christy Chen <chr...@microsoft.com>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Comment-Date: Fri, 07 Jun 2024 03:19:30 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 11, 2024, 12:27:26 PMJun 11
to Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Paul Irish and Robert Paveza

Christy Chen added 1 comment

Patchset-level comments
Paul Irish . resolved

Just tried it out using https://territorial.io/
Really like the UI. This is great.

I'll take a deeper look tomorrow. :)

Christy Chen

Hey Paul, do get a chance to take a look? Thank you!

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 23
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Tue, 11 Jun 2024 16:27:22 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Paul Irish <paul...@chromium.org>
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 13, 2024, 4:34:22 PMJun 13
to Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Changhao Han, Paul Irish and Robert Paveza

Christy Chen added 1 comment

Patchset-level comments
File-level comment, Patchset 23 (Latest):
Christy Chen . resolved

Hey Changhao, would you be able to take a look, or route it to an appropriate reviewer? Thank you!

Open in Gerrit

Related details

Attention is currently required from:
  • Changhao Han
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 23
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Changhao Han <chang...@chromium.org>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Changhao Han <chang...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Thu, 13 Jun 2024 20:34:16 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Changhao Han (Gerrit)

unread,
Jun 13, 2024, 5:05:30 PMJun 13
to Christy Chen, Jack Franklin, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen, Jack Franklin, Paul Irish and Robert Paveza

Changhao Han added 1 comment

Patchset-level comments
Changhao Han . resolved

Hi Christy, I think Jack would be the expert here to look at this, along with Paul.

Open in Gerrit

Related details

Attention is currently required from:
  • Christy Chen
  • Jack Franklin
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 23
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Jack Franklin <jacktf...@chromium.org>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Christy Chen <chr...@microsoft.com>
Gerrit-Attention: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Thu, 13 Jun 2024 21:05:20 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Paul Irish (Gerrit)

unread,
Jun 13, 2024, 10:14:45 PMJun 13
to Christy Chen, Jack Franklin, Changhao Han, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen, Jack Franklin and Robert Paveza

Paul Irish added 7 comments

Patchset-level comments
Paul Irish . unresolved

First up, I realize I basically handed you an impossible task.
"Let's have the instant events be part of a larger websocket event!"
As if that's trivial. :p Anyhow, you're right that we've never done that before.

Creating a synthetic event for the overall websocket is perfect. Nailed that. :D

I think there may be another direction to get the websocket events drawn on top of the synthetic one. Slightly less invasive.
I did a quick spike to explore the idea and curious for your thoughts. This a diff on top of your CL: https://gist.github.com/paulirish/9542af86037e08ec513e684be11f34b1

I am hoping you can tell me if this direction makes the forceDrawableLevel() method moot. I'm still unsure of what behavior that check is fixing.

I'll add that a bunch of your (and my) edits to TimelineFlameChartNetworkDataProvider.ts are because the real websocket trace events don't have args like SynNetworkRequest. We could create Syn events for each of those websocket events that do have a mimetype/url/priority/etc... But.. I agree with your impl that it feels kinda unnecessary. I could go either way, though.

Regardless, you had a tough task here, as the infrastructure is not built well to suit this use case. Appreciate you giving it an honest go. :)

File front_end/models/trace/handlers/WebSocketsHandler.ts
Line 37, Patchset 23 (Latest): if (Types.TraceEvents.isTraceEventWebSocketCreate(event) || Types.TraceEvents.isTraceEventWebSocketInfo(event) ||
Paul Irish . unresolved

let's move this implementation into NetworkRequestHandler.

Conceptually it sorta belongs. (no strong feelings.)

But, more importantly, the main thing I noticed... Right now when we do the `this.#events.push` in networkdataprovider... the events end up unsorted. And appendEventsAtLevel needs sorted. Otherwise the level placement is incorrect and inefficient.. something i noticed with a trace.
The existing `traceEngineData.NetworkRequests.byTime` already takes care of the sort. So.. moving into there would address that bug. :)

Line 72, Patchset 23 (Latest): ph: mainEvent.ph,
Paul Irish . unresolved

use Phase.COMPLETE, as this synth event has duration.

File front_end/panels/timeline/NetworkTrackAppender.ts
Line 22, Patchset 23 (Latest): wsConnectionOpened: 'WebSocket connection opened',
Paul Irish . unresolved

is the word `connection` needed on these strings? I don't care strongly but i'm happy to reduce words if possible :)

File front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts
Line 335, Patchset 23 (Latest): context.strokeStyle = '#ccc';
Paul Irish . unresolved

Probably want something with `ThemeSupport.ThemeSupport.instance().getComputedValue` so that it changes in dark mode.

Line 338, Patchset 23 (Latest): context.moveTo(start, lineY);
context.setLineDash([6, 4]);
context.lineTo(end, lineY);
Paul Irish . unresolved

how about

```suggestion
context.setLineDash([3, 2]);
context.moveTo(start, lineY - 1);
context.lineTo(end, lineY - 1);
context.moveTo(start, lineY + 1);
context.lineTo(end, lineY + 1);
```

going double gives me more of a 'socket' feeling. and i think it needs the tighter spacing to help allow the tiny instant events to stand out.

Line 374, Patchset 23 (Latest): Protocol.Network.ResourcePriority.Low :
event.args.data.priority;
Paul Irish . unresolved

might as well set the args.data.priority to low in the synthetic event. can then avoid this special case.

Open in Gerrit

Related details

Attention is currently required from:
  • Christy Chen
  • Jack Franklin
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 23
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Jack Franklin <jacktf...@chromium.org>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Christy Chen <chr...@microsoft.com>
Gerrit-Attention: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 02:14:42 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Paul Irish (Gerrit)

unread,
Jun 14, 2024, 7:11:03 PMJun 14
to Christy Chen, Jack Franklin, Changhao Han, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen, Jack Franklin and Robert Paveza

Paul Irish added 1 comment

Patchset-level comments
Paul Irish . unresolved

First up, I realize I basically handed you an impossible task.
"Let's have the instant events be part of a larger websocket event!"
As if that's trivial. :p Anyhow, you're right that we've never done that before.

Creating a synthetic event for the overall websocket is perfect. Nailed that. :D

I think there may be another direction to get the websocket events drawn on top of the synthetic one. Slightly less invasive.
I did a quick spike to explore the idea and curious for your thoughts. This a diff on top of your CL: https://gist.github.com/paulirish/9542af86037e08ec513e684be11f34b1

I am hoping you can tell me if this direction makes the forceDrawableLevel() method moot. I'm still unsure of what behavior that check is fixing.

I'll add that a bunch of your (and my) edits to TimelineFlameChartNetworkDataProvider.ts are because the real websocket trace events don't have args like SynNetworkRequest. We could create Syn events for each of those websocket events that do have a mimetype/url/priority/etc... But.. I agree with your impl that it feels kinda unnecessary. I could go either way, though.

Regardless, you had a tough task here, as the infrastructure is not built well to suit this use case. Appreciate you giving it an honest go. :)

Paul Irish
 Slightly less invasive.
I did a quick spike to explore the idea and curious for your thoughts.

In retrospect, I think much of the improvement in my attempt is worthwhile effects of merging WebsocketsHandler into NetworkRequestshandler.

So, feel free to gently ignore the details of that patch if it's annoying :)

Gerrit-Comment-Date: Fri, 14 Jun 2024 23:10:58 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Paul Irish <paul...@chromium.org>
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 14, 2024, 7:20:11 PMJun 14
to Jack Franklin, Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Jack Franklin, Paul Irish and Robert Paveza

Christy Chen added 1 comment

Patchset-level comments
Paul Irish . unresolved

First up, I realize I basically handed you an impossible task.
"Let's have the instant events be part of a larger websocket event!"
As if that's trivial. :p Anyhow, you're right that we've never done that before.

Creating a synthetic event for the overall websocket is perfect. Nailed that. :D

I think there may be another direction to get the websocket events drawn on top of the synthetic one. Slightly less invasive.
I did a quick spike to explore the idea and curious for your thoughts. This a diff on top of your CL: https://gist.github.com/paulirish/9542af86037e08ec513e684be11f34b1

I am hoping you can tell me if this direction makes the forceDrawableLevel() method moot. I'm still unsure of what behavior that check is fixing.

I'll add that a bunch of your (and my) edits to TimelineFlameChartNetworkDataProvider.ts are because the real websocket trace events don't have args like SynNetworkRequest. We could create Syn events for each of those websocket events that do have a mimetype/url/priority/etc... But.. I agree with your impl that it feels kinda unnecessary. I could go either way, though.

Regardless, you had a tough task here, as the infrastructure is not built well to suit this use case. Appreciate you giving it an honest go. :)

Christy Chen

Thank you so much for the inputs!
I like the direction you are going in the refactor diff, though I was having a hard time making that work today... Typescript just wasnt happy about what I was trying to do here 😂, I'll spend more time on Monday.
I think your approach can remove the forceDrawableLevel() hack I put in, which was needed because the flamechart assumes there's no stacking of the events (which make sense :), so it wont draw the synth event when zoomed in without that check.

Anyways, I'll try and see if I can incorporate as much as your feedback and make the change less invasive.

Open in Gerrit

Related details

Attention is currently required from:
  • Jack Franklin
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 23
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Jack Franklin <jacktf...@chromium.org>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Fri, 14 Jun 2024 23:20:06 +0000
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 18, 2024, 8:15:16 PMJun 18
to Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Paul Irish and Robert Paveza

Christy Chen added 8 comments

Patchset-level comments
Paul Irish . unresolved

First up, I realize I basically handed you an impossible task.
"Let's have the instant events be part of a larger websocket event!"
As if that's trivial. :p Anyhow, you're right that we've never done that before.

Creating a synthetic event for the overall websocket is perfect. Nailed that. :D

I think there may be another direction to get the websocket events drawn on top of the synthetic one. Slightly less invasive.
I did a quick spike to explore the idea and curious for your thoughts. This a diff on top of your CL: https://gist.github.com/paulirish/9542af86037e08ec513e684be11f34b1

I am hoping you can tell me if this direction makes the forceDrawableLevel() method moot. I'm still unsure of what behavior that check is fixing.

I'll add that a bunch of your (and my) edits to TimelineFlameChartNetworkDataProvider.ts are because the real websocket trace events don't have args like SynNetworkRequest. We could create Syn events for each of those websocket events that do have a mimetype/url/priority/etc... But.. I agree with your impl that it feels kinda unnecessary. I could go either way, though.

Regardless, you had a tough task here, as the infrastructure is not built well to suit this use case. Appreciate you giving it an honest go. :)

Christy Chen

Thank you so much for the inputs!
I like the direction you are going in the refactor diff, though I was having a hard time making that work today... Typescript just wasnt happy about what I was trying to do here 😂, I'll spend more time on Monday.
I think your approach can remove the forceDrawableLevel() hack I put in, which was needed because the flamechart assumes there's no stacking of the events (which make sense :), so it wont draw the synth event when zoomed in without that check.

Anyways, I'll try and see if I can incorporate as much as your feedback and make the change less invasive.

Christy Chen

I removed the websocket handler and just handle the events in Network request handler. I'm however having a hard time to merge all the events completely... need to do a lot of typing hack to make typescript happy because websocket events dont have necessary args most of the time :/
I pushed an update, which handles in the websocket event in network request handler but keep the websocket as a standalone event group. I'd love to hear your thoughts about this :)

File-level comment, Patchset 26 (Latest):
Christy Chen . resolved

pushed some updates, appreciate your feedback!

File front_end/models/trace/handlers/WebSocketsHandler.ts
Line 37, Patchset 23: if (Types.TraceEvents.isTraceEventWebSocketCreate(event) || Types.TraceEvents.isTraceEventWebSocketInfo(event) ||
Paul Irish . unresolved

let's move this implementation into NetworkRequestHandler.

Conceptually it sorta belongs. (no strong feelings.)

But, more importantly, the main thing I noticed... Right now when we do the `this.#events.push` in networkdataprovider... the events end up unsorted. And appendEventsAtLevel needs sorted. Otherwise the level placement is incorrect and inefficient.. something i noticed with a trace.
The existing `traceEngineData.NetworkRequests.byTime` already takes care of the sort. So.. moving into there would address that bug. :)

Christy Chen

Not sure if I understand the bug. Currently when we create this.#events in the networkDataProvider, we push the WebSocket events first, which will occupied the row, and then we push traceEngineData.NetworkRequests.byTime, so the regular network requests are still sorted and level calculation would still work. Let me know if Im missing something!

Line 72, Patchset 23: ph: mainEvent.ph,
Paul Irish . resolved

use Phase.COMPLETE, as this synth event has duration.

Christy Chen

Done

File front_end/panels/timeline/NetworkTrackAppender.ts
Line 22, Patchset 23: wsConnectionOpened: 'WebSocket connection opened',
Paul Irish . resolved

is the word `connection` needed on these strings? I don't care strongly but i'm happy to reduce words if possible :)

Christy Chen

Done

File front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts
Line 335, Patchset 23: context.strokeStyle = '#ccc';
Paul Irish . resolved

Probably want something with `ThemeSupport.ThemeSupport.instance().getComputedValue` so that it changes in dark mode.

Christy Chen

Got it. I picked something randomly. Open to suggestions.

Line 338, Patchset 23: context.moveTo(start, lineY);

context.setLineDash([6, 4]);
context.lineTo(end, lineY);
Paul Irish . resolved

how about

```suggestion
context.setLineDash([3, 2]);
context.moveTo(start, lineY - 1);
context.lineTo(end, lineY - 1);
context.moveTo(start, lineY + 1);
context.lineTo(end, lineY + 1);
```

going double gives me more of a 'socket' feeling. and i think it needs the tighter spacing to help allow the tiny instant events to stand out.

Christy Chen

Good suggestion, updated!

Line 374, Patchset 23: Protocol.Network.ResourcePriority.Low :
event.args.data.priority;
Paul Irish . resolved

might as well set the args.data.priority to low in the synthetic event. can then avoid this special case.

Christy Chen

Did that, but this is taking care of the non-synth events so still needed.

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 26
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Wed, 19 Jun 2024 00:15:12 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Christy Chen <chr...@microsoft.com>
Comment-In-Reply-To: Paul Irish <paul...@chromium.org>
unsatisfied_requirement
open
diffy

Jack Franklin (Gerrit)

unread,
Jun 21, 2024, 11:59:49 AM (12 days ago) Jun 21
to Christy Chen, Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen, Paul Irish and Robert Paveza

Jack Franklin added 6 comments

Patchset-level comments
File-level comment, Patchset 26 (Latest):
Jack Franklin . unresolved

hope you don't mind me jumping in - Paul asked me to take a look 😊

One other thought - we might have some parts of the codebase where we assume that if an event's type is not SyntheticNetworkRequest, then it is not on the network track. I think some of our recent work around overlays will be affected by this, and in particular the selected entry overlay in the performance panel. Can you make sure that this works OK and they are positioned accurately when you select a web socket event? This changed very recently (start of this week) so make sure you rebase.

If we define a type of `NetworkTrackEntry` which is the union of the synthetic network request and the websocket entry(s), that would avoid the duplication and long union types repeated in the network appender, and also mean we could land an `isNetworkTrackEntry()` method which would be handy.

File front_end/models/trace/types/TraceEvents.ts
Line 412, Patchset 26 (Latest):export type SyntheticCompleteEventType = SyntheticWebSocketConnectionEvent;
Jack Franklin . unresolved

why do we need this vs just exposing the interface which we already do?

File front_end/panels/timeline/NetworkTrackAppender.ts
Line 135, Patchset 26 (Latest): if (TraceEngine.Types.TraceEvents.isWebSocketTraceEvent(event) ||
TraceEngine.Types.TraceEvents.isSyntheticWebSocketConnectionEvent(event)) {
Jack Franklin . unresolved

this check is confusing me: the type def says the event is either `TraceEventData|SyntheticWebSocketConnectionEvent`, so why do we check for `isWebSocketTraceEvent` and `isSyntheticWebSocketConnectionEvent` ?

Line 184, Patchset 26 (Latest): events: (TraceEngine.Types.TraceEvents.SyntheticNetworkRequest|TraceEngine.Types.TraceEvents.WebSocketEvent)[],
Jack Franklin . unresolved

would probably define `type NetworkTrackEvent = this union` to avoid repeating this a bunch

File front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts
Line 253, Patchset 26 (Latest): return this.decorateSyntheticWebSocketConnectionEvent(
Jack Franklin . unresolved

nit: can this be a JS private method please? (same with `decorateNetworkRequest` too)

File front_end/ui/legacy/components/perf_ui/FlameChart.ts
Line 2283, Patchset 26 (Latest): if (entryOffsetRight <= this.chartViewport.windowLeftTime() &&
!(this.dataProvider.forceDrawableLevel && this.dataProvider.forceDrawableLevel(level))) {
Jack Franklin . unresolved

took me a minute to understand this conditional

how do you feel about:

```
const levelForcedDrawable = Boolean(this.dataProvider.forceDrawableLevel?.(level));
if(entryOffsetRight <= this.chartViewport.windowLeftTime && !levelForcedDrawable) {}
```

(or similar)

Open in Gerrit

Related details

Attention is currently required from:
  • Christy Chen
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 26
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-CC: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Christy Chen <chr...@microsoft.com>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Fri, 21 Jun 2024 15:59:44 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Jack Franklin (Gerrit)

unread,
Jun 21, 2024, 12:12:46 PM (12 days ago) Jun 21
to Christy Chen, Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Christy Chen, Paul Irish and Robert Paveza

Jack Franklin added 6 comments

Patchset-level comments
Jack Franklin . unresolved

We also need a test for NetworkRequestsHandler please that loads in a trace with a web socket and asserts that we parse out the expected events.

File front_end/models/trace/handlers/NetworkRequestsHandler.ts
Line 498, Patchset 26 (Latest): });
Jack Franklin . unresolved

I am finding this really hard to understand...

so we go through each web socket we found, and create a synthetic event, and shift it onto the beginning, so that each entry in `webSocketData` will look roughly like:

```
// other fields
events: [syntheticEvent, the rest of the events...]
```

is that correct?

again, a comment or two might be useful here to try to break this down.

or potentially a nicer structure would be either making the synthetic event contain all the others (but I can see why that might not be ideal), or having:

```
{
syntheticEvent: event,
childEvents: [events],
}
```

or similar

Line 511, Patchset 26 (Latest): webSocketTraceData: [...webSocketData.values()],
Jack Franklin . unresolved

just `webSockets` would be fine for the key here

Line 519, Patchset 26 (Latest):function createSyntheticWebSocketConnectionEvent(
Jack Franklin . unresolved

could we add some documentation (jsdoc is fine) to this file to explain how we use all the various web socket events?

from my understanding, it seems that the synthetic event represents the entire duration of the connection, and then you can use its identifier to find all the events that happened during its lifecycle. is that accurate?

Also, if we put into `args.data` the set of all "child" events, could we change the data we export from this handler into being:

```
sockets: SyntheticWebSocketConnection[]
```

and then have less complexity elsewhere? wdyt?

File front_end/panels/timeline/NetworkTrackAppender.ts
Line 209, Patchset 26 (Latest): if (this.webSocketIdToLevel.has(webSocketIdentifier)) {
level = this.webSocketIdToLevel.get(webSocketIdentifier) || 0;
} else {
level = getEventLevel(event, lastTimeByLevel);
this.webSocketIdToLevel.set(webSocketIdentifier, level);
}
Jack Franklin . unresolved

given that this method is about filtering an existing timeline, would we actually ever hit the `else` case here where we don't have a level set for a given web socket identifier?

File front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts
Line 370, Patchset 26 (Latest):
forceDrawableLevel(levelIndex: number): boolean {
return this.#networkTrackAppender?.webSocketIdToLevel.has(levelIndex) || false;
}
Jack Franklin . unresolved

sorry, probably a silly question for my understanding, why do we need this? if the socket is in the view, it will be drawn anyway? what scenario does this fix/avoid?

Gerrit-Comment-Date: Fri, 21 Jun 2024 16:12:40 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 25, 2024, 7:06:35 PM (7 days ago) Jun 25
to Jack Franklin, Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Jack Franklin, Paul Irish and Robert Paveza

Christy Chen added 12 comments

Patchset-level comments
Jack Franklin . unresolved

We also need a test for NetworkRequestsHandler please that loads in a trace with a web socket and asserts that we parse out the expected events.

Christy Chen

Will do that tomorrow!

Jack Franklin . unresolved

hope you don't mind me jumping in - Paul asked me to take a look 😊

One other thought - we might have some parts of the codebase where we assume that if an event's type is not SyntheticNetworkRequest, then it is not on the network track. I think some of our recent work around overlays will be affected by this, and in particular the selected entry overlay in the performance panel. Can you make sure that this works OK and they are positioned accurately when you select a web socket event? This changed very recently (start of this week) so make sure you rebase.

If we define a type of `NetworkTrackEntry` which is the union of the synthetic network request and the websocket entry(s), that would avoid the duplication and long union types repeated in the network appender, and also mean we could land an `isNetworkTrackEntry()` method which would be handy.

Christy Chen

Not at all! Thank you so much for reviewing 😊

I just rebased and so far I'm not seeing any issue, but could you provide more details about the scenarios that I should check related to the overlay? Any documentation or steps I need to follow?

File-level comment, Patchset 27 (Latest):
Christy Chen . resolved

Pushed an update. Will work on a few pending tasks tomorrow.

File front_end/models/trace/handlers/NetworkRequestsHandler.ts
Jack Franklin . unresolved

I am finding this really hard to understand...

so we go through each web socket we found, and create a synthetic event, and shift it onto the beginning, so that each entry in `webSocketData` will look roughly like:

```
// other fields
events: [syntheticEvent, the rest of the events...]
```

is that correct?

again, a comment or two might be useful here to try to break this down.

or potentially a nicer structure would be either making the synthetic event contain all the others (but I can see why that might not be ideal), or having:

```
{
syntheticEvent: event,
childEvents: [events],
}
```

or similar

Christy Chen

That was actually my initial implementation, but then I hit some issues because the flameChart assumes "flat events" and the nested events would need to be handled differently. But I will give this approach another try tomorrow.

Line 511, Patchset 26: webSocketTraceData: [...webSocketData.values()],
Jack Franklin . resolved

just `webSockets` would be fine for the key here

Christy Chen

Done

File front_end/models/trace/types/TraceEvents.ts
Line 412, Patchset 26:export type SyntheticCompleteEventType = SyntheticWebSocketConnectionEvent;
Jack Franklin . resolved

why do we need this vs just exposing the interface which we already do?

Christy Chen

You are right, this is extra. Removed

File front_end/panels/timeline/NetworkTrackAppender.ts
Line 135, Patchset 26: if (TraceEngine.Types.TraceEvents.isWebSocketTraceEvent(event) ||
TraceEngine.Types.TraceEvents.isSyntheticWebSocketConnectionEvent(event)) {
Jack Franklin . resolved

this check is confusing me: the type def says the event is either `TraceEventData|SyntheticWebSocketConnectionEvent`, so why do we check for `isWebSocketTraceEvent` and `isSyntheticWebSocketConnectionEvent` ?

Christy Chen

Ah, the type change in the param is not necessary. updated

Line 184, Patchset 26: events: (TraceEngine.Types.TraceEvents.SyntheticNetworkRequest|TraceEngine.Types.TraceEvents.WebSocketEvent)[],
Jack Franklin . resolved

would probably define `type NetworkTrackEvent = this union` to avoid repeating this a bunch

Christy Chen

Done

Line 209, Patchset 26: if (this.webSocketIdToLevel.has(webSocketIdentifier)) {

level = this.webSocketIdToLevel.get(webSocketIdentifier) || 0;
} else {
level = getEventLevel(event, lastTimeByLevel);
this.webSocketIdToLevel.set(webSocketIdentifier, level);
}
Jack Franklin . unresolved

given that this method is about filtering an existing timeline, would we actually ever hit the `else` case here where we don't have a level set for a given web socket identifier?

Christy Chen

We are recalculating all level of events when the filtering happens, so the map will also get reset and recalculate too.

File front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts
Line 253, Patchset 26: return this.decorateSyntheticWebSocketConnectionEvent(
Jack Franklin . resolved

nit: can this be a JS private method please? (same with `decorateNetworkRequest` too)

Christy Chen

Done


forceDrawableLevel(levelIndex: number): boolean {
return this.#networkTrackAppender?.webSocketIdToLevel.has(levelIndex) || false;
}
Jack Franklin . unresolved

sorry, probably a silly question for my understanding, why do we need this? if the socket is in the view, it will be drawn anyway? what scenario does this fix/avoid?

Christy Chen

In the FlameChart.ts, when filtering through the events for a level, it starts from the last event of that level and stops when it hit an event that has start time greater than the filtering window.

For example, in this websocket level we have A(socket event), B, C, D. If C event has start time greater than the window, the rest of the events (A and B) wont be drawn.
So if this level is the force Drawable level, we wont stop at event C and will include the socket event A.

I'll add some comments to explain this in the code :)

File front_end/ui/legacy/components/perf_ui/FlameChart.ts
Line 2283, Patchset 26: if (entryOffsetRight <= this.chartViewport.windowLeftTime() &&
!(this.dataProvider.forceDrawableLevel && this.dataProvider.forceDrawableLevel(level))) {
Jack Franklin . resolved

took me a minute to understand this conditional

how do you feel about:

```
const levelForcedDrawable = Boolean(this.dataProvider.forceDrawableLevel?.(level));
if(entryOffsetRight <= this.chartViewport.windowLeftTime && !levelForcedDrawable) {}
```

(or similar)

Christy Chen

Good call, done!

Open in Gerrit

Related details

Attention is currently required from:
  • Jack Franklin
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 27
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Jack Franklin <jacktf...@chromium.org>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Tue, 25 Jun 2024 23:06:31 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Jack Franklin <jacktf...@chromium.org>
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jun 26, 2024, 8:16:51 PM (6 days ago) Jun 26
to Jack Franklin, Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Jack Franklin, Paul Irish and Robert Paveza

Christy Chen added 5 comments

Patchset-level comments
File-level comment, Patchset 26:
Jack Franklin . resolved

We also need a test for NetworkRequestsHandler please that loads in a trace with a web socket and asserts that we parse out the expected events.

Christy Chen

Will do that tomorrow!

Christy Chen

Done

File-level comment, Patchset 26:
Jack Franklin . resolved

hope you don't mind me jumping in - Paul asked me to take a look 😊

One other thought - we might have some parts of the codebase where we assume that if an event's type is not SyntheticNetworkRequest, then it is not on the network track. I think some of our recent work around overlays will be affected by this, and in particular the selected entry overlay in the performance panel. Can you make sure that this works OK and they are positioned accurately when you select a web socket event? This changed very recently (start of this week) so make sure you rebase.

If we define a type of `NetworkTrackEntry` which is the union of the synthetic network request and the websocket entry(s), that would avoid the duplication and long union types repeated in the network appender, and also mean we could land an `isNetworkTrackEntry()` method which would be handy.

Christy Chen

Not at all! Thank you so much for reviewing 😊

I just rebased and so far I'm not seeing any issue, but could you provide more details about the scenarios that I should check related to the overlay? Any documentation or steps I need to follow?

Christy Chen

Oh interesting, yes there are some issues when selecting the events. Fixed now.

File-level comment, Patchset 31 (Latest):
Christy Chen . resolved

I have addressed most of the feedback! Appreciate if you can take a look again. Thank! 😊

File front_end/models/trace/handlers/NetworkRequestsHandler.ts
Jack Franklin . resolved

I am finding this really hard to understand...

so we go through each web socket we found, and create a synthetic event, and shift it onto the beginning, so that each entry in `webSocketData` will look roughly like:

```
// other fields
events: [syntheticEvent, the rest of the events...]
```

is that correct?

again, a comment or two might be useful here to try to break this down.

or potentially a nicer structure would be either making the synthetic event contain all the others (but I can see why that might not be ideal), or having:

```
{
syntheticEvent: event,
childEvents: [events],
}
```

or similar

Christy Chen

That was actually my initial implementation, but then I hit some issues because the flameChart assumes "flat events" and the nested events would need to be handled differently. But I will give this approach another try tomorrow.

Christy Chen

Updated, I think it's cleaner now.

Line 519, Patchset 26:function createSyntheticWebSocketConnectionEvent(
Jack Franklin . resolved

could we add some documentation (jsdoc is fine) to this file to explain how we use all the various web socket events?

from my understanding, it seems that the synthetic event represents the entire duration of the connection, and then you can use its identifier to find all the events that happened during its lifecycle. is that accurate?

Also, if we put into `args.data` the set of all "child" events, could we change the data we export from this handler into being:

```
sockets: SyntheticWebSocketConnection[]
```

and then have less complexity elsewhere? wdyt?

Christy Chen
Updated. it's now exporting WebSocketTraceData[] and each WebSocketTraceData has
{
events: the list of WebSocket events
syntheticConnectionEvent: the synthetic event representing the entire WebSocket connection
}
Open in Gerrit

Related details

Attention is currently required from:
  • Jack Franklin
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 31
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Jack Franklin <jacktf...@chromium.org>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Thu, 27 Jun 2024 00:16:48 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Christy Chen <chr...@microsoft.com>
Comment-In-Reply-To: Jack Franklin <jacktf...@chromium.org>
unsatisfied_requirement
open
diffy

Christy Chen (Gerrit)

unread,
Jul 2, 2024, 6:36:06 PM (11 hours ago) Jul 2
to Jack Franklin, Changhao Han, Paul Irish, Robert Paveza, Devtools-frontend LUCI CQ, devtools-rev...@chromium.org
Attention needed from Jack Franklin, Paul Irish and Robert Paveza

Christy Chen added 1 comment

Patchset-level comments
File-level comment, Patchset 32 (Latest):
Christy Chen . resolved

Friendly ping 😊 appreciate if you can have a look!

Open in Gerrit

Related details

Attention is currently required from:
  • Jack Franklin
  • Paul Irish
  • Robert Paveza
Submit Requirements:
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: devtools/devtools-frontend
Gerrit-Branch: main
Gerrit-Change-Id: Id44b87874dd676f01007151ff5d6f97dc7b5ba04
Gerrit-Change-Number: 5397393
Gerrit-PatchSet: 32
Gerrit-Owner: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Christy Chen <chr...@microsoft.com>
Gerrit-Reviewer: Jack Franklin <jacktf...@chromium.org>
Gerrit-Reviewer: Paul Irish <paul...@chromium.org>
Gerrit-Reviewer: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-CC: Changhao Han <chang...@chromium.org>
Gerrit-CC: Devtools-frontend LUCI CQ <devtools-fro...@luci-project-accounts.iam.gserviceaccount.com>
Gerrit-Attention: Jack Franklin <jacktf...@chromium.org>
Gerrit-Attention: Robert Paveza <Rob.P...@microsoft.com>
Gerrit-Attention: Paul Irish <paul...@chromium.org>
Gerrit-Comment-Date: Tue, 02 Jul 2024 22:36:02 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages