@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 2.67 kB
JavaScript
import*as Platform from"../../../core/platform/platform.js";import*as Helpers from"../helpers/helpers.js";import*as Types from"../types/types.js";const syntheticEvents=[],performanceMeasureEvents=[],performanceMarkEvents=[],consoleTimings=[],timestampEvents=[];let handlerState=1;export function reset(){syntheticEvents.length=0,performanceMeasureEvents.length=0,performanceMarkEvents.length=0,consoleTimings.length=0,timestampEvents.length=0,handlerState=2}const resourceTimingNames=["workerStart","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd"],navTimingNames=["navigationStart","unloadEventStart","unloadEventEnd","redirectStart","redirectEnd","fetchStart","commitNavigationEnd","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd"];export function handleEvent(e){if(2!==handlerState)throw new Error("UserTimings handler is not initialized");[...resourceTimingNames,...navTimingNames].includes(e.name)||(Types.TraceEvents.isTraceEventPerformanceMeasure(e)?performanceMeasureEvents.push(e):(Types.TraceEvents.isTraceEventPerformanceMark(e)&&performanceMarkEvents.push(e),Types.TraceEvents.isTraceEventConsoleTime(e)&&consoleTimings.push(e),Types.TraceEvents.isTraceEventTimeStamp(e)&×tampEvents.push(e)))}export async function finalize(){if(2!==handlerState)throw new Error("UserTimings handler is not initialized");const e=new Map;for(const t of[...performanceMeasureEvents,...consoleTimings]){const n=Helpers.Trace.extractId(t);if(void 0===n)continue;const r=`${t.cat}:${n}:${t.name}`,s=Platform.MapUtilities.getWithDefault(e,r,(()=>({begin:null,end:null}))),a="b"===t.ph,o="e"===t.ph;a?s.begin=t:o&&(s.end=t)}for(const[t,n]of e.entries()){if(!n.begin||!n.end)continue;const e={cat:n.end.cat,ph:n.end.ph,pid:n.end.pid,tid:n.end.tid,id:t,name:n.begin.name,dur:Types.Timing.MicroSeconds(n.end.ts-n.begin.ts),ts:n.begin.ts,args:{data:{beginEvent:n.begin,endEvent:n.end}}};e.dur<0||syntheticEvents.push(e)}syntheticEvents.sort(((e,t)=>e.ts-t.ts)),handlerState=3}export function data(){if(3!==handlerState)throw new Error("UserTimings handler is not finalized");return{performanceMeasures:syntheticEvents.filter(Types.TraceEvents.isTraceEventPerformanceMeasure),consoleTimings:syntheticEvents.filter(Types.TraceEvents.isTraceEventConsoleTime),performanceMarks:[...performanceMarkEvents],timestampEvents:[...timestampEvents]}}