@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 3.6 kB
JavaScript
import*as TraceEngine from"../../models/trace/trace.js";import*as i18n from"../../core/i18n/i18n.js";import{TimelineFlameChartMarker}from"./TimelineFlameChartView.js";import{buildGroupStyle,buildTrackHeader,getFormattedTime}from"./AppenderUtils.js";const UIStrings={timings:"Timings"},str_=i18n.i18n.registerUIStrings("panels/timeline/TimingsTrackAppender.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class TimingsTrackAppender{appenderName="Timings";#e;#t;#a;#r;constructor(e,t,a,r){this.#t=e,this.#e=r,this.#a=t,this.#r=a}appendTrackAtLevel(e,t){const a=this.#r.PageLoadMetrics.allMarkerEvents,r=this.#r.UserTimings.performanceMarks,i=this.#r.UserTimings.performanceMeasures,n=this.#r.UserTimings.timestampEvents,s=this.#r.UserTimings.consoleTimings;if(0===a.length&&0===r.length&&0===i.length&&0===n.length&&0===s.length)return e;this.#i(e,t);let c=this.#n(e);return c=this.#t.appendEventsAtLevel(r,c,this),c=this.#t.appendEventsAtLevel(i,c,this),c=this.#t.appendEventsAtLevel(n,c,this),this.#t.appendEventsAtLevel(s,c,this)}#i(e,t){const a=this.#r.UserTimings.performanceMeasures.length>0,r=buildGroupStyle({shareHeaderLine:!0,useFirstLineForOverview:!0,collapsible:a}),i=buildTrackHeader(e,i18nString(UIStrings.timings),r,!0,t);this.#t.registerTrackForGroup(i,this)}#n(e){const t=this.#r.PageLoadMetrics.allMarkerEvents;t.forEach((t=>{const a=this.#t.appendEventAtLevel(t,e,this);this.#a.entryTotalTimes[a]=Number.NaN}));const a=TraceEngine.Helpers.Timing.microSecondsToMilliseconds(this.#r.Meta.traceBounds.min),r=t.map((e=>{const t=TraceEngine.Helpers.Timing.microSecondsToMilliseconds(e.ts);return new TimelineFlameChartMarker(t,t-a,this.markerStyleForEvent(e))}));return this.#a.markers.push(...r),++e}markerStyleForEvent(e){let t="",a="grey";return TraceEngine.Types.TraceEvents.isTraceEventMarkDOMContent(e)&&(a="#0867CB",t="DCL"),TraceEngine.Types.TraceEvents.isTraceEventMarkLoad(e)&&(a="#B31412",t="L"),TraceEngine.Types.TraceEvents.isTraceEventFirstPaint(e)&&(a="#228847",t="FP"),TraceEngine.Types.TraceEvents.isTraceEventFirstContentfulPaint(e)&&(a="#1A6937",t="FCP"),TraceEngine.Types.TraceEvents.isTraceEventLargestContentfulPaintCandidate(e)&&(a="#1A3422",t="LCP"),TraceEngine.Types.TraceEvents.isTraceEventNavigationStart(e)&&(a="#FF9800",t=""),{title:t,dashStyle:[6,4],lineWidth:.5,color:a,tall:!0,lowPriority:!1}}colorForEvent(e){return TraceEngine.Handlers.ModelHandlers.PageLoadMetrics.eventIsPageLoadEvent(e)?this.markerStyleForEvent(e).color:this.#e.colorForID(e.name)}titleForEvent(e){if(TraceEngine.Handlers.ModelHandlers.PageLoadMetrics.eventIsPageLoadEvent(e))switch(e.name){case"MarkDOMContent":return"DCL";case"MarkLoad":return"L";case"firstContentfulPaint":return"FCP";case"firstPaint":return"FP";case"largestContentfulPaint::Candidate":return"LCP";case"navigationStart":return"";default:return e.name}return TraceEngine.Types.TraceEvents.isTraceEventTimeStamp(e)?`${e.name}: ${e.args.data.message}`:TraceEngine.Types.TraceEvents.isTraceEventPerformanceMark(e)?`[mark]: ${e.name}`:e.name}highlightedEntryInfo(e){const t=this.titleForEvent(e);if(TraceEngine.Handlers.ModelHandlers.PageLoadMetrics.isTraceEventMarkerEvent(e)||TraceEngine.Types.TraceEvents.isTraceEventPerformanceMark(e)||TraceEngine.Types.TraceEvents.isTraceEventTimeStamp(e)){const a=TraceEngine.Helpers.Timing.timeStampForEventAdjustedByClosestNavigation(e,this.#r.Meta.traceBounds,this.#r.Meta.navigationsByNavigationId,this.#r.Meta.navigationsByFrameId);return{title:t,formattedTime:getFormattedTime(a)}}return{title:t,formattedTime:getFormattedTime(e.dur)}}}