@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 3.05 kB
JavaScript
import*as i18n from"../../core/i18n/i18n.js";import*as TraceEngine from"../../models/trace/trace.js";import*as PerfUI from"../../ui/legacy/components/perf_ui/perf_ui.js";import{buildGroupStyle,buildTrackHeader,getFormattedTime}from"./AppenderUtils.js";import{TimelineUIUtils}from"./TimelineUIUtils.js";import*as ThemeSupport from"../../ui/legacy/theme_support/theme_support.js";import{InstantEventVisibleDurationMs}from"./TimelineFlameChartDataProvider.js";const UIStrings={network:"Network"},str_=i18n.i18n.registerUIStrings("panels/timeline/NetworkTrackAppender.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class NetworkTrackAppender{appenderName="Network";#e;#t;#r;#n;constructor(e,t){this.#e=e,this.#t=t,this.#r=`${PerfUI.Font.DEFAULT_FONT_SIZE} ${PerfUI.Font.getFontFamilyForCanvas()}`,ThemeSupport.ThemeSupport.instance().addEventListener(ThemeSupport.ThemeChangeEvent.eventName,(()=>{this.#n&&(this.#n.style.color=ThemeSupport.ThemeSupport.instance().getComputedValue("--color-text-primary"),this.#n.style.backgroundColor=ThemeSupport.ThemeSupport.instance().getComputedValue("--color-background"))}))}group(){return this.#n}font(){return this.#r}appendTrackAtLevel(e,t){const r=this.#e.NetworkRequests.byTime;return 0===r.length?e:(this.#i(e,t),this.#s(r,e))}#i(e,t){const r=buildGroupStyle({font:this.#t,shareHeaderLine:!1,useFirstLineForOverview:!1,useDecoratorsForOverview:!0});this.#n=buildTrackHeader(0,i18nString(UIStrings.network),r,!0,t),this.#t.groups.push(this.#n)}#s(e,t){if(0===e.length)return t;const r=[];let n=0;for(let i=0;i<e.length;++i){const s=e[i],a=s.ts,o=s.ts+(s.dur||0);for(;r.length&&r[r.length-1]<=a;)r.pop();const l=r.length;this.#a(s,t+l),r.push(o),n=Math.max(n,r.length)}return t+n}#a(e,t){const r=this.#t.entryLevels.length;this.#t.entryLevels[r]=t,this.#t.entryStartTimes[r]=TraceEngine.Helpers.Timing.microSecondsToMilliseconds(e.ts);const n=e.dur||TraceEngine.Helpers.Timing.millisecondsToMicroseconds(InstantEventVisibleDurationMs);return this.#t.entryTotalTimes[r]=TraceEngine.Helpers.Timing.microSecondsToMilliseconds(n),t}filterTimelineDataBetweenTimes(e,t){const r=this.#e.NetworkRequests.byTime;if(!this.#t||0===r.length)return 0;const n=[];let i=0;for(let s=0;s<r.length;++s){const a=r[s],o=TraceEngine.Helpers.Timing.microSecondsToMilliseconds(a.ts),l=TraceEngine.Helpers.Timing.microSecondsToMilliseconds(a.ts+a.dur);if(o<t&&l>e){for(;n.length&&n[n.length-1]<=o;)n.pop();this.#t.entryLevels[s]=n.length,n.push(l),i=Math.max(i,n.length)}else this.#t.entryLevels[s]=-1}for(let e=0;e<r.length;++e)-1===this.#t.entryLevels[e]&&(this.#t.entryLevels[e]=i);return i}colorForEvent(e){if(!TraceEngine.Types.TraceEvents.isSyntheticNetworkRequestDetailsEvent(e))throw new Error(`Unexpected Network Request: The event's type is '${e.name}'`);const t=TimelineUIUtils.syntheticNetworkRequestCategory(e);return TimelineUIUtils.networkCategoryColor(t)}titleForEvent(e){return e.name}highlightedEntryInfo(e){return{title:this.titleForEvent(e),formattedTime:getFormattedTime(e.dur)}}}