UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 2.18 kB
import*as Common from"../../../../core/common/common.js";import*as Host from"../../../../core/host/host.js";import*as SDK from"../../../../core/sdk/sdk.js";import{Memory}from"./LineLevelProfile.js";let liveHeapProfileInstance;export class LiveHeapProfile{running;sessionId;loadEventCallback;setting;constructor(){this.running=!1,this.sessionId=0,this.loadEventCallback=()=>{},this.setting=Common.Settings.Settings.instance().moduleSetting("memoryLiveHeapProfile"),this.setting.addChangeListener((e=>e.data?this.startProfiling():this.stopProfiling())),this.setting.get()&&this.startProfiling()}static instance(e={forceNew:null}){const{forceNew:t}=e;return liveHeapProfileInstance&&!t||(liveHeapProfileInstance=new LiveHeapProfile),liveHeapProfileInstance}async run(){}modelAdded(e){e.startSampling(1e4)}modelRemoved(e){}async startProfiling(){if(this.running)return;this.running=!0;const e=this.sessionId;SDK.TargetManager.TargetManager.instance().observeModels(SDK.HeapProfilerModel.HeapProfilerModel,this),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ResourceTreeModel.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this.loadEventFired,this);do{const t=SDK.TargetManager.TargetManager.instance().models(SDK.HeapProfilerModel.HeapProfilerModel),r=await Promise.all(t.map((e=>e.getSamplingProfile())));if(e!==this.sessionId)break;Memory.instance().reset();for(let e=0;e<r.length;++e){const o=r[e];o&&Memory.instance().appendHeapProfile(o,t[e].target())}await Promise.race([new Promise((e=>window.setTimeout(e,Host.InspectorFrontendHost.isUnderTest()?10:5e3))),new Promise((e=>{this.loadEventCallback=e}))])}while(e===this.sessionId);SDK.TargetManager.TargetManager.instance().unobserveModels(SDK.HeapProfilerModel.HeapProfilerModel,this),SDK.TargetManager.TargetManager.instance().removeModelListener(SDK.ResourceTreeModel.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this.loadEventFired,this);for(const e of SDK.TargetManager.TargetManager.instance().models(SDK.HeapProfilerModel.HeapProfilerModel))e.stopSampling();Memory.instance().reset()}stopProfiling(){this.running&&(this.running=!1,this.sessionId++)}loadEventFired(){this.loadEventCallback()}}