@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 6.61 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as SDK from"../../core/sdk/sdk.js";import*as UI from"../../ui/legacy/legacy.js";const UIStrings={javascriptVmInstances:"JavaScript VM instances",totalJsHeapSize:"Total JS heap size",totalPageJsHeapSizeChangeTrend:"Total page JS heap size change trend over the last {PH1} minutes.",totalPageJsHeapSizeAcrossAllVm:"Total page JS heap size across all VM instances.",changeRate:"{PH1}/s",increasingBySPerSecond:"increasing by {PH1} per second",decreasingBySPerSecond:"decreasing by {PH1} per second",heapSizeInUseByLiveJsObjects:"Heap size in use by live JS objects.",heapSizeChangeTrendOverTheLastS:"Heap size change trend over the last {PH1} minutes.",empty:"(empty)"},str_=i18n.i18n.registerUIStrings("panels/profiler/IsolateSelector.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class IsolateSelector extends UI.Widget.VBox{items;list;itemByIsolate;totalElement;totalValueDiv;totalTrendDiv;constructor(){super(!1),this.items=new UI.ListModel.ListModel,this.list=new UI.ListControl.ListControl(this.items,this,UI.ListControl.ListMode.NonViewport),this.list.element.classList.add("javascript-vm-instances-list"),UI.ARIAUtils.setLabel(this.list.element,i18nString(UIStrings.javascriptVmInstances)),this.contentElement.appendChild(this.list.element),this.itemByIsolate=new Map,this.totalElement=document.createElement("div"),this.totalElement.classList.add("profile-memory-usage-item"),this.totalElement.classList.add("hbox"),this.totalValueDiv=this.totalElement.createChild("div","profile-memory-usage-item-size"),this.totalTrendDiv=this.totalElement.createChild("div","profile-memory-usage-item-trend"),this.totalElement.createChild("div").textContent=i18nString(UIStrings.totalJsHeapSize);const e=Math.round(SDK.IsolateManager.MemoryTrendWindowMs/6e4);UI.Tooltip.Tooltip.install(this.totalTrendDiv,i18nString(UIStrings.totalPageJsHeapSizeChangeTrend,{PH1:e})),UI.Tooltip.Tooltip.install(this.totalValueDiv,i18nString(UIStrings.totalPageJsHeapSizeAcrossAllVm)),SDK.IsolateManager.IsolateManager.instance().observeIsolates(this),SDK.TargetManager.TargetManager.instance().addEventListener(SDK.TargetManager.Events.NameChanged,this.targetChanged,this),SDK.TargetManager.TargetManager.instance().addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this.targetChanged,this)}wasShown(){super.wasShown(),SDK.IsolateManager.IsolateManager.instance().addEventListener(SDK.IsolateManager.Events.MemoryChanged,this.heapStatsChanged,this)}willHide(){SDK.IsolateManager.IsolateManager.instance().removeEventListener(SDK.IsolateManager.Events.MemoryChanged,this.heapStatsChanged,this)}isolateAdded(e){this.list.element.tabIndex=0;const t=new ListItem(e),i=t.model().target()===SDK.TargetManager.TargetManager.instance().rootTarget()?0:this.items.length;this.items.insert(i,t),this.itemByIsolate.set(e,t),(1===this.items.length||e.isMainThread())&&this.list.selectItem(t),this.update()}isolateChanged(e){const t=this.itemByIsolate.get(e);t&&t.updateTitle(),this.update()}isolateRemoved(e){const t=this.itemByIsolate.get(e);t&&this.items.remove(this.items.indexOf(t)),this.itemByIsolate.delete(e),0===this.items.length&&(this.list.element.tabIndex=-1),this.update()}targetChanged(e){const t=e.data.model(SDK.RuntimeModel.RuntimeModel);if(!t)return;const i=SDK.IsolateManager.IsolateManager.instance().isolateByModel(t),s=i&&this.itemByIsolate.get(i);s&&s.updateTitle()}heapStatsChanged(e){const t=e.data,i=this.itemByIsolate.get(t);i&&i.updateStats(),this.updateTotal()}updateTotal(){let e=0,t=0;for(const i of SDK.IsolateManager.IsolateManager.instance().isolates())e+=i.usedHeapSize(),t+=i.usedHeapSizeGrowRate();this.totalValueDiv.textContent=Platform.NumberUtilities.bytesToString(e),IsolateSelector.formatTrendElement(t,this.totalTrendDiv)}static formatTrendElement(e,t){const i=1e3*e;if(Math.abs(i)<1e3)return;const s=Platform.NumberUtilities.bytesToString(Math.abs(i));let a,n;i>0?(a="⬆"+i18nString(UIStrings.changeRate,{PH1:s}),t.classList.toggle("increasing",!0),n=i18nString(UIStrings.increasingBySPerSecond,{PH1:s})):(a="⬇"+i18nString(UIStrings.changeRate,{PH1:s}),t.classList.toggle("increasing",!1),n=i18nString(UIStrings.decreasingBySPerSecond,{PH1:s})),t.textContent=a,UI.ARIAUtils.setLabel(t,n)}totalMemoryElement(){return this.totalElement}createElementForItem(e){return e.element}heightForItem(e){return console.assert(!1,"should not be called"),0}updateSelectedItemARIA(e,t){return!1}isItemSelectable(e){return!0}selectedItemChanged(e,t,i,s){i&&i.classList.remove("selected"),s&&s.classList.add("selected");const a=t&&t.model();UI.Context.Context.instance().setFlavor(SDK.HeapProfilerModel.HeapProfilerModel,a&&a.heapProfilerModel()),UI.Context.Context.instance().setFlavor(SDK.CPUProfilerModel.CPUProfilerModel,a&&a.target().model(SDK.CPUProfilerModel.CPUProfilerModel))}update(){this.updateTotal(),this.list.invalidateRange(0,this.items.length)}}export class ListItem{isolate;element;heapDiv;trendDiv;nameDiv;constructor(e){this.isolate=e;const t=Math.round(SDK.IsolateManager.MemoryTrendWindowMs/6e4);this.element=document.createElement("div"),this.element.classList.add("profile-memory-usage-item"),this.element.classList.add("hbox"),UI.ARIAUtils.markAsOption(this.element),this.heapDiv=this.element.createChild("div","profile-memory-usage-item-size"),UI.Tooltip.Tooltip.install(this.heapDiv,i18nString(UIStrings.heapSizeInUseByLiveJsObjects)),this.trendDiv=this.element.createChild("div","profile-memory-usage-item-trend"),UI.Tooltip.Tooltip.install(this.trendDiv,i18nString(UIStrings.heapSizeChangeTrendOverTheLastS,{PH1:t})),this.nameDiv=this.element.createChild("div","profile-memory-usage-item-name"),this.updateTitle()}model(){return this.isolate.runtimeModel()}updateStats(){this.heapDiv.textContent=Platform.NumberUtilities.bytesToString(this.isolate.usedHeapSize()),IsolateSelector.formatTrendElement(this.isolate.usedHeapSizeGrowRate(),this.trendDiv)}updateTitle(){const e=new Map;for(const t of this.isolate.models()){const i=t.target(),s=SDK.TargetManager.TargetManager.instance().rootTarget()!==i?i.name():"",a=new Common.ParsedURL.ParsedURL(i.inspectedURL()),n=a.isValid?a.domain():"",o=i.decorateLabel(n&&s?`${n}: ${s}`:s||n||i18nString(UIStrings.empty));e.set(o,(e.get(o)||0)+1)}this.nameDiv.removeChildren();const t=[];for(const[i,s]of e){const e=s>1?`${i} (${s})`:i;t.push(e);const a=this.nameDiv.createChild("div");a.textContent=e,UI.Tooltip.Tooltip.install(a,String(e))}}}