UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 2.7 kB
import*as Helpers from"../helpers/helpers.js";import*as Types from"../types/types.js";const allEvents=[];export const LONG_INTERACTION_THRESHOLD=Helpers.Timing.millisecondsToMicroseconds(Types.Timing.MilliSeconds(200));let longestInteractionEvent=null;const interactionEvents=[],interactionEventsWithNoNesting=[],eventTimingEndEventsById=new Map,eventTimingStartEventsForInteractions=[];let handlerState=1;export function reset(){allEvents.length=0,interactionEvents.length=0,eventTimingStartEventsForInteractions.length=0,eventTimingEndEventsById.clear(),interactionEventsWithNoNesting.length=0,longestInteractionEvent=null,handlerState=2}export function handleEvent(t){if(2!==handlerState)throw new Error("Handler is not initialized");if(!Types.TraceEvents.isTraceEventEventTiming(t))return;if(Types.TraceEvents.isTraceEventEventTimingEnd(t)&&eventTimingEndEventsById.set(t.id,t),allEvents.push(t),!t.args.data||!Types.TraceEvents.isTraceEventEventTimingStart(t))return;const{duration:e,interactionId:n}=t.args.data;e<1||void 0===n||0===n||eventTimingStartEventsForInteractions.push(t)}const pointerEventTypes=new Set(["pointerdown","touchstart","pointerup","touchend","mousedown","mouseup","click"]),keyboardEventTypes=new Set(["keydown","keypress","keyup"]);export function categoryOfInteraction(t){return pointerEventTypes.has(t.type)?"POINTER":keyboardEventTypes.has(t.type)?"KEYBOARD":"OTHER"}export function removeNestedInteractions(t){const e={POINTER:new Map,KEYBOARD:new Map,OTHER:new Map};function n(t){const n=categoryOfInteraction(t),i=e[n],s=Types.Timing.MicroSeconds(t.ts+t.dur),r=i.get(s);r?t.ts<r.ts&&i.set(s,t):i.set(s,t)}for(const e of t)n(e);const i=Object.values(e).flatMap((t=>Array.from(t.values())));return i.sort(((t,e)=>t.ts-e.ts)),i}export async function finalize(){for(const t of eventTimingStartEventsForInteractions){const e=eventTimingEndEventsById.get(t.id);if(!e)continue;if(!t.args.data?.type||!t.args.data?.interactionId)continue;const n={cat:t.cat,name:t.name,pid:t.pid,tid:t.tid,ph:t.ph,args:{data:{beginEvent:t,endEvent:e}},ts:t.ts,dur:Types.Timing.MicroSeconds(e.ts-t.ts),type:t.args.data.type,interactionId:t.args.data.interactionId};(!longestInteractionEvent||longestInteractionEvent.dur<n.dur)&&(longestInteractionEvent=n),interactionEvents.push(n)}handlerState=3,interactionEventsWithNoNesting.push(...removeNestedInteractions(interactionEvents))}export function data(){return{allEvents:[...allEvents],interactionEvents:[...interactionEvents],interactionEventsWithNoNesting:[...interactionEventsWithNoNesting],longestInteractionEvent:longestInteractionEvent,interactionsOverThreshold:new Set(interactionEvents.filter((t=>t.dur>LONG_INTERACTION_THRESHOLD)))}}