@@ -208,41 +208,50 @@ func (m *Monitor) handleBindingCalled(p cdpRuntimeBindingCalledParams, sessionID
208208 m .publishEvent (header .Type , events .CategoryInteraction , events.Source {Kind : events .KindCDP }, "Runtime.bindingCalled" , cs .navDataWith (payloadMap ), sessionID )
209209}
210210
211- // handleTimelineEvent processes PerformanceTimeline layout-shift events.
211+ // handleTimelineEvent processes PerformanceTimeline layout-shift and LCP events.
212212func (m * Monitor ) handleTimelineEvent (p cdpPerformanceTimelineEventAddedParams , sessionID string ) {
213- if p .Event .Type != timelineEventLayoutShift {
214- return
215- }
216- // source_frame_id is the frame where the shift occurred; distinct from nav
217- // context's frame_id (the top-level navigated frame).
218- ev := map [string ]any {
219- "source_frame_id" : p .Event .FrameID ,
220- "time" : p .Event .Time ,
221- "duration" : p .Event .Duration ,
222- }
223- var shift cdpLayoutShiftDetails
224- if p .Event .LayoutShiftDetails != nil && json .Unmarshal (p .Event .LayoutShiftDetails , & shift ) == nil {
225- ev ["layout_shift_details" ] = map [string ]any {
226- "score" : shift .Score ,
227- "had_recent_input" : shift .HadRecentInput ,
213+ switch p .Event .Type {
214+ case timelineEventLayoutShift :
215+ // source_frame_id is the frame where the shift occurred; distinct from nav
216+ // context's frame_id (the top-level navigated frame).
217+ ev := map [string ]any {
218+ "source_frame_id" : p .Event .FrameID ,
219+ "time" : p .Event .Time ,
220+ "duration" : p .Event .Duration ,
228221 }
229- }
230- var lcp cdpLcpDetails
231- if p .Event .LcpDetails != nil && json .Unmarshal (p .Event .LcpDetails , & lcp ) == nil {
232- ev ["lcp_details" ] = map [string ]any {
233- "render_time" : lcp .RenderTime ,
234- "load_time" : lcp .LoadTime ,
235- "size" : lcp .Size ,
236- "element_id" : lcp .ElementID ,
237- "url" : lcp .URL ,
238- "node_id" : lcp .NodeID ,
222+ var shift cdpLayoutShiftDetails
223+ if p .Event .LayoutShiftDetails != nil && json .Unmarshal (p .Event .LayoutShiftDetails , & shift ) == nil {
224+ ev ["layout_shift_details" ] = map [string ]any {
225+ "score" : shift .Score ,
226+ "had_recent_input" : shift .HadRecentInput ,
227+ }
239228 }
240- }
241- cs := m .computedFor (sessionID )
242- data := cs .navDataWith (ev )
243- m .publishEvent (EventLayoutShift , events .CategoryPage , events.Source {Kind : events .KindCDP }, "PerformanceTimeline.timelineEventAdded" , data , sessionID )
244- if cs != nil {
245- cs .onLayoutShift ()
229+ cs := m .computedFor (sessionID )
230+ data := cs .navDataWith (ev )
231+ m .publishEvent (EventLayoutShift , events .CategoryPage , events.Source {Kind : events .KindCDP }, "PerformanceTimeline.timelineEventAdded" , data , sessionID )
232+ if cs != nil {
233+ cs .onLayoutShift ()
234+ }
235+
236+ case timelineEventLCP :
237+ ev := map [string ]any {
238+ "source_frame_id" : p .Event .FrameID ,
239+ "time" : p .Event .Time ,
240+ }
241+ var lcp cdpLcpDetails
242+ if p .Event .LcpDetails != nil && json .Unmarshal (p .Event .LcpDetails , & lcp ) == nil {
243+ ev ["lcp_details" ] = map [string ]any {
244+ "render_time" : lcp .RenderTime ,
245+ "load_time" : lcp .LoadTime ,
246+ "size" : lcp .Size ,
247+ "element_id" : lcp .ElementID ,
248+ "url" : lcp .URL ,
249+ "node_id" : lcp .NodeID ,
250+ }
251+ }
252+ cs := m .computedFor (sessionID )
253+ data := cs .navDataWith (ev )
254+ m .publishEvent (EventLCP , events .CategoryPage , events.Source {Kind : events .KindCDP }, "PerformanceTimeline.timelineEventAdded" , data , sessionID )
246255 }
247256}
248257
0 commit comments