UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 8.67 kB
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 PerfUI from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as UI from"../../ui/legacy/legacy.js";let colorGeneratorInstance=null;export class ProfileFlameChartDataProvider{colorGeneratorInternal;maxStackDepthInternal;timelineData_;entryNodes;#e;boldFont;constructor(){this.colorGeneratorInternal=ProfileFlameChartDataProvider.colorGenerator(),this.maxStackDepthInternal=0,this.timelineData_=null,this.entryNodes=[],this.#e=`${PerfUI.Font.DEFAULT_FONT_SIZE} ${PerfUI.Font.getFontFamilyForCanvas()}`}static colorGenerator(){return colorGeneratorInstance||(colorGeneratorInstance=new Common.Color.Generator({min:30,max:330,count:void 0},{min:50,max:80,count:5},{min:80,max:90,count:3}),colorGeneratorInstance.setColorForID("(idle)","hsl(0, 0%, 94%)"),colorGeneratorInstance.setColorForID("(program)","hsl(0, 0%, 80%)"),colorGeneratorInstance.setColorForID("(garbage collector)","hsl(0, 0%, 80%)")),colorGeneratorInstance}minimumBoundary(){throw"Not implemented."}totalTime(){throw"Not implemented."}formatValue(e,t){return i18n.TimeUtilities.preciseMillisToString(e,t)}maxStackDepth(){return this.maxStackDepthInternal}timelineData(){return this.timelineData_||this.calculateTimelineData()}calculateTimelineData(){throw"Not implemented."}prepareHighlightedEntryInfo(e){throw"Not implemented."}canJumpToEntry(e){return"0"!==this.entryNodes[e].scriptId}entryTitle(e){const t=this.entryNodes[e];return UI.UIUtils.beautifyFunctionName(t.functionName)}entryFont(e){const t="bold "+this.#e;return this.entryHasDeoptReason(e)?t:this.#e}entryHasDeoptReason(e){throw"Not implemented."}entryColor(e){const t=this.entryNodes[e];return this.colorGeneratorInternal.colorForID(t.url||("0"!==t.scriptId?t.scriptId:t.functionName))}decorateEntry(e,t,i,r,a,n,s){return!1}forceDecoration(e){return!1}textColor(e){return"#333"}entryNodesLength(){return this.entryNodes.length}}export class CPUProfileFlameChart extends(Common.ObjectWrapper.eventMixin(UI.Widget.VBox)){searchableView;overviewPane;mainPane;entrySelected;dataProvider;searchResults;searchResultIndex=-1;constructor(e,t){super(),this.element.id="cpu-flame-chart",this.searchableView=e,this.overviewPane=new OverviewPane(t),this.overviewPane.show(this.element),this.mainPane=new PerfUI.FlameChart.FlameChart(t,this.overviewPane),this.mainPane.setBarHeight(15),this.mainPane.setTextBaseline(4),this.mainPane.setTextPadding(2),this.mainPane.show(this.element),this.mainPane.addEventListener(PerfUI.FlameChart.Events.EntrySelected,this.onEntrySelected,this),this.mainPane.addEventListener(PerfUI.FlameChart.Events.EntryInvoked,this.onEntryInvoked,this),this.entrySelected=!1,this.mainPane.addEventListener(PerfUI.FlameChart.Events.CanvasFocused,this.onEntrySelected,this),this.overviewPane.addEventListener("WindowChanged",this.onWindowChanged,this),this.dataProvider=t,this.searchResults=[]}focus(){this.mainPane.focus()}onWindowChanged(e){const{windowTimeLeft:t,windowTimeRight:i}=e.data;this.mainPane.setWindowTimes(t,i,!0)}selectRange(e,t){this.overviewPane.selectRange(e,t)}onEntrySelected(e){if(e.data){const t=e.data;this.mainPane.setSelectedEntry(t),this.entrySelected=-1!==t}else this.entrySelected||(this.mainPane.setSelectedEntry(0),this.entrySelected=!0)}onEntryInvoked(e){this.onEntrySelected(e),this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntryInvoked,e.data)}update(){this.overviewPane.update(),this.mainPane.update()}performSearch(e,t,i){const r=Platform.StringUtilities.createPlainTextSearchRegex(e.query,e.caseSensitive?"":"i"),a=-1!==this.searchResultIndex?this.searchResults[this.searchResultIndex]:-1;this.searchResults=[];const n=this.dataProvider.entryNodesLength();for(let e=0;e<n;++e)this.dataProvider.entryTitle(e).match(r)&&this.searchResults.push(e);this.searchResults.length?(this.searchResultIndex=this.searchResults.indexOf(a),-1===this.searchResultIndex&&(this.searchResultIndex=i?this.searchResults.length-1:0),this.mainPane.setSelectedEntry(this.searchResults[this.searchResultIndex])):this.onSearchCanceled(),this.searchableView.updateSearchMatchesCount(this.searchResults.length),this.searchableView.updateCurrentMatchIndex(this.searchResultIndex)}onSearchCanceled(){this.mainPane.setSelectedEntry(-1),this.searchResults=[],this.searchResultIndex=-1}jumpToNextSearchResult(){this.searchResultIndex=(this.searchResultIndex+1)%this.searchResults.length,this.mainPane.setSelectedEntry(this.searchResults[this.searchResultIndex]),this.searchableView.updateCurrentMatchIndex(this.searchResultIndex)}jumpToPreviousSearchResult(){this.searchResultIndex=(this.searchResultIndex-1+this.searchResults.length)%this.searchResults.length,this.mainPane.setSelectedEntry(this.searchResults[this.searchResultIndex]),this.searchableView.updateCurrentMatchIndex(this.searchResultIndex)}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!1}}export class OverviewCalculator{formatter;minimumBoundaries;maximumBoundaries;xScaleFactor;constructor(e){this.formatter=e}updateBoundaries(e){this.minimumBoundaries=e.dataProvider.minimumBoundary();const t=e.dataProvider.totalTime();this.maximumBoundaries=this.minimumBoundaries+t,this.xScaleFactor=e.overviewContainer.clientWidth/t}computePosition(e){return(e-this.minimumBoundaries)*this.xScaleFactor}formatValue(e,t){return this.formatter(e-this.minimumBoundaries,t)}maximumBoundary(){return this.maximumBoundaries}minimumBoundary(){return this.minimumBoundaries}zeroTime(){return this.minimumBoundaries}boundarySpan(){return this.maximumBoundaries-this.minimumBoundaries}}export class OverviewPane extends(Common.ObjectWrapper.eventMixin(UI.Widget.VBox)){overviewContainer;overviewCalculator;overviewGrid;overviewCanvas;dataProvider;windowTimeLeft;windowTimeRight;updateTimerId;constructor(e){super(),this.element.classList.add("cpu-profile-flame-chart-overview-pane"),this.overviewContainer=this.element.createChild("div","cpu-profile-flame-chart-overview-container"),this.overviewCalculator=new OverviewCalculator(e.formatValue),this.overviewGrid=new PerfUI.OverviewGrid.OverviewGrid("cpu-profile-flame-chart",this.overviewCalculator),this.overviewGrid.element.classList.add("fill"),this.overviewCanvas=this.overviewContainer.createChild("canvas","cpu-profile-flame-chart-overview-canvas"),this.overviewContainer.appendChild(this.overviewGrid.element),this.dataProvider=e,this.overviewGrid.addEventListener(PerfUI.OverviewGrid.Events.WindowChangedWithPosition,this.onWindowChanged,this)}windowChanged(e,t){this.selectRange(e,t)}updateRangeSelection(e,t){}updateSelectedGroup(e,t){}selectRange(e,t){const i=this.dataProvider.minimumBoundary(),r=this.dataProvider.totalTime();this.overviewGrid.setWindow((e-i)/r,(t-i)/r)}onWindowChanged(e){const t={windowTimeLeft:e.data.rawStartValue,windowTimeRight:e.data.rawEndValue};this.windowTimeLeft=t.windowTimeLeft,this.windowTimeRight=t.windowTimeRight,this.dispatchEventToListeners("WindowChanged",t)}timelineData(){return this.dataProvider.timelineData()}onResize(){this.scheduleUpdate()}scheduleUpdate(){this.updateTimerId||(this.updateTimerId=this.element.window().requestAnimationFrame(this.update.bind(this)))}update(){this.updateTimerId=0;this.timelineData()&&(this.resetCanvas(this.overviewContainer.clientWidth,this.overviewContainer.clientHeight-PerfUI.FlameChart.HeaderHeight),this.overviewCalculator.updateBoundaries(this),this.overviewGrid.updateDividers(this.overviewCalculator),this.drawOverviewCanvas())}drawOverviewCanvas(){const e=this.overviewCanvas.width,t=this.overviewCanvas.height,i=this.calculateDrawData(e),r=this.overviewCanvas.getContext("2d");if(!r)throw new Error("Failed to get canvas context");const a=window.devicePixelRatio,n=t/(1.1*this.dataProvider.maxStackDepth());r.lineWidth=1,r.translate(.5,.5),r.strokeStyle="rgba(20,0,0,0.4)",r.fillStyle="rgba(214,225,254,0.8)",r.moveTo(-1,t+1),r.lineTo(-1,Math.round(t-i[0]*n-a));let s=0;for(let o=0;o<e;++o)s=Math.round(t-i[o]*n-a),r.lineTo(o,s);r.lineTo(e+1,s),r.lineTo(e+1,t+1),r.fill(),r.stroke(),r.closePath()}calculateDrawData(e){const t=this.dataProvider,i=this.timelineData(),r=i.entryStartTimes,a=i.entryTotalTimes,n=i.entryLevels,s=r.length,o=this.dataProvider.minimumBoundary(),h=new Uint8Array(e),l=e/t.totalTime();for(let e=0;e<s;++e){const t=Math.floor((r[e]-o)*l),i=Math.floor((r[e]-o+a[e])*l);for(let r=t;r<=i;++r)h[r]=Math.max(h[r],n[e]+1)}return h}resetCanvas(e,t){const i=window.devicePixelRatio;this.overviewCanvas.width=e*i,this.overviewCanvas.height=t*i,this.overviewCanvas.style.width=e+"px",this.overviewCanvas.style.height=t+"px"}}