UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 5.88 kB
import*as Platform from"../../../core/platform/platform.js";import*as Types from"../types/types.js";const rendererProcessesByFrameId=new Map;let mainFrameId="",mainFrameURL="";const framesByProcessId=new Map;let browserProcessId=Types.TraceEvents.ProcessID(-1),browserThreadId=Types.TraceEvents.ThreadID(-1),gpuProcessId=Types.TraceEvents.ProcessID(-1),gpuThreadId=Types.TraceEvents.ThreadID(-1),viewportRect=null;const topLevelRendererIds=new Set,traceBounds={min:Types.Timing.MicroSeconds(Number.POSITIVE_INFINITY),max:Types.Timing.MicroSeconds(Number.NEGATIVE_INFINITY),range:Types.Timing.MicroSeconds(Number.POSITIVE_INFINITY)},navigationsByFrameId=new Map,navigationsByNavigationId=new Map,mainFrameNavigations=[],threadsInProcess=new Map;let traceStartedTime=Types.Timing.MicroSeconds(-1);const eventPhasesOfInterestForTraceBounds=new Set(["B","E","X","I"]);let handlerState=1;export function reset(){navigationsByFrameId.clear(),navigationsByNavigationId.clear(),mainFrameNavigations.length=0,browserProcessId=Types.TraceEvents.ProcessID(-1),browserThreadId=Types.TraceEvents.ThreadID(-1),gpuProcessId=Types.TraceEvents.ProcessID(-1),gpuThreadId=Types.TraceEvents.ThreadID(-1),viewportRect=null,topLevelRendererIds.clear(),threadsInProcess.clear(),rendererProcessesByFrameId.clear(),framesByProcessId.clear(),traceBounds.min=Types.Timing.MicroSeconds(Number.POSITIVE_INFINITY),traceBounds.max=Types.Timing.MicroSeconds(Number.NEGATIVE_INFINITY),traceBounds.range=Types.Timing.MicroSeconds(Number.POSITIVE_INFINITY),traceStartedTime=Types.Timing.MicroSeconds(-1),handlerState=1}export function initialize(){if(1!==handlerState)throw new Error("Meta Handler was not reset");handlerState=2}function updateRendererProcessByFrame(e,r){Platform.MapUtilities.getWithDefault(framesByProcessId,r.processId,(()=>new Map)).set(r.frame,r);const a=Platform.MapUtilities.getWithDefault(rendererProcessesByFrameId,r.frame,(()=>new Map)),s=Platform.MapUtilities.getWithDefault(a,r.processId,(()=>[])),n=s.at(-1);n&&n.frame.url===r.url||s.push({frame:r,window:{min:e.ts,max:Types.Timing.MicroSeconds(0),range:Types.Timing.MicroSeconds(0)}})}export function handleEvent(e){if(2!==handlerState)throw new Error("Meta Handler is not initialized");if(0!==e.ts&&!e.name.endsWith("::UMA")&&eventPhasesOfInterestForTraceBounds.has(e.ph)){traceBounds.min=Types.Timing.MicroSeconds(Math.min(e.ts,traceBounds.min));const r=e.dur||Types.Timing.MicroSeconds(0);traceBounds.max=Types.Timing.MicroSeconds(Math.max(e.ts+r,traceBounds.max))}if(!Types.TraceEvents.isProcessName(e)||"Browser"!==e.args.name&&"HeadlessBrowser"!==e.args.name)if(!Types.TraceEvents.isProcessName(e)||"Gpu"!==e.args.name&&"GPU Process"!==e.args.name)if(Types.TraceEvents.isThreadName(e)&&"CrGpuMain"===e.args.name)gpuThreadId=e.tid;else{if(Types.TraceEvents.isThreadName(e)&&"CrBrowserMain"===e.args.name&&(browserThreadId=e.tid),Types.TraceEvents.isTraceEventMainFrameViewport(e)&&null===viewportRect){const r=e.args.data.viewport_rect,a=r[0],s=r[1],n=r[2],t=r[5];viewportRect=new DOMRect(a,s,n,t)}if(Types.TraceEvents.isTraceEventTracingStartedInBrowser(e)){if(traceStartedTime=e.ts,!e.args.data)throw new Error("No frames found in trace data");for(const r of e.args.data.frames??[])updateRendererProcessByFrame(e,r),r.parent||(mainFrameId=r.frame,mainFrameURL=r.url,topLevelRendererIds.add(r.processId))}else if(Types.TraceEvents.isTraceEventFrameCommittedInBrowser(e)){const r=e.args.data;if(!r)return;if(updateRendererProcessByFrame(e,r),r.parent)return;topLevelRendererIds.add(r.processId)}else if(Types.TraceEvents.isTraceEventCommitLoad(e)){const r=e.args.data;if(!r)return;const{frame:a,name:s,url:n}=r;updateRendererProcessByFrame(e,{processId:e.pid,frame:a,name:s,url:n})}else if(Types.TraceEvents.isThreadName(e)){Platform.MapUtilities.getWithDefault(threadsInProcess,e.pid,(()=>new Map)).set(e.tid,e)}else if(Types.TraceEvents.isTraceEventNavigationStartWithURL(e)&&e.args.data){const r=e.args.data.navigationId;if(navigationsByNavigationId.has(r))throw new Error("Found multiple navigation start events with the same navigation ID.");navigationsByNavigationId.set(r,e);const a=e.args.frame,s=navigationsByFrameId.get(a)||[];return s.push(e),navigationsByFrameId.set(a,s),void(a===mainFrameId&&mainFrameNavigations.push(e))}}else gpuProcessId=e.pid;else browserProcessId=e.pid}export async function finalize(){if(2!==handlerState)throw new Error("Handler is not initialized");traceBounds.min=traceStartedTime,traceBounds.range=Types.Timing.MicroSeconds(traceBounds.max-traceBounds.min);for(const[,e]of rendererProcessesByFrameId){const r=[...e.values()].flat();for(let e=0;e<r.length;e++){const a=r[e],s=r[e+1];s?(a.window.max=Types.Timing.MicroSeconds(s.window.min-1),a.window.range=Types.Timing.MicroSeconds(a.window.max-a.window.min)):(a.window.max=Types.Timing.MicroSeconds(traceBounds.max),a.window.range=Types.Timing.MicroSeconds(traceBounds.max-a.window.min))}}for(const[e,r]of navigationsByFrameId)if(!rendererProcessesByFrameId.has(e)){navigationsByFrameId.delete(e);for(const e of r)e.args.data&&navigationsByNavigationId.delete(e.args.data.navigationId)}handlerState=3}export function data(){if(3!==handlerState)throw new Error("Meta Handler is not finalized");return{traceBounds:{...traceBounds},browserProcessId:browserProcessId,browserThreadId:browserThreadId,gpuProcessId:gpuProcessId,gpuThreadId:gpuThreadId===Types.TraceEvents.ThreadID(-1)?void 0:gpuThreadId,viewportRect:viewportRect||void 0,mainFrameId:mainFrameId,mainFrameURL:mainFrameURL,navigationsByFrameId:new Map(navigationsByFrameId),navigationsByNavigationId:new Map(navigationsByNavigationId),threadsInProcess:new Map(threadsInProcess),rendererProcessesByFrame:new Map(rendererProcessesByFrameId),topLevelRendererIds:new Set(topLevelRendererIds),frameByProcessId:new Map(framesByProcessId),mainFrameNavigations:[...mainFrameNavigations]}}