Skip to content

Commit 91c3b73

Browse files
committed
Finalize frame processing by flushing any pending last frame.
This should be called after all trace events have been added. Add logging to TimelineFrameModel for improved debugging and traceability
1 parent 568ee13 commit 91c3b73

1 file changed

Lines changed: 37 additions & 2 deletions

File tree

devtools/timelineModel/timelineFrameModel.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Thread from '../tracingModel/thread'
88
import TracingModel, { Phase } from '../tracingModel'
99
import LayerPaintEvent from './timelineFrame/layerPaintEvent'
1010
import TimelineData from './timelineData'
11+
import Logger from '../../src/logger'
1112

1213
type categoryMapperFunc = (any: Event) => string
1314

@@ -51,6 +52,7 @@ export default class TimelineFrameModel {
5152
* @return {!Array<!TimelineModel.TimelineFrame>}
5253
*/
5354
public frames(startTime?: number, endTime?: number): TimelineFrame[] {
55+
Logger.debug('TimelineFrameModel', 'frames() called. Total frames available:', this._frames.length)
5456
if (!startTime && !endTime) {
5557
return this._frames
5658
}
@@ -212,12 +214,13 @@ export default class TimelineFrameModel {
212214
(frame.startTime !== this._frames[this._frames.length - 1].endTime ||
213215
frame.startTime > frame.endTime)
214216
) {
215-
console.assert(
216-
false,
217+
Logger.error(
218+
'TimelineFrameModel',
217219
`Inconsistent frame time for frame ${this._frames.length} (${frame.startTime} - ${frame.endTime})`
218220
)
219221
}
220222
this._frames.push(frame)
223+
Logger.debug('TimelineFrameModel', 'Frame added to array. Total frames:', this._frames.length, 'Duration:', frame.duration, 'ms')
221224
if (typeof frame.mainFrameId === 'number') {
222225
this._frameById[frame.mainFrameId] = frame
223226
}
@@ -236,6 +239,15 @@ export default class TimelineFrameModel {
236239
* @param {!Array<!{thread: !SDK.TracingModel.Thread, time: number}>} threadData
237240
*/
238241
public addTraceEvents(target: any, events: Event[], threadData: ThreadData[]): void {
242+
Logger.debug('TimelineFrameModel', 'addTraceEvents called with', events.length, 'events and', threadData.length, 'threads')
243+
244+
// Log a sample of event names to understand what we're working with
245+
const eventNameCounts: { [key: string]: number } = {}
246+
events.forEach(e => {
247+
eventNameCounts[e.name] = (eventNameCounts[e.name] || 0) + 1
248+
})
249+
Logger.debug('TimelineFrameModel', 'Event distribution:', JSON.stringify(eventNameCounts, null, 2))
250+
239251
this._target = target
240252
let j = 0
241253
this._currentProcessMainThread = (threadData.length && threadData[0].thread) || null
@@ -246,6 +258,21 @@ export default class TimelineFrameModel {
246258
this._addTraceEvent(events[i])
247259
}
248260
this._currentProcessMainThread = null
261+
Logger.debug('TimelineFrameModel', 'addTraceEvents complete. layerTreeId was:', this._layerTreeId, 'Total frames:', this._frames.length)
262+
}
263+
264+
/**
265+
* Finalize frame processing by flushing any pending last frame.
266+
* This should be called after all trace events have been added.
267+
* @param {number} endTime - The end time to use for the last frame
268+
*/
269+
public finalize(endTime: number): void {
270+
Logger.debug('TimelineFrameModel', 'Finalizing. _lastFrame exists:', !!this._lastFrame, 'endTime:', endTime)
271+
if (this._lastFrame) {
272+
this._flushFrame(this._lastFrame, endTime)
273+
this._lastFrame = null
274+
}
275+
Logger.debug('TimelineFrameModel', 'Finalization complete. Total frames:', this._frames.length)
249276
}
250277

251278
/**
@@ -259,6 +286,7 @@ export default class TimelineFrameModel {
259286

260287
if (event.name === eventNames.SetLayerTreeId) {
261288
this._layerTreeId = event.args['layerTreeId'] || event.args['data']['layerTreeId']
289+
Logger.debug('TimelineFrameModel', 'SetLayerTreeId detected:', this._layerTreeId, 'from event:', JSON.stringify(event.args))
262290
} else if (
263291
event.phase === Phase.SnapshotObject &&
264292
event.name === eventNames.LayerTreeHostImplSnapshot &&
@@ -284,14 +312,21 @@ export default class TimelineFrameModel {
284312
private _processCompositorEvents(event: Event): void {
285313
const eventNames = RecordType
286314

315+
// Log BeginFrame and DrawFrame events
316+
if (event.name === eventNames.BeginFrame || event.name === eventNames.DrawFrame) {
317+
Logger.debug('TimelineFrameModel', `${event.name} event - layerTreeId in event:`, event.args['layerTreeId'], 'expected:', this._layerTreeId, 'match:', event.args['layerTreeId'] === this._layerTreeId)
318+
}
319+
287320
if (event.args['layerTreeId'] !== this._layerTreeId) {
288321
return
289322
}
290323

291324
const timestamp = event.startTime
292325
if (event.name === eventNames.BeginFrame) {
326+
Logger.debug('TimelineFrameModel', '✓ Processing BeginFrame at', timestamp)
293327
this.handleBeginFrame(timestamp)
294328
} else if (event.name === eventNames.DrawFrame) {
329+
Logger.debug('TimelineFrameModel', '✓ Processing DrawFrame at', timestamp)
295330
this.handleDrawFrame(timestamp)
296331
} else if (event.name === eventNames.ActivateLayerTree) {
297332
this.handleActivateLayerTree()

0 commit comments

Comments
 (0)