@react-native/debugger-frontend 0.84.0-nightly-20251202-b0e754bc7 → 0.84.0-nightly-20251204-5bb3a6d68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import*as e from"../../core/i18n/i18n.js";import*as t from"../../models/trace/trace.js";import*as i from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as n from"../../ui/legacy/theme_support/theme_support.js";import*as r from"../../core/platform/platform.js";import*as a from"../../services/trace_bounds/trace_bounds.js";import*as s from"./utils/utils.js";export{s as Utils};import*as o from"../../core/sdk/sdk.js";import*as l from"../../core/common/common.js";import*as d from"../../core/root/root.js";import*as c from"./components/components.js";import*as h from"./extensions/extensions.js";import*as p from"../../ui/components/helpers/helpers.js";import*as m from"../../ui/legacy/legacy.js";import*as u from"../../models/bindings/bindings.js";import*as g from"../../models/crux-manager/crux-manager.js";import*as v from"../../ui/visual_logging/visual_logging.js";import*as T from"./components/insights/insights.js";import*as y from"./overlays/components/components.js";import*as f from"./overlays/overlays.js";import*as S from"../../ui/legacy/components/utils/utils.js";import*as w from"../../ui/legacy/components/data_grid/data_grid.js";import*as b from"../../ui/components/code_highlighter/code_highlighter.js";import*as E from"../../ui/components/buttons/buttons.js";import*as C from"../../core/host/host.js";import*as k from"../../models/workspace/workspace.js";import*as I from"../../ui/components/adorners/adorners.js";import*as M from"../../ui/components/dialogs/dialogs.js";import*as x from"../../ui/components/legacy_wrapper/legacy_wrapper.js";import*as P from"../mobile_throttling/mobile_throttling.js";import*as R from"../../ui/components/menus/menus.js";import*as F from"../../models/emulation/emulation.js";import*as L from"../../models/extensions/extensions.js";import*as A from"../../models/live-metrics/live-metrics.js";import*as N from"../../ui/components/icon_button/icon_button.js";import*as D from"../layer_viewer/layer_viewer.js";import"../../ui/components/linkifier/linkifier.js";import{render as B,html as H}from"../../ui/lit/lit.js";const U={sSelfS:"{PH1} (self {PH2})"},O=e.i18n.registerUIStrings("panels/timeline/AppenderUtils.ts",U),_=e.i18n.getLocalizedString.bind(void 0,O);function W(e){const t={padding:4,height:17,collapsible:!0,color:n.ThemeSupport.instance().getComputedValue("--sys-color-on-surface"),backgroundColor:n.ThemeSupport.instance().getComputedValue("--sys-color-cdt-base-container"),nestingLevel:0,shareHeaderLine:!0};return Object.assign(t,e)}function V(e,t,i,n,r,a,s){const o={startLevel:t,name:i,style:n,selectable:r,expanded:a,showStackContextMenu:s};return null!==e&&(o.jslogContext=e),o}function G(i,n){if(!i)return"";const r=t.Helpers.Timing.microToMilli(i);if(void 0===n)return e.TimeUtilities.millisToString(r,!0);const a=t.Helpers.Timing.microToMilli(n),s=t.Types.Timing.Milli(1e-6);return Math.abs(r-a)>s&&a>s?_(U.sSelfS,{PH1:e.TimeUtilities.millisToString(r,!0),PH2:e.TimeUtilities.millisToString(a,!0)}):e.TimeUtilities.millisToString(r,!0)}function z(e,t){let i=0;const n=e.ts,r=e.ts+(e.dur||0);for(;i<t.length&&n<t[i];)++i;return t[i]=r,i}function j(e,t,i){const n=e.entryDecorations[t]||[];n.push(i),e.entryDecorations[t]=n}var $=Object.freeze({__proto__:null,addDecorationToEvent:j,buildGroupStyle:W,buildTrackHeader:V,getDurationString:G,getEventLevel:z});const K={animations:"Animations"},q=e.i18n.registerUIStrings("panels/timeline/AnimationsTrackAppender.ts",K),Y=e.i18n.getLocalizedString.bind(void 0,q);class J{appenderName="Animations";#e;#t;#i=this.#n.bind(this);constructor(e,t){this.#e=e,this.#t=t}appendTrackAtLevel(e,t){const i=this.#t.Animations.animations;return 0===i.length?e:(this.#r(e,t),this.#e.appendEventsAtLevel(i,e,this,this.#i))}#r(e,t){const i=W({useFirstLineForOverview:!1}),n=V("animations",e,Y(K.animations),i,!0,t);this.#e.registerTrackForGroup(n,this)}#n(e,i){if(e&&t.Types.Events.isSyntheticAnimation(e)){t.Insights.Models.CLSCulprits.getNonCompositedFailure(e).length&&j(this.#e.getFlameChartTimelineData(),i,{type:"WARNING_TRIANGLE"})}}colorForEvent(){return n.ThemeSupport.instance().getComputedValue("--app-color-rendering")}}var X=Object.freeze({__proto__:null,AnimationsTrackAppender:J});const Z={srEnterLabelEditMode:"Editing the annotation label text",srLabelTextUpdated:"Label updated to {PH1}",srTimeRangeBoundsUpdated:"Time range updated, starting at {PH1} and ending at {PH2}",timeRange:"time range",entryLabel:"entry label",entriesLink:"connected entries",srAnnotationRemoved:"The {PH1} annotation has been removed",srAnnotationAdded:"The {PH1} annotation has been added",srEntriesLinked:"The connected entries annotation now links from {PH1} to {PH2}"},Q=e.i18n.registerUIStrings("panels/timeline/AnnotationHelpers.ts",Z),ee=e.i18n.getLocalizedString.bind(void 0,Q);function te(e){const t=[];switch(e.type){case"ENTRY_LABEL":t.push(e.entry);break;case"TIME_RANGE":break;case"ENTRIES_LINK":t.push(e.entryFrom),e.entryTo&&t.push(e.entryTo);break;default:r.assertNever(e,"Unsupported annotation type")}return t}function ie(e){let i=null;const n=t.Types.Timing.Milli(1);switch(e.type){case"ENTRY_LABEL":{const r=e.entry.dur??t.Helpers.Timing.milliToMicro(n);i=t.Helpers.Timing.traceWindowFromMicroSeconds(e.entry.ts,t.Types.Timing.Micro(e.entry.ts+r));break}case"TIME_RANGE":i=e.bounds;break;case"ENTRIES_LINK":{if(!e.entryTo)break;const r=e.entryFrom.dur??n,a=e.entryTo.dur??n,s=e.entryFrom.ts+r,o=e.entryTo.ts+a,l=Math.max(s,o);i=t.Helpers.Timing.traceWindowFromMicroSeconds(e.entryFrom.ts,t.Types.Timing.Micro(l));break}default:r.assertNever(e,"Unsupported annotation type")}return i}function ne(e){return"TIME_RANGE"===e.type}function re(e){return"ENTRIES_LINK"===e.type}function ae(e){return"ENTRY_LABEL"===e.type}function se(e){return ne(e)?ee(Z.timeRange):re(e)?ee(Z.entriesLink):ae(e)&&e.label.length>0?ee(Z.entryLabel):null}function oe(i){const{overlay:n,action:o}=i;switch(o){case"Remove":{const e=se(n);if(e)return ee(Z.srAnnotationRemoved,{PH1:e});break}case"Add":{const e=se(n);if(e)return ee(Z.srAnnotationAdded,{PH1:e});break}case"UpdateLabel":{const e=function(e){return ne(e)||ae(e)?e.label:null}(n);if(e)return ee(Z.srLabelTextUpdated,{PH1:e});break}case"UpdateTimeRange":{if("TIME_RANGE"!==n.type)return"";const i=a.TraceBounds.BoundsManager.instance().state()?.micro.entireTraceBounds;if(!i)return"";const{min:r,max:s}=n.bounds,o=e.TimeUtilities.formatMicroSecondsAsMillisFixed(t.Types.Timing.Micro(r-i.min)),l=e.TimeUtilities.formatMicroSecondsAsMillisFixed(t.Types.Timing.Micro(s-i.min));return ee(Z.srTimeRangeBoundsUpdated,{PH1:o,PH2:l})}case"UpdateLinkToEntry":if(re(n)&&n.entryFrom&&n.entryTo){const e=s.EntryName.nameForEntry(n.entryFrom),t=s.EntryName.nameForEntry(n.entryTo);return ee(Z.srEntriesLinked,{PH1:e,PH2:t})}break;case"EnterLabelEditState":return ee(Z.srEnterLabelEditMode);default:r.assertNever(o,"Unsupported action for AnnotationModifiedEvent")}return null}var le=Object.freeze({__proto__:null,ariaAnnouncementForModifiedEvent:oe,ariaDescriptionForOverlay:se,getAnnotationEntries:te,getAnnotationWindow:ie,isEntriesLink:re,isEntryLabel:ae,isTimeRangeLabel:ne});class de extends Event{duration;static eventName="traceload";constructor(e){super(de.eventName,{bubbles:!0,composed:!0}),this.duration=e}}var ce=Object.freeze({__proto__:null,TraceLoadEvent:de});let he;class pe{static instance(e={forceNew:null}){const{forceNew:t}=e;return he&&!t||(he=new pe),he}linkify(e,t){const i=document.createElement("span"),n=e,{x:r,y:a,width:s,height:l}=n;return i.textContent=`Location: [${r},${a}], Size: [${s}x${l}]`,i.addEventListener("mouseover",(()=>o.OverlayModel.OverlayModel.highlightRect(n))),i.addEventListener("mouseleave",(()=>o.OverlayModel.OverlayModel.clearHighlight())),i}}var me=Object.freeze({__proto__:null,CLSRect:class{x;y;width;height;color;outlineColor;constructor([e,t,i,n]){this.x=e,this.y=t,this.width=i,this.height=n,this.color={r:238,g:111,b:99,a:.4},this.outlineColor={r:238,g:111,b:99,a:.7}}},Linkifier:pe});const ue={customTrackDescription:"This is a custom track added by a third party.",customTrackName:"{PH1} — Custom track"},ge=e.i18n.registerUIStrings("panels/timeline/ExtensionTrackAppender.ts",ue),ve=e.i18n.getLocalizedString.bind(void 0,ge);class Te{appenderName="Extension";#a;#e;constructor(e,t){this.#a=t,this.#e=e}appendTrackAtLevel(e,t){return 0===Object.values(this.#a.entriesByTrack).reduce(((e,t)=>t.length+e),0)?e:(this.#s(e,t),this.#o(e))}#s(e,t){const i=W({shareHeaderLine:!1,collapsible:!0}),n=V("extension",e,ve(ue.customTrackName,{PH1:this.#a.name}),i,!0,t);n.description=ve(ue.customTrackDescription),this.#e.registerTrackForGroup(n,this)}#l(e,t){const i=V("extension",e,t,W({shareHeaderLine:!1,padding:2,nestingLevel:1,collapsible:!0}),!0);this.#e.registerTrackForGroup(i,this)}#o(e){let t=e;for(const[e,i]of Object.entries(this.#a.entriesByTrack))this.#a.isTrackGroup&&this.#l(t,e),t=this.#e.appendEventsAtLevel(i,t,this);return t}colorForEvent(e){const i=n.ThemeSupport.instance().getComputedValue("--app-color-rendering");return t.Types.Extensions.isSyntheticExtensionEntry(e)?h.ExtensionUI.extensionEntryColor(e):i}titleForEvent(e){return e.name}setPopoverInfo(e,i){i.title=t.Types.Extensions.isSyntheticExtensionEntry(e)&&e.args.tooltipText?e.args.tooltipText:this.titleForEvent(e),i.formattedTime=G(e.dur)}}var ye=Object.freeze({__proto__:null,ExtensionTrackAppender:Te});const fe={gpu:"GPU"},Se=e.i18n.registerUIStrings("panels/timeline/GPUTrackAppender.ts",fe),we=e.i18n.getLocalizedString.bind(void 0,Se);class be{appenderName="GPU";#e;#t;constructor(e,t){this.#e=e,this.#t=t}appendTrackAtLevel(e,t){const i=this.#t.GPU.mainGPUThreadTasks;return 0===i.length?e:(this.#r(e,t),this.#e.appendEventsAtLevel(i,e,this))}#r(e,t){const i=W({collapsible:!1}),n=V("gpu",e,we(fe.gpu),i,!0,t);this.#e.registerTrackForGroup(n,this)}colorForEvent(e){if(!t.Types.Events.isGPUTask(e))throw new Error(`Unexpected GPU Task: The event's type is '${e.name}'`);return n.ThemeSupport.instance().getComputedValue("--app-color-painting")}}var Ee=Object.freeze({__proto__:null,GPUTrackAppender:be});const Ce={interactions:"Interactions"},ke=e.i18n.registerUIStrings("panels/timeline/InteractionsTrackAppender.ts",Ce),Ie=e.i18n.getLocalizedString.bind(void 0,ke);class Me{appenderName="Interactions";#d;#e;#t;constructor(e,t,i){this.#e=e,this.#d=i,this.#t=t}appendTrackAtLevel(e,t){return 0===this.#t.UserInteractions.interactionEvents.length?e:(this.#r(e,t),this.#c(e))}#r(e,t){const i=W({collapsible:this.#t.UserInteractions.interactionEvents.length>0,useDecoratorsForOverview:!0}),n=V("interactions",e,Ie(Ce.interactions),i,!0,t);this.#e.registerTrackForGroup(n,this)}#c(e){const{interactionEventsWithNoNesting:t,interactionsOverThreshold:i}=this.#t.UserInteractions;return this.#e.appendEventsAtLevel(t,e,this,((e,t)=>{i.has(e)&&void 0!==t&&this.#h(e,t)}))}#h(e,i){const n=this.#e.getFlameChartTimelineData().entryDecorations[i]||[];n.push({type:"CANDY",startAtTime:t.Handlers.ModelHandlers.UserInteractions.LONG_INTERACTION_THRESHOLD,endAtTime:e.processingEnd},{type:"WARNING_TRIANGLE",customEndTime:e.processingEnd}),this.#e.getFlameChartTimelineData().entryDecorations[i]=n}colorForEvent(e){let i=s.EntryName.nameForEntry(e,this.#t);return t.Types.Events.isSyntheticInteraction(e)&&(i+=e.interactionId),this.#d.colorForID(i)}setPopoverInfo(e,i){if(t.Types.Events.isSyntheticInteraction(e)){const t=new c.InteractionBreakdown.InteractionBreakdown;t.entry=e,i.additionalElements.push(t)}}}var xe=Object.freeze({__proto__:null,InteractionsTrackAppender:Me});const Pe={layoutShifts:"Layout shifts",layoutShiftCluster:"Layout shift cluster",layoutShift:"Layout shift"},Re=e.i18n.registerUIStrings("panels/timeline/LayoutShiftsTrackAppender.ts",Pe),Fe=e.i18n.getLocalizedString.bind(void 0,Re),Le=t.Types.Timing.Micro(5e3);class Ae{appenderName="LayoutShifts";#e;#t;constructor(e,t){this.#e=e,this.#t=t}appendTrackAtLevel(e,t){return 0===this.#t.LayoutShifts.clusters.length?e:(this.#r(e,t),this.#p(e))}#r(e,t){const i=W({collapsible:!1}),n=V("layout-shifts",e,Fe(Pe.layoutShifts),i,!0,t);this.#e.registerTrackForGroup(n,this)}#p(e){const t=this.#t.LayoutShifts.clusters;this.#e.appendEventsAtLevel(t,e,this);const i=this.#t.LayoutShifts.clusters.flatMap((e=>e.events));return this.preloadScreenshots(i),this.#e.appendEventsAtLevel(i,e,this)}colorForEvent(e){const i=n.ThemeSupport.instance().getComputedValue("--app-color-rendering");if(t.Types.Events.isSyntheticLayoutShiftCluster(e)){const e=l.Color.parse(i);if(e){return e.setAlpha(.5).asString("rgba")}}return i}setPopoverInfo(e,i){const n=t.Types.Events.isSyntheticLayoutShift(e)?e.args.data?.weighted_score_delta??0:t.Types.Events.isSyntheticLayoutShiftCluster(e)?e.clusterCumulativeScore:-1;if(i.formattedTime=n.toFixed(4),i.title=t.Types.Events.isSyntheticLayoutShift(e)?Fe(Pe.layoutShift):t.Types.Events.isSyntheticLayoutShiftCluster(e)?Fe(Pe.layoutShiftCluster):e.name,t.Types.Events.isSyntheticLayoutShift(e)){const t=new m.Geometry.Size(510,400),n=Ae.createShiftViz(e,this.#t,t);n&&i.additionalElements.push(n)}}getDrawOverride(e){if(t.Types.Events.isSyntheticLayoutShift(e)){const t=e.args.data?.weighted_score_delta||0,i=1-Math.min(t/.1,1);return(t,n,r,a,s,o,l)=>{const d=i*(s/3),c=s,h=c/2;return t.save(),t.beginPath(),t.moveTo(n,r+d),t.lineTo(n+h-d,r+h),t.lineTo(n,r+s-d),t.lineTo(n-h+d,r+h),t.closePath(),t.fillStyle=l(this.colorForEvent(e)),t.fill(),t.restore(),{x:n-h,width:c}}}if(t.Types.Events.isSyntheticLayoutShiftCluster(e))return(t,i,n,r,a,s,o)=>{const l=.2*a,d=n+(a-l)/2+.5;return t.fillStyle=o(this.colorForEvent(e)),t.fillRect(i,d,r-.5,l-1),{x:i,width:r,z:-1}}}preloadScreenshots(e){const t=new Set;for(const i of e){const e=i.parsedData.screenshots;e.before&&t.add(e.before),e.after&&t.add(e.after)}const i=Array.from(t);return s.ImageCache.preload(i)}titleForEvent(e){return""}static createShiftViz(e,t,i){const n=e.parsedData.screenshots,{viewportRect:r,devicePixelRatio:a}=t.Meta,o=document.createElement("div");o.classList.add("layout-shift-viz");const l=n.before&&s.ImageCache.getOrQueue(n.before),d=n.after&&s.ImageCache.getOrQueue(n.after);if(!l||!d||!r||void 0===a)return;const c=e=>new DOMRect(e[0]/a,e[1]/a,e[2]/a,e[3]/a),h=Math.min(l.naturalWidth/r.width,l.naturalHeight/r.height,1),m=Math.min(i.width/l.naturalWidth,i.height/l.naturalHeight,1);for(const e of[o,d,l])e.style.width=l.naturalWidth*m+"px",e.style.height=l.naturalHeight*m+"px";const u=e.args.data?.impacted_nodes?.map((e=>c(e.old_rect)))??[],g=e.args.data?.impacted_nodes?.map((e=>c(e.new_rect)))??[];return p.ScheduledRender.scheduleRender(o,(()=>function(){if(!l||!d)return;[l,d].flatMap((e=>e.getAnimations())).forEach((e=>e.cancel()));const e="ease-out",t={duration:3e3,iterations:1/0,fill:"forwards",easing:e};d.animate({opacity:[0,0,1,1,1],easing:e},t);const i=t=>({left:t.x*m*h+"px",top:t.y*m*h+"px",width:t.width*m*h+"px",height:t.height*m*h+"px",opacity:.7,outlineWidth:"1px",easing:e});u.forEach(((e,n)=>{const r=g[n],a=document.createElement("div");a.classList.add("layout-shift-viz-rect"),o.appendChild(a);let s=i(e),l=i(r);l.opacity=.4,[e.width,e.height,e.x,e.y].every((e=>0===e))&&(s={...l},s.opacity="0"),[r.width,r.height,r.x,r.y].every((e=>0===e))&&(l={...s},l.opacity="0"),a.animate([s,s,{...l,outlineWidth:"4px"},l,l],t)}))}())),o.append(l,d),o}}var Ne=Object.freeze({__proto__:null,LAYOUT_SHIFT_SYNTHETIC_DURATION:Le,LayoutShiftsTrackAppender:Ae});class De{#t;#m=[];#u=[];#g=new Map;constructor(e){this.#t=e}#v(e){return this.#t.Samples.entryToNode.get(e)??this.#t.Renderer.entryToNode.get(e)}findPossibleActions(e){const t=this.#v(e);if(!t)return{MERGE_FUNCTION:!1,COLLAPSE_FUNCTION:!1,COLLAPSE_REPEATING_DESCENDANTS:!1,RESET_CHILDREN:!1,UNDO_ALL_ACTIONS:!1};const i=t.parent,n=this.#T(t).filter((e=>!this.#m.includes(e))),r=this.#y(t).filter((e=>!this.#m.includes(e))),a=this.#T(t).filter((e=>this.#m.includes(e)));return{MERGE_FUNCTION:null!==i,COLLAPSE_FUNCTION:n.length>0,COLLAPSE_REPEATING_DESCENDANTS:r.length>0,RESET_CHILDREN:a.length>0,UNDO_ALL_ACTIONS:this.#m.length>0}}findHiddenDescendantsAmount(e){const t=this.#v(e);if(!t)return 0;return this.#T(t).filter((e=>this.invisibleEntries().includes(e))).length}invisibleEntries(){return this.#m}setHiddenAndExpandableEntries(e,t){this.#m.push(...e),this.#u.push(...t)}entryIsInvisible(e){return this.#m.includes(e)}expandableEntries(){return this.#u}applyFilterAction(e){const t=new Set;switch(e.type){case"MERGE_FUNCTION":{t.add(e.entry);const i=this.#v(e.entry)||null,n=i&&this.#f(i);n&&this.#S(n.entry);break}case"COLLAPSE_FUNCTION":{const i=this.#v(e.entry);if(!i)break;this.#T(i).forEach((e=>t.add(e))),this.#S(e.entry);break}case"COLLAPSE_REPEATING_DESCENDANTS":{const i=this.#v(e.entry);if(!i)break;this.#y(i).forEach((e=>t.add(e))),t.size>0&&this.#S(e.entry);break}case"UNDO_ALL_ACTIONS":this.#m=[],this.#u=[];break;case"RESET_CHILDREN":this.#w(e.entry);break;default:r.assertNever(e.type,`Unknown EntriesFilter action: ${e.type}`)}return this.#m.push(...t),this.#m}#S(e){this.#u.push(e);const t=this.#v(e);if(!t)return;const i=this.#T(t);i.length>0&&(this.#u=this.#u.filter((e=>!i.includes(e))))}firstVisibleParentEntryForEntry(e){const t=this.#v(e);if(!t)return null;const i=this.#f(t);return i?i.entry:null}#f(e){let t=e.parent;for(;t&&this.#m.includes(t.entry)||t&&!Br(t.entry);)t=t.parent;return t}#T(e){const t=this.#g.get(e);if(t)return t;const i=[],n=[...e.children];for(;n.length>0;){const e=n.shift();if(e){i.push(e.entry);const t=this.#g.get(e);t?i.push(...t):n.push(...e.children)}}return this.#g.set(e,i),i}#y(e){const i=[...e.children],n=[],r=t.Types.Events.isProfileCall(e.entry);for(;i.length>0;){const a=i.shift();if(a){const s=t.Types.Events.isProfileCall(a.entry);if(r&&s){const i=e.entry,r=a.entry;t.Helpers.SamplesIntegrator.SamplesIntegrator.framesAreEqual(i.callFrame,r.callFrame)&&n.push(a.entry)}else r||s||e.entry.name===a.entry.name&&n.push(a.entry);i.push(...a.children)}}return n}revealEntry(e){const t=this.#v(e);if(!t)return;let i=t;for(;i.parent&&!this.#u.includes(i.entry);)i=i.parent;this.#w(i.entry)}#w(e){const t=this.#v(e);if(!t)return;const i=this.#T(t);this.#m=this.#m.filter((e=>!i.includes(e))),this.#u=this.#u.filter((t=>!i.includes(t)&&t!==e))}isEntryExpandable(e){return this.#u.includes(e)}}var Be=Object.freeze({__proto__:null,EntriesFilter:De});class He{#b=new Map;keyForEvent(e){if(t.Types.Events.isProfileCall(e))return`p-${e.pid}-${e.tid}-${t.Types.Events.SampleIndex(e.sampleIndex)}-${e.nodeId}`;if(t.Types.Events.isLegacyTimelineFrame(e))return`l-${e.index}`;const i=t.Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getRawTraceEvents(),n=t.Types.Events.isSyntheticBased(e)?`s-${i.indexOf(e.rawSourceEvent)}`:`r-${i.indexOf(e)}`;return n.length<3?null:n}eventForKey(e,i){const n=t.Types.File.traceEventKeyToValues(e);if(He.isProfileCallKey(n))return this.#E(n,i);if(He.isLegacyTimelineFrameKey(n)){const e=i.Frames.frames.at(n.rawIndex);if(!e)throw new Error(`Could not find frame with index ${n.rawIndex}`);return e}if(He.isSyntheticEventKey(n)){const e=t.Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getSyntheticTraces().at(n.rawIndex);if(!e)throw new Error(`Attempted to get a synthetic event from an unknown raw event index: ${n.rawIndex}`);return e}if(He.isRawEventKey(n)){return t.Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getRawTraceEvents()[n.rawIndex]}throw new Error(`Unknown trace event serializable key values: ${n.join("-")}`)}static isProfileCallKey(e){return"p"===e.type}static isLegacyTimelineFrameKey(e){return"l"===e.type}static isRawEventKey(e){return"r"===e.type}static isSyntheticEventKey(e){return"s"===e.type}#E(e,t){const i=this.#b.get(e);if(i)return i;const n=t.Renderer.processes.get(e.processID)?.threads.get(e.threadID)?.profileCalls;if(!n)throw new Error(`Unknown profile call serializable key: ${e}`);const r=n?.find((t=>t.sampleIndex===e.sampleIndex&&t.nodeId===e.protocol));if(!r)throw new Error(`Unknown profile call serializable key: ${JSON.stringify(e)}`);return this.#b.set(e,r),r}}var Ue=Object.freeze({__proto__:null,EventsSerializer:He});const Oe=[];let _e;class We extends Event{overlay;action;static eventName="annotationmodifiedevent";constructor(e,t){super(We.eventName),this.overlay=e,this.action=t}}class Ve extends EventTarget{#C;#k;#I=null;#t;#M;#x;#P;static activeManager(){return _e}static reset(){Oe.length=0,_e=null}static initAndActivateModificationsManager(e,t){if(Oe[t]){if(_e===Oe[t])return _e;_e=Oe[t],Ve.activeManager()?.applyModificationsIfPresent()}const i=e.parsedTrace(t);if(!i)throw new Error("ModificationsManager was initialized without a corresponding trace data");const n=i.Meta.traceBounds,r=e.rawTraceEvents(t);if(!r)throw new Error("ModificationsManager was initialized without a corresponding raw trace events array");const a=e.syntheticTraceEventsManager(t);if(!a)throw new Error("ModificationsManager was initialized without a corresponding SyntheticEventsManager");const s=e.metadata(t),o=new Ve({parsedTrace:i,traceBounds:n,rawTraceEvents:r,modifications:s?.modifications,syntheticEvents:a.getSyntheticTraces()});return Oe[t]=o,_e=o,Ve.activeManager()?.applyModificationsIfPresent(),this.activeManager()}constructor({parsedTrace:e,traceBounds:t,modifications:i}){super(),this.#C=new De(e),this.#k=new c.Breadcrumbs.Breadcrumbs(t),this.#I=i||null,this.#t=e,this.#M=new He,this.#P=l.Settings.Settings.instance().moduleSetting("annotations-hidden"),this.#x=new Map}getEntriesFilter(){return this.#C}getTimelineBreadcrumbs(){return this.#k}deleteEmptyRangeAnnotations(){for(const e of this.#x.keys())"TIME_RANGE"===e.type&&0===e.label.length&&this.removeAnnotation(e)}createAnnotation(e,t=!1){if("ENTRY_LABEL"===e.type){const t=this.#R(e.entry);if(t)return void this.dispatchEvent(new We(t,"EnterLabelEditState"))}t||"TIME_RANGE"!==e.type&&this.#P.set(!1);const i=this.#F(e);this.#x.set(e,i),this.dispatchEvent(new We(i,"Add"))}annotationsForEntry(e){const t=[];for(const[i]of this.#x.entries())"ENTRY_LABEL"===i.type&&i.entry===e?t.push(i):"ENTRIES_LINK"!==i.type||i.entryFrom!==e&&i.entryTo!==e||t.push(i);return t}deleteEntryAnnotations(e){this.annotationsForEntry(e).forEach((e=>{this.removeAnnotation(e)}))}linkAnnotationBetweenEntriesExists(e,t){for(const i of this.#x.keys())if("ENTRIES_LINK"===i.type&&(i.entryFrom===e&&i.entryTo===t||i.entryFrom===t&&i.entryTo===e))return!0;return!1}#R(e){for(const[t,i]of this.#x.entries())if("ENTRY_LABEL"===t.type&&t.entry===e)return i;return null}#F(e){switch(e.type){case"ENTRY_LABEL":return{type:"ENTRY_LABEL",entry:e.entry,label:e.label};case"TIME_RANGE":return{type:"TIME_RANGE",label:e.label,showDuration:!0,bounds:e.bounds};case"ENTRIES_LINK":return{type:"ENTRIES_LINK",state:e.state,entryFrom:e.entryFrom,entryTo:e.entryTo};default:r.assertNever(e,"Overlay for provided annotation cannot be created")}}removeAnnotation(e){const t=this.#x.get(e);t?(this.#x.delete(e),this.dispatchEvent(new We(t,"Remove"))):console.warn("Overlay for deleted Annotation does not exist",e)}removeAnnotationOverlay(e){const t=this.getAnnotationByOverlay(e);t?this.removeAnnotation(t):console.warn("Annotation for deleted Overlay does not exist",e)}updateAnnotation(e){const i=this.#x.get(e);i&&ne(i)&&t.Types.File.isTimeRangeAnnotation(e)?(i.label=e.label,i.bounds=e.bounds,this.dispatchEvent(new We(i,"UpdateTimeRange"))):i&&re(i)&&t.Types.File.isEntriesLinkAnnotation(e)?(i.state=e.state,i.entryFrom=e.entryFrom,i.entryTo=e.entryTo,this.dispatchEvent(new We(i,"UpdateLinkToEntry"))):console.error("Annotation could not be updated")}updateAnnotationOverlay(e){const t=this.getAnnotationByOverlay(e);t?(("ENTRY_LABEL"===e.type&&"ENTRY_LABEL"===t.type||"TIME_RANGE"===e.type&&"TIME_RANGE"===t.type)&&(this.#P.set(!1),t.label=e.label,this.dispatchEvent(new We(e,"UpdateLabel"))),"ENTRIES_LINK"===e.type&&"ENTRIES_LINK"===t.type&&(this.#P.set(!1),t.state=e.state)):console.warn("Annotation for updated Overlay does not exist")}getAnnotationByOverlay(e){for(const[t,i]of this.#x.entries())if(i===e)return t;return null}getAnnotations(){return[...this.#x.keys()]}getOverlays(){return[...this.#x.values()]}applyAnnotationsFromCache(){this.#I=this.toJSON(),this.#x.clear(),this.#L(this.#I.annotations)}toJSON(){const e=this.#C.invisibleEntries().map((e=>this.#M.keyForEvent(e))).filter((e=>null!==e)),t=this.#C.expandableEntries().map((e=>this.#M.keyForEvent(e))).filter((e=>null!==e));return this.#I={entriesModifications:{hiddenEntries:e,expandableEntries:t},initialBreadcrumb:this.#k.initialBreadcrumb,annotations:this.#A()},this.#I}#A(){const e=this.getAnnotations(),i=[],n=[],r=[];for(let a=0;a<e.length;a++){const s=e[a];if(t.Types.File.isEntryLabelAnnotation(s)){const e=this.#M.keyForEvent(s.entry);e&&i.push({entry:e,label:s.label})}else if(t.Types.File.isTimeRangeAnnotation(s))n.push({bounds:s.bounds,label:s.label});else if(t.Types.File.isEntriesLinkAnnotation(s)&&s.entryTo){const e=this.#M.keyForEvent(s.entryFrom),t=this.#M.keyForEvent(s.entryTo);e&&t&&r.push({entryFrom:e,entryTo:t})}}return{entryLabels:i,labelledTimeRanges:n,linksBetweenEntries:r}}applyModificationsIfPresent(){if(!this.#I||!this.#I.annotations)return;const e=this.#I.entriesModifications.hiddenEntries,t=this.#I.entriesModifications.expandableEntries;this.#k.setInitialBreadcrumbFromLoadedModifications(this.#I.initialBreadcrumb),this.#N(e,t),this.#L(this.#I.annotations)}#L(e){try{(e.entryLabels??[]).forEach((e=>{this.createAnnotation({type:"ENTRY_LABEL",entry:this.#M.eventForKey(e.entry,this.#t),label:e.label},!0)}));(e.labelledTimeRanges??[]).forEach((e=>{this.createAnnotation({type:"TIME_RANGE",bounds:e.bounds,label:e.label},!0)}));(e.linksBetweenEntries??[]).forEach((e=>{this.createAnnotation({type:"ENTRIES_LINK",state:"connected",entryFrom:this.#M.eventForKey(e.entryFrom,this.#t),entryTo:this.#M.eventForKey(e.entryTo,this.#t)},!0)}))}catch(e){console.warn("Failed to apply stored annotations",e)}}#N(e,t){try{const i=e.map((e=>this.#M.eventForKey(e,this.#t))),n=t.map((e=>this.#M.eventForKey(e,this.#t)));this.#C.setHiddenAndExpandableEntries(i,n)}catch(e){console.warn("Failed to apply entriesFilter modifications",e),this.#C.setHiddenAndExpandableEntries([],[])}}}var Ge=Object.freeze({__proto__:null,AnnotationModifiedEvent:We,ModificationsManager:Ve});const ze={onIgnoreList:"On ignore list ({rule})",mainS:"Main — {PH1}",main:"Main",frameS:"Frame — {PH1}",workerS:"`Worker` — {PH1}",workerSS:"`Worker`: {PH1} — {PH2}",dedicatedWorker:"Dedicated `Worker`",threadS:"Thread {PH1}",raster:"Raster",threadPool:"Thread pool",rasterizerThreadS:"Rasterizer thread {PH1}",threadPoolThreadS:"Thread pool worker {PH1}",bidderWorkletS:"Bidder Worklet — {PH1}",bidderWorklet:"Bidder Worklet",sellerWorklet:"Seller Worklet",unknownWorklet:"Auction Worklet",workletService:"Auction Worklet service",sellerWorkletS:"Seller Worklet — {PH1}",unknownWorkletS:"Auction Worklet — {PH1}",workletServiceS:"Auction Worklet service — {PH1}"},je=e.i18n.registerUIStrings("panels/timeline/ThreadAppender.ts",ze),$e=e.i18n.getLocalizedString.bind(void 0,je);class Ke{appenderName="Thread";#d;#e;#t;#D=[];#B;#H;#U;#O;#_=!1;#W=!1;threadType="MAIN_THREAD";isOnMainFrame;#V=d.Runtime.experiments.isEnabled("timeline-show-all-events");#G="";#z=null;constructor(e,t,i,n,r,a,s,o){if(this.#e=e,this.#d=new l.Color.Generator({min:30,max:330,count:void 0},{min:50,max:80,count:3},85),this.#d.setColorForID("","#f2ecdc"),this.#t=t,this.#H=i,this.#U=n,!s||!o)throw new Error(`Could not find data for thread with id ${n} in process with id ${i}`);this.#D=s,this.#B=o,this.#O=r||$e(ze.threadS,{PH1:n}),this.isOnMainFrame=Boolean(this.#t.Renderer?.processes.get(i)?.isOnMainFrame),this.threadType=a,this.#t.AuctionWorklets.worklets.has(i)&&(this.appenderName="Thread_AuctionWorklet"),this.#G=this.#t.Renderer?.processes.get(this.#H)?.url||""}processId(){return this.#H}threadId(){return this.#U}appendTrackAtLevel(e,t=!1){return 0===this.#D.length?e:(this.#_=t,this.#j(e))}setHeaderNestingLevel(e){this.#z=e}#$(e){this.#W||("RASTERIZER"===this.threadType||"THREAD_POOL"===this.threadType?this.#K(e,this.threadType):this.#r(e),this.#W=!0)}setHeaderAppended(e){this.#W=e}headerAppended(){return this.#W}#r(e){const t=W({shareHeaderLine:!1,collapsible:this.#D.length>0});null!==this.#z&&(t.nestingLevel=this.#z);const i=V(this.#q(),e,this.trackName(),t,!0,this.#_,!0);this.#e.registerTrackForGroup(i,this)}#q(){switch(this.threadType){case"MAIN_THREAD":return this.isOnMainFrame?"thread.main":"thread.frame";case"WORKER":return"thread.worker";case"RASTERIZER":return"thread.rasterizer";case"AUCTION_WORKLET":return"thread.auction-worklet";case"OTHER":return"thread.other";case"CPU_PROFILE":return"thread.cpu-profile";case"THREAD_POOL":return"thread.pool";default:return null}}#K(e,t){const i=this.#e.getCurrentTrackCountForThreadType(t);if(0===i){const t=W({shareHeaderLine:!1,collapsible:this.#D.length>0}),i=V(null,e,this.trackName(),t,!1,this.#_);this.#e.getFlameChartTimelineData().groups.push(i)}const n=W({padding:2,nestingLevel:1,collapsible:!1}),r="RASTERIZER"===this.threadType?$e(ze.rasterizerThreadS,{PH1:i+1}):$e(ze.threadPoolThreadS,{PH1:i+1}),a=V(this.#q(),e,r,n,!0,this.#_);this.#e.registerTrackForGroup(a,this)}trackName(){let e=null;switch(this.threadType){case"MAIN_THREAD":e=this.isOnMainFrame?$e(ze.mainS,{PH1:this.#G}):$e(ze.frameS,{PH1:this.#G});break;case"CPU_PROFILE":e=$e(ze.main);break;case"WORKER":e=this.#Y();break;case"RASTERIZER":e=$e(ze.raster);break;case"THREAD_POOL":e=$e(ze.threadPool);break;case"OTHER":break;case"AUCTION_WORKLET":e=this.#J();break;default:return r.assertNever(this.threadType,`Unknown thread type: ${this.threadType}`)}let t="";return this.#t.Meta.traceIsGeneric&&(t+=` (${this.threadId()})`),(e||this.#O)+t}getUrl(){return this.#G}getEntries(){return this.#D}#J(){const e=this.#t.AuctionWorklets.worklets.get(this.#H);if(!e)return $e(ze.unknownWorklet);const t=e.host?`https://${e.host}`:"",i=t.length>0,n=e.args.data.utilityThread.tid===this.#U,a=e.args.data.v8HelperThread.tid===this.#U;if(n)return i?$e(ze.workletServiceS,{PH1:t}):$e(ze.workletService);if(a)switch(e.type){case"seller":return i?$e(ze.sellerWorkletS,{PH1:t}):$e(ze.sellerWorklet);case"bidder":return i?$e(ze.bidderWorkletS,{PH1:t}):$e(ze.bidderWorklet);case"unknown":return i?$e(ze.unknownWorkletS,{PH1:t}):$e(ze.unknownWorklet);default:r.assertNever(e.type,`Unexpected Auction Worklet Type ${e.type}`)}return i?$e(ze.unknownWorkletS,{PH1:t}):$e(ze.unknownWorklet)}#Y(){const e=this.#t.Renderer?.processes.get(this.#H)?.url||"",t=this.#t.Workers.workerIdByThread.get(this.#U),i=t?this.#t.Workers.workerURLById.get(t):e;let n=i?$e(ze.workerS,{PH1:i}):$e(ze.dedicatedWorker);const r=void 0!==t&&o.TargetManager.TargetManager.instance().targetById(t);return r&&(n=$e(ze.workerSS,{PH1:r.name(),PH2:e})),n}#j(e){return this.#X(this.#B.roots,e)}#X(e,t,i=!1){const n=Ve.activeManager()?.getEntriesFilter().invisibleEntries()??[];let r=t;for(const a of e){let e=t;const o=a.entry,l=s.IgnoreList.isIgnoreListedEntry(o);!n.includes(o)&&(Br(o,this.#t)||this.#V)&&!(l&&i)&&(this.#Z(o,t),e++);const d=this.#X(a.children,e,l);r=Math.max(d,r)}return r}#Z(e,t){this.#$(t);const i=this.#e.appendEventAtLevel(e,t,this);this.#Q(e,i)}#Q(e,i){const n=this.#e.getFlameChartTimelineData();Ve.activeManager()?.getEntriesFilter().isEntryExpandable(e)&&j(n,i,{type:"HIDDEN_DESCENDANTS_ARROW"});const r=this.#t.Warnings.perEvent.get(e);r&&(j(n,i,{type:"WARNING_TRIANGLE"}),r.includes("LONG_TASK")&&j(n,i,{type:"CANDY",startAtTime:t.Handlers.ModelHandlers.Warnings.LONG_MAIN_THREAD_TASK_THRESHOLD}))}colorForEvent(e){if(this.#t.Meta.traceIsGeneric)return e.name?`hsl(${r.StringUtilities.hashCode(e.name)%300+30}, 40%, 70%)`:"#ccc";if(t.Types.Events.isProfileCall(e))return"(idle)"===e.callFrame.functionName?s.EntryStyles.getCategoryStyles().idle.getComputedColorValue():"0"===e.callFrame.scriptId?s.EntryStyles.getCategoryStyles().scripting.getComputedColorValue():this.#d.colorForID(e.callFrame.url);const i=s.EntryStyles.getEventStyle(e.name)?.category.getComputedColorValue();return i||s.EntryStyles.getCategoryStyles().other.getComputedColorValue()}titleForEvent(e){if(s.IgnoreList.isIgnoreListedEntry(e)){const t=s.IgnoreList.getIgnoredReasonString(e);return $e(ze.onIgnoreList,{rule:t})}return s.EntryName.nameForEntry(e,this.#t)}setPopoverInfo(e,i){if(t.Types.Events.isParseHTML(e)){const t=e.args.beginData.startLine,n=e.args.endData?.endLine,r=e.args.beginData.url,a=u.ResourceUtils.displayNameForURL(r),s=-1!==n||n===t?`${t}...${n}`:t;i.title+=` - ${a} [${s}]`}const n=this.#t.Renderer.entryToNode.get(e)?.selfTime;i.formattedTime=G(e.dur,n)}}var qe=Object.freeze({__proto__:null,ThreadAppender:Ke});function Ye(e,t,i,n){const r=[...Xe(e,t,e.Initiators.eventToInitiator),...Ze(t,e.Initiators.initiatorToEvents)];return r.forEach((t=>function(e,t,i,n){if(i.includes(e.event)){let i=n.Renderer.entryToNode.get(e.event)?.parent;for(;i?.entry&&!t.includes(i?.entry);)i=i.parent??void 0;e.event=i?.entry??e.event,e.isEntryHidden=!0}if(i.includes(e.initiator)){let i=n.Renderer.entryToNode.get(e.initiator)?.parent;for(;i?.entry&&!t.includes(i?.entry);)i=i.parent??void 0;e.initiator=i?.entry??e.initiator,e.isInitiatorHidden=!0}return e}(t,n,i,e))),r}function Je(e,t){return Xe(e,t,e.NetworkRequests.eventToInitiator)}function Xe(e,t,i){const n=[];let r=t;const a=new Set;for(a.add(r);r;){const t=i.get(r);if(t){if(a.has(t))break;n.push({event:r,initiator:t}),r=t,a.add(r);continue}const s=e.Renderer.entryToNode.get(r);if(!s){r=null;break}r=s.parent?.entry||null}return n}function Ze(e,t){const i=[],n=t.get(e);return n&&n.forEach((t=>{i.push({event:t,initiator:e})})),i}var Qe=Object.freeze({__proto__:null,initiatorsDataToDraw:Ye,initiatorsDataToDrawForNetwork:Je}),et={cssText:`.timeline-flamechart-popover{overflow:hidden;padding:4px;margin:-4px}.timeline-flamechart-popover devtools-interaction-breakdown{margin-top:10px}.timeline-flamechart-popover span{margin-right:5px}.timeline-flamechart-popover span.popoverinfo-network-time{color:var(--sys-color-primary)}.timeline-flamechart-popover span.popoverinfo-time{color:var(--sys-color-green)}.timeline-flamechart-popover span.popoverinfo-warning{color:var(--sys-color-error)}.timeline-flamechart-popover span.popoverinfo-url-path,\n.timeline-flamechart-popover span.popoverinfo-url-origin{color:var(--sys-color-token-subtle);font-size:11px}.timeline-flamechart-popover span.popoverinfo-url-origin{font-style:italic}.timeline-flamechart-popover span.popoverinfo-warning *{color:inherit}.layout-shift-viz{position:relative;margin:var(--sys-size-8) var(--sys-size-5);outline:1px solid var(--sys-color-divider)}.layout-shift-viz-rect{outline:1px solid color-mix(in srgb,var(--color-background-inverted) 20%,var(--app-color-rendering));background-color:color-mix(in srgb,var(--color-background-inverted-opacity-0) 50%,var(--app-color-rendering-children));position:absolute;z-index:100}.layout-shift-viz > img{position:absolute;top:0;left:0}\n/*# sourceURL=${import.meta.resolve("./timelineFlamechartPopover.css")} */\n`};const tt={jsHeap:"JS heap",documents:"Documents",nodes:"Nodes",listeners:"Listeners",gpuMemory:"GPU memory",ss:"[{PH1} – {PH2}]",noEventsFound:"No memory usage data found within selected events."},it=e.i18n.registerUIStrings("panels/timeline/CountersGraph.ts",tt),nt=e.i18n.getLocalizedString.bind(void 0,it);class rt extends m.Widget.VBox{delegate;calculator;header;toolbar;graphsContainer;canvasContainer;canvas;timelineGrid;counters;counterUI;countersByName;gpuMemoryCounter;#ee=null;currentValuesBar;markerXPosition;#te=this.#ie.bind(this);#ne=document.createElement("div");#re=!1;constructor(t){super(),this.element.id="memory-graphs-container",this.delegate=t,this.calculator=new ot,this.header=new m.Widget.HBox,this.header.element.classList.add("timeline-memory-header"),this.header.show(this.element),this.toolbar=this.header.element.createChild("devtools-toolbar","timeline-memory-toolbar"),this.graphsContainer=new m.Widget.VBox,this.graphsContainer.show(this.element);const n=new m.Widget.VBoxWithResizeCallback(this.resize.bind(this));n.show(this.graphsContainer.element),this.createCurrentValuesBar(),this.canvasContainer=n.element,this.canvasContainer.id="memory-graphs-canvas-container",this.canvas=document.createElement("canvas"),this.canvasContainer.appendChild(this.canvas),this.canvas.id="memory-counters-graph";const r=document.createElement("p");r.innerText=nt(tt.noEventsFound),this.#ne.classList.add("no-events-found"),this.#ne.setAttribute("hidden","hidden"),this.#ne.appendChild(r),this.canvasContainer.appendChild(this.#ne),this.canvasContainer.addEventListener("mouseover",this.onMouseMove.bind(this),!0),this.canvasContainer.addEventListener("mousemove",this.onMouseMove.bind(this),!0),this.canvasContainer.addEventListener("mouseleave",this.onMouseLeave.bind(this),!0),this.canvasContainer.addEventListener("click",this.onClick.bind(this),!0),this.timelineGrid=new i.TimelineGrid.TimelineGrid,this.canvasContainer.appendChild(this.timelineGrid.dividersElement),this.counters=[],this.counterUI=[],this.countersByName=new Map,this.countersByName.set("jsHeapSizeUsed",this.createCounter(nt(tt.jsHeap),"js-heap-size-used","hsl(220, 90%, 43%)",e.ByteUtilities.bytesToString)),this.countersByName.set("documents",this.createCounter(nt(tt.documents),"documents","hsl(0, 90%, 43%)")),this.countersByName.set("nodes",this.createCounter(nt(tt.nodes),"nodes","hsl(120, 90%, 43%)")),this.countersByName.set("jsEventListeners",this.createCounter(nt(tt.listeners),"js-event-listeners","hsl(38, 90%, 43%)")),this.gpuMemoryCounter=this.createCounter(nt(tt.gpuMemory),"gpu-memory-used-kb","hsl(300, 90%, 43%)",e.ByteUtilities.bytesToString),this.countersByName.set("gpuMemoryUsedKB",this.gpuMemoryCounter),a.TraceBounds.onChange(this.#te)}#ie(e){if("RESET"===e.updateType||"VISIBLE_WINDOW"===e.updateType){const t=e.state.milli.timelineTraceWindow;this.calculator.setWindow(t.min,t.max),this.#ae()}}setModel(e,i){if(this.#ee=i,!i||!e)return;const n=t.Helpers.Timing.traceWindowMilliSeconds(e.Meta.traceBounds).min;this.calculator.setZeroTime(n);for(let e=0;e<this.counters.length;++e)this.counters[e].reset(),this.counterUI[e].reset();this.#ae();let r=0;for(let e=0;e<i.length;++e){const n=i[e];if(!t.Types.Events.isUpdateCounters(n))continue;r++;const a=n.args.data;if(!a)return;for(const e in a){const i=this.countersByName.get(e);if(i){const{startTime:r}=t.Helpers.Timing.eventTimingsMilliSeconds(n);i.appendSample(r,a[e])}}void 0!==a.gpuMemoryLimitKB&&this.gpuMemoryCounter.setLimit(a.gpuMemoryLimitKB)}this.#re=0===r}createCurrentValuesBar(){this.currentValuesBar=this.graphsContainer.element.createChild("div"),this.currentValuesBar.id="counter-values-bar"}createCounter(e,t,i,n){const r=new at;return this.counters.push(r),this.counterUI.push(new st(this,e,t,i,r,n)),r}resizerElement(){return this.header.element}resize(){const e=this.canvas.parentElement;this.canvas.width=e.clientWidth*window.devicePixelRatio,this.canvas.height=e.clientHeight*window.devicePixelRatio,this.calculator.setDisplayWidth(this.canvas.width),this.refresh()}#ae(){m.UIUtils.invokeOnceAfterBatchUpdate(this,this.refresh)}draw(){this.clear(),this.#re?this.#ne.removeAttribute("hidden"):this.#ne.setAttribute("hidden","hidden");for(const e of this.counters)e.calculateVisibleIndexes(this.calculator),e.calculateXValues(this.canvas.width);for(const e of this.counterUI)e.drawGraph(this.canvas)}onClick(e){const t=e.x-this.canvasContainer.getBoundingClientRect().left;let i,n=1/0;for(const e of this.counterUI){if(!e.counter.times.length)continue;const r=e.recordIndexAt(t),a=Math.abs(t*window.devicePixelRatio-e.counter.x[r]);a<n&&(n=a,i=e.counter.times[r])}void 0!==i&&this.#ee&&this.delegate.selectEntryAtTime(this.#ee,i)}onMouseLeave(e){delete this.markerXPosition,this.clearCurrentValueAndMarker()}clearCurrentValueAndMarker(){for(let e=0;e<this.counterUI.length;e++)this.counterUI[e].clearCurrentValueAndMarker()}onMouseMove(e){const t=e.x-this.canvasContainer.getBoundingClientRect().left;this.markerXPosition=t,this.refreshCurrentValues()}refreshCurrentValues(){if(void 0!==this.markerXPosition)for(let e=0;e<this.counterUI.length;++e)this.counterUI[e].updateCurrentValue(this.markerXPosition)}refresh(){this.timelineGrid.updateDividers(this.calculator),this.draw(),this.refreshCurrentValues()}clear(){const e=this.canvas.getContext("2d");if(!e)throw new Error("Unable to get canvas context");e.clearRect(0,0,e.canvas.width,e.canvas.height)}}class at{times;values;x;minimumIndex;maximumIndex;maxTime;minTime;limitValue;constructor(){this.times=[],this.values=[],this.x=[],this.minimumIndex=0,this.maximumIndex=0,this.maxTime=0,this.minTime=0}appendSample(e,t){this.values.length&&this.values[this.values.length-1]===t||(this.times.push(e),this.values.push(t))}reset(){this.times=[],this.values=[]}setLimit(e){this.limitValue=e}calculateBounds(){let e,t;for(let i=this.minimumIndex;i<=this.maximumIndex;i++){const n=this.values[i];(void 0===t||n<t)&&(t=n),(void 0===e||n>e)&&(e=n)}return t=t||0,e=e||1,this.limitValue&&(e>.5*this.limitValue&&(e=Math.max(e,this.limitValue)),t=Math.min(t,this.limitValue)),{min:t,max:e}}calculateVisibleIndexes(e){const t=e.minimumBoundary(),i=e.maximumBoundary();this.minimumIndex=r.NumberUtilities.clamp(r.ArrayUtilities.upperBound(this.times,t,r.ArrayUtilities.DEFAULT_COMPARATOR)-1,0,this.times.length-1),this.maximumIndex=r.NumberUtilities.clamp(r.ArrayUtilities.lowerBound(this.times,i,r.ArrayUtilities.DEFAULT_COMPARATOR),0,this.times.length-1),this.minTime=t,this.maxTime=i}calculateXValues(e){if(!this.values.length)return;const t=e/(this.maxTime-this.minTime);this.x=new Array(this.values.length);for(let e=this.minimumIndex+1;e<=this.maximumIndex;e++)this.x[e]=t*(this.times[e]-this.minTime)}}class st{countersPane;counter;formatter;setting;filter;range;value;graphColor;limitColor;graphYValues;verticalPadding;currentValueLabel;marker;constructor(e,t,i,n,a,s){this.countersPane=e,this.counter=a,this.formatter=s||r.NumberUtilities.withThousandsSeparator,this.setting=l.Settings.Settings.instance().createSetting("timeline-counters-graph-"+i,!0),this.setting.setTitle(t),this.filter=new m.Toolbar.ToolbarSettingCheckbox(this.setting,t),this.filter.inputElement.classList.add("-theme-preserve-input");const o=l.Color.parse(n);if(o){const e=o.setAlpha(.5).asString("rgba"),t=this.filter.element;e&&(t.style.backgroundColor=e),t.style.borderColor="transparent"}this.filter.inputElement.addEventListener("click",this.toggleCounterGraph.bind(this)),e.toolbar.appendToolbarItem(this.filter),this.range=this.filter.element.createChild("span","range"),this.value=e.currentValuesBar.createChild("span","memory-counter-value"),this.value.style.color=n,this.graphColor=n,o&&(this.limitColor=o.setAlpha(.3).asString("rgba")),this.graphYValues=[],this.verticalPadding=10,this.currentValueLabel=t,this.marker=e.canvasContainer.createChild("div","memory-counter-marker"),this.marker.style.backgroundColor=n,this.clearCurrentValueAndMarker()}reset(){this.range.textContent=""}setRange(e,t){const i=this.formatter(e),n=this.formatter(t);this.range.textContent=nt(tt.ss,{PH1:i,PH2:n})}toggleCounterGraph(){this.value.classList.toggle("hidden",!this.filter.checked()),this.countersPane.refresh()}recordIndexAt(e){return r.ArrayUtilities.upperBound(this.counter.x,e*window.devicePixelRatio,r.ArrayUtilities.DEFAULT_COMPARATOR,this.counter.minimumIndex+1,this.counter.maximumIndex+1)-1}updateCurrentValue(e){if(!this.visible()||!this.counter.values.length||!this.counter.x)return;const t=this.recordIndexAt(e),i=r.NumberUtilities.withThousandsSeparator(this.counter.values[t]);this.value.textContent=`${this.currentValueLabel}: ${i}`;const n=this.graphYValues[t]/window.devicePixelRatio;this.marker.style.left=e+"px",this.marker.style.top=n+"px",this.marker.classList.remove("hidden")}clearCurrentValueAndMarker(){this.value.textContent="",this.marker.classList.add("hidden")}drawGraph(e){const t=e.getContext("2d");if(!t)throw new Error("Unable to get canvas context");const i=e.width,n=e.height-2*this.verticalPadding;if(n<=0)return void(this.graphYValues=[]);const r=this.verticalPadding,a=this.counter,s=a.values;if(!s.length)return;const o=a.calculateBounds(),l=o.min,d=o.max;if(this.setRange(l,d),!this.visible())return;const c=this.graphYValues,h=d-l,p=h?n/h:1;t.save(),t.lineWidth=window.devicePixelRatio,t.lineWidth%2&&t.translate(.5,.5),t.beginPath();let m=s[a.minimumIndex],u=Math.round(r+n-(m-l)*p);t.moveTo(0,u);let g=a.minimumIndex;for(;g<=a.maximumIndex;g++){const e=Math.round(a.x[g]);t.lineTo(e,u);const i=s[g];void 0!==i&&(m=i),u=Math.round(r+n-(m-l)*p),t.lineTo(e,u),c[g]=u}if(c.length=g,t.lineTo(i,u),t.strokeStyle=this.graphColor,t.stroke(),a.limitValue){const e=Math.round(r+n-(a.limitValue-l)*p);t.moveTo(0,e),t.lineTo(i,e),this.limitColor&&(t.strokeStyle=this.limitColor),t.stroke()}t.closePath(),t.restore()}visible(){return this.filter.checked()}}class ot{minimumBoundaryInternal;maximumBoundaryInternal;workingArea;zeroTimeInternal;constructor(){this.minimumBoundaryInternal=0,this.maximumBoundaryInternal=0,this.workingArea=0,this.zeroTimeInternal=0}setZeroTime(e){this.zeroTimeInternal=e}computePosition(e){return(e-this.minimumBoundaryInternal)/this.boundarySpan()*this.workingArea}setWindow(e,t){this.minimumBoundaryInternal=e,this.maximumBoundaryInternal=t}setDisplayWidth(e){this.workingArea=e}formatValue(t,i){return e.TimeUtilities.preciseMillisToString(t-this.zeroTime(),i)}maximumBoundary(){return this.maximumBoundaryInternal}minimumBoundary(){return this.minimumBoundaryInternal}zeroTime(){return this.zeroTimeInternal}boundarySpan(){return this.maximumBoundaryInternal-this.minimumBoundaryInternal}}var lt=Object.freeze({__proto__:null,Calculator:ot,Counter:at,CounterUI:st,CountersGraph:rt});function dt(e,t){const i=o.TargetManager.TargetManager.instance(),n=e.Workers.workerIdByThread.get(t.tid);return n?i.targetById(n):i.primaryPageTarget()}var ct=Object.freeze({__proto__:null,targetForEvent:dt}),ht={cssText:`.token-variable{color:var(--sys-color-token-variable)}.token-property{color:var(--sys-color-token-property)}.token-type{color:var(--sys-color-token-type)}.token-variable-special{color:var(--sys-color-token-variable-special)}.token-definition{color:var(--sys-color-token-definition)}.token-builtin{color:var(--sys-color-token-builtin)}.token-number{color:var(--sys-color-token-number)}.token-string{color:var(--sys-color-token-string)}.token-string-special{color:var(--sys-color-token-string-special)}.token-atom{color:var(--sys-color-token-atom)}.token-keyword{color:var(--sys-color-token-keyword)}.token-comment{color:var(--sys-color-token-comment)}.token-meta{color:var(--sys-color-token-meta)}.token-invalid{color:var(--sys-color-error)}.token-tag{color:var(--sys-color-token-tag)}.token-attribute{color:var(--sys-color-token-attribute)}.token-attribute-value{color:var(--sys-color-token-attribute-value)}.token-inserted{color:var(--sys-color-token-inserted)}.token-deleted{color:var(--sys-color-token-deleted)}.token-heading{color:var(--sys-color-token-variable-special);font-weight:bold}.token-link{color:var(--sys-color-token-variable-special);text-decoration:underline}.token-strikethrough{text-decoration:line-through}.token-strong{font-weight:bold}.token-emphasis{font-style:italic}\n/*# sourceURL=${import.meta.resolve("./codeHighlighter.css")} */\n`},pt={cssText:`.image-preview-container{background:transparent;text-align:center;border-spacing:0}.image-preview-container img{margin:6px 0;max-width:100px;max-height:100px;background-image:var(--image-file-checker);user-select:text;vertical-align:top;-webkit-user-drag:auto}.image-container{padding:0}.image-container > div{min-height:50px;display:flex;align-items:center;justify-content:center;cursor:pointer}.image-container > div.start{justify-content:start}.image-preview-container .row{line-height:1.2;vertical-align:baseline}.image-preview-container .title{padding-right:0.5em;color:var(--sys-color-token-subtle);white-space:nowrap;&.start{text-align:start}&.center{text-align:end}}.image-preview-container .description{white-space:nowrap;text-align:left;color:var(--sys-color-on-surface)}.image-preview-container .description-link{max-width:20em}.image-preview-container .source-link{white-space:normal;word-break:break-all;color:var(--sys-color-primary);cursor:pointer}\n/*# sourceURL=${import.meta.resolve("./imagePreview.css")} */\n`};let mt=null;class ut{#se=new WeakSet;static instance(e={forceNew:!1}){return mt&&!e.forceNew||(mt=new ut),mt}registerFreshRecording(e){this.#se.add(e)}recordingIsFresh(e){return this.#se.has(e)}}var gt=Object.freeze({__proto__:null,Tracker:ut});let vt=null;class Tt{static instance(e={forceNew:null}){const t=Boolean(e.forceNew);return vt&&!t||(vt=new Tt),vt}static removeInstance(){vt=null}#oe=[];activeFilters(){return this.#oe}setFilters(e){this.#oe=e}isVisible(e){return this.#oe.every((t=>t.accept(e)))}}function yt(e){return{event:e}}function ft(e,i){return{bounds:t.Helpers.Timing.traceWindowFromMilliSeconds(e,i)}}function St(e){return Boolean(e&&"event"in e)}function wt(e){return Boolean(e&&"bounds"in e)}function bt(e){if(wt(e))return e.bounds;if(St(e)){const i=t.Helpers.Timing.eventTimingsMicroSeconds(e.event);return t.Helpers.Timing.traceWindowFromMicroSeconds(i.startTime,i.endTime)}r.assertNever(e,"Unknown selection type")}function Et(e,i){return St(e)&&St(i)?e.event===i.event:!(!wt(e)||!wt(i))&&t.Helpers.Timing.windowsEqual(e.bounds,i.bounds)}var Ct=Object.freeze({__proto__:null,rangeForSelection:bt,selectionFromEvent:yt,selectionFromRangeMicroSeconds:function(e,i){return{bounds:t.Helpers.Timing.traceWindowFromMicroSeconds(e,i)}},selectionFromRangeMilliSeconds:ft,selectionIsEvent:St,selectionIsRange:wt,selectionsEqual:Et});const kt={performance:"Performance",selfTime:"Self time",totalTime:"Total time",activity:"Activity",selectItemForDetails:"Select item for details.",percentPlaceholder:"{PH1} %",chromeExtensionsOverhead:"[`Chrome` extensions overhead]",vRuntime:"[`V8` Runtime]",unattributed:"[unattributed]",page:"Page",noGrouping:"No grouping",groupByActivity:"Group by activity",groupByCategory:"Group by category",groupByDomain:"Group by domain",groupByFrame:"Group by frame",groupBySubdomain:"Group by subdomain",groupByUrl:"Group by URL",groupByThirdParties:"Group by Third Parties",groupBy:"Group by",heaviestStack:"Heaviest stack",showHeaviestStack:"Show heaviest stack",hideHeaviestStack:"Hide heaviest stack",heaviestStackShown:"Heaviest stack sidebar shown",heaviestStackHidden:"Heaviest stack sidebar hidden",timelineStack:"Timeline stack",matchCase:"Match case",useRegularExpression:"Use regular expression",matchWholeWord:"Match whole word",bottomUp:"Bottom-up",viewBottomUp:"View Bottom-up",firstParty:"1st party",extension:"Extension"},It=e.i18n.registerUIStrings("panels/timeline/TimelineTreeView.ts",kt),Mt=e.i18n.getLocalizedString.bind(void 0,It);class xt extends(l.ObjectWrapper.eventMixin(m.Widget.VBox)){#le;searchResults;linkifier;dataGrid;lastHoveredProfileNode;textFilterInternal;taskFilter;startTime;endTime;splitWidget;detailsView;searchableView;currentThreadSetting;lastSelectedNodeInternal;root;currentResult;textFilterUI;caseSensitiveButton;regexButton;matchWholeWord;#t=null;#de=null;#ce=null;eventToTreeNode=new WeakMap;autoSelectFirstChildOnRefresh=!0;constructor(){super(),this.#le=null,this.element.classList.add("timeline-tree-view"),this.searchResults=[]}#he(e){const i=Tn.eventTitle(e)||e.name;return this.#t?i+":@"+t.Handlers.Helpers.getNonResolvedURL(e,this.#t):i}setSearchableView(e){this.searchableView=e}setModelWithEvents(e,t=null,i=null){this.#t=t,this.#le=e,this.#de=i,this.refreshTree()}entityMapper(){return this.#de}parsedTrace(){return this.#t}init(){this.linkifier=new S.Linkifier.Linkifier,this.taskFilter=new t.Extras.TraceFilter.ExclusiveNameFilter(["RunTask"]),this.textFilterInternal=new Pn,this.currentThreadSetting=l.Settings.Settings.instance().createSetting("timeline-tree-current-thread",0),this.currentThreadSetting.addChangeListener(this.refreshTree,this);const e=[];this.populateColumns(e),this.splitWidget=new m.SplitWidget.SplitWidget(!0,!0,"timeline-tree-view-details-split-widget");const i=new m.Widget.VBox,n=i.element.createChild("devtools-toolbar");n.setAttribute("jslog",`${v.toolbar()}`),n.wrappable=!0,this.populateToolbar(n),this.dataGrid=new w.SortableDataGrid.SortableDataGrid({displayName:Mt(kt.performance),columns:e,refreshCallback:void 0,deleteCallback:void 0}),this.dataGrid.addEventListener("SortingChanged",this.sortingChanged,this),this.dataGrid.element.addEventListener("mousemove",this.onMouseMove.bind(this),!0),this.dataGrid.element.addEventListener("mouseleave",(()=>this.dispatchEventToListeners("TreeRowHovered",{node:null}))),this.dataGrid.addEventListener("OpenedNode",this.onGridNodeOpened,this),this.dataGrid.setResizeMethod("last"),this.dataGrid.setRowContextMenuCallback(this.onContextMenu.bind(this)),this.dataGrid.asWidget().show(i.element),this.dataGrid.addEventListener("SelectedNode",this.updateDetailsForSelection,this),this.detailsView=new m.Widget.VBox,this.detailsView.element.classList.add("timeline-details-view","timeline-details-view-body"),this.splitWidget.setMainWidget(i),this.splitWidget.setSidebarWidget(this.detailsView),this.splitWidget.hideSidebar(),this.splitWidget.show(this.element),this.splitWidget.addEventListener("ShowModeChanged",this.onShowModeChanged,this)}lastSelectedNode(){return this.lastSelectedNodeInternal}updateContents(e){const i=bt(e),n=t.Helpers.Timing.traceWindowMicroSecondsToMilliSeconds(i);this.setRange(n.min,n.max)}setRange(e,t){this.startTime=e,this.endTime=t,this.refreshTree()}highlightEventInTree(e){const t=e&&this.dataGridElementForEvent(e);if((!e||t&&t!==this.#ce)&&this.#ce?.style.setProperty("background-color",""),e){const e=t;e&&(this.#ce=e,this.#ce.style.backgroundColor="var(--sys-color-yellow-container)")}}filters(){return[this.taskFilter,this.textFilterInternal,...Tt.instance().activeFilters()]}filtersWithoutTextFilter(){return[this.taskFilter,...Tt.instance().activeFilters()]}textFilter(){return this.textFilterInternal}exposePercentages(){return!1}populateToolbar(e){this.caseSensitiveButton=new m.Toolbar.ToolbarToggle(Mt(kt.matchCase),"match-case",void 0,"match-case"),this.caseSensitiveButton.addEventListener("Click",(()=>{this.#pe()}),this),e.appendToolbarItem(this.caseSensitiveButton),this.regexButton=new m.Toolbar.ToolbarToggle(Mt(kt.useRegularExpression),"regular-expression",void 0,"regular-expression"),this.regexButton.addEventListener("Click",(()=>{this.#pe()}),this),e.appendToolbarItem(this.regexButton),this.matchWholeWord=new m.Toolbar.ToolbarToggle(Mt(kt.matchWholeWord),"match-whole-word",void 0,"match-whole-word"),this.matchWholeWord.addEventListener("Click",(()=>{this.#pe()}),this),e.appendToolbarItem(this.matchWholeWord);const t=new m.Toolbar.ToolbarFilter;this.textFilterUI=t,t.addEventListener("TextChanged",this.#pe,this),e.appendToolbarItem(t)}selectedEvents(){return this.#le||[]}appendContextMenuItems(e,t){}selectProfileNode(e,t){const i=[];let n=e;for(;n;n=n.parent)i.push(n);for(let e=i.length-1;e>0;--e){const t=this.dataGridNodeForTreeNode(i[e]);t?.dataGrid&&t.expand()}const r=this.dataGridNodeForTreeNode(e);r?.dataGrid&&(r.reveal(),r.select(t))}refreshTree(){if(!this.element.parentElement)return;if(this.linkifier.reset(),this.dataGrid.rootNode().removeChildren(),!this.#t)return void this.updateDetailsForSelection();this.root=this.buildTree();const e=this.root.children();let t=0,i=0;const n=this.root.totalTime-this.root.selfTime;for(const n of e.values())t=Math.max(t,n.selfTime),i=Math.max(i,n.totalTime);for(const r of e.values()){const e=new Rt(r,n,t,i,this);for(const e of r.events)this.eventToTreeNode.set(e,r);this.dataGrid.insertChild(e)}this.sortingChanged(),this.updateDetailsForSelection(),this.searchableView&&this.searchableView.refreshSearch();const r=this.dataGrid.rootNode();this.autoSelectFirstChildOnRefresh&&r.children.length>0&&r.children[0].select(!0)}buildTree(){throw new Error("Not Implemented")}buildTopDownTree(e,i){return new t.Extras.TraceTree.TopDownRootNode(this.selectedEvents(),{filters:this.filters(),startTime:this.startTime,endTime:this.endTime,doNotAggregate:e,eventGroupIdCallback:i})}populateColumns(e){e.push({id:"self",title:Mt(kt.selfTime),width:"120px",fixedWidth:!0,sortable:!0}),e.push({id:"total",title:Mt(kt.totalTime),width:"120px",fixedWidth:!0,sortable:!0}),e.push({id:"activity",title:Mt(kt.activity),disclosure:!0,sortable:!0})}sortingChanged(){const e=this.dataGrid.sortColumnId();if(!e)return;const t=this.getSortingFunction(e);t&&this.dataGrid.sortNodes(t,!this.dataGrid.isSortOrderAscending())}getSortingFunction(e){const t=(e,t)=>{const i=t,n=e.profileNode.event,r=i.profileNode.event;if(!n||!r)return 0;const a=this.#he(n),s=this.#he(r);return a.localeCompare(s)};switch(e){case"start-time":return function(e,t){const i=t,n=e.profileNode.event,r=i.profileNode.event;if(!n||!r)return 0;return n.ts-r.ts};case"self":return function(e,t){const i=t;return e.profileNode.selfTime-i.profileNode.selfTime};case"total":return function(e,t){const i=t;return e.profileNode.totalTime-i.profileNode.totalTime};case"activity":case"site":return t;default:return console.assert(!1,"Unknown sort field: "+e),null}}#pe(){const e=this.textFilterUI?.value(),t=this.caseSensitiveButton?.isToggled()??!1,i=this.regexButton?.isToggled()??!1,n=this.matchWholeWord?.isToggled()??!1;this.textFilterInternal.setRegExp(e?r.StringUtilities.createSearchRegex(e,t,i,n):null),this.refreshTree()}onShowModeChanged(){"OnlyMain"!==this.splitWidget.showMode()&&(this.lastSelectedNodeInternal=void 0,this.updateDetailsForSelection())}updateDetailsForSelection(){const e=this.dataGrid.selectedNode?this.dataGrid.selectedNode.profileNode:null;if(e===this.lastSelectedNodeInternal)return;if("OnlyMain"===this.splitWidget.showMode())return;if(this.detailsView.detachChildWidgets(),this.detailsView.element.removeChildren(),this.lastSelectedNodeInternal=e,e&&this.showDetailsForNode(e))return;const t=this.detailsView.element.createChild("div","full-widget-dimmed-banner");m.UIUtils.createTextChild(t,Mt(kt.selectItemForDetails))}showDetailsForNode(e){return!1}onMouseMove(e){const t=e.target&&e.target instanceof Node?this.dataGrid.dataGridNodeFromNode(e.target):null,i=t?.profileNode;i!==this.lastHoveredProfileNode&&(this.lastHoveredProfileNode=i,this.onHover(i))}onHover(e){this.dispatchEventToListeners("TreeRowHovered",{node:e})}onClick(e){this.dispatchEventToListeners("TreeRowClicked",{node:e})}wasShown(){this.dataGrid.addEventListener("SelectedNode",this.#me,this)}childWasDetached(e){this.dataGrid.removeEventListener("SelectedNode",this.#me)}#me(e){this.onClick(e.data.profileNode),this.onHover(e.data.profileNode)}onGridNodeOpened(){const e=this.dataGrid.selectedNode;this.onHover(e.profileNode),this.updateDetailsForSelection()}onContextMenu(e,t){const i=t;i.linkElement&&e.appendApplicableItems(i.linkElement);const n=i.profileNode;n&&this.appendContextMenuItems(e,n)}dataGridElementForEvent(e){if(!e)return null;const t=this.eventToTreeNode.get(e);return(t&&this.dataGridNodeForTreeNode(t)?.element())??null}dataGridNodeForTreeNode(e){return Ft.get(e)||null}onSearchCanceled(){this.searchResults=[],this.currentResult=0}performSearch(e,t,i){if(this.searchResults=[],this.currentResult=0,!this.root)return;const n=e.toSearchRegex();this.searchResults=this.root.searchTree((e=>Tn.testContentMatching(e,n.regex,this.#t||void 0))),this.searchableView.updateSearchMatchesCount(this.searchResults.length)}jumpToNextSearchResult(){this.searchResults.length&&void 0!==this.currentResult&&(this.selectProfileNode(this.searchResults[this.currentResult],!1),this.currentResult=r.NumberUtilities.mod(this.currentResult+1,this.searchResults.length))}jumpToPreviousSearchResult(){this.searchResults.length&&void 0!==this.currentResult&&(this.selectProfileNode(this.searchResults[this.currentResult],!1),this.currentResult=r.NumberUtilities.mod(this.currentResult-1,this.searchResults.length))}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!0}}class Pt extends w.SortableDataGrid.SortableDataGridNode{populated;profileNode;treeView;grandTotalTime;maxSelfTime;maxTotalTime;linkElement;constructor(e,t,i,n,r){super(null,!1),this.populated=!1,this.profileNode=e,this.treeView=r,this.grandTotalTime=t,this.maxSelfTime=i,this.maxTotalTime=n,this.linkElement=null}createCell(e){return"activity"===e||"site"===e?this.createNameCell(e):this.createValueCell(e)||super.createCell(e)}createNameCell(e){const i=this.createTD(e),n=i.createChild("div","name-container"),r=n.createChild("div","activity-icon-container"),a=r.createChild("div","activity-icon"),s=n.createChild("div","activity-name"),o=this.profileNode.event;if(this.profileNode.isGroupNode()){const t=this.treeView.displayInfoForGroupNode(this.profileNode);if(s.textContent=t.name,a.style.backgroundColor=t.color,t.icon&&r.insertBefore(t.icon,a),"site"===e&&this.treeView instanceof _t){const e=this.treeView;let t="";if(e.nodeIsFirstParty(this.profileNode)?t=Mt(kt.firstParty):e.nodeIsExtension(this.profileNode)&&(t=Mt(kt.extension)),t){const e=n.createChild("div","entity-badge");e.textContent=t,m.ARIAUtils.setLabel(e,t)}}}else if(o){s.textContent=Tn.eventTitle(o);const e=this.treeView.parsedTrace(),i=e?dt(e,o):null,r=this.treeView.linkifier,l=Boolean(e&&ut.instance().recordingIsFresh(e));this.linkElement=Tn.linkifyTopCallFrame(o,i,r,l),this.linkElement&&n.createChild("div","activity-link").appendChild(this.linkElement),m.ARIAUtils.setLabel(a,Tn.eventStyle(o).category.title),a.style.backgroundColor=Tn.eventColor(o),t.Types.Extensions.isSyntheticExtensionEntry(o)&&(a.style.backgroundColor=h.ExtensionUI.extensionEntryColor(o))}return i}createValueCell(i){if("self"!==i&&"total"!==i&&"start-time"!==i&&"transfer-size"!==i)return null;let n,r,a,s=!1,o=!1,l=!1;const d=this.treeView;switch(i){case"start-time":{a=this.profileNode.event;const e=this.treeView.parsedTrace();if(!e)throw new Error("Unable to load trace data for tree view");const i=a&&t.Helpers.Timing.eventTimingsMilliSeconds(a);n=(i?.startTime??0)-t.Helpers.Timing.microToMilli(e.Meta.traceBounds.min)}break;case"self":n=this.profileNode.selfTime,r=this.maxSelfTime,s=!0,l=d instanceof _t;break;case"total":n=this.profileNode.totalTime,r=this.maxTotalTime,s=!0;break;case"transfer-size":n=this.profileNode.transferSize,o=!0;break;default:return null}const c=this.createTD(i);let h;return c.className="numeric-column",o?(c.setAttribute("title",e.ByteUtilities.formatBytesToKb(n)),h=c.createChild("div"),h.createChild("span").textContent=e.ByteUtilities.formatBytesToKb(n)):(c.setAttribute("title",e.TimeUtilities.preciseMillisToString(n,4)),h=c.createChild("div"),h.createChild("span").textContent=e.TimeUtilities.preciseMillisToString(n,1)),s&&this.treeView.exposePercentages()&&(h.createChild("span","percent-column").textContent=Mt(kt.percentPlaceholder,{PH1:(n/this.grandTotalTime*100).toFixed(1)})),r&&(h.classList.add("background-bar-text"),c.createChild("div","background-bar-container").createChild("div","background-bar").style.width=(100*n/r).toFixed(1)+"%"),l&&this.generateBottomUpButton(h),c}generateBottomUpButton(e){const t=new E.Button.Button;t.data={variant:"icon",iconName:"account-tree",size:"SMALL",toggledIconName:Mt(kt.bottomUp)},m.ARIAUtils.setLabel(t,Mt(kt.viewBottomUp)),t.addEventListener("click",(()=>this.#ue())),m.Tooltip.Tooltip.install(t,Mt(kt.bottomUp)),e.appendChild(t)}#ue(){this.treeView.dispatchEventToListeners("TreeRowHovered",{node:null}),this.treeView.dispatchEventToListeners("BottomUpButtonClicked",this.profileNode)}}class Rt extends Pt{constructor(e,t,i,n,r){super(e,t,i,n,r),this.setHasChildren(this.profileNode.hasChildren()),Ft.set(e,this)}populate(){if(!this.populated&&(this.populated=!0,this.profileNode.children))for(const e of this.profileNode.children().values()){const t=new Rt(e,this.grandTotalTime,this.maxSelfTime,this.maxTotalTime,this.treeView);for(const t of e.events)this.treeView.eventToTreeNode.set(t,e);this.insertChildOrdered(t)}}}const Ft=new WeakMap;class Lt extends xt{groupBySetting;stackView;constructor(){super(),this.groupBySetting=l.Settings.Settings.instance().createSetting("timeline-tree-group-by",Lt.GroupBy.None),this.groupBySetting.addChangeListener(this.refreshTree.bind(this)),this.init(),this.stackView=new Dt(this),this.stackView.addEventListener("SelectionChanged",this.onStackViewSelectionChanged,this)}setGroupBySetting(e){this.groupBySetting.set(e)}updateContents(e){super.updateContents(e);const t=this.dataGrid.rootNode();t.children.length&&t.children[0].select(!0),this.updateDetailsForSelection()}beautifyDomainName(e,t){return Lt.isExtensionInternalURL(e)?e=Mt(kt.chromeExtensionsOverhead):Lt.isV8NativeURL(e)?e=Mt(kt.vRuntime):e.startsWith("chrome-extension")&&(e=this.entityMapper()?.entityForEvent(t.event)?.name||e),e}displayInfoForGroupNode(e){const t=s.EntryStyles.getCategoryStyles(),i=Tn.eventColor(e.event),n=Mt(kt.unattributed),r="symbol"==typeof e.id?void 0:e.id;switch(this.groupBySetting.get()){case Lt.GroupBy.Category:{const e=r&&s.EntryStyles.stringIsEventCategory(r)?t[r]||t.other:{title:n,color:n};return{name:e.title,color:e.color,icon:void 0}}case Lt.GroupBy.Domain:case Lt.GroupBy.Subdomain:case Lt.GroupBy.ThirdParties:return{name:(r?this.beautifyDomainName(r,e):void 0)||n,color:i,icon:void 0};case Lt.GroupBy.EventName:if(!e.event)throw new Error("Unable to find event for group by operation");return{name:Tn.eventTitle(e.event),color:i,icon:void 0};case Lt.GroupBy.URL:break;case Lt.GroupBy.Frame:{const e=r?this.parsedTrace()?.PageFrames.frames.get(r):void 0;return{name:e?Tn.displayNameForFrame(e):Mt(kt.page),color:i,icon:void 0}}default:console.assert(!1,"Unexpected grouping type")}return{name:r||n,color:i,icon:void 0}}populateToolbar(e){super.populateToolbar(e);const t=Lt.GroupBy,i=[{label:Mt(kt.noGrouping),value:t.None},{label:Mt(kt.groupByActivity),value:t.EventName},{label:Mt(kt.groupByCategory),value:t.Category},{label:Mt(kt.groupByDomain),value:t.Domain},{label:Mt(kt.groupByFrame),value:t.Frame},{label:Mt(kt.groupBySubdomain),value:t.Subdomain},{label:Mt(kt.groupByUrl),value:t.URL},{label:Mt(kt.groupByThirdParties),value:t.ThirdParties}];e.appendToolbarItem(new m.Toolbar.ToolbarSettingComboBox(i,this.groupBySetting,Mt(kt.groupBy))),e.appendSpacer(),e.appendToolbarItem(this.splitWidget.createShowHideSidebarButton(Mt(kt.showHeaviestStack),Mt(kt.hideHeaviestStack),Mt(kt.heaviestStackShown),Mt(kt.heaviestStackHidden)))}buildHeaviestStack(e){console.assert(Boolean(e.parent),"Attempt to build stack for tree root");let t=[];for(let i=e;i?.parent;i=i.parent)t.push(i);t=t.reverse();for(let i=e;i?.children()?.size;){const e=Array.from(i.children().values());i=e.reduce(((e,t)=>e.totalTime>t.totalTime?e:t)),t.push(i)}return t}exposePercentages(){return!0}onStackViewSelectionChanged(){const e=this.stackView.selectedTreeNode();e&&this.selectProfileNode(e,!0)}showDetailsForNode(e){const t=this.buildHeaviestStack(e);return this.stackView.setStack(t,e),this.stackView.show(this.detailsView.element),!0}groupingFunction(e){const i=Lt.GroupBy;switch(e){case i.None:return null;case i.EventName:return e=>Tn.eventStyle(e).title;case i.Category:return e=>Tn.eventStyle(e).category.name;case i.Subdomain:case i.Domain:case i.ThirdParties:return this.domainByEvent.bind(this,e);case i.URL:return e=>{const i=this.parsedTrace();return i?t.Handlers.Helpers.getNonResolvedURL(e,i)??"":""};case i.Frame:return e=>t.Helpers.Trace.frameIDForEvent(e)||this.parsedTrace()?.Meta.mainFrameId||"";default:return console.assert(!1,`Unexpected aggregation setting: ${e}`),null}}domainByEvent(e,i){const n=this.parsedTrace();if(!n)return"";const r=t.Handlers.Helpers.getNonResolvedURL(i,n);if(!r){const t=this.entityMapper()?.entityForEvent(i);if(e===Lt.GroupBy.ThirdParties&&t){if(!t)return"";const e=t.domains[0],i=l.ParsedURL.ParsedURL.fromString(e);return"chrome-extension"===i?.scheme?`${i.scheme}://${i.host}`:t.name}return""}if(Lt.isExtensionInternalURL(r))return Lt.extensionInternalPrefix;if(Lt.isV8NativeURL(r))return Lt.v8NativePrefix;const a=l.ParsedURL.ParsedURL.fromString(r);if(!a)return"";if("chrome-extension"===a.scheme)return a.scheme+"://"+a.host;if(e===Lt.GroupBy.ThirdParties){const e=this.entityMapper()?.entityForEvent(i);return e?e.name:""}if(e===Lt.GroupBy.Subdomain)return a.host;if(/^[.0-9]+$/.test(a.host))return a.host;const s=/([^.]*\.)?[^.]*$/.exec(a.host);return s?.[0]||""}static isExtensionInternalURL(e){return e.startsWith(Lt.extensionInternalPrefix)}static isV8NativeURL(e){return e.startsWith(Lt.v8NativePrefix)}static extensionInternalPrefix="extensions::";static v8NativePrefix="native ";onHover(e){if(null===e||this.groupBySetting.get()!==Lt.GroupBy.ThirdParties)this.dispatchEventToListeners("TreeRowHovered",{node:e});else{const t=this.#ge(e);this.dispatchEventToListeners("TreeRowHovered",{node:e,events:t})}}onClick(e){if(null===e||this.groupBySetting.get()!==Lt.GroupBy.ThirdParties)this.dispatchEventToListeners("TreeRowClicked",{node:e});else{const t=this.#ge(e);this.dispatchEventToListeners("TreeRowClicked",{node:e,events:t})}}#ge(e){if(!e.event)return;const t=this.entityMapper()?.entityForEvent(e.event);if(!t)return e.events;const i=this.entityMapper()?.eventsForEntity(t);return i}}!function(e){let t;!function(e){e.None="None",e.EventName="EventName",e.Category="Category",e.Domain="Domain",e.Subdomain="Subdomain",e.URL="URL",e.Frame="Frame",e.ThirdParties="ThirdParties"}(t=e.GroupBy||(e.GroupBy={}))}(Lt||(Lt={}));class At extends Lt{constructor(){super(),this.element.setAttribute("jslog",`${v.pane("call-tree").track({resize:!0})}`),this.dataGrid.markColumnAsSortedBy("total",w.DataGrid.Order.Descending)}buildTree(){const e=this.groupBySetting.get();return this.buildTopDownTree(!1,this.groupingFunction(e))}}class Nt extends Lt{constructor(){super(),this.element.setAttribute("jslog",`${v.pane("bottom-up").track({resize:!0})}`),this.dataGrid.markColumnAsSortedBy("self",w.DataGrid.Order.Descending)}buildTree(){return new t.Extras.TraceTree.BottomUpRootNode(this.selectedEvents(),{textFilter:this.textFilter(),filters:this.filtersWithoutTextFilter(),startTime:this.startTime,endTime:this.endTime,eventGroupIdCallback:this.groupingFunction(this.groupBySetting.get()),calculateTransferSize:!0,forceGroupIdCallback:this.groupBySetting.get()===Lt.GroupBy.ThirdParties})}}class Dt extends(l.ObjectWrapper.eventMixin(m.Widget.VBox)){treeView;dataGrid;constructor(e){super();this.element.createChild("div","timeline-stack-view-header").textContent=Mt(kt.heaviestStack),this.treeView=e;const t=[{id:"total",title:Mt(kt.totalTime),fixedWidth:!0,width:"110px"},{id:"activity",title:Mt(kt.activity)}];this.dataGrid=new w.ViewportDataGrid.ViewportDataGrid({displayName:Mt(kt.timelineStack),columns:t,deleteCallback:void 0,refreshCallback:void 0}),this.dataGrid.setResizeMethod("last"),this.dataGrid.addEventListener("SelectedNode",this.onSelectionChanged,this),this.dataGrid.element.addEventListener("mouseenter",this.onMouseMove.bind(this),!0),this.dataGrid.element.addEventListener("mouseleave",(()=>this.dispatchEventToListeners("TreeRowHovered",null))),this.dataGrid.asWidget().show(this.element)}setStack(e,t){const i=this.dataGrid.rootNode();i.removeChildren();let n=null;const r=Math.max.apply(Math,e.map((e=>e.totalTime)));for(const a of e){const e=new Pt(a,r,r,r,this.treeView);i.appendChild(e),a===t&&(n=e)}n&&n.revealAndSelect()}onMouseMove(e){const t=e.target&&e.target instanceof Node?this.dataGrid.dataGridNodeFromNode(e.target):null,i=t?.profileNode;this.dispatchEventToListeners("TreeRowHovered",i)}selectedTreeNode(){const e=this.dataGrid.selectedNode;return e&&e.profileNode}onSelectionChanged(){this.dispatchEventToListeners("SelectionChanged")}}var Bt=Object.freeze({__proto__:null,get AggregatedTimelineTreeView(){return Lt},BottomUpTimelineTreeView:Nt,CallTreeTimelineTreeView:At,GridNode:Pt,TimelineStackView:Dt,TimelineTreeView:xt,TreeGridNode:Rt});const Ht={unattributed:"[unattributed]",firstOrThirdPartyName:"1st / 3rd party",transferSize:"Transfer size",mainThreadTime:"Main thread time"},Ut=e.i18n.registerUIStrings("panels/timeline/ThirdPartyTreeView.ts",Ht),Ot=e.i18n.getLocalizedString.bind(void 0,Ut);class _t extends xt{#ve=null;autoSelectFirstChildOnRefresh=!1;constructor(){super(),this.element.setAttribute("jslog",`${v.pane("third-party-tree").track({hover:!0})}`),this.init(),this.dataGrid.markColumnAsSortedBy("self",w.DataGrid.Order.Descending),this.dataGrid.setResizeMethod("nearest"),this.dataGrid.expandNodesWhenArrowing=!1}buildTree(){const e=this.parsedTrace(),i=this.entityMapper();if(!e||!i)return new t.Extras.TraceTree.BottomUpRootNode([],{textFilter:this.textFilter(),filters:this.filtersWithoutTextFilter(),startTime:this.startTime,endTime:this.endTime,eventGroupIdCallback:this.groupingFunction.bind(this)});const n=this.selectedEvents().sort(t.Helpers.Trace.eventTimeComparator),r=new t.Extras.TraceFilter.VisibleEventsFilter(s.EntryStyles.visibleTypes().concat(["SyntheticNetworkRequest"]));return new t.Extras.TraceTree.BottomUpRootNode(n,{textFilter:this.textFilter(),filters:[r],startTime:this.startTime,endTime:this.endTime,eventGroupIdCallback:this.groupingFunction.bind(this),calculateTransferSize:!0,forceGroupIdCallback:!0})}selectProfileNode(){}groupingFunction(e){const t=this.entityMapper()?.entityForEvent(e);return t?t.name:""}populateColumns(e){e.push({id:"site",title:Ot(Ht.firstOrThirdPartyName),width:"345px",sortable:!0},{id:"transfer-size",title:Ot(Ht.transferSize),width:"100px",fixedWidth:!0,sortable:!0},{id:"self",title:Ot(Ht.mainThreadTime),width:"120px",fixedWidth:!0,sortable:!0})}populateToolbar(){}compareTransferSize(e,t){const i=t;return(e.profileNode.transferSize??0)-(i.profileNode.transferSize??0)}sortingChanged(){const e=this.dataGrid.sortColumnId();if(!e)return;let t;if("transfer-size"===e)t=this.compareTransferSize.bind(this);else t=super.getSortingFunction(e);t&&this.dataGrid.sortNodes(t,!this.dataGrid.isSortOrderAscending())}onHover(e){if(!e)return void this.dispatchEventToListeners("TreeRowHovered",{node:null});this.#Te(e);const t=this.#Te(e);this.dispatchEventToListeners("TreeRowHovered",{node:e,events:t&&t.length>0?t:void 0})}onClick(e){if(!e)return void this.dispatchEventToListeners("TreeRowClicked",{node:null});const t=this.#Te(e);this.dispatchEventToListeners("TreeRowClicked",{node:e,events:t&&t.length>0?t:void 0})}#Te(e){const t=this.entityMapper();if(!t)return null;const i=t.entityForEvent(e.event);return i?t.eventsForEntity(i)??[]:[]}displayInfoForGroupNode(e){const t=Ot(Ht.unattributed),i="symbol"==typeof e.id?void 0:e.id;return{name:(i?this.entityMapper()?.entityForEvent(e.event)?.name||i:void 0)||t,color:"gray",icon:void 0}}extractThirdPartySummary(e){if(!this.#ve)return{transferSize:0};const t=this.#ve.entityByEvent.get(e.event);if(!t)return{transferSize:0};const i=this.#ve.summaries.byEntity.get(t);return i?{transferSize:i.transferSize}:{transferSize:0}}nodeIsFirstParty(e){const t=this.entityMapper();if(!t)return!1;return t.firstPartyEntity()===t.entityForEvent(e.event)}nodeIsExtension(e){const t=this.entityMapper();if(!t)return!1;const i=t.entityForEvent(e.event);return Boolean(i)&&"Chrome Extension"===i?.category}}class Wt extends m.Widget.WidgetElement{#ye;set treeView(e){this.#ye=e}constructor(){super(),this.style.display="contents"}createWidget(){const e=new m.Widget.Widget(!1,void 0,this);return e.contentElement.style.display="contents",this.#ye&&this.#ye.show(e.contentElement),e}}customElements.define("devtools-performance-third-party-tree-view",Wt);var Vt=Object.freeze({__proto__:null,ThirdPartyTreeElement:Wt,ThirdPartyTreeViewWidget:_t});const Gt={empty:"(empty)",selectJavascriptVmInstance:"Select JavaScript VM instance"},zt=e.i18n.registerUIStrings("panels/timeline/IsolateSelector.ts",Gt),jt=e.i18n.getLocalizedString.bind(void 0,zt);class $t extends m.Toolbar.ToolbarItem{menu;options;items;itemByIsolate=new Map;constructor(){const e=new R.SelectMenu.SelectMenu;super(e),this.menu=e,e.buttonTitle=jt(Gt.selectJavascriptVmInstance),e.showArrow=!0,e.style.whiteSpace="normal",e.addEventListener("selectmenuselected",this.#fe.bind(this)),o.IsolateManager.IsolateManager.instance().observeIsolates(this),o.TargetManager.TargetManager.instance().addEventListener("NameChanged",this.targetChanged,this),o.TargetManager.TargetManager.instance().addEventListener("InspectedURLChanged",this.targetChanged,this)}#Se(e,t){const i=new Map;for(const t of e.models()){const e=t.target(),n=o.TargetManager.TargetManager.instance().rootTarget()!==e?e.name():"",r=new l.ParsedURL.ParsedURL(e.inspectedURL()),a=r.isValid?r.domain():"",s=e.decorateLabel(a&&n?`${a}: ${n}`:n||a||jt(Gt.empty));i.set(s,(i.get(s)||0)+1)}t.removeChildren();for(const[e,n]of i){const i=n>1?`${e} (${n})`:e;t.createChild("div").textContent=i}}#fe(e){this.itemByIsolate.forEach(((t,i)=>{if(t.selected=t.value===e.itemValue,t.selected){const e=t.textContent?.slice(0,29);this.menu.buttonTitle=e||jt(Gt.empty);const n=i.runtimeModel();m.Context.Context.instance().setFlavor(o.CPUProfilerModel.CPUProfilerModel,n?.target().model(o.CPUProfilerModel.CPUProfilerModel)??null)}}))}isolateAdded(e){const t=new R.Menu.MenuItem;this.menu.appendChild(t),t.value=e.id(),this.itemByIsolate.set(e,t),this.#Se(e,t)}isolateRemoved(e){const t=this.itemByIsolate.get(e);t&&(t.selected&&(this.menu.buttonTitle=jt(Gt.selectJavascriptVmInstance),m.Context.Context.instance().setFlavor(o.CPUProfilerModel.CPUProfilerModel,null)),this.menu.removeChild(t))}isolateChanged(e){const t=this.itemByIsolate.get(e);t&&this.#Se(e,t)}targetChanged(e){const t=e.data.model(o.RuntimeModel.RuntimeModel);if(!t)return;const i=o.IsolateManager.IsolateManager.instance().isolateByModel(t);i&&this.isolateChanged(i)}}const Kt={learnmore:"Learn more",wasd:"WASD",clickTheRecordButtonSOrHitSTo:"Click the record button {PH1} or hit {PH2} to start a new recording.",afterRecordingSelectAnAreaOf:"After recording, select an area of interest in the overview by dragging. Then, zoom and pan the timeline with the mousewheel or {PH1} keys. {PH2}"},qt=e.i18n.registerUIStrings("panels/timeline/ReactNativeTimelineLandingPage.ts",Kt),Yt=e.i18n.getLocalizedString.bind(void 0,qt);class Jt extends m.Widget.VBox{toggleRecordAction;constructor(e){super(),this.toggleRecordAction=e,this.contentElement.classList.add("timeline-landing-page","fill"),this.renderLegacyLandingPage()}renderLegacyLandingPage(){function t(e,t){const i=document.createElement(e);return i.textContent=t,i}const i=m.XLink.XLink.create("https://developer.chrome.com/docs/devtools/evaluate-performance/",Yt(Kt.learnmore),void 0,void 0,"learn-more"),n=t("b",m.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction("timeline.toggle-recording")[0].title()),r=t("b",Yt(Kt.wasd));this.contentElement.classList.add("legacy");const a=this.contentElement.createChild("div"),s=m.UIUtils.createInlineButton(m.Toolbar.Toolbar.createActionButton(this.toggleRecordAction));a.createChild("p").appendChild(e.i18n.getFormatLocalizedString(qt,Kt.clickTheRecordButtonSOrHitSTo,{PH1:s,PH2:n})),a.createChild("p").appendChild(e.i18n.getFormatLocalizedString(qt,Kt.afterRecordingSelectAnAreaOf,{PH1:r,PH2:i}))}}function*Xt(e){if(yield"[\n",e.length>0){const t=e[Symbol.iterator](),i=t.next().value;yield` ${JSON.stringify(i)}`;let n=1e4,r="";for(const e of t)r+=`,\n ${JSON.stringify(e)}`,n--,0===n&&(yield r,n=1e4,r="");yield r}yield"\n]"}function*Zt(e,t){t?.enhancedTraceVersion&&(t={enhancedTraceVersion:t.enhancedTraceVersion,...t}),yield`{"metadata": ${JSON.stringify(t||{},null,2)}`,yield',\n"traceEvents": ',yield*Xt(e),yield"}\n"}function Qt(e){return JSON.stringify(e)}var ei=Object.freeze({__proto__:null,arrayOfObjectsJsonGenerator:Xt,cpuprofileJsonGenerator:Qt,traceJsonGenerator:Zt});const ti={tracingNotSupported:"Performance trace recording not supported for this type of target"},ii=e.i18n.registerUIStrings("panels/timeline/TimelineController.ts",ti),ni=e.i18n.getLocalizedString.bind(void 0,ii);class ri{primaryPageTarget;rootTarget;tracingManager;#we=[];#be=[];#Ee=null;#Ce=null;client;tracingCompletePromise=null;constructor(e,i,n){this.primaryPageTarget=i,this.rootTarget=e,this.tracingManager=e.model(t.TracingManager.TracingManager),this.client=n}async dispose(){this.tracingManager&&await this.tracingManager.reset()}async startRecording(e){function i(e){return"disabled-by-default-"+e}const n=[d.Runtime.experiments.isEnabled("timeline-show-all-events")?"*":"-*",t.Types.Events.Categories.Console,t.Types.Events.Categories.Loading,t.Types.Events.Categories.UserTiming,"devtools.timeline",i("devtools.target-rundown"),i("devtools.timeline.frame"),i("devtools.timeline.stack"),i("devtools.timeline"),i("devtools.v8-source-rundown"),i("v8.compile"),i("v8.inspector"),i("v8.cpu_profiler.hires"),i("lighthouse"),"v8.execute","v8","cppgc","navigation,rail"];d.Runtime.experiments.isEnabled("timeline-compiled-sources")&&n.push(i("devtools.v8-source-rundown-sources")),d.Runtime.experiments.isEnabled("timeline-v8-runtime-call-stats")&&e.enableJSSampling&&n.push(i("v8.runtime_stats_sampling")),e.enableJSSampling&&n.push(i("v8.cpu_profiler")),d.Runtime.experiments.isEnabled("timeline-invalidation-tracking")&&n.push(i("devtools.timeline.invalidationTracking")),e.capturePictures&&n.push(i("devtools.timeline.layers"),i("devtools.timeline.picture"),i("blink.graphics_context_annotations")),e.captureFilmStrip&&n.push(i("devtools.screenshot")),e.captureSelectorStats&&n.push(i("blink.debug")),await A.LiveMetrics.instance().disable(),o.TargetManager.TargetManager.instance().addModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.FrameNavigated,this.#ke,this),this.#be=[],this.#Ee=null,this.#Ce=Date.now();const r=await this.startRecordingWithCategories(n.join(","));return r.getError()&&await o.TargetManager.TargetManager.instance().resumeAllTargets(),r}async#ke(e){e.data.isPrimaryFrame()&&this.#be.push(e.data.url)}async stopRecording(){this.tracingManager&&this.tracingManager.stop(),o.TargetManager.TargetManager.instance().removeModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.FrameNavigated,this.#ke,this);const e=o.CPUThrottlingManager.CPUThrottlingManager.instance(),t=e.cpuThrottlingOption();e.setCPUThrottlingOption(o.CPUThrottlingManager.NoThrottlingOption),this.client.loadingStarted(),o.SourceMap.SourceMap.retainRawSourceMaps=!0;const[i]=await Promise.all([this.fetchFieldData(),o.TargetManager.TargetManager.instance().resumeAllTargets(),this.waitForTracingToStop()]).catch((e=>{throw o.SourceMap.SourceMap.retainRawSourceMaps=!1,e}));this.#Ee=i,e.setCPUThrottlingOption(t),await this.allSourcesFinished(),await A.LiveMetrics.instance().enable()}async rnPrepareForTraceCapturedInBackground(){this.tracingManager&&this.tracingManager.rnPrepareForTraceCapturedInBackground(this),await A.LiveMetrics.instance().disable(),this.client.loadingStarted(),await this.allSourcesFinished(),await A.LiveMetrics.instance().enable()}async fetchFieldData(){const e=g.CrUXManager.instance();if(!e.isEnabled()||!navigator.onLine)return null;const t=[...new Set(this.#be)];return await Promise.all(t.map((t=>e.getFieldDataForPage(t))))}async createMetadata(){const e=F.DeviceModeModel.DeviceModeModel.tryInstance();let i;return e?.type()===F.DeviceModeModel.Type.Device?i=e.device()?.title??void 0:e?.type()===F.DeviceModeModel.Type.Responsive&&(i="Responsive"),await t.Extras.Metadata.forNewRecording(!1,this.#Ce??void 0,i,this.#Ee??void 0)}async waitForTracingToStop(){this.tracingManager&&await(this.tracingCompletePromise?.promise)}async startRecordingWithCategories(e){if(!this.tracingManager)throw new Error(ni(ti.tracingNotSupported));await o.TargetManager.TargetManager.instance().suspendAllTargets("performance-timeline"),this.tracingCompletePromise=Promise.withResolvers();const t=await this.tracingManager.start(this,e,"");return await this.warmupJsProfiler(),L.ExtensionServer.ExtensionServer.instance().profilingStarted(),t}async warmupJsProfiler(){const e=this.primaryPageTarget.model(o.RuntimeModel.RuntimeModel);e&&await e.agent.invoke_evaluate({expression:"(async function(){ await 1; })()",throwOnSideEffect:!0})}traceEventsCollected(e){this.#we.push(...e)}tracingComplete(){this.tracingCompletePromise&&(this.tracingCompletePromise.resolve(void 0),this.tracingCompletePromise=null)}async allSourcesFinished(){L.ExtensionServer.ExtensionServer.instance().profilingStopped(),this.client.processingStarted();const e=await this.createMetadata();await this.client.loadingComplete(this.#we,null,e),this.client.loadingCompleteForTest(),o.SourceMap.SourceMap.retainRawSourceMaps=!1}tracingBufferUsage(e){this.client.recordingProgress(e)}eventsRetrievalProgress(e){this.client.loadingProgress(e)}}var ai=Object.freeze({__proto__:null,TimelineController:ri});const si={net:"NET",cpu:"CPU",heap:"HEAP",sSDash:"{PH1} – {PH2}"},oi=e.i18n.registerUIStrings("panels/timeline/TimelineEventOverview.ts",si),li=e.i18n.getLocalizedString.bind(void 0,oi);class di extends i.TimelineOverviewPane.TimelineOverviewBase{constructor(e,t){super(),this.element.id="timeline-overview-"+e,this.element.classList.add("overview-strip"),t&&(this.element.createChild("div","timeline-overview-strip-title").textContent=t)}renderBar(e,t,i,n,r){const a=e,s=t-e,o=this.context();o.fillStyle=r,o.fillRect(a,i,s,n)}}class ci extends di{#t;constructor(e){super("network",li(si.net)),this.#t=e}update(e,t){this.resetCanvas(),this.#Ie(e,t)}#Ie(e,i){if(!this.#t)return;const n=e&&i?{min:e,max:i,range:i-e}:t.Helpers.Timing.traceWindowMilliSeconds(this.#t.Meta.traceBounds),r=this.height()/2,a=this.width(),s=a/n.range,o=new Path2D,l=new Path2D;for(const e of this.#t.NetworkRequests.byTime){const i=t.Helpers.Network.isSyntheticNetworkRequestHighPriority(e)?o:l,{startTime:d,endTime:c}=t.Helpers.Timing.eventTimingsMilliSeconds(e),h=Math.max(Math.floor((d-n.min)*s),0),p=Math.min(Math.ceil((c-n.min)*s+1),a);i.rect(h,0,p-h,r-1)}const d=this.context();d.save(),d.fillStyle="hsl(214, 60%, 60%)",d.fill(o),d.translate(0,r),d.fillStyle="hsl(214, 80%, 80%)",d.fill(l),d.restore()}}const hi=new WeakMap;class pi extends di{backgroundCanvas;#t;#Me=!1;#xe;#Pe;constructor(e){super("cpu-activity",li(si.cpu)),this.#t=e,this.backgroundCanvas=this.element.createChild("canvas","fill background"),this.#xe=t.Helpers.Timing.traceWindowMilliSeconds(e.Meta.traceBounds).min,this.#Pe=t.Helpers.Timing.traceWindowMilliSeconds(e.Meta.traceBounds).max}#Re(e){if(t.Types.Events.isProfileCall(e)&&"(idle)"===e.callFrame.functionName)return s.EntryStyles.EventCategory.IDLE;return(s.EntryStyles.getEventStyle(e.name)?.category||s.EntryStyles.getCategoryStyles().other).name}resetCanvas(){super.resetCanvas(),this.#Me=!1,this.backgroundCanvas.width=this.element.clientWidth*window.devicePixelRatio,this.backgroundCanvas.height=this.element.clientHeight*window.devicePixelRatio}#Fe(e){const i=4*window.devicePixelRatio,n=this.width(),r=this.height(),a=r,o=this.#Pe-this.#xe,l=i/(n/o),d=s.EntryStyles.getCategoryStyles(),c=s.EntryStyles.getTimelineMainEventCategories(),h=c.indexOf(s.EntryStyles.EventCategory.OTHER);console.assert(0===c.indexOf(s.EntryStyles.EventCategory.IDLE));for(let e=0;e<c.length;++e)hi.set(d[c[e]],e);const p=(e,s)=>{const p=new vi(this.#xe,l,(function(e){let t=a;for(let n=1;n<c.length;++n){t-=(e[n]||0)/l*r,g[n].bezierCurveTo(m,v[n],m,t,m+i/2,t),v[n]=t}m+=i}));let m=0;const u=[],g=[],v=[];for(let e=0;e<c.length;++e)g[e]=new Path2D,g[e].moveTo(0,r),v[e]=r;const T=t.Helpers.Timing.milliToMicro(this.#xe),y=t.Helpers.Timing.milliToMicro(this.#Pe),f={min:T,max:y,range:t.Types.Timing.Micro(y-T)},S=t.Types.Timing.Micro(f.range>2e5?16e3:0);t.Helpers.TreeHelpers.walkEntireTree(s.entryToNode,s.tree,(e=>{const i=this.#Re(e);if(!i||"idle"===i)return;const n=t.Helpers.Timing.microToMilli(e.ts),r=u.length?u[u.length-1]:0;p.appendInterval(n,r);const a=c.indexOf(i);u.push(a||h)}),(function(e){const i=t.Helpers.Timing.microToMilli(e.ts)+t.Helpers.Timing.microToMilli(t.Types.Timing.Micro(e.dur||0)),n=u.pop();void 0!==i&&n&&p.appendInterval(i,n)}),f,S),p.appendInterval(this.#xe+o+l,0);for(let t=c.length-1;t>0;--t){g[t].lineTo(n,r);const i=d[c[t]].getComputedColorValue();e.fillStyle=i,e.fill(g[t]),e.strokeStyle="white",e.lineWidth=1,e.stroke(g[t])}},m=this.backgroundCanvas.getContext("2d");if(!m)throw new Error("Could not find 2d canvas");const u=t.Handlers.Threads.threadsInTrace(e),g=this.context();for(const e of u){p("MAIN_THREAD"===e.type||"CPU_PROFILE"===e.type?g:m,e)}!function(e){const t=4*window.devicePixelRatio;e.save(),e.lineWidth=t/Math.sqrt(8);for(let i=.5;i<n+r;i+=t)e.moveTo(i,0),e.lineTo(i-r,r);e.globalCompositeOperation="destination-out",e.stroke(),e.restore()}(m)}update(){const e=a.TraceBounds.BoundsManager.instance().state(),t=e?.milli.minimapTraceBounds;t&&(t.min===this.#xe&&t.max===this.#Pe&&this.#Me||(this.#xe=t.min,this.#Pe=t.max,this.resetCanvas(),this.#Me=!0,this.#Fe(this.#t)))}}class mi extends di{#t;constructor(e){super("responsiveness",null),this.#t=e}#Le(){const{topLevelRendererIds:e}=this.#t.Meta,t=new Set(["LONG_TASK","FORCED_REFLOW","IDLE_CALLBACK_OVER_TIME"]),i=new Set;for(const n of t){const t=this.#t.Warnings.perWarning.get(n);if(t)for(const n of t)e.has(n.pid)&&i.add(n)}return i}update(e,i){this.resetCanvas();const n=this.height(),r=e&&i?{min:t.Helpers.Timing.milliToMicro(e),max:t.Helpers.Timing.milliToMicro(i),range:t.Helpers.Timing.milliToMicro(t.Types.Timing.Milli(i-e))}:this.#t.Meta.traceBounds,a=r.range,s=this.width()/a,o=this.context(),l=new Path2D,d=new Path2D,c=this.#Le();for(const e of c)h(e);function h(e){const{startTime:i,duration:a}=t.Helpers.Timing.eventTimingsMicroSeconds(e),o=Math.round(s*(i-r.min)),c=Math.round(s*a);l.rect(o,0,c,n),d.moveTo(o+c,0),d.lineTo(o+c,n)}o.fillStyle="hsl(0, 80%, 90%)",o.strokeStyle="red",o.lineWidth=2*window.devicePixelRatio,o.fill(l),o.stroke(d)}}class ui extends di{frameToImagePromise;lastFrame=null;lastElement;drawGeneration;emptyImage;#Ae=null;constructor(e){super("filmstrip",null),this.element.setAttribute("jslog",`${v.section("film-strip")}`),this.frameToImagePromise=new Map,this.#Ae=e,this.lastFrame=null,this.lastElement=null,this.reset()}update(e,t){this.resetCanvas();const i=this.#Ae?this.#Ae.frames:[];if(!i.length)return;if(0===this.height())return void console.warn("TimelineFilmStrip could not be drawn as its canvas height is 0");const n=Symbol("drawGeneration");this.drawGeneration=n,this.imageByFrame(i[0]).then((i=>{if(this.drawGeneration!==n)return;if(!i?.naturalWidth||!i.naturalHeight)return;const r=this.height()-2*ui.Padding,a=Math.ceil(r*i.naturalWidth/i.naturalHeight),s=Math.min(200/i.naturalWidth,1);this.emptyImage=new Image(i.naturalWidth*s,i.naturalHeight*s),this.drawFrames(a,r,e,t)}))}async imageByFrame(e){let i=this.frameToImagePromise.get(e);if(!i){const n=t.Handlers.ModelHandlers.Screenshots.screenshotImageDataUri(e.screenshotEvent);i=m.UIUtils.loadImage(n),this.frameToImagePromise.set(e,i)}return await i}drawFrames(e,i,n,r){if(!e)return;if(!this.#Ae||this.#Ae.frames.length<1)return;const a=ui.Padding,s=this.width(),o=n??t.Helpers.Timing.microToMilli(this.#Ae.zeroTime),l=(r?r-o:t.Helpers.Timing.microToMilli(this.#Ae.spanTime))/s,d=this.context(),c=this.drawGeneration;d.beginPath();for(let n=a;n<s;n+=e+2*a){const r=t.Types.Timing.Milli(o+(n+e/2)*l),a=t.Helpers.Timing.milliToMicro(r),s=t.Extras.FilmStrip.frameClosestToTimestamp(this.#Ae,a);s&&(d.rect(n-.5,.5,e+1,i+1),this.imageByFrame(s).then(h.bind(this,n)))}function h(t,n){this.drawGeneration===c&&n&&d.drawImage(n,t,1,e,i)}d.strokeStyle="#ddd",d.stroke()}async overviewInfoPromise(e){if(!this.#Ae||0===this.#Ae.frames.length)return null;const i=this.calculator();if(!i)return null;const n=i.positionToTime(e),r=t.Helpers.Timing.milliToMicro(n),a=t.Extras.FilmStrip.frameClosestToTimestamp(this.#Ae,r);if(a===this.lastFrame)return this.lastElement;const s=a?this.imageByFrame(a):Promise.resolve(this.emptyImage),o=await s,l=document.createElement("div");return l.classList.add("frame"),o&&l.createChild("div","thumbnail").appendChild(o),this.lastFrame=a,this.lastElement=l,l}reset(){this.lastFrame=null,this.lastElement=null,this.frameToImagePromise=new Map}static Padding=2}class gi extends di{heapSizeLabel;#t;constructor(e){super("memory",li(si.heap)),this.heapSizeLabel=this.element.createChild("div","memory-graph-label"),this.#t=e}resetHeapSizeLabels(){this.heapSizeLabel.textContent=""}update(i,n){this.resetCanvas();const r=window.devicePixelRatio;if(0===this.#t.Memory.updateCountersByProcess.size)return void this.resetHeapSizeLabels();const a=Array.from(this.#t.Meta.topLevelRendererIds).map((e=>this.#t.Memory.updateCountersByProcess.get(e)||[])).filter((e=>e.length>0)),s=3*r;let o=0,l=1e11;const d=i&&n?{min:i,max:n,range:n-i}:t.Helpers.Timing.traceWindowMilliSeconds(this.#t.Meta.traceBounds),c=d.min,h=d.max;function p(e){const t=e.args.data;t&&t.jsHeapSizeUsed&&(o=Math.max(o,t.jsHeapSizeUsed),l=Math.min(l,t.jsHeapSizeUsed))}for(let e=0;e<a.length;e++)a[e].forEach(p);l=Math.min(l,o);const m=this.width(),u=this.height()-s,g=m/(h-c),v=(u-1)/Math.max(o-l,1),T=new Array(m);function y(e){const i=e.args.data;if(!i||!i.jsHeapSizeUsed)return;const{startTime:n}=t.Helpers.Timing.eventTimingsMilliSeconds(e),r=Math.round((n-c)*g),a=Math.round((i.jsHeapSizeUsed-l)*v);T[r]=Math.max(T[r]||0,a)}for(let e=0;e<a.length;e++)a[e].forEach(y);const f=this.context(),S=u+s+1;f.translate(.5,.5),f.beginPath(),f.moveTo(-1,S);let w=0,b=!0,E=0;for(let e=0;e<T.length;e++){if(void 0===T[e])continue;b&&(b=!1,w=T[e],f.lineTo(-1,u-w));const t=T[e];Math.abs(t-w)>2&&Math.abs(e-E)>1&&f.lineTo(e,u-w),w=t,f.lineTo(e,u-w),E=e}f.lineTo(m+1,u-w),f.lineTo(m+1,S),f.closePath(),f.fillStyle="hsla(220, 90%, 70%, 0.2)",f.fill(),f.lineWidth=1,f.strokeStyle="hsl(220, 90%, 70%)",f.stroke(),this.heapSizeLabel.textContent=li(si.sSDash,{PH1:e.ByteUtilities.bytesToString(l),PH2:e.ByteUtilities.bytesToString(o)})}}class vi{lastTime;quantDuration;callback;counters;remainder;constructor(e,t,i){this.lastTime=e,this.quantDuration=t,this.callback=i,this.counters=[],this.remainder=t}appendInterval(e,t){let i=e-this.lastTime;if(i<=this.remainder)return this.counters[t]=(this.counters[t]||0)+i,this.remainder-=i,void(this.lastTime=e);for(this.counters[t]=(this.counters[t]||0)+this.remainder,this.callback(this.counters),i-=this.remainder;i>=this.quantDuration;){const e=[];e[t]=this.quantDuration,this.callback(e),i-=this.quantDuration}this.counters=[],this.counters[t]=i,this.lastTime=e,this.remainder=this.quantDuration-i}}var Ti=Object.freeze({__proto__:null,Quantizer:vi,TimelineEventOverview:di,TimelineEventOverviewCPUActivity:pi,TimelineEventOverviewMemory:gi,TimelineEventOverviewNetwork:ci,TimelineEventOverviewResponsiveness:mi,TimelineFilmStripOverview:ui}),yi={cssText:`.drop-down{box-shadow:var(--drop-shadow);background:var(--sys-color-cdt-base-container)}.preview-item{border-bottom:1px solid var(--sys-color-divider);&:first-child{border-top:1px solid var(--sys-color-divider)}padding:6px 10px;position:relative;.metadata{margin-left:3px}&.selected::before{content:" ";position:absolute;top:0;bottom:0;left:0;width:2px;background-color:var(--sys-color-primary)}}.preview-item canvas{width:100%;height:100%}.text-details{flex-wrap:wrap;justify-content:space-between}.text-details > span{padding-left:var(--sys-size-5);padding-right:var(--sys-size-5)}.text-details .name{font:var(--sys-typescale-body4-medium)}.text-details .metadata{color:var(--sys-color-token-subtle);font:var(--sys-typescale-body4-regular);text-align:right}.screenshot-thumb{display:flex;border:1px solid var(--sys-color-surface3);margin:2px 4px}.screenshot-thumb img{margin:auto;max-width:100%;max-height:100%}.landing-page-item{font:var(--sys-typescale-body4-regular);display:flex;align-items:center;gap:var(--sys-size-5)}\n/*# sourceURL=${import.meta.resolve("./timelineHistoryManager.css")} */\n`};const fi=1/0,Si={currentSessionSS:"Current session: {PH1}. {PH2}",landingPageTitle:"Live metrics",nodeLandingPageTitle:"New recording",sD:"{PH1} #{PH2}",selectTimelineSession:"Select timeline session",dSlowdown:"{PH1}× slowdown"},wi=e.i18n.registerUIStrings("panels/timeline/TimelineHistoryManager.ts",Si),bi=e.i18n.getLocalizedString.bind(void 0,wi),Ei=function(){let t;return{format(...i){if(!t){const i={type:"unit",style:"short"};t=new Intl.ListFormat(e.DevToolsLocale.DevToolsLocale.instance().locale,i)}return t.format(...i)}}}();class Ci{recordings;action;nextNumberByDomain;buttonInternal;allOverviews;totalHeight;enabled;lastActiveTrace=null;#Ne;#De;constructor(e,t){this.recordings=[],this.#Ne=e,this.action=m.ActionRegistry.ActionRegistry.instance().getAction("timeline.show-history"),this.nextNumberByDomain=new Map,this.buttonInternal=new Pi(this.action),this.#De=bi(t?Si.nodeLandingPageTitle:Si.landingPageTitle),m.ARIAUtils.markAsMenuButton(this.buttonInternal.element),this.clear(),this.allOverviews=[{constructor:e=>{const t=this.#Ne?.getControls().find((e=>e instanceof mi));return t||new mi(e)},height:3},{constructor:e=>{const t=this.#Ne?.getControls().find((e=>e instanceof pi));return t||new pi(e)},height:20},{constructor:e=>{const t=this.#Ne?.getControls().find((e=>e instanceof ci));return t||new ci(e)},height:8}],this.totalHeight=this.allOverviews.reduce(((e,t)=>e+t.height),0),this.enabled=!0}addRecording(e){const t=e.filmStripForPreview;this.lastActiveTrace=e.data,this.recordings.unshift(e.data),this.#Be(e.data.parsedTraceIndex,e.parsedTrace,e.metadata,t);const i=this.title(e.data);this.buttonInternal.setText(i);const n=this.action.title();if(m.ARIAUtils.setLabel(this.buttonInternal.element,bi(Si.currentSessionSS,{PH1:i,PH2:n})),this.updateState(),this.recordings.length<=ki)return;const r=this.recordings.reduce(((e,t)=>a(e.parsedTraceIndex)<a(t.parsedTraceIndex)?e:t));function a(e){const t=Ci.dataForTraceIndex(e);if(!t)throw new Error("Unable to find data for model");return t.lastUsed}this.recordings.splice(this.recordings.indexOf(r),1)}setEnabled(e){this.enabled=e,this.updateState()}button(){return this.buttonInternal}clear(){this.recordings=[],this.lastActiveTrace=null,this.updateState(),this.buttonInternal.setText(this.#De),this.nextNumberByDomain.clear()}#He(){return this.lastActiveTrace?"LANDING_PAGE"===this.lastActiveTrace.type?fi:this.lastActiveTrace.parsedTraceIndex:-1}async showHistoryDropDown(){if(this.recordings.length<1||!this.enabled)return null;const e=await xi.show(this.recordings.map((e=>e.parsedTraceIndex)),this.#He(),this.buttonInternal.element,this.#De);if(null===e)return null;if(e===fi)return this.#Ue({type:"LANDING_PAGE"}),{type:"LANDING_PAGE"};const t=this.recordings.findIndex((t=>t.parsedTraceIndex===e));return t<0?(console.assert(!1,"selected recording not found"),null):(this.#Ue(this.recordings[t]),this.recordings[t])}cancelIfShowing(){xi.cancelIfShowing()}navigate(e){if(!this.enabled||null===this.lastActiveTrace)return null;if(!this.lastActiveTrace||"LANDING_PAGE"===this.lastActiveTrace.type)return null;const t=this.recordings.findIndex((e=>"TRACE_INDEX"===this.lastActiveTrace?.type&&"TRACE_INDEX"===e.type&&e.parsedTraceIndex===this.lastActiveTrace.parsedTraceIndex));if(t<0)return null;const i=r.NumberUtilities.clamp(t+e,0,this.recordings.length-1);return this.#Ue(this.recordings[i]),this.recordings[i]}navigateToLandingPage(){this.#Ue({type:"LANDING_PAGE"})}#Ue(e){if("TRACE_INDEX"===e.type){const t=Ci.dataForTraceIndex(e.parsedTraceIndex);if(!t)throw new Error("Unable to find data for model");t.lastUsed=Date.now()}this.lastActiveTrace=e;const t=this.title(e),i=this.action.title();this.buttonInternal.setText(t),m.ARIAUtils.setLabel(this.buttonInternal.element,bi(Si.currentSessionSS,{PH1:t,PH2:i}))}updateState(){this.action.setEnabled(this.recordings.length>=1&&this.enabled)}static previewElement(e){const t=Ci.dataForTraceIndex(e);if(!t)throw new Error("Unable to find data for model");return t.preview}title(e){if("LANDING_PAGE"===e.type)return this.#De;const t=Ci.dataForTraceIndex(e.parsedTraceIndex);if(!t)throw new Error("Unable to find data for model");return t.title}#Be(e,t,i,n){const r=l.ParsedURL.ParsedURL.fromString(t.Meta.mainFrameURL);let a=r?r.host:"";if(d.Runtime.experiments.isEnabled("react-native-specific-ui")){const e=o.TargetManager.TargetManager.instance().primaryPageTarget()?.model(o.ReactNativeApplicationModel.ReactNativeApplicationModel);null!=e&&(a=e.metadataCached?.appDisplayName||"")}const s=this.nextNumberByDomain.get(a)||1,c=bi(Si.sD,{PH1:a,PH2:s});this.nextNumberByDomain.set(a,s+1);const h=document.createElement("div");h.classList.add("preview-item"),h.classList.add("vbox"),h.setAttribute("jslog",`${v.dropDown("timeline.history-item").track({click:!0})}`),h.style.width=`${Ii}px`;const p={preview:h,title:c,lastUsed:Date.now()};Mi.set(e,p),h.appendChild(this.#Oe(i,a));const m=h.createChild("div","hbox");return m.appendChild(this.#_e(n)),m.appendChild(this.#We(t)),p.preview}#Oe(e,t){const i=document.createElement("div");i.classList.add("text-details"),i.classList.add("hbox");const n=i.createChild("span","name");if(n.textContent=t,m.ARIAUtils.setLabel(n,t),e){const t=[e.emulatedDeviceTitle,e.cpuThrottling?bi(Si.dSlowdown,{PH1:e.cpuThrottling}):void 0,e.networkThrottling].filter(Boolean);i.createChild("span","metadata").textContent=Ei.format(t)}return i}#_e(e){const i=document.createElement("div");i.classList.add("screenshot-thumb");if(i.style.width=1.5*this.totalHeight+"px",i.style.height=this.totalHeight+"px",!e)return i;const n=e.frames.at(-1);if(!n)return i;const r=t.Handlers.ModelHandlers.Screenshots.screenshotImageDataUri(n.screenshotEvent);return m.UIUtils.loadImage(r).then((e=>{e&&i.appendChild(e)})),i}#We(e){const t=document.createElement("div"),i=window.devicePixelRatio;t.style.width=Ii+"px",t.style.height=this.totalHeight+"px";const n=t.createChild("canvas");n.width=i*Ii,n.height=i*this.totalHeight;const r=n.getContext("2d");let a=0;for(const t of this.allOverviews){const n=t.constructor(e);n.update(),r&&r.drawImage(n.context().canvas,0,a,i*Ii,t.height*i),a+=t.height*i}return t}static dataForTraceIndex(e){return Mi.get(e)||null}}const ki=5,Ii=500,Mi=new Map;class xi{glassPane;listControl;focusRestorer;selectionDone;#De;constructor(e,t){this.#De=t,this.glassPane=new m.GlassPane.GlassPane,this.glassPane.setSizeBehavior("MeasureContent"),this.glassPane.setOutsideClickCallback((()=>this.close(null))),this.glassPane.setPointerEventsBehavior("BlockedByGlassPane"),this.glassPane.setAnchorBehavior("PreferBottom"),this.glassPane.element.addEventListener("blur",(()=>this.close(null)));const i=m.UIUtils.createShadowRootWithCoreStyles(this.glassPane.contentElement,{cssFile:yi}).createChild("div","drop-down"),n=new m.ListModel.ListModel;this.listControl=new m.ListControl.ListControl(n,this,m.ListControl.ListMode.NonViewport),this.listControl.element.addEventListener("mousemove",this.onMouseMove.bind(this),!1),n.replaceAll(e),m.ARIAUtils.markAsMenu(this.listControl.element),m.ARIAUtils.setLabel(this.listControl.element,bi(Si.selectTimelineSession)),i.appendChild(this.listControl.element),i.addEventListener("keydown",this.onKeyDown.bind(this),!1),i.addEventListener("click",this.onClick.bind(this),!1),this.focusRestorer=new m.UIUtils.ElementFocusRestorer(this.listControl.element),this.selectionDone=null}static show(e,t,i,n=bi(Si.landingPageTitle)){if(xi.instance)return Promise.resolve(null);const r=[...e];r.unshift(fi);return new xi(r,n).show(i,t)}static cancelIfShowing(){xi.instance&&xi.instance.close(null)}show(e,t){return xi.instance=this,this.glassPane.setContentAnchorBox(e.boxInWindow()),this.glassPane.show(this.glassPane.contentElement.ownerDocument),this.listControl.element.focus(),this.listControl.selectItem(t),new Promise((e=>{this.selectionDone=e}))}onMouseMove(e){const t=e.target.enclosingNodeOrSelfWithClass("preview-item"),i=t&&this.listControl.itemForNode(t);null!==i&&this.listControl.selectItem(i)}onClick(e){e.target.enclosingNodeOrSelfWithClass("preview-item")&&this.close(this.listControl.selectedItem())}onKeyDown(e){switch(e.key){case"Tab":case"Escape":this.close(null);break;case"Enter":this.close(this.listControl.selectedItem());break;default:return}e.consume(!0)}close(e){this.selectionDone&&this.selectionDone(e),this.focusRestorer.restore(),this.glassPane.hide(),xi.instance=null}createElementForItem(e){if(e===fi)return this.#Ve();const t=Ci.previewElement(e);return m.ARIAUtils.markAsMenuItem(t),t.classList.remove("selected"),t}#Ve(){const e=document.createElement("div");m.ARIAUtils.markAsMenuItem(e),e.classList.remove("selected"),e.classList.add("preview-item"),e.classList.add("landing-page-item"),e.style.width=`${Ii}px`;const t=N.Icon.create("arrow-back");e.appendChild(t);const i=document.createElement("span");return i.innerText=this.#De,e.appendChild(i),e}heightForItem(e){return console.assert(!1,"Should not be called"),0}isItemSelectable(e){return!0}selectedItemChanged(e,t,i,n){i&&i.classList.remove("selected"),n&&n.classList.add("selected")}updateSelectedItemARIA(e,t){return!1}static instance=null}class Pi extends m.Toolbar.ToolbarItem{contentElement;constructor(e){const t=document.createElement("button");t.classList.add("history-dropdown-button"),t.setAttribute("jslog",`${v.dropDown("history")}`),super(t),this.contentElement=this.element.createChild("span","content"),this.element.addEventListener("click",(()=>{e.execute()}),!1),this.setEnabled(e.enabled()),e.addEventListener("Enabled",(e=>this.setEnabled(e.data))),this.setTitle(e.title())}setText(e){this.contentElement.textContent=e}}var Ri=Object.freeze({__proto__:null,DropDown:xi,LANDING_PAGE_INDEX_DROPDOWN_CHOICE:fi,TimelineHistoryManager:Ci,ToolbarButton:Pi,maxRecordings:ki,previewWidth:Ii});const Fi={malformedTimelineDataS:"Malformed timeline data: {PH1}"},Li=e.i18n.registerUIStrings("panels/timeline/TimelineLoader.ts",Fi),Ai=e.i18n.getLocalizedString.bind(void 0,Li);class Ni{client;canceledCallback;buffer;firstRawChunk;totalSize;filter;#Ge;#we=[];#ze;#je;#$e;constructor(e){this.client=e,this.canceledCallback=null,this.buffer="",this.firstRawChunk=!0,this.filter=null,this.#Ge=!1,this.#ze=null,this.#$e=new Promise((e=>{this.#je=e}))}static async loadFromFile(e,t){const i=new Ni(t),n=new u.FileUtils.ChunkedFileReader(e);return i.canceledCallback=n.cancel.bind(n),i.totalSize=e.size,setTimeout((async()=>{!await n.read(i)&&n.error()&&i.reportErrorAndCancelLoading(n.error().message)})),i}static loadFromEvents(e,t){const i=new Ni(t);return window.setTimeout((async()=>{i.addEvents(e)})),i}static loadFromCpuProfile(e,i){const n=new Ni(i);n.#Ge=!0;try{const i=t.Helpers.SamplesIntegrator.SamplesIntegrator.createFakeTraceFromCpuProfile(e,t.Types.Events.ThreadID(1));window.setTimeout((async()=>{n.addEvents(i.traceEvents)}))}catch(e){console.error(e.stack)}return n}static async loadFromURL(e,t){const i=new Ni(t),n=new l.StringOutputStream.StringOutputStream;t.loadingStarted();const r=l.Settings.Settings.instance().moduleSetting("network.enable-remote-file-loading").get();return C.ResourceLoader.loadAsStream(e,null,n,(async function(e,t,r){if(!e)return i.reportErrorAndCancelLoading(r.message);try{const e=n.data(),t=JSON.parse(e);i.#Ke(t),await i.close()}catch(e){await i.close();const t=e instanceof Error?e.message:"";return i.reportErrorAndCancelLoading(Ai(Fi.malformedTimelineDataS,{PH1:t}))}}),r),i}#Ke(e){if("traceEvents"in e||Array.isArray(e)){const t=Array.isArray(e)?e:e.traceEvents;this.#qe(t)}else{if(!e.nodes)return void this.reportErrorAndCancelLoading(Ai(Fi.malformedTimelineDataS));this.#Ye(e),this.#Ge=!0}if("metadata"in e){this.#ze=e.metadata,1===this.#ze.cpuThrottling&&(this.#ze.cpuThrottling=void 0);const t="string"==typeof o.NetworkManager.NoThrottlingConditions.title?o.NetworkManager.NoThrottlingConditions.title:o.NetworkManager.NoThrottlingConditions.title();"No throttling"!==this.#ze.networkThrottling&&this.#ze.networkThrottling!==t||(this.#ze.networkThrottling=void 0)}}async addEvents(e){this.client?.loadingStarted();const t=15e4;for(let i=0;i<e.length;i+=t){const n=e.slice(i,i+t);this.#qe(n),this.client?.loadingProgress((i+n.length)/e.length),await new Promise((e=>window.setTimeout(e,0)))}this.close()}async cancel(){this.client&&(await this.client.loadingComplete([],null,null),this.client=null),this.canceledCallback&&this.canceledCallback()}async write(e,t){if(!this.client)return await Promise.resolve();if(this.buffer+=e,this.firstRawChunk)this.client.loadingStarted(),await new Promise((e=>requestAnimationFrame((()=>requestAnimationFrame(e))))),this.firstRawChunk=!1;else{let e;e=this.buffer.length/this.totalSize,e=e>1?e-Math.floor(e):e,this.client.loadingProgress(e)}if(t){let e;try{e=JSON.parse(this.buffer),this.#Ke(e)}catch(e){this.reportErrorAndCancelLoading(Ai(Fi.malformedTimelineDataS,{PH1:e.toString()}))}}else;}reportErrorAndCancelLoading(e){e&&l.Console.Console.instance().error(e),this.cancel()}async close(){this.client&&(this.client.processingStarted(),await this.finalizeTrace())}async finalizeTrace(){!this.#ze&&this.#Ge&&(this.#ze={dataOrigin:"CPUProfile"}),await this.client.loadingComplete(this.#we,this.filter,this.#ze),this.#je?.()}traceFinalizedForTest(){return this.#$e}#Ye(e){const i=t.Helpers.SamplesIntegrator.SamplesIntegrator.createFakeTraceFromCpuProfile(e,t.Types.Events.ThreadID(1));this.#qe(i.traceEvents)}#qe(e){this.#we=this.#we.concat(e)}}var Di=Object.freeze({__proto__:null,TimelineLoader:Ni}),Bi={cssText:`.timeline-minimap{position:relative}.timeline-sidebar-floating-icon{position:absolute;top:5px;left:10px;z-index:999;border:none;width:36px;height:36px;border-radius:50%;box-shadow:var(--drop-shadow-depth-1);background:var(--sys-color-cdt-base-container);&:hover{background:var(--sys-color-base-container-elevated)}}.timeline-minimap .overview-strip{margin-top:2px;justify-content:center}.timeline-minimap .overview-strip .timeline-overview-strip-title{color:var(--sys-color-token-subtle);font-size:10px;font-weight:bold;z-index:100;background-color:var(--sys-color-cdt-base-container);padding:0 4px;position:absolute;top:-2px;right:0}.timeline-minimap #timeline-overview-cpu-activity{flex-basis:20px}.timeline-minimap #timeline-overview-network{flex-basis:8px}.timeline-minimap #timeline-overview-filmstrip{flex-basis:30px}.timeline-minimap #timeline-overview-memory{flex-basis:20px}.timeline-minimap #timeline-overview-network::before,\n.timeline-minimap #timeline-overview-cpu-activity::before{content:"";position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid var(--divider-line);z-index:-200}.timeline-minimap .overview-strip .background{z-index:-10}.timeline-minimap #timeline-overview-responsiveness{flex-basis:5px;margin-top:0!important}.timeline-minimap #timeline-overview-input{flex-basis:6px}.timeline-minimap #timeline-overview-pane{flex:auto;position:relative;overflow:hidden}.timeline-minimap #timeline-overview-container{display:flex;flex-direction:column;flex:none;position:relative;overflow:hidden}.timeline-minimap #timeline-overview-container canvas{width:100%;height:100%}.timeline-minimap-dim-highlight-svg{width:100%;position:absolute;height:100%}.timeline-minimap .memory-graph-label{position:absolute;right:0;bottom:0;font-size:9px;color:var(--sys-color-token-subtle);white-space:nowrap;padding:0 4px;background-color:var(--sys-color-cdt-base-container)}\n/*# sourceURL=${import.meta.resolve("./timelineMiniMap.css")} */\n`};class Hi extends(l.ObjectWrapper.eventMixin(m.Widget.VBox)){#Je=new i.TimelineOverviewPane.TimelineOverviewPane("timeline");#Xe=[];breadcrumbs=null;#Ze;#Qe=null;#te=this.#ie.bind(this);constructor(){super(),this.registerRequiredCSS(Bi),this.element.classList.add("timeline-minimap"),this.#Ze=new c.BreadcrumbsUI.BreadcrumbsUI,this.element.prepend(this.#Ze),this.#Je.show(this.element),this.#Je.addEventListener("OverviewPaneWindowChanged",(e=>{this.#et(e)})),this.#Je.addEventListener("OverviewPaneBreadcrumbAdded",(e=>{this.addBreadcrumb(e.data)})),this.#Je.addEventListener("OverviewPaneMouseMove",(e=>{this.dispatchEventToListeners("OverviewPaneMouseMove",e.data)})),this.#Je.addEventListener("OverviewPaneMouseLeave",(()=>{this.dispatchEventToListeners("OverviewPaneMouseLeave")})),this.#Ze.addEventListener(c.BreadcrumbsUI.BreadcrumbActivatedEvent.eventName,(e=>{const{breadcrumb:t,childBreadcrumbsRemoved:i}=e;this.#tt(t,{removeChildBreadcrumbs:Boolean(i),updateVisibleWindow:!0})})),this.#Je.enableCreateBreadcrumbsButton(),a.TraceBounds.onChange(this.#te)}#et(e){const i=this.#Qe?.parsedTrace;if(!i)return;const n=a.TraceBounds.BoundsManager.instance().state();if(!n)return;const r=e.data.startTime>0?e.data.startTime:n.milli.entireTraceBounds.min,s=Number.isFinite(e.data.endTime)?e.data.endTime:n.milli.entireTraceBounds.max;a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(t.Helpers.Timing.traceWindowFromMilliSeconds(t.Types.Timing.Milli(r),t.Types.Timing.Milli(s)),{shouldAnimate:!0})}#ie(e){if("RESET"===e.updateType||"VISIBLE_WINDOW"===e.updateType){this.#Je.setWindowTimes(e.state.milli.timelineTraceWindow.min,e.state.milli.timelineTraceWindow.max);t.Helpers.Timing.windowFitsInsideBounds({window:e.state.micro.timelineTraceWindow,bounds:e.state.micro.minimapTraceBounds})||this.#it(e.state.micro.timelineTraceWindow)}"RESET"!==e.updateType&&"MINIMAP_BOUNDS"!==e.updateType||this.#Je.setBounds(e.state.milli.minimapTraceBounds.min,e.state.milli.minimapTraceBounds.max)}#it(e){if(!this.breadcrumbs)return;let i=this.breadcrumbs.initialBreadcrumb,n=this.breadcrumbs.initialBreadcrumb;for(;i;){if(!t.Helpers.Timing.windowFitsInsideBounds({window:e,bounds:i.window}))break;n=i,i=i.child}this.#tt(n,{removeChildBreadcrumbs:!1,updateVisibleWindow:!1})}addBreadcrumb({startTime:e,endTime:i}){if(!this.breadcrumbs)return void console.warn("ModificationsManager has not been created, therefore Breadcrumbs can not be added");const n=a.TraceBounds.BoundsManager.instance().state();if(!n)return;const r=n.milli.minimapTraceBounds,s={startTime:t.Types.Timing.Milli(Math.max(e,r.min)),endTime:t.Types.Timing.Milli(Math.min(i,r.max))},o=t.Helpers.Timing.traceWindowFromMilliSeconds(s.startTime,s.endTime),l=this.breadcrumbs.add(o);this.#Ze.data={initialBreadcrumb:this.breadcrumbs.initialBreadcrumb,activeBreadcrumb:l}}highlightBounds(e,t=!1){this.#Je.highlightBounds(e,t)}clearBoundsHighlight(){this.#Je.clearBoundsHighlight()}#tt(e,t){this.breadcrumbs&&(this.breadcrumbs.setActiveBreadcrumb(e,t),this.#Ze.data={initialBreadcrumb:this.breadcrumbs.initialBreadcrumb,activeBreadcrumb:e})}reset(){this.#Qe=null,this.#Je.reset()}#nt(e){const i=new Map,{Meta:n}=e,r=n.mainFrameNavigations,a=t.Helpers.Timing.microToMilli(n.traceBounds.min);for(const e of r){const{startTime:n}=t.Helpers.Timing.eventTimingsMilliSeconds(e);i.set(n,Tn.createEventDivider(e,a))}this.#Je.setMarkers(i)}#rt(e){this.#Je.setNavStartTimes(e.Meta.mainFrameNavigations)}getControls(){return this.#Xe}setData(e){if(this.#Qe?.parsedTrace!==e.parsedTrace){if(this.#Qe=e,this.#Xe=[],this.#nt(e.parsedTrace),this.#rt(e.parsedTrace),this.#Xe.push(new mi(e.parsedTrace)),this.#Xe.push(new pi(e.parsedTrace)),this.#Xe.push(new ci(e.parsedTrace)),e.settings.showScreenshots){const i=t.Extras.FilmStrip.fromParsedTrace(e.parsedTrace);i.frames.length&&this.#Xe.push(new ui(i))}e.settings.showMemory&&this.#Xe.push(new gi(e.parsedTrace)),this.#Je.setOverviewControls(this.#Xe),this.#Je.showingScreenshots=e.settings.showScreenshots,this.#at()}}#at(){if(this.breadcrumbs=Ve.activeManager()?.getTimelineBreadcrumbs()??null,!this.breadcrumbs)return;let e=this.breadcrumbs.initialBreadcrumb;for(;null!==e.child;)e=e.child;this.#Ze.data={initialBreadcrumb:this.breadcrumbs.initialBreadcrumb,activeBreadcrumb:e}}}var Ui=Object.freeze({__proto__:null,TimelineMiniMap:Hi}),Oi={cssText:`.timeline-toolbar-container{display:flex;align-items:flex-start;flex:none;background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider);& > :first-child{flex:1 1 auto}}.timeline-settings-pane{display:grid;grid-template-columns:50% 50%;flex:none;background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider);& > div{margin-left:5px;display:flex;align-items:center;gap:5px;& > select{height:var(--sys-size-9);min-width:var(--sys-size-14);border:none}}}#timeline-overview-panel{flex:none;position:relative;border-bottom:1px solid var(--sys-color-divider)}#timeline-overview-grid{background-color:var(--sys-color-cdt-base-container)}#timeline-overview-grid .timeline-grid-header{height:12px}#timeline-overview-grid .resources-dividers-label-bar{pointer-events:auto;height:12px}#timeline-overview-grid .resources-divider-label{top:1px}.timeline-details-split{flex:auto}.timeline.panel .status-pane-container{z-index:1000;display:flex;align-items:center;pointer-events:none}.timeline.panel .status-pane-container.tinted{background-color:var(--sys-color-cdt-base-container);pointer-events:auto}.timeline-landing-page.legacy > div > p{flex:none;white-space:pre-line;line-height:18px}.popover ul{margin:0;padding:0;list-style-type:none}#memory-graphs-canvas-container{overflow:hidden;flex:auto;position:relative;.no-events-found{position:absolute;font:var(--sys-typescale-body4-regular);left:var(--sys-size-5);bottom:var(--sys-size-5);p{margin:0}}}#memory-counters-graph{flex:auto}#memory-graphs-canvas-container .memory-counter-marker{position:absolute;border-radius:3px;width:5px;height:5px;margin-left:-3px;margin-top:-2px}#memory-graphs-container .timeline-memory-header{flex:0 0 26px;background-color:var(--sys-color-surface2);border-bottom:1px solid var(--sys-color-divider);justify-content:space-between}#memory-graphs-container .timeline-memory-header::after{content:"";background-image:var(--image-file-toolbarResizerVertical);background-repeat:no-repeat;background-position:right center,center;flex:20px 0 0;margin:0 4px}.timeline-memory-toolbar{flex-shrink:1}.memory-counter-value{margin:8px}#counter-values-bar{flex:0 0 20px;border-top:solid 1px var(--sys-color-divider);width:100%;overflow:hidden;line-height:18px}.timeline-details{vertical-align:top}.timeline-details-view{color:var(--sys-color-on-surface);overflow:hidden}.timeline-details-view-body{flex:auto;overflow:auto;position:relative;background-color:var(--sys-color-cdt-base-container);user-select:text}.timeline-details-view-block{flex:none;display:flex;background-color:var(--sys-color-cdt-base-container);flex-direction:column;padding-bottom:5px;border-bottom:1px solid var(--sys-color-divider)}.timeline-details-view-row{padding-left:10px;min-height:20px;line-height:16px}.timeline-details-view-block .timeline-details-stack-values{flex-direction:column!important}.timeline-details-chip-title{font-size:12px;padding:8px;display:flex;align-items:center}.timeline-details-view-block:first-child > .timeline-details-chip-title{font-size:13px}.timeline-details-view-row-title:not(:empty){color:var(--sys-color-token-subtle);overflow:hidden;padding-right:10px;display:inline-block;vertical-align:top}.timeline-details-warning{--override-details-warning-background-color:rgb(250 209 209/48%);background-color:var(--override-details-warning-background-color)}.theme-with-dark-background .timeline-details-warning,\n:host-context(.theme-with-dark-background) .timeline-details-warning{--override-details-warning-background-color:rgb(87 10 10/48%)}.timeline-details-warning .timeline-details-view-row-title{color:var(--sys-color-error)}.timeline-details-view-row-value{display:inline-block;user-select:text;text-overflow:ellipsis;overflow:visible}.timeline-details-warning .timeline-details-view-row-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeline-details-view-pie-chart-wrapper{margin:4px 0}.timeline-details-view-pie-chart{margin-top:5px}.timeline-flamechart{overflow:hidden}.brick-game{background-color:var(--sys-color-neutral-container);position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999}.game-close-button{display:flex;align-items:center;justify-content:center;width:25px;height:25px;position:absolute;right:15px;top:15px;border-radius:50%;cursor:pointer}.scorePanel{display:flex;align-items:center;justify-content:center;flex-direction:column;white-space:pre-line;padding:15px;position:absolute;left:15px;bottom:15px;border:double 7px transparent;border-radius:20px;background-origin:border-box;background-clip:content-box,border-box;font-weight:200}.confetti-100{display:block;top:0;left:0;width:100%;height:100%}.confetti-100 > .confetti-100-particle{opacity:0%;position:fixed;animation:confetti-100-animation 1s none ease-out;font-size:30px}@keyframes confetti-100-animation{0%{opacity:100%;transform:translateY(0%) translateY(0%) rotate(0deg)}100%{opacity:0%;transform:translateY(var(--to-Y)) translateX(var(--to-X)) rotate(var(--rotation))}}@media (prefers-reduced-motion){.confetti-100 > .confetti-100-particle{animation-name:dissolve}}.timeline-flamechart-resizer{flex:8px 0 0;background-color:var(--sys-color-surface2);border:1px var(--sys-color-divider);border-style:solid none;display:flex;flex-direction:row;align-items:flex-end;justify-content:center}.timeline-network-resizer-disabled > .timeline-flamechart-resizer{display:none}.timeline-flamechart-resizer::after{content:"...";font-size:14px;margin-bottom:-1px}.timeline-layers-view-properties table{width:100%;border-collapse:collapse}.timeline-layers-view-properties td{border:1px solid var(--sys-color-divider);line-height:22px}.timeline-filmstrip-preview > img{max-width:500px;max-height:300px;cursor:pointer;border:1px solid var(--sys-color-divider)}.timeline-tree-view{display:flex;overflow:hidden}.timeline-tree-view devtools-toolbar{background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider)}.timeline-tree-view .data-grid{flex:auto}.timeline-tree-view .data-grid .data-container{overflow-y:scroll}.timeline-tree-view .data-grid.data-grid-fits-viewport .corner{display:table-cell}.timeline-tree-view .data-grid table.data{background:var(--sys-color-cdt-base-container)}.timeline-tree-view .data-grid .odd{background-color:var(--sys-color-surface1)}.timeline-tree-view .data-grid tr:hover td:not(.bottom-filler-td){background-color:var(--sys-color-state-hover-on-subtle)}.timeline-tree-view .data-grid td.numeric-column{text-align:right;position:relative}.timeline-tree-view .data-grid div.background-bar-text{position:relative;z-index:1}.timeline-tree-view .data-grid span.percent-column{color:var(--sys-color-token-subtle);width:45px;display:inline-block}.timeline-tree-view .data-grid tr.selected span{color:inherit}.timeline-tree-view .data-grid tr.selected{background-color:var(--sys-color-tonal-container)}.timeline-tree-view .data-grid .name-container{display:flex;align-items:center}.timeline-tree-view .data-grid .name-container .activity-icon{width:12px;height:12px;border:1px solid var(--divider-line);margin:3px 0}.timeline-tree-view .data-grid .name-container .activity-icon-container{margin-right:3px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;width:18px;height:18px;overflow:hidden}.timeline-tree-view .data-grid .name-container .activity-warning::after{content:"[deopt]";margin:0 4px;line-height:12px;font-size:10px;color:var(--sys-color-state-disabled)}.timeline-tree-view .data-grid tr.selected .name-container .activity-warning::after{color:var(--sys-color-on-tonal-container)}.timeline-tree-view .data-grid .name-container .activity-link{flex:auto;text-align:right;overflow:hidden;text-overflow:ellipsis;margin-left:5px}.timeline-tree-view .data-grid .background-bar-container{position:absolute;inset:0 0 0 2px}.timeline-tree-view .data-grid .background-bar{height:18px;background-color:var(--sys-color-surface-yellow);border-bottom:1px solid var(--sys-color-yellow-outline);position:absolute;right:0}.timeline-tree-view .data-grid .selected .background-bar{background-color:var(--app-color-selected-progress-bar);border-bottom:1px solid var(--app-border-selected-progress-bar)}.timeline-tree-view .timeline-details-view-body .full-widget-dimmed-banner{background-color:inherit}.timeline-details .filter-input-field{width:120px}.timeline-tree-view .data-grid thead{height:21px;z-index:2}.timeline-stack-view-header{height:27px;background-color:var(--sys-color-cdt-base-container);padding:6px 10px;color:var(--sys-color-on-surface);white-space:nowrap;border-bottom:1px solid var(--sys-color-divider)}.timeline-landing-page{position:absolute;background-color:var(--sys-color-cdt-base-container)}.timeline-landing-page.legacy{justify-content:center;align-items:center;overflow:auto;font-size:13px;color:var(--sys-color-on-surface-subtle)}@media (forced-colors: active){.timeline-tree-view .data-grid .name-container .activity-icon{forced-color-adjust:none}.timeline-tree-view .data-grid tr.selected span.percent-column,\n .timeline-tree-view .data-grid tr.selected div.background-bar-text span,\n .timeline-tree-view .data-grid tr.selected .name-container .activity-link .devtools-link .timeline-link{color:HighlightText}.timeline-tree-view .data-grid .background-bar,\n .timeline-tree-view .data-grid tr:hover td:not(.bottom-filler-td){background-color:transparent}.timeline-tree-view .data-grid tr.selected .background-bar{background-color:transparent;border-bottom-color:HighlightText}}.timeline-details-range-summary{height:100%;margin:var(--sys-size-4) 0 0;& > devtools-performance-timeline-summary{min-width:192px}}.timeline-details-range-summary > devtools-related-insight-chips{display:none}.timeline-details-chip-title > div{width:12px;height:12px;border:1px solid var(--sys-color-divider);display:inline-block;margin-right:4px;content:" "}.timeline-landing-page.legacy > div{max-width:450px;margin:10px}.timeline-paint-profiler-log-split > div:last-child{background-color:var(--color-background-elevation-1);z-index:0}.timeline-layers-view > div:last-child,\n.timeline-layers-view-properties > div:last-child{background-color:var(--color-background-elevation-1)}.timeline.panel .status-pane-container > div{pointer-events:auto}.timeline-tree-view .data-grid .name-container div{flex:none}devtools-performance-third-party-tree-view{.background-bar-container{display:none}.timeline-tree-view devtools-toolbar{border:0}.timeline-tree-view .data-grid .odd{background:none}.timeline-tree-view .data-grid{border-width:0!important;th{background-color:var(--sys-color-cdt-base-container);font-weight:var(--ref-typeface-weight-medium);text-align:center;&.site-column{text-align:left}}tr .numeric-column,\n tr .site-column{border-left:none;border-bottom:var(--sys-size-1) solid var(--sys-color-divider);contain:strict;padding:0;line-height:21px}.bottom-filler-td,\n th.sortable{border:none}tr{height:22px}devtools-button{display:inline-flex;visibility:hidden;margin:0 8px 0 4px;vertical-align:top}tr.revealed:hover,\n tr.selected{devtools-button{visibility:visible}}.corner,\n &.data-grid-fits-viewport .corner{display:none}.data-grid-resizer:hover{background:linear-gradient(to right,transparent,transparent 2px,var(--sys-color-divider) 2px,var(--sys-color-divider) 3px,transparent 3px) no-repeat 0 0 /100% 100%}}.widget.vbox.timeline-tree-view{max-width:min(100%,550px);min-width:350px;padding:0 0 0 var(--sys-size-6);border-left:var(--sys-size-1) solid var(--sys-color-divider)}.timeline-tree-view .data-grid .name-container{display:block;padding-left:2px;.activity-name{display:inline}.activity-icon-container{display:none}.entity-badge{margin-left:var(--sys-size-4);font-weight:var(--ref-typeface-weight-medium);padding:0 var(--sys-size-2);background-color:var(--sys-color-tonal-container);border-radius:var(--sys-shape-corner-extra-small);height:16px;line-height:16px;font-size:var(--sys-typescale-body5-size);display:inline-block}}}devtools-feedback-button{float:right}devtools-toolbar{.history-dropdown-button{width:var(--sys-size-23);height:var(--sys-size-9);border-radius:var(--sys-shape-corner-extra-small);text-align:left;display:flex;padding-right:var(--sys-size-5);&:hover{background-color:var(--sys-color-state-hover-on-subtle)}&:active{background-color:var(--sys-color-state-ripple-neutral-on-subtle)}&:hover:active{background:linear-gradient(var(--sys-color-state-hover-on-subtle),var(--sys-color-state-hover-on-subtle)),linear-gradient(var(--sys-color-state-ripple-neutral-on-subtle),var(--sys-color-state-ripple-neutral-on-subtle))}&:focus-visible{outline:var(--sys-size-2) solid var(--sys-color-state-focus-ring)}&[disabled]{pointer-events:none;color:var(--sys-color-state-disabled);background-color:var(--sys-color-state-disabled-container);.content::after{background-color:var(--sys-color-state-disabled)}}& > .content{margin-left:5px;padding-right:5px;overflow:hidden;text-overflow:ellipsis;flex:1 1;min-width:35px;&::after{float:right;user-select:none;mask-image:var(--image-file-triangle-down);width:14px;height:14px;content:"";position:absolute;background-color:var(--icon-default);right:var(--sys-size-3);top:var(--sys-size-3)}}}@media (forced-colors: active){.history-dropdown-button[disabled]{opacity:100%}.history-dropdown-button > .content::after{background-color:ButtonText}.history-dropdown-button[disabled] > .content::after{background-color:GrayText}}}\n/*# sourceURL=${import.meta.resolve("./timelinePanel.css")} */\n`},_i={cssText:`.timeline-status-dialog{display:flex;flex-direction:column;padding:16px 16px 12px;align-self:center;background-color:var(--sys-color-cdt-base-container);box-shadow:var(--drop-shadow);border-radius:10px}.status-dialog-line{margin:2px;height:14px;min-height:auto;display:flex;align-items:baseline;font-variant-numeric:tabular-nums}.status-dialog-line .label{display:inline-block;width:80px;text-align:right;color:var(--sys-color-on-surface);margin-right:10px}.timeline-status-dialog .progress .indicator-container{display:inline-block;width:200px;height:8px;background-color:var(--sys-color-surface5)}.timeline-status-dialog .progress .indicator{background-color:var(--sys-color-primary);height:100%;width:0;margin:0}.timeline-status-dialog .stop-button{margin-top:8px;height:100%;align-self:flex-end}.timeline-status-dialog .stop-button button{border-radius:12px}@media (forced-colors: active){.timeline-status-dialog{border:1px solid canvastext}.timeline-status-dialog .progress .indicator-container{border:1px solid ButtonText;background-color:ButtonFace}.timeline-status-dialog .progress .indicator{forced-color-adjust:none;background-color:ButtonText}}:host{container-type:inline-size}@container (max-width: 326px){.timeline-status-dialog{box-shadow:none;.stop-button{align-self:center}}.status-dialog-line{flex-direction:column;.label{display:none}}}\n/*# sourceURL=${import.meta.resolve("./timelineStatusDialog.css")} */\n`};const Wi={frameStart:"Frame start",drawFrame:"Draw frame",layout:"Layout",rasterizing:"Rasterizing",drawing:"Drawing",painting:"Painting",system:"System",idle:"Idle",loading:"Loading",experience:"Experience",scripting:"Scripting",rendering:"Rendering",gpu:"GPU",async:"Async",messaging:"Messaging"},Vi=e.i18n.registerUIStrings("panels/timeline/UIDevtoolsUtils.ts",Wi),Gi=e.i18n.getLocalizedString.bind(void 0,Vi);let zi=null,ji=null;class $i{static isUiDevTools(){return"true"===d.Runtime.Runtime.queryParam("uiDevTools")}static categorizeEvents(){if(zi)return zi;const e=Ki,t=$i.categories(),i=t.drawing,n=t.rasterizing,r=t.layout,a=t.painting,o=t.other,l={},{TimelineRecordStyle:d}=s.EntryStyles;return l[e.ViewPaint]=new d("View::Paint",a),l[e.ViewOnPaint]=new d("View::OnPaint",a),l[e.ViewPaintChildren]=new d("View::PaintChildren",a),l[e.ViewOnPaintBackground]=new d("View::OnPaintBackground",a),l[e.ViewOnPaintBorder]=new d("View::OnPaintBorder",a),l[e.LayerPaintContentsToDisplayList]=new d("Layer::PaintContentsToDisplayList",a),l[e.ViewLayout]=new d("View::Layout",r),l[e.ViewLayoutBoundsChanged]=new d("View::Layout(bounds_changed)",r),l[e.RasterTask]=new d("RasterTask",n),l[e.RasterizerTaskImplRunOnWorkerThread]=new d("RasterizerTaskImpl::RunOnWorkerThread",n),l[e.DirectRendererDrawFrame]=new d("DirectRenderer::DrawFrame",i),l[e.BeginFrame]=new d(Gi(Wi.frameStart),i,!0),l[e.DrawFrame]=new d(Gi(Wi.drawFrame),i,!0),l[e.NeedsBeginFrameChanged]=new d("NeedsBeginFrameChanged",i,!0),l[e.ThreadControllerImplRunTask]=new d("ThreadControllerImpl::RunTask",o),zi=l,l}static categories(){if(ji)return ji;const{TimelineCategory:e,EventCategory:t}=s.EntryStyles;return ji={layout:new e(t.LAYOUT,Gi(Wi.layout),!0,"--app-color-loading-children","--app-color-loading"),rasterizing:new e(t.RASTERIZING,Gi(Wi.rasterizing),!0,"--app-color-children","--app-color-scripting"),drawing:new e(t.DRAWING,Gi(Wi.drawing),!0,"--app-color-rendering-children","--app-color-rendering"),painting:new e(t.PAINTING,Gi(Wi.painting),!0,"--app-color-painting-children","--app-color-painting"),other:new e(t.OTHER,Gi(Wi.system),!1,"--app-color-system-children","--app-color-system"),idle:new e(t.IDLE,Gi(Wi.idle),!1,"--app-color-idle-children","--app-color-idle"),loading:new e(t.LOADING,Gi(Wi.loading),!1,"--app-color-loading-children","--app-color-loading"),experience:new e(t.EXPERIENCE,Gi(Wi.experience),!1,"--app-color-rendering-children","--pp-color-rendering"),messaging:new e(t.MESSAGING,Gi(Wi.messaging),!1,"--app-color-messaging-children","--pp-color-messaging"),scripting:new e(t.SCRIPTING,Gi(Wi.scripting),!1,"--app-color-scripting-children","--pp-color-scripting"),rendering:new e(t.RENDERING,Gi(Wi.rendering),!1,"--app-color-rendering-children","--pp-color-rendering"),gpu:new e(t.GPU,Gi(Wi.gpu),!1,"--app-color-painting-children","--app-color-painting"),async:new e(t.ASYNC,Gi(Wi.async),!1,"--app-color-async-children","--app-color-async")},ji}static getMainCategoriesList(){return["idle","drawing","painting","rasterizing","layout","other"]}}var Ki;!function(e){e.ViewPaint="View::Paint",e.ViewOnPaint="View::OnPaint",e.ViewPaintChildren="View::PaintChildren",e.ViewOnPaintBackground="View::OnPaintBackground",e.ViewOnPaintBorder="View::OnPaintBorder",e.ViewLayout="View::Layout",e.ViewLayoutBoundsChanged="View::Layout(bounds_changed)",e.LayerPaintContentsToDisplayList="Layer::PaintContentsToDisplayList",e.DirectRendererDrawFrame="DirectRenderer::DrawFrame",e.RasterTask="RasterTask",e.RasterizerTaskImplRunOnWorkerThread="RasterizerTaskImpl::RunOnWorkerThread",e.BeginFrame="BeginFrame",e.DrawFrame="DrawFrame",e.NeedsBeginFrameChanged="NeedsBeginFrameChanged",e.ThreadControllerImplRunTask="ThreadControllerImpl::RunTask"}(Ki||(Ki={}));var qi=Object.freeze({__proto__:null,get RecordType(){return Ki},UIDevtoolsUtils:$i});class Yi extends ri{constructor(e,t,i){super(e,t,i),s.EntryStyles.setEventStylesMap($i.categorizeEvents()),s.EntryStyles.setCategories($i.categories()),s.EntryStyles.setTimelineMainEventCategories($i.getMainCategoriesList().filter(s.EntryStyles.stringIsEventCategory))}}var Ji=Object.freeze({__proto__:null,UIDevtoolsController:Yi});const Xi={dropTimelineFileOrUrlHere:"Drop timeline file or URL here",disableJavascriptSamples:"Disable JavaScript samples",enableAdvancedPaint:"Enable advanced paint instrumentation (slow)",enableSelectorStats:"Enable CSS selector stats (slow)",screenshots:"Screenshots",memory:"Memory",clear:"Clear",fixMe:"Fix me",loadProfile:"Load profile…",saveProfile:"Save profile…",saveTraceWithAnnotationsMenuOption:"Save trace",saveTraceWithoutAnnotationsMenuOption:"Save trace without annotations",captureScreenshots:"Capture screenshots",showMemoryTimeline:"Show memory timeline",captureSettings:"Capture settings",disablesJavascriptSampling:"Disables JavaScript sampling, reduces overhead when running against mobile devices",capturesAdvancedPaint:"Captures advanced paint instrumentation, introduces significant performance overhead",capturesSelectorStats:"Captures CSS selector statistics",network:"Network:",cpu:"CPU:",networkConditions:"Network conditions",failedToSaveTimelineSS:"Failed to save timeline: {PH1} ({PH2})",CpuThrottlingIsEnabled:"- CPU throttling is enabled",NetworkThrottlingIsEnabled:"- Network throttling is enabled",SignificantOverheadDueToPaint:"- Significant overhead due to paint instrumentation",SelectorStatsEnabled:"- Selector stats is enabled",JavascriptSamplingIsDisabled:"- JavaScript sampling is disabled",stoppingTimeline:"Stopping timeline…",received:"Received",processed:"Processed",close:"Close",downloadAfterError:"Download trace",recordingFailed:"Recording failed",profiling:"Profiling…",bufferUsage:"Buffer usage",loadingProfile:"Loading profile…",processingProfile:"Processing profile…",initializingProfiler:"Initializing profiler…",status:"Status",time:"Time",description:"Description",stop:"Stop",exportNormalTraces:"Basic performance traces",exportEnhancedTraces:"Enhanced performance traces",showDataAddedByExtensions:"Show data added by extensions of the Performance panel",showCustomtracks:"Show custom tracks",showSidebar:"Show sidebar",hideSidebar:"Hide sidebar",sidebarShown:"Performance sidebar shown",sidebarHidden:"Performance sidebar hidden",selectionCleared:"Selection cleared",frameSelected:"Frame selected",eventSelected:"Event {PH1} selected",learnMore:"Learn more",backToLiveMetrics:"Go back to the live metrics page",timelineScrollUpDown:"Move up/down",timelinePanLeftRight:"Move left/right",timelineZoomInOut:"Zoom in/out",timelineFastZoomInOut:"Fast zoom in/out",dimThirdParties:"Dim 3rd parties",thirdPartiesByThirdPartyWeb:"3rd parties classified by third-party-web"},Zi=e.i18n.registerUIStrings("panels/timeline/TimelinePanel.ts",Xi),Qi=e.i18n.getLocalizedString.bind(void 0,Zi);let en,tn,nn;class rn extends m.Panel.Panel{dropTarget;recordingOptionUIControls;state;recordingPageReload;millisecondsToRecordAfterLoadEvent;toggleRecordAction;recordReloadAction;#st;disableCaptureJSProfileSetting;captureLayersAndPicturesSetting;captureSelectorStatsSetting;#ot;showScreenshotsSetting;showMemorySetting;panelToolbar;panelRightToolbar;timelinePane;#Ne=new Hi;#lt={mode:"LANDING_PAGE"};#dt=null;#ct=null;#ht=new Map;#pt=new m.SplitWidget.SplitWidget(!0,!1,"timeline-panel-sidebar-state",c.Sidebar.DEFAULT_SIDEBAR_WIDTH_PX);statusPaneContainer;flameChart;searchableViewInternal;showSettingsPaneButton;showSettingsPaneSetting;settingsPane;controller;cpuProfiler;clearButton;loadButton;saveButton;homeButton;statusPane;landingPage;loader;showScreenshotsToolbarCheckbox;showMemoryToolbarCheckbox;networkThrottlingSelect;cpuThrottlingSelect;fileSelectorElement;selection=null;traceLoadStart;primaryPageTargetPromiseCallback=e=>{};primaryPageTargetPromise=new Promise((e=>{this.primaryPageTargetPromiseCallback=e}));#mt;#ut=null;#de=null;#gt=this.#vt.bind(this);#Tt=this.#pt.createShowHideSidebarButton(Qi(Xi.showSidebar),Qi(Xi.hideSidebar),Qi(Xi.sidebarShown),Qi(Xi.sidebarHidden),"timeline.sidebar");#yt=new c.Sidebar.SidebarWidget;#ft=!1;#St=null;#wt=new Map;#bt=new M.ShortcutDialog.ShortcutDialog;#Et=l.Settings.Settings.instance().createSetting("timeline.user-had-shortcuts-dialog-opened-once",!1);#Ct=document.createElement("form");#kt=m.UIUtils.createRadioButton("flamechart-selected-navigation","Modern","timeline.select-modern-navigation");#It=m.UIUtils.createRadioButton("flamechart-selected-navigation","Classic","timeline.select-classic-navigation");#Mt;constructor(e){super("timeline"),this.registerRequiredCSS(Oi);const t=document.createElement("span");t.innerHTML='<div style="\n font-size: 12px;\n transform: scale(1.25);\n color: transparent;\n background: linear-gradient(90deg,CLICK255 0 0 / 100%) 0%, rgb(255 154 0 / 100%) 10%, rgb(208 222 33 / 100%) 20%, rgb(79 220 74 / 100%) 30%, rgb(63 218 216 / 100%) 40%, rgb(47 201 226 / 100%) 50%, rgb(28 127 238 / 100%) 60%, rgb(95 21 242 / 100%) 70%, rgb(186 12 248 / 100%) 80%, rgb(251 7 217 / 100%) 90%, rgb(255 0 0 / 100%) 100%);\n -webkit-background-clip: text;\n ">💫</div>';const i=new I.Adorner.Adorner;i.classList.add("fix-perf-icon"),i.data={name:Qi(Xi.fixMe),content:t},this.#mt=e||this.#xt(),this.#Pt(),this.element.addEventListener("contextmenu",this.contextMenu.bind(this),!1),this.dropTarget=new m.DropTarget.DropTarget(this.element,[m.DropTarget.Type.File,m.DropTarget.Type.URI],Qi(Xi.dropTimelineFileOrUrlHere),this.handleDrop.bind(this)),this.recordingOptionUIControls=[],this.state="Idle",this.recordingPageReload=!1,this.millisecondsToRecordAfterLoadEvent=5e3,this.toggleRecordAction=m.ActionRegistry.ActionRegistry.instance().getAction("timeline.toggle-recording"),this.recordReloadAction=nn?null:m.ActionRegistry.ActionRegistry.instance().getAction("timeline.record-reload"),this.#st=new Ci(this.#Ne,tn),this.traceLoadStart=null,this.disableCaptureJSProfileSetting=l.Settings.Settings.instance().createSetting("timeline-disable-js-sampling",!1,"Session"),this.disableCaptureJSProfileSetting.setTitle(Qi(Xi.disableJavascriptSamples)),this.captureLayersAndPicturesSetting=l.Settings.Settings.instance().createSetting("timeline-capture-layers-and-pictures",!1,"Session"),this.captureLayersAndPicturesSetting.setTitle(Qi(Xi.enableAdvancedPaint)),this.captureSelectorStatsSetting=l.Settings.Settings.instance().createSetting("timeline-capture-selector-stats",!1,"Session"),this.captureSelectorStatsSetting.setTitle(Qi(Xi.enableSelectorStats)),this.showScreenshotsSetting=l.Settings.Settings.instance().createSetting("timeline-show-screenshots",!tn&&!nn),this.showScreenshotsSetting.setTitle(Qi(Xi.screenshots)),this.showScreenshotsSetting.addChangeListener(this.updateMiniMap,this),nn?this.showMemorySetting=null:(this.showMemorySetting=l.Settings.Settings.instance().createSetting("timeline-show-memory",!1),this.showMemorySetting.setTitle(Qi(Xi.memory)),this.showMemorySetting.addChangeListener(this.onMemoryModeChanged,this)),nn||(this.#dt=l.Settings.Settings.instance().createSetting("timeline-dim-third-parties",!1,"Session"),this.#dt.setTitle(Qi(Xi.dimThirdParties)),this.#dt.addChangeListener(this.onDimThirdPartiesChanged,this)),this.#ot=rn.extensionDataVisibilitySetting(),this.#ot.addChangeListener(this.#Rt,this),this.#ot.setTitle(Qi(Xi.showCustomtracks));const n=this.element.createChild("div","timeline-toolbar-container");n.setAttribute("jslog",`${v.toolbar()}`),n.role="toolbar",this.panelToolbar=n.createChild("devtools-toolbar","timeline-main-toolbar"),this.panelToolbar.role="presentation",this.panelToolbar.wrappable=!0,this.panelRightToolbar=n.createChild("devtools-toolbar"),this.panelRightToolbar.role="presentation",tn||nn||(this.createSettingsPane(),this.updateShowSettingsToolbarButton()),this.timelinePane=new m.Widget.VBox;const r=this.timelinePane.element.createChild("div","hbox");r.id="timeline-overview-panel",this.#Ne.show(r),this.#Ne.addEventListener("OverviewPaneMouseMove",(e=>{this.flameChart.addTimestampMarkerOverlay(e.data.timeInMicroSeconds)})),this.#Ne.addEventListener("OverviewPaneMouseLeave",(async()=>{await this.flameChart.removeTimestampMarkerOverlay()})),this.statusPaneContainer=this.timelinePane.element.createChild("div","status-pane-container fill"),this.createFileSelector(),o.TargetManager.TargetManager.instance().addModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.Load,this.loadEventFired,this),this.flameChart=new Tr(this),this.element.addEventListener("toggle-popover",(e=>this.flameChart.togglePopover(e.detail))),this.#Mt=this.#Ft.bind(this,this.flameChart.getMainDataProvider()),this.flameChart.getMainFlameChart().addEventListener("EntryHovered",this.#Mt),this.flameChart.addEventListener("EntryLabelAnnotationClicked",(e=>{const t=yt(e.data.entry);this.select(t)})),this.searchableViewInternal=new m.SearchableView.SearchableView(this.flameChart,null),this.searchableViewInternal.setMinimumSize(0,100),this.searchableViewInternal.setMinimalSearchQuerySize(2),this.searchableViewInternal.element.classList.add("searchable-view"),this.searchableViewInternal.show(this.timelinePane.element),this.flameChart.show(this.searchableViewInternal.element),this.flameChart.setSearchableView(this.searchableViewInternal),this.searchableViewInternal.hideWidget(),this.#pt.setMainWidget(this.timelinePane),this.#pt.setSidebarWidget(this.#yt),this.#pt.enableShowModeSaving(),this.#pt.show(this.element),this.#yt.setSelectTimelineEventCallback((e=>{const t=yt(e);this.flameChart.setSelectionAndReveal(t),this.flameChart.updatePerfIssueFlameChartDimmer(e)})),this.flameChart.overlays().addEventListener(f.Overlays.TimeRangeMouseOverEvent.eventName,(e=>{const{overlay:t}=e,i=f.Overlays.traceWindowContainingOverlays([t]);i&&this.#Ne.highlightBounds(i,!1)})),this.flameChart.overlays().addEventListener(f.Overlays.TimeRangeMouseOutEvent.eventName,(()=>{this.#Ne.clearBoundsHighlight()})),this.#yt.element.addEventListener(T.SidebarInsight.InsightDeactivated.eventName,(()=>{this.#Lt(null)})),this.#yt.element.addEventListener(T.SidebarInsight.InsightActivated.eventName,(e=>{const{model:t,insightSetKey:i}=e;this.#Lt({model:t,insightSetKey:i}),"ThirdParties"===t.insightKey&&window.scheduler.postTask((()=>{this.#At()}),{priority:"background"})})),this.#yt.element.addEventListener(T.SidebarInsight.InsightProvideOverlays.eventName,(e=>{const{overlays:t,options:i}=e;window.scheduler.postTask((()=>{this.flameChart.setOverlays(t,i);const e=f.Overlays.traceWindowContainingOverlays(t);e?this.#Ne.highlightBounds(e,!0):this.#Ne.clearBoundsHighlight()}),{priority:"user-visible"})})),this.#yt.contentElement.addEventListener(T.EventRef.EventReferenceClick.eventName,(e=>{this.select(yt(e.event))})),this.#yt.element.addEventListener(c.Sidebar.RemoveAnnotation.eventName,(e=>{const{removedAnnotation:t}=e;Ve.activeManager()?.removeAnnotation(t)})),this.#yt.element.addEventListener(c.Sidebar.RevealAnnotation.eventName,(e=>{this.flameChart.revealAnnotation(e.annotation)})),this.#yt.element.addEventListener(T.SidebarInsight.InsightSetHovered.eventName,(e=>{e.bounds?this.#Ne.highlightBounds(e.bounds,!0):this.#Ne.clearBoundsHighlight()})),this.#yt.element.addEventListener(T.SidebarInsight.InsightSetZoom.eventName,(e=>{a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(e.bounds,{ignoreMiniMapBounds:!0,shouldAnimate:!0})})),this.onMemoryModeChanged(),this.populateToolbar(),this.#Nt(),this.updateTimelineControls(),nn&&o.TargetManager.TargetManager.instance().observeModels(o.ReactNativeApplicationModel.ReactNativeApplicationModel,{modelAdded:e=>{e.addEventListener("TraceRequested",(()=>this.rnPrepareForTraceCapturedInBackground()))},modelRemoved:e=>{}}),o.TargetManager.TargetManager.instance().addEventListener("SuspendStateChanged",this.onSuspendStateChanged,this);const s=o.TargetManager.TargetManager.instance().models(o.CPUProfilerModel.CPUProfilerModel);for(const e of s)for(const t of e.registeredConsoleProfileMessages)this.consoleProfileFinished(t);o.TargetManager.TargetManager.instance().observeModels(o.CPUProfilerModel.CPUProfilerModel,{modelAdded:e=>{e.addEventListener("ConsoleProfileFinished",(e=>this.consoleProfileFinished(e.data)))},modelRemoved:e=>{}}),o.TargetManager.TargetManager.instance().observeTargets({targetAdded:e=>{e===o.TargetManager.TargetManager.instance().primaryPageTarget()&&this.primaryPageTargetPromiseCallback(e)},targetRemoved:e=>{}})}async rnPrepareForTraceCapturedInBackground(){this.setUIControlsEnabled(!1),this.statusPane&&(this.statusPane.finish(),this.statusPane.updateStatus(Qi(Xi.stoppingTimeline)),this.statusPane.updateProgressBar(Qi(Xi.received),0)),this.setState("StopPending");const e=o.TargetManager.TargetManager.instance().rootTarget();if(!e)throw new Error("Could not load root target.");const t=o.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)throw new Error("Could not load primary page target.");this.controller=new ri(e,t,this),await this.controller.rnPrepareForTraceCapturedInBackground(),this.setUIControlsEnabled(!0)}#Lt(e){if(e&&!d.Runtime.experiments.isEnabled("react-native-specific-ui")&&this.#pt.showBoth(),this.#yt.setActiveInsight(e),this.flameChart.setActiveInsight(e),e){const t=new ln(e);m.Context.Context.instance().setFlavor(ln,t)}else m.Context.Context.instance().setFlavor(ln,null)}set3PCheckboxDisabled(e){d.Runtime.experiments.isEnabled("timeline-dim-unrelated-events")&&(this.#ct?.applyEnabledState(!e),this.#ct?.setIndeterminate(e))}static instance(e={forceNew:null,isNode:!1}){const{forceNew:t,isNode:i}=e;return tn=i,nn=d.Runtime.experiments.isEnabled("react-native-specific-ui"),en&&!t||(en=new rn(e.traceModel)),en}static removeInstance(){s.SourceMapsResolver.SourceMapsResolver.clearResolvedNodeNames(),t.Helpers.SyntheticEvents.SyntheticEventsManager.reset(),a.TraceBounds.BoundsManager.removeInstance(),Ve.reset(),Tt.removeInstance(),en=void 0}#xt(){const e=t.Types.Configuration.defaults();return e.showAllEvents=d.Runtime.experiments.isEnabled("timeline-show-all-events"),e.includeRuntimeCallStats=d.Runtime.experiments.isEnabled("timeline-v8-runtime-call-stats"),e.debugMode=d.Runtime.experiments.isEnabled("timeline-debug-mode"),t.TraceModel.Model.createWithAllHandlers(e)}static extensionDataVisibilitySetting(){return l.Settings.Settings.instance().createSetting("timeline-show-extension-data",!0)}searchableView(){return this.searchableViewInternal}wasShown(){super.wasShown(),m.Context.Context.instance().setFlavor(rn,this),C.userMetrics.panelLoaded("timeline","DevTools.Launch.Timeline");g.CrUXManager.instance().addEventListener("field-data-changed",this.#Dt,this),this.#Dt()}willHide(){m.Context.Context.instance().setFlavor(rn,null),this.#st.cancelIfShowing();g.CrUXManager.instance().removeEventListener("field-data-changed",this.#Dt,this)}#Dt(){const e=s.Helpers.getThrottlingRecommendations();this.cpuThrottlingSelect?.updateRecommendedOption(e.cpuOption),this.networkThrottlingSelect?.updateRecommendedConditions(e.networkConditions)}loadFromEvents(e){"Idle"===this.state&&(this.prepareToLoadTimeline(),this.loader=Ni.loadFromEvents(e,this))}getFlameChart(){return this.flameChart}getMinimap(){return this.#Ne}#Bt(e,t){return"LANDING_PAGE"===e.mode&&"LANDING_PAGE"===t.mode||("STATUS_PANE_OVERLAY"===e.mode&&"STATUS_PANE_OVERLAY"===t.mode||"VIEWING_TRACE"===e.mode&&"VIEWING_TRACE"===t.mode&&e.traceIndex===t.traceIndex)}#Ht(){this.#ut&&(s.SourceMapsResolver.SourceMapsResolver.clearResolvedNodeNames(),this.#ut.removeEventListener(s.SourceMapsResolver.SourceMappingsUpdated.eventName,this.#gt),this.#ut.uninstall(),this.#ut=null)}#Ut(){this.statusPane&&this.statusPane.remove(),this.statusPane=null}#Ot(e){if(!this.#Bt(this.#lt,e))switch("VIEWING_TRACE"===this.#lt.mode&&(this.#Ht(),this.#_t()),this.#lt=e,this.updateTimelineControls(),e.mode){case"LANDING_PAGE":return this.#Ut(),this.#Nt(),void this.searchableViewInternal.hideWidget();case"VIEWING_TRACE":return this.#Wt(),this.#Vt(),this.#Ut(),this.#Gt(),void this.flameChart.dimThirdPartiesIfRequired();case"STATUS_PANE_OVERLAY":return this.#Wt(),void this.#zt();default:r.assertNever(e,"Unsupported TimelinePanel viewMode")}}#jt(){return"VIEWING_TRACE"===this.#lt.mode?this.#lt.traceIndex:null}getParsedTraceForLayoutTests(){const e=this.#jt();if(null===e)throw new Error("No trace index active.");const t=this.#mt.parsedTrace(e);if(null===t)throw new Error("No trace engine data found.");return t}getTraceEngineRawTraceEventsForLayoutTests(){const e=this.#jt();if(null===e)throw new Error("No trace index active.");const t=this.#mt.rawTraceEvents(e);if(null===t)throw new Error("No trace engine data found.");return t}#Ft(e,i){const n=i.data;if(-1===n)return void this.#Ne.clearBoundsHighlight();const r=e.eventByIndex(n);if(!r)return;const a=t.Helpers.Timing.traceWindowFromEvent(r);this.#Ne.highlightBounds(a,!1)}loadFromCpuProfile(e){"Idle"===this.state&&null!==e&&(this.prepareToLoadTimeline(),this.loader=Ni.loadFromCpuProfile(e,this))}setState(e){this.state=e,this.updateTimelineControls()}createSettingCheckbox(e,t){const i=new m.Toolbar.ToolbarSettingCheckbox(e,t);return this.recordingOptionUIControls.push(i),i}#$t(){this.panelToolbar.hasItem(this.#Tt)||this.panelToolbar.prependToolbarItem(this.#Tt)}#Kt(){this.panelToolbar.removeToolbarItem(this.#Tt)}#qt(e){e.viewSection().appendItem(Qi(Xi.saveTraceWithAnnotationsMenuOption),(()=>{C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceExported),this.saveToFile(!1,!0)}),{jslogContext:"timeline.save-to-file-with-annotations"}),e.viewSection().appendItem(Qi(Xi.saveTraceWithoutAnnotationsMenuOption),(()=>{C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceExported),this.saveToFile()}),{jslogContext:"timeline.save-to-file-without-annotations"})}populateToolbar(){this.panelToolbar.appendToolbarItem(m.Toolbar.Toolbar.createActionButton(this.toggleRecordAction)),nn||null===this.recordReloadAction||this.panelToolbar.appendToolbarItem(m.Toolbar.Toolbar.createActionButton(this.recordReloadAction)),this.clearButton=new m.Toolbar.ToolbarButton(Qi(Xi.clear),"clear",void 0,"timeline.clear"),this.clearButton.addEventListener("Click",(()=>this.onClearButton())),this.panelToolbar.appendToolbarItem(this.clearButton),this.loadButton=new m.Toolbar.ToolbarButton(Qi(Xi.loadProfile),"import",void 0,"timeline.load-from-file"),this.loadButton.addEventListener("Click",(()=>{C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceImported),this.selectFileToLoad()})),this.saveButton=new m.Toolbar.ToolbarMenuButton(this.#qt.bind(this),!0,!0,"timeline.save-to-file-more-options","download"),this.saveButton.setTitle(Qi(Xi.saveProfile)),d.Runtime.experiments.isEnabled("timeline-enhanced-traces")&&this.saveButton.element.addEventListener("contextmenu",(e=>{if(e.preventDefault(),e.stopPropagation(),e.ctrlKey||2===e.button){const t=new m.ContextMenu.ContextMenu(e);t.saveSection().appendItem(Qi(Xi.exportNormalTraces),(()=>{this.saveToFile()})),t.saveSection().appendItem(Qi(Xi.exportEnhancedTraces),(()=>{this.saveToFile(!0)})),t.show()}else this.saveToFile()})),this.panelToolbar.appendSeparator(),this.panelToolbar.appendToolbarItem(this.loadButton),this.panelToolbar.appendToolbarItem(this.saveButton),this.panelToolbar.appendSeparator(),tn||(this.homeButton=new m.Toolbar.ToolbarButton(Qi(Xi.backToLiveMetrics),"home",void 0,"timeline.back-to-live-metrics"),this.homeButton.addEventListener("Click",(()=>{this.#Ot({mode:"LANDING_PAGE"}),this.#st.navigateToLandingPage()})),this.panelToolbar.appendToolbarItem(this.homeButton),this.panelToolbar.appendSeparator()),this.panelToolbar.appendToolbarItem(this.#st.button()),this.panelToolbar.appendSeparator(),this.panelToolbar.appendSeparator(),tn||nn||(this.showScreenshotsToolbarCheckbox=this.createSettingCheckbox(this.showScreenshotsSetting,Qi(Xi.captureScreenshots)),this.panelToolbar.appendToolbarItem(this.showScreenshotsToolbarCheckbox)),nn||null===this.showMemorySetting||(this.showMemoryToolbarCheckbox=this.createSettingCheckbox(this.showMemorySetting,Qi(Xi.showMemoryTimeline)),this.panelToolbar.appendToolbarItem(this.showMemoryToolbarCheckbox)),this.panelToolbar.appendToolbarItem(m.Toolbar.Toolbar.createActionButton("components.collect-garbage")),this.panelToolbar.appendSeparator();const e=new c.IgnoreListSetting.IgnoreListSetting;if(this.panelToolbar.appendToolbarItem(new m.Toolbar.ToolbarItem(e)),this.#dt){const e=this.createSettingCheckbox(this.#dt,Qi(Xi.thirdPartiesByThirdPartyWeb));this.#ct=e,this.panelToolbar.appendToolbarItem(e)}if(tn){const e=new $t;this.panelToolbar.appendSeparator(),this.panelToolbar.appendToolbarItem(e)}tn||nn||(this.panelRightToolbar.appendSeparator(),this.panelRightToolbar.appendToolbarItem(this.showSettingsPaneButton))}#Yt(){const e=l.Settings.moduleSetting("flamechart-selected-navigation").get(),t=localStorage.getItem("hide-shortcuts-dialog-for-test"),i=this.#Et.get();this.#bt.prependElement(this.#Ct);const n=new m.Toolbar.ToolbarItem(this.#bt);return n.element.setAttribute("jslog",`${v.action().track({click:!0}).context("timeline.shortcuts-dialog-toggle")}`),this.panelRightToolbar.appendToolbarItem(n),this.#Jt(),this.#bt.addEventListener("click",this.#Jt.bind(this)),this.#bt.data={shortcuts:this.#Xt("classic"===e),open:!i&&"true"!==t&&!C.InspectorFrontendHost.isUnderTest()},this.#Ct.classList.add("nav-radio-buttons"),m.ARIAUtils.markAsRadioGroup(this.#Ct),this.#kt.radio.addEventListener("change",(()=>{this.#bt.data={shortcuts:this.#Xt(!1)},l.Settings.moduleSetting("flamechart-selected-navigation").set("modern")})),this.#It.radio.addEventListener("change",(()=>{this.#bt.data={shortcuts:this.#Xt(!0)},l.Settings.moduleSetting("flamechart-selected-navigation").set("classic")})),this.#Ct.appendChild(this.#kt.label),this.#Ct.appendChild(this.#It.label),this.#Et.set(!0),this.#Ct}#Jt(){const e=l.Settings.moduleSetting("flamechart-selected-navigation").get();"classic"===e?(this.#It.radio.checked=!0,C.userMetrics.navigationSettingAtFirstTimelineLoad(2)):"modern"===e&&(this.#kt.radio.checked=!0,C.userMetrics.navigationSettingAtFirstTimelineLoad(3))}#Xt(e){return e?[{title:Qi(Xi.timelineScrollUpDown),bindings:[["Shift","Scroll up/down"],["Shift","↑/↓"]]},{title:Qi(Xi.timelinePanLeftRight),bindings:[["Shift","←/→"],["Scroll left/right"],["A/D"]]},{title:Qi(Xi.timelineZoomInOut),bindings:[["Scroll up/down"],["W/S"],["+/-"]]},{title:Qi(Xi.timelineFastZoomInOut),bindings:[["Shift","W/S"],["Shift","+/-"]]}]:[{title:Qi(Xi.timelineScrollUpDown),bindings:[["Scroll up/down"],["Shift","↑/↓"]]},{title:Qi(Xi.timelinePanLeftRight),bindings:[["Shift","Scroll up/down"],["Scroll left/right"],["Shift","←/→"],["A/D"]]},{title:Qi(Xi.timelineZoomInOut),bindings:[[C.Platform.isMac()?"⌘":"Ctrl","Scroll up/down"],["W/S"],["+/-"]]},{title:Qi(Xi.timelineFastZoomInOut),bindings:[["Shift","W/S"],["Shift","+/-"]]}]}createSettingsPane(){this.showSettingsPaneSetting=l.Settings.Settings.instance().createSetting("timeline-show-settings-toolbar",!1),this.showSettingsPaneButton=new m.Toolbar.ToolbarSettingToggle(this.showSettingsPaneSetting,"gear",Qi(Xi.captureSettings),"gear-filled","timeline-settings-toggle"),o.NetworkManager.MultitargetNetworkManager.instance().addEventListener("ConditionsChanged",this.updateShowSettingsToolbarButton,this),o.CPUThrottlingManager.CPUThrottlingManager.instance().addEventListener("RateChanged",this.updateShowSettingsToolbarButton,this),this.disableCaptureJSProfileSetting.addChangeListener(this.updateShowSettingsToolbarButton,this),this.captureLayersAndPicturesSetting.addChangeListener(this.updateShowSettingsToolbarButton,this),this.captureSelectorStatsSetting.addChangeListener(this.updateShowSettingsToolbarButton,this),this.settingsPane=this.element.createChild("div","timeline-settings-pane"),this.settingsPane.setAttribute("jslog",`${v.pane("timeline-settings-pane").track({resize:!0})}`),this.settingsPane.append(m.SettingsUI.createSettingCheckbox(this.disableCaptureJSProfileSetting.title(),this.disableCaptureJSProfileSetting,Qi(Xi.disablesJavascriptSampling)));const e=this.settingsPane.createChild("div");e.append(Qi(Xi.cpu)),this.cpuThrottlingSelect=P.ThrottlingManager.throttlingManager().createCPUThrottlingSelector(),e.append(this.cpuThrottlingSelect.control.element),this.settingsPane.append(m.SettingsUI.createSettingCheckbox(this.captureLayersAndPicturesSetting.title(),this.captureLayersAndPicturesSetting,Qi(Xi.capturesAdvancedPaint)));const t=this.settingsPane.createChild("div");t.append(Qi(Xi.network)),t.append(this.createNetworkConditionsSelectToolbarItem().element),this.settingsPane.append(m.SettingsUI.createSettingCheckbox(this.captureSelectorStatsSetting.title(),this.captureSelectorStatsSetting,Qi(Xi.capturesSelectorStats)));const i=this.createSettingCheckbox(this.#ot,Qi(Xi.showDataAddedByExtensions)),n=m.XLink.XLink.create("https://developer.chrome.com/docs/devtools/performance/extension",Qi(Xi.learnMore));n.style.marginLeft="5px",i.element.shadowRoot?.appendChild(n),this.settingsPane.append(i.element),this.showSettingsPaneSetting.addChangeListener(this.updateSettingsPaneVisibility.bind(this)),this.updateSettingsPaneVisibility()}createNetworkConditionsSelectToolbarItem(){const e=new m.Toolbar.ToolbarComboBox(null,Qi(Xi.networkConditions));return this.networkThrottlingSelect=P.ThrottlingManager.throttlingManager().createNetworkThrottlingSelector(e.element),e}prepareToLoadTimeline(){console.assert("Idle"===this.state),this.setState("Loading")}createFileSelector(){this.fileSelectorElement&&this.fileSelectorElement.remove(),this.fileSelectorElement=m.UIUtils.createFileSelectorElement(this.loadFromFile.bind(this),".json,.gz,.gzip,.cpuprofile"),this.timelinePane.element.appendChild(this.fileSelectorElement)}contextMenu(e){const t=e;if(-1!==this.flameChart.getMainFlameChart().coordinatesToEntryIndex(t.offsetX,t.offsetY))return;const i=new m.ContextMenu.ContextMenu(e,{useSoftMenu:!0});i.appendItemsAtLocation("timelineMenu"),i.show()}async saveToFile(e=!1,t=!1){if("Idle"!==this.state)return;if("VIEWING_TRACE"!==this.#lt.mode)return;let i=this.#mt.rawTraceEvents(this.#lt.traceIndex);const n=this.#mt.metadata(this.#lt.traceIndex);if(!i)return;e&&d.Runtime.experiments.isEnabled("timeline-compiled-sources")||(i=i.filter((e=>"disabled-by-default-devtools.v8-source-rundown-sources"!==e.cat))),n&&(n.modifications=t?Ve.activeManager()?.toJSON():void 0,n.enhancedTraceVersion=e?o.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion:void 0);const a=r.DateUtilities.toISO8601Compact(new Date);let s;s="CPUProfile"===n?.dataOrigin?`CPU-${a}.cpuprofile`:n?.enhancedTraceVersion?`EnhancedTraces-${a}.json`:`Trace-${a}.json`;try{let t;if("CPUProfile"===n?.dataOrigin){const e=i.find((e=>"CpuProfile"===e.name));if(!e?.args?.data)return;const n=e.args?.data;if(n.hasOwnProperty("cpuProfile")){t=Qt(n.cpuProfile)}}else{const r=Zt(i,{...n,sourceMaps:e?n?.sourceMaps:void 0});t=Array.from(r).join("")}if(!t)throw new Error("Trace content empty");await k.FileManager.FileManager.instance().save(s,t,!0,!1),k.FileManager.FileManager.instance().close(s)}catch(e){if(console.error(e.stack),"AbortError"===e.name)return;l.Console.Console.instance().error(Qi(Xi.failedToSaveTimelineSS,{PH1:e.message,PH2:e.name}))}}async showHistoryDropdown(){const e=await this.#st.showHistoryDropDown();e&&("LANDING_PAGE"===e.type?this.#Ot({mode:"LANDING_PAGE"}):this.#Ot({mode:"VIEWING_TRACE",traceIndex:e.parsedTraceIndex}))}navigateHistory(e){const t=this.#st.navigate(e);return t&&"TRACE_INDEX"===t.type&&this.#Ot({mode:"VIEWING_TRACE",traceIndex:t.parsedTraceIndex}),!0}#_t(){if("VIEWING_TRACE"!==this.#lt.mode)return;const e=Ve.activeManager()?.toJSON();e&&this.#mt.overrideModifications(this.#lt.traceIndex,e)}selectFileToLoad(){this.fileSelectorElement&&this.fileSelectorElement.click()}async loadFromFile(e){if("Idle"!==this.state)return;const t=e.slice(0,5e3);(await t.text()).includes("enhancedTraceVersion")?await window.scheduler.postTask((()=>{this.#Zt(e)}),{priority:"background"}):(this.loader=await Ni.loadFromFile(e,this),this.prepareToLoadTimeline()),this.createFileSelector()}#Zt(e){let t=null,i=null;const n=new URL(window.location.href),r=n.pathname.slice(0,n.pathname.lastIndexOf("/"));n.pathname=`${r}/rehydrated_devtools_app.html`,i=n.toString();const a=window;a.addEventListener("message",(function i(r){n&&r.data&&"REHYDRATING_WINDOW_READY"===r.data.type&&t?.postMessage({type:"REHYDRATING_TRACE_FILE",traceFile:e},n.origin),a.removeEventListener("message",i)})),t=a.open(i,void 0,"noopener=false,popup=true")}async loadFromURL(e){"Idle"===this.state&&(this.prepareToLoadTimeline(),this.loader=await Ni.loadFromURL(e,this))}updateMiniMap(){if("VIEWING_TRACE"!==this.#lt.mode)return;const e=this.#mt.parsedTrace(this.#lt.traceIndex),t="CPUProfile"===this.#mt.metadata(this.#lt.traceIndex)?.dataOrigin;e&&this.#Ne.setData({parsedTrace:e,isCpuProfile:t,settings:{showScreenshots:this.showScreenshotsSetting.get(),showMemory:!nn&&(this.showMemorySetting?.get()||!1)}})}onMemoryModeChanged(){this.flameChart.updateCountersGraphToggle(!nn&&(this.showMemorySetting?.get()||!1)),this.updateMiniMap(),this.doResize(),this.select(null)}onDimThirdPartiesChanged(){"VIEWING_TRACE"===this.#lt.mode&&this.flameChart.dimThirdPartiesIfRequired()}#Rt(){this.flameChart.rebuildDataForTrace()}updateSettingsPaneVisibility(){tn||nn||(this.showSettingsPaneSetting.get()?(this.showSettingsPaneButton.setToggled(!0),this.settingsPane?.classList.remove("hidden")):(this.showSettingsPaneButton.setToggled(!1),this.settingsPane?.classList.add("hidden")))}updateShowSettingsToolbarButton(){const e=[];if(1!==o.CPUThrottlingManager.CPUThrottlingManager.instance().cpuThrottlingRate()&&e.push(Qi(Xi.CpuThrottlingIsEnabled)),o.NetworkManager.MultitargetNetworkManager.instance().isThrottling()&&e.push(Qi(Xi.NetworkThrottlingIsEnabled)),this.captureLayersAndPicturesSetting.get()&&e.push(Qi(Xi.SignificantOverheadDueToPaint)),this.captureSelectorStatsSetting.get()&&e.push(Qi(Xi.SelectorStatsEnabled)),this.disableCaptureJSProfileSetting.get()&&e.push(Qi(Xi.JavascriptSamplingIsDisabled)),this.showSettingsPaneButton.setChecked(e.length>0),this.showSettingsPaneButton.element.style.setProperty("--dot-toggle-top","16px"),this.showSettingsPaneButton.element.style.setProperty("--dot-toggle-left","15px"),e.length){const t=document.createElement("div");e.forEach((e=>{t.createChild("div").textContent=e})),this.showSettingsPaneButton.setTitle(t.textContent||"")}else this.showSettingsPaneButton.setTitle(Qi(Xi.captureSettings))}setUIControlsEnabled(e){this.recordingOptionUIControls.forEach((t=>t.setEnabled(e)))}async#Qt(){if(!this.controller)return r.DevToolsPath.EmptyUrlString;const e=this.controller.primaryPageTarget.inspectedURL(),t=this.controller.primaryPageTarget.model(o.ResourceTreeModel.ResourceTreeModel),i=t&&await t.navigationHistory();if(!t||!i)return e;const{currentIndex:n,entries:a}=i;return a[n].url}async#ei(){const e=new Promise((async(e,t)=>{if(!this.controller)return void t("Could not find TimelineController");const i=this.controller.primaryPageTarget.model(o.ResourceTreeModel.ResourceTreeModel);i?(i.addEventListener(o.ResourceTreeModel.Events.FrameNavigated,(function n(r){"about:blank"===r.data.url?e():t(`Unexpected navigation to ${r.data.url}`),i?.removeEventListener(o.ResourceTreeModel.Events.FrameNavigated,n)})),await i.navigate("about:blank")):t("Could not load resourceModel")}));await e}async#ti(){try{if(this.cpuProfiler=m.Context.Context.instance().flavor(o.CPUProfilerModel.CPUProfilerModel),!this.cpuProfiler){const e=o.TargetManager.TargetManager.instance().targets().find((e=>e.type()===o.Target.Type.NODE));if(!e)throw new Error("Could not load any Node target.");e&&(this.cpuProfiler=e.model(o.CPUProfilerModel.CPUProfilerModel))}if(this.setUIControlsEnabled(!1),this.#Ot({mode:"STATUS_PANE_OVERLAY"}),!this.cpuProfiler)throw new Error("No Node target is found.");await o.TargetManager.TargetManager.instance().suspendAllTargets("performance-timeline"),await this.cpuProfiler.startRecording(),this.recordingStarted()}catch(e){await this.recordingFailed(e.message)}}async#ii(){try{const e=o.TargetManager.TargetManager.instance().rootTarget(),t=o.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)throw new Error("Could not load primary page target.");if(!e)throw new Error("Could not load root target.");if($i.isUiDevTools()?this.controller=new Yi(e,t,this):this.controller=new ri(e,t,this),this.setUIControlsEnabled(!1),this.#Ot({mode:"STATUS_PANE_OVERLAY"}),!this.controller)throw new Error("Could not create Timeline controller");const i=await this.#Qt();this.recordingPageReload&&await this.#ei();const n={enableJSSampling:!this.disableCaptureJSProfileSetting.get(),capturePictures:this.captureLayersAndPicturesSetting.get(),captureFilmStrip:this.showScreenshotsSetting.get(),captureSelectorStats:this.captureSelectorStatsSetting.get()},r=await this.controller.startRecording(n);if(r.getError())throw new Error(r.getError());const a=this.recordingPageReload?{navigateToUrl:i}:void 0;this.recordingStarted(a)}catch(e){await this.recordingFailed(e.message)}}async startRecording(){console.assert(!this.statusPane,"Status pane is already opened."),this.setState("StartPending"),this.showRecordingStarted(),tn?await this.#ti():await this.#ii()}async stopRecording(){if(this.statusPane&&(this.statusPane.finish(),this.statusPane.updateStatus(Qi(Xi.stoppingTimeline)),this.statusPane.updateProgressBar(Qi(Xi.received),0)),this.setState("StopPending"),this.controller)return await this.controller.stopRecording(),this.setUIControlsEnabled(!0),await this.controller.dispose(),void(this.controller=null);if(this.cpuProfiler){const e=await this.cpuProfiler.stopRecording();this.setState("Idle"),this.loadFromCpuProfile(e),this.setUIControlsEnabled(!0),this.cpuProfiler=null,await o.TargetManager.TargetManager.instance().resumeAllTargets()}}async recordingFailed(e,t){this.statusPane&&this.statusPane.remove(),this.statusPane=new an({description:e,buttonText:Qi(Xi.close),hideStopButton:!0,showProgress:void 0,showTimer:void 0},(async()=>{this.statusPane?.remove(),await this.loadingComplete([],null,null)})),this.statusPane.showPane(this.statusPaneContainer),this.statusPane.updateStatus(Qi(Xi.recordingFailed)),t&&this.statusPane.enableDownloadOfEvents(t),this.setState("RecordingFailed"),this.traceLoadStart=null,this.setUIControlsEnabled(!0),this.controller&&(await this.controller.dispose(),this.controller=null),o.TargetManager.TargetManager.instance().resumeAllTargets()}onSuspendStateChanged(){this.updateTimelineControls()}consoleProfileFinished(e){this.loadFromCpuProfile(e.cpuProfile),m.InspectorView.InspectorView.instance().showPanel("timeline")}updateTimelineControls(){this.toggleRecordAction.setToggled("Recording"===this.state),this.toggleRecordAction.setEnabled("Recording"===this.state||"Idle"===this.state),nn||null===this.recordReloadAction||this.recordReloadAction.setEnabled(!tn&&"Idle"===this.state),this.#st.setEnabled("Idle"===this.state),this.clearButton.setEnabled("Idle"===this.state),this.panelToolbar.setEnabled("Loading"!==this.state),this.panelRightToolbar.setEnabled("Loading"!==this.state),this.dropTarget.setEnabled("Idle"===this.state),this.loadButton.setEnabled("Idle"===this.state),this.saveButton.setEnabled("Idle"===this.state&&this.#ni()),this.homeButton?.setEnabled("Idle"===this.state&&this.#ni()),"VIEWING_TRACE"===this.#lt.mode&&this.#$t()}async toggleRecording(){"Idle"===this.state?(this.recordingPageReload=!1,await this.startRecording(),C.userMetrics.actionTaken(C.UserMetrics.Action.TimelineStarted)):"Recording"===this.state&&await this.stopRecording()}recordReload(){"Idle"===this.state&&(this.recordingPageReload=!0,this.startRecording(),C.userMetrics.actionTaken(C.UserMetrics.Action.TimelinePageReloadStarted))}onClearButton(){this.#st.clear(),this.#mt=this.#xt(),Ve.reset(),this.#Ht(),this.flameChart.getMainDataProvider().reset(),this.flameChart.getNetworkDataProvider().reset(),this.flameChart.reset(),this.#Ot({mode:"LANDING_PAGE"})}#ni(){return"VIEWING_TRACE"===this.#lt.mode}#ri(e,t=null){if(e||d.Runtime.experiments.isEnabled("timeline-show-all-events"))return;const i=t?[t]:[Tn.visibleEventsFilter()];Tt.instance().setFilters(i)}#ai=l.Debouncer.debounce((()=>{this.#St&&(m.ARIAUtils.alert(this.#St),this.#St=null)}),1e3);#si(e){e!==this.#St&&(this.#St&&m.ARIAUtils.alert(this.#St),this.#St=e,this.#ai())}#Vt(){if("VIEWING_TRACE"!==this.#lt.mode)return;const{traceIndex:e}=this.#lt,n=this.#mt.parsedTrace(e),r=this.#mt.metadata(e),c=this.#mt.syntheticTraceEventsManager(e);if(!n||!c)return console.error(`setModelForActiveTrace was called with an invalid trace index: ${e}`),void this.#Ot({mode:"LANDING_PAGE"});t.Helpers.SyntheticEvents.SyntheticEventsManager.activate(c),i.LineLevelProfile.Performance.instance().reset(),this.#Ne.reset(),a.TraceBounds.BoundsManager.instance().resetWithNewBounds(n.Meta.traceBounds);const h=Ve.initAndActivateModificationsManager(this.#mt,e);h||console.error("ModificationsManager could not be created or activated."),this.statusPane?.updateProgressBar(Qi(Xi.processed),70);const p=this.#mt.traceInsights(e);this.flameChart.setInsights(p,this.#wt),this.flameChart.setModel(n,r),this.flameChart.resizeToPreferredHeights(),this.flameChart.setSelectionAndReveal(null),this.#yt.setParsedTrace(n,r),this.searchableViewInternal.showWidget();const m=this.#ht.get(e)??null;this.#ri(n.Meta.traceIsGeneric,m),h?.addEventListener(We.eventName,(e=>{const t=oe(e);t&&this.#si(t);const{overlay:i,action:n}=e;"Add"===n?this.flameChart.addOverlay(i):"Remove"===n?this.flameChart.removeOverlay(i):"UpdateTimeRange"===n&&ne(i)?this.flameChart.updateExistingOverlay(i,{bounds:i.bounds}):"UpdateLinkToEntry"===n&&re(i)?this.flameChart.updateExistingOverlay(i,{entryTo:i.entryTo}):"EnterLabelEditState"===n&&ae(i)&&this.flameChart.enterLabelEditMode(i);const r=h.getAnnotations(),a=this.buildColorsAnnotationsMap(r);this.#yt.setAnnotations(r,a)}));const u=this.flameChart.getMainDataProvider().compatibilityTracksAppenderInstance().threadAppenders().at(0);if(u){const e=t.Extras.MainThreadActivity.calculateWindow(n.Meta.traceBounds,u.getEntries());a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(e)}const g=Ve.activeManager();if(g){const e=g.getAnnotations(),t=this.buildColorsAnnotationsMap(e);this.#yt.setAnnotations(e,t),this.flameChart.bulkAddOverlays(g.getOverlays())}if(i.LineLevelProfile.Performance.instance().reset(),n?.Samples.profilesInProcess.size){const e=o.TargetManager.TargetManager.instance().primaryPageTarget(),t=Array.from(n.Samples.profilesInProcess).flatMap((([e,t])=>Array.from(t.values()).map((e=>e.parsedProfile))));for(const n of t)i.LineLevelProfile.Performance.instance().appendCPUProfile(n,e)}if(this.#de=new s.EntityMapper.EntityMapper(n),this.#ut=new s.SourceMapsResolver.SourceMapsResolver(n,this.#de),this.#ut.addEventListener(s.SourceMapsResolver.SourceMappingsUpdated.eventName,this.#gt),this.#ut.install(),this.#de=new s.EntityMapper.EntityMapper(n),this.statusPane?.updateProgressBar(Qi(Xi.processed),80),this.updateMiniMap(),this.statusPane?.updateProgressBar(Qi(Xi.processed),90),this.updateTimelineControls(),this.#Lt(null),this.#yt.setInsights(p),this.#wt.clear(),p)for(const[e,t]of p)for(const i of Object.values(t.model)){let t=i.relatedEvents;t?Array.isArray(t)&&(t=new Map(t.map((e=>[e,[]])))):t=new Map;for(const[n,r]of t.entries()){const t=this.#wt.get(n)??[];this.#wt.set(n,t),t.push({insightLabel:i.title,messages:r,activateInsight:()=>{this.#Lt({model:i,insightSetKey:e})}})}}this.#Gt(),1===this.#mt.size()&&d.Runtime.experiments.isEnabled("timeline-alternative-navigation")&&(this.#Yt(),"classic"===l.Settings.moduleSetting("flamechart-selected-navigation").get()?C.userMetrics.navigationSettingAtFirstTimelineLoad(0):C.userMetrics.navigationSettingAtFirstTimelineLoad(1))}#Gt(){if(null!==d.Runtime.Runtime.queryParam("disable-auto-performance-sidebar-reveal"))return;const e=this.#ft;this.#yt.userHasOpenedSidebarOnce()&&!e||this.#pt.showBoth(),this.#ft=!1}buildColorsAnnotationsMap(e){const i=new Map;for(const n of e)t.Types.File.isEntryLabelAnnotation(n)?i.set(n.entry,this.getEntryColorByEntry(n.entry)):t.Types.File.isEntriesLinkAnnotation(n)&&(i.set(n.entryFrom,this.getEntryColorByEntry(n.entryFrom)),n.entryTo&&i.set(n.entryTo,this.getEntryColorByEntry(n.entryTo)));return i}getEntryColorByEntry(e){const t=this.flameChart.getMainDataProvider().indexForEvent(e),i=this.flameChart.getNetworkDataProvider().indexForEvent(e);if(null!==t){const e=this.flameChart.getMainDataProvider().entryColor(t);return"white"===e?n.ThemeSupport.instance().getComputedValue("--app-color-system"):e}if(null!==i){return this.flameChart.getNetworkDataProvider().entryColor(i)}return console.warn("Could not get entry color for ",e),n.ThemeSupport.instance().getComputedValue("--app-color-system")}recordingStarted(e){if(e&&this.recordingPageReload&&this.controller){const t=this.controller?.primaryPageTarget.model(o.ResourceTreeModel.ResourceTreeModel);if(!t)return void this.recordingFailed("Could not navigate to original URL");t.navigate(e.navigateToUrl)}this.#Ot({mode:"STATUS_PANE_OVERLAY"}),this.setState("Recording"),this.showRecordingStarted(),this.statusPane&&(this.statusPane.enableAndFocusButton(),this.statusPane.updateStatus(Qi(Xi.profiling)),this.statusPane.updateProgressBar(Qi(Xi.bufferUsage),0),this.statusPane.startTimer())}recordingProgress(e){this.statusPane&&this.statusPane.updateProgressBar(Qi(Xi.bufferUsage),100*e)}#zt(){this.#pt.sidebarIsShowing()&&(this.#ft=!0,this.#pt.hideSidebar())}#Nt(){if(this.updateSettingsPaneVisibility(),this.#Kt(),this.#zt(),this.landingPage)this.landingPage.show(this.statusPaneContainer);else{if(nn)this.landingPage=new Jt(this.toggleRecordAction);else{const e=new c.LiveMetricsView.LiveMetricsView;e.isNode=tn,this.landingPage=x.LegacyWrapper.legacyWrapper(m.Widget.Widget,e)}this.landingPage.element.classList.add("timeline-landing-page","fill"),this.landingPage.contentElement.classList.add("fill"),this.landingPage.show(this.statusPaneContainer)}}#Wt(){this.landingPage.detach(),this.showSettingsPaneButton?.setToggled(!1),this.settingsPane?.classList.add("hidden")}async loadingStarted(){this.#Ot({mode:"STATUS_PANE_OVERLAY"}),this.statusPane&&this.statusPane.remove(),this.statusPane=new an({showProgress:!0,showTimer:void 0,hideStopButton:!0,buttonText:void 0,description:void 0},(()=>this.cancelLoading())),this.statusPane.showPane(this.statusPaneContainer),this.statusPane.updateStatus(Qi(Xi.loadingProfile)),this.loader||this.statusPane.finish(),this.traceLoadStart=t.Types.Timing.Milli(performance.now()),await this.loadingProgress(0)}async loadingProgress(e){"number"==typeof e&&this.statusPane&&this.statusPane.updateProgressBar(Qi(Xi.received),100*e)}async processingStarted(){this.statusPane?.updateStatus(Qi(Xi.processingProfile))}#Pt(){this.#mt.addEventListener(t.TraceModel.ModelUpdateEvent.eventName,(e=>{const t=e,i=Qi(Xi.processed);if("COMPLETE"===t.data.type)this.statusPane?.updateProgressBar(i,70);else if("PROGRESS_UPDATE"===t.data.type){const e=t.data.data;this.statusPane?.updateProgressBar(i,100*e.percent*.7)}}))}#vt(){this.flameChart.getMainDataProvider().timelineData(!0),this.flameChart.getMainFlameChart().update()}async loadingComplete(e,i=null,n){this.#mt.resetProcessor(),delete this.loader;const r="StopPending"===this.state;if(this.setState("Idle"),0!==e.length)try{await this.#oi(e,r,n);const a=this.#mt.lastTraceIndex();i&&this.#ht.set(a,i),this.#Ot({mode:"VIEWING_TRACE",traceIndex:a});const s=this.#mt.parsedTrace(a);if(!s)throw new Error(`Could not get trace data at index ${a}`);r&&ut.instance().registerFreshRecording(s),this.#st.addRecording({data:{parsedTraceIndex:a,type:"TRACE_INDEX"},filmStripForPreview:t.Extras.FilmStrip.fromParsedTrace(s),parsedTrace:s,metadata:n})}catch(t){this.recordingFailed(t.message,e),console.error(t)}finally{this.recordTraceLoadMetric()}else this.#mt.size()?this.#Ot({mode:"VIEWING_TRACE",traceIndex:this.#mt.lastTraceIndex()}):this.#Ot({mode:"LANDING_PAGE"})}recordTraceLoadMetric(){if(!this.traceLoadStart)return;const e=this.traceLoadStart;requestAnimationFrame((()=>{setTimeout((()=>{const i=t.Types.Timing.Milli(performance.now()),n=performance.measure("TraceLoad",{start:e,end:i}),r=t.Types.Timing.Milli(n.duration);this.element.dispatchEvent(new de(r)),C.userMetrics.performanceTraceLoad(n)}),0)}))}async#li(e,t){const i=async e=>{if(!e.sourceMapUrl||e.sourceMapUrl.startsWith("data:"))return;if(t.sourceMaps?.find((t=>t.sourceMapUrl===e.sourceMapUrl)))return;let i=e.sourceMap?.json();if(!i){const t={target:null,frameId:e.frame,initiatorUrl:e.url};i=await o.SourceMapManager.tryLoadSourceMap(e.sourceMapUrl,t)}e.url&&i&&t.sourceMaps?.push({url:e.url,sourceMapUrl:e.sourceMapUrl,sourceMap:i})};t.sourceMaps=[];const n=[];for(const t of e?.Scripts.scripts.values()??[])n.push(i(t));await Promise.all(n)}#di(e,t){if(!d.Runtime.experiments.isEnabled("timeline-experimental-insights"))return;const i=new Map;for(const e of o.TargetManager.TargetManager.instance().targets()){const t=e.model(o.DebuggerModel.DebuggerModel);if(!t)continue;const n=e.model(o.ResourceTreeModel.ResourceTreeModel),r=(n?.frames()??[]).map((e=>e.id));for(const e of r)i.set(e,t)}return async function(n){const{scriptId:r,scriptUrl:a,sourceMapUrl:s,frame:l,cachedRawSourceMap:d}=n;if(d)return new o.SourceMap.SourceMap(a,s,d);if(e){const e=await async function(e,t,n){const r=i.get(e);if(!r)return;const a=r.scriptForId(t);return!a||n&&n!==a.sourceURL?void 0:await r.sourceMapManager().sourceMapForClientPromise(a)}(l,r,a);if(e)return e}const c=s.startsWith("data:");if(!e&&t?.sourceMaps&&!c){const e=t.sourceMaps.find((e=>e.sourceMapUrl===s));if(e)return new o.SourceMap.SourceMap(a,s,e.sourceMap)}if(!e&&!c)return null;if(!a)return null;const h={target:null,frameId:l,initiatorUrl:a},p=await o.SourceMapManager.tryLoadSourceMap(s,h);return p?new o.SourceMap.SourceMap(a,s,p):null}}async#oi(e,t,i){if(await this.#mt.parse(e,{metadata:i??void 0,isFreshRecording:t,resolveSourceMap:this.#di(t,i)}),t&&i&&d.Runtime.experiments.isEnabled("timeline-enhanced-traces")){const e=this.#mt.lastTraceIndex(),t=this.#mt.parsedTrace(e);t&&await this.#li(t,i)}}loadingCompleteForTest(){}showRecordingStarted(){this.#Ot({mode:"STATUS_PANE_OVERLAY"}),this.statusPane&&this.statusPane.remove(),this.statusPane=new an({showTimer:!0,showProgress:!0,hideStopButton:!1,description:void 0,buttonText:void 0},(()=>this.stopRecording())),this.statusPane.showPane(this.statusPaneContainer),this.statusPane.updateStatus(Qi(Xi.initializingProfiler))}cancelLoading(){this.loader&&this.loader.cancel()}async loadEventFired(e){if("Recording"!==this.state||!this.recordingPageReload||!this.controller||this.controller.primaryPageTarget!==e.data.resourceTreeModel.target())return;const t=this.controller;await new Promise((e=>window.setTimeout(e,this.millisecondsToRecordAfterLoadEvent))),t===this.controller&&"Recording"===this.state&&this.stopRecording()}frameForSelection(e){if("VIEWING_TRACE"!==this.#lt.mode)return null;if(wt(e))return null;if(t.Types.Events.isSyntheticNetworkRequest(e.event))return null;const i=this.#mt.parsedTrace(this.#lt.traceIndex);if(!i)return null;const n=bt(e).max;return t.Handlers.ModelHandlers.Frames.framesWithinWindow(i.Frames.frames,n,n).at(0)||null}jumpToFrame(e){if("VIEWING_TRACE"!==this.#lt.mode)return;const i=this.selection&&this.frameForSelection(this.selection);if(!i)return;const n=this.#mt.parsedTrace(this.#lt.traceIndex);if(!n)return;let a=n.Frames.frames.indexOf(i);console.assert(a>=0,"Can't find current frame in the frame list"),a=r.NumberUtilities.clamp(a+e,0,n.Frames.frames.length-1);const s=n.Frames.frames[a];return this.#ci(t.Helpers.Timing.microToMilli(s.startTime),t.Helpers.Timing.microToMilli(s.endTime)),this.select(yt(s)),!0}#hi(e,i){if(null!==e&&null===i&&m.ARIAUtils.alert(Qi(Xi.selectionCleared)),null===i)return;if(e&&Et(e,i))return;if(wt(i))return;if(t.Types.Events.isLegacyTimelineFrame(i.event))return void m.ARIAUtils.alert(Qi(Xi.frameSelected));const n=s.EntryName.nameForEntry(i.event);m.ARIAUtils.alert(Qi(Xi.eventSelected,{PH1:n}))}select(e){this.#hi(this.selection,e),this.selection=e,this.flameChart.setSelectionAndReveal(e)}selectEntryAtTime(e,i){if(e)if(0!==e.length){for(let n=r.ArrayUtilities.upperBound(e,i,((e,t)=>e-t.ts))-1;n>=0;--n){const r=e[n],{endTime:a}=t.Helpers.Timing.eventTimingsMilliSeconds(r);if(t.Helpers.Trace.isTopLevelEvent(r)&&a<i)break;if(Tt.instance().isVisible(r)&&a>=i)return void this.select(yt(r))}this.select(null)}else this.select(null)}highlightEvent(e){this.flameChart.highlightEvent(e)}#ci(e,i){const n=a.TraceBounds.BoundsManager.instance().state();if(!n)return;const r=n.milli.timelineTraceWindow;let s=0;r.max<i?s=i-r.max:r.min>e&&(s=e-r.min),a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(t.Helpers.Timing.traceWindowFromMilliSeconds(t.Types.Timing.Milli(r.min+s),t.Types.Timing.Milli(r.max+s)),{shouldAnimate:!0})}handleDrop(e){const t=e.items;if(!t.length)return;const i=t[0];if(C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceImported),"string"===i.kind){const t=e.getData("text/uri-list");new l.ParsedURL.ParsedURL(t).isValid&&this.loadFromURL(t)}else if("file"===i.kind){const e=t[0].getAsFile();if(!e)return;this.loadFromFile(e)}}#At(){this.flameChart.setSelectionAndReveal(null),this.flameChart.selectDetailsViewTab(ir.Details,null)}}class an extends m.Widget.VBox{status;time;progressLabel;progressBar;description;button;downloadTraceButton;startTime;timeUpdateTimer;#pi;constructor(e,t){super(!0),this.contentElement.classList.add("timeline-status-dialog"),this.contentElement.setAttribute("jslog",`${v.dialog("timeline-status").track({resize:!0})}`);const i=this.contentElement.createChild("div","status-dialog-line status");if(i.createChild("div","label").textContent=Qi(Xi.status),this.status=i.createChild("div","content"),m.ARIAUtils.markAsStatus(this.status),e.showTimer){const e=this.contentElement.createChild("div","status-dialog-line time");e.createChild("div","label").textContent=Qi(Xi.time),this.time=e.createChild("div","content")}if(e.showProgress){const e=this.contentElement.createChild("div","status-dialog-line progress");this.progressLabel=e.createChild("div","label"),this.progressBar=e.createChild("div","indicator-container").createChild("div","indicator"),m.ARIAUtils.markAsProgressBar(this.progressBar)}if("string"==typeof e.description){const t=this.contentElement.createChild("div","status-dialog-line description");t.createChild("div","label").textContent=Qi(Xi.description),this.description=t.createChild("div","content"),this.description.innerText=e.description}const n=this.contentElement.createChild("div","stop-button");this.downloadTraceButton=m.UIUtils.createTextButton(Qi(Xi.downloadAfterError),(()=>{this.#mi()}),{jslogContext:"timeline.download-after-error"}),this.downloadTraceButton.disabled=!0,this.downloadTraceButton.classList.add("hidden");const r=e.buttonText||Qi(Xi.stop);this.button=m.UIUtils.createTextButton(r,t,{jslogContext:"timeline.stop-recording"}),this.button.classList.toggle("hidden",e.hideStopButton),n.append(this.downloadTraceButton),n.append(this.button)}finish(){this.stopTimer(),this.button.classList.add("hidden")}async#mi(){if(!this.#pi||0===this.#pi.length)return;const e=`Trace-Load-Error-${r.DateUtilities.toISO8601Compact(new Date)}.json`,t=Zt(this.#pi,{}),i=Array.from(t).join("");await k.FileManager.FileManager.instance().save(e,i,!0,!1),k.FileManager.FileManager.instance().close(e)}enableDownloadOfEvents(e){this.#pi=e,this.downloadTraceButton.disabled=!1,this.downloadTraceButton.classList.remove("hidden")}remove(){this.element.parentNode?.classList.remove("tinted"),this.stopTimer(),this.element.remove()}showPane(e){this.show(e),e.classList.add("tinted")}enableAndFocusButton(){this.button.classList.remove("hidden"),this.button.focus()}updateStatus(e){this.status.textContent=e}updateProgressBar(e,t){this.progressLabel.textContent=e,this.progressBar.style.width=t.toFixed(1)+"%",m.ARIAUtils.setValueNow(this.progressBar,t),this.updateTimer()}startTimer(){this.startTime=Date.now(),this.timeUpdateTimer=window.setInterval(this.updateTimer.bind(this),100),this.updateTimer()}stopTimer(){this.timeUpdateTimer&&(clearInterval(this.timeUpdateTimer),this.updateTimer(),delete this.timeUpdateTimer)}updateTimer(){if(!this.timeUpdateTimer||!this.time)return;const t=(Date.now()-this.startTime)/1e3;this.time.textContent=e.TimeUtilities.preciseSecondsToString(t,1)}wasShown(){super.wasShown(),this.registerRequiredCSS(_i)}}let sn;class on{static instance(e={forceNew:null}){const{forceNew:t}=e;return sn&&!t||(sn=new on),sn}handleQueryParam(e){m.ViewManager.ViewManager.instance().showView("timeline").then((async()=>{await rn.instance().loadFromURL(window.decodeURIComponent(e))}))}}class ln{insight;constructor(e){this.insight=e}}var dn=Object.freeze({__proto__:null,ActionDelegate:class{handleAction(e,t){const i=e.flavor(rn);if(null===i)return!1;switch(t){case"timeline.toggle-recording":return i.toggleRecording(),!0;case"timeline.record-reload":return i.recordReload(),!0;case"timeline.save-to-file":return i.saveToFile(),!0;case"timeline.load-from-file":return i.selectFileToLoad(),!0;case"timeline.jump-to-previous-frame":return i.jumpToFrame(-1),!0;case"timeline.jump-to-next-frame":return i.jumpToFrame(1),!0;case"timeline.show-history":return i.showHistoryDropdown(),!0;case"timeline.previous-recording":return i.navigateHistory(1),!0;case"timeline.next-recording":return i.navigateHistory(-1),!0}return!1}},EventRevealer:class{async reveal(e){await m.ViewManager.ViewManager.instance().showView("timeline"),rn.instance().select(yt(e.event))}},LoadTimelineHandler:on,SelectedInsight:ln,StatusPane:an,TimelinePanel:rn,TraceRevealer:class{async reveal(e){await m.ViewManager.ViewManager.instance().showView("timeline"),rn.instance().loadFromEvents(e.traceEvents)}},headerHeight:20,rowHeight:18});const cn=new CSSStyleSheet;cn.replaceSync(pt.cssText);const hn={emptyPlaceholder:"{PH1}",timestamp:"Timestamp",interactionID:"ID",inputDelay:"Input delay",processingDuration:"Processing duration",presentationDelay:"Presentation delay",compile:"Compile",parse:"Parse",sS:"{PH1}: {PH2}",sCollected:"{PH1} collected",sSs:"{PH1} [{PH2}…{PH3}]",sSSquareBrackets:"{PH1} [{PH2}…]",learnMore:"Learn more",compilationCacheStatus:"Compilation cache status",compilationCacheSize:"Compilation cache size",compilationCacheKind:"Compilation cache kind",scriptLoadedFromCache:"script loaded from cache",failedToLoadScriptFromCache:"failed to load script from cache",scriptNotEligibleToBeLoadedFromCache:"script not eligible",collected:"Collected",function:"Function",timerId:"Timer ID",timeout:"Timeout",repeats:"Repeats",callbackId:"Callback ID",module:"Module",script:"Script",streamed:"Streamed",eagerCompile:"Compiling all functions eagerly",url:"Url",producedCacheSize:"Produced cache size",consumedCacheSize:"Consumed cache size",location:"Location",sSCurlyBrackets:"({PH1}, {PH2})",dimensions:"Dimensions",sSDimensions:"{PH1} × {PH2}",layerRoot:"Layer root",ownerElement:"Owner element",imageUrl:"Image URL",stylesheetUrl:"Stylesheet URL",elementsAffected:"Elements affected",nodesThatNeedLayout:"Nodes that need layout",sOfS:"{PH1} of {PH2}",layoutRoot:"Layout root",message:"Message",callbackFunction:"Callback function",range:"Range",allottedTime:"Allotted time",invokedByTimeout:"Invoked by timeout",type:"Type",size:"Size",details:"Details",warning:"Warning",relatedNode:"Related node",preview:"Preview",aggregatedTime:"Aggregated time",duration:"Duration",initiatorStackTrace:"Initiator stack trace",initiatedBy:"Initiated by",initiatorFor:"Initiator for",traceEvent:"Trace event",timerInstalled:"Timer installed",animationFrameRequested:"Animation frame requested",idleCallbackRequested:"Idle callback requested",recalculationForced:"Recalculation forced",firstLayoutInvalidation:"First layout invalidation",layoutForced:"Layout forced",animating:"Animating",compositingFailed:"Compositing failed",compositingFailedAcceleratedAnimationsDisabled:"Accelerated animations disabled",compositingFailedEffectSuppressedByDevtools:"Effect suppressed by DevTools ",compositingFailedInvalidAnimationOrEffect:"Invalid animation or effect",compositingFailedEffectHasUnsupportedTimingParams:"Effect has unsupported timing parameters",compositingFailedEffectHasNonReplaceCompositeMode:'Effect has composite mode other than "replace"',compositingFailedTargetHasInvalidCompositingState:"Target has invalid compositing state",compositingFailedTargetHasIncompatibleAnimations:"Target has another animation which is incompatible",compositingFailedTargetHasCSSOffset:"Target has CSS offset",compositingFailedAnimationAffectsNonCSSProperties:"Animation affects non-CSS properties",compositingFailedTransformRelatedPropertyCannotBeAcceleratedOnTarget:"Transform-related property cannot be accelerated on target",compositingFailedTransformDependsBoxSize:"Transform-related property depends on box size",compositingFailedFilterRelatedPropertyMayMovePixels:"Filter-related property may move pixels",compositingFailedUnsupportedCSSProperty:"{propertyCount, plural,\n =1 {Unsupported CSS property: {properties}}\n other {Unsupported CSS properties: {properties}}\n }",compositingFailedMixedKeyframeValueTypes:"Mixed keyframe value types",compositingFailedTimelineSourceHasInvalidCompositingState:"Timeline source has invalid compositing state",compositingFailedAnimationHasNoVisibleChange:"Animation has no visible change",compositingFailedAffectsImportantProperty:"Effect affects a property with !important",compositingFailedSVGTargetHasIndependentTransformProperty:"SVG target has independent transform property",compositingFailedUnknownReason:"Unknown Reason",stackTrace:"Stack trace",invalidations:"Invalidations ({PH1} total)",pendingFor:"Pending for",firstInvalidated:"First invalidated",paintProfiler:"Paint profiler",sAtS:"{PH1} at {PH2}",sSelf:"{PH1} (self)",sChildren:"{PH1} (children)",timeSpentInRendering:"Time spent in rendering",frame:"Frame",sAtSParentheses:"{PH1} (at {PH2})",UnknownNode:"[ unknown node ]",invalidationWithCallFrame:"{PH1} at {PH2}",outsideBreadcrumbRange:"(outside of the breadcrumb range)",entryIsHidden:"(entry is hidden)",selectorStatsTitle:"Selector stats",sSelectorStatsInfo:'Select "{PH1}" to collect detailed CSS selector matching statistics.',delay:"Delay",priority:"Priority",thirdPartyTable:"1st / 3rd party table",source:"Source",origin:"Origin"},pn=e.i18n.registerUIStrings("panels/timeline/TimelineUIUtils.ts",hn),mn=e.i18n.getLocalizedString.bind(void 0,pn);let un,gn;const{SamplesIntegrator:vn}=t.Helpers.SamplesIntegrator;class Tn{static debugModeEnabled=void 0;static getGetDebugModeEnabled(){return void 0===Tn.debugModeEnabled&&(Tn.debugModeEnabled=d.Runtime.experiments.isEnabled("timeline-debug-mode")),Tn.debugModeEnabled}static frameDisplayName(e){const t=s.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForCallFrame(e),i=t?.name||e.functionName;if(!vn.isNativeRuntimeFrame(e))return m.UIUtils.beautifyFunctionName(i);switch(vn.nativeGroup(i)){case"Compile":return mn(hn.compile);case"Parse":return mn(hn.parse)}return i}static testContentMatching(e,i,n){const r=[Tn.eventStyle(e).title];if(t.Types.Events.isProfileCall(e)&&(n?.Samples?r.push(t.Handlers.ModelHandlers.Samples.getProfileCallFunctionName(n.Samples,e)):r.push(e.callFrame.functionName)),n){const i=t.Handlers.Helpers.getNonResolvedURL(e,n);i&&r.push(i)}Tn.getGetDebugModeEnabled()?s(e,4):s(e.args,2);const a=r.join("|").match(i);return!!a&&a.length>0;function s(e,t){if(t)for(const i in e){const n=e[i];"string"==typeof n?r.push(n):"number"==typeof n?r.push(String(n)):"object"==typeof n&&null!==n&&s(n,t-1)}}}static eventStyle(e){return t.Types.Events.isProfileCall(e)&&"(idle)"===e.callFrame.functionName?new s.EntryStyles.TimelineRecordStyle(e.name,s.EntryStyles.getCategoryStyles().idle):e.cat===t.Types.Events.Categories.Console||e.cat===t.Types.Events.Categories.UserTiming?new s.EntryStyles.TimelineRecordStyle(e.name,s.EntryStyles.getCategoryStyles().scripting):s.EntryStyles.getEventStyle(e.name)??new s.EntryStyles.TimelineRecordStyle(e.name,s.EntryStyles.getCategoryStyles().other)}static eventColor(e){if(t.Types.Events.isProfileCall(e)){const t=e.callFrame;if(Tn.isUserFrame(t))return Tn.colorForId(t.url)}if(t.Types.Extensions.isSyntheticExtensionEntry(e))return h.ExtensionUI.extensionEntryColor(e);let i=Tn.eventStyle(e).category.getComputedColorValue();if("v8.parseOnBackgroundWaiting"===e.name&&(i=s.EntryStyles.getCategoryStyles().scripting.getComputedColorValue(),!i))throw new Error("Unable to parse color from getCategoryStyles().scripting.color");return i}static eventTitle(e){if(t.Types.Events.isProfileCall(e)){const t=s.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForEntry(e);return t?.name||Tn.frameDisplayName(e.callFrame)}if("EventTiming"===e.name&&t.Types.Events.isSyntheticInteraction(e))return s.EntryName.nameForEntry(e);const i=Tn.eventStyle(e).title;return t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)?i:t.Types.Events.isConsoleTimeStamp(e)&&e.args.data?mn(hn.sS,{PH1:i,PH2:e.args.data.name??e.args.data.message}):t.Types.Events.isAnimation(e)&&e.args.data.name?mn(hn.sS,{PH1:i,PH2:e.args.data.name}):t.Types.Events.isDispatch(e)?mn(hn.sS,{PH1:i,PH2:e.args.data.type}):i}static isUserFrame(e){return"0"!==e.scriptId&&!e.url?.startsWith("native ")}static async buildDetailsTextForTraceEvent(i,n){let r;const a=i.args,s=i.args?.data;switch(i.name){case"GCEvent":case"MajorGC":case"MinorGC":{const t=a.usedHeapSizeBefore-a.usedHeapSizeAfter;r=mn(hn.sCollected,{PH1:e.ByteUtilities.bytesToString(t)});break}case"FunctionCall":{const{lineNumber:e,columnNumber:n}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(i);void 0!==e&&void 0!==n&&(r=s.url+":"+(e+1)+":"+(n+1));break}case"EventDispatch":r=s?s.type:null;break;case"Paint":{const e=Tn.quadWidth(s.clip),t=Tn.quadHeight(s.clip);e&&t&&(r=mn(hn.sSDimensions,{PH1:e,PH2:t}));break}case"ParseHTML":{const e=a.beginData.startLine,t=a.endData?.endLine,i=u.ResourceUtils.displayNameForURL(a.beginData.url);r=t>=0?mn(hn.sSs,{PH1:i,PH2:e+1,PH3:t+1}):mn(hn.sSSquareBrackets,{PH1:i,PH2:e+1});break}case"V8.CompileModule":case"v8.produceModuleCache":r=u.ResourceUtils.displayNameForURL(a.fileName);break;case"V8.CompileScript":case"v8.produceCache":case"EvaluateScript":{const{lineNumber:e}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(i),n=s?.url;n&&(r=u.ResourceUtils.displayNameForURL(n)+":"+((e||0)+1));break}case"v8.wasm.compiledModule":case"v8.wasm.moduleCacheHit":{const e=a.url;e&&(r=u.ResourceUtils.displayNameForURL(e));break}case"v8.parseOnBackground":case"v8.deserializeOnBackground":case"XHRReadyStateChange":case"XHRLoad":{const e=s.url;e&&(r=u.ResourceUtils.displayNameForURL(e));break}case"TimeStamp":r=s.message;break;case"WebSocketCreate":case"WebSocketSendHandshakeRequest":case"WebSocketReceiveHandshakeResponse":case"WebSocketSend":case"WebSocketReceive":case"WebSocketDestroy":case"ResourceWillSendRequest":case"ResourceSendRequest":case"ResourceReceivedData":case"ResourceReceiveResponse":case"ResourceFinish":case"PaintImage":case"Decode Image":case"Decode LazyPixelRef":{const e=t.Handlers.Helpers.getNonResolvedURL(i,n);e&&(r=u.ResourceUtils.displayNameForURL(e));break}case"EmbedderCallback":r=s.callbackName;break;case"AsyncTask":r=s?s.name:null;break;default:r=t.Helpers.Trace.eventHasCategory(i,t.Types.Events.Categories.Console)?null:function(){const e=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(i)?.at(0)??null;if(!e)return null;return e.url+":"+(e.lineNumber+1)+":"+(e.columnNumber+1)}()}return r}static async buildDetailsNodeForTraceEvent(e,i,n,r=!1,a){let s,o=null;const l=e.args,d=e.args?.data;switch(e.name){case"GCEvent":case"MajorGC":case"MinorGC":case"EventDispatch":case"Paint":case"Animation":case"EmbedderCallback":case"ParseHTML":case"v8.wasm.streamFromResponseCallback":case"v8.wasm.compiledModule":case"v8.wasm.moduleCacheHit":case"v8.wasm.cachedModule":case"v8.wasm.moduleCacheInvalid":case"WebSocketCreate":case"WebSocketSendHandshakeRequest":case"WebSocketReceiveHandshakeResponse":case"WebSocketSend":case"WebSocketReceive":case"WebSocketDestroy":s=await Tn.buildDetailsTextForTraceEvent(e,a);break;case"PaintImage":case"Decode Image":case"Decode LazyPixelRef":case"XHRReadyStateChange":case"XHRLoad":case"ResourceWillSendRequest":case"ResourceSendRequest":case"ResourceReceivedData":case"ResourceReceiveResponse":case"ResourceFinish":{const i=t.Handlers.Helpers.getNonResolvedURL(e,a);if(i){const e={tabStop:!0,showColumnNumber:!1,inlineFrameIndex:0};o=S.Linkifier.Linkifier.linkifyURL(i,e)}break}case"FunctionCall":{o=document.createElement("span");const a=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(e)?.at(0);t.Types.Events.isFunctionCall(e)&&a&&m.UIUtils.createTextChild(o,Tn.frameDisplayName({...a,scriptId:String(a.scriptId)}));const s=this.linkifyLocation({scriptId:d.scriptId,url:d.url,lineNumber:a?.lineNumber||0,columnNumber:a?.columnNumber,target:i,isFreshRecording:r,linkifier:n,omitOrigin:!0});s&&(m.UIUtils.createTextChild(o," @ "),o.appendChild(s));break}case"V8.CompileModule":case"v8.produceModuleCache":o=this.linkifyLocation({scriptId:null,url:l.fileName,lineNumber:0,columnNumber:0,target:i,isFreshRecording:r,linkifier:n});break;case"V8.CompileScript":case"v8.produceCache":case"EvaluateScript":{const a=d.url;if(a){const{lineNumber:s}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(e);o=this.linkifyLocation({scriptId:null,url:a,lineNumber:s||0,columnNumber:0,target:i,isFreshRecording:r,linkifier:n,omitOrigin:!0})}break}case"v8.deserializeOnBackground":case"v8.parseOnBackground":{const e=d.url;e&&(o=this.linkifyLocation({scriptId:null,url:e,lineNumber:0,columnNumber:0,target:i,isFreshRecording:r,linkifier:n,omitOrigin:!0}));break}default:t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)||t.Types.Events.isUserTiming(e)||t.Types.Extensions.isSyntheticExtensionEntry(e)||t.Types.Events.isProfileCall(e)?s=null:o=this.linkifyTopCallFrame(e,i,n,r)??null}return!o&&s&&(o=document.createTextNode(s)),o}static linkifyLocation(e){const{scriptId:t,url:i,lineNumber:n,columnNumber:r,isFreshRecording:a,linkifier:s,target:o,omitOrigin:l}=e,d={lineNumber:n,columnNumber:r,showColumnNumber:!0,inlineFrameIndex:0,className:"timeline-details",tabStop:!0,omitOrigin:l};return a?s.linkifyScriptLocation(o,t,i,n,d):S.Linkifier.Linkifier.linkifyURL(i,d)}static linkifyTopCallFrame(e,i,n,r=!1){let a=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(e)?.[0];if(t.Types.Events.isProfileCall(e)&&(a=e.callFrame),!a)return null;const s={className:"timeline-details",tabStop:!0,inlineFrameIndex:0,showColumnNumber:!0,columnNumber:a.columnNumber,lineNumber:a.lineNumber};return r?n.maybeLinkifyConsoleCallFrame(i,a,{showColumnNumber:!0,inlineFrameIndex:0}):S.Linkifier.Linkifier.linkifyURL(a.url,s)}static buildDetailsNodeForMarkerEvents(e){let t="https://web.dev/user-centric-performance-metrics/",i="page performance metrics";switch(e.name){case"largestContentfulPaint::Candidate":t="https://web.dev/lcp/",i="largest contentful paint";break;case"firstContentfulPaint":t="https://web.dev/first-contentful-paint/",i="first contentful paint"}return m.Fragment.html`<div>${m.XLink.XLink.create(t,mn(hn.learnMore),void 0,void 0,"learn-more")} about ${i}.</div>`}static buildConsumeCacheDetails(t,i){if("number"==typeof t.consumedCacheSize){i.appendTextRow(mn(hn.compilationCacheStatus),mn(hn.scriptLoadedFromCache)),i.appendTextRow(mn(hn.compilationCacheSize),e.ByteUtilities.bytesToString(t.consumedCacheSize));const n=t.cacheKind;n&&i.appendTextRow(mn(hn.compilationCacheKind),n)}else"cacheRejected"in t&&t.cacheRejected?i.appendTextRow(mn(hn.compilationCacheStatus),mn(hn.failedToLoadScriptFromCache)):i.appendTextRow(mn(hn.compilationCacheStatus),mn(hn.scriptNotEligibleToBeLoadedFromCache))}static async buildTraceEventDetails(i,n,r,a,o){const h=dt(i,n),{duration:p}=t.Helpers.Timing.eventTimingsMicroSeconds(n),m=kn(n,i),u=await t.Extras.FetchNodes.extractRelatedDOMNodesFromEvent(i,n);let g,v=!1;if(h&&void 0===n[fn]){let e=null;const r=t.Handlers.Helpers.getNonResolvedURL(n,i);r?e=await S.ImagePreview.ImagePreview.build(h,r,!1,{imageAltText:S.ImagePreview.ImagePreview.defaultAltTextForImageURL(r),precomputedFeatures:void 0,align:"start"}):t.Types.Events.isPaint(n)&&(e=await Tn.buildPicturePreviewContent(i,n,h)),n[fn]=e}const T=new wn(dt(i,n),r),y=this.eventColor(n),f=i&&Cn(i,n)?Tn.markerStyleForEvent(n).color:y;T.addSection(Tn.eventTitle(n),f);const w=n.args,b=n.args?.data,E=i.Initiators.eventToInitiator.get(n)??null,C=i.Initiators.initiatorToEvents.get(n)??null;let k=null;if(i){const e=c.DetailsView.buildWarningElementsForEvent(n,i);for(const t of e)T.appendElementRow(mn(hn.warning),t,!0)}if(t.Helpers.Trace.eventHasCategory(n,t.Types.Events.Categories.UserTiming)){const t=En(n,i);T.appendTextRow(mn(hn.timestamp),e.TimeUtilities.preciseMillisToString(t,1))}if(0!==p&&!Number.isNaN(p)){const e=G(p,m);T.appendTextRow(mn(hn.duration),e)}if(t.Types.Events.isPerformanceMark(n)&&n.args.data?.detail){const e=Tn.renderObjectJson(JSON.parse(n.args.data?.detail));T.appendElementRow(mn(hn.details),e)}if(t.Types.Events.isSyntheticUserTiming(n)&&n.args?.data?.beginEvent.args.detail){const e=Tn.renderObjectJson(JSON.parse(n.args?.data?.beginEvent.args.detail));T.appendElementRow(mn(hn.details),e)}if(i.Meta.traceIsGeneric)return Tn.renderEventJson(n,T),T.fragment;if(t.Types.Events.isV8Compile(n)){if(k=n.args.data?.url,k){const{lineNumber:e,columnNumber:r}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(n);T.appendLocationRow(mn(hn.script),k,e||0,r,void 0,!0);const a=this.getOriginWithEntity(o,i,n);a&&T.appendElementRow(mn(hn.origin),a),v=!0}Boolean(n.args.data?.eager)&&T.appendTextRow(mn(hn.eagerCompile),!0);const e=Boolean(n.args.data?.streamed);T.appendTextRow(mn(hn.streamed),e+(e?"":`: ${n.args.data?.notStreamedReason||""}`)),n.args.data&&Tn.buildConsumeCacheDetails(n.args.data,T)}if(t.Types.Extensions.isSyntheticExtensionEntry(n))for(const[e,t]of n.args.properties||[])T.appendTextRow(e,t);const I=Boolean(i&&ut.instance().recordingIsFresh(i));switch(n.name){case"GCEvent":case"MajorGC":case"MinorGC":{const t=w.usedHeapSizeBefore-w.usedHeapSizeAfter;T.appendTextRow(mn(hn.collected),e.ByteUtilities.bytesToString(t));break}case"ProfileCall":{const e=n,t=s.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(i,e);if(!t)break;const r=e.callFrame,a=d.Runtime.experiments.isEnabled("react-native-specific-ui");if(a?T.reactNativeAppendLocationRow(mn(hn.source),t,r.scriptId,r.lineNumber||0,r.columnNumber,void 0,!0):T.appendLocationRow(mn(hn.source),t,r.lineNumber||0,r.columnNumber,void 0,!0),!a){const t=this.getOriginWithEntity(o,i,e);t&&T.appendElementRow(mn(hn.origin),t)}v=!0;break}case"FunctionCall":{const e=await Tn.buildDetailsNodeForTraceEvent(n,dt(i,n),r,I,i);if(e){T.appendElementRow(mn(hn.function),e);const t=this.getOriginWithEntity(o,i,n);t&&T.appendElementRow(mn(hn.origin),t),v=!0}break}case"TimerFire":case"TimerInstall":case"TimerRemove":T.appendTextRow(mn(hn.timerId),b.timerId),"TimerInstall"===n.name&&(T.appendTextRow(mn(hn.timeout),e.TimeUtilities.millisToString(b.timeout)),T.appendTextRow(mn(hn.repeats),!b.singleShot));break;case"SchedulePostTaskCallback":case"RunPostTaskCallback":T.appendTextRow(mn(hn.delay),e.TimeUtilities.millisToString(b.delay)),T.appendTextRow(mn(hn.priority),b.priority);break;case"FireAnimationFrame":T.appendTextRow(mn(hn.callbackId),b.id);break;case"V8.CompileModule":T.appendLocationRow(mn(hn.module),w.fileName,0);break;case"V8.CompileScript":break;case"v8.produceModuleCache":k=b&&b.url,T.appendTextRow(mn(hn.compilationCacheSize),e.ByteUtilities.bytesToString(b.producedCacheSize));break;case"v8.produceCache":if(k=b&&b.url,k){const{lineNumber:e,columnNumber:r}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(n);T.appendLocationRow(mn(hn.script),k,e||0,r,void 0,!0);const a=this.getOriginWithEntity(o,i,n);a&&T.appendElementRow(mn(hn.origin),a),v=!0}T.appendTextRow(mn(hn.compilationCacheSize),e.ByteUtilities.bytesToString(b.producedCacheSize));break;case"EvaluateScript":if(k=b&&b.url,k){const{lineNumber:e,columnNumber:r}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(n);T.appendLocationRow(mn(hn.script),k,e||0,r,void 0,!0);const a=this.getOriginWithEntity(o,i,n);a&&T.appendElementRow(mn(hn.origin),a),v=!0}break;case"v8.wasm.streamFromResponseCallback":case"v8.wasm.compiledModule":case"v8.wasm.cachedModule":case"v8.wasm.moduleCacheHit":case"v8.wasm.moduleCacheInvalid":if(b){k=w.url,k&&T.appendTextRow(mn(hn.url),k);const e=w.producedCachedSize;e&&T.appendTextRow(mn(hn.producedCacheSize),e);const t=w.consumedCachedSize;t&&T.appendTextRow(mn(hn.consumedCacheSize),t)}break;case"Paint":{const e=b.clip;T.appendTextRow(mn(hn.location),mn(hn.sSCurlyBrackets,{PH1:e[0],PH2:e[1]}));const t=Tn.quadWidth(e),i=Tn.quadHeight(e);T.appendTextRow(mn(hn.dimensions),mn(hn.sSDimensions,{PH1:t,PH2:i}))}case"PaintSetup":case"Rasterize":case"ScrollLayer":g=mn(hn.layerRoot);break;case"PaintImage":case"Decode LazyPixelRef":case"Decode Image":case"Draw LazyPixelRef":if(g=mn(hn.ownerElement),k=t.Handlers.Helpers.getNonResolvedURL(n,i),k){const e={tabStop:!0,showColumnNumber:!1,inlineFrameIndex:0};T.appendElementRow(mn(hn.imageUrl),S.Linkifier.Linkifier.linkifyURL(k,e))}break;case"ParseAuthorStyleSheet":if(k=b.styleSheetUrl,k){const e={tabStop:!0,showColumnNumber:!1,inlineFrameIndex:0};T.appendElementRow(mn(hn.stylesheetUrl),S.Linkifier.Linkifier.linkifyURL(k,e))}break;case"UpdateLayoutTree":{T.appendTextRow(mn(hn.elementsAffected),w.elementCount);const e=l.Settings.Settings.instance().createSetting("timeline-capture-selector-stats",!1);if(!e.get()){const t=document.createElement("span");t.textContent=mn(hn.sSelectorStatsInfo,{PH1:e.title()}),T.appendElementRow(mn(hn.selectorStatsTitle),t)}break}case"Layout":{const e=w.beginData;T.appendTextRow(mn(hn.nodesThatNeedLayout),mn(hn.sOfS,{PH1:e.dirtyObjects,PH2:e.totalObjects})),g=mn(hn.layoutRoot);break}case"ConsoleTime":T.appendTextRow(mn(hn.message),n.name);break;case"WebSocketCreate":case"WebSocketSendHandshakeRequest":case"WebSocketReceiveHandshakeResponse":case"WebSocketSend":case"WebSocketReceive":case"WebSocketDestroy":if(t.Types.Events.isWebSocketTraceEvent(n)){const e=c.DetailsView.buildRowsForWebSocketEvent(n,i);for(const{key:t,value:i}of e)T.appendTextRow(t,i)}break;case"EmbedderCallback":T.appendTextRow(mn(hn.callbackFunction),b.callbackName);break;case"Animation":{if(!t.Types.Events.isSyntheticAnimation(n))break;const{displayName:e,nodeName:i}=n.args.data.beginEvent.args.data;e&&T.appendTextRow(mn(hn.animating),e),!u?.size&&i&&T.appendTextRow(mn(hn.relatedNode),i);const r=t.Insights.Models.CLSCulprits.getNonCompositedFailure(n);if(!r.length)break;const a=new Set(r.map((e=>e.failureReasons)).flat().filter(Boolean)),s=new Set(r.map((e=>e.unsupportedProperties)).flat().filter(Boolean));if(0===a.size)T.appendElementRow(mn(hn.compositingFailed),mn(hn.compositingFailedUnknownReason),!0);else for(const e of a){let t;switch(e){case"ACCELERATED_ANIMATIONS_DISABLED":t=mn(hn.compositingFailedAcceleratedAnimationsDisabled);break;case"EFFECT_SUPPRESSED_BY_DEVTOOLS":t=mn(hn.compositingFailedEffectSuppressedByDevtools);break;case"INVALID_ANIMATION_OR_EFFECT":t=mn(hn.compositingFailedInvalidAnimationOrEffect);break;case"EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS":t=mn(hn.compositingFailedEffectHasUnsupportedTimingParams);break;case"EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE":t=mn(hn.compositingFailedEffectHasNonReplaceCompositeMode);break;case"TARGET_HAS_INVALID_COMPOSITING_STATE":t=mn(hn.compositingFailedTargetHasInvalidCompositingState);break;case"TARGET_HAS_INCOMPATIBLE_ANIMATIONS":t=mn(hn.compositingFailedTargetHasIncompatibleAnimations);break;case"TARGET_HAS_CSS_OFFSET":t=mn(hn.compositingFailedTargetHasCSSOffset);break;case"ANIMATION_AFFECTS_NON_CSS_PROPERTIES":t=mn(hn.compositingFailedAnimationAffectsNonCSSProperties);break;case"TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET":t=mn(hn.compositingFailedTransformRelatedPropertyCannotBeAcceleratedOnTarget);break;case"TRANSFROM_BOX_SIZE_DEPENDENT":t=mn(hn.compositingFailedTransformDependsBoxSize);break;case"FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS":t=mn(hn.compositingFailedFilterRelatedPropertyMayMovePixels);break;case"UNSUPPORTED_CSS_PROPERTY":t=mn(hn.compositingFailedUnsupportedCSSProperty,{propertyCount:s.size,properties:new Intl.ListFormat(void 0,{style:"short",type:"conjunction"}).format(s)});break;case"MIXED_KEYFRAME_VALUE_TYPES":t=mn(hn.compositingFailedMixedKeyframeValueTypes);break;case"TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE":t=mn(hn.compositingFailedTimelineSourceHasInvalidCompositingState);break;case"ANIMATION_HAS_NO_VISIBLE_CHANGE":t=mn(hn.compositingFailedAnimationHasNoVisibleChange);break;case"AFFECTS_IMPORTANT_PROPERTY":t=mn(hn.compositingFailedAffectsImportantProperty);break;case"SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY":t=mn(hn.compositingFailedSVGTargetHasIndependentTransformProperty);break;default:t=mn(hn.compositingFailedUnknownReason)}t&&T.appendElementRow(mn(hn.compositingFailed),t,!0)}break}case"ParseHTML":{const e=w.beginData,t=e.startLine-1,i=w.endData?w.endData.endLine-1:void 0;k=e.url,k&&T.appendLocationRange(mn(hn.range),k,t,i);break}case"FireIdleCallback":T.appendTextRow(mn(hn.allottedTime),e.TimeUtilities.millisToString(b.allottedMilliseconds)),T.appendTextRow(mn(hn.invokedByTimeout),b.timedOut);case"RequestIdleCallback":case"CancelIdleCallback":T.appendTextRow(mn(hn.callbackId),b.id);break;case"EventDispatch":T.appendTextRow(mn(hn.type),b.type);break;case"largestContentfulPaint::Candidate":T.appendTextRow(mn(hn.type),String(b.type)),T.appendTextRow(mn(hn.size),String(b.size));case"firstPaint":case"firstContentfulPaint":case"MarkLoad":case"MarkDOMContent":{const r=En(n,i);T.appendTextRow(mn(hn.timestamp),e.TimeUtilities.preciseMillisToString(r,1)),t.Types.Events.isMarkerEvent(n)&&T.appendElementRow(mn(hn.details),Tn.buildDetailsNodeForMarkerEvents(n));break}case"EventTiming":{const a=await Tn.buildDetailsNodeForTraceEvent(n,dt(i,n),r,I,i);if(a&&T.appendElementRow(mn(hn.details),a),t.Types.Events.isSyntheticInteraction(n)){const t=e.TimeUtilities.formatMicroSecondsAsMillisFixed(n.inputDelay),i=e.TimeUtilities.formatMicroSecondsAsMillisFixed(n.mainThreadHandling),r=e.TimeUtilities.formatMicroSecondsAsMillisFixed(n.presentationDelay);T.appendTextRow(mn(hn.interactionID),n.interactionId),T.appendTextRow(mn(hn.inputDelay),t),T.appendTextRow(mn(hn.processingDuration),i),T.appendTextRow(mn(hn.presentationDelay),r)}break}default:{const e=await Tn.buildDetailsNodeForTraceEvent(n,dt(i,n),r,I,i);e&&T.appendElementRow(mn(hn.details),e);break}}const M=u?.values()||[];for(const e of M)if(e){const t=await l.Linkifier.Linkifier.linkify(e);T.appendElementRow(g||mn(hn.relatedNode),t)}if(n[fn]&&(T.addSection(mn(hn.preview)),T.appendElementRow("",n[fn])),!v){const e=this.getOriginWithEntity(o,i,n);e&&T.appendElementRow(mn(hn.origin),e)}const x=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(n);(t.Types.Events.isUserTiming(n)||t.Types.Extensions.isSyntheticExtensionEntry(n)||t.Types.Events.isProfileCall(n)||E||C||x||i?.Invalidations.invalidationsForEvent.get(n))&&await Tn.generateCauses(n,T,i),d.Runtime.experiments.isEnabled("timeline-debug-mode")&&Tn.renderEventJson(n,T);const P={};if(a&&i&&Tn.aggregatedStatsForTraceEvent(P,i,n)){T.addSection(mn(hn.aggregatedTime));const e=Tn.generatePieChart(P,Tn.eventStyle(n).category,m);T.appendElementRow("",e)}return T.fragment}static statsForTimeRange(e,i,n){if(!e.length)return{idle:n-i};!function(e){if(e[bn])return;const i={},n=[];let r=0;function a(e,t){let n=i[e];if(n||(n={time:[],value:[]},i[e]=n),n.time.length&&n.time[n.time.length-1]===t||r>t)return;const a=n.value.length>0?n.value[n.value.length-1]:0;n.value.push(a+t-r),n.time.push(t)}function o(e,t,i){e&&a(e,i),r=i,t&&a(t,i)}t.Helpers.Trace.forEachEvent(e,{onStartEvent:function(e){const{startTime:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e),r=s.EntryStyles.getEventStyle(e.name)?.category.name||s.EntryStyles.getCategoryStyles().other.name,a=n.length?n[n.length-1]:null;r!==a&&o(a||null,r,i),n.push(r)},onEndEvent:function(e){const{endTime:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e),r=n.pop(),a=n.length?n[n.length-1]:null;r!==a&&o(r||null,a||null,i||0)}});const l=e;l[bn]=i}(e);const a=function(e,t){const i=Object.assign({},e);for(const e in t)i[e]-=t[e];return i}(l(n),l(i)),o=Object.values(a).reduce(((e,t)=>e+t),0);return a.idle=Math.max(0,n-i-o),a;function l(t){const i={},n=e[bn];for(const e in n){const a=n[e],s=r.ArrayUtilities.upperBound(a.time,t,r.ArrayUtilities.DEFAULT_COMPARATOR);let o;if(0===s)o=0;else if(s===a.time.length)o=a.value[a.value.length-1];else{const e=a.time[s-1],i=a.time[s],n=a.value[s-1];o=n+(a.value[s]-n)*(t-e)/(i-e)}i[e]=o}return i}}static renderEventJson(e,t){t.addSection(mn(hn.traceEvent));const i={args:e.args,...e},n=Tn.renderObjectJson(i);t.appendElementRow("",n)}static renderObjectJson(e){const t=l.Settings.Settings.instance().moduleSetting("text-editor-indent").get().length,i=JSON.stringify(e,null,t).slice(0,1e4).replace(/{\n /,"{ "),n=document.createElement("div"),r=m.UIUtils.createShadowRootWithCoreStyles(n,{cssFile:ht}).createChild("div");return r.classList.add("monospace","source-code"),r.textContent=i,b.CodeHighlighter.highlightNode(r,"text/javascript"),n}static stackTraceFromCallFrames(e){return{callFrames:e}}static async generateCauses(i,n,r){const{startTime:a}=t.Helpers.Timing.eventTimingsMilliSeconds(i);let s=mn(hn.initiatorStackTrace),o=mn(hn.stackTrace);if(d.Runtime.experiments.isEnabled("react-native-specific-ui")){const e=t.Extras.StackTraceForEvent.getForReactNative(i,r);e&&(n.addSection(mn(hn.stackTrace)),n.createChildStackTraceElement(e))}else{const e=t.Extras.StackTraceForEvent.get(i,r);if(e)n.addSection(mn(hn.stackTrace)),n.createChildStackTraceElement(e);else{const e=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(i);e?.length&&(n.addSection(o),n.createChildStackTraceElement(Tn.stackTraceFromCallFrames(e)))}}switch(i.name){case"TimerFire":s=mn(hn.timerInstalled);break;case"FireAnimationFrame":s=mn(hn.animationFrameRequested);break;case"FireIdleCallback":s=mn(hn.idleCallbackRequested);break;case"UpdateLayoutTree":s=mn(hn.firstInvalidated),o=mn(hn.recalculationForced);break;case"Layout":s=mn(hn.firstLayoutInvalidation),o=mn(hn.layoutForced)}const l=r.Initiators.eventToInitiator.get(i),c=r.Initiators.initiatorToEvents.get(i),h=r.Invalidations.invalidationsForEvent.get(i);if(l){const i=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(l);i&&(n.addSection(s),n.createChildStackTraceElement(Tn.stackTraceFromCallFrames(i.map((e=>({...e,scriptId:String(e.scriptId)}))))));const r=this.createEntryLink(l);n.appendElementRow(mn(hn.initiatedBy),r);const{startTime:o}=t.Helpers.Timing.eventTimingsMilliSeconds(l),d=a-o;n.appendTextRow(mn(hn.pendingFor),e.TimeUtilities.preciseMillisToString(d,1))}if(c){const e=document.createElement("div");c.map(((t,i)=>{e.appendChild(this.createEntryLink(t)),i<c.length-1&&e.append(" ")})),n.appendElementRow(hn.initiatorFor,e)}if(h?.length){const e=r.Invalidations.invalidationCountForEvent.get(i)??0;n.addSection(mn(hn.invalidations,{PH1:e})),await Tn.generateInvalidationsList(h,n)}}static createEntryLink(e){const t=document.createElement("span"),i=a.TraceBounds.BoundsManager.instance().state();if(!i)return console.error("Tried to link to an entry without any traceBoundsState. This should never happen."),t;const n=i.micro.minimapTraceBounds.min>e.ts+(e.dur||0)||i.micro.minimapTraceBounds.max<e.ts,s=Ve.activeManager()?.getEntriesFilter().entryIsInvisible(e);return n||(t.classList.add("timeline-link"),m.ARIAUtils.markAsLink(t),t.tabIndex=0,t.addEventListener("click",(()=>{rn.instance().select(yt(e))})),t.addEventListener("keydown",(t=>{t.key===r.KeyboardUtilities.ENTER_KEY&&(rn.instance().select(yt(e)),t.consume(!0))}))),t.textContent=s?this.eventTitle(e)+" "+mn(hn.entryIsHidden):n?this.eventTitle(e)+" "+mn(hn.outsideBreadcrumbRange):this.eventTitle(e),t}static async generateInvalidationsList(e,t){const{groupedByReason:i,backendNodeIds:n}=c.DetailsView.generateInvalidationsList(e);let r=null;const a=o.TargetManager.TargetManager.instance().primaryPageTarget(),s=a?.model(o.DOMModel.DOMModel);s&&(r=await s.pushNodesByBackendIdsToFrontend(n)),Object.keys(i).forEach((e=>{Tn.generateInvalidationsForReason(e,i[e],r,t)}))}static generateInvalidationsForReason(i,n,r,a){function s(e){const t=e.args.data.nodeId&&r?r.get(e.args.data.nodeId):null;if(t){const e=document.createElement("span");return l.Linkifier.Linkifier.linkify(t).then((t=>e.appendChild(t))),e}if(e.args.data.nodeName){const t=document.createElement("span");return t.textContent=e.args.data.nodeName,t}const i=document.createElement("span");return m.UIUtils.createTextChild(i,mn(hn.UnknownNode)),i}const d=new Set;for(const r of n){const n=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(r);let l=null;const c=n?.at(0);c&&(l=a.linkifier()?.maybeLinkifyScriptLocation(o.TargetManager.TargetManager.instance().rootTarget(),c.scriptId,c.url,c.lineNumber)||null);const h=s(r),p=l?e.i18n.getFormatLocalizedString(pn,hn.invalidationWithCallFrame,{PH1:h,PH2:l}):h,m="string"==typeof p?p:p.innerText;d.has(m)||(d.add(m),a.appendElementRow(i,p))}}static aggregatedStatsForTraceEvent(e,i,n){const a=i.Renderer?.allTraceEntries||[],{startTime:s,endTime:o}=t.Helpers.Timing.eventTimingsMicroSeconds(n);const l=r.ArrayUtilities.binaryIndexOf(a,s,(function(e,t){return e-t.ts}));if(l<0)return!1;let d=!1;if(o)for(let t=l;t<a.length;t++){const r=a[t];if(r.ts>=o)break;const s=kn(r,i);if(!s)continue;if(r.tid!==n.tid)continue;t>l&&(d=!0);const c=Tn.eventStyle(r).category.name;e[c]=(e[c]||0)+s}if(t.Types.Events.isPhaseAsync(n.ph)){if(o){let t=0;for(const i in e)t+=e[i];const i=o-s;e.idle=Math.max(0,i-t)}return!1}for(const i in e){const n=e[i];e[i]=t.Helpers.Timing.microToMilli(n)}return d}static async buildPicturePreviewContent(e,t,i){const n=e.LayerTree.paintsToSnapshots.get(t);if(!n)return null;const a=i.model(o.PaintProfiler.PaintProfilerModel);if(!a)return null;const s=await a.loadSnapshot(n.args.snapshot.skp64);if(!s)return null;const l={snapshot:s,rect:n.args.snapshot.params?.layer_rect};if(!l)return null;const d=l.snapshot.replay();l.snapshot.release();const c=await d;if(!c)return null;const h=document.createElement("div"),p=h.attachShadow({mode:"open"});p.adoptedStyleSheets=[cn];const u=p.createChild("div");u.classList.add("image-preview-container","vbox","link");const g=u.createChild("img");g.src=c,g.alt=S.ImagePreview.ImagePreview.defaultAltTextForImageURL(c);return u.createChild("a").textContent=mn(hn.paintProfiler),m.ARIAUtils.markAsLink(u),u.tabIndex=0,u.addEventListener("click",(()=>rn.instance().select(yt(t))),!1),u.addEventListener("keydown",(e=>{e.key===r.KeyboardUtilities.ENTER_KEY&&(rn.instance().select(yt(t)),e.consume(!0))})),h}static createEventDivider(i,n){const r=document.createElement("div");r.classList.add("resources-event-divider");const{startTime:a}=t.Helpers.Timing.eventTimingsMilliSeconds(i),s=e.TimeUtilities.millisToString(a-n);m.Tooltip.Tooltip.install(r,mn(hn.sAtS,{PH1:Tn.eventTitle(i),PH2:s}));const o=Tn.markerStyleForEvent(i);return o.tall&&(r.style.backgroundColor=o.color),r}static visibleEventsFilter(){return new t.Extras.TraceFilter.VisibleEventsFilter(s.EntryStyles.visibleTypes())}static categories(){return s.EntryStyles.getCategoryStyles()}static generatePieChart(n,r,a){let o=0;for(const e in n)o+=n[e];const l=document.createElement("div");l.classList.add("timeline-details-view-pie-chart-wrapper"),l.classList.add("hbox");const d=new i.PieChart.PieChart,c=[];function h(e,t,i,n){i&&c.push({value:i,color:n,title:t})}if(r){const e=t.Helpers.Timing.microToMilli(a||0);a&&h(r.name,mn(hn.sSelf,{PH1:r.title}),e,r.getCSSValue());const i=n[r.name]-(e||0);i>0&&h(r.name,mn(hn.sChildren,{PH1:r.title}),i,r.getCSSValue())}for(const e in s.EntryStyles.getCategoryStyles()){const t=s.EntryStyles.getCategoryStyles()[e];e!==r?.name&&h(t.name,t.title,n[t.name],t.getCSSValue())}d.data={chartName:mn(hn.timeSpentInRendering),size:110,formatter:t=>e.TimeUtilities.preciseMillisToString(t),showLegend:!0,total:o,slices:c};return l.createChild("div","vbox").appendChild(d),l}static generateSummaryDetails(e,i,n,r,a){const o=document.createElement("div");o.classList.add("timeline-details-range-summary","hbox");let l=0,d=[];for(const t in e)l+=e[t];for(const t in s.EntryStyles.getCategoryStyles()){const i=s.EntryStyles.getCategoryStyles()[t];if(i.name===s.EntryStyles.EventCategory.IDLE)continue;const n=e[i.name];if(!n)continue;const r=i.title,a=i.getCSSValue();d.push({value:n,color:a,title:r})}d=d.sort(((e,t)=>t.value-e.value));const h=t.Types.Timing.Milli(i),p=t.Types.Timing.Milli(n),u=new c.TimelineSummary.CategorySummary;u.data={rangeStart:h,rangeEnd:p,total:l,categories:d,selectedEvents:r},o.append(u);const g=new Wt;return g.treeView=a,m.ARIAUtils.setLabel(g,mn(hn.thirdPartyTable)),o.append(g),o}static generateDetailsContentForFrame(e,n,r){const a=new wn(null,null);a.addSection(mn(hn.frame));const s=Tn.frameDuration(e);if(a.appendElementRow(mn(hn.duration),s),n&&r){const e=document.createElement("div");e.classList.add("timeline-filmstrip-preview");const s=t.Handlers.ModelHandlers.Screenshots.screenshotImageDataUri(r.screenshotEvent);m.UIUtils.loadImage(s).then((t=>t&&e.appendChild(t))),a.appendElementRow("",e),e.addEventListener("click",function(e,t){i.FilmStripView.Dialog.fromFilmStrip(e,t.index)}.bind(null,n,r),!1)}return a.fragment}static frameDuration(i){const n=t.Helpers.Timing.microToMilli(i.startTimeOffset),r=t.Helpers.Timing.microToMilli(t.Types.Timing.Micro(i.endTime-i.startTime)),a=mn(hn.sAtSParentheses,{PH1:e.TimeUtilities.millisToString(r,!0),PH2:e.TimeUtilities.millisToString(n,!0)});return e.i18n.getFormatLocalizedString(pn,hn.emptyPlaceholder,{PH1:a})}static quadWidth(e){return Math.round(Math.sqrt(Math.pow(e[0]-e[2],2)+Math.pow(e[1]-e[3],2)))}static quadHeight(e){return Math.round(Math.sqrt(Math.pow(e[0]-e[6],2)+Math.pow(e[1]-e[7],2)))}static eventDispatchDesciptors(){if(un)return un;const e="hsl(40,100%,80%)",t="hsl(40,100%,50%)";return un=[new Sn(1,e,["mousemove","mouseenter","mouseleave","mouseout","mouseover"]),new Sn(1,e,["pointerover","pointerout","pointerenter","pointerleave","pointermove"]),new Sn(2,"hsl(90,100%,40%)",["wheel"]),new Sn(3,t,["click","mousedown","mouseup"]),new Sn(3,t,["touchstart","touchend","touchmove","touchcancel"]),new Sn(3,t,["pointerdown","pointerup","pointercancel","gotpointercapture","lostpointercapture"]),new Sn(3,"hsl(256,100%,75%)",["keydown","keyup","keypress"])],un}static markerStyleForEvent(e){const i=[6,4],n=Tn.eventTitle(e);if("navigationStart"!==e.name&&(t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)||t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.UserTiming)))return{title:n,dashStyle:i,lineWidth:.5,color:t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)?"purple":"orange",tall:!1,lowPriority:!1};let r=!1,a="grey";switch(e.name){case"navigationStart":a="var(--color-text-primary)",r=!0;break;case"FrameStartedLoading":a="green",r=!0;break;case"MarkDOMContent":case"MarkLoad":a="var(--color-text-disabled)",r=!0;break;case"firstPaint":a="#228847",r=!0;break;case"firstContentfulPaint":a="var(--sys-color-green-bright)",r=!0;break;case"largestContentfulPaint::Candidate":a="var(--sys-color-green)",r=!0;break;case"TimeStamp":a="orange"}return{title:n,dashStyle:i,lineWidth:.5,color:a,tall:r,lowPriority:!1}}static colorForId(e){return gn||(gn=new l.Color.Generator({min:30,max:330,count:void 0},{min:50,max:80,count:3},85),gn.setColorForID("","#f2ecdc")),gn.colorForID(e)}static displayNameForFrame(e,t=80){const i=e.url;return l.ParsedURL.schemeIs(i,"about:")?`"${r.StringUtilities.trimMiddle(e.name,t)}"`:e.url.slice(0,t)}static getOriginWithEntity(e,t,i){const n=s.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(t,i);if(!n)return null;const r=URL.parse(n);if(!r)return null;const a=e?.entityForEvent(i)??null;if(!a)return null;return s.Helpers.formatOriginWithEntity(r,a,!0)}}const yn=Symbol("aggregatedStats"),fn=Symbol("previewElement");class Sn{priority;color;eventTypes;constructor(e,t,i){this.priority=e,this.color=t,this.eventTypes=i}}class wn{fragment;linkifierInternal;target;element;tableElement;constructor(e,t){this.fragment=document.createDocumentFragment(),this.linkifierInternal=t,this.target=e,this.element=document.createElement("div"),this.element.classList.add("timeline-details-view-block"),this.tableElement=this.element.createChild("div","vbox timeline-details-chip-body"),this.fragment.appendChild(this.element)}addSection(e,t){if(this.tableElement.hasChildNodes()?(this.element=document.createElement("div"),this.element.classList.add("timeline-details-view-block"),this.fragment.appendChild(this.element)):this.element.removeChildren(),e){const i=this.element.createChild("div","timeline-details-chip-title");t&&(i.createChild("div").style.backgroundColor=t),m.UIUtils.createTextChild(i,e)}this.tableElement=this.element.createChild("div","vbox timeline-details-chip-body"),this.fragment.appendChild(this.element)}linkifier(){return this.linkifierInternal}appendTextRow(e,t){const i=this.tableElement.createChild("div","timeline-details-view-row");i.createChild("div","timeline-details-view-row-title").textContent=e,i.createChild("div","timeline-details-view-row-value").textContent=t.toString()}appendElementRow(e,t,i,n){const r=this.tableElement.createChild("div","timeline-details-view-row");r.setAttribute("data-row-title",e),i&&r.classList.add("timeline-details-warning"),n&&r.classList.add("timeline-details-stack-values");r.createChild("div","timeline-details-view-row-title").textContent=e;const a=r.createChild("div","timeline-details-view-row-value");t instanceof Node?a.appendChild(t):m.UIUtils.createTextChild(a,t||"")}appendLocationRow(e,t,i,n,r,a){if(!this.linkifierInternal)return;const s={tabStop:!0,columnNumber:n,showColumnNumber:!0,inlineFrameIndex:0,text:r,omitOrigin:a},o=this.linkifierInternal.maybeLinkifyScriptLocation(this.target,null,t,i,s);o&&this.appendElementRow(e,o)}reactNativeAppendLocationRow(e,t,i,n,r,a,s){if(!this.linkifierInternal)return;const o={tabStop:!0,columnNumber:r,showColumnNumber:!0,inlineFrameIndex:0,text:a,omitOrigin:s},l=this.linkifierInternal.maybeLinkifyScriptLocation(this.target,i,t,n,o);l&&this.appendElementRow(e,l)}appendLocationRange(e,t,i,n){if(!this.linkifierInternal||!this.target)return;const a=document.createElement("span"),s=this.linkifierInternal.maybeLinkifyScriptLocation(this.target,null,t,i,{tabStop:!0,inlineFrameIndex:0});s&&(a.appendChild(s),m.UIUtils.createTextChild(a,r.StringUtilities.sprintf(" [%s…%s]",i+1,(n||0)+1||"")),this.appendElementRow(e,a))}createChildStackTraceElement(e){if(!this.linkifierInternal)return;const t=structuredClone(e);let i=t;for(;i;)i.callFrames=i.callFrames.map((e=>({...e,functionName:s.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForCallFrame(e)?.name||e.functionName}))),i=i.parent;const n=this.tableElement.createChild("div","timeline-details-view-row timeline-details-stack-values"),r=S.JSPresentationUtils.buildStackTracePreviewContents(this.target,this.linkifierInternal,{stackTrace:t,tabStops:!0,showColumnNumber:!0});n.appendChild(r.element)}}const bn=Symbol("categoryBreakdownCache");function En(e,i){if(!i){const{startTime:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e);return i}const n=t.Helpers.Timing.timeStampForEventAdjustedByClosestNavigation(e,i.Meta.traceBounds,i.Meta.navigationsByNavigationId,i.Meta.navigationsByFrameId);return t.Helpers.Timing.microToMilli(n)}function Cn(e,i){const{Name:n}=t.Types.Events;if("TimeStamp"===i.name||"navigationStart"===i.name)return!0;if(t.Types.Events.isFirstContentfulPaint(i)||t.Types.Events.isFirstPaint(i))return i.args.frame===e.Meta.mainFrameId;if(t.Types.Events.isMarkDOMContent(i)||t.Types.Events.isMarkLoad(i)||t.Types.Events.isLargestContentfulPaintCandidate(i)){if(!i.args.data)return!1;const{isOutermostMainFrame:e,isMainFrame:t}=i.args.data;return void 0!==e?e:Boolean(t)}return!1}function kn(e,i){const n=t.Types.Extensions.isSyntheticExtensionEntry(e)?i.ExtensionTraceData.entryToNode:i.Renderer.entryToNode,r=n.get(e)?.selfTime;return r||t.Types.Timing.Micro(0)}var In=Object.freeze({__proto__:null,EventDispatchTypeDescriptor:Sn,TimelineDetailsContentHelper:wn,TimelineUIUtils:Tn,aggregatedStatsKey:yn,categoryBreakdownCacheSymbol:bn,isMarkerEvent:Cn,previewElementSymbol:fn,timeStampForEventAdjustedForClosestNavigationIfPossible:En});class Mn extends t.Extras.TraceFilter.TraceFilter{#ui=t.Types.Timing.Milli(0);constructor(){super()}setMinimumRecordDuration(e){this.#ui=e}accept(e){const{duration:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e);return i>=this.#ui}}class xn extends t.Extras.TraceFilter.TraceFilter{constructor(){super()}accept(e){return!Tn.eventStyle(e).category.hidden}}class Pn extends t.Extras.TraceFilter.TraceFilter{regExpInternal;constructor(e){super(),this.setRegExp(e||null)}setRegExp(e){this.regExpInternal=e}regExp(){return this.regExpInternal}accept(e,t){return!this.regExpInternal||Tn.testContentMatching(e,this.regExpInternal,t)}}var Rn=Object.freeze({__proto__:null,Category:xn,IsLong:Mn,TimelineRegExp:Pn});const Fn={startTime:"Start time",durationFilter:"Duration filter",all:"All"},Ln=e.i18n.registerUIStrings("panels/timeline/EventsTimelineTreeView.ts",Fn),An=e.i18n.getLocalizedString.bind(void 0,Ln);class Nn extends xt{filtersControl;delegate;currentTree;constructor(e){super(),this.element.setAttribute("jslog",`${v.pane("event-log").track({resize:!0})}`),this.filtersControl=new Dn,this.filtersControl.addEventListener("FilterChanged",this.onFilterChanged,this),this.init(),this.delegate=e,this.dataGrid.markColumnAsSortedBy("start-time",w.DataGrid.Order.Ascending),this.splitWidget.showBoth()}filters(){return[...super.filters(),...this.filtersControl.filters()]}updateContents(e){super.updateContents(e),St(e)&&this.selectEvent(e.event,!0)}buildTree(){return this.currentTree=this.buildTopDownTree(!0,null),this.currentTree}onFilterChanged(){const e=this.lastSelectedNode(),t=e?.event;this.refreshTree(),t&&this.selectEvent(t,!1)}findNodeWithEvent(e){if("RunTask"===e.name)return null;const t=[this.currentTree.children().values()];for(;t.length;){const{done:i,value:n}=t[t.length-1].next();if(i)t.pop();else{if(n.event===e)return n;t.push(n.children().values())}}return null}selectEvent(e,t){const i=this.findNodeWithEvent(e);if(i&&(this.selectProfileNode(i,!1),t)){const e=this.dataGridNodeForTreeNode(i);e&&e.expand()}}populateColumns(e){e.push({id:"start-time",title:An(Fn.startTime),width:"80px",fixedWidth:!0,sortable:!0}),super.populateColumns(e),e.filter((e=>e.fixedWidth)).forEach((e=>{e.width="80px"}))}populateToolbar(e){super.populateToolbar(e),this.filtersControl.populateToolbar(e)}showDetailsForNode(e){const t=this.parsedTrace();if(!t)return!1;const i=e.event;return!!i&&(Tn.buildTraceEventDetails(t,i,this.linkifier,!1,null).then((e=>this.detailsView.element.appendChild(e))),!0)}onHover(e){this.delegate.highlightEvent(e?.event??null)}}class Dn extends l.ObjectWrapper.ObjectWrapper{categoryFilter;durationFilter;filtersInternal;constructor(){super(),this.categoryFilter=new xn,this.durationFilter=new Mn,this.filtersInternal=[this.categoryFilter,this.durationFilter]}filters(){return this.filtersInternal}populateToolbar(i){const n=new m.Toolbar.ToolbarComboBox(function(){const e=n.selectedOption().value,i=parseInt(e,10);this.durationFilter.setMinimumRecordDuration(t.Types.Timing.Milli(i)),this.notifyFiltersChanged()}.bind(this),An(Fn.durationFilter),void 0,"duration");for(const t of Dn.durationFilterPresetsMs)n.addOption(n.createOption(t?`≥ ${e.TimeUtilities.millisToString(t)}`:An(Fn.all),String(t)));i.appendToolbarItem(n);const r=new Map,a=s.EntryStyles.getCategoryStyles();for(const e in a){const t=a[e];if(!t.visible)continue;const n=new m.Toolbar.ToolbarCheckbox(t.title,void 0,o.bind(this,e),e);n.setChecked(!0),n.inputElement.style.backgroundColor=t.color,r.set(t.name,n),i.appendToolbarItem(n)}function o(e){const t=s.EntryStyles.getCategoryStyles(),i=r.get(e);t[e].hidden=!i?.checked(),this.notifyFiltersChanged()}}notifyFiltersChanged(){this.dispatchEventToListeners("FilterChanged")}static durationFilterPresetsMs=[0,1,15]}var Bn=Object.freeze({__proto__:null,EventsTimelineTreeView:Nn,Filters:Dn});class Hn extends m.SplitWidget.SplitWidget{showPaintProfilerCallback;rightSplitWidget;layerViewHost;layers3DView;frameLayerTree;updateWhenVisible;constructor(e){super(!0,!1,"timeline-layers-view"),this.showPaintProfilerCallback=e,this.element.classList.add("timeline-layers-view"),this.rightSplitWidget=new m.SplitWidget.SplitWidget(!0,!0,"timeline-layers-view-details"),this.rightSplitWidget.element.classList.add("timeline-layers-view-properties"),this.setMainWidget(this.rightSplitWidget);const t=new m.Widget.VBox;this.setSidebarWidget(t),this.layerViewHost=new D.LayerViewHost.LayerViewHost;const i=new D.LayerTreeOutline.LayerTreeOutline(this.layerViewHost);t.element.appendChild(i.element),this.layers3DView=new D.Layers3DView.Layers3DView(this.layerViewHost),this.layers3DView.addEventListener("PaintProfilerRequested",this.onPaintProfilerRequested,this),this.rightSplitWidget.setMainWidget(this.layers3DView);const n=new D.LayerDetailsView.LayerDetailsView(this.layerViewHost);this.rightSplitWidget.setSidebarWidget(n),n.addEventListener("PaintProfilerRequested",this.onPaintProfilerRequested,this)}showLayerTree(e){this.frameLayerTree=e,this.isShowing()?this.update():this.updateWhenVisible=!0}wasShown(){this.updateWhenVisible&&(this.updateWhenVisible=!1,this.update())}async onPaintProfilerRequested(e){const t=e.data,i=await this.layers3DView.snapshotForSelection(t);i&&this.showPaintProfilerCallback(i.snapshot)}update(){this.frameLayerTree&&this.frameLayerTree.layerTreePromise().then((e=>this.layerViewHost.setLayerTree(e)))}}var Un=Object.freeze({__proto__:null,TimelineLayersView:Hn}),On={cssText:`.paint-profiler-image-view{overflow:hidden}.paint-profiler-image-view .paint-profiler-image-container{transform-origin:0 0}.paint-profiler-image-view .paint-profiler-image-container div{border-color:1px solid var(--sys-color-divider);border-style:solid;z-index:100;position:absolute;top:0;left:0}.paint-profiler-image-view img{border:solid 1px var(--sys-color-inverse-surface)}\n/*# sourceURL=${import.meta.resolve("./timelinePaintProfiler.css")} */\n`};class _n extends o.LayerTreeBase.LayerTreeBase{tileById=new Map;paintProfilerModel;constructor(e){super(e),this.paintProfilerModel=e?.model(o.PaintProfiler.PaintProfilerModel)??null}async setLayers(e,t,i){const n=new Set;if(e)this.extractNodeIdsToResolve(n,{},e);else if(t)for(let e=0;e<t.length;++e)this.extractNodeIdsToResolve(n,{},t[e]);await this.resolveBackendNodeIds(n);const r=this.layersById;if(this.layersById=new Map,this.setContentRoot(null),e){const t=this.innerSetLayers(r,e);this.setRoot(t)}else if(t){const e=t.map(this.innerSetLayers.bind(this,r)),i=this.contentRoot();if(!i)throw new Error("Content root is not set.");this.setRoot(i);for(let t=0;t<e.length;++t)e[t].id()!==i.id()&&i.addChild(e[t])}this.setPaints(i)}setTiles(e){this.tileById=new Map;for(const t of e)this.tileById.set(t.id,t)}pictureForRasterTile(e){const t=this.tileById.get("cc::Tile/"+e);if(!t)return l.Console.Console.instance().error(`Tile ${e} is missing`),Promise.resolve(null);const i=this.layerById(t.layer_id);return i?i.pictureForRect(t.content_rect):(l.Console.Console.instance().error(`Layer ${t.layer_id} for tile ${e} is not found`),Promise.resolve(null))}setPaints(e){for(let t=0;t<e.length;++t){const i=this.layersById.get(e[t].layerId());i&&i.addPaintEvent(e[t])}}innerSetLayers(e,t){let i=e.get(t.layer_id);i?i.reset(t):i=new Vn(this.paintProfilerModel,t),this.layersById.set(t.layer_id,i),t.owner_node&&i.setNode(this.backendNodeIdToNode().get(t.owner_node)||null),!this.contentRoot()&&i.drawsContent()&&this.setContentRoot(i);for(let n=0;t.children&&n<t.children.length;++n)i.addChild(this.innerSetLayers(e,t.children[n]));return i}extractNodeIdsToResolve(e,t,i){const n=i.owner_node;n&&!this.backendNodeIdToNode().has(n)&&e.add(n);for(let n=0;i.children&&n<i.children.length;++n)this.extractNodeIdsToResolve(e,t,i.children[n])}}class Wn{#gi;#vi;#Ti=[];constructor(e,t){this.#gi=e,this.#vi=t.entry,this.#Ti=t.paints}async layerTreePromise(){const e=this.#vi.args.snapshot,t=e.device_viewport_size,i=e.active_tiles,n=e.active_tree.root_layer,r=e.active_tree.layers,a=new _n(this.#gi);return a.setViewportSize(t),a.setTiles(i),await a.setLayers(n,r,this.#Ti||[]),a}paints(){return this.#Ti}}class Vn{parentLayerId;parentInternal;layerId;nodeInternal;offsetXInternal;offsetYInternal;widthInternal;heightInternal;childrenInternal;quadInternal;scrollRectsInternal;gpuMemoryUsageInternal;paints;compositingReasons;compositingReasonIds;drawsContentInternal;paintProfilerModel;constructor(e,t){this.parentLayerId=null,this.parentInternal=null,this.layerId="",this.nodeInternal=null,this.offsetXInternal=-1,this.offsetYInternal=-1,this.widthInternal=-1,this.heightInternal=-1,this.childrenInternal=[],this.quadInternal=[],this.scrollRectsInternal=[],this.gpuMemoryUsageInternal=-1,this.paints=[],this.compositingReasons=[],this.compositingReasonIds=[],this.drawsContentInternal=!1,this.paintProfilerModel=e,this.reset(t)}reset(e){this.nodeInternal=null,this.layerId=String(e.layer_id),this.offsetXInternal=e.position[0],this.offsetYInternal=e.position[1],this.widthInternal=e.bounds.width,this.heightInternal=e.bounds.height,this.childrenInternal=[],this.parentLayerId=null,this.parentInternal=null,this.quadInternal=e.layer_quad||[],this.createScrollRects(e),this.compositingReasons=e.compositing_reasons||[],this.compositingReasonIds=e.compositing_reason_ids||[],this.drawsContentInternal=Boolean(e.draws_content),this.gpuMemoryUsageInternal=e.gpu_memory_usage,this.paints=[]}id(){return this.layerId}parentId(){return this.parentLayerId}parent(){return this.parentInternal}isRoot(){return!this.parentId()}children(){return this.childrenInternal}addChild(e){const t=e;t.parentInternal&&console.assert(!1,"Child already has a parent"),this.childrenInternal.push(t),t.parentInternal=this,t.parentLayerId=this.layerId}setNode(e){this.nodeInternal=e}node(){return this.nodeInternal}nodeForSelfOrAncestor(){let e=this;for(;e;e=e.parent())if(e.node())return e.node();return null}offsetX(){return this.offsetXInternal}offsetY(){return this.offsetYInternal}width(){return this.widthInternal}height(){return this.heightInternal}transform(){return null}quad(){return this.quadInternal}anchorPoint(){return[.5,.5,0]}invisible(){return!1}paintCount(){return 0}lastPaintRect(){return null}scrollRects(){return this.scrollRectsInternal}stickyPositionConstraint(){return null}gpuMemoryUsage(){return this.gpuMemoryUsageInternal}snapshots(){return this.paints.map((async e=>{if(!this.paintProfilerModel)return null;const t=await async function(e,t){const i=t.picture();if(!i||!e)return null;const n=await e.loadSnapshot(i.serializedPicture);return n?{rect:i.rect,snapshot:n}:null}(this.paintProfilerModel,e);if(!t)return null;return{rect:{x:t.rect[0],y:t.rect[1],width:t.rect[2],height:t.rect[3]},snapshot:t.snapshot}}))}async pictureForRect(e){return await Promise.all(this.paints.map((e=>e.picture()))).then((i=>{const n=i.filter((i=>{return i&&(n=i.rect,r=e,t(n[0],n[0]+n[2],r[0],r[0]+r[2])&&t(n[1],n[1]+n[3],r[1],r[1]+r[3]));var n,r})).map((e=>({x:e.rect[0],y:e.rect[1],picture:e.serializedPicture})));if(!n.length||!this.paintProfilerModel)return null;const r=n.reduce(((e,t)=>Math.min(e,t.x)),1/0),a=n.reduce(((e,t)=>Math.min(e,t.y)),1/0),s={x:e[0]-r,y:e[1]-a,width:e[2],height:e[3]};return this.paintProfilerModel.loadSnapshotFromFragments(n).then((e=>e?{rect:s,snapshot:e}:null))}));function t(e,t,i,n){return console.assert(e<=t&&i<=n,"segments should be specified as ordered pairs"),t>i&&e<n}}scrollRectsFromParams(e,t){return{rect:{x:e[0],y:e[1],width:e[2],height:e[3]},type:t}}createScrollRects(e){const t=[];e.non_fast_scrollable_region&&t.push(this.scrollRectsFromParams(e.non_fast_scrollable_region,"NonFastScrollable")),e.touch_event_handler_region&&t.push(this.scrollRectsFromParams(e.touch_event_handler_region,"TouchEventHandler")),e.wheel_event_handler_region&&t.push(this.scrollRectsFromParams(e.wheel_event_handler_region,"WheelEventHandler")),e.scroll_event_handler_region&&t.push(this.scrollRectsFromParams(e.scroll_event_handler_region,"RepaintsOnScroll")),this.scrollRectsInternal=t}addPaintEvent(e){this.paints.push(e)}requestCompositingReasons(){return Promise.resolve(this.compositingReasons)}requestCompositingReasonIds(){return Promise.resolve(this.compositingReasonIds)}drawsContent(){return this.drawsContentInternal}}class Gn extends m.SplitWidget.SplitWidget{logAndImageSplitWidget;imageView;paintProfilerView;logTreeView;needsUpdateWhenVisible;pendingSnapshot;event;paintProfilerModel;lastLoadedSnapshot;#t;constructor(e){super(!1,!1),this.element.classList.add("timeline-paint-profiler-view"),this.setSidebarSize(60),this.setResizable(!1),this.#t=e,this.logAndImageSplitWidget=new m.SplitWidget.SplitWidget(!0,!1),this.logAndImageSplitWidget.element.classList.add("timeline-paint-profiler-log-split"),this.setMainWidget(this.logAndImageSplitWidget),this.imageView=new zn,this.logAndImageSplitWidget.setMainWidget(this.imageView),this.paintProfilerView=new D.PaintProfilerView.PaintProfilerView(this.imageView.showImage.bind(this.imageView)),this.paintProfilerView.addEventListener("WindowChanged",this.onWindowChanged,this),this.setSidebarWidget(this.paintProfilerView),this.logTreeView=new D.PaintProfilerView.PaintProfilerCommandLogView,this.logAndImageSplitWidget.setSidebarWidget(this.logTreeView),this.needsUpdateWhenVisible=!1,this.pendingSnapshot=null,this.event=null,this.paintProfilerModel=null,this.lastLoadedSnapshot=null}wasShown(){super.wasShown(),this.needsUpdateWhenVisible&&(this.needsUpdateWhenVisible=!1,this.update())}setSnapshot(e){this.releaseSnapshot(),this.pendingSnapshot=e,this.event=null,this.updateWhenVisible()}#yi(e){const t=e.args.tileData;if(!t)return!1;const i=this.#t.Frames.framesById[t.sourceFrameNumber];return!!i?.layerTree}setEvent(e,i){if(this.releaseSnapshot(),this.paintProfilerModel=e,this.pendingSnapshot=null,this.event=i,this.updateWhenVisible(),t.Types.Events.isPaint(i)){const e=this.#t.LayerTree.paintsToSnapshots.get(i);return Boolean(e)}return!!t.Types.Events.isRasterTask(i)&&this.#yi(i)}updateWhenVisible(){this.isShowing()?this.update():this.needsUpdateWhenVisible=!0}async#fi(e){const t=e.args.tileData;if(!t)return null;if(!t.tileId.id_ref)return null;const i=o.TargetManager.TargetManager.instance().rootTarget();if(!i)return null;const n=this.#t.Frames.framesById[t.sourceFrameNumber];if(!n?.layerTree)return null;const r=new Wn(i,n.layerTree),a=await r.layerTreePromise();return a?await a.pictureForRasterTile(t.tileId.id_ref):null}update(){let e;if(this.logTreeView.setCommandLog([]),this.paintProfilerView.setSnapshotAndLog(null,[],null),this.pendingSnapshot)e=Promise.resolve({rect:null,snapshot:this.pendingSnapshot});else if(this.event&&this.paintProfilerModel&&t.Types.Events.isPaint(this.event)){const t=this.#t.LayerTree.paintsToSnapshots.get(this.event);if(t){const i=t.args.snapshot.skp64;e=this.paintProfilerModel.loadSnapshot(i).then((e=>e&&{rect:null,snapshot:e}))}else e=Promise.resolve(null)}else{if(!this.event||!t.Types.Events.isRasterTask(this.event))return void console.assert(!1,"Unexpected event type or no snapshot");e=this.#fi(this.event)}function i(e,t,i){this.logTreeView.setCommandLog(i||[]),this.paintProfilerView.setSnapshotAndLog(e,i||[],t)}e.then((e=>{if(this.releaseSnapshot(),!e)return void this.imageView.showImage();const t=e.snapshot;this.lastLoadedSnapshot=t,this.imageView.setMask(e.rect),t.commandLog().then((n=>i.call(this,t,e.rect,n||[])))}))}releaseSnapshot(){this.lastLoadedSnapshot&&(this.lastLoadedSnapshot.release(),this.lastLoadedSnapshot=null)}onWindowChanged(){this.logTreeView.updateWindow(this.paintProfilerView.selectionWindow())}}class zn extends m.Widget.Widget{imageContainer;imageElement;maskElement;transformController;maskRectangle;constructor(){super(!0),this.registerRequiredCSS(On),this.contentElement.classList.add("fill","paint-profiler-image-view"),this.imageContainer=this.contentElement.createChild("div","paint-profiler-image-container"),this.imageElement=this.imageContainer.createChild("img"),this.maskElement=this.imageContainer.createChild("div"),this.imageElement.addEventListener("load",this.updateImagePosition.bind(this),!1),this.transformController=new D.TransformController.TransformController(this.contentElement,!0),this.transformController.addEventListener("TransformChanged",this.updateImagePosition,this)}onResize(){this.imageElement.src&&this.updateImagePosition()}updateImagePosition(){const e=this.imageElement.naturalWidth,t=this.imageElement.naturalHeight,i=this.contentElement.clientWidth,n=this.contentElement.clientHeight,r=.1*i,a=.1*n,s=(i-r)/e,o=(n-a)/t,l=Math.min(s,o);if(this.maskRectangle){const i=this.maskElement.style;i.width=e+"px",i.height=t+"px",i.borderLeftWidth=this.maskRectangle.x+"px",i.borderTopWidth=this.maskRectangle.y+"px",i.borderRightWidth=e-this.maskRectangle.x-this.maskRectangle.width+"px",i.borderBottomWidth=t-this.maskRectangle.y-this.maskRectangle.height+"px"}this.transformController.setScaleConstraints(.5,10/l);let d=(new WebKitCSSMatrix).scale(this.transformController.scale(),this.transformController.scale()).translate(i/2,n/2).scale(l,l).translate(-e/2,-t/2);const c=m.Geometry.boundsForTransformedPoints(d,[0,0,0,e,t,0]);this.transformController.clampOffsets(r-c.maxX,i-r-c.minX,a-c.maxY,n-a-c.minY),d=(new WebKitCSSMatrix).translate(this.transformController.offsetX(),this.transformController.offsetY()).multiply(d),this.imageContainer.style.webkitTransform=d.toString()}showImage(e){this.imageContainer.classList.toggle("hidden",!e),e&&(this.imageElement.src=e)}setMask(e){this.maskRectangle=e,this.maskElement.classList.toggle("hidden",!e)}}var jn=Object.freeze({__proto__:null,TimelinePaintImageView:zn,TimelinePaintProfilerView:Gn}),$n={cssText:`devtools-data-grid{flex:auto}\n/*# sourceURL=${import.meta.resolve("./timelineSelectorStatsView.css")} */\n`};const Kn={selectorStats:"Selector stats",elapsed:"Elapsed (ms)",rejectPercentage:"% of slow-path non-matches",rejectPercentageExplanation:"The percentage of non-matching nodes (Match Attempts - Match Count) that couldn't be quickly ruled out by the bloom filter due to high selector complexity. Lower is better.",matchAttempts:"Match attempts",matchCount:"Match count",selector:"Selector",styleSheetId:"Style Sheet",copyTable:"Copy table",unableToLink:"Unable to link",unableToLinkViaStyleSheetId:"Unable to link via {PH1}",tableCopiedToClipboard:"Table copied to clipboard",totalForAllSelectors:"(Totals for all selectors)",lineNumber:"Line {PH1}:{PH2}"},qn=e.i18n.registerUIStrings("panels/timeline/TimelineSelectorStatsView.ts",Kn),Yn=e.i18n.getLocalizedString.bind(void 0,qn),Jn=t.Types.Events.SelectorTimingsKey;class Xn extends m.Widget.VBox{#Si;#t=null;#wi=null;#bi;#Ei=[];constructor(e,t=(e,t,i)=>{B(H`
1
+ import*as e from"../../core/i18n/i18n.js";import*as t from"../../models/trace/trace.js";import*as i from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as n from"../../ui/legacy/theme_support/theme_support.js";import*as r from"../../core/platform/platform.js";import*as a from"../../services/trace_bounds/trace_bounds.js";import*as s from"./utils/utils.js";export{s as Utils};import*as o from"../../core/sdk/sdk.js";import*as l from"../../core/common/common.js";import*as d from"../../core/root/root.js";import*as c from"./components/components.js";import*as h from"./extensions/extensions.js";import*as p from"../../ui/components/helpers/helpers.js";import*as m from"../../ui/legacy/legacy.js";import*as u from"../../models/bindings/bindings.js";import*as g from"../../models/crux-manager/crux-manager.js";import*as v from"../../ui/visual_logging/visual_logging.js";import*as T from"./components/insights/insights.js";import*as y from"./overlays/components/components.js";import*as f from"./overlays/overlays.js";import*as S from"../../ui/legacy/components/utils/utils.js";import*as w from"../../ui/legacy/components/data_grid/data_grid.js";import*as b from"../../ui/components/code_highlighter/code_highlighter.js";import*as E from"../../ui/components/buttons/buttons.js";import*as C from"../../core/host/host.js";import*as k from"../../models/workspace/workspace.js";import*as I from"../../ui/components/adorners/adorners.js";import*as M from"../../ui/components/dialogs/dialogs.js";import*as x from"../../ui/components/legacy_wrapper/legacy_wrapper.js";import*as P from"../mobile_throttling/mobile_throttling.js";import*as R from"../../ui/components/menus/menus.js";import*as F from"../../models/emulation/emulation.js";import*as L from"../../models/extensions/extensions.js";import*as A from"../../models/live-metrics/live-metrics.js";import*as N from"../../ui/components/icon_button/icon_button.js";import*as D from"../layer_viewer/layer_viewer.js";import"../../ui/components/linkifier/linkifier.js";import{render as B,html as H}from"../../ui/lit/lit.js";const U={sSelfS:"{PH1} (self {PH2})"},O=e.i18n.registerUIStrings("panels/timeline/AppenderUtils.ts",U),_=e.i18n.getLocalizedString.bind(void 0,O);function W(e){const t={padding:4,height:17,collapsible:!0,color:n.ThemeSupport.instance().getComputedValue("--sys-color-on-surface"),backgroundColor:n.ThemeSupport.instance().getComputedValue("--sys-color-cdt-base-container"),nestingLevel:0,shareHeaderLine:!0};return Object.assign(t,e)}function V(e,t,i,n,r,a,s){const o={startLevel:t,name:i,style:n,selectable:r,expanded:a,showStackContextMenu:s};return null!==e&&(o.jslogContext=e),o}function G(i,n){if(!i)return"";const r=t.Helpers.Timing.microToMilli(i);if(void 0===n)return e.TimeUtilities.millisToString(r,!0);const a=t.Helpers.Timing.microToMilli(n),s=t.Types.Timing.Milli(1e-6);return Math.abs(r-a)>s&&a>s?_(U.sSelfS,{PH1:e.TimeUtilities.millisToString(r,!0),PH2:e.TimeUtilities.millisToString(a,!0)}):e.TimeUtilities.millisToString(r,!0)}function z(e,t){let i=0;const n=e.ts,r=e.ts+(e.dur||0);for(;i<t.length&&n<t[i];)++i;return t[i]=r,i}function j(e,t,i){const n=e.entryDecorations[t]||[];n.push(i),e.entryDecorations[t]=n}var $=Object.freeze({__proto__:null,addDecorationToEvent:j,buildGroupStyle:W,buildTrackHeader:V,getDurationString:G,getEventLevel:z});const K={animations:"Animations"},q=e.i18n.registerUIStrings("panels/timeline/AnimationsTrackAppender.ts",K),Y=e.i18n.getLocalizedString.bind(void 0,q);class J{appenderName="Animations";#e;#t;#i=this.#n.bind(this);constructor(e,t){this.#e=e,this.#t=t}appendTrackAtLevel(e,t){const i=this.#t.Animations.animations;return 0===i.length?e:(this.#r(e,t),this.#e.appendEventsAtLevel(i,e,this,this.#i))}#r(e,t){const i=W({useFirstLineForOverview:!1}),n=V("animations",e,Y(K.animations),i,!0,t);this.#e.registerTrackForGroup(n,this)}#n(e,i){if(e&&t.Types.Events.isSyntheticAnimation(e)){t.Insights.Models.CLSCulprits.getNonCompositedFailure(e).length&&j(this.#e.getFlameChartTimelineData(),i,{type:"WARNING_TRIANGLE"})}}colorForEvent(){return n.ThemeSupport.instance().getComputedValue("--app-color-rendering")}}var X=Object.freeze({__proto__:null,AnimationsTrackAppender:J});const Z={srEnterLabelEditMode:"Editing the annotation label text",srLabelTextUpdated:"Label updated to {PH1}",srTimeRangeBoundsUpdated:"Time range updated, starting at {PH1} and ending at {PH2}",timeRange:"time range",entryLabel:"entry label",entriesLink:"connected entries",srAnnotationRemoved:"The {PH1} annotation has been removed",srAnnotationAdded:"The {PH1} annotation has been added",srEntriesLinked:"The connected entries annotation now links from {PH1} to {PH2}"},Q=e.i18n.registerUIStrings("panels/timeline/AnnotationHelpers.ts",Z),ee=e.i18n.getLocalizedString.bind(void 0,Q);function te(e){const t=[];switch(e.type){case"ENTRY_LABEL":t.push(e.entry);break;case"TIME_RANGE":break;case"ENTRIES_LINK":t.push(e.entryFrom),e.entryTo&&t.push(e.entryTo);break;default:r.assertNever(e,"Unsupported annotation type")}return t}function ie(e){let i=null;const n=t.Types.Timing.Milli(1);switch(e.type){case"ENTRY_LABEL":{const r=e.entry.dur??t.Helpers.Timing.milliToMicro(n);i=t.Helpers.Timing.traceWindowFromMicroSeconds(e.entry.ts,t.Types.Timing.Micro(e.entry.ts+r));break}case"TIME_RANGE":i=e.bounds;break;case"ENTRIES_LINK":{if(!e.entryTo)break;const r=e.entryFrom.dur??n,a=e.entryTo.dur??n,s=e.entryFrom.ts+r,o=e.entryTo.ts+a,l=Math.max(s,o);i=t.Helpers.Timing.traceWindowFromMicroSeconds(e.entryFrom.ts,t.Types.Timing.Micro(l));break}default:r.assertNever(e,"Unsupported annotation type")}return i}function ne(e){return"TIME_RANGE"===e.type}function re(e){return"ENTRIES_LINK"===e.type}function ae(e){return"ENTRY_LABEL"===e.type}function se(e){return ne(e)?ee(Z.timeRange):re(e)?ee(Z.entriesLink):ae(e)&&e.label.length>0?ee(Z.entryLabel):null}function oe(i){const{overlay:n,action:o}=i;switch(o){case"Remove":{const e=se(n);if(e)return ee(Z.srAnnotationRemoved,{PH1:e});break}case"Add":{const e=se(n);if(e)return ee(Z.srAnnotationAdded,{PH1:e});break}case"UpdateLabel":{const e=function(e){return ne(e)||ae(e)?e.label:null}(n);if(e)return ee(Z.srLabelTextUpdated,{PH1:e});break}case"UpdateTimeRange":{if("TIME_RANGE"!==n.type)return"";const i=a.TraceBounds.BoundsManager.instance().state()?.micro.entireTraceBounds;if(!i)return"";const{min:r,max:s}=n.bounds,o=e.TimeUtilities.formatMicroSecondsAsMillisFixed(t.Types.Timing.Micro(r-i.min)),l=e.TimeUtilities.formatMicroSecondsAsMillisFixed(t.Types.Timing.Micro(s-i.min));return ee(Z.srTimeRangeBoundsUpdated,{PH1:o,PH2:l})}case"UpdateLinkToEntry":if(re(n)&&n.entryFrom&&n.entryTo){const e=s.EntryName.nameForEntry(n.entryFrom),t=s.EntryName.nameForEntry(n.entryTo);return ee(Z.srEntriesLinked,{PH1:e,PH2:t})}break;case"EnterLabelEditState":return ee(Z.srEnterLabelEditMode);default:r.assertNever(o,"Unsupported action for AnnotationModifiedEvent")}return null}var le=Object.freeze({__proto__:null,ariaAnnouncementForModifiedEvent:oe,ariaDescriptionForOverlay:se,getAnnotationEntries:te,getAnnotationWindow:ie,isEntriesLink:re,isEntryLabel:ae,isTimeRangeLabel:ne});class de extends Event{duration;static eventName="traceload";constructor(e){super(de.eventName,{bubbles:!0,composed:!0}),this.duration=e}}var ce=Object.freeze({__proto__:null,TraceLoadEvent:de});let he;class pe{static instance(e={forceNew:null}){const{forceNew:t}=e;return he&&!t||(he=new pe),he}linkify(e,t){const i=document.createElement("span"),n=e,{x:r,y:a,width:s,height:l}=n;return i.textContent=`Location: [${r},${a}], Size: [${s}x${l}]`,i.addEventListener("mouseover",(()=>o.OverlayModel.OverlayModel.highlightRect(n))),i.addEventListener("mouseleave",(()=>o.OverlayModel.OverlayModel.clearHighlight())),i}}var me=Object.freeze({__proto__:null,CLSRect:class{x;y;width;height;color;outlineColor;constructor([e,t,i,n]){this.x=e,this.y=t,this.width=i,this.height=n,this.color={r:238,g:111,b:99,a:.4},this.outlineColor={r:238,g:111,b:99,a:.7}}},Linkifier:pe});const ue={customTrackDescription:"This is a custom track added by a third party.",customTrackName:"{PH1} — Custom track"},ge=e.i18n.registerUIStrings("panels/timeline/ExtensionTrackAppender.ts",ue),ve=e.i18n.getLocalizedString.bind(void 0,ge);class Te{appenderName="Extension";#a;#e;constructor(e,t){this.#a=t,this.#e=e}appendTrackAtLevel(e,t){return 0===Object.values(this.#a.entriesByTrack).reduce(((e,t)=>t.length+e),0)?e:(this.#s(e,t),this.#o(e))}#s(e,t){const i=W({shareHeaderLine:!1,collapsible:!0}),n=V("extension",e,ve(ue.customTrackName,{PH1:this.#a.name}),i,!0,t);n.description=ve(ue.customTrackDescription),this.#e.registerTrackForGroup(n,this)}#l(e,t){const i=V("extension",e,t,W({shareHeaderLine:!1,padding:2,nestingLevel:1,collapsible:!0}),!0);this.#e.registerTrackForGroup(i,this)}#o(e){let t=e;for(const[e,i]of Object.entries(this.#a.entriesByTrack))this.#a.isTrackGroup&&this.#l(t,e),t=this.#e.appendEventsAtLevel(i,t,this);return t}colorForEvent(e){const i=n.ThemeSupport.instance().getComputedValue("--app-color-rendering");return t.Types.Extensions.isSyntheticExtensionEntry(e)?h.ExtensionUI.extensionEntryColor(e):i}titleForEvent(e){return e.name}setPopoverInfo(e,i){i.title=t.Types.Extensions.isSyntheticExtensionEntry(e)&&e.args.tooltipText?e.args.tooltipText:this.titleForEvent(e),i.formattedTime=G(e.dur)}}var ye=Object.freeze({__proto__:null,ExtensionTrackAppender:Te});const fe={gpu:"GPU"},Se=e.i18n.registerUIStrings("panels/timeline/GPUTrackAppender.ts",fe),we=e.i18n.getLocalizedString.bind(void 0,Se);class be{appenderName="GPU";#e;#t;constructor(e,t){this.#e=e,this.#t=t}appendTrackAtLevel(e,t){const i=this.#t.GPU.mainGPUThreadTasks;return 0===i.length?e:(this.#r(e,t),this.#e.appendEventsAtLevel(i,e,this))}#r(e,t){const i=W({collapsible:!1}),n=V("gpu",e,we(fe.gpu),i,!0,t);this.#e.registerTrackForGroup(n,this)}colorForEvent(e){if(!t.Types.Events.isGPUTask(e))throw new Error(`Unexpected GPU Task: The event's type is '${e.name}'`);return n.ThemeSupport.instance().getComputedValue("--app-color-painting")}}var Ee=Object.freeze({__proto__:null,GPUTrackAppender:be});const Ce={interactions:"Interactions"},ke=e.i18n.registerUIStrings("panels/timeline/InteractionsTrackAppender.ts",Ce),Ie=e.i18n.getLocalizedString.bind(void 0,ke);class Me{appenderName="Interactions";#d;#e;#t;constructor(e,t,i){this.#e=e,this.#d=i,this.#t=t}appendTrackAtLevel(e,t){return 0===this.#t.UserInteractions.interactionEvents.length?e:(this.#r(e,t),this.#c(e))}#r(e,t){const i=W({collapsible:this.#t.UserInteractions.interactionEvents.length>0,useDecoratorsForOverview:!0}),n=V("interactions",e,Ie(Ce.interactions),i,!0,t);this.#e.registerTrackForGroup(n,this)}#c(e){const{interactionEventsWithNoNesting:t,interactionsOverThreshold:i}=this.#t.UserInteractions;return this.#e.appendEventsAtLevel(t,e,this,((e,t)=>{i.has(e)&&void 0!==t&&this.#h(e,t)}))}#h(e,i){const n=this.#e.getFlameChartTimelineData().entryDecorations[i]||[];n.push({type:"CANDY",startAtTime:t.Handlers.ModelHandlers.UserInteractions.LONG_INTERACTION_THRESHOLD,endAtTime:e.processingEnd},{type:"WARNING_TRIANGLE",customEndTime:e.processingEnd}),this.#e.getFlameChartTimelineData().entryDecorations[i]=n}colorForEvent(e){let i=s.EntryName.nameForEntry(e,this.#t);return t.Types.Events.isSyntheticInteraction(e)&&(i+=e.interactionId),this.#d.colorForID(i)}setPopoverInfo(e,i){if(t.Types.Events.isSyntheticInteraction(e)){const t=new c.InteractionBreakdown.InteractionBreakdown;t.entry=e,i.additionalElements.push(t)}}}var xe=Object.freeze({__proto__:null,InteractionsTrackAppender:Me});const Pe={layoutShifts:"Layout shifts",layoutShiftCluster:"Layout shift cluster",layoutShift:"Layout shift"},Re=e.i18n.registerUIStrings("panels/timeline/LayoutShiftsTrackAppender.ts",Pe),Fe=e.i18n.getLocalizedString.bind(void 0,Re),Le=t.Types.Timing.Micro(5e3);class Ae{appenderName="LayoutShifts";#e;#t;constructor(e,t){this.#e=e,this.#t=t}appendTrackAtLevel(e,t){return 0===this.#t.LayoutShifts.clusters.length?e:(this.#r(e,t),this.#p(e))}#r(e,t){const i=W({collapsible:!1}),n=V("layout-shifts",e,Fe(Pe.layoutShifts),i,!0,t);this.#e.registerTrackForGroup(n,this)}#p(e){const t=this.#t.LayoutShifts.clusters;this.#e.appendEventsAtLevel(t,e,this);const i=this.#t.LayoutShifts.clusters.flatMap((e=>e.events));return this.preloadScreenshots(i),this.#e.appendEventsAtLevel(i,e,this)}colorForEvent(e){const i=n.ThemeSupport.instance().getComputedValue("--app-color-rendering");if(t.Types.Events.isSyntheticLayoutShiftCluster(e)){const e=l.Color.parse(i);if(e){return e.setAlpha(.5).asString("rgba")}}return i}setPopoverInfo(e,i){const n=t.Types.Events.isSyntheticLayoutShift(e)?e.args.data?.weighted_score_delta??0:t.Types.Events.isSyntheticLayoutShiftCluster(e)?e.clusterCumulativeScore:-1;if(i.formattedTime=n.toFixed(4),i.title=t.Types.Events.isSyntheticLayoutShift(e)?Fe(Pe.layoutShift):t.Types.Events.isSyntheticLayoutShiftCluster(e)?Fe(Pe.layoutShiftCluster):e.name,t.Types.Events.isSyntheticLayoutShift(e)){const t=new m.Geometry.Size(510,400),n=Ae.createShiftViz(e,this.#t,t);n&&i.additionalElements.push(n)}}getDrawOverride(e){if(t.Types.Events.isSyntheticLayoutShift(e)){const t=e.args.data?.weighted_score_delta||0,i=1-Math.min(t/.1,1);return(t,n,r,a,s,o,l)=>{const d=i*(s/3),c=s,h=c/2;return t.save(),t.beginPath(),t.moveTo(n,r+d),t.lineTo(n+h-d,r+h),t.lineTo(n,r+s-d),t.lineTo(n-h+d,r+h),t.closePath(),t.fillStyle=l(this.colorForEvent(e)),t.fill(),t.restore(),{x:n-h,width:c}}}if(t.Types.Events.isSyntheticLayoutShiftCluster(e))return(t,i,n,r,a,s,o)=>{const l=.2*a,d=n+(a-l)/2+.5;return t.fillStyle=o(this.colorForEvent(e)),t.fillRect(i,d,r-.5,l-1),{x:i,width:r,z:-1}}}preloadScreenshots(e){const t=new Set;for(const i of e){const e=i.parsedData.screenshots;e.before&&t.add(e.before),e.after&&t.add(e.after)}const i=Array.from(t);return s.ImageCache.preload(i)}titleForEvent(e){return""}static createShiftViz(e,t,i){const n=e.parsedData.screenshots,{viewportRect:r,devicePixelRatio:a}=t.Meta,o=document.createElement("div");o.classList.add("layout-shift-viz");const l=n.before&&s.ImageCache.getOrQueue(n.before),d=n.after&&s.ImageCache.getOrQueue(n.after);if(!l||!d||!r||void 0===a)return;const c=e=>new DOMRect(e[0]/a,e[1]/a,e[2]/a,e[3]/a),h=Math.min(l.naturalWidth/r.width,l.naturalHeight/r.height,1),m=Math.min(i.width/l.naturalWidth,i.height/l.naturalHeight,1);for(const e of[o,d,l])e.style.width=l.naturalWidth*m+"px",e.style.height=l.naturalHeight*m+"px";const u=e.args.data?.impacted_nodes?.map((e=>c(e.old_rect)))??[],g=e.args.data?.impacted_nodes?.map((e=>c(e.new_rect)))??[];return p.ScheduledRender.scheduleRender(o,(()=>function(){if(!l||!d)return;[l,d].flatMap((e=>e.getAnimations())).forEach((e=>e.cancel()));const e="ease-out",t={duration:3e3,iterations:1/0,fill:"forwards",easing:e};d.animate({opacity:[0,0,1,1,1],easing:e},t);const i=t=>({left:t.x*m*h+"px",top:t.y*m*h+"px",width:t.width*m*h+"px",height:t.height*m*h+"px",opacity:.7,outlineWidth:"1px",easing:e});u.forEach(((e,n)=>{const r=g[n],a=document.createElement("div");a.classList.add("layout-shift-viz-rect"),o.appendChild(a);let s=i(e),l=i(r);l.opacity=.4,[e.width,e.height,e.x,e.y].every((e=>0===e))&&(s={...l},s.opacity="0"),[r.width,r.height,r.x,r.y].every((e=>0===e))&&(l={...s},l.opacity="0"),a.animate([s,s,{...l,outlineWidth:"4px"},l,l],t)}))}())),o.append(l,d),o}}var Ne=Object.freeze({__proto__:null,LAYOUT_SHIFT_SYNTHETIC_DURATION:Le,LayoutShiftsTrackAppender:Ae});class De{#t;#m=[];#u=[];#g=new Map;constructor(e){this.#t=e}#v(e){return this.#t.Samples.entryToNode.get(e)??this.#t.Renderer.entryToNode.get(e)}findPossibleActions(e){const t=this.#v(e);if(!t)return{MERGE_FUNCTION:!1,COLLAPSE_FUNCTION:!1,COLLAPSE_REPEATING_DESCENDANTS:!1,RESET_CHILDREN:!1,UNDO_ALL_ACTIONS:!1};const i=t.parent,n=this.#T(t).filter((e=>!this.#m.includes(e))),r=this.#y(t).filter((e=>!this.#m.includes(e))),a=this.#T(t).filter((e=>this.#m.includes(e)));return{MERGE_FUNCTION:null!==i,COLLAPSE_FUNCTION:n.length>0,COLLAPSE_REPEATING_DESCENDANTS:r.length>0,RESET_CHILDREN:a.length>0,UNDO_ALL_ACTIONS:this.#m.length>0}}findHiddenDescendantsAmount(e){const t=this.#v(e);if(!t)return 0;return this.#T(t).filter((e=>this.invisibleEntries().includes(e))).length}invisibleEntries(){return this.#m}setHiddenAndExpandableEntries(e,t){this.#m.push(...e),this.#u.push(...t)}entryIsInvisible(e){return this.#m.includes(e)}expandableEntries(){return this.#u}applyFilterAction(e){const t=new Set;switch(e.type){case"MERGE_FUNCTION":{t.add(e.entry);const i=this.#v(e.entry)||null,n=i&&this.#f(i);n&&this.#S(n.entry);break}case"COLLAPSE_FUNCTION":{const i=this.#v(e.entry);if(!i)break;this.#T(i).forEach((e=>t.add(e))),this.#S(e.entry);break}case"COLLAPSE_REPEATING_DESCENDANTS":{const i=this.#v(e.entry);if(!i)break;this.#y(i).forEach((e=>t.add(e))),t.size>0&&this.#S(e.entry);break}case"UNDO_ALL_ACTIONS":this.#m=[],this.#u=[];break;case"RESET_CHILDREN":this.#w(e.entry);break;default:r.assertNever(e.type,`Unknown EntriesFilter action: ${e.type}`)}return this.#m.push(...t),this.#m}#S(e){this.#u.push(e);const t=this.#v(e);if(!t)return;const i=this.#T(t);i.length>0&&(this.#u=this.#u.filter((e=>!i.includes(e))))}firstVisibleParentEntryForEntry(e){const t=this.#v(e);if(!t)return null;const i=this.#f(t);return i?i.entry:null}#f(e){let t=e.parent;for(;t&&this.#m.includes(t.entry)||t&&!Br(t.entry);)t=t.parent;return t}#T(e){const t=this.#g.get(e);if(t)return t;const i=[],n=[...e.children];for(;n.length>0;){const e=n.shift();if(e){i.push(e.entry);const t=this.#g.get(e);t?i.push(...t):n.push(...e.children)}}return this.#g.set(e,i),i}#y(e){const i=[...e.children],n=[],r=t.Types.Events.isProfileCall(e.entry);for(;i.length>0;){const a=i.shift();if(a){const s=t.Types.Events.isProfileCall(a.entry);if(r&&s){const i=e.entry,r=a.entry;t.Helpers.SamplesIntegrator.SamplesIntegrator.framesAreEqual(i.callFrame,r.callFrame)&&n.push(a.entry)}else r||s||e.entry.name===a.entry.name&&n.push(a.entry);i.push(...a.children)}}return n}revealEntry(e){const t=this.#v(e);if(!t)return;let i=t;for(;i.parent&&!this.#u.includes(i.entry);)i=i.parent;this.#w(i.entry)}#w(e){const t=this.#v(e);if(!t)return;const i=this.#T(t);this.#m=this.#m.filter((e=>!i.includes(e))),this.#u=this.#u.filter((t=>!i.includes(t)&&t!==e))}isEntryExpandable(e){return this.#u.includes(e)}}var Be=Object.freeze({__proto__:null,EntriesFilter:De});class He{#b=new Map;keyForEvent(e){if(t.Types.Events.isProfileCall(e))return`p-${e.pid}-${e.tid}-${t.Types.Events.SampleIndex(e.sampleIndex)}-${e.nodeId}`;if(t.Types.Events.isLegacyTimelineFrame(e))return`l-${e.index}`;const i=t.Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getRawTraceEvents(),n=t.Types.Events.isSyntheticBased(e)?`s-${i.indexOf(e.rawSourceEvent)}`:`r-${i.indexOf(e)}`;return n.length<3?null:n}eventForKey(e,i){const n=t.Types.File.traceEventKeyToValues(e);if(He.isProfileCallKey(n))return this.#E(n,i);if(He.isLegacyTimelineFrameKey(n)){const e=i.Frames.frames.at(n.rawIndex);if(!e)throw new Error(`Could not find frame with index ${n.rawIndex}`);return e}if(He.isSyntheticEventKey(n)){const e=t.Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getSyntheticTraces().at(n.rawIndex);if(!e)throw new Error(`Attempted to get a synthetic event from an unknown raw event index: ${n.rawIndex}`);return e}if(He.isRawEventKey(n)){return t.Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getRawTraceEvents()[n.rawIndex]}throw new Error(`Unknown trace event serializable key values: ${n.join("-")}`)}static isProfileCallKey(e){return"p"===e.type}static isLegacyTimelineFrameKey(e){return"l"===e.type}static isRawEventKey(e){return"r"===e.type}static isSyntheticEventKey(e){return"s"===e.type}#E(e,t){const i=this.#b.get(e);if(i)return i;const n=t.Renderer.processes.get(e.processID)?.threads.get(e.threadID)?.profileCalls;if(!n)throw new Error(`Unknown profile call serializable key: ${e}`);const r=n?.find((t=>t.sampleIndex===e.sampleIndex&&t.nodeId===e.protocol));if(!r)throw new Error(`Unknown profile call serializable key: ${JSON.stringify(e)}`);return this.#b.set(e,r),r}}var Ue=Object.freeze({__proto__:null,EventsSerializer:He});const Oe=[];let _e;class We extends Event{overlay;action;static eventName="annotationmodifiedevent";constructor(e,t){super(We.eventName),this.overlay=e,this.action=t}}class Ve extends EventTarget{#C;#k;#I=null;#t;#M;#x;#P;static activeManager(){return _e}static reset(){Oe.length=0,_e=null}static initAndActivateModificationsManager(e,t){if(Oe[t]){if(_e===Oe[t])return _e;_e=Oe[t],Ve.activeManager()?.applyModificationsIfPresent()}const i=e.parsedTrace(t);if(!i)throw new Error("ModificationsManager was initialized without a corresponding trace data");const n=i.Meta.traceBounds,r=e.rawTraceEvents(t);if(!r)throw new Error("ModificationsManager was initialized without a corresponding raw trace events array");const a=e.syntheticTraceEventsManager(t);if(!a)throw new Error("ModificationsManager was initialized without a corresponding SyntheticEventsManager");const s=e.metadata(t),o=new Ve({parsedTrace:i,traceBounds:n,rawTraceEvents:r,modifications:s?.modifications,syntheticEvents:a.getSyntheticTraces()});return Oe[t]=o,_e=o,Ve.activeManager()?.applyModificationsIfPresent(),this.activeManager()}constructor({parsedTrace:e,traceBounds:t,modifications:i}){super(),this.#C=new De(e),this.#k=new c.Breadcrumbs.Breadcrumbs(t),this.#I=i||null,this.#t=e,this.#M=new He,this.#P=l.Settings.Settings.instance().moduleSetting("annotations-hidden"),this.#x=new Map}getEntriesFilter(){return this.#C}getTimelineBreadcrumbs(){return this.#k}deleteEmptyRangeAnnotations(){for(const e of this.#x.keys())"TIME_RANGE"===e.type&&0===e.label.length&&this.removeAnnotation(e)}createAnnotation(e,t=!1){if("ENTRY_LABEL"===e.type){const t=this.#R(e.entry);if(t)return void this.dispatchEvent(new We(t,"EnterLabelEditState"))}t||"TIME_RANGE"!==e.type&&this.#P.set(!1);const i=this.#F(e);this.#x.set(e,i),this.dispatchEvent(new We(i,"Add"))}annotationsForEntry(e){const t=[];for(const[i]of this.#x.entries())"ENTRY_LABEL"===i.type&&i.entry===e?t.push(i):"ENTRIES_LINK"!==i.type||i.entryFrom!==e&&i.entryTo!==e||t.push(i);return t}deleteEntryAnnotations(e){this.annotationsForEntry(e).forEach((e=>{this.removeAnnotation(e)}))}linkAnnotationBetweenEntriesExists(e,t){for(const i of this.#x.keys())if("ENTRIES_LINK"===i.type&&(i.entryFrom===e&&i.entryTo===t||i.entryFrom===t&&i.entryTo===e))return!0;return!1}#R(e){for(const[t,i]of this.#x.entries())if("ENTRY_LABEL"===t.type&&t.entry===e)return i;return null}#F(e){switch(e.type){case"ENTRY_LABEL":return{type:"ENTRY_LABEL",entry:e.entry,label:e.label};case"TIME_RANGE":return{type:"TIME_RANGE",label:e.label,showDuration:!0,bounds:e.bounds};case"ENTRIES_LINK":return{type:"ENTRIES_LINK",state:e.state,entryFrom:e.entryFrom,entryTo:e.entryTo};default:r.assertNever(e,"Overlay for provided annotation cannot be created")}}removeAnnotation(e){const t=this.#x.get(e);t?(this.#x.delete(e),this.dispatchEvent(new We(t,"Remove"))):console.warn("Overlay for deleted Annotation does not exist",e)}removeAnnotationOverlay(e){const t=this.getAnnotationByOverlay(e);t?this.removeAnnotation(t):console.warn("Annotation for deleted Overlay does not exist",e)}updateAnnotation(e){const i=this.#x.get(e);i&&ne(i)&&t.Types.File.isTimeRangeAnnotation(e)?(i.label=e.label,i.bounds=e.bounds,this.dispatchEvent(new We(i,"UpdateTimeRange"))):i&&re(i)&&t.Types.File.isEntriesLinkAnnotation(e)?(i.state=e.state,i.entryFrom=e.entryFrom,i.entryTo=e.entryTo,this.dispatchEvent(new We(i,"UpdateLinkToEntry"))):console.error("Annotation could not be updated")}updateAnnotationOverlay(e){const t=this.getAnnotationByOverlay(e);t?(("ENTRY_LABEL"===e.type&&"ENTRY_LABEL"===t.type||"TIME_RANGE"===e.type&&"TIME_RANGE"===t.type)&&(this.#P.set(!1),t.label=e.label,this.dispatchEvent(new We(e,"UpdateLabel"))),"ENTRIES_LINK"===e.type&&"ENTRIES_LINK"===t.type&&(this.#P.set(!1),t.state=e.state)):console.warn("Annotation for updated Overlay does not exist")}getAnnotationByOverlay(e){for(const[t,i]of this.#x.entries())if(i===e)return t;return null}getAnnotations(){return[...this.#x.keys()]}getOverlays(){return[...this.#x.values()]}applyAnnotationsFromCache(){this.#I=this.toJSON(),this.#x.clear(),this.#L(this.#I.annotations)}toJSON(){const e=this.#C.invisibleEntries().map((e=>this.#M.keyForEvent(e))).filter((e=>null!==e)),t=this.#C.expandableEntries().map((e=>this.#M.keyForEvent(e))).filter((e=>null!==e));return this.#I={entriesModifications:{hiddenEntries:e,expandableEntries:t},initialBreadcrumb:this.#k.initialBreadcrumb,annotations:this.#A()},this.#I}#A(){const e=this.getAnnotations(),i=[],n=[],r=[];for(let a=0;a<e.length;a++){const s=e[a];if(t.Types.File.isEntryLabelAnnotation(s)){const e=this.#M.keyForEvent(s.entry);e&&i.push({entry:e,label:s.label})}else if(t.Types.File.isTimeRangeAnnotation(s))n.push({bounds:s.bounds,label:s.label});else if(t.Types.File.isEntriesLinkAnnotation(s)&&s.entryTo){const e=this.#M.keyForEvent(s.entryFrom),t=this.#M.keyForEvent(s.entryTo);e&&t&&r.push({entryFrom:e,entryTo:t})}}return{entryLabels:i,labelledTimeRanges:n,linksBetweenEntries:r}}applyModificationsIfPresent(){if(!this.#I||!this.#I.annotations)return;const e=this.#I.entriesModifications.hiddenEntries,t=this.#I.entriesModifications.expandableEntries;this.#k.setInitialBreadcrumbFromLoadedModifications(this.#I.initialBreadcrumb),this.#N(e,t),this.#L(this.#I.annotations)}#L(e){try{(e.entryLabels??[]).forEach((e=>{this.createAnnotation({type:"ENTRY_LABEL",entry:this.#M.eventForKey(e.entry,this.#t),label:e.label},!0)}));(e.labelledTimeRanges??[]).forEach((e=>{this.createAnnotation({type:"TIME_RANGE",bounds:e.bounds,label:e.label},!0)}));(e.linksBetweenEntries??[]).forEach((e=>{this.createAnnotation({type:"ENTRIES_LINK",state:"connected",entryFrom:this.#M.eventForKey(e.entryFrom,this.#t),entryTo:this.#M.eventForKey(e.entryTo,this.#t)},!0)}))}catch(e){console.warn("Failed to apply stored annotations",e)}}#N(e,t){try{const i=e.map((e=>this.#M.eventForKey(e,this.#t))),n=t.map((e=>this.#M.eventForKey(e,this.#t)));this.#C.setHiddenAndExpandableEntries(i,n)}catch(e){console.warn("Failed to apply entriesFilter modifications",e),this.#C.setHiddenAndExpandableEntries([],[])}}}var Ge=Object.freeze({__proto__:null,AnnotationModifiedEvent:We,ModificationsManager:Ve});const ze={onIgnoreList:"On ignore list ({rule})",mainS:"Main — {PH1}",main:"Main",frameS:"Frame — {PH1}",workerS:"`Worker` — {PH1}",workerSS:"`Worker`: {PH1} — {PH2}",dedicatedWorker:"Dedicated `Worker`",threadS:"Thread {PH1}",raster:"Raster",threadPool:"Thread pool",rasterizerThreadS:"Rasterizer thread {PH1}",threadPoolThreadS:"Thread pool worker {PH1}",bidderWorkletS:"Bidder Worklet — {PH1}",bidderWorklet:"Bidder Worklet",sellerWorklet:"Seller Worklet",unknownWorklet:"Auction Worklet",workletService:"Auction Worklet service",sellerWorkletS:"Seller Worklet — {PH1}",unknownWorkletS:"Auction Worklet — {PH1}",workletServiceS:"Auction Worklet service — {PH1}"},je=e.i18n.registerUIStrings("panels/timeline/ThreadAppender.ts",ze),$e=e.i18n.getLocalizedString.bind(void 0,je);class Ke{appenderName="Thread";#d;#e;#t;#D=[];#B;#H;#U;#O;#_=!1;#W=!1;threadType="MAIN_THREAD";isOnMainFrame;#V=d.Runtime.experiments.isEnabled("timeline-show-all-events");#G="";#z=null;constructor(e,t,i,n,r,a,s,o){if(this.#e=e,this.#d=new l.Color.Generator({min:30,max:330,count:void 0},{min:50,max:80,count:3},85),this.#d.setColorForID("","#f2ecdc"),this.#t=t,this.#H=i,this.#U=n,!s||!o)throw new Error(`Could not find data for thread with id ${n} in process with id ${i}`);this.#D=s,this.#B=o,this.#O=r||$e(ze.threadS,{PH1:n}),this.isOnMainFrame=Boolean(this.#t.Renderer?.processes.get(i)?.isOnMainFrame),this.threadType=a,this.#t.AuctionWorklets.worklets.has(i)&&(this.appenderName="Thread_AuctionWorklet"),this.#G=this.#t.Renderer?.processes.get(this.#H)?.url||""}processId(){return this.#H}threadId(){return this.#U}appendTrackAtLevel(e,t=!1){return 0===this.#D.length?e:(this.#_=t,this.#j(e))}setHeaderNestingLevel(e){this.#z=e}#$(e){this.#W||("RASTERIZER"===this.threadType||"THREAD_POOL"===this.threadType?this.#K(e,this.threadType):this.#r(e),this.#W=!0)}setHeaderAppended(e){this.#W=e}headerAppended(){return this.#W}#r(e){const t=W({shareHeaderLine:!1,collapsible:this.#D.length>0});null!==this.#z&&(t.nestingLevel=this.#z);const i=V(this.#q(),e,this.trackName(),t,!0,this.#_,!0);this.#e.registerTrackForGroup(i,this)}#q(){switch(this.threadType){case"MAIN_THREAD":return this.isOnMainFrame?"thread.main":"thread.frame";case"WORKER":return"thread.worker";case"RASTERIZER":return"thread.rasterizer";case"AUCTION_WORKLET":return"thread.auction-worklet";case"OTHER":return"thread.other";case"CPU_PROFILE":return"thread.cpu-profile";case"THREAD_POOL":return"thread.pool";default:return null}}#K(e,t){const i=this.#e.getCurrentTrackCountForThreadType(t);if(0===i){const t=W({shareHeaderLine:!1,collapsible:this.#D.length>0}),i=V(null,e,this.trackName(),t,!1,this.#_);this.#e.getFlameChartTimelineData().groups.push(i)}const n=W({padding:2,nestingLevel:1,collapsible:!1}),r="RASTERIZER"===this.threadType?$e(ze.rasterizerThreadS,{PH1:i+1}):$e(ze.threadPoolThreadS,{PH1:i+1}),a=V(this.#q(),e,r,n,!0,this.#_);this.#e.registerTrackForGroup(a,this)}trackName(){let e=null;switch(this.threadType){case"MAIN_THREAD":e=this.isOnMainFrame?$e(ze.mainS,{PH1:this.#G}):$e(ze.frameS,{PH1:this.#G});break;case"CPU_PROFILE":e=$e(ze.main);break;case"WORKER":e=this.#Y();break;case"RASTERIZER":e=$e(ze.raster);break;case"THREAD_POOL":e=$e(ze.threadPool);break;case"OTHER":break;case"AUCTION_WORKLET":e=this.#J();break;default:return r.assertNever(this.threadType,`Unknown thread type: ${this.threadType}`)}let t="";return this.#t.Meta.traceIsGeneric&&(t+=` (${this.threadId()})`),(e||this.#O)+t}getUrl(){return this.#G}getEntries(){return this.#D}#J(){const e=this.#t.AuctionWorklets.worklets.get(this.#H);if(!e)return $e(ze.unknownWorklet);const t=e.host?`https://${e.host}`:"",i=t.length>0,n=e.args.data.utilityThread.tid===this.#U,a=e.args.data.v8HelperThread.tid===this.#U;if(n)return i?$e(ze.workletServiceS,{PH1:t}):$e(ze.workletService);if(a)switch(e.type){case"seller":return i?$e(ze.sellerWorkletS,{PH1:t}):$e(ze.sellerWorklet);case"bidder":return i?$e(ze.bidderWorkletS,{PH1:t}):$e(ze.bidderWorklet);case"unknown":return i?$e(ze.unknownWorkletS,{PH1:t}):$e(ze.unknownWorklet);default:r.assertNever(e.type,`Unexpected Auction Worklet Type ${e.type}`)}return i?$e(ze.unknownWorkletS,{PH1:t}):$e(ze.unknownWorklet)}#Y(){const e=this.#t.Renderer?.processes.get(this.#H)?.url||"",t=this.#t.Workers.workerIdByThread.get(this.#U),i=t?this.#t.Workers.workerURLById.get(t):e;let n=i?$e(ze.workerS,{PH1:i}):$e(ze.dedicatedWorker);const r=void 0!==t&&o.TargetManager.TargetManager.instance().targetById(t);return r&&(n=$e(ze.workerSS,{PH1:r.name(),PH2:e})),n}#j(e){return this.#X(this.#B.roots,e)}#X(e,t,i=!1){const n=Ve.activeManager()?.getEntriesFilter().invisibleEntries()??[];let r=t;for(const a of e){let e=t;const o=a.entry,l=s.IgnoreList.isIgnoreListedEntry(o);!n.includes(o)&&(Br(o,this.#t)||this.#V)&&!(l&&i)&&(this.#Z(o,t),e++);const d=this.#X(a.children,e,l);r=Math.max(d,r)}return r}#Z(e,t){this.#$(t);const i=this.#e.appendEventAtLevel(e,t,this);this.#Q(e,i)}#Q(e,i){const n=this.#e.getFlameChartTimelineData();Ve.activeManager()?.getEntriesFilter().isEntryExpandable(e)&&j(n,i,{type:"HIDDEN_DESCENDANTS_ARROW"});const r=this.#t.Warnings.perEvent.get(e);r&&(j(n,i,{type:"WARNING_TRIANGLE"}),r.includes("LONG_TASK")&&j(n,i,{type:"CANDY",startAtTime:t.Handlers.ModelHandlers.Warnings.LONG_MAIN_THREAD_TASK_THRESHOLD}))}colorForEvent(e){if(this.#t.Meta.traceIsGeneric)return e.name?`hsl(${r.StringUtilities.hashCode(e.name)%300+30}, 40%, 70%)`:"#ccc";if(t.Types.Events.isProfileCall(e))return"(idle)"===e.callFrame.functionName?s.EntryStyles.getCategoryStyles().idle.getComputedColorValue():"0"===e.callFrame.scriptId?s.EntryStyles.getCategoryStyles().scripting.getComputedColorValue():this.#d.colorForID(e.callFrame.url);const i=s.EntryStyles.getEventStyle(e.name)?.category.getComputedColorValue();return i||s.EntryStyles.getCategoryStyles().other.getComputedColorValue()}titleForEvent(e){if(s.IgnoreList.isIgnoreListedEntry(e)){const t=s.IgnoreList.getIgnoredReasonString(e);return $e(ze.onIgnoreList,{rule:t})}return s.EntryName.nameForEntry(e,this.#t)}setPopoverInfo(e,i){if(t.Types.Events.isParseHTML(e)){const t=e.args.beginData.startLine,n=e.args.endData?.endLine,r=e.args.beginData.url,a=u.ResourceUtils.displayNameForURL(r),s=-1!==n||n===t?`${t}...${n}`:t;i.title+=` - ${a} [${s}]`}const n=this.#t.Renderer.entryToNode.get(e)?.selfTime;i.formattedTime=G(e.dur,n)}}var qe=Object.freeze({__proto__:null,ThreadAppender:Ke});function Ye(e,t,i,n){const r=[...Xe(e,t,e.Initiators.eventToInitiator),...Ze(t,e.Initiators.initiatorToEvents)];return r.forEach((t=>function(e,t,i,n){if(i.includes(e.event)){let i=n.Renderer.entryToNode.get(e.event)?.parent;for(;i?.entry&&!t.includes(i?.entry);)i=i.parent??void 0;e.event=i?.entry??e.event,e.isEntryHidden=!0}if(i.includes(e.initiator)){let i=n.Renderer.entryToNode.get(e.initiator)?.parent;for(;i?.entry&&!t.includes(i?.entry);)i=i.parent??void 0;e.initiator=i?.entry??e.initiator,e.isInitiatorHidden=!0}return e}(t,n,i,e))),r}function Je(e,t){return Xe(e,t,e.NetworkRequests.eventToInitiator)}function Xe(e,t,i){const n=[];let r=t;const a=new Set;for(a.add(r);r;){const t=i.get(r);if(t){if(a.has(t))break;n.push({event:r,initiator:t}),r=t,a.add(r);continue}const s=e.Renderer.entryToNode.get(r);if(!s){r=null;break}r=s.parent?.entry||null}return n}function Ze(e,t){const i=[],n=t.get(e);return n&&n.forEach((t=>{i.push({event:t,initiator:e})})),i}var Qe=Object.freeze({__proto__:null,initiatorsDataToDraw:Ye,initiatorsDataToDrawForNetwork:Je}),et={cssText:`.timeline-flamechart-popover{overflow:hidden;padding:4px;margin:-4px}.timeline-flamechart-popover devtools-interaction-breakdown{margin-top:10px}.timeline-flamechart-popover span{margin-right:5px}.timeline-flamechart-popover span.popoverinfo-network-time{color:var(--sys-color-primary)}.timeline-flamechart-popover span.popoverinfo-time{color:var(--sys-color-green)}.timeline-flamechart-popover span.popoverinfo-warning{color:var(--sys-color-error)}.timeline-flamechart-popover span.popoverinfo-url-path,\n.timeline-flamechart-popover span.popoverinfo-url-origin{color:var(--sys-color-token-subtle);font-size:11px}.timeline-flamechart-popover span.popoverinfo-url-origin{font-style:italic}.timeline-flamechart-popover span.popoverinfo-warning *{color:inherit}.layout-shift-viz{position:relative;margin:var(--sys-size-8) var(--sys-size-5);outline:1px solid var(--sys-color-divider)}.layout-shift-viz-rect{outline:1px solid color-mix(in srgb,var(--color-background-inverted) 20%,var(--app-color-rendering));background-color:color-mix(in srgb,var(--color-background-inverted-opacity-0) 50%,var(--app-color-rendering-children));position:absolute;z-index:100}.layout-shift-viz > img{position:absolute;top:0;left:0}\n/*# sourceURL=${import.meta.resolve("./timelineFlamechartPopover.css")} */\n`};const tt={jsHeap:"JS heap",documents:"Documents",nodes:"Nodes",listeners:"Listeners",gpuMemory:"GPU memory",ss:"[{PH1} – {PH2}]",noEventsFound:"No memory usage data found within selected events."},it=e.i18n.registerUIStrings("panels/timeline/CountersGraph.ts",tt),nt=e.i18n.getLocalizedString.bind(void 0,it);class rt extends m.Widget.VBox{delegate;calculator;header;toolbar;graphsContainer;canvasContainer;canvas;timelineGrid;counters;counterUI;countersByName;gpuMemoryCounter;#ee=null;currentValuesBar;markerXPosition;#te=this.#ie.bind(this);#ne=document.createElement("div");#re=!1;constructor(t){super(),this.element.id="memory-graphs-container",this.delegate=t,this.calculator=new ot,this.header=new m.Widget.HBox,this.header.element.classList.add("timeline-memory-header"),this.header.show(this.element),this.toolbar=this.header.element.createChild("devtools-toolbar","timeline-memory-toolbar"),this.graphsContainer=new m.Widget.VBox,this.graphsContainer.show(this.element);const n=new m.Widget.VBoxWithResizeCallback(this.resize.bind(this));n.show(this.graphsContainer.element),this.createCurrentValuesBar(),this.canvasContainer=n.element,this.canvasContainer.id="memory-graphs-canvas-container",this.canvas=document.createElement("canvas"),this.canvasContainer.appendChild(this.canvas),this.canvas.id="memory-counters-graph";const r=document.createElement("p");r.innerText=nt(tt.noEventsFound),this.#ne.classList.add("no-events-found"),this.#ne.setAttribute("hidden","hidden"),this.#ne.appendChild(r),this.canvasContainer.appendChild(this.#ne),this.canvasContainer.addEventListener("mouseover",this.onMouseMove.bind(this),!0),this.canvasContainer.addEventListener("mousemove",this.onMouseMove.bind(this),!0),this.canvasContainer.addEventListener("mouseleave",this.onMouseLeave.bind(this),!0),this.canvasContainer.addEventListener("click",this.onClick.bind(this),!0),this.timelineGrid=new i.TimelineGrid.TimelineGrid,this.canvasContainer.appendChild(this.timelineGrid.dividersElement),this.counters=[],this.counterUI=[],this.countersByName=new Map,this.countersByName.set("jsHeapSizeUsed",this.createCounter(nt(tt.jsHeap),"js-heap-size-used","hsl(220, 90%, 43%)",e.ByteUtilities.bytesToString)),this.countersByName.set("documents",this.createCounter(nt(tt.documents),"documents","hsl(0, 90%, 43%)")),this.countersByName.set("nodes",this.createCounter(nt(tt.nodes),"nodes","hsl(120, 90%, 43%)")),this.countersByName.set("jsEventListeners",this.createCounter(nt(tt.listeners),"js-event-listeners","hsl(38, 90%, 43%)")),this.gpuMemoryCounter=this.createCounter(nt(tt.gpuMemory),"gpu-memory-used-kb","hsl(300, 90%, 43%)",e.ByteUtilities.bytesToString),this.countersByName.set("gpuMemoryUsedKB",this.gpuMemoryCounter),a.TraceBounds.onChange(this.#te)}#ie(e){if("RESET"===e.updateType||"VISIBLE_WINDOW"===e.updateType){const t=e.state.milli.timelineTraceWindow;this.calculator.setWindow(t.min,t.max),this.#ae()}}setModel(e,i){if(this.#ee=i,!i||!e)return;const n=t.Helpers.Timing.traceWindowMilliSeconds(e.Meta.traceBounds).min;this.calculator.setZeroTime(n);for(let e=0;e<this.counters.length;++e)this.counters[e].reset(),this.counterUI[e].reset();this.#ae();let r=0;for(let e=0;e<i.length;++e){const n=i[e];if(!t.Types.Events.isUpdateCounters(n))continue;r++;const a=n.args.data;if(!a)return;for(const e in a){const i=this.countersByName.get(e);if(i){const{startTime:r}=t.Helpers.Timing.eventTimingsMilliSeconds(n);i.appendSample(r,a[e])}}void 0!==a.gpuMemoryLimitKB&&this.gpuMemoryCounter.setLimit(a.gpuMemoryLimitKB)}this.#re=0===r}createCurrentValuesBar(){this.currentValuesBar=this.graphsContainer.element.createChild("div"),this.currentValuesBar.id="counter-values-bar"}createCounter(e,t,i,n){const r=new at;return this.counters.push(r),this.counterUI.push(new st(this,e,t,i,r,n)),r}resizerElement(){return this.header.element}resize(){const e=this.canvas.parentElement;this.canvas.width=e.clientWidth*window.devicePixelRatio,this.canvas.height=e.clientHeight*window.devicePixelRatio,this.calculator.setDisplayWidth(this.canvas.width),this.refresh()}#ae(){m.UIUtils.invokeOnceAfterBatchUpdate(this,this.refresh)}draw(){this.clear(),this.#re?this.#ne.removeAttribute("hidden"):this.#ne.setAttribute("hidden","hidden");for(const e of this.counters)e.calculateVisibleIndexes(this.calculator),e.calculateXValues(this.canvas.width);for(const e of this.counterUI)e.drawGraph(this.canvas)}onClick(e){const t=e.x-this.canvasContainer.getBoundingClientRect().left;let i,n=1/0;for(const e of this.counterUI){if(!e.counter.times.length)continue;const r=e.recordIndexAt(t),a=Math.abs(t*window.devicePixelRatio-e.counter.x[r]);a<n&&(n=a,i=e.counter.times[r])}void 0!==i&&this.#ee&&this.delegate.selectEntryAtTime(this.#ee,i)}onMouseLeave(e){delete this.markerXPosition,this.clearCurrentValueAndMarker()}clearCurrentValueAndMarker(){for(let e=0;e<this.counterUI.length;e++)this.counterUI[e].clearCurrentValueAndMarker()}onMouseMove(e){const t=e.x-this.canvasContainer.getBoundingClientRect().left;this.markerXPosition=t,this.refreshCurrentValues()}refreshCurrentValues(){if(void 0!==this.markerXPosition)for(let e=0;e<this.counterUI.length;++e)this.counterUI[e].updateCurrentValue(this.markerXPosition)}refresh(){this.timelineGrid.updateDividers(this.calculator),this.draw(),this.refreshCurrentValues()}clear(){const e=this.canvas.getContext("2d");if(!e)throw new Error("Unable to get canvas context");e.clearRect(0,0,e.canvas.width,e.canvas.height)}}class at{times;values;x;minimumIndex;maximumIndex;maxTime;minTime;limitValue;constructor(){this.times=[],this.values=[],this.x=[],this.minimumIndex=0,this.maximumIndex=0,this.maxTime=0,this.minTime=0}appendSample(e,t){this.values.length&&this.values[this.values.length-1]===t||(this.times.push(e),this.values.push(t))}reset(){this.times=[],this.values=[]}setLimit(e){this.limitValue=e}calculateBounds(){let e,t;for(let i=this.minimumIndex;i<=this.maximumIndex;i++){const n=this.values[i];(void 0===t||n<t)&&(t=n),(void 0===e||n>e)&&(e=n)}return t=t||0,e=e||1,this.limitValue&&(e>.5*this.limitValue&&(e=Math.max(e,this.limitValue)),t=Math.min(t,this.limitValue)),{min:t,max:e}}calculateVisibleIndexes(e){const t=e.minimumBoundary(),i=e.maximumBoundary();this.minimumIndex=r.NumberUtilities.clamp(r.ArrayUtilities.upperBound(this.times,t,r.ArrayUtilities.DEFAULT_COMPARATOR)-1,0,this.times.length-1),this.maximumIndex=r.NumberUtilities.clamp(r.ArrayUtilities.lowerBound(this.times,i,r.ArrayUtilities.DEFAULT_COMPARATOR),0,this.times.length-1),this.minTime=t,this.maxTime=i}calculateXValues(e){if(!this.values.length)return;const t=e/(this.maxTime-this.minTime);this.x=new Array(this.values.length);for(let e=this.minimumIndex+1;e<=this.maximumIndex;e++)this.x[e]=t*(this.times[e]-this.minTime)}}class st{countersPane;counter;formatter;setting;filter;range;value;graphColor;limitColor;graphYValues;verticalPadding;currentValueLabel;marker;constructor(e,t,i,n,a,s){this.countersPane=e,this.counter=a,this.formatter=s||r.NumberUtilities.withThousandsSeparator,this.setting=l.Settings.Settings.instance().createSetting("timeline-counters-graph-"+i,!0),this.setting.setTitle(t),this.filter=new m.Toolbar.ToolbarSettingCheckbox(this.setting,t),this.filter.inputElement.classList.add("-theme-preserve-input");const o=l.Color.parse(n);if(o){const e=o.setAlpha(.5).asString("rgba"),t=this.filter.element;e&&(t.style.backgroundColor=e),t.style.borderColor="transparent"}this.filter.inputElement.addEventListener("click",this.toggleCounterGraph.bind(this)),e.toolbar.appendToolbarItem(this.filter),this.range=this.filter.element.createChild("span","range"),this.value=e.currentValuesBar.createChild("span","memory-counter-value"),this.value.style.color=n,this.graphColor=n,o&&(this.limitColor=o.setAlpha(.3).asString("rgba")),this.graphYValues=[],this.verticalPadding=10,this.currentValueLabel=t,this.marker=e.canvasContainer.createChild("div","memory-counter-marker"),this.marker.style.backgroundColor=n,this.clearCurrentValueAndMarker()}reset(){this.range.textContent=""}setRange(e,t){const i=this.formatter(e),n=this.formatter(t);this.range.textContent=nt(tt.ss,{PH1:i,PH2:n})}toggleCounterGraph(){this.value.classList.toggle("hidden",!this.filter.checked()),this.countersPane.refresh()}recordIndexAt(e){return r.ArrayUtilities.upperBound(this.counter.x,e*window.devicePixelRatio,r.ArrayUtilities.DEFAULT_COMPARATOR,this.counter.minimumIndex+1,this.counter.maximumIndex+1)-1}updateCurrentValue(e){if(!this.visible()||!this.counter.values.length||!this.counter.x)return;const t=this.recordIndexAt(e),i=r.NumberUtilities.withThousandsSeparator(this.counter.values[t]);this.value.textContent=`${this.currentValueLabel}: ${i}`;const n=this.graphYValues[t]/window.devicePixelRatio;this.marker.style.left=e+"px",this.marker.style.top=n+"px",this.marker.classList.remove("hidden")}clearCurrentValueAndMarker(){this.value.textContent="",this.marker.classList.add("hidden")}drawGraph(e){const t=e.getContext("2d");if(!t)throw new Error("Unable to get canvas context");const i=e.width,n=e.height-2*this.verticalPadding;if(n<=0)return void(this.graphYValues=[]);const r=this.verticalPadding,a=this.counter,s=a.values;if(!s.length)return;const o=a.calculateBounds(),l=o.min,d=o.max;if(this.setRange(l,d),!this.visible())return;const c=this.graphYValues,h=d-l,p=h?n/h:1;t.save(),t.lineWidth=window.devicePixelRatio,t.lineWidth%2&&t.translate(.5,.5),t.beginPath();let m=s[a.minimumIndex],u=Math.round(r+n-(m-l)*p);t.moveTo(0,u);let g=a.minimumIndex;for(;g<=a.maximumIndex;g++){const e=Math.round(a.x[g]);t.lineTo(e,u);const i=s[g];void 0!==i&&(m=i),u=Math.round(r+n-(m-l)*p),t.lineTo(e,u),c[g]=u}if(c.length=g,t.lineTo(i,u),t.strokeStyle=this.graphColor,t.stroke(),a.limitValue){const e=Math.round(r+n-(a.limitValue-l)*p);t.moveTo(0,e),t.lineTo(i,e),this.limitColor&&(t.strokeStyle=this.limitColor),t.stroke()}t.closePath(),t.restore()}visible(){return this.filter.checked()}}class ot{minimumBoundaryInternal;maximumBoundaryInternal;workingArea;zeroTimeInternal;constructor(){this.minimumBoundaryInternal=0,this.maximumBoundaryInternal=0,this.workingArea=0,this.zeroTimeInternal=0}setZeroTime(e){this.zeroTimeInternal=e}computePosition(e){return(e-this.minimumBoundaryInternal)/this.boundarySpan()*this.workingArea}setWindow(e,t){this.minimumBoundaryInternal=e,this.maximumBoundaryInternal=t}setDisplayWidth(e){this.workingArea=e}formatValue(t,i){return e.TimeUtilities.preciseMillisToString(t-this.zeroTime(),i)}maximumBoundary(){return this.maximumBoundaryInternal}minimumBoundary(){return this.minimumBoundaryInternal}zeroTime(){return this.zeroTimeInternal}boundarySpan(){return this.maximumBoundaryInternal-this.minimumBoundaryInternal}}var lt=Object.freeze({__proto__:null,Calculator:ot,Counter:at,CounterUI:st,CountersGraph:rt});function dt(e,t){const i=o.TargetManager.TargetManager.instance(),n=e.Workers.workerIdByThread.get(t.tid);return n?i.targetById(n):i.primaryPageTarget()}var ct=Object.freeze({__proto__:null,targetForEvent:dt}),ht={cssText:`.token-variable{color:var(--sys-color-token-variable)}.token-property{color:var(--sys-color-token-property)}.token-type{color:var(--sys-color-token-type)}.token-variable-special{color:var(--sys-color-token-variable-special)}.token-definition{color:var(--sys-color-token-definition)}.token-builtin{color:var(--sys-color-token-builtin)}.token-number{color:var(--sys-color-token-number)}.token-string{color:var(--sys-color-token-string)}.token-string-special{color:var(--sys-color-token-string-special)}.token-atom{color:var(--sys-color-token-atom)}.token-keyword{color:var(--sys-color-token-keyword)}.token-comment{color:var(--sys-color-token-comment)}.token-meta{color:var(--sys-color-token-meta)}.token-invalid{color:var(--sys-color-error)}.token-tag{color:var(--sys-color-token-tag)}.token-attribute{color:var(--sys-color-token-attribute)}.token-attribute-value{color:var(--sys-color-token-attribute-value)}.token-inserted{color:var(--sys-color-token-inserted)}.token-deleted{color:var(--sys-color-token-deleted)}.token-heading{color:var(--sys-color-token-variable-special);font-weight:bold}.token-link{color:var(--sys-color-token-variable-special);text-decoration:underline}.token-strikethrough{text-decoration:line-through}.token-strong{font-weight:bold}.token-emphasis{font-style:italic}\n/*# sourceURL=${import.meta.resolve("./codeHighlighter.css")} */\n`},pt={cssText:`.image-preview-container{background:transparent;text-align:center;border-spacing:0}.image-preview-container img{margin:6px 0;max-width:100px;max-height:100px;background-image:var(--image-file-checker);user-select:text;vertical-align:top;-webkit-user-drag:auto}.image-container{padding:0}.image-container > div{min-height:50px;display:flex;align-items:center;justify-content:center;cursor:pointer}.image-container > div.start{justify-content:start}.image-preview-container .row{line-height:1.2;vertical-align:baseline}.image-preview-container .title{padding-right:0.5em;color:var(--sys-color-token-subtle);white-space:nowrap;&.start{text-align:start}&.center{text-align:end}}.image-preview-container .description{white-space:nowrap;text-align:left;color:var(--sys-color-on-surface)}.image-preview-container .description-link{max-width:20em}.image-preview-container .source-link{white-space:normal;word-break:break-all;color:var(--sys-color-primary);cursor:pointer}\n/*# sourceURL=${import.meta.resolve("./imagePreview.css")} */\n`};let mt=null;class ut{#se=new WeakSet;static instance(e={forceNew:!1}){return mt&&!e.forceNew||(mt=new ut),mt}registerFreshRecording(e){this.#se.add(e)}recordingIsFresh(e){return this.#se.has(e)}}var gt=Object.freeze({__proto__:null,Tracker:ut});let vt=null;class Tt{static instance(e={forceNew:null}){const t=Boolean(e.forceNew);return vt&&!t||(vt=new Tt),vt}static removeInstance(){vt=null}#oe=[];activeFilters(){return this.#oe}setFilters(e){this.#oe=e}isVisible(e){return this.#oe.every((t=>t.accept(e)))}}function yt(e){return{event:e}}function ft(e,i){return{bounds:t.Helpers.Timing.traceWindowFromMilliSeconds(e,i)}}function St(e){return Boolean(e&&"event"in e)}function wt(e){return Boolean(e&&"bounds"in e)}function bt(e){if(wt(e))return e.bounds;if(St(e)){const i=t.Helpers.Timing.eventTimingsMicroSeconds(e.event);return t.Helpers.Timing.traceWindowFromMicroSeconds(i.startTime,i.endTime)}r.assertNever(e,"Unknown selection type")}function Et(e,i){return St(e)&&St(i)?e.event===i.event:!(!wt(e)||!wt(i))&&t.Helpers.Timing.windowsEqual(e.bounds,i.bounds)}var Ct=Object.freeze({__proto__:null,rangeForSelection:bt,selectionFromEvent:yt,selectionFromRangeMicroSeconds:function(e,i){return{bounds:t.Helpers.Timing.traceWindowFromMicroSeconds(e,i)}},selectionFromRangeMilliSeconds:ft,selectionIsEvent:St,selectionIsRange:wt,selectionsEqual:Et});const kt={performance:"Performance",selfTime:"Self time",totalTime:"Total time",activity:"Activity",selectItemForDetails:"Select item for details.",percentPlaceholder:"{PH1} %",chromeExtensionsOverhead:"[`Chrome` extensions overhead]",vRuntime:"[`V8` Runtime]",unattributed:"[unattributed]",page:"Page",noGrouping:"No grouping",groupByActivity:"Group by activity",groupByCategory:"Group by category",groupByDomain:"Group by domain",groupByFrame:"Group by frame",groupBySubdomain:"Group by subdomain",groupByUrl:"Group by URL",groupByThirdParties:"Group by Third Parties",groupBy:"Group by",heaviestStack:"Heaviest stack",showHeaviestStack:"Show heaviest stack",hideHeaviestStack:"Hide heaviest stack",heaviestStackShown:"Heaviest stack sidebar shown",heaviestStackHidden:"Heaviest stack sidebar hidden",timelineStack:"Timeline stack",matchCase:"Match case",useRegularExpression:"Use regular expression",matchWholeWord:"Match whole word",bottomUp:"Bottom-up",viewBottomUp:"View Bottom-up",firstParty:"1st party",extension:"Extension"},It=e.i18n.registerUIStrings("panels/timeline/TimelineTreeView.ts",kt),Mt=e.i18n.getLocalizedString.bind(void 0,It);class xt extends(l.ObjectWrapper.eventMixin(m.Widget.VBox)){#le;searchResults;linkifier;dataGrid;lastHoveredProfileNode;textFilterInternal;taskFilter;startTime;endTime;splitWidget;detailsView;searchableView;currentThreadSetting;lastSelectedNodeInternal;root;currentResult;textFilterUI;caseSensitiveButton;regexButton;matchWholeWord;#t=null;#de=null;#ce=null;eventToTreeNode=new WeakMap;autoSelectFirstChildOnRefresh=!0;constructor(){super(),this.#le=null,this.element.classList.add("timeline-tree-view"),this.searchResults=[]}#he(e){const i=Tn.eventTitle(e)||e.name;return this.#t?i+":@"+t.Handlers.Helpers.getNonResolvedURL(e,this.#t):i}setSearchableView(e){this.searchableView=e}setModelWithEvents(e,t=null,i=null){this.#t=t,this.#le=e,this.#de=i,this.refreshTree()}entityMapper(){return this.#de}parsedTrace(){return this.#t}init(){this.linkifier=new S.Linkifier.Linkifier,this.taskFilter=new t.Extras.TraceFilter.ExclusiveNameFilter(["RunTask"]),this.textFilterInternal=new Pn,this.currentThreadSetting=l.Settings.Settings.instance().createSetting("timeline-tree-current-thread",0),this.currentThreadSetting.addChangeListener(this.refreshTree,this);const e=[];this.populateColumns(e),this.splitWidget=new m.SplitWidget.SplitWidget(!0,!0,"timeline-tree-view-details-split-widget");const i=new m.Widget.VBox,n=i.element.createChild("devtools-toolbar");n.setAttribute("jslog",`${v.toolbar()}`),n.wrappable=!0,this.populateToolbar(n),this.dataGrid=new w.SortableDataGrid.SortableDataGrid({displayName:Mt(kt.performance),columns:e,refreshCallback:void 0,deleteCallback:void 0}),this.dataGrid.addEventListener("SortingChanged",this.sortingChanged,this),this.dataGrid.element.addEventListener("mousemove",this.onMouseMove.bind(this),!0),this.dataGrid.element.addEventListener("mouseleave",(()=>this.dispatchEventToListeners("TreeRowHovered",{node:null}))),this.dataGrid.addEventListener("OpenedNode",this.onGridNodeOpened,this),this.dataGrid.setResizeMethod("last"),this.dataGrid.setRowContextMenuCallback(this.onContextMenu.bind(this)),this.dataGrid.asWidget().show(i.element),this.dataGrid.addEventListener("SelectedNode",this.updateDetailsForSelection,this),this.detailsView=new m.Widget.VBox,this.detailsView.element.classList.add("timeline-details-view","timeline-details-view-body"),this.splitWidget.setMainWidget(i),this.splitWidget.setSidebarWidget(this.detailsView),this.splitWidget.hideSidebar(),this.splitWidget.show(this.element),this.splitWidget.addEventListener("ShowModeChanged",this.onShowModeChanged,this)}lastSelectedNode(){return this.lastSelectedNodeInternal}updateContents(e){const i=bt(e),n=t.Helpers.Timing.traceWindowMicroSecondsToMilliSeconds(i);this.setRange(n.min,n.max)}setRange(e,t){this.startTime=e,this.endTime=t,this.refreshTree()}highlightEventInTree(e){const t=e&&this.dataGridElementForEvent(e);if((!e||t&&t!==this.#ce)&&this.#ce?.style.setProperty("background-color",""),e){const e=t;e&&(this.#ce=e,this.#ce.style.backgroundColor="var(--sys-color-yellow-container)")}}filters(){return[this.taskFilter,this.textFilterInternal,...Tt.instance().activeFilters()]}filtersWithoutTextFilter(){return[this.taskFilter,...Tt.instance().activeFilters()]}textFilter(){return this.textFilterInternal}exposePercentages(){return!1}populateToolbar(e){this.caseSensitiveButton=new m.Toolbar.ToolbarToggle(Mt(kt.matchCase),"match-case",void 0,"match-case"),this.caseSensitiveButton.addEventListener("Click",(()=>{this.#pe()}),this),e.appendToolbarItem(this.caseSensitiveButton),this.regexButton=new m.Toolbar.ToolbarToggle(Mt(kt.useRegularExpression),"regular-expression",void 0,"regular-expression"),this.regexButton.addEventListener("Click",(()=>{this.#pe()}),this),e.appendToolbarItem(this.regexButton),this.matchWholeWord=new m.Toolbar.ToolbarToggle(Mt(kt.matchWholeWord),"match-whole-word",void 0,"match-whole-word"),this.matchWholeWord.addEventListener("Click",(()=>{this.#pe()}),this),e.appendToolbarItem(this.matchWholeWord);const t=new m.Toolbar.ToolbarFilter;this.textFilterUI=t,t.addEventListener("TextChanged",this.#pe,this),e.appendToolbarItem(t)}selectedEvents(){return this.#le||[]}appendContextMenuItems(e,t){}selectProfileNode(e,t){const i=[];let n=e;for(;n;n=n.parent)i.push(n);for(let e=i.length-1;e>0;--e){const t=this.dataGridNodeForTreeNode(i[e]);t?.dataGrid&&t.expand()}const r=this.dataGridNodeForTreeNode(e);r?.dataGrid&&(r.reveal(),r.select(t))}refreshTree(){if(!this.element.parentElement)return;if(this.linkifier.reset(),this.dataGrid.rootNode().removeChildren(),!this.#t)return void this.updateDetailsForSelection();this.root=this.buildTree();const e=this.root.children();let t=0,i=0;const n=this.root.totalTime-this.root.selfTime;for(const n of e.values())t=Math.max(t,n.selfTime),i=Math.max(i,n.totalTime);for(const r of e.values()){const e=new Rt(r,n,t,i,this);for(const e of r.events)this.eventToTreeNode.set(e,r);this.dataGrid.insertChild(e)}this.sortingChanged(),this.updateDetailsForSelection(),this.searchableView&&this.searchableView.refreshSearch();const r=this.dataGrid.rootNode();this.autoSelectFirstChildOnRefresh&&r.children.length>0&&r.children[0].select(!0)}buildTree(){throw new Error("Not Implemented")}buildTopDownTree(e,i){return new t.Extras.TraceTree.TopDownRootNode(this.selectedEvents(),{filters:this.filters(),startTime:this.startTime,endTime:this.endTime,doNotAggregate:e,eventGroupIdCallback:i})}populateColumns(e){e.push({id:"self",title:Mt(kt.selfTime),width:"120px",fixedWidth:!0,sortable:!0}),e.push({id:"total",title:Mt(kt.totalTime),width:"120px",fixedWidth:!0,sortable:!0}),e.push({id:"activity",title:Mt(kt.activity),disclosure:!0,sortable:!0})}sortingChanged(){const e=this.dataGrid.sortColumnId();if(!e)return;const t=this.getSortingFunction(e);t&&this.dataGrid.sortNodes(t,!this.dataGrid.isSortOrderAscending())}getSortingFunction(e){const t=(e,t)=>{const i=t,n=e.profileNode.event,r=i.profileNode.event;if(!n||!r)return 0;const a=this.#he(n),s=this.#he(r);return a.localeCompare(s)};switch(e){case"start-time":return function(e,t){const i=t,n=e.profileNode.event,r=i.profileNode.event;if(!n||!r)return 0;return n.ts-r.ts};case"self":return function(e,t){const i=t;return e.profileNode.selfTime-i.profileNode.selfTime};case"total":return function(e,t){const i=t;return e.profileNode.totalTime-i.profileNode.totalTime};case"activity":case"site":return t;default:return console.assert(!1,"Unknown sort field: "+e),null}}#pe(){const e=this.textFilterUI?.value(),t=this.caseSensitiveButton?.isToggled()??!1,i=this.regexButton?.isToggled()??!1,n=this.matchWholeWord?.isToggled()??!1;this.textFilterInternal.setRegExp(e?r.StringUtilities.createSearchRegex(e,t,i,n):null),this.refreshTree()}onShowModeChanged(){"OnlyMain"!==this.splitWidget.showMode()&&(this.lastSelectedNodeInternal=void 0,this.updateDetailsForSelection())}updateDetailsForSelection(){const e=this.dataGrid.selectedNode?this.dataGrid.selectedNode.profileNode:null;if(e===this.lastSelectedNodeInternal)return;if("OnlyMain"===this.splitWidget.showMode())return;if(this.detailsView.detachChildWidgets(),this.detailsView.element.removeChildren(),this.lastSelectedNodeInternal=e,e&&this.showDetailsForNode(e))return;const t=this.detailsView.element.createChild("div","full-widget-dimmed-banner");m.UIUtils.createTextChild(t,Mt(kt.selectItemForDetails))}showDetailsForNode(e){return!1}onMouseMove(e){const t=e.target&&e.target instanceof Node?this.dataGrid.dataGridNodeFromNode(e.target):null,i=t?.profileNode;i!==this.lastHoveredProfileNode&&(this.lastHoveredProfileNode=i,this.onHover(i))}onHover(e){this.dispatchEventToListeners("TreeRowHovered",{node:e})}onClick(e){this.dispatchEventToListeners("TreeRowClicked",{node:e})}wasShown(){this.dataGrid.addEventListener("SelectedNode",this.#me,this)}childWasDetached(e){this.dataGrid.removeEventListener("SelectedNode",this.#me)}#me(e){this.onClick(e.data.profileNode),this.onHover(e.data.profileNode)}onGridNodeOpened(){const e=this.dataGrid.selectedNode;this.onHover(e.profileNode),this.updateDetailsForSelection()}onContextMenu(e,t){const i=t;i.linkElement&&e.appendApplicableItems(i.linkElement);const n=i.profileNode;n&&this.appendContextMenuItems(e,n)}dataGridElementForEvent(e){if(!e)return null;const t=this.eventToTreeNode.get(e);return(t&&this.dataGridNodeForTreeNode(t)?.element())??null}dataGridNodeForTreeNode(e){return Ft.get(e)||null}onSearchCanceled(){this.searchResults=[],this.currentResult=0}performSearch(e,t,i){if(this.searchResults=[],this.currentResult=0,!this.root)return;const n=e.toSearchRegex();this.searchResults=this.root.searchTree((e=>Tn.testContentMatching(e,n.regex,this.#t||void 0))),this.searchableView.updateSearchMatchesCount(this.searchResults.length)}jumpToNextSearchResult(){this.searchResults.length&&void 0!==this.currentResult&&(this.selectProfileNode(this.searchResults[this.currentResult],!1),this.currentResult=r.NumberUtilities.mod(this.currentResult+1,this.searchResults.length))}jumpToPreviousSearchResult(){this.searchResults.length&&void 0!==this.currentResult&&(this.selectProfileNode(this.searchResults[this.currentResult],!1),this.currentResult=r.NumberUtilities.mod(this.currentResult-1,this.searchResults.length))}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!0}}class Pt extends w.SortableDataGrid.SortableDataGridNode{populated;profileNode;treeView;grandTotalTime;maxSelfTime;maxTotalTime;linkElement;constructor(e,t,i,n,r){super(null,!1),this.populated=!1,this.profileNode=e,this.treeView=r,this.grandTotalTime=t,this.maxSelfTime=i,this.maxTotalTime=n,this.linkElement=null}createCell(e){return"activity"===e||"site"===e?this.createNameCell(e):this.createValueCell(e)||super.createCell(e)}createNameCell(e){const i=this.createTD(e),n=i.createChild("div","name-container"),r=n.createChild("div","activity-icon-container"),a=r.createChild("div","activity-icon"),s=n.createChild("div","activity-name"),o=this.profileNode.event;if(this.profileNode.isGroupNode()){const t=this.treeView.displayInfoForGroupNode(this.profileNode);if(s.textContent=t.name,a.style.backgroundColor=t.color,t.icon&&r.insertBefore(t.icon,a),"site"===e&&this.treeView instanceof _t){const e=this.treeView;let t="";if(e.nodeIsFirstParty(this.profileNode)?t=Mt(kt.firstParty):e.nodeIsExtension(this.profileNode)&&(t=Mt(kt.extension)),t){const e=n.createChild("div","entity-badge");e.textContent=t,m.ARIAUtils.setLabel(e,t)}}}else if(o){s.textContent=Tn.eventTitle(o);const e=this.treeView.parsedTrace(),i=e?dt(e,o):null,r=this.treeView.linkifier,l=Boolean(e&&ut.instance().recordingIsFresh(e));this.linkElement=Tn.linkifyTopCallFrame(o,i,r,l),this.linkElement&&n.createChild("div","activity-link").appendChild(this.linkElement),m.ARIAUtils.setLabel(a,Tn.eventStyle(o).category.title),a.style.backgroundColor=Tn.eventColor(o),t.Types.Extensions.isSyntheticExtensionEntry(o)&&(a.style.backgroundColor=h.ExtensionUI.extensionEntryColor(o))}return i}createValueCell(i){if("self"!==i&&"total"!==i&&"start-time"!==i&&"transfer-size"!==i)return null;let n,r,a,s=!1,o=!1,l=!1;const d=this.treeView;switch(i){case"start-time":{a=this.profileNode.event;const e=this.treeView.parsedTrace();if(!e)throw new Error("Unable to load trace data for tree view");const i=a&&t.Helpers.Timing.eventTimingsMilliSeconds(a);n=(i?.startTime??0)-t.Helpers.Timing.microToMilli(e.Meta.traceBounds.min)}break;case"self":n=this.profileNode.selfTime,r=this.maxSelfTime,s=!0,l=d instanceof _t;break;case"total":n=this.profileNode.totalTime,r=this.maxTotalTime,s=!0;break;case"transfer-size":n=this.profileNode.transferSize,o=!0;break;default:return null}const c=this.createTD(i);let h;return c.className="numeric-column",o?(c.setAttribute("title",e.ByteUtilities.formatBytesToKb(n)),h=c.createChild("div"),h.createChild("span").textContent=e.ByteUtilities.formatBytesToKb(n)):(c.setAttribute("title",e.TimeUtilities.preciseMillisToString(n,4)),h=c.createChild("div"),h.createChild("span").textContent=e.TimeUtilities.preciseMillisToString(n,1)),s&&this.treeView.exposePercentages()&&(h.createChild("span","percent-column").textContent=Mt(kt.percentPlaceholder,{PH1:(n/this.grandTotalTime*100).toFixed(1)})),r&&(h.classList.add("background-bar-text"),c.createChild("div","background-bar-container").createChild("div","background-bar").style.width=(100*n/r).toFixed(1)+"%"),l&&this.generateBottomUpButton(h),c}generateBottomUpButton(e){const t=new E.Button.Button;t.data={variant:"icon",iconName:"account-tree",size:"SMALL",toggledIconName:Mt(kt.bottomUp)},m.ARIAUtils.setLabel(t,Mt(kt.viewBottomUp)),t.addEventListener("click",(()=>this.#ue())),m.Tooltip.Tooltip.install(t,Mt(kt.bottomUp)),e.appendChild(t)}#ue(){this.treeView.dispatchEventToListeners("TreeRowHovered",{node:null}),this.treeView.dispatchEventToListeners("BottomUpButtonClicked",this.profileNode)}}class Rt extends Pt{constructor(e,t,i,n,r){super(e,t,i,n,r),this.setHasChildren(this.profileNode.hasChildren()),Ft.set(e,this)}populate(){if(!this.populated&&(this.populated=!0,this.profileNode.children))for(const e of this.profileNode.children().values()){const t=new Rt(e,this.grandTotalTime,this.maxSelfTime,this.maxTotalTime,this.treeView);for(const t of e.events)this.treeView.eventToTreeNode.set(t,e);this.insertChildOrdered(t)}}}const Ft=new WeakMap;class Lt extends xt{groupBySetting;stackView;constructor(){super(),this.groupBySetting=l.Settings.Settings.instance().createSetting("timeline-tree-group-by",Lt.GroupBy.None),this.groupBySetting.addChangeListener(this.refreshTree.bind(this)),this.init(),this.stackView=new Dt(this),this.stackView.addEventListener("SelectionChanged",this.onStackViewSelectionChanged,this)}setGroupBySetting(e){this.groupBySetting.set(e)}updateContents(e){super.updateContents(e);const t=this.dataGrid.rootNode();t.children.length&&t.children[0].select(!0),this.updateDetailsForSelection()}beautifyDomainName(e,t){return Lt.isExtensionInternalURL(e)?e=Mt(kt.chromeExtensionsOverhead):Lt.isV8NativeURL(e)?e=Mt(kt.vRuntime):e.startsWith("chrome-extension")&&(e=this.entityMapper()?.entityForEvent(t.event)?.name||e),e}displayInfoForGroupNode(e){const t=s.EntryStyles.getCategoryStyles(),i=Tn.eventColor(e.event),n=Mt(kt.unattributed),r="symbol"==typeof e.id?void 0:e.id;switch(this.groupBySetting.get()){case Lt.GroupBy.Category:{const e=r&&s.EntryStyles.stringIsEventCategory(r)?t[r]||t.other:{title:n,color:n};return{name:e.title,color:e.color,icon:void 0}}case Lt.GroupBy.Domain:case Lt.GroupBy.Subdomain:case Lt.GroupBy.ThirdParties:return{name:(r?this.beautifyDomainName(r,e):void 0)||n,color:i,icon:void 0};case Lt.GroupBy.EventName:if(!e.event)throw new Error("Unable to find event for group by operation");return{name:Tn.eventTitle(e.event),color:i,icon:void 0};case Lt.GroupBy.URL:break;case Lt.GroupBy.Frame:{const e=r?this.parsedTrace()?.PageFrames.frames.get(r):void 0;return{name:e?Tn.displayNameForFrame(e):Mt(kt.page),color:i,icon:void 0}}default:console.assert(!1,"Unexpected grouping type")}return{name:r||n,color:i,icon:void 0}}populateToolbar(e){super.populateToolbar(e);const t=Lt.GroupBy,i=[{label:Mt(kt.noGrouping),value:t.None},{label:Mt(kt.groupByActivity),value:t.EventName},{label:Mt(kt.groupByCategory),value:t.Category},{label:Mt(kt.groupByDomain),value:t.Domain},{label:Mt(kt.groupByFrame),value:t.Frame},{label:Mt(kt.groupBySubdomain),value:t.Subdomain},{label:Mt(kt.groupByUrl),value:t.URL},{label:Mt(kt.groupByThirdParties),value:t.ThirdParties}];e.appendToolbarItem(new m.Toolbar.ToolbarSettingComboBox(i,this.groupBySetting,Mt(kt.groupBy))),e.appendSpacer(),e.appendToolbarItem(this.splitWidget.createShowHideSidebarButton(Mt(kt.showHeaviestStack),Mt(kt.hideHeaviestStack),Mt(kt.heaviestStackShown),Mt(kt.heaviestStackHidden)))}buildHeaviestStack(e){console.assert(Boolean(e.parent),"Attempt to build stack for tree root");let t=[];for(let i=e;i?.parent;i=i.parent)t.push(i);t=t.reverse();for(let i=e;i?.children()?.size;){const e=Array.from(i.children().values());i=e.reduce(((e,t)=>e.totalTime>t.totalTime?e:t)),t.push(i)}return t}exposePercentages(){return!0}onStackViewSelectionChanged(){const e=this.stackView.selectedTreeNode();e&&this.selectProfileNode(e,!0)}showDetailsForNode(e){const t=this.buildHeaviestStack(e);return this.stackView.setStack(t,e),this.stackView.show(this.detailsView.element),!0}groupingFunction(e){const i=Lt.GroupBy;switch(e){case i.None:return null;case i.EventName:return e=>Tn.eventStyle(e).title;case i.Category:return e=>Tn.eventStyle(e).category.name;case i.Subdomain:case i.Domain:case i.ThirdParties:return this.domainByEvent.bind(this,e);case i.URL:return e=>{const i=this.parsedTrace();return i?t.Handlers.Helpers.getNonResolvedURL(e,i)??"":""};case i.Frame:return e=>t.Helpers.Trace.frameIDForEvent(e)||this.parsedTrace()?.Meta.mainFrameId||"";default:return console.assert(!1,`Unexpected aggregation setting: ${e}`),null}}domainByEvent(e,i){const n=this.parsedTrace();if(!n)return"";const r=t.Handlers.Helpers.getNonResolvedURL(i,n);if(!r){const t=this.entityMapper()?.entityForEvent(i);if(e===Lt.GroupBy.ThirdParties&&t){if(!t)return"";const e=t.domains[0],i=l.ParsedURL.ParsedURL.fromString(e);return"chrome-extension"===i?.scheme?`${i.scheme}://${i.host}`:t.name}return""}if(Lt.isExtensionInternalURL(r))return Lt.extensionInternalPrefix;if(Lt.isV8NativeURL(r))return Lt.v8NativePrefix;const a=l.ParsedURL.ParsedURL.fromString(r);if(!a)return"";if("chrome-extension"===a.scheme)return a.scheme+"://"+a.host;if(e===Lt.GroupBy.ThirdParties){const e=this.entityMapper()?.entityForEvent(i);return e?e.name:""}if(e===Lt.GroupBy.Subdomain)return a.host;if(/^[.0-9]+$/.test(a.host))return a.host;const s=/([^.]*\.)?[^.]*$/.exec(a.host);return s?.[0]||""}static isExtensionInternalURL(e){return e.startsWith(Lt.extensionInternalPrefix)}static isV8NativeURL(e){return e.startsWith(Lt.v8NativePrefix)}static extensionInternalPrefix="extensions::";static v8NativePrefix="native ";onHover(e){if(null===e||this.groupBySetting.get()!==Lt.GroupBy.ThirdParties)this.dispatchEventToListeners("TreeRowHovered",{node:e});else{const t=this.#ge(e);this.dispatchEventToListeners("TreeRowHovered",{node:e,events:t})}}onClick(e){if(null===e||this.groupBySetting.get()!==Lt.GroupBy.ThirdParties)this.dispatchEventToListeners("TreeRowClicked",{node:e});else{const t=this.#ge(e);this.dispatchEventToListeners("TreeRowClicked",{node:e,events:t})}}#ge(e){if(!e.event)return;const t=this.entityMapper()?.entityForEvent(e.event);if(!t)return e.events;const i=this.entityMapper()?.eventsForEntity(t);return i}}!function(e){let t;!function(e){e.None="None",e.EventName="EventName",e.Category="Category",e.Domain="Domain",e.Subdomain="Subdomain",e.URL="URL",e.Frame="Frame",e.ThirdParties="ThirdParties"}(t=e.GroupBy||(e.GroupBy={}))}(Lt||(Lt={}));class At extends Lt{constructor(){super(),this.element.setAttribute("jslog",`${v.pane("call-tree").track({resize:!0})}`),this.dataGrid.markColumnAsSortedBy("total",w.DataGrid.Order.Descending)}buildTree(){const e=this.groupBySetting.get();return this.buildTopDownTree(!1,this.groupingFunction(e))}}class Nt extends Lt{constructor(){super(),this.element.setAttribute("jslog",`${v.pane("bottom-up").track({resize:!0})}`),this.dataGrid.markColumnAsSortedBy("self",w.DataGrid.Order.Descending)}buildTree(){return new t.Extras.TraceTree.BottomUpRootNode(this.selectedEvents(),{textFilter:this.textFilter(),filters:this.filtersWithoutTextFilter(),startTime:this.startTime,endTime:this.endTime,eventGroupIdCallback:this.groupingFunction(this.groupBySetting.get()),calculateTransferSize:!0,forceGroupIdCallback:this.groupBySetting.get()===Lt.GroupBy.ThirdParties})}}class Dt extends(l.ObjectWrapper.eventMixin(m.Widget.VBox)){treeView;dataGrid;constructor(e){super();this.element.createChild("div","timeline-stack-view-header").textContent=Mt(kt.heaviestStack),this.treeView=e;const t=[{id:"total",title:Mt(kt.totalTime),fixedWidth:!0,width:"110px"},{id:"activity",title:Mt(kt.activity)}];this.dataGrid=new w.ViewportDataGrid.ViewportDataGrid({displayName:Mt(kt.timelineStack),columns:t,deleteCallback:void 0,refreshCallback:void 0}),this.dataGrid.setResizeMethod("last"),this.dataGrid.addEventListener("SelectedNode",this.onSelectionChanged,this),this.dataGrid.element.addEventListener("mouseenter",this.onMouseMove.bind(this),!0),this.dataGrid.element.addEventListener("mouseleave",(()=>this.dispatchEventToListeners("TreeRowHovered",null))),this.dataGrid.asWidget().show(this.element)}setStack(e,t){const i=this.dataGrid.rootNode();i.removeChildren();let n=null;const r=Math.max.apply(Math,e.map((e=>e.totalTime)));for(const a of e){const e=new Pt(a,r,r,r,this.treeView);i.appendChild(e),a===t&&(n=e)}n&&n.revealAndSelect()}onMouseMove(e){const t=e.target&&e.target instanceof Node?this.dataGrid.dataGridNodeFromNode(e.target):null,i=t?.profileNode;this.dispatchEventToListeners("TreeRowHovered",i)}selectedTreeNode(){const e=this.dataGrid.selectedNode;return e&&e.profileNode}onSelectionChanged(){this.dispatchEventToListeners("SelectionChanged")}}var Bt=Object.freeze({__proto__:null,get AggregatedTimelineTreeView(){return Lt},BottomUpTimelineTreeView:Nt,CallTreeTimelineTreeView:At,GridNode:Pt,TimelineStackView:Dt,TimelineTreeView:xt,TreeGridNode:Rt});const Ht={unattributed:"[unattributed]",firstOrThirdPartyName:"1st / 3rd party",transferSize:"Transfer size",mainThreadTime:"Main thread time"},Ut=e.i18n.registerUIStrings("panels/timeline/ThirdPartyTreeView.ts",Ht),Ot=e.i18n.getLocalizedString.bind(void 0,Ut);class _t extends xt{#ve=null;autoSelectFirstChildOnRefresh=!1;constructor(){super(),this.element.setAttribute("jslog",`${v.pane("third-party-tree").track({hover:!0})}`),this.init(),this.dataGrid.markColumnAsSortedBy("self",w.DataGrid.Order.Descending),this.dataGrid.setResizeMethod("nearest"),this.dataGrid.expandNodesWhenArrowing=!1}buildTree(){const e=this.parsedTrace(),i=this.entityMapper();if(!e||!i)return new t.Extras.TraceTree.BottomUpRootNode([],{textFilter:this.textFilter(),filters:this.filtersWithoutTextFilter(),startTime:this.startTime,endTime:this.endTime,eventGroupIdCallback:this.groupingFunction.bind(this)});const n=this.selectedEvents().sort(t.Helpers.Trace.eventTimeComparator),r=new t.Extras.TraceFilter.VisibleEventsFilter(s.EntryStyles.visibleTypes().concat(["SyntheticNetworkRequest"]));return new t.Extras.TraceTree.BottomUpRootNode(n,{textFilter:this.textFilter(),filters:[r],startTime:this.startTime,endTime:this.endTime,eventGroupIdCallback:this.groupingFunction.bind(this),calculateTransferSize:!0,forceGroupIdCallback:!0})}selectProfileNode(){}groupingFunction(e){const t=this.entityMapper()?.entityForEvent(e);return t?t.name:""}populateColumns(e){e.push({id:"site",title:Ot(Ht.firstOrThirdPartyName),width:"345px",sortable:!0},{id:"transfer-size",title:Ot(Ht.transferSize),width:"100px",fixedWidth:!0,sortable:!0},{id:"self",title:Ot(Ht.mainThreadTime),width:"120px",fixedWidth:!0,sortable:!0})}populateToolbar(){}compareTransferSize(e,t){const i=t;return(e.profileNode.transferSize??0)-(i.profileNode.transferSize??0)}sortingChanged(){const e=this.dataGrid.sortColumnId();if(!e)return;let t;if("transfer-size"===e)t=this.compareTransferSize.bind(this);else t=super.getSortingFunction(e);t&&this.dataGrid.sortNodes(t,!this.dataGrid.isSortOrderAscending())}onHover(e){if(!e)return void this.dispatchEventToListeners("TreeRowHovered",{node:null});this.#Te(e);const t=this.#Te(e);this.dispatchEventToListeners("TreeRowHovered",{node:e,events:t&&t.length>0?t:void 0})}onClick(e){if(!e)return void this.dispatchEventToListeners("TreeRowClicked",{node:null});const t=this.#Te(e);this.dispatchEventToListeners("TreeRowClicked",{node:e,events:t&&t.length>0?t:void 0})}#Te(e){const t=this.entityMapper();if(!t)return null;const i=t.entityForEvent(e.event);return i?t.eventsForEntity(i)??[]:[]}displayInfoForGroupNode(e){const t=Ot(Ht.unattributed),i="symbol"==typeof e.id?void 0:e.id;return{name:(i?this.entityMapper()?.entityForEvent(e.event)?.name||i:void 0)||t,color:"gray",icon:void 0}}extractThirdPartySummary(e){if(!this.#ve)return{transferSize:0};const t=this.#ve.entityByEvent.get(e.event);if(!t)return{transferSize:0};const i=this.#ve.summaries.byEntity.get(t);return i?{transferSize:i.transferSize}:{transferSize:0}}nodeIsFirstParty(e){const t=this.entityMapper();if(!t)return!1;return t.firstPartyEntity()===t.entityForEvent(e.event)}nodeIsExtension(e){const t=this.entityMapper();if(!t)return!1;const i=t.entityForEvent(e.event);return Boolean(i)&&"Chrome Extension"===i?.category}}class Wt extends m.Widget.WidgetElement{#ye;set treeView(e){this.#ye=e}constructor(){super(),this.style.display="contents"}createWidget(){const e=new m.Widget.Widget(!1,void 0,this);return e.contentElement.style.display="contents",this.#ye&&this.#ye.show(e.contentElement),e}}customElements.define("devtools-performance-third-party-tree-view",Wt);var Vt=Object.freeze({__proto__:null,ThirdPartyTreeElement:Wt,ThirdPartyTreeViewWidget:_t});const Gt={empty:"(empty)",selectJavascriptVmInstance:"Select JavaScript VM instance"},zt=e.i18n.registerUIStrings("panels/timeline/IsolateSelector.ts",Gt),jt=e.i18n.getLocalizedString.bind(void 0,zt);class $t extends m.Toolbar.ToolbarItem{menu;options;items;itemByIsolate=new Map;constructor(){const e=new R.SelectMenu.SelectMenu;super(e),this.menu=e,e.buttonTitle=jt(Gt.selectJavascriptVmInstance),e.showArrow=!0,e.style.whiteSpace="normal",e.addEventListener("selectmenuselected",this.#fe.bind(this)),o.IsolateManager.IsolateManager.instance().observeIsolates(this),o.TargetManager.TargetManager.instance().addEventListener("NameChanged",this.targetChanged,this),o.TargetManager.TargetManager.instance().addEventListener("InspectedURLChanged",this.targetChanged,this)}#Se(e,t){const i=new Map;for(const t of e.models()){const e=t.target(),n=o.TargetManager.TargetManager.instance().rootTarget()!==e?e.name():"",r=new l.ParsedURL.ParsedURL(e.inspectedURL()),a=r.isValid?r.domain():"",s=e.decorateLabel(a&&n?`${a}: ${n}`:n||a||jt(Gt.empty));i.set(s,(i.get(s)||0)+1)}t.removeChildren();for(const[e,n]of i){const i=n>1?`${e} (${n})`:e;t.createChild("div").textContent=i}}#fe(e){this.itemByIsolate.forEach(((t,i)=>{if(t.selected=t.value===e.itemValue,t.selected){const e=t.textContent?.slice(0,29);this.menu.buttonTitle=e||jt(Gt.empty);const n=i.runtimeModel();m.Context.Context.instance().setFlavor(o.CPUProfilerModel.CPUProfilerModel,n?.target().model(o.CPUProfilerModel.CPUProfilerModel)??null)}}))}isolateAdded(e){const t=new R.Menu.MenuItem;this.menu.appendChild(t),t.value=e.id(),this.itemByIsolate.set(e,t),this.#Se(e,t)}isolateRemoved(e){const t=this.itemByIsolate.get(e);t&&(t.selected&&(this.menu.buttonTitle=jt(Gt.selectJavascriptVmInstance),m.Context.Context.instance().setFlavor(o.CPUProfilerModel.CPUProfilerModel,null)),this.menu.removeChild(t))}isolateChanged(e){const t=this.itemByIsolate.get(e);t&&this.#Se(e,t)}targetChanged(e){const t=e.data.model(o.RuntimeModel.RuntimeModel);if(!t)return;const i=o.IsolateManager.IsolateManager.instance().isolateByModel(t);i&&this.isolateChanged(i)}}const Kt={learnmore:"Learn more",wasd:"WASD",clickTheRecordButtonSOrHitSTo:"Click the record button {PH1} or hit {PH2} to start a new recording.",afterRecordingSelectAnAreaOf:"After recording, select an area of interest in the overview by dragging. Then, zoom and pan the timeline with the mousewheel or {PH1} keys. {PH2}"},qt=e.i18n.registerUIStrings("panels/timeline/ReactNativeTimelineLandingPage.ts",Kt),Yt=e.i18n.getLocalizedString.bind(void 0,qt);class Jt extends m.Widget.VBox{toggleRecordAction;constructor(e){super(),this.toggleRecordAction=e,this.contentElement.classList.add("timeline-landing-page","fill"),this.renderLegacyLandingPage()}renderLegacyLandingPage(){function t(e,t){const i=document.createElement(e);return i.textContent=t,i}const i=m.XLink.XLink.create("https://developer.chrome.com/docs/devtools/evaluate-performance/",Yt(Kt.learnmore),void 0,void 0,"learn-more"),n=t("b",m.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction("timeline.toggle-recording")[0].title()),r=t("b",Yt(Kt.wasd));this.contentElement.classList.add("legacy");const a=this.contentElement.createChild("div"),s=m.UIUtils.createInlineButton(m.Toolbar.Toolbar.createActionButton(this.toggleRecordAction));a.createChild("p").appendChild(e.i18n.getFormatLocalizedString(qt,Kt.clickTheRecordButtonSOrHitSTo,{PH1:s,PH2:n})),a.createChild("p").appendChild(e.i18n.getFormatLocalizedString(qt,Kt.afterRecordingSelectAnAreaOf,{PH1:r,PH2:i}))}}function*Xt(e){if(yield"[\n",e.length>0){const t=e[Symbol.iterator](),i=t.next().value;yield` ${JSON.stringify(i)}`;let n=1e4,r="";for(const e of t)r+=`,\n ${JSON.stringify(e)}`,n--,0===n&&(yield r,n=1e4,r="");yield r}yield"\n]"}function*Zt(e,t){t?.enhancedTraceVersion&&(t={enhancedTraceVersion:t.enhancedTraceVersion,...t}),yield`{"metadata": ${JSON.stringify(t||{},null,2)}`,yield',\n"traceEvents": ',yield*Xt(e),yield"}\n"}function Qt(e){return JSON.stringify(e)}var ei=Object.freeze({__proto__:null,arrayOfObjectsJsonGenerator:Xt,cpuprofileJsonGenerator:Qt,traceJsonGenerator:Zt});const ti={tracingNotSupported:"Performance trace recording not supported for this type of target"},ii=e.i18n.registerUIStrings("panels/timeline/TimelineController.ts",ti),ni=e.i18n.getLocalizedString.bind(void 0,ii);class ri{primaryPageTarget;rootTarget;tracingManager;#we=[];#be=[];#Ee=null;#Ce=null;client;tracingCompletePromise=null;constructor(e,i,n){this.primaryPageTarget=i,this.rootTarget=e,this.tracingManager=e.model(t.TracingManager.TracingManager),this.client=n}async dispose(){this.tracingManager&&await this.tracingManager.reset()}async startRecording(e){function i(e){return"disabled-by-default-"+e}const n=[d.Runtime.experiments.isEnabled("timeline-show-all-events")?"*":"-*",t.Types.Events.Categories.Console,t.Types.Events.Categories.Loading,t.Types.Events.Categories.UserTiming,"devtools.timeline",i("devtools.target-rundown"),i("devtools.timeline.frame"),i("devtools.timeline.stack"),i("devtools.timeline"),i("devtools.v8-source-rundown"),i("v8.compile"),i("v8.inspector"),i("v8.cpu_profiler.hires"),i("lighthouse"),"v8.execute","v8","cppgc","navigation,rail"];d.Runtime.experiments.isEnabled("timeline-compiled-sources")&&n.push(i("devtools.v8-source-rundown-sources")),d.Runtime.experiments.isEnabled("timeline-v8-runtime-call-stats")&&e.enableJSSampling&&n.push(i("v8.runtime_stats_sampling")),e.enableJSSampling&&n.push(i("v8.cpu_profiler")),d.Runtime.experiments.isEnabled("timeline-invalidation-tracking")&&n.push(i("devtools.timeline.invalidationTracking")),e.capturePictures&&n.push(i("devtools.timeline.layers"),i("devtools.timeline.picture"),i("blink.graphics_context_annotations")),e.captureFilmStrip&&n.push(i("devtools.screenshot")),e.captureSelectorStats&&n.push(i("blink.debug")),await A.LiveMetrics.instance().disable(),o.TargetManager.TargetManager.instance().addModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.FrameNavigated,this.#ke,this),this.#be=[],this.#Ee=null,this.#Ce=Date.now();const r=await this.startRecordingWithCategories(n.join(","));return r.getError()&&await o.TargetManager.TargetManager.instance().resumeAllTargets(),r}async#ke(e){e.data.isPrimaryFrame()&&this.#be.push(e.data.url)}async stopRecording(){this.tracingManager&&this.tracingManager.stop(),o.TargetManager.TargetManager.instance().removeModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.FrameNavigated,this.#ke,this);const e=o.CPUThrottlingManager.CPUThrottlingManager.instance(),t=e.cpuThrottlingOption();e.setCPUThrottlingOption(o.CPUThrottlingManager.NoThrottlingOption),this.client.loadingStarted(),o.SourceMap.SourceMap.retainRawSourceMaps=!0;const[i]=await Promise.all([this.fetchFieldData(),o.TargetManager.TargetManager.instance().resumeAllTargets(),this.waitForTracingToStop()]).catch((e=>{throw o.SourceMap.SourceMap.retainRawSourceMaps=!1,e}));this.#Ee=i,e.setCPUThrottlingOption(t),await this.allSourcesFinished(),await A.LiveMetrics.instance().enable()}async rnPrepareForTraceCapturedInBackground(){this.tracingManager&&this.tracingManager.rnPrepareForTraceCapturedInBackground(this),await A.LiveMetrics.instance().disable(),this.client.loadingStarted(),await this.allSourcesFinished(),await A.LiveMetrics.instance().enable()}async fetchFieldData(){const e=g.CrUXManager.instance();if(!e.isEnabled()||!navigator.onLine)return null;const t=[...new Set(this.#be)];return await Promise.all(t.map((t=>e.getFieldDataForPage(t))))}async createMetadata(){const e=F.DeviceModeModel.DeviceModeModel.tryInstance();let i;return e?.type()===F.DeviceModeModel.Type.Device?i=e.device()?.title??void 0:e?.type()===F.DeviceModeModel.Type.Responsive&&(i="Responsive"),await t.Extras.Metadata.forNewRecording(!1,this.#Ce??void 0,i,this.#Ee??void 0)}async waitForTracingToStop(){this.tracingManager&&await(this.tracingCompletePromise?.promise)}async startRecordingWithCategories(e){if(!this.tracingManager)throw new Error(ni(ti.tracingNotSupported));await o.TargetManager.TargetManager.instance().suspendAllTargets("performance-timeline"),this.tracingCompletePromise=Promise.withResolvers();const t=await this.tracingManager.start(this,e,"");return await this.warmupJsProfiler(),L.ExtensionServer.ExtensionServer.instance().profilingStarted(),t}async warmupJsProfiler(){const e=this.primaryPageTarget.model(o.RuntimeModel.RuntimeModel);e&&await e.agent.invoke_evaluate({expression:"(async function(){ await 1; })()",throwOnSideEffect:!0})}traceEventsCollected(e){this.#we.push(...e)}tracingComplete(){this.tracingCompletePromise&&(this.tracingCompletePromise.resolve(void 0),this.tracingCompletePromise=null)}async allSourcesFinished(){L.ExtensionServer.ExtensionServer.instance().profilingStopped(),this.client.processingStarted();const e=await this.createMetadata();await this.client.loadingComplete(this.#we,null,e),this.client.loadingCompleteForTest(),o.SourceMap.SourceMap.retainRawSourceMaps=!1}tracingBufferUsage(e){this.client.recordingProgress(e)}eventsRetrievalProgress(e){this.client.loadingProgress(e)}}var ai=Object.freeze({__proto__:null,TimelineController:ri});const si={net:"NET",cpu:"CPU",heap:"HEAP",sSDash:"{PH1} – {PH2}"},oi=e.i18n.registerUIStrings("panels/timeline/TimelineEventOverview.ts",si),li=e.i18n.getLocalizedString.bind(void 0,oi);class di extends i.TimelineOverviewPane.TimelineOverviewBase{constructor(e,t){super(),this.element.id="timeline-overview-"+e,this.element.classList.add("overview-strip"),t&&(this.element.createChild("div","timeline-overview-strip-title").textContent=t)}renderBar(e,t,i,n,r){const a=e,s=t-e,o=this.context();o.fillStyle=r,o.fillRect(a,i,s,n)}}class ci extends di{#t;constructor(e){super("network",li(si.net)),this.#t=e}update(e,t){this.resetCanvas(),this.#Ie(e,t)}#Ie(e,i){if(!this.#t)return;const n=e&&i?{min:e,max:i,range:i-e}:t.Helpers.Timing.traceWindowMilliSeconds(this.#t.Meta.traceBounds),r=this.height()/2,a=this.width(),s=a/n.range,o=new Path2D,l=new Path2D;for(const e of this.#t.NetworkRequests.byTime){const i=t.Helpers.Network.isSyntheticNetworkRequestHighPriority(e)?o:l,{startTime:d,endTime:c}=t.Helpers.Timing.eventTimingsMilliSeconds(e),h=Math.max(Math.floor((d-n.min)*s),0),p=Math.min(Math.ceil((c-n.min)*s+1),a);i.rect(h,0,p-h,r-1)}const d=this.context();d.save(),d.fillStyle="hsl(214, 60%, 60%)",d.fill(o),d.translate(0,r),d.fillStyle="hsl(214, 80%, 80%)",d.fill(l),d.restore()}}const hi=new WeakMap;class pi extends di{backgroundCanvas;#t;#Me=!1;#xe;#Pe;constructor(e){super("cpu-activity",li(si.cpu)),this.#t=e,this.backgroundCanvas=this.element.createChild("canvas","fill background"),this.#xe=t.Helpers.Timing.traceWindowMilliSeconds(e.Meta.traceBounds).min,this.#Pe=t.Helpers.Timing.traceWindowMilliSeconds(e.Meta.traceBounds).max}#Re(e){if(t.Types.Events.isProfileCall(e)&&"(idle)"===e.callFrame.functionName)return s.EntryStyles.EventCategory.IDLE;return(s.EntryStyles.getEventStyle(e.name)?.category||s.EntryStyles.getCategoryStyles().other).name}resetCanvas(){super.resetCanvas(),this.#Me=!1,this.backgroundCanvas.width=this.element.clientWidth*window.devicePixelRatio,this.backgroundCanvas.height=this.element.clientHeight*window.devicePixelRatio}#Fe(e){const i=4*window.devicePixelRatio,n=this.width(),r=this.height(),a=r,o=this.#Pe-this.#xe,l=i/(n/o),d=s.EntryStyles.getCategoryStyles(),c=s.EntryStyles.getTimelineMainEventCategories(),h=c.indexOf(s.EntryStyles.EventCategory.OTHER);console.assert(0===c.indexOf(s.EntryStyles.EventCategory.IDLE));for(let e=0;e<c.length;++e)hi.set(d[c[e]],e);const p=(e,s)=>{const p=new vi(this.#xe,l,(function(e){let t=a;for(let n=1;n<c.length;++n){t-=(e[n]||0)/l*r,g[n].bezierCurveTo(m,v[n],m,t,m+i/2,t),v[n]=t}m+=i}));let m=0;const u=[],g=[],v=[];for(let e=0;e<c.length;++e)g[e]=new Path2D,g[e].moveTo(0,r),v[e]=r;const T=t.Helpers.Timing.milliToMicro(this.#xe),y=t.Helpers.Timing.milliToMicro(this.#Pe),f={min:T,max:y,range:t.Types.Timing.Micro(y-T)},S=t.Types.Timing.Micro(f.range>2e5?16e3:0);t.Helpers.TreeHelpers.walkEntireTree(s.entryToNode,s.tree,(e=>{const i=this.#Re(e);if(!i||"idle"===i)return;const n=t.Helpers.Timing.microToMilli(e.ts),r=u.length?u[u.length-1]:0;p.appendInterval(n,r);const a=c.indexOf(i);u.push(a||h)}),(function(e){const i=t.Helpers.Timing.microToMilli(e.ts)+t.Helpers.Timing.microToMilli(t.Types.Timing.Micro(e.dur||0)),n=u.pop();void 0!==i&&n&&p.appendInterval(i,n)}),f,S),p.appendInterval(this.#xe+o+l,0);for(let t=c.length-1;t>0;--t){g[t].lineTo(n,r);const i=d[c[t]].getComputedColorValue();e.fillStyle=i,e.fill(g[t]),e.strokeStyle="white",e.lineWidth=1,e.stroke(g[t])}},m=this.backgroundCanvas.getContext("2d");if(!m)throw new Error("Could not find 2d canvas");const u=t.Handlers.Threads.threadsInTrace(e),g=this.context();for(const e of u){p("MAIN_THREAD"===e.type||"CPU_PROFILE"===e.type?g:m,e)}!function(e){const t=4*window.devicePixelRatio;e.save(),e.lineWidth=t/Math.sqrt(8);for(let i=.5;i<n+r;i+=t)e.moveTo(i,0),e.lineTo(i-r,r);e.globalCompositeOperation="destination-out",e.stroke(),e.restore()}(m)}update(){const e=a.TraceBounds.BoundsManager.instance().state(),t=e?.milli.minimapTraceBounds;t&&(t.min===this.#xe&&t.max===this.#Pe&&this.#Me||(this.#xe=t.min,this.#Pe=t.max,this.resetCanvas(),this.#Me=!0,this.#Fe(this.#t)))}}class mi extends di{#t;constructor(e){super("responsiveness",null),this.#t=e}#Le(){const{topLevelRendererIds:e}=this.#t.Meta,t=new Set(["LONG_TASK","FORCED_REFLOW","IDLE_CALLBACK_OVER_TIME"]),i=new Set;for(const n of t){const t=this.#t.Warnings.perWarning.get(n);if(t)for(const n of t)e.has(n.pid)&&i.add(n)}return i}update(e,i){this.resetCanvas();const n=this.height(),r=e&&i?{min:t.Helpers.Timing.milliToMicro(e),max:t.Helpers.Timing.milliToMicro(i),range:t.Helpers.Timing.milliToMicro(t.Types.Timing.Milli(i-e))}:this.#t.Meta.traceBounds,a=r.range,s=this.width()/a,o=this.context(),l=new Path2D,d=new Path2D,c=this.#Le();for(const e of c)h(e);function h(e){const{startTime:i,duration:a}=t.Helpers.Timing.eventTimingsMicroSeconds(e),o=Math.round(s*(i-r.min)),c=Math.round(s*a);l.rect(o,0,c,n),d.moveTo(o+c,0),d.lineTo(o+c,n)}o.fillStyle="hsl(0, 80%, 90%)",o.strokeStyle="red",o.lineWidth=2*window.devicePixelRatio,o.fill(l),o.stroke(d)}}class ui extends di{frameToImagePromise;lastFrame=null;lastElement;drawGeneration;emptyImage;#Ae=null;constructor(e){super("filmstrip",null),this.element.setAttribute("jslog",`${v.section("film-strip")}`),this.frameToImagePromise=new Map,this.#Ae=e,this.lastFrame=null,this.lastElement=null,this.reset()}update(e,t){this.resetCanvas();const i=this.#Ae?this.#Ae.frames:[];if(!i.length)return;if(0===this.height())return void console.warn("TimelineFilmStrip could not be drawn as its canvas height is 0");const n=Symbol("drawGeneration");this.drawGeneration=n,this.imageByFrame(i[0]).then((i=>{if(this.drawGeneration!==n)return;if(!i?.naturalWidth||!i.naturalHeight)return;const r=this.height()-2*ui.Padding,a=Math.ceil(r*i.naturalWidth/i.naturalHeight),s=Math.min(200/i.naturalWidth,1);this.emptyImage=new Image(i.naturalWidth*s,i.naturalHeight*s),this.drawFrames(a,r,e,t)}))}async imageByFrame(e){let i=this.frameToImagePromise.get(e);if(!i){const n=t.Handlers.ModelHandlers.Screenshots.screenshotImageDataUri(e.screenshotEvent);i=m.UIUtils.loadImage(n),this.frameToImagePromise.set(e,i)}return await i}drawFrames(e,i,n,r){if(!e)return;if(!this.#Ae||this.#Ae.frames.length<1)return;const a=ui.Padding,s=this.width(),o=n??t.Helpers.Timing.microToMilli(this.#Ae.zeroTime),l=(r?r-o:t.Helpers.Timing.microToMilli(this.#Ae.spanTime))/s,d=this.context(),c=this.drawGeneration;d.beginPath();for(let n=a;n<s;n+=e+2*a){const r=t.Types.Timing.Milli(o+(n+e/2)*l),a=t.Helpers.Timing.milliToMicro(r),s=t.Extras.FilmStrip.frameClosestToTimestamp(this.#Ae,a);s&&(d.rect(n-.5,.5,e+1,i+1),this.imageByFrame(s).then(h.bind(this,n)))}function h(t,n){this.drawGeneration===c&&n&&d.drawImage(n,t,1,e,i)}d.strokeStyle="#ddd",d.stroke()}async overviewInfoPromise(e){if(!this.#Ae||0===this.#Ae.frames.length)return null;const i=this.calculator();if(!i)return null;const n=i.positionToTime(e),r=t.Helpers.Timing.milliToMicro(n),a=t.Extras.FilmStrip.frameClosestToTimestamp(this.#Ae,r);if(a===this.lastFrame)return this.lastElement;const s=a?this.imageByFrame(a):Promise.resolve(this.emptyImage),o=await s,l=document.createElement("div");return l.classList.add("frame"),o&&l.createChild("div","thumbnail").appendChild(o),this.lastFrame=a,this.lastElement=l,l}reset(){this.lastFrame=null,this.lastElement=null,this.frameToImagePromise=new Map}static Padding=2}class gi extends di{heapSizeLabel;#t;constructor(e){super("memory",li(si.heap)),this.heapSizeLabel=this.element.createChild("div","memory-graph-label"),this.#t=e}resetHeapSizeLabels(){this.heapSizeLabel.textContent=""}update(i,n){this.resetCanvas();const r=window.devicePixelRatio;if(0===this.#t.Memory.updateCountersByProcess.size)return void this.resetHeapSizeLabels();const a=Array.from(this.#t.Meta.topLevelRendererIds).map((e=>this.#t.Memory.updateCountersByProcess.get(e)||[])).filter((e=>e.length>0)),s=3*r;let o=0,l=1e11;const d=i&&n?{min:i,max:n,range:n-i}:t.Helpers.Timing.traceWindowMilliSeconds(this.#t.Meta.traceBounds),c=d.min,h=d.max;function p(e){const t=e.args.data;t&&t.jsHeapSizeUsed&&(o=Math.max(o,t.jsHeapSizeUsed),l=Math.min(l,t.jsHeapSizeUsed))}for(let e=0;e<a.length;e++)a[e].forEach(p);l=Math.min(l,o);const m=this.width(),u=this.height()-s,g=m/(h-c),v=(u-1)/Math.max(o-l,1),T=new Array(m);function y(e){const i=e.args.data;if(!i||!i.jsHeapSizeUsed)return;const{startTime:n}=t.Helpers.Timing.eventTimingsMilliSeconds(e),r=Math.round((n-c)*g),a=Math.round((i.jsHeapSizeUsed-l)*v);T[r]=Math.max(T[r]||0,a)}for(let e=0;e<a.length;e++)a[e].forEach(y);const f=this.context(),S=u+s+1;f.translate(.5,.5),f.beginPath(),f.moveTo(-1,S);let w=0,b=!0,E=0;for(let e=0;e<T.length;e++){if(void 0===T[e])continue;b&&(b=!1,w=T[e],f.lineTo(-1,u-w));const t=T[e];Math.abs(t-w)>2&&Math.abs(e-E)>1&&f.lineTo(e,u-w),w=t,f.lineTo(e,u-w),E=e}f.lineTo(m+1,u-w),f.lineTo(m+1,S),f.closePath(),f.fillStyle="hsla(220, 90%, 70%, 0.2)",f.fill(),f.lineWidth=1,f.strokeStyle="hsl(220, 90%, 70%)",f.stroke(),this.heapSizeLabel.textContent=li(si.sSDash,{PH1:e.ByteUtilities.bytesToString(l),PH2:e.ByteUtilities.bytesToString(o)})}}class vi{lastTime;quantDuration;callback;counters;remainder;constructor(e,t,i){this.lastTime=e,this.quantDuration=t,this.callback=i,this.counters=[],this.remainder=t}appendInterval(e,t){let i=e-this.lastTime;if(i<=this.remainder)return this.counters[t]=(this.counters[t]||0)+i,this.remainder-=i,void(this.lastTime=e);for(this.counters[t]=(this.counters[t]||0)+this.remainder,this.callback(this.counters),i-=this.remainder;i>=this.quantDuration;){const e=[];e[t]=this.quantDuration,this.callback(e),i-=this.quantDuration}this.counters=[],this.counters[t]=i,this.lastTime=e,this.remainder=this.quantDuration-i}}var Ti=Object.freeze({__proto__:null,Quantizer:vi,TimelineEventOverview:di,TimelineEventOverviewCPUActivity:pi,TimelineEventOverviewMemory:gi,TimelineEventOverviewNetwork:ci,TimelineEventOverviewResponsiveness:mi,TimelineFilmStripOverview:ui}),yi={cssText:`.drop-down{box-shadow:var(--drop-shadow);background:var(--sys-color-cdt-base-container)}.preview-item{border-bottom:1px solid var(--sys-color-divider);&:first-child{border-top:1px solid var(--sys-color-divider)}padding:6px 10px;position:relative;.metadata{margin-left:3px}&.selected::before{content:" ";position:absolute;top:0;bottom:0;left:0;width:2px;background-color:var(--sys-color-primary)}}.preview-item canvas{width:100%;height:100%}.text-details{flex-wrap:wrap;justify-content:space-between}.text-details > span{padding-left:var(--sys-size-5);padding-right:var(--sys-size-5)}.text-details .name{font:var(--sys-typescale-body4-medium)}.text-details .metadata{color:var(--sys-color-token-subtle);font:var(--sys-typescale-body4-regular);text-align:right}.screenshot-thumb{display:flex;border:1px solid var(--sys-color-surface3);margin:2px 4px}.screenshot-thumb img{margin:auto;max-width:100%;max-height:100%}.landing-page-item{font:var(--sys-typescale-body4-regular);display:flex;align-items:center;gap:var(--sys-size-5)}\n/*# sourceURL=${import.meta.resolve("./timelineHistoryManager.css")} */\n`};const fi=1/0,Si={currentSessionSS:"Current session: {PH1}. {PH2}",landingPageTitle:"Live metrics",nodeLandingPageTitle:"New recording",sD:"{PH1} #{PH2}",selectTimelineSession:"Select timeline session",dSlowdown:"{PH1}× slowdown"},wi=e.i18n.registerUIStrings("panels/timeline/TimelineHistoryManager.ts",Si),bi=e.i18n.getLocalizedString.bind(void 0,wi),Ei=function(){let t;return{format(...i){if(!t){const i={type:"unit",style:"short"};t=new Intl.ListFormat(e.DevToolsLocale.DevToolsLocale.instance().locale,i)}return t.format(...i)}}}();class Ci{recordings;action;nextNumberByDomain;buttonInternal;allOverviews;totalHeight;enabled;lastActiveTrace=null;#Ne;#De;constructor(e,t){this.recordings=[],this.#Ne=e,this.action=m.ActionRegistry.ActionRegistry.instance().getAction("timeline.show-history"),this.nextNumberByDomain=new Map,this.buttonInternal=new Pi(this.action),this.#De=bi(t?Si.nodeLandingPageTitle:Si.landingPageTitle),m.ARIAUtils.markAsMenuButton(this.buttonInternal.element),this.clear(),this.allOverviews=[{constructor:e=>{const t=this.#Ne?.getControls().find((e=>e instanceof mi));return t||new mi(e)},height:3},{constructor:e=>{const t=this.#Ne?.getControls().find((e=>e instanceof pi));return t||new pi(e)},height:20},{constructor:e=>{const t=this.#Ne?.getControls().find((e=>e instanceof ci));return t||new ci(e)},height:8}],this.totalHeight=this.allOverviews.reduce(((e,t)=>e+t.height),0),this.enabled=!0}addRecording(e){const t=e.filmStripForPreview;this.lastActiveTrace=e.data,this.recordings.unshift(e.data),this.#Be(e.data.parsedTraceIndex,e.parsedTrace,e.metadata,t);const i=this.title(e.data);this.buttonInternal.setText(i);const n=this.action.title();if(m.ARIAUtils.setLabel(this.buttonInternal.element,bi(Si.currentSessionSS,{PH1:i,PH2:n})),this.updateState(),this.recordings.length<=ki)return;const r=this.recordings.reduce(((e,t)=>a(e.parsedTraceIndex)<a(t.parsedTraceIndex)?e:t));function a(e){const t=Ci.dataForTraceIndex(e);if(!t)throw new Error("Unable to find data for model");return t.lastUsed}this.recordings.splice(this.recordings.indexOf(r),1)}setEnabled(e){this.enabled=e,this.updateState()}button(){return this.buttonInternal}clear(){this.recordings=[],this.lastActiveTrace=null,this.updateState(),this.buttonInternal.setText(this.#De),this.nextNumberByDomain.clear()}#He(){return this.lastActiveTrace?"LANDING_PAGE"===this.lastActiveTrace.type?fi:this.lastActiveTrace.parsedTraceIndex:-1}async showHistoryDropDown(){if(this.recordings.length<1||!this.enabled)return null;const e=await xi.show(this.recordings.map((e=>e.parsedTraceIndex)),this.#He(),this.buttonInternal.element,this.#De);if(null===e)return null;if(e===fi)return this.#Ue({type:"LANDING_PAGE"}),{type:"LANDING_PAGE"};const t=this.recordings.findIndex((t=>t.parsedTraceIndex===e));return t<0?(console.assert(!1,"selected recording not found"),null):(this.#Ue(this.recordings[t]),this.recordings[t])}cancelIfShowing(){xi.cancelIfShowing()}navigate(e){if(!this.enabled||null===this.lastActiveTrace)return null;if(!this.lastActiveTrace||"LANDING_PAGE"===this.lastActiveTrace.type)return null;const t=this.recordings.findIndex((e=>"TRACE_INDEX"===this.lastActiveTrace?.type&&"TRACE_INDEX"===e.type&&e.parsedTraceIndex===this.lastActiveTrace.parsedTraceIndex));if(t<0)return null;const i=r.NumberUtilities.clamp(t+e,0,this.recordings.length-1);return this.#Ue(this.recordings[i]),this.recordings[i]}navigateToLandingPage(){this.#Ue({type:"LANDING_PAGE"})}#Ue(e){if("TRACE_INDEX"===e.type){const t=Ci.dataForTraceIndex(e.parsedTraceIndex);if(!t)throw new Error("Unable to find data for model");t.lastUsed=Date.now()}this.lastActiveTrace=e;const t=this.title(e),i=this.action.title();this.buttonInternal.setText(t),m.ARIAUtils.setLabel(this.buttonInternal.element,bi(Si.currentSessionSS,{PH1:t,PH2:i}))}updateState(){this.action.setEnabled(this.recordings.length>=1&&this.enabled)}static previewElement(e){const t=Ci.dataForTraceIndex(e);if(!t)throw new Error("Unable to find data for model");return t.preview}title(e){if("LANDING_PAGE"===e.type)return this.#De;const t=Ci.dataForTraceIndex(e.parsedTraceIndex);if(!t)throw new Error("Unable to find data for model");return t.title}#Be(e,t,i,n){const r=l.ParsedURL.ParsedURL.fromString(t.Meta.mainFrameURL);let a=r?r.host:"";if(d.Runtime.experiments.isEnabled("react-native-specific-ui")){const e=o.TargetManager.TargetManager.instance().primaryPageTarget()?.model(o.ReactNativeApplicationModel.ReactNativeApplicationModel);null!=e&&(a=e.metadataCached?.appDisplayName||"")}const s=this.nextNumberByDomain.get(a)||1,c=bi(Si.sD,{PH1:a,PH2:s});this.nextNumberByDomain.set(a,s+1);const h=document.createElement("div");h.classList.add("preview-item"),h.classList.add("vbox"),h.setAttribute("jslog",`${v.dropDown("timeline.history-item").track({click:!0})}`),h.style.width=`${Ii}px`;const p={preview:h,title:c,lastUsed:Date.now()};Mi.set(e,p),h.appendChild(this.#Oe(i,a));const m=h.createChild("div","hbox");return m.appendChild(this.#_e(n)),m.appendChild(this.#We(t)),p.preview}#Oe(e,t){const i=document.createElement("div");i.classList.add("text-details"),i.classList.add("hbox");const n=i.createChild("span","name");if(n.textContent=t,m.ARIAUtils.setLabel(n,t),e){const t=[e.emulatedDeviceTitle,e.cpuThrottling?bi(Si.dSlowdown,{PH1:e.cpuThrottling}):void 0,e.networkThrottling].filter(Boolean);i.createChild("span","metadata").textContent=Ei.format(t)}return i}#_e(e){const i=document.createElement("div");i.classList.add("screenshot-thumb");if(i.style.width=1.5*this.totalHeight+"px",i.style.height=this.totalHeight+"px",!e)return i;const n=e.frames.at(-1);if(!n)return i;const r=t.Handlers.ModelHandlers.Screenshots.screenshotImageDataUri(n.screenshotEvent);return m.UIUtils.loadImage(r).then((e=>{e&&i.appendChild(e)})),i}#We(e){const t=document.createElement("div"),i=window.devicePixelRatio;t.style.width=Ii+"px",t.style.height=this.totalHeight+"px";const n=t.createChild("canvas");n.width=i*Ii,n.height=i*this.totalHeight;const r=n.getContext("2d");let a=0;for(const t of this.allOverviews){const n=t.constructor(e);n.update(),r&&r.drawImage(n.context().canvas,0,a,i*Ii,t.height*i),a+=t.height*i}return t}static dataForTraceIndex(e){return Mi.get(e)||null}}const ki=5,Ii=500,Mi=new Map;class xi{glassPane;listControl;focusRestorer;selectionDone;#De;constructor(e,t){this.#De=t,this.glassPane=new m.GlassPane.GlassPane,this.glassPane.setSizeBehavior("MeasureContent"),this.glassPane.setOutsideClickCallback((()=>this.close(null))),this.glassPane.setPointerEventsBehavior("BlockedByGlassPane"),this.glassPane.setAnchorBehavior("PreferBottom"),this.glassPane.element.addEventListener("blur",(()=>this.close(null)));const i=m.UIUtils.createShadowRootWithCoreStyles(this.glassPane.contentElement,{cssFile:yi}).createChild("div","drop-down"),n=new m.ListModel.ListModel;this.listControl=new m.ListControl.ListControl(n,this,m.ListControl.ListMode.NonViewport),this.listControl.element.addEventListener("mousemove",this.onMouseMove.bind(this),!1),n.replaceAll(e),m.ARIAUtils.markAsMenu(this.listControl.element),m.ARIAUtils.setLabel(this.listControl.element,bi(Si.selectTimelineSession)),i.appendChild(this.listControl.element),i.addEventListener("keydown",this.onKeyDown.bind(this),!1),i.addEventListener("click",this.onClick.bind(this),!1),this.focusRestorer=new m.UIUtils.ElementFocusRestorer(this.listControl.element),this.selectionDone=null}static show(e,t,i,n=bi(Si.landingPageTitle)){if(xi.instance)return Promise.resolve(null);const r=[...e];r.unshift(fi);return new xi(r,n).show(i,t)}static cancelIfShowing(){xi.instance&&xi.instance.close(null)}show(e,t){return xi.instance=this,this.glassPane.setContentAnchorBox(e.boxInWindow()),this.glassPane.show(this.glassPane.contentElement.ownerDocument),this.listControl.element.focus(),this.listControl.selectItem(t),new Promise((e=>{this.selectionDone=e}))}onMouseMove(e){const t=e.target.enclosingNodeOrSelfWithClass("preview-item"),i=t&&this.listControl.itemForNode(t);null!==i&&this.listControl.selectItem(i)}onClick(e){e.target.enclosingNodeOrSelfWithClass("preview-item")&&this.close(this.listControl.selectedItem())}onKeyDown(e){switch(e.key){case"Tab":case"Escape":this.close(null);break;case"Enter":this.close(this.listControl.selectedItem());break;default:return}e.consume(!0)}close(e){this.selectionDone&&this.selectionDone(e),this.focusRestorer.restore(),this.glassPane.hide(),xi.instance=null}createElementForItem(e){if(e===fi)return this.#Ve();const t=Ci.previewElement(e);return m.ARIAUtils.markAsMenuItem(t),t.classList.remove("selected"),t}#Ve(){const e=document.createElement("div");m.ARIAUtils.markAsMenuItem(e),e.classList.remove("selected"),e.classList.add("preview-item"),e.classList.add("landing-page-item"),e.style.width=`${Ii}px`;const t=N.Icon.create("arrow-back");e.appendChild(t);const i=document.createElement("span");return i.innerText=this.#De,e.appendChild(i),e}heightForItem(e){return console.assert(!1,"Should not be called"),0}isItemSelectable(e){return!0}selectedItemChanged(e,t,i,n){i&&i.classList.remove("selected"),n&&n.classList.add("selected")}updateSelectedItemARIA(e,t){return!1}static instance=null}class Pi extends m.Toolbar.ToolbarItem{contentElement;constructor(e){const t=document.createElement("button");t.classList.add("history-dropdown-button"),t.setAttribute("jslog",`${v.dropDown("history")}`),super(t),this.contentElement=this.element.createChild("span","content"),this.element.addEventListener("click",(()=>{e.execute()}),!1),this.setEnabled(e.enabled()),e.addEventListener("Enabled",(e=>this.setEnabled(e.data))),this.setTitle(e.title())}setText(e){this.contentElement.textContent=e}}var Ri=Object.freeze({__proto__:null,DropDown:xi,LANDING_PAGE_INDEX_DROPDOWN_CHOICE:fi,TimelineHistoryManager:Ci,ToolbarButton:Pi,maxRecordings:ki,previewWidth:Ii});const Fi={malformedTimelineDataS:"Malformed timeline data: {PH1}"},Li=e.i18n.registerUIStrings("panels/timeline/TimelineLoader.ts",Fi),Ai=e.i18n.getLocalizedString.bind(void 0,Li);class Ni{client;canceledCallback;buffer;firstRawChunk;totalSize;filter;#Ge;#we=[];#ze;#je;#$e;constructor(e){this.client=e,this.canceledCallback=null,this.buffer="",this.firstRawChunk=!0,this.filter=null,this.#Ge=!1,this.#ze=null,this.#$e=new Promise((e=>{this.#je=e}))}static async loadFromFile(e,t){const i=new Ni(t),n=new u.FileUtils.ChunkedFileReader(e);return i.canceledCallback=n.cancel.bind(n),i.totalSize=e.size,setTimeout((async()=>{!await n.read(i)&&n.error()&&i.reportErrorAndCancelLoading(n.error().message)})),i}static loadFromEvents(e,t){const i=new Ni(t);return window.setTimeout((async()=>{i.addEvents(e)})),i}static loadFromCpuProfile(e,i){const n=new Ni(i);n.#Ge=!0;try{const i=t.Helpers.SamplesIntegrator.SamplesIntegrator.createFakeTraceFromCpuProfile(e,t.Types.Events.ThreadID(1));window.setTimeout((async()=>{n.addEvents(i.traceEvents)}))}catch(e){console.error(e.stack)}return n}static async loadFromURL(e,t){const i=new Ni(t),n=new l.StringOutputStream.StringOutputStream;t.loadingStarted();const r=l.Settings.Settings.instance().moduleSetting("network.enable-remote-file-loading").get();return C.ResourceLoader.loadAsStream(e,null,n,(async function(e,t,r){if(!e)return i.reportErrorAndCancelLoading(r.message);try{const e=n.data(),t=JSON.parse(e);i.#Ke(t),await i.close()}catch(e){await i.close();const t=e instanceof Error?e.message:"";return i.reportErrorAndCancelLoading(Ai(Fi.malformedTimelineDataS,{PH1:t}))}}),r),i}#Ke(e){if("traceEvents"in e||Array.isArray(e)){const t=Array.isArray(e)?e:e.traceEvents;this.#qe(t)}else{if(!e.nodes)return void this.reportErrorAndCancelLoading(Ai(Fi.malformedTimelineDataS));this.#Ye(e),this.#Ge=!0}if("metadata"in e){this.#ze=e.metadata,1===this.#ze.cpuThrottling&&(this.#ze.cpuThrottling=void 0);const t="string"==typeof o.NetworkManager.NoThrottlingConditions.title?o.NetworkManager.NoThrottlingConditions.title:o.NetworkManager.NoThrottlingConditions.title();"No throttling"!==this.#ze.networkThrottling&&this.#ze.networkThrottling!==t||(this.#ze.networkThrottling=void 0)}}async addEvents(e){this.client?.loadingStarted();const t=15e4;for(let i=0;i<e.length;i+=t){const n=e.slice(i,i+t);this.#qe(n),this.client?.loadingProgress((i+n.length)/e.length),await new Promise((e=>window.setTimeout(e,0)))}this.close()}async cancel(){this.client&&(await this.client.loadingComplete([],null,null),this.client=null),this.canceledCallback&&this.canceledCallback()}async write(e,t){if(!this.client)return await Promise.resolve();if(this.buffer+=e,this.firstRawChunk)this.client.loadingStarted(),await new Promise((e=>requestAnimationFrame((()=>requestAnimationFrame(e))))),this.firstRawChunk=!1;else{let e;e=this.buffer.length/this.totalSize,e=e>1?e-Math.floor(e):e,this.client.loadingProgress(e)}if(t){let e;try{e=JSON.parse(this.buffer),this.#Ke(e)}catch(e){this.reportErrorAndCancelLoading(Ai(Fi.malformedTimelineDataS,{PH1:e.toString()}))}}else;}reportErrorAndCancelLoading(e){e&&l.Console.Console.instance().error(e),this.cancel()}async close(){this.client&&(this.client.processingStarted(),await this.finalizeTrace())}async finalizeTrace(){!this.#ze&&this.#Ge&&(this.#ze={dataOrigin:"CPUProfile"}),await this.client.loadingComplete(this.#we,this.filter,this.#ze),this.#je?.()}traceFinalizedForTest(){return this.#$e}#Ye(e){const i=t.Helpers.SamplesIntegrator.SamplesIntegrator.createFakeTraceFromCpuProfile(e,t.Types.Events.ThreadID(1));this.#qe(i.traceEvents)}#qe(e){this.#we=this.#we.concat(e)}}var Di=Object.freeze({__proto__:null,TimelineLoader:Ni}),Bi={cssText:`.timeline-minimap{position:relative}.timeline-sidebar-floating-icon{position:absolute;top:5px;left:10px;z-index:999;border:none;width:36px;height:36px;border-radius:50%;box-shadow:var(--drop-shadow-depth-1);background:var(--sys-color-cdt-base-container);&:hover{background:var(--sys-color-base-container-elevated)}}.timeline-minimap .overview-strip{margin-top:2px;justify-content:center}.timeline-minimap .overview-strip .timeline-overview-strip-title{color:var(--sys-color-token-subtle);font-size:10px;font-weight:bold;z-index:100;background-color:var(--sys-color-cdt-base-container);padding:0 4px;position:absolute;top:-2px;right:0}.timeline-minimap #timeline-overview-cpu-activity{flex-basis:20px}.timeline-minimap #timeline-overview-network{flex-basis:8px}.timeline-minimap #timeline-overview-filmstrip{flex-basis:30px}.timeline-minimap #timeline-overview-memory{flex-basis:20px}.timeline-minimap #timeline-overview-network::before,\n.timeline-minimap #timeline-overview-cpu-activity::before{content:"";position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid var(--divider-line);z-index:-200}.timeline-minimap .overview-strip .background{z-index:-10}.timeline-minimap #timeline-overview-responsiveness{flex-basis:5px;margin-top:0!important}.timeline-minimap #timeline-overview-input{flex-basis:6px}.timeline-minimap #timeline-overview-pane{flex:auto;position:relative;overflow:hidden}.timeline-minimap #timeline-overview-container{display:flex;flex-direction:column;flex:none;position:relative;overflow:hidden}.timeline-minimap #timeline-overview-container canvas{width:100%;height:100%}.timeline-minimap-dim-highlight-svg{width:100%;position:absolute;height:100%}.timeline-minimap .memory-graph-label{position:absolute;right:0;bottom:0;font-size:9px;color:var(--sys-color-token-subtle);white-space:nowrap;padding:0 4px;background-color:var(--sys-color-cdt-base-container)}\n/*# sourceURL=${import.meta.resolve("./timelineMiniMap.css")} */\n`};class Hi extends(l.ObjectWrapper.eventMixin(m.Widget.VBox)){#Je=new i.TimelineOverviewPane.TimelineOverviewPane("timeline");#Xe=[];breadcrumbs=null;#Ze;#Qe=null;#te=this.#ie.bind(this);constructor(){super(),this.registerRequiredCSS(Bi),this.element.classList.add("timeline-minimap"),this.#Ze=new c.BreadcrumbsUI.BreadcrumbsUI,this.element.prepend(this.#Ze),this.#Je.show(this.element),this.#Je.addEventListener("OverviewPaneWindowChanged",(e=>{this.#et(e)})),this.#Je.addEventListener("OverviewPaneBreadcrumbAdded",(e=>{this.addBreadcrumb(e.data)})),this.#Je.addEventListener("OverviewPaneMouseMove",(e=>{this.dispatchEventToListeners("OverviewPaneMouseMove",e.data)})),this.#Je.addEventListener("OverviewPaneMouseLeave",(()=>{this.dispatchEventToListeners("OverviewPaneMouseLeave")})),this.#Ze.addEventListener(c.BreadcrumbsUI.BreadcrumbActivatedEvent.eventName,(e=>{const{breadcrumb:t,childBreadcrumbsRemoved:i}=e;this.#tt(t,{removeChildBreadcrumbs:Boolean(i),updateVisibleWindow:!0})})),this.#Je.enableCreateBreadcrumbsButton(),a.TraceBounds.onChange(this.#te)}#et(e){const i=this.#Qe?.parsedTrace;if(!i)return;const n=a.TraceBounds.BoundsManager.instance().state();if(!n)return;const r=e.data.startTime>0?e.data.startTime:n.milli.entireTraceBounds.min,s=Number.isFinite(e.data.endTime)?e.data.endTime:n.milli.entireTraceBounds.max;a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(t.Helpers.Timing.traceWindowFromMilliSeconds(t.Types.Timing.Milli(r),t.Types.Timing.Milli(s)),{shouldAnimate:!0})}#ie(e){if("RESET"===e.updateType||"VISIBLE_WINDOW"===e.updateType){this.#Je.setWindowTimes(e.state.milli.timelineTraceWindow.min,e.state.milli.timelineTraceWindow.max);t.Helpers.Timing.windowFitsInsideBounds({window:e.state.micro.timelineTraceWindow,bounds:e.state.micro.minimapTraceBounds})||this.#it(e.state.micro.timelineTraceWindow)}"RESET"!==e.updateType&&"MINIMAP_BOUNDS"!==e.updateType||this.#Je.setBounds(e.state.milli.minimapTraceBounds.min,e.state.milli.minimapTraceBounds.max)}#it(e){if(!this.breadcrumbs)return;let i=this.breadcrumbs.initialBreadcrumb,n=this.breadcrumbs.initialBreadcrumb;for(;i;){if(!t.Helpers.Timing.windowFitsInsideBounds({window:e,bounds:i.window}))break;n=i,i=i.child}this.#tt(n,{removeChildBreadcrumbs:!1,updateVisibleWindow:!1})}addBreadcrumb({startTime:e,endTime:i}){if(!this.breadcrumbs)return void console.warn("ModificationsManager has not been created, therefore Breadcrumbs can not be added");const n=a.TraceBounds.BoundsManager.instance().state();if(!n)return;const r=n.milli.minimapTraceBounds,s={startTime:t.Types.Timing.Milli(Math.max(e,r.min)),endTime:t.Types.Timing.Milli(Math.min(i,r.max))},o=t.Helpers.Timing.traceWindowFromMilliSeconds(s.startTime,s.endTime),l=this.breadcrumbs.add(o);this.#Ze.data={initialBreadcrumb:this.breadcrumbs.initialBreadcrumb,activeBreadcrumb:l}}highlightBounds(e,t=!1){this.#Je.highlightBounds(e,t)}clearBoundsHighlight(){this.#Je.clearBoundsHighlight()}#tt(e,t){this.breadcrumbs&&(this.breadcrumbs.setActiveBreadcrumb(e,t),this.#Ze.data={initialBreadcrumb:this.breadcrumbs.initialBreadcrumb,activeBreadcrumb:e})}reset(){this.#Qe=null,this.#Je.reset()}#nt(e){const i=new Map,{Meta:n}=e,r=n.mainFrameNavigations,a=t.Helpers.Timing.microToMilli(n.traceBounds.min);for(const e of r){const{startTime:n}=t.Helpers.Timing.eventTimingsMilliSeconds(e);i.set(n,Tn.createEventDivider(e,a))}this.#Je.setMarkers(i)}#rt(e){this.#Je.setNavStartTimes(e.Meta.mainFrameNavigations)}getControls(){return this.#Xe}setData(e){if(this.#Qe?.parsedTrace!==e.parsedTrace){if(this.#Qe=e,this.#Xe=[],this.#nt(e.parsedTrace),this.#rt(e.parsedTrace),this.#Xe.push(new mi(e.parsedTrace)),this.#Xe.push(new pi(e.parsedTrace)),this.#Xe.push(new ci(e.parsedTrace)),e.settings.showScreenshots){const i=t.Extras.FilmStrip.fromParsedTrace(e.parsedTrace);i.frames.length&&this.#Xe.push(new ui(i))}e.settings.showMemory&&this.#Xe.push(new gi(e.parsedTrace)),this.#Je.setOverviewControls(this.#Xe),this.#Je.showingScreenshots=e.settings.showScreenshots,this.#at()}}#at(){if(this.breadcrumbs=Ve.activeManager()?.getTimelineBreadcrumbs()??null,!this.breadcrumbs)return;let e=this.breadcrumbs.initialBreadcrumb;for(;null!==e.child;)e=e.child;this.#Ze.data={initialBreadcrumb:this.breadcrumbs.initialBreadcrumb,activeBreadcrumb:e}}}var Ui=Object.freeze({__proto__:null,TimelineMiniMap:Hi}),Oi={cssText:`.timeline-toolbar-container{display:flex;align-items:flex-start;flex:none;background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider);& > :first-child{flex:1 1 auto}}.timeline-settings-pane{display:grid;grid-template-columns:50% 50%;flex:none;background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider);& > div{margin-left:5px;display:flex;align-items:center;gap:5px;& > select{height:var(--sys-size-9);min-width:var(--sys-size-14);border:none}}}#timeline-overview-panel{flex:none;position:relative;border-bottom:1px solid var(--sys-color-divider)}#timeline-overview-grid{background-color:var(--sys-color-cdt-base-container)}#timeline-overview-grid .timeline-grid-header{height:12px}#timeline-overview-grid .resources-dividers-label-bar{pointer-events:auto;height:12px}#timeline-overview-grid .resources-divider-label{top:1px}.timeline-details-split{flex:auto}.timeline.panel .status-pane-container{z-index:1000;display:flex;align-items:center;pointer-events:none}.timeline.panel .status-pane-container.tinted{background-color:var(--sys-color-cdt-base-container);pointer-events:auto}.timeline-landing-page.legacy > div > p{flex:none;white-space:pre-line;line-height:18px}.popover ul{margin:0;padding:0;list-style-type:none}#memory-graphs-canvas-container{overflow:hidden;flex:auto;position:relative;.no-events-found{position:absolute;font:var(--sys-typescale-body4-regular);left:var(--sys-size-5);bottom:var(--sys-size-5);p{margin:0}}}#memory-counters-graph{flex:auto}#memory-graphs-canvas-container .memory-counter-marker{position:absolute;border-radius:3px;width:5px;height:5px;margin-left:-3px;margin-top:-2px}#memory-graphs-container .timeline-memory-header{flex:0 0 26px;background-color:var(--sys-color-surface2);border-bottom:1px solid var(--sys-color-divider);justify-content:space-between}#memory-graphs-container .timeline-memory-header::after{content:"";background-image:var(--image-file-toolbarResizerVertical);background-repeat:no-repeat;background-position:right center,center;flex:20px 0 0;margin:0 4px}.timeline-memory-toolbar{flex-shrink:1}.memory-counter-value{margin:8px}#counter-values-bar{flex:0 0 20px;border-top:solid 1px var(--sys-color-divider);width:100%;overflow:hidden;line-height:18px}.timeline-details{vertical-align:top}.timeline-details-view{color:var(--sys-color-on-surface);overflow:hidden}.timeline-details-view-body{flex:auto;overflow:auto;position:relative;background-color:var(--sys-color-cdt-base-container);user-select:text}.timeline-details-view-block{flex:none;display:flex;background-color:var(--sys-color-cdt-base-container);flex-direction:column;padding-bottom:5px;border-bottom:1px solid var(--sys-color-divider)}.timeline-details-view-row{padding-left:10px;min-height:20px;line-height:16px}.timeline-details-view-block .timeline-details-stack-values{flex-direction:column!important}.timeline-details-chip-title{font-size:12px;padding:8px;display:flex;align-items:center}.timeline-details-view-block:first-child > .timeline-details-chip-title{font-size:13px}.timeline-details-view-row-title:not(:empty){color:var(--sys-color-token-subtle);overflow:hidden;padding-right:10px;display:inline-block;vertical-align:top}.timeline-details-warning{--override-details-warning-background-color:rgb(250 209 209/48%);background-color:var(--override-details-warning-background-color)}.theme-with-dark-background .timeline-details-warning,\n:host-context(.theme-with-dark-background) .timeline-details-warning{--override-details-warning-background-color:rgb(87 10 10/48%)}.timeline-details-warning .timeline-details-view-row-title{color:var(--sys-color-error)}.timeline-details-view-row-value{display:inline-block;user-select:text;text-overflow:ellipsis;overflow:visible}.timeline-details-warning .timeline-details-view-row-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeline-details-view-pie-chart-wrapper{margin:4px 0}.timeline-details-view-pie-chart{margin-top:5px}.timeline-flamechart{overflow:hidden}.brick-game{background-color:var(--sys-color-neutral-container);position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999}.game-close-button{display:flex;align-items:center;justify-content:center;width:25px;height:25px;position:absolute;right:15px;top:15px;border-radius:50%;cursor:pointer}.scorePanel{display:flex;align-items:center;justify-content:center;flex-direction:column;white-space:pre-line;padding:15px;position:absolute;left:15px;bottom:15px;border:double 7px transparent;border-radius:20px;background-origin:border-box;background-clip:content-box,border-box;font-weight:200}.confetti-100{display:block;top:0;left:0;width:100%;height:100%}.confetti-100 > .confetti-100-particle{opacity:0%;position:fixed;animation:confetti-100-animation 1s none ease-out;font-size:30px}@keyframes confetti-100-animation{0%{opacity:100%;transform:translateY(0%) translateY(0%) rotate(0deg)}100%{opacity:0%;transform:translateY(var(--to-Y)) translateX(var(--to-X)) rotate(var(--rotation))}}@media (prefers-reduced-motion){.confetti-100 > .confetti-100-particle{animation-name:dissolve}}.timeline-flamechart-resizer{flex:8px 0 0;background-color:var(--sys-color-surface2);border:1px var(--sys-color-divider);border-style:solid none;display:flex;flex-direction:row;align-items:flex-end;justify-content:center}.timeline-network-resizer-disabled > .timeline-flamechart-resizer{display:none}.timeline-flamechart-resizer::after{content:"...";font-size:14px;margin-bottom:-1px}.timeline-layers-view-properties table{width:100%;border-collapse:collapse}.timeline-layers-view-properties td{border:1px solid var(--sys-color-divider);line-height:22px}.timeline-filmstrip-preview > img{max-width:500px;max-height:300px;cursor:pointer;border:1px solid var(--sys-color-divider)}.timeline-tree-view{display:flex;overflow:hidden}.timeline-tree-view devtools-toolbar{background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider)}.timeline-tree-view .data-grid{flex:auto}.timeline-tree-view .data-grid .data-container{overflow-y:scroll}.timeline-tree-view .data-grid.data-grid-fits-viewport .corner{display:table-cell}.timeline-tree-view .data-grid table.data{background:var(--sys-color-cdt-base-container)}.timeline-tree-view .data-grid .odd{background-color:var(--sys-color-surface1)}.timeline-tree-view .data-grid tr:hover td:not(.bottom-filler-td){background-color:var(--sys-color-state-hover-on-subtle)}.timeline-tree-view .data-grid td.numeric-column{text-align:right;position:relative}.timeline-tree-view .data-grid div.background-bar-text{position:relative;z-index:1}.timeline-tree-view .data-grid span.percent-column{color:var(--sys-color-token-subtle);width:45px;display:inline-block}.timeline-tree-view .data-grid tr.selected span{color:inherit}.timeline-tree-view .data-grid tr.selected{background-color:var(--sys-color-tonal-container)}.timeline-tree-view .data-grid .name-container{display:flex;align-items:center}.timeline-tree-view .data-grid .name-container .activity-icon{width:12px;height:12px;border:1px solid var(--divider-line);margin:3px 0}.timeline-tree-view .data-grid .name-container .activity-icon-container{margin-right:3px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;width:18px;height:18px;overflow:hidden}.timeline-tree-view .data-grid .name-container .activity-warning::after{content:"[deopt]";margin:0 4px;line-height:12px;font-size:10px;color:var(--sys-color-state-disabled)}.timeline-tree-view .data-grid tr.selected .name-container .activity-warning::after{color:var(--sys-color-on-tonal-container)}.timeline-tree-view .data-grid .name-container .activity-link{flex:auto;text-align:right;overflow:hidden;text-overflow:ellipsis;margin-left:5px}.timeline-tree-view .data-grid .background-bar-container{position:absolute;inset:0 0 0 2px}.timeline-tree-view .data-grid .background-bar{height:18px;background-color:var(--sys-color-surface-yellow);border-bottom:1px solid var(--sys-color-yellow-outline);position:absolute;right:0}.timeline-tree-view .data-grid .selected .background-bar{background-color:var(--app-color-selected-progress-bar);border-bottom:1px solid var(--app-border-selected-progress-bar)}.timeline-tree-view .timeline-details-view-body .full-widget-dimmed-banner{background-color:inherit}.timeline-details .filter-input-field{width:120px}.timeline-tree-view .data-grid thead{height:21px;z-index:2}.timeline-stack-view-header{height:27px;background-color:var(--sys-color-cdt-base-container);padding:6px 10px;color:var(--sys-color-on-surface);white-space:nowrap;border-bottom:1px solid var(--sys-color-divider)}.timeline-landing-page{position:absolute;background-color:var(--sys-color-cdt-base-container)}.timeline-landing-page.legacy{justify-content:center;align-items:center;overflow:auto;font-size:13px;color:var(--sys-color-on-surface-subtle)}@media (forced-colors: active){.timeline-tree-view .data-grid .name-container .activity-icon{forced-color-adjust:none}.timeline-tree-view .data-grid tr.selected span.percent-column,\n .timeline-tree-view .data-grid tr.selected div.background-bar-text span,\n .timeline-tree-view .data-grid tr.selected .name-container .activity-link .devtools-link .timeline-link{color:HighlightText}.timeline-tree-view .data-grid .background-bar,\n .timeline-tree-view .data-grid tr:hover td:not(.bottom-filler-td){background-color:transparent}.timeline-tree-view .data-grid tr.selected .background-bar{background-color:transparent;border-bottom-color:HighlightText}}.timeline-details-range-summary{height:100%;margin:var(--sys-size-4) 0 0;& > devtools-performance-timeline-summary{min-width:192px}}.timeline-details-range-summary > devtools-related-insight-chips{display:none}.timeline-details-chip-title > div{width:12px;height:12px;border:1px solid var(--sys-color-divider);display:inline-block;margin-right:4px;content:" "}.timeline-landing-page.legacy > div{max-width:450px;margin:10px}.timeline-paint-profiler-log-split > div:last-child{background-color:var(--color-background-elevation-1);z-index:0}.timeline-layers-view > div:last-child,\n.timeline-layers-view-properties > div:last-child{background-color:var(--color-background-elevation-1)}.timeline.panel .status-pane-container > div{pointer-events:auto}.timeline-tree-view .data-grid .name-container div{flex:none}devtools-performance-third-party-tree-view{.background-bar-container{display:none}.timeline-tree-view devtools-toolbar{border:0}.timeline-tree-view .data-grid .odd{background:none}.timeline-tree-view .data-grid{border-width:0!important;th{background-color:var(--sys-color-cdt-base-container);font-weight:var(--ref-typeface-weight-medium);text-align:center;&.site-column{text-align:left}}tr .numeric-column,\n tr .site-column{border-left:none;border-bottom:var(--sys-size-1) solid var(--sys-color-divider);contain:strict;padding:0;line-height:21px}.bottom-filler-td,\n th.sortable{border:none}tr{height:22px}devtools-button{display:inline-flex;visibility:hidden;margin:0 8px 0 4px;vertical-align:top}tr.revealed:hover,\n tr.selected{devtools-button{visibility:visible}}.corner,\n &.data-grid-fits-viewport .corner{display:none}.data-grid-resizer:hover{background:linear-gradient(to right,transparent,transparent 2px,var(--sys-color-divider) 2px,var(--sys-color-divider) 3px,transparent 3px) no-repeat 0 0 /100% 100%}}.widget.vbox.timeline-tree-view{max-width:min(100%,550px);min-width:350px;padding:0 0 0 var(--sys-size-6);border-left:var(--sys-size-1) solid var(--sys-color-divider)}.timeline-tree-view .data-grid .name-container{display:block;padding-left:2px;.activity-name{display:inline}.activity-icon-container{display:none}.entity-badge{margin-left:var(--sys-size-4);font-weight:var(--ref-typeface-weight-medium);padding:0 var(--sys-size-2);background-color:var(--sys-color-tonal-container);border-radius:var(--sys-shape-corner-extra-small);height:16px;line-height:16px;font-size:var(--sys-typescale-body5-size);display:inline-block}}}devtools-feedback-button{float:right}devtools-toolbar{.history-dropdown-button{width:var(--sys-size-23);height:var(--sys-size-9);border-radius:var(--sys-shape-corner-extra-small);text-align:left;display:flex;padding-right:var(--sys-size-5);&:hover{background-color:var(--sys-color-state-hover-on-subtle)}&:active{background-color:var(--sys-color-state-ripple-neutral-on-subtle)}&:hover:active{background:linear-gradient(var(--sys-color-state-hover-on-subtle),var(--sys-color-state-hover-on-subtle)),linear-gradient(var(--sys-color-state-ripple-neutral-on-subtle),var(--sys-color-state-ripple-neutral-on-subtle))}&:focus-visible{outline:var(--sys-size-2) solid var(--sys-color-state-focus-ring)}&[disabled]{pointer-events:none;color:var(--sys-color-state-disabled);background-color:var(--sys-color-state-disabled-container);.content::after{background-color:var(--sys-color-state-disabled)}}& > .content{margin-left:5px;padding-right:5px;overflow:hidden;text-overflow:ellipsis;flex:1 1;min-width:35px;&::after{float:right;user-select:none;mask-image:var(--image-file-triangle-down);width:14px;height:14px;content:"";position:absolute;background-color:var(--icon-default);right:var(--sys-size-3);top:var(--sys-size-3)}}}@media (forced-colors: active){.history-dropdown-button[disabled]{opacity:100%}.history-dropdown-button > .content::after{background-color:ButtonText}.history-dropdown-button[disabled] > .content::after{background-color:GrayText}}}\n/*# sourceURL=${import.meta.resolve("./timelinePanel.css")} */\n`},_i={cssText:`.timeline-status-dialog{display:flex;flex-direction:column;padding:16px 16px 12px;align-self:center;background-color:var(--sys-color-cdt-base-container);box-shadow:var(--drop-shadow);border-radius:10px}.status-dialog-line{margin:2px;height:14px;min-height:auto;display:flex;align-items:baseline;font-variant-numeric:tabular-nums}.status-dialog-line .label{display:inline-block;width:80px;text-align:right;color:var(--sys-color-on-surface);margin-right:10px}.timeline-status-dialog .progress .indicator-container{display:inline-block;width:200px;height:8px;background-color:var(--sys-color-surface5)}.timeline-status-dialog .progress .indicator{background-color:var(--sys-color-primary);height:100%;width:0;margin:0}.timeline-status-dialog .stop-button{margin-top:8px;height:100%;align-self:flex-end}.timeline-status-dialog .stop-button button{border-radius:12px}@media (forced-colors: active){.timeline-status-dialog{border:1px solid canvastext}.timeline-status-dialog .progress .indicator-container{border:1px solid ButtonText;background-color:ButtonFace}.timeline-status-dialog .progress .indicator{forced-color-adjust:none;background-color:ButtonText}}:host{container-type:inline-size}@container (max-width: 326px){.timeline-status-dialog{box-shadow:none;.stop-button{align-self:center}}.status-dialog-line{flex-direction:column;.label{display:none}}}\n/*# sourceURL=${import.meta.resolve("./timelineStatusDialog.css")} */\n`};const Wi={frameStart:"Frame start",drawFrame:"Draw frame",layout:"Layout",rasterizing:"Rasterizing",drawing:"Drawing",painting:"Painting",system:"System",idle:"Idle",loading:"Loading",experience:"Experience",scripting:"Scripting",rendering:"Rendering",gpu:"GPU",async:"Async",messaging:"Messaging"},Vi=e.i18n.registerUIStrings("panels/timeline/UIDevtoolsUtils.ts",Wi),Gi=e.i18n.getLocalizedString.bind(void 0,Vi);let zi=null,ji=null;class $i{static isUiDevTools(){return"true"===d.Runtime.Runtime.queryParam("uiDevTools")}static categorizeEvents(){if(zi)return zi;const e=Ki,t=$i.categories(),i=t.drawing,n=t.rasterizing,r=t.layout,a=t.painting,o=t.other,l={},{TimelineRecordStyle:d}=s.EntryStyles;return l[e.ViewPaint]=new d("View::Paint",a),l[e.ViewOnPaint]=new d("View::OnPaint",a),l[e.ViewPaintChildren]=new d("View::PaintChildren",a),l[e.ViewOnPaintBackground]=new d("View::OnPaintBackground",a),l[e.ViewOnPaintBorder]=new d("View::OnPaintBorder",a),l[e.LayerPaintContentsToDisplayList]=new d("Layer::PaintContentsToDisplayList",a),l[e.ViewLayout]=new d("View::Layout",r),l[e.ViewLayoutBoundsChanged]=new d("View::Layout(bounds_changed)",r),l[e.RasterTask]=new d("RasterTask",n),l[e.RasterizerTaskImplRunOnWorkerThread]=new d("RasterizerTaskImpl::RunOnWorkerThread",n),l[e.DirectRendererDrawFrame]=new d("DirectRenderer::DrawFrame",i),l[e.BeginFrame]=new d(Gi(Wi.frameStart),i,!0),l[e.DrawFrame]=new d(Gi(Wi.drawFrame),i,!0),l[e.NeedsBeginFrameChanged]=new d("NeedsBeginFrameChanged",i,!0),l[e.ThreadControllerImplRunTask]=new d("ThreadControllerImpl::RunTask",o),zi=l,l}static categories(){if(ji)return ji;const{TimelineCategory:e,EventCategory:t}=s.EntryStyles;return ji={layout:new e(t.LAYOUT,Gi(Wi.layout),!0,"--app-color-loading-children","--app-color-loading"),rasterizing:new e(t.RASTERIZING,Gi(Wi.rasterizing),!0,"--app-color-children","--app-color-scripting"),drawing:new e(t.DRAWING,Gi(Wi.drawing),!0,"--app-color-rendering-children","--app-color-rendering"),painting:new e(t.PAINTING,Gi(Wi.painting),!0,"--app-color-painting-children","--app-color-painting"),other:new e(t.OTHER,Gi(Wi.system),!1,"--app-color-system-children","--app-color-system"),idle:new e(t.IDLE,Gi(Wi.idle),!1,"--app-color-idle-children","--app-color-idle"),loading:new e(t.LOADING,Gi(Wi.loading),!1,"--app-color-loading-children","--app-color-loading"),experience:new e(t.EXPERIENCE,Gi(Wi.experience),!1,"--app-color-rendering-children","--pp-color-rendering"),messaging:new e(t.MESSAGING,Gi(Wi.messaging),!1,"--app-color-messaging-children","--pp-color-messaging"),scripting:new e(t.SCRIPTING,Gi(Wi.scripting),!1,"--app-color-scripting-children","--pp-color-scripting"),rendering:new e(t.RENDERING,Gi(Wi.rendering),!1,"--app-color-rendering-children","--pp-color-rendering"),gpu:new e(t.GPU,Gi(Wi.gpu),!1,"--app-color-painting-children","--app-color-painting"),async:new e(t.ASYNC,Gi(Wi.async),!1,"--app-color-async-children","--app-color-async")},ji}static getMainCategoriesList(){return["idle","drawing","painting","rasterizing","layout","other"]}}var Ki;!function(e){e.ViewPaint="View::Paint",e.ViewOnPaint="View::OnPaint",e.ViewPaintChildren="View::PaintChildren",e.ViewOnPaintBackground="View::OnPaintBackground",e.ViewOnPaintBorder="View::OnPaintBorder",e.ViewLayout="View::Layout",e.ViewLayoutBoundsChanged="View::Layout(bounds_changed)",e.LayerPaintContentsToDisplayList="Layer::PaintContentsToDisplayList",e.DirectRendererDrawFrame="DirectRenderer::DrawFrame",e.RasterTask="RasterTask",e.RasterizerTaskImplRunOnWorkerThread="RasterizerTaskImpl::RunOnWorkerThread",e.BeginFrame="BeginFrame",e.DrawFrame="DrawFrame",e.NeedsBeginFrameChanged="NeedsBeginFrameChanged",e.ThreadControllerImplRunTask="ThreadControllerImpl::RunTask"}(Ki||(Ki={}));var qi=Object.freeze({__proto__:null,get RecordType(){return Ki},UIDevtoolsUtils:$i});class Yi extends ri{constructor(e,t,i){super(e,t,i),s.EntryStyles.setEventStylesMap($i.categorizeEvents()),s.EntryStyles.setCategories($i.categories()),s.EntryStyles.setTimelineMainEventCategories($i.getMainCategoriesList().filter(s.EntryStyles.stringIsEventCategory))}}var Ji=Object.freeze({__proto__:null,UIDevtoolsController:Yi});const Xi={dropTimelineFileOrUrlHere:"Drop timeline file or URL here",disableJavascriptSamples:"Disable JavaScript samples",enableAdvancedPaint:"Enable advanced paint instrumentation (slow)",enableSelectorStats:"Enable CSS selector stats (slow)",screenshots:"Screenshots",memory:"Memory",clear:"Clear",fixMe:"Fix me",loadProfile:"Load profile…",saveProfile:"Save profile…",saveTraceWithAnnotationsMenuOption:"Save trace",saveTraceWithoutAnnotationsMenuOption:"Save trace without annotations",captureScreenshots:"Capture screenshots",showMemoryTimeline:"Show memory timeline",captureSettings:"Capture settings",disablesJavascriptSampling:"Disables JavaScript sampling, reduces overhead when running against mobile devices",capturesAdvancedPaint:"Captures advanced paint instrumentation, introduces significant performance overhead",capturesSelectorStats:"Captures CSS selector statistics",network:"Network:",cpu:"CPU:",networkConditions:"Network conditions",failedToSaveTimelineSS:"Failed to save timeline: {PH1} ({PH2})",CpuThrottlingIsEnabled:"- CPU throttling is enabled",NetworkThrottlingIsEnabled:"- Network throttling is enabled",SignificantOverheadDueToPaint:"- Significant overhead due to paint instrumentation",SelectorStatsEnabled:"- Selector stats is enabled",JavascriptSamplingIsDisabled:"- JavaScript sampling is disabled",stoppingTimeline:"Stopping timeline…",received:"Received",processed:"Processed",close:"Close",downloadAfterError:"Download trace",recordingFailed:"Recording failed",profiling:"Profiling…",bufferUsage:"Buffer usage",loadingProfile:"Loading profile…",processingProfile:"Processing profile…",initializingProfiler:"Initializing profiler…",status:"Status",time:"Time",description:"Description",stop:"Stop",exportNormalTraces:"Basic performance traces",exportEnhancedTraces:"Enhanced performance traces",showDataAddedByExtensions:"Show data added by extensions of the Performance panel",showCustomtracks:"Show custom tracks",showSidebar:"Show sidebar",hideSidebar:"Hide sidebar",sidebarShown:"Performance sidebar shown",sidebarHidden:"Performance sidebar hidden",selectionCleared:"Selection cleared",frameSelected:"Frame selected",eventSelected:"Event {PH1} selected",learnMore:"Learn more",backToLiveMetrics:"Go back to the live metrics page",timelineScrollUpDown:"Move up/down",timelinePanLeftRight:"Move left/right",timelineZoomInOut:"Zoom in/out",timelineFastZoomInOut:"Fast zoom in/out",dimThirdParties:"Dim 3rd parties",thirdPartiesByThirdPartyWeb:"3rd parties classified by third-party-web"},Zi=e.i18n.registerUIStrings("panels/timeline/TimelinePanel.ts",Xi),Qi=e.i18n.getLocalizedString.bind(void 0,Zi);let en,tn,nn;class rn extends m.Panel.Panel{dropTarget;recordingOptionUIControls;state;recordingPageReload;millisecondsToRecordAfterLoadEvent;toggleRecordAction;recordReloadAction;#st;disableCaptureJSProfileSetting;captureLayersAndPicturesSetting;captureSelectorStatsSetting;#ot;showScreenshotsSetting;showMemorySetting;panelToolbar;panelRightToolbar;timelinePane;#Ne=new Hi;#lt={mode:"LANDING_PAGE"};#dt=null;#ct=null;#ht=new Map;#pt=new m.SplitWidget.SplitWidget(!0,!1,"timeline-panel-sidebar-state",c.Sidebar.DEFAULT_SIDEBAR_WIDTH_PX);statusPaneContainer;flameChart;searchableViewInternal;showSettingsPaneButton;showSettingsPaneSetting;settingsPane;controller;cpuProfiler;clearButton;loadButton;saveButton;homeButton;statusPane;landingPage;loader;showScreenshotsToolbarCheckbox;showMemoryToolbarCheckbox;networkThrottlingSelect;cpuThrottlingSelect;fileSelectorElement;selection=null;traceLoadStart;primaryPageTargetPromiseCallback=e=>{};primaryPageTargetPromise=new Promise((e=>{this.primaryPageTargetPromiseCallback=e}));#mt;#ut=null;#de=null;#gt=this.#vt.bind(this);#Tt=this.#pt.createShowHideSidebarButton(Qi(Xi.showSidebar),Qi(Xi.hideSidebar),Qi(Xi.sidebarShown),Qi(Xi.sidebarHidden),"timeline.sidebar");#yt=new c.Sidebar.SidebarWidget;#ft=!1;#St=null;#wt=new Map;#bt=new M.ShortcutDialog.ShortcutDialog;#Et=l.Settings.Settings.instance().createSetting("timeline.user-had-shortcuts-dialog-opened-once",!1);#Ct=document.createElement("form");#kt=m.UIUtils.createRadioButton("flamechart-selected-navigation","Modern","timeline.select-modern-navigation");#It=m.UIUtils.createRadioButton("flamechart-selected-navigation","Classic","timeline.select-classic-navigation");#Mt;constructor(e){super("timeline"),this.registerRequiredCSS(Oi);const t=document.createElement("span");t.innerHTML='<div style="\n font-size: 12px;\n transform: scale(1.25);\n color: transparent;\n background: linear-gradient(90deg,CLICK255 0 0 / 100%) 0%, rgb(255 154 0 / 100%) 10%, rgb(208 222 33 / 100%) 20%, rgb(79 220 74 / 100%) 30%, rgb(63 218 216 / 100%) 40%, rgb(47 201 226 / 100%) 50%, rgb(28 127 238 / 100%) 60%, rgb(95 21 242 / 100%) 70%, rgb(186 12 248 / 100%) 80%, rgb(251 7 217 / 100%) 90%, rgb(255 0 0 / 100%) 100%);\n -webkit-background-clip: text;\n ">💫</div>';const i=new I.Adorner.Adorner;i.classList.add("fix-perf-icon"),i.data={name:Qi(Xi.fixMe),content:t},this.#mt=e||this.#xt(),this.#Pt(),this.element.addEventListener("contextmenu",this.contextMenu.bind(this),!1),this.dropTarget=new m.DropTarget.DropTarget(this.element,[m.DropTarget.Type.File,m.DropTarget.Type.URI],Qi(Xi.dropTimelineFileOrUrlHere),this.handleDrop.bind(this)),this.recordingOptionUIControls=[],this.state="Idle",this.recordingPageReload=!1,this.millisecondsToRecordAfterLoadEvent=5e3,this.toggleRecordAction=m.ActionRegistry.ActionRegistry.instance().getAction("timeline.toggle-recording"),this.recordReloadAction=nn?null:m.ActionRegistry.ActionRegistry.instance().getAction("timeline.record-reload"),this.#st=new Ci(this.#Ne,tn),this.traceLoadStart=null,this.disableCaptureJSProfileSetting=l.Settings.Settings.instance().createSetting("timeline-disable-js-sampling",!1,"Session"),this.disableCaptureJSProfileSetting.setTitle(Qi(Xi.disableJavascriptSamples)),this.captureLayersAndPicturesSetting=l.Settings.Settings.instance().createSetting("timeline-capture-layers-and-pictures",!1,"Session"),this.captureLayersAndPicturesSetting.setTitle(Qi(Xi.enableAdvancedPaint)),this.captureSelectorStatsSetting=l.Settings.Settings.instance().createSetting("timeline-capture-selector-stats",!1,"Session"),this.captureSelectorStatsSetting.setTitle(Qi(Xi.enableSelectorStats)),this.showScreenshotsSetting=l.Settings.Settings.instance().createSetting("timeline-show-screenshots",!tn&&!nn),this.showScreenshotsSetting.setTitle(Qi(Xi.screenshots)),this.showScreenshotsSetting.addChangeListener(this.updateMiniMap,this),nn?this.showMemorySetting=null:(this.showMemorySetting=l.Settings.Settings.instance().createSetting("timeline-show-memory",!1),this.showMemorySetting.setTitle(Qi(Xi.memory)),this.showMemorySetting.addChangeListener(this.onMemoryModeChanged,this)),nn||(this.#dt=l.Settings.Settings.instance().createSetting("timeline-dim-third-parties",!1,"Session"),this.#dt.setTitle(Qi(Xi.dimThirdParties)),this.#dt.addChangeListener(this.onDimThirdPartiesChanged,this)),this.#ot=rn.extensionDataVisibilitySetting(),this.#ot.addChangeListener(this.#Rt,this),this.#ot.setTitle(Qi(Xi.showCustomtracks));const n=this.element.createChild("div","timeline-toolbar-container");n.setAttribute("jslog",`${v.toolbar()}`),n.role="toolbar",this.panelToolbar=n.createChild("devtools-toolbar","timeline-main-toolbar"),this.panelToolbar.role="presentation",this.panelToolbar.wrappable=!0,this.panelRightToolbar=n.createChild("devtools-toolbar"),this.panelRightToolbar.role="presentation",tn||(this.createSettingsPane(),this.updateShowSettingsToolbarButton()),this.timelinePane=new m.Widget.VBox;const r=this.timelinePane.element.createChild("div","hbox");r.id="timeline-overview-panel",this.#Ne.show(r),this.#Ne.addEventListener("OverviewPaneMouseMove",(e=>{this.flameChart.addTimestampMarkerOverlay(e.data.timeInMicroSeconds)})),this.#Ne.addEventListener("OverviewPaneMouseLeave",(async()=>{await this.flameChart.removeTimestampMarkerOverlay()})),this.statusPaneContainer=this.timelinePane.element.createChild("div","status-pane-container fill"),this.createFileSelector(),o.TargetManager.TargetManager.instance().addModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.Load,this.loadEventFired,this),this.flameChart=new Tr(this),this.element.addEventListener("toggle-popover",(e=>this.flameChart.togglePopover(e.detail))),this.#Mt=this.#Ft.bind(this,this.flameChart.getMainDataProvider()),this.flameChart.getMainFlameChart().addEventListener("EntryHovered",this.#Mt),this.flameChart.addEventListener("EntryLabelAnnotationClicked",(e=>{const t=yt(e.data.entry);this.select(t)})),this.searchableViewInternal=new m.SearchableView.SearchableView(this.flameChart,null),this.searchableViewInternal.setMinimumSize(0,100),this.searchableViewInternal.setMinimalSearchQuerySize(2),this.searchableViewInternal.element.classList.add("searchable-view"),this.searchableViewInternal.show(this.timelinePane.element),this.flameChart.show(this.searchableViewInternal.element),this.flameChart.setSearchableView(this.searchableViewInternal),this.searchableViewInternal.hideWidget(),this.#pt.setMainWidget(this.timelinePane),this.#pt.setSidebarWidget(this.#yt),this.#pt.enableShowModeSaving(),this.#pt.show(this.element),this.#yt.setSelectTimelineEventCallback((e=>{const t=yt(e);this.flameChart.setSelectionAndReveal(t),this.flameChart.updatePerfIssueFlameChartDimmer(e)})),this.flameChart.overlays().addEventListener(f.Overlays.TimeRangeMouseOverEvent.eventName,(e=>{const{overlay:t}=e,i=f.Overlays.traceWindowContainingOverlays([t]);i&&this.#Ne.highlightBounds(i,!1)})),this.flameChart.overlays().addEventListener(f.Overlays.TimeRangeMouseOutEvent.eventName,(()=>{this.#Ne.clearBoundsHighlight()})),this.#yt.element.addEventListener(T.SidebarInsight.InsightDeactivated.eventName,(()=>{this.#Lt(null)})),this.#yt.element.addEventListener(T.SidebarInsight.InsightActivated.eventName,(e=>{const{model:t,insightSetKey:i}=e;this.#Lt({model:t,insightSetKey:i}),"ThirdParties"===t.insightKey&&window.scheduler.postTask((()=>{this.#At()}),{priority:"background"})})),this.#yt.element.addEventListener(T.SidebarInsight.InsightProvideOverlays.eventName,(e=>{const{overlays:t,options:i}=e;window.scheduler.postTask((()=>{this.flameChart.setOverlays(t,i);const e=f.Overlays.traceWindowContainingOverlays(t);e?this.#Ne.highlightBounds(e,!0):this.#Ne.clearBoundsHighlight()}),{priority:"user-visible"})})),this.#yt.contentElement.addEventListener(T.EventRef.EventReferenceClick.eventName,(e=>{this.select(yt(e.event))})),this.#yt.element.addEventListener(c.Sidebar.RemoveAnnotation.eventName,(e=>{const{removedAnnotation:t}=e;Ve.activeManager()?.removeAnnotation(t)})),this.#yt.element.addEventListener(c.Sidebar.RevealAnnotation.eventName,(e=>{this.flameChart.revealAnnotation(e.annotation)})),this.#yt.element.addEventListener(T.SidebarInsight.InsightSetHovered.eventName,(e=>{e.bounds?this.#Ne.highlightBounds(e.bounds,!0):this.#Ne.clearBoundsHighlight()})),this.#yt.element.addEventListener(T.SidebarInsight.InsightSetZoom.eventName,(e=>{a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(e.bounds,{ignoreMiniMapBounds:!0,shouldAnimate:!0})})),this.onMemoryModeChanged(),this.populateToolbar(),this.#Nt(),this.updateTimelineControls(),nn&&o.TargetManager.TargetManager.instance().observeModels(o.ReactNativeApplicationModel.ReactNativeApplicationModel,{modelAdded:e=>{e.addEventListener("TraceRequested",(()=>this.rnPrepareForTraceCapturedInBackground()))},modelRemoved:e=>{}}),o.TargetManager.TargetManager.instance().addEventListener("SuspendStateChanged",this.onSuspendStateChanged,this);const s=o.TargetManager.TargetManager.instance().models(o.CPUProfilerModel.CPUProfilerModel);for(const e of s)for(const t of e.registeredConsoleProfileMessages)this.consoleProfileFinished(t);o.TargetManager.TargetManager.instance().observeModels(o.CPUProfilerModel.CPUProfilerModel,{modelAdded:e=>{e.addEventListener("ConsoleProfileFinished",(e=>this.consoleProfileFinished(e.data)))},modelRemoved:e=>{}}),o.TargetManager.TargetManager.instance().observeTargets({targetAdded:e=>{e===o.TargetManager.TargetManager.instance().primaryPageTarget()&&this.primaryPageTargetPromiseCallback(e)},targetRemoved:e=>{}})}async rnPrepareForTraceCapturedInBackground(){this.setUIControlsEnabled(!1),this.statusPane&&(this.statusPane.finish(),this.statusPane.updateStatus(Qi(Xi.stoppingTimeline)),this.statusPane.updateProgressBar(Qi(Xi.received),0)),this.setState("StopPending");const e=o.TargetManager.TargetManager.instance().rootTarget();if(!e)throw new Error("Could not load root target.");const t=o.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)throw new Error("Could not load primary page target.");this.controller=new ri(e,t,this),await this.controller.rnPrepareForTraceCapturedInBackground(),this.setUIControlsEnabled(!0)}#Lt(e){if(e&&!d.Runtime.experiments.isEnabled("react-native-specific-ui")&&this.#pt.showBoth(),this.#yt.setActiveInsight(e),this.flameChart.setActiveInsight(e),e){const t=new ln(e);m.Context.Context.instance().setFlavor(ln,t)}else m.Context.Context.instance().setFlavor(ln,null)}set3PCheckboxDisabled(e){d.Runtime.experiments.isEnabled("timeline-dim-unrelated-events")&&(this.#ct?.applyEnabledState(!e),this.#ct?.setIndeterminate(e))}static instance(e={forceNew:null,isNode:!1}){const{forceNew:t,isNode:i}=e;return tn=i,nn=d.Runtime.experiments.isEnabled("react-native-specific-ui"),en&&!t||(en=new rn(e.traceModel)),en}static removeInstance(){s.SourceMapsResolver.SourceMapsResolver.clearResolvedNodeNames(),t.Helpers.SyntheticEvents.SyntheticEventsManager.reset(),a.TraceBounds.BoundsManager.removeInstance(),Ve.reset(),Tt.removeInstance(),en=void 0}#xt(){const e=t.Types.Configuration.defaults();return e.showAllEvents=d.Runtime.experiments.isEnabled("timeline-show-all-events"),e.includeRuntimeCallStats=d.Runtime.experiments.isEnabled("timeline-v8-runtime-call-stats"),e.debugMode=d.Runtime.experiments.isEnabled("timeline-debug-mode"),t.TraceModel.Model.createWithAllHandlers(e)}static extensionDataVisibilitySetting(){return l.Settings.Settings.instance().createSetting("timeline-show-extension-data",!0)}searchableView(){return this.searchableViewInternal}wasShown(){super.wasShown(),m.Context.Context.instance().setFlavor(rn,this),C.userMetrics.panelLoaded("timeline","DevTools.Launch.Timeline");g.CrUXManager.instance().addEventListener("field-data-changed",this.#Dt,this),this.#Dt()}willHide(){m.Context.Context.instance().setFlavor(rn,null),this.#st.cancelIfShowing();g.CrUXManager.instance().removeEventListener("field-data-changed",this.#Dt,this)}#Dt(){const e=s.Helpers.getThrottlingRecommendations();this.cpuThrottlingSelect?.updateRecommendedOption(e.cpuOption),this.networkThrottlingSelect?.updateRecommendedConditions(e.networkConditions)}loadFromEvents(e){"Idle"===this.state&&(this.prepareToLoadTimeline(),this.loader=Ni.loadFromEvents(e,this))}getFlameChart(){return this.flameChart}getMinimap(){return this.#Ne}#Bt(e,t){return"LANDING_PAGE"===e.mode&&"LANDING_PAGE"===t.mode||("STATUS_PANE_OVERLAY"===e.mode&&"STATUS_PANE_OVERLAY"===t.mode||"VIEWING_TRACE"===e.mode&&"VIEWING_TRACE"===t.mode&&e.traceIndex===t.traceIndex)}#Ht(){this.#ut&&(s.SourceMapsResolver.SourceMapsResolver.clearResolvedNodeNames(),this.#ut.removeEventListener(s.SourceMapsResolver.SourceMappingsUpdated.eventName,this.#gt),this.#ut.uninstall(),this.#ut=null)}#Ut(){this.statusPane&&this.statusPane.remove(),this.statusPane=null}#Ot(e){if(!this.#Bt(this.#lt,e))switch("VIEWING_TRACE"===this.#lt.mode&&(this.#Ht(),this.#_t()),this.#lt=e,this.updateTimelineControls(),e.mode){case"LANDING_PAGE":return this.#Ut(),this.#Nt(),void this.searchableViewInternal.hideWidget();case"VIEWING_TRACE":return this.#Wt(),this.#Vt(),this.#Ut(),this.#Gt(),void this.flameChart.dimThirdPartiesIfRequired();case"STATUS_PANE_OVERLAY":return this.#Wt(),void this.#zt();default:r.assertNever(e,"Unsupported TimelinePanel viewMode")}}#jt(){return"VIEWING_TRACE"===this.#lt.mode?this.#lt.traceIndex:null}getParsedTraceForLayoutTests(){const e=this.#jt();if(null===e)throw new Error("No trace index active.");const t=this.#mt.parsedTrace(e);if(null===t)throw new Error("No trace engine data found.");return t}getTraceEngineRawTraceEventsForLayoutTests(){const e=this.#jt();if(null===e)throw new Error("No trace index active.");const t=this.#mt.rawTraceEvents(e);if(null===t)throw new Error("No trace engine data found.");return t}#Ft(e,i){const n=i.data;if(-1===n)return void this.#Ne.clearBoundsHighlight();const r=e.eventByIndex(n);if(!r)return;const a=t.Helpers.Timing.traceWindowFromEvent(r);this.#Ne.highlightBounds(a,!1)}loadFromCpuProfile(e){"Idle"===this.state&&null!==e&&(this.prepareToLoadTimeline(),this.loader=Ni.loadFromCpuProfile(e,this))}setState(e){this.state=e,this.updateTimelineControls()}createSettingCheckbox(e,t){const i=new m.Toolbar.ToolbarSettingCheckbox(e,t);return this.recordingOptionUIControls.push(i),i}#$t(){this.panelToolbar.hasItem(this.#Tt)||this.panelToolbar.prependToolbarItem(this.#Tt)}#Kt(){this.panelToolbar.removeToolbarItem(this.#Tt)}#qt(e){e.viewSection().appendItem(Qi(Xi.saveTraceWithAnnotationsMenuOption),(()=>{C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceExported),this.saveToFile(!1,!0)}),{jslogContext:"timeline.save-to-file-with-annotations"}),e.viewSection().appendItem(Qi(Xi.saveTraceWithoutAnnotationsMenuOption),(()=>{C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceExported),this.saveToFile()}),{jslogContext:"timeline.save-to-file-without-annotations"})}populateToolbar(){this.panelToolbar.appendToolbarItem(m.Toolbar.Toolbar.createActionButton(this.toggleRecordAction)),nn||null===this.recordReloadAction||this.panelToolbar.appendToolbarItem(m.Toolbar.Toolbar.createActionButton(this.recordReloadAction)),this.clearButton=new m.Toolbar.ToolbarButton(Qi(Xi.clear),"clear",void 0,"timeline.clear"),this.clearButton.addEventListener("Click",(()=>this.onClearButton())),this.panelToolbar.appendToolbarItem(this.clearButton),this.loadButton=new m.Toolbar.ToolbarButton(Qi(Xi.loadProfile),"import",void 0,"timeline.load-from-file"),this.loadButton.addEventListener("Click",(()=>{C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceImported),this.selectFileToLoad()})),this.saveButton=new m.Toolbar.ToolbarMenuButton(this.#qt.bind(this),!0,!0,"timeline.save-to-file-more-options","download"),this.saveButton.setTitle(Qi(Xi.saveProfile)),d.Runtime.experiments.isEnabled("timeline-enhanced-traces")&&this.saveButton.element.addEventListener("contextmenu",(e=>{if(e.preventDefault(),e.stopPropagation(),e.ctrlKey||2===e.button){const t=new m.ContextMenu.ContextMenu(e);t.saveSection().appendItem(Qi(Xi.exportNormalTraces),(()=>{this.saveToFile()})),t.saveSection().appendItem(Qi(Xi.exportEnhancedTraces),(()=>{this.saveToFile(!0)})),t.show()}else this.saveToFile()})),this.panelToolbar.appendSeparator(),this.panelToolbar.appendToolbarItem(this.loadButton),this.panelToolbar.appendToolbarItem(this.saveButton),this.panelToolbar.appendSeparator(),tn||(this.homeButton=new m.Toolbar.ToolbarButton(Qi(Xi.backToLiveMetrics),"home",void 0,"timeline.back-to-live-metrics"),this.homeButton.addEventListener("Click",(()=>{this.#Ot({mode:"LANDING_PAGE"}),this.#st.navigateToLandingPage()})),this.panelToolbar.appendToolbarItem(this.homeButton),this.panelToolbar.appendSeparator()),this.panelToolbar.appendToolbarItem(this.#st.button()),this.panelToolbar.appendSeparator(),this.panelToolbar.appendSeparator(),tn||nn||(this.showScreenshotsToolbarCheckbox=this.createSettingCheckbox(this.showScreenshotsSetting,Qi(Xi.captureScreenshots)),this.panelToolbar.appendToolbarItem(this.showScreenshotsToolbarCheckbox)),nn||null===this.showMemorySetting||(this.showMemoryToolbarCheckbox=this.createSettingCheckbox(this.showMemorySetting,Qi(Xi.showMemoryTimeline)),this.panelToolbar.appendToolbarItem(this.showMemoryToolbarCheckbox)),this.panelToolbar.appendToolbarItem(m.Toolbar.Toolbar.createActionButton("components.collect-garbage")),this.panelToolbar.appendSeparator();const e=new c.IgnoreListSetting.IgnoreListSetting;if(this.panelToolbar.appendToolbarItem(new m.Toolbar.ToolbarItem(e)),this.#dt){const e=this.createSettingCheckbox(this.#dt,Qi(Xi.thirdPartiesByThirdPartyWeb));this.#ct=e,this.panelToolbar.appendToolbarItem(e)}if(tn){const e=new $t;this.panelToolbar.appendSeparator(),this.panelToolbar.appendToolbarItem(e)}tn||(this.panelRightToolbar.appendSeparator(),this.panelRightToolbar.appendToolbarItem(this.showSettingsPaneButton))}#Yt(){const e=l.Settings.moduleSetting("flamechart-selected-navigation").get(),t=localStorage.getItem("hide-shortcuts-dialog-for-test"),i=this.#Et.get();this.#bt.prependElement(this.#Ct);const n=new m.Toolbar.ToolbarItem(this.#bt);return n.element.setAttribute("jslog",`${v.action().track({click:!0}).context("timeline.shortcuts-dialog-toggle")}`),this.panelRightToolbar.appendToolbarItem(n),this.#Jt(),this.#bt.addEventListener("click",this.#Jt.bind(this)),this.#bt.data={shortcuts:this.#Xt("classic"===e),open:!i&&"true"!==t&&!C.InspectorFrontendHost.isUnderTest()},this.#Ct.classList.add("nav-radio-buttons"),m.ARIAUtils.markAsRadioGroup(this.#Ct),this.#kt.radio.addEventListener("change",(()=>{this.#bt.data={shortcuts:this.#Xt(!1)},l.Settings.moduleSetting("flamechart-selected-navigation").set("modern")})),this.#It.radio.addEventListener("change",(()=>{this.#bt.data={shortcuts:this.#Xt(!0)},l.Settings.moduleSetting("flamechart-selected-navigation").set("classic")})),this.#Ct.appendChild(this.#kt.label),this.#Ct.appendChild(this.#It.label),this.#Et.set(!0),this.#Ct}#Jt(){const e=l.Settings.moduleSetting("flamechart-selected-navigation").get();"classic"===e?(this.#It.radio.checked=!0,C.userMetrics.navigationSettingAtFirstTimelineLoad(2)):"modern"===e&&(this.#kt.radio.checked=!0,C.userMetrics.navigationSettingAtFirstTimelineLoad(3))}#Xt(e){return e?[{title:Qi(Xi.timelineScrollUpDown),bindings:[["Shift","Scroll up/down"],["Shift","↑/↓"]]},{title:Qi(Xi.timelinePanLeftRight),bindings:[["Shift","←/→"],["Scroll left/right"],["A/D"]]},{title:Qi(Xi.timelineZoomInOut),bindings:[["Scroll up/down"],["W/S"],["+/-"]]},{title:Qi(Xi.timelineFastZoomInOut),bindings:[["Shift","W/S"],["Shift","+/-"]]}]:[{title:Qi(Xi.timelineScrollUpDown),bindings:[["Scroll up/down"],["Shift","↑/↓"]]},{title:Qi(Xi.timelinePanLeftRight),bindings:[["Shift","Scroll up/down"],["Scroll left/right"],["Shift","←/→"],["A/D"]]},{title:Qi(Xi.timelineZoomInOut),bindings:[[C.Platform.isMac()?"⌘":"Ctrl","Scroll up/down"],["W/S"],["+/-"]]},{title:Qi(Xi.timelineFastZoomInOut),bindings:[["Shift","W/S"],["Shift","+/-"]]}]}createSettingsPane(){if(this.showSettingsPaneSetting=l.Settings.Settings.instance().createSetting("timeline-show-settings-toolbar",!1),this.showSettingsPaneButton=new m.Toolbar.ToolbarSettingToggle(this.showSettingsPaneSetting,"gear",Qi(Xi.captureSettings),"gear-filled","timeline-settings-toggle"),o.NetworkManager.MultitargetNetworkManager.instance().addEventListener("ConditionsChanged",this.updateShowSettingsToolbarButton,this),o.CPUThrottlingManager.CPUThrottlingManager.instance().addEventListener("RateChanged",this.updateShowSettingsToolbarButton,this),this.disableCaptureJSProfileSetting.addChangeListener(this.updateShowSettingsToolbarButton,this),this.captureLayersAndPicturesSetting.addChangeListener(this.updateShowSettingsToolbarButton,this),this.captureSelectorStatsSetting.addChangeListener(this.updateShowSettingsToolbarButton,this),this.settingsPane=this.element.createChild("div","timeline-settings-pane"),this.settingsPane.setAttribute("jslog",`${v.pane("timeline-settings-pane").track({resize:!0})}`),this.settingsPane.append(m.SettingsUI.createSettingCheckbox(this.disableCaptureJSProfileSetting.title(),this.disableCaptureJSProfileSetting,Qi(Xi.disablesJavascriptSampling))),!nn){const e=this.settingsPane.createChild("div");e.append(Qi(Xi.cpu)),this.cpuThrottlingSelect=P.ThrottlingManager.throttlingManager().createCPUThrottlingSelector(),e.append(this.cpuThrottlingSelect.control.element),this.settingsPane.append(m.SettingsUI.createSettingCheckbox(this.captureLayersAndPicturesSetting.title(),this.captureLayersAndPicturesSetting,Qi(Xi.capturesAdvancedPaint)));const t=this.settingsPane.createChild("div");t.append(Qi(Xi.network)),t.append(this.createNetworkConditionsSelectToolbarItem().element),this.settingsPane.append(m.SettingsUI.createSettingCheckbox(this.captureSelectorStatsSetting.title(),this.captureSelectorStatsSetting,Qi(Xi.capturesSelectorStats)))}const e=this.createSettingCheckbox(this.#ot,Qi(Xi.showDataAddedByExtensions)),t=m.XLink.XLink.create("https://developer.chrome.com/docs/devtools/performance/extension",Qi(Xi.learnMore));t.style.marginLeft="5px",e.element.shadowRoot?.appendChild(t),this.settingsPane.append(e.element),this.showSettingsPaneSetting.addChangeListener(this.updateSettingsPaneVisibility.bind(this)),this.updateSettingsPaneVisibility()}createNetworkConditionsSelectToolbarItem(){const e=new m.Toolbar.ToolbarComboBox(null,Qi(Xi.networkConditions));return this.networkThrottlingSelect=P.ThrottlingManager.throttlingManager().createNetworkThrottlingSelector(e.element),e}prepareToLoadTimeline(){console.assert("Idle"===this.state),this.setState("Loading")}createFileSelector(){this.fileSelectorElement&&this.fileSelectorElement.remove(),this.fileSelectorElement=m.UIUtils.createFileSelectorElement(this.loadFromFile.bind(this),".json,.gz,.gzip,.cpuprofile"),this.timelinePane.element.appendChild(this.fileSelectorElement)}contextMenu(e){const t=e;if(-1!==this.flameChart.getMainFlameChart().coordinatesToEntryIndex(t.offsetX,t.offsetY))return;const i=new m.ContextMenu.ContextMenu(e,{useSoftMenu:!0});i.appendItemsAtLocation("timelineMenu"),i.show()}async saveToFile(e=!1,t=!1){if("Idle"!==this.state)return;if("VIEWING_TRACE"!==this.#lt.mode)return;let i=this.#mt.rawTraceEvents(this.#lt.traceIndex);const n=this.#mt.metadata(this.#lt.traceIndex);if(!i)return;e&&d.Runtime.experiments.isEnabled("timeline-compiled-sources")||(i=i.filter((e=>"disabled-by-default-devtools.v8-source-rundown-sources"!==e.cat))),n&&(n.modifications=t?Ve.activeManager()?.toJSON():void 0,n.enhancedTraceVersion=e?o.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion:void 0);const a=r.DateUtilities.toISO8601Compact(new Date);let s;s="CPUProfile"===n?.dataOrigin?`CPU-${a}.cpuprofile`:n?.enhancedTraceVersion?`EnhancedTraces-${a}.json`:`Trace-${a}.json`;try{let t;if("CPUProfile"===n?.dataOrigin){const e=i.find((e=>"CpuProfile"===e.name));if(!e?.args?.data)return;const n=e.args?.data;if(n.hasOwnProperty("cpuProfile")){t=Qt(n.cpuProfile)}}else{const r=Zt(i,{...n,sourceMaps:e?n?.sourceMaps:void 0});t=Array.from(r).join("")}if(!t)throw new Error("Trace content empty");await k.FileManager.FileManager.instance().save(s,t,!0,!1),k.FileManager.FileManager.instance().close(s)}catch(e){if(console.error(e.stack),"AbortError"===e.name)return;l.Console.Console.instance().error(Qi(Xi.failedToSaveTimelineSS,{PH1:e.message,PH2:e.name}))}}async showHistoryDropdown(){const e=await this.#st.showHistoryDropDown();e&&("LANDING_PAGE"===e.type?this.#Ot({mode:"LANDING_PAGE"}):this.#Ot({mode:"VIEWING_TRACE",traceIndex:e.parsedTraceIndex}))}navigateHistory(e){const t=this.#st.navigate(e);return t&&"TRACE_INDEX"===t.type&&this.#Ot({mode:"VIEWING_TRACE",traceIndex:t.parsedTraceIndex}),!0}#_t(){if("VIEWING_TRACE"!==this.#lt.mode)return;const e=Ve.activeManager()?.toJSON();e&&this.#mt.overrideModifications(this.#lt.traceIndex,e)}selectFileToLoad(){this.fileSelectorElement&&this.fileSelectorElement.click()}async loadFromFile(e){if("Idle"!==this.state)return;const t=e.slice(0,5e3);(await t.text()).includes("enhancedTraceVersion")?await window.scheduler.postTask((()=>{this.#Zt(e)}),{priority:"background"}):(this.loader=await Ni.loadFromFile(e,this),this.prepareToLoadTimeline()),this.createFileSelector()}#Zt(e){let t=null,i=null;const n=new URL(window.location.href),r=n.pathname.slice(0,n.pathname.lastIndexOf("/"));n.pathname=`${r}/rehydrated_devtools_app.html`,i=n.toString();const a=window;a.addEventListener("message",(function i(r){n&&r.data&&"REHYDRATING_WINDOW_READY"===r.data.type&&t?.postMessage({type:"REHYDRATING_TRACE_FILE",traceFile:e},n.origin),a.removeEventListener("message",i)})),t=a.open(i,void 0,"noopener=false,popup=true")}async loadFromURL(e){"Idle"===this.state&&(this.prepareToLoadTimeline(),this.loader=await Ni.loadFromURL(e,this))}updateMiniMap(){if("VIEWING_TRACE"!==this.#lt.mode)return;const e=this.#mt.parsedTrace(this.#lt.traceIndex),t="CPUProfile"===this.#mt.metadata(this.#lt.traceIndex)?.dataOrigin;e&&this.#Ne.setData({parsedTrace:e,isCpuProfile:t,settings:{showScreenshots:this.showScreenshotsSetting.get(),showMemory:!nn&&(this.showMemorySetting?.get()||!1)}})}onMemoryModeChanged(){this.flameChart.updateCountersGraphToggle(!nn&&(this.showMemorySetting?.get()||!1)),this.updateMiniMap(),this.doResize(),this.select(null)}onDimThirdPartiesChanged(){"VIEWING_TRACE"===this.#lt.mode&&this.flameChart.dimThirdPartiesIfRequired()}#Rt(){this.flameChart.rebuildDataForTrace()}updateSettingsPaneVisibility(){tn||(this.showSettingsPaneSetting.get()?(this.showSettingsPaneButton.setToggled(!0),this.settingsPane?.classList.remove("hidden")):(this.showSettingsPaneButton.setToggled(!1),this.settingsPane?.classList.add("hidden")))}updateShowSettingsToolbarButton(){const e=[];if(1!==o.CPUThrottlingManager.CPUThrottlingManager.instance().cpuThrottlingRate()&&e.push(Qi(Xi.CpuThrottlingIsEnabled)),o.NetworkManager.MultitargetNetworkManager.instance().isThrottling()&&e.push(Qi(Xi.NetworkThrottlingIsEnabled)),this.captureLayersAndPicturesSetting.get()&&e.push(Qi(Xi.SignificantOverheadDueToPaint)),this.captureSelectorStatsSetting.get()&&e.push(Qi(Xi.SelectorStatsEnabled)),this.disableCaptureJSProfileSetting.get()&&e.push(Qi(Xi.JavascriptSamplingIsDisabled)),this.showSettingsPaneButton.setChecked(e.length>0),this.showSettingsPaneButton.element.style.setProperty("--dot-toggle-top","16px"),this.showSettingsPaneButton.element.style.setProperty("--dot-toggle-left","15px"),e.length){const t=document.createElement("div");e.forEach((e=>{t.createChild("div").textContent=e})),this.showSettingsPaneButton.setTitle(t.textContent||"")}else this.showSettingsPaneButton.setTitle(Qi(Xi.captureSettings))}setUIControlsEnabled(e){this.recordingOptionUIControls.forEach((t=>t.setEnabled(e)))}async#Qt(){if(!this.controller)return r.DevToolsPath.EmptyUrlString;const e=this.controller.primaryPageTarget.inspectedURL(),t=this.controller.primaryPageTarget.model(o.ResourceTreeModel.ResourceTreeModel),i=t&&await t.navigationHistory();if(!t||!i)return e;const{currentIndex:n,entries:a}=i;return a[n].url}async#ei(){const e=new Promise((async(e,t)=>{if(!this.controller)return void t("Could not find TimelineController");const i=this.controller.primaryPageTarget.model(o.ResourceTreeModel.ResourceTreeModel);i?(i.addEventListener(o.ResourceTreeModel.Events.FrameNavigated,(function n(r){"about:blank"===r.data.url?e():t(`Unexpected navigation to ${r.data.url}`),i?.removeEventListener(o.ResourceTreeModel.Events.FrameNavigated,n)})),await i.navigate("about:blank")):t("Could not load resourceModel")}));await e}async#ti(){try{if(this.cpuProfiler=m.Context.Context.instance().flavor(o.CPUProfilerModel.CPUProfilerModel),!this.cpuProfiler){const e=o.TargetManager.TargetManager.instance().targets().find((e=>e.type()===o.Target.Type.NODE));if(!e)throw new Error("Could not load any Node target.");e&&(this.cpuProfiler=e.model(o.CPUProfilerModel.CPUProfilerModel))}if(this.setUIControlsEnabled(!1),this.#Ot({mode:"STATUS_PANE_OVERLAY"}),!this.cpuProfiler)throw new Error("No Node target is found.");await o.TargetManager.TargetManager.instance().suspendAllTargets("performance-timeline"),await this.cpuProfiler.startRecording(),this.recordingStarted()}catch(e){await this.recordingFailed(e.message)}}async#ii(){try{const e=o.TargetManager.TargetManager.instance().rootTarget(),t=o.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)throw new Error("Could not load primary page target.");if(!e)throw new Error("Could not load root target.");if($i.isUiDevTools()?this.controller=new Yi(e,t,this):this.controller=new ri(e,t,this),this.setUIControlsEnabled(!1),this.#Ot({mode:"STATUS_PANE_OVERLAY"}),!this.controller)throw new Error("Could not create Timeline controller");const i=await this.#Qt();this.recordingPageReload&&await this.#ei();const n={enableJSSampling:!this.disableCaptureJSProfileSetting.get(),capturePictures:this.captureLayersAndPicturesSetting.get(),captureFilmStrip:this.showScreenshotsSetting.get(),captureSelectorStats:this.captureSelectorStatsSetting.get()},r=await this.controller.startRecording(n);if(r.getError())throw new Error(r.getError());const a=this.recordingPageReload?{navigateToUrl:i}:void 0;this.recordingStarted(a)}catch(e){await this.recordingFailed(e.message)}}async startRecording(){console.assert(!this.statusPane,"Status pane is already opened."),this.setState("StartPending"),this.showRecordingStarted(),tn?await this.#ti():await this.#ii()}async stopRecording(){if(this.statusPane&&(this.statusPane.finish(),this.statusPane.updateStatus(Qi(Xi.stoppingTimeline)),this.statusPane.updateProgressBar(Qi(Xi.received),0)),this.setState("StopPending"),this.controller)return await this.controller.stopRecording(),this.setUIControlsEnabled(!0),await this.controller.dispose(),void(this.controller=null);if(this.cpuProfiler){const e=await this.cpuProfiler.stopRecording();this.setState("Idle"),this.loadFromCpuProfile(e),this.setUIControlsEnabled(!0),this.cpuProfiler=null,await o.TargetManager.TargetManager.instance().resumeAllTargets()}}async recordingFailed(e,t){this.statusPane&&this.statusPane.remove(),this.statusPane=new an({description:e,buttonText:Qi(Xi.close),hideStopButton:!0,showProgress:void 0,showTimer:void 0},(async()=>{this.statusPane?.remove(),await this.loadingComplete([],null,null)})),this.statusPane.showPane(this.statusPaneContainer),this.statusPane.updateStatus(Qi(Xi.recordingFailed)),t&&this.statusPane.enableDownloadOfEvents(t),this.setState("RecordingFailed"),this.traceLoadStart=null,this.setUIControlsEnabled(!0),this.controller&&(await this.controller.dispose(),this.controller=null),o.TargetManager.TargetManager.instance().resumeAllTargets()}onSuspendStateChanged(){this.updateTimelineControls()}consoleProfileFinished(e){this.loadFromCpuProfile(e.cpuProfile),m.InspectorView.InspectorView.instance().showPanel("timeline")}updateTimelineControls(){this.toggleRecordAction.setToggled("Recording"===this.state),this.toggleRecordAction.setEnabled("Recording"===this.state||"Idle"===this.state),nn||null===this.recordReloadAction||this.recordReloadAction.setEnabled(!tn&&"Idle"===this.state),this.#st.setEnabled("Idle"===this.state),this.clearButton.setEnabled("Idle"===this.state),this.panelToolbar.setEnabled("Loading"!==this.state),this.panelRightToolbar.setEnabled("Loading"!==this.state),this.dropTarget.setEnabled("Idle"===this.state),this.loadButton.setEnabled("Idle"===this.state),this.saveButton.setEnabled("Idle"===this.state&&this.#ni()),this.homeButton?.setEnabled("Idle"===this.state&&this.#ni()),"VIEWING_TRACE"===this.#lt.mode&&this.#$t()}async toggleRecording(){"Idle"===this.state?(this.recordingPageReload=!1,await this.startRecording(),C.userMetrics.actionTaken(C.UserMetrics.Action.TimelineStarted)):"Recording"===this.state&&await this.stopRecording()}recordReload(){"Idle"===this.state&&(this.recordingPageReload=!0,this.startRecording(),C.userMetrics.actionTaken(C.UserMetrics.Action.TimelinePageReloadStarted))}onClearButton(){this.#st.clear(),this.#mt=this.#xt(),Ve.reset(),this.#Ht(),this.flameChart.getMainDataProvider().reset(),this.flameChart.getNetworkDataProvider().reset(),this.flameChart.reset(),this.#Ot({mode:"LANDING_PAGE"})}#ni(){return"VIEWING_TRACE"===this.#lt.mode}#ri(e,t=null){if(e||d.Runtime.experiments.isEnabled("timeline-show-all-events"))return;const i=t?[t]:[Tn.visibleEventsFilter()];Tt.instance().setFilters(i)}#ai=l.Debouncer.debounce((()=>{this.#St&&(m.ARIAUtils.alert(this.#St),this.#St=null)}),1e3);#si(e){e!==this.#St&&(this.#St&&m.ARIAUtils.alert(this.#St),this.#St=e,this.#ai())}#Vt(){if("VIEWING_TRACE"!==this.#lt.mode)return;const{traceIndex:e}=this.#lt,n=this.#mt.parsedTrace(e),r=this.#mt.metadata(e),c=this.#mt.syntheticTraceEventsManager(e);if(!n||!c)return console.error(`setModelForActiveTrace was called with an invalid trace index: ${e}`),void this.#Ot({mode:"LANDING_PAGE"});t.Helpers.SyntheticEvents.SyntheticEventsManager.activate(c),i.LineLevelProfile.Performance.instance().reset(),this.#Ne.reset(),a.TraceBounds.BoundsManager.instance().resetWithNewBounds(n.Meta.traceBounds);const h=Ve.initAndActivateModificationsManager(this.#mt,e);h||console.error("ModificationsManager could not be created or activated."),this.statusPane?.updateProgressBar(Qi(Xi.processed),70);const p=this.#mt.traceInsights(e);this.flameChart.setInsights(p,this.#wt),this.flameChart.setModel(n,r),this.flameChart.resizeToPreferredHeights(),this.flameChart.setSelectionAndReveal(null),this.#yt.setParsedTrace(n,r),this.searchableViewInternal.showWidget();const m=this.#ht.get(e)??null;this.#ri(n.Meta.traceIsGeneric,m),h?.addEventListener(We.eventName,(e=>{const t=oe(e);t&&this.#si(t);const{overlay:i,action:n}=e;"Add"===n?this.flameChart.addOverlay(i):"Remove"===n?this.flameChart.removeOverlay(i):"UpdateTimeRange"===n&&ne(i)?this.flameChart.updateExistingOverlay(i,{bounds:i.bounds}):"UpdateLinkToEntry"===n&&re(i)?this.flameChart.updateExistingOverlay(i,{entryTo:i.entryTo}):"EnterLabelEditState"===n&&ae(i)&&this.flameChart.enterLabelEditMode(i);const r=h.getAnnotations(),a=this.buildColorsAnnotationsMap(r);this.#yt.setAnnotations(r,a)}));const u=this.flameChart.getMainDataProvider().compatibilityTracksAppenderInstance().threadAppenders().at(0);if(u){const e=t.Extras.MainThreadActivity.calculateWindow(n.Meta.traceBounds,u.getEntries());a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(e)}const g=Ve.activeManager();if(g){const e=g.getAnnotations(),t=this.buildColorsAnnotationsMap(e);this.#yt.setAnnotations(e,t),this.flameChart.bulkAddOverlays(g.getOverlays())}if(i.LineLevelProfile.Performance.instance().reset(),n?.Samples.profilesInProcess.size){const e=o.TargetManager.TargetManager.instance().primaryPageTarget(),t=Array.from(n.Samples.profilesInProcess).flatMap((([e,t])=>Array.from(t.values()).map((e=>e.parsedProfile))));for(const n of t)i.LineLevelProfile.Performance.instance().appendCPUProfile(n,e)}if(this.#de=new s.EntityMapper.EntityMapper(n),this.#ut=new s.SourceMapsResolver.SourceMapsResolver(n,this.#de),this.#ut.addEventListener(s.SourceMapsResolver.SourceMappingsUpdated.eventName,this.#gt),this.#ut.install(),this.#de=new s.EntityMapper.EntityMapper(n),this.statusPane?.updateProgressBar(Qi(Xi.processed),80),this.updateMiniMap(),this.statusPane?.updateProgressBar(Qi(Xi.processed),90),this.updateTimelineControls(),this.#Lt(null),this.#yt.setInsights(p),this.#wt.clear(),p)for(const[e,t]of p)for(const i of Object.values(t.model)){let t=i.relatedEvents;t?Array.isArray(t)&&(t=new Map(t.map((e=>[e,[]])))):t=new Map;for(const[n,r]of t.entries()){const t=this.#wt.get(n)??[];this.#wt.set(n,t),t.push({insightLabel:i.title,messages:r,activateInsight:()=>{this.#Lt({model:i,insightSetKey:e})}})}}this.#Gt(),1===this.#mt.size()&&d.Runtime.experiments.isEnabled("timeline-alternative-navigation")&&(this.#Yt(),"classic"===l.Settings.moduleSetting("flamechart-selected-navigation").get()?C.userMetrics.navigationSettingAtFirstTimelineLoad(0):C.userMetrics.navigationSettingAtFirstTimelineLoad(1))}#Gt(){if(null!==d.Runtime.Runtime.queryParam("disable-auto-performance-sidebar-reveal"))return;const e=this.#ft;this.#yt.userHasOpenedSidebarOnce()&&!e||this.#pt.showBoth(),this.#ft=!1}buildColorsAnnotationsMap(e){const i=new Map;for(const n of e)t.Types.File.isEntryLabelAnnotation(n)?i.set(n.entry,this.getEntryColorByEntry(n.entry)):t.Types.File.isEntriesLinkAnnotation(n)&&(i.set(n.entryFrom,this.getEntryColorByEntry(n.entryFrom)),n.entryTo&&i.set(n.entryTo,this.getEntryColorByEntry(n.entryTo)));return i}getEntryColorByEntry(e){const t=this.flameChart.getMainDataProvider().indexForEvent(e),i=this.flameChart.getNetworkDataProvider().indexForEvent(e);if(null!==t){const e=this.flameChart.getMainDataProvider().entryColor(t);return"white"===e?n.ThemeSupport.instance().getComputedValue("--app-color-system"):e}if(null!==i){return this.flameChart.getNetworkDataProvider().entryColor(i)}return console.warn("Could not get entry color for ",e),n.ThemeSupport.instance().getComputedValue("--app-color-system")}recordingStarted(e){if(e&&this.recordingPageReload&&this.controller){const t=this.controller?.primaryPageTarget.model(o.ResourceTreeModel.ResourceTreeModel);if(!t)return void this.recordingFailed("Could not navigate to original URL");t.navigate(e.navigateToUrl)}this.#Ot({mode:"STATUS_PANE_OVERLAY"}),this.setState("Recording"),this.showRecordingStarted(),this.statusPane&&(this.statusPane.enableAndFocusButton(),this.statusPane.updateStatus(Qi(Xi.profiling)),this.statusPane.updateProgressBar(Qi(Xi.bufferUsage),0),this.statusPane.startTimer())}recordingProgress(e){this.statusPane&&this.statusPane.updateProgressBar(Qi(Xi.bufferUsage),100*e)}#zt(){this.#pt.sidebarIsShowing()&&(this.#ft=!0,this.#pt.hideSidebar())}#Nt(){if(this.updateSettingsPaneVisibility(),this.#Kt(),this.#zt(),this.landingPage)this.landingPage.show(this.statusPaneContainer);else{if(nn)this.landingPage=new Jt(this.toggleRecordAction);else{const e=new c.LiveMetricsView.LiveMetricsView;e.isNode=tn,this.landingPage=x.LegacyWrapper.legacyWrapper(m.Widget.Widget,e)}this.landingPage.element.classList.add("timeline-landing-page","fill"),this.landingPage.contentElement.classList.add("fill"),this.landingPage.show(this.statusPaneContainer)}}#Wt(){this.landingPage.detach(),this.showSettingsPaneButton?.setToggled(!1),this.settingsPane?.classList.add("hidden")}async loadingStarted(){this.#Ot({mode:"STATUS_PANE_OVERLAY"}),this.statusPane&&this.statusPane.remove(),this.statusPane=new an({showProgress:!0,showTimer:void 0,hideStopButton:!0,buttonText:void 0,description:void 0},(()=>this.cancelLoading())),this.statusPane.showPane(this.statusPaneContainer),this.statusPane.updateStatus(Qi(Xi.loadingProfile)),this.loader||this.statusPane.finish(),this.traceLoadStart=t.Types.Timing.Milli(performance.now()),await this.loadingProgress(0)}async loadingProgress(e){"number"==typeof e&&this.statusPane&&this.statusPane.updateProgressBar(Qi(Xi.received),100*e)}async processingStarted(){this.statusPane?.updateStatus(Qi(Xi.processingProfile))}#Pt(){this.#mt.addEventListener(t.TraceModel.ModelUpdateEvent.eventName,(e=>{const t=e,i=Qi(Xi.processed);if("COMPLETE"===t.data.type)this.statusPane?.updateProgressBar(i,70);else if("PROGRESS_UPDATE"===t.data.type){const e=t.data.data;this.statusPane?.updateProgressBar(i,100*e.percent*.7)}}))}#vt(){this.flameChart.getMainDataProvider().timelineData(!0),this.flameChart.getMainFlameChart().update()}async loadingComplete(e,i=null,n){this.#mt.resetProcessor(),delete this.loader;const r="StopPending"===this.state;if(this.setState("Idle"),0!==e.length)try{await this.#oi(e,r,n);const a=this.#mt.lastTraceIndex();i&&this.#ht.set(a,i),this.#Ot({mode:"VIEWING_TRACE",traceIndex:a});const s=this.#mt.parsedTrace(a);if(!s)throw new Error(`Could not get trace data at index ${a}`);r&&ut.instance().registerFreshRecording(s),this.#st.addRecording({data:{parsedTraceIndex:a,type:"TRACE_INDEX"},filmStripForPreview:t.Extras.FilmStrip.fromParsedTrace(s),parsedTrace:s,metadata:n})}catch(t){this.recordingFailed(t.message,e),console.error(t)}finally{this.recordTraceLoadMetric()}else this.#mt.size()?this.#Ot({mode:"VIEWING_TRACE",traceIndex:this.#mt.lastTraceIndex()}):this.#Ot({mode:"LANDING_PAGE"})}recordTraceLoadMetric(){if(!this.traceLoadStart)return;const e=this.traceLoadStart;requestAnimationFrame((()=>{setTimeout((()=>{const i=t.Types.Timing.Milli(performance.now()),n=performance.measure("TraceLoad",{start:e,end:i}),r=t.Types.Timing.Milli(n.duration);this.element.dispatchEvent(new de(r)),C.userMetrics.performanceTraceLoad(n)}),0)}))}async#li(e,t){const i=async e=>{if(!e.sourceMapUrl||e.sourceMapUrl.startsWith("data:"))return;if(t.sourceMaps?.find((t=>t.sourceMapUrl===e.sourceMapUrl)))return;let i=e.sourceMap?.json();if(!i){const t={target:null,frameId:e.frame,initiatorUrl:e.url};i=await o.SourceMapManager.tryLoadSourceMap(e.sourceMapUrl,t)}e.url&&i&&t.sourceMaps?.push({url:e.url,sourceMapUrl:e.sourceMapUrl,sourceMap:i})};t.sourceMaps=[];const n=[];for(const t of e?.Scripts.scripts.values()??[])n.push(i(t));await Promise.all(n)}#di(e,t){if(!d.Runtime.experiments.isEnabled("timeline-experimental-insights"))return;const i=new Map;for(const e of o.TargetManager.TargetManager.instance().targets()){const t=e.model(o.DebuggerModel.DebuggerModel);if(!t)continue;const n=e.model(o.ResourceTreeModel.ResourceTreeModel),r=(n?.frames()??[]).map((e=>e.id));for(const e of r)i.set(e,t)}return async function(n){const{scriptId:r,scriptUrl:a,sourceMapUrl:s,frame:l,cachedRawSourceMap:d}=n;if(d)return new o.SourceMap.SourceMap(a,s,d);if(e){const e=await async function(e,t,n){const r=i.get(e);if(!r)return;const a=r.scriptForId(t);return!a||n&&n!==a.sourceURL?void 0:await r.sourceMapManager().sourceMapForClientPromise(a)}(l,r,a);if(e)return e}const c=s.startsWith("data:");if(!e&&t?.sourceMaps&&!c){const e=t.sourceMaps.find((e=>e.sourceMapUrl===s));if(e)return new o.SourceMap.SourceMap(a,s,e.sourceMap)}if(!e&&!c)return null;if(!a)return null;const h={target:null,frameId:l,initiatorUrl:a},p=await o.SourceMapManager.tryLoadSourceMap(s,h);return p?new o.SourceMap.SourceMap(a,s,p):null}}async#oi(e,t,i){if(await this.#mt.parse(e,{metadata:i??void 0,isFreshRecording:t,resolveSourceMap:this.#di(t,i)}),t&&i&&d.Runtime.experiments.isEnabled("timeline-enhanced-traces")){const e=this.#mt.lastTraceIndex(),t=this.#mt.parsedTrace(e);t&&await this.#li(t,i)}}loadingCompleteForTest(){}showRecordingStarted(){this.#Ot({mode:"STATUS_PANE_OVERLAY"}),this.statusPane&&this.statusPane.remove(),this.statusPane=new an({showTimer:!0,showProgress:!0,hideStopButton:!1,description:void 0,buttonText:void 0},(()=>this.stopRecording())),this.statusPane.showPane(this.statusPaneContainer),this.statusPane.updateStatus(Qi(Xi.initializingProfiler))}cancelLoading(){this.loader&&this.loader.cancel()}async loadEventFired(e){if("Recording"!==this.state||!this.recordingPageReload||!this.controller||this.controller.primaryPageTarget!==e.data.resourceTreeModel.target())return;const t=this.controller;await new Promise((e=>window.setTimeout(e,this.millisecondsToRecordAfterLoadEvent))),t===this.controller&&"Recording"===this.state&&this.stopRecording()}frameForSelection(e){if("VIEWING_TRACE"!==this.#lt.mode)return null;if(wt(e))return null;if(t.Types.Events.isSyntheticNetworkRequest(e.event))return null;const i=this.#mt.parsedTrace(this.#lt.traceIndex);if(!i)return null;const n=bt(e).max;return t.Handlers.ModelHandlers.Frames.framesWithinWindow(i.Frames.frames,n,n).at(0)||null}jumpToFrame(e){if("VIEWING_TRACE"!==this.#lt.mode)return;const i=this.selection&&this.frameForSelection(this.selection);if(!i)return;const n=this.#mt.parsedTrace(this.#lt.traceIndex);if(!n)return;let a=n.Frames.frames.indexOf(i);console.assert(a>=0,"Can't find current frame in the frame list"),a=r.NumberUtilities.clamp(a+e,0,n.Frames.frames.length-1);const s=n.Frames.frames[a];return this.#ci(t.Helpers.Timing.microToMilli(s.startTime),t.Helpers.Timing.microToMilli(s.endTime)),this.select(yt(s)),!0}#hi(e,i){if(null!==e&&null===i&&m.ARIAUtils.alert(Qi(Xi.selectionCleared)),null===i)return;if(e&&Et(e,i))return;if(wt(i))return;if(t.Types.Events.isLegacyTimelineFrame(i.event))return void m.ARIAUtils.alert(Qi(Xi.frameSelected));const n=s.EntryName.nameForEntry(i.event);m.ARIAUtils.alert(Qi(Xi.eventSelected,{PH1:n}))}select(e){this.#hi(this.selection,e),this.selection=e,this.flameChart.setSelectionAndReveal(e)}selectEntryAtTime(e,i){if(e)if(0!==e.length){for(let n=r.ArrayUtilities.upperBound(e,i,((e,t)=>e-t.ts))-1;n>=0;--n){const r=e[n],{endTime:a}=t.Helpers.Timing.eventTimingsMilliSeconds(r);if(t.Helpers.Trace.isTopLevelEvent(r)&&a<i)break;if(Tt.instance().isVisible(r)&&a>=i)return void this.select(yt(r))}this.select(null)}else this.select(null)}highlightEvent(e){this.flameChart.highlightEvent(e)}#ci(e,i){const n=a.TraceBounds.BoundsManager.instance().state();if(!n)return;const r=n.milli.timelineTraceWindow;let s=0;r.max<i?s=i-r.max:r.min>e&&(s=e-r.min),a.TraceBounds.BoundsManager.instance().setTimelineVisibleWindow(t.Helpers.Timing.traceWindowFromMilliSeconds(t.Types.Timing.Milli(r.min+s),t.Types.Timing.Milli(r.max+s)),{shouldAnimate:!0})}handleDrop(e){const t=e.items;if(!t.length)return;const i=t[0];if(C.userMetrics.actionTaken(C.UserMetrics.Action.PerfPanelTraceImported),"string"===i.kind){const t=e.getData("text/uri-list");new l.ParsedURL.ParsedURL(t).isValid&&this.loadFromURL(t)}else if("file"===i.kind){const e=t[0].getAsFile();if(!e)return;this.loadFromFile(e)}}#At(){this.flameChart.setSelectionAndReveal(null),this.flameChart.selectDetailsViewTab(ir.Details,null)}}class an extends m.Widget.VBox{status;time;progressLabel;progressBar;description;button;downloadTraceButton;startTime;timeUpdateTimer;#pi;constructor(e,t){super(!0),this.contentElement.classList.add("timeline-status-dialog"),this.contentElement.setAttribute("jslog",`${v.dialog("timeline-status").track({resize:!0})}`);const i=this.contentElement.createChild("div","status-dialog-line status");if(i.createChild("div","label").textContent=Qi(Xi.status),this.status=i.createChild("div","content"),m.ARIAUtils.markAsStatus(this.status),e.showTimer){const e=this.contentElement.createChild("div","status-dialog-line time");e.createChild("div","label").textContent=Qi(Xi.time),this.time=e.createChild("div","content")}if(e.showProgress){const e=this.contentElement.createChild("div","status-dialog-line progress");this.progressLabel=e.createChild("div","label"),this.progressBar=e.createChild("div","indicator-container").createChild("div","indicator"),m.ARIAUtils.markAsProgressBar(this.progressBar)}if("string"==typeof e.description){const t=this.contentElement.createChild("div","status-dialog-line description");t.createChild("div","label").textContent=Qi(Xi.description),this.description=t.createChild("div","content"),this.description.innerText=e.description}const n=this.contentElement.createChild("div","stop-button");this.downloadTraceButton=m.UIUtils.createTextButton(Qi(Xi.downloadAfterError),(()=>{this.#mi()}),{jslogContext:"timeline.download-after-error"}),this.downloadTraceButton.disabled=!0,this.downloadTraceButton.classList.add("hidden");const r=e.buttonText||Qi(Xi.stop);this.button=m.UIUtils.createTextButton(r,t,{jslogContext:"timeline.stop-recording"}),this.button.classList.toggle("hidden",e.hideStopButton),n.append(this.downloadTraceButton),n.append(this.button)}finish(){this.stopTimer(),this.button.classList.add("hidden")}async#mi(){if(!this.#pi||0===this.#pi.length)return;const e=`Trace-Load-Error-${r.DateUtilities.toISO8601Compact(new Date)}.json`,t=Zt(this.#pi,{}),i=Array.from(t).join("");await k.FileManager.FileManager.instance().save(e,i,!0,!1),k.FileManager.FileManager.instance().close(e)}enableDownloadOfEvents(e){this.#pi=e,this.downloadTraceButton.disabled=!1,this.downloadTraceButton.classList.remove("hidden")}remove(){this.element.parentNode?.classList.remove("tinted"),this.stopTimer(),this.element.remove()}showPane(e){this.show(e),e.classList.add("tinted")}enableAndFocusButton(){this.button.classList.remove("hidden"),this.button.focus()}updateStatus(e){this.status.textContent=e}updateProgressBar(e,t){this.progressLabel.textContent=e,this.progressBar.style.width=t.toFixed(1)+"%",m.ARIAUtils.setValueNow(this.progressBar,t),this.updateTimer()}startTimer(){this.startTime=Date.now(),this.timeUpdateTimer=window.setInterval(this.updateTimer.bind(this),100),this.updateTimer()}stopTimer(){this.timeUpdateTimer&&(clearInterval(this.timeUpdateTimer),this.updateTimer(),delete this.timeUpdateTimer)}updateTimer(){if(!this.timeUpdateTimer||!this.time)return;const t=(Date.now()-this.startTime)/1e3;this.time.textContent=e.TimeUtilities.preciseSecondsToString(t,1)}wasShown(){super.wasShown(),this.registerRequiredCSS(_i)}}let sn;class on{static instance(e={forceNew:null}){const{forceNew:t}=e;return sn&&!t||(sn=new on),sn}handleQueryParam(e){m.ViewManager.ViewManager.instance().showView("timeline").then((async()=>{await rn.instance().loadFromURL(window.decodeURIComponent(e))}))}}class ln{insight;constructor(e){this.insight=e}}var dn=Object.freeze({__proto__:null,ActionDelegate:class{handleAction(e,t){const i=e.flavor(rn);if(null===i)return!1;switch(t){case"timeline.toggle-recording":return i.toggleRecording(),!0;case"timeline.record-reload":return i.recordReload(),!0;case"timeline.save-to-file":return i.saveToFile(),!0;case"timeline.load-from-file":return i.selectFileToLoad(),!0;case"timeline.jump-to-previous-frame":return i.jumpToFrame(-1),!0;case"timeline.jump-to-next-frame":return i.jumpToFrame(1),!0;case"timeline.show-history":return i.showHistoryDropdown(),!0;case"timeline.previous-recording":return i.navigateHistory(1),!0;case"timeline.next-recording":return i.navigateHistory(-1),!0}return!1}},EventRevealer:class{async reveal(e){await m.ViewManager.ViewManager.instance().showView("timeline"),rn.instance().select(yt(e.event))}},LoadTimelineHandler:on,SelectedInsight:ln,StatusPane:an,TimelinePanel:rn,TraceRevealer:class{async reveal(e){await m.ViewManager.ViewManager.instance().showView("timeline"),rn.instance().loadFromEvents(e.traceEvents)}},headerHeight:20,rowHeight:18});const cn=new CSSStyleSheet;cn.replaceSync(pt.cssText);const hn={emptyPlaceholder:"{PH1}",timestamp:"Timestamp",interactionID:"ID",inputDelay:"Input delay",processingDuration:"Processing duration",presentationDelay:"Presentation delay",compile:"Compile",parse:"Parse",sS:"{PH1}: {PH2}",sCollected:"{PH1} collected",sSs:"{PH1} [{PH2}…{PH3}]",sSSquareBrackets:"{PH1} [{PH2}…]",learnMore:"Learn more",compilationCacheStatus:"Compilation cache status",compilationCacheSize:"Compilation cache size",compilationCacheKind:"Compilation cache kind",scriptLoadedFromCache:"script loaded from cache",failedToLoadScriptFromCache:"failed to load script from cache",scriptNotEligibleToBeLoadedFromCache:"script not eligible",collected:"Collected",function:"Function",timerId:"Timer ID",timeout:"Timeout",repeats:"Repeats",callbackId:"Callback ID",module:"Module",script:"Script",streamed:"Streamed",eagerCompile:"Compiling all functions eagerly",url:"Url",producedCacheSize:"Produced cache size",consumedCacheSize:"Consumed cache size",location:"Location",sSCurlyBrackets:"({PH1}, {PH2})",dimensions:"Dimensions",sSDimensions:"{PH1} × {PH2}",layerRoot:"Layer root",ownerElement:"Owner element",imageUrl:"Image URL",stylesheetUrl:"Stylesheet URL",elementsAffected:"Elements affected",nodesThatNeedLayout:"Nodes that need layout",sOfS:"{PH1} of {PH2}",layoutRoot:"Layout root",message:"Message",callbackFunction:"Callback function",range:"Range",allottedTime:"Allotted time",invokedByTimeout:"Invoked by timeout",type:"Type",size:"Size",details:"Details",warning:"Warning",relatedNode:"Related node",preview:"Preview",aggregatedTime:"Aggregated time",duration:"Duration",initiatorStackTrace:"Initiator stack trace",initiatedBy:"Initiated by",initiatorFor:"Initiator for",traceEvent:"Trace event",timerInstalled:"Timer installed",animationFrameRequested:"Animation frame requested",idleCallbackRequested:"Idle callback requested",recalculationForced:"Recalculation forced",firstLayoutInvalidation:"First layout invalidation",layoutForced:"Layout forced",animating:"Animating",compositingFailed:"Compositing failed",compositingFailedAcceleratedAnimationsDisabled:"Accelerated animations disabled",compositingFailedEffectSuppressedByDevtools:"Effect suppressed by DevTools ",compositingFailedInvalidAnimationOrEffect:"Invalid animation or effect",compositingFailedEffectHasUnsupportedTimingParams:"Effect has unsupported timing parameters",compositingFailedEffectHasNonReplaceCompositeMode:'Effect has composite mode other than "replace"',compositingFailedTargetHasInvalidCompositingState:"Target has invalid compositing state",compositingFailedTargetHasIncompatibleAnimations:"Target has another animation which is incompatible",compositingFailedTargetHasCSSOffset:"Target has CSS offset",compositingFailedAnimationAffectsNonCSSProperties:"Animation affects non-CSS properties",compositingFailedTransformRelatedPropertyCannotBeAcceleratedOnTarget:"Transform-related property cannot be accelerated on target",compositingFailedTransformDependsBoxSize:"Transform-related property depends on box size",compositingFailedFilterRelatedPropertyMayMovePixels:"Filter-related property may move pixels",compositingFailedUnsupportedCSSProperty:"{propertyCount, plural,\n =1 {Unsupported CSS property: {properties}}\n other {Unsupported CSS properties: {properties}}\n }",compositingFailedMixedKeyframeValueTypes:"Mixed keyframe value types",compositingFailedTimelineSourceHasInvalidCompositingState:"Timeline source has invalid compositing state",compositingFailedAnimationHasNoVisibleChange:"Animation has no visible change",compositingFailedAffectsImportantProperty:"Effect affects a property with !important",compositingFailedSVGTargetHasIndependentTransformProperty:"SVG target has independent transform property",compositingFailedUnknownReason:"Unknown Reason",stackTrace:"Stack trace",invalidations:"Invalidations ({PH1} total)",pendingFor:"Pending for",firstInvalidated:"First invalidated",paintProfiler:"Paint profiler",sAtS:"{PH1} at {PH2}",sSelf:"{PH1} (self)",sChildren:"{PH1} (children)",timeSpentInRendering:"Time spent in rendering",frame:"Frame",sAtSParentheses:"{PH1} (at {PH2})",UnknownNode:"[ unknown node ]",invalidationWithCallFrame:"{PH1} at {PH2}",outsideBreadcrumbRange:"(outside of the breadcrumb range)",entryIsHidden:"(entry is hidden)",selectorStatsTitle:"Selector stats",sSelectorStatsInfo:'Select "{PH1}" to collect detailed CSS selector matching statistics.',delay:"Delay",priority:"Priority",thirdPartyTable:"1st / 3rd party table",source:"Source",origin:"Origin"},pn=e.i18n.registerUIStrings("panels/timeline/TimelineUIUtils.ts",hn),mn=e.i18n.getLocalizedString.bind(void 0,pn);let un,gn;const{SamplesIntegrator:vn}=t.Helpers.SamplesIntegrator;class Tn{static debugModeEnabled=void 0;static getGetDebugModeEnabled(){return void 0===Tn.debugModeEnabled&&(Tn.debugModeEnabled=d.Runtime.experiments.isEnabled("timeline-debug-mode")),Tn.debugModeEnabled}static frameDisplayName(e){const t=s.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForCallFrame(e),i=t?.name||e.functionName;if(!vn.isNativeRuntimeFrame(e))return m.UIUtils.beautifyFunctionName(i);switch(vn.nativeGroup(i)){case"Compile":return mn(hn.compile);case"Parse":return mn(hn.parse)}return i}static testContentMatching(e,i,n){const r=[Tn.eventStyle(e).title];if(t.Types.Events.isProfileCall(e)&&(n?.Samples?r.push(t.Handlers.ModelHandlers.Samples.getProfileCallFunctionName(n.Samples,e)):r.push(e.callFrame.functionName)),n){const i=t.Handlers.Helpers.getNonResolvedURL(e,n);i&&r.push(i)}Tn.getGetDebugModeEnabled()?s(e,4):s(e.args,2);const a=r.join("|").match(i);return!!a&&a.length>0;function s(e,t){if(t)for(const i in e){const n=e[i];"string"==typeof n?r.push(n):"number"==typeof n?r.push(String(n)):"object"==typeof n&&null!==n&&s(n,t-1)}}}static eventStyle(e){return t.Types.Events.isProfileCall(e)&&"(idle)"===e.callFrame.functionName?new s.EntryStyles.TimelineRecordStyle(e.name,s.EntryStyles.getCategoryStyles().idle):e.cat===t.Types.Events.Categories.Console||e.cat===t.Types.Events.Categories.UserTiming?new s.EntryStyles.TimelineRecordStyle(e.name,s.EntryStyles.getCategoryStyles().scripting):s.EntryStyles.getEventStyle(e.name)??new s.EntryStyles.TimelineRecordStyle(e.name,s.EntryStyles.getCategoryStyles().other)}static eventColor(e){if(t.Types.Events.isProfileCall(e)){const t=e.callFrame;if(Tn.isUserFrame(t))return Tn.colorForId(t.url)}if(t.Types.Extensions.isSyntheticExtensionEntry(e))return h.ExtensionUI.extensionEntryColor(e);let i=Tn.eventStyle(e).category.getComputedColorValue();if("v8.parseOnBackgroundWaiting"===e.name&&(i=s.EntryStyles.getCategoryStyles().scripting.getComputedColorValue(),!i))throw new Error("Unable to parse color from getCategoryStyles().scripting.color");return i}static eventTitle(e){if(t.Types.Events.isProfileCall(e)){const t=s.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForEntry(e);return t?.name||Tn.frameDisplayName(e.callFrame)}if("EventTiming"===e.name&&t.Types.Events.isSyntheticInteraction(e))return s.EntryName.nameForEntry(e);const i=Tn.eventStyle(e).title;return t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)?i:t.Types.Events.isConsoleTimeStamp(e)&&e.args.data?mn(hn.sS,{PH1:i,PH2:e.args.data.name??e.args.data.message}):t.Types.Events.isAnimation(e)&&e.args.data.name?mn(hn.sS,{PH1:i,PH2:e.args.data.name}):t.Types.Events.isDispatch(e)?mn(hn.sS,{PH1:i,PH2:e.args.data.type}):i}static isUserFrame(e){return"0"!==e.scriptId&&!e.url?.startsWith("native ")}static async buildDetailsTextForTraceEvent(i,n){let r;const a=i.args,s=i.args?.data;switch(i.name){case"GCEvent":case"MajorGC":case"MinorGC":{const t=a.usedHeapSizeBefore-a.usedHeapSizeAfter;r=mn(hn.sCollected,{PH1:e.ByteUtilities.bytesToString(t)});break}case"FunctionCall":{const{lineNumber:e,columnNumber:n}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(i);void 0!==e&&void 0!==n&&(r=s.url+":"+(e+1)+":"+(n+1));break}case"EventDispatch":r=s?s.type:null;break;case"Paint":{const e=Tn.quadWidth(s.clip),t=Tn.quadHeight(s.clip);e&&t&&(r=mn(hn.sSDimensions,{PH1:e,PH2:t}));break}case"ParseHTML":{const e=a.beginData.startLine,t=a.endData?.endLine,i=u.ResourceUtils.displayNameForURL(a.beginData.url);r=t>=0?mn(hn.sSs,{PH1:i,PH2:e+1,PH3:t+1}):mn(hn.sSSquareBrackets,{PH1:i,PH2:e+1});break}case"V8.CompileModule":case"v8.produceModuleCache":r=u.ResourceUtils.displayNameForURL(a.fileName);break;case"V8.CompileScript":case"v8.produceCache":case"EvaluateScript":{const{lineNumber:e}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(i),n=s?.url;n&&(r=u.ResourceUtils.displayNameForURL(n)+":"+((e||0)+1));break}case"v8.wasm.compiledModule":case"v8.wasm.moduleCacheHit":{const e=a.url;e&&(r=u.ResourceUtils.displayNameForURL(e));break}case"v8.parseOnBackground":case"v8.deserializeOnBackground":case"XHRReadyStateChange":case"XHRLoad":{const e=s.url;e&&(r=u.ResourceUtils.displayNameForURL(e));break}case"TimeStamp":r=s.message;break;case"WebSocketCreate":case"WebSocketSendHandshakeRequest":case"WebSocketReceiveHandshakeResponse":case"WebSocketSend":case"WebSocketReceive":case"WebSocketDestroy":case"ResourceWillSendRequest":case"ResourceSendRequest":case"ResourceReceivedData":case"ResourceReceiveResponse":case"ResourceFinish":case"PaintImage":case"Decode Image":case"Decode LazyPixelRef":{const e=t.Handlers.Helpers.getNonResolvedURL(i,n);e&&(r=u.ResourceUtils.displayNameForURL(e));break}case"EmbedderCallback":r=s.callbackName;break;case"AsyncTask":r=s?s.name:null;break;default:r=t.Helpers.Trace.eventHasCategory(i,t.Types.Events.Categories.Console)?null:function(){const e=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(i)?.at(0)??null;if(!e)return null;return e.url+":"+(e.lineNumber+1)+":"+(e.columnNumber+1)}()}return r}static async buildDetailsNodeForTraceEvent(e,i,n,r=!1,a){let s,o=null;const l=e.args,d=e.args?.data;switch(e.name){case"GCEvent":case"MajorGC":case"MinorGC":case"EventDispatch":case"Paint":case"Animation":case"EmbedderCallback":case"ParseHTML":case"v8.wasm.streamFromResponseCallback":case"v8.wasm.compiledModule":case"v8.wasm.moduleCacheHit":case"v8.wasm.cachedModule":case"v8.wasm.moduleCacheInvalid":case"WebSocketCreate":case"WebSocketSendHandshakeRequest":case"WebSocketReceiveHandshakeResponse":case"WebSocketSend":case"WebSocketReceive":case"WebSocketDestroy":s=await Tn.buildDetailsTextForTraceEvent(e,a);break;case"PaintImage":case"Decode Image":case"Decode LazyPixelRef":case"XHRReadyStateChange":case"XHRLoad":case"ResourceWillSendRequest":case"ResourceSendRequest":case"ResourceReceivedData":case"ResourceReceiveResponse":case"ResourceFinish":{const i=t.Handlers.Helpers.getNonResolvedURL(e,a);if(i){const e={tabStop:!0,showColumnNumber:!1,inlineFrameIndex:0};o=S.Linkifier.Linkifier.linkifyURL(i,e)}break}case"FunctionCall":{o=document.createElement("span");const a=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(e)?.at(0);t.Types.Events.isFunctionCall(e)&&a&&m.UIUtils.createTextChild(o,Tn.frameDisplayName({...a,scriptId:String(a.scriptId)}));const s=this.linkifyLocation({scriptId:d.scriptId,url:d.url,lineNumber:a?.lineNumber||0,columnNumber:a?.columnNumber,target:i,isFreshRecording:r,linkifier:n,omitOrigin:!0});s&&(m.UIUtils.createTextChild(o," @ "),o.appendChild(s));break}case"V8.CompileModule":case"v8.produceModuleCache":o=this.linkifyLocation({scriptId:null,url:l.fileName,lineNumber:0,columnNumber:0,target:i,isFreshRecording:r,linkifier:n});break;case"V8.CompileScript":case"v8.produceCache":case"EvaluateScript":{const a=d.url;if(a){const{lineNumber:s}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(e);o=this.linkifyLocation({scriptId:null,url:a,lineNumber:s||0,columnNumber:0,target:i,isFreshRecording:r,linkifier:n,omitOrigin:!0})}break}case"v8.deserializeOnBackground":case"v8.parseOnBackground":{const e=d.url;e&&(o=this.linkifyLocation({scriptId:null,url:e,lineNumber:0,columnNumber:0,target:i,isFreshRecording:r,linkifier:n,omitOrigin:!0}));break}default:t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)||t.Types.Events.isUserTiming(e)||t.Types.Extensions.isSyntheticExtensionEntry(e)||t.Types.Events.isProfileCall(e)?s=null:o=this.linkifyTopCallFrame(e,i,n,r)??null}return!o&&s&&(o=document.createTextNode(s)),o}static linkifyLocation(e){const{scriptId:t,url:i,lineNumber:n,columnNumber:r,isFreshRecording:a,linkifier:s,target:o,omitOrigin:l}=e,d={lineNumber:n,columnNumber:r,showColumnNumber:!0,inlineFrameIndex:0,className:"timeline-details",tabStop:!0,omitOrigin:l};return a?s.linkifyScriptLocation(o,t,i,n,d):S.Linkifier.Linkifier.linkifyURL(i,d)}static linkifyTopCallFrame(e,i,n,r=!1){let a=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(e)?.[0];if(t.Types.Events.isProfileCall(e)&&(a=e.callFrame),!a)return null;const s={className:"timeline-details",tabStop:!0,inlineFrameIndex:0,showColumnNumber:!0,columnNumber:a.columnNumber,lineNumber:a.lineNumber};return r?n.maybeLinkifyConsoleCallFrame(i,a,{showColumnNumber:!0,inlineFrameIndex:0}):S.Linkifier.Linkifier.linkifyURL(a.url,s)}static buildDetailsNodeForMarkerEvents(e){let t="https://web.dev/user-centric-performance-metrics/",i="page performance metrics";switch(e.name){case"largestContentfulPaint::Candidate":t="https://web.dev/lcp/",i="largest contentful paint";break;case"firstContentfulPaint":t="https://web.dev/first-contentful-paint/",i="first contentful paint"}return m.Fragment.html`<div>${m.XLink.XLink.create(t,mn(hn.learnMore),void 0,void 0,"learn-more")} about ${i}.</div>`}static buildConsumeCacheDetails(t,i){if("number"==typeof t.consumedCacheSize){i.appendTextRow(mn(hn.compilationCacheStatus),mn(hn.scriptLoadedFromCache)),i.appendTextRow(mn(hn.compilationCacheSize),e.ByteUtilities.bytesToString(t.consumedCacheSize));const n=t.cacheKind;n&&i.appendTextRow(mn(hn.compilationCacheKind),n)}else"cacheRejected"in t&&t.cacheRejected?i.appendTextRow(mn(hn.compilationCacheStatus),mn(hn.failedToLoadScriptFromCache)):i.appendTextRow(mn(hn.compilationCacheStatus),mn(hn.scriptNotEligibleToBeLoadedFromCache))}static async buildTraceEventDetails(i,n,r,a,o){const h=dt(i,n),{duration:p}=t.Helpers.Timing.eventTimingsMicroSeconds(n),m=kn(n,i),u=await t.Extras.FetchNodes.extractRelatedDOMNodesFromEvent(i,n);let g,v=!1;if(h&&void 0===n[fn]){let e=null;const r=t.Handlers.Helpers.getNonResolvedURL(n,i);r?e=await S.ImagePreview.ImagePreview.build(h,r,!1,{imageAltText:S.ImagePreview.ImagePreview.defaultAltTextForImageURL(r),precomputedFeatures:void 0,align:"start"}):t.Types.Events.isPaint(n)&&(e=await Tn.buildPicturePreviewContent(i,n,h)),n[fn]=e}const T=new wn(dt(i,n),r),y=this.eventColor(n),f=i&&Cn(i,n)?Tn.markerStyleForEvent(n).color:y;T.addSection(Tn.eventTitle(n),f);const w=n.args,b=n.args?.data,E=i.Initiators.eventToInitiator.get(n)??null,C=i.Initiators.initiatorToEvents.get(n)??null;let k=null;if(i){const e=c.DetailsView.buildWarningElementsForEvent(n,i);for(const t of e)T.appendElementRow(mn(hn.warning),t,!0)}if(t.Helpers.Trace.eventHasCategory(n,t.Types.Events.Categories.UserTiming)){const t=En(n,i);T.appendTextRow(mn(hn.timestamp),e.TimeUtilities.preciseMillisToString(t,1))}if(0!==p&&!Number.isNaN(p)){const e=G(p,m);T.appendTextRow(mn(hn.duration),e)}if(t.Types.Events.isPerformanceMark(n)&&n.args.data?.detail){const e=Tn.renderObjectJson(JSON.parse(n.args.data?.detail));T.appendElementRow(mn(hn.details),e)}if(t.Types.Events.isSyntheticUserTiming(n)&&n.args?.data?.beginEvent.args.detail){const e=Tn.renderObjectJson(JSON.parse(n.args?.data?.beginEvent.args.detail));T.appendElementRow(mn(hn.details),e)}if(i.Meta.traceIsGeneric)return Tn.renderEventJson(n,T),T.fragment;if(t.Types.Events.isV8Compile(n)){if(k=n.args.data?.url,k){const{lineNumber:e,columnNumber:r}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(n);T.appendLocationRow(mn(hn.script),k,e||0,r,void 0,!0);const a=this.getOriginWithEntity(o,i,n);a&&T.appendElementRow(mn(hn.origin),a),v=!0}Boolean(n.args.data?.eager)&&T.appendTextRow(mn(hn.eagerCompile),!0);const e=Boolean(n.args.data?.streamed);T.appendTextRow(mn(hn.streamed),e+(e?"":`: ${n.args.data?.notStreamedReason||""}`)),n.args.data&&Tn.buildConsumeCacheDetails(n.args.data,T)}if(t.Types.Extensions.isSyntheticExtensionEntry(n))for(const[e,t]of n.args.properties||[])T.appendTextRow(e,t);const I=Boolean(i&&ut.instance().recordingIsFresh(i));switch(n.name){case"GCEvent":case"MajorGC":case"MinorGC":{const t=w.usedHeapSizeBefore-w.usedHeapSizeAfter;T.appendTextRow(mn(hn.collected),e.ByteUtilities.bytesToString(t));break}case"ProfileCall":{const e=n,t=s.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(i,e);if(!t)break;const r=e.callFrame,a=d.Runtime.experiments.isEnabled("react-native-specific-ui");if(a?T.reactNativeAppendLocationRow(mn(hn.source),t,r.scriptId,r.lineNumber||0,r.columnNumber,void 0,!0):T.appendLocationRow(mn(hn.source),t,r.lineNumber||0,r.columnNumber,void 0,!0),!a){const t=this.getOriginWithEntity(o,i,e);t&&T.appendElementRow(mn(hn.origin),t)}v=!0;break}case"FunctionCall":{const e=await Tn.buildDetailsNodeForTraceEvent(n,dt(i,n),r,I,i);if(e){T.appendElementRow(mn(hn.function),e);const t=this.getOriginWithEntity(o,i,n);t&&T.appendElementRow(mn(hn.origin),t),v=!0}break}case"TimerFire":case"TimerInstall":case"TimerRemove":T.appendTextRow(mn(hn.timerId),b.timerId),"TimerInstall"===n.name&&(T.appendTextRow(mn(hn.timeout),e.TimeUtilities.millisToString(b.timeout)),T.appendTextRow(mn(hn.repeats),!b.singleShot));break;case"SchedulePostTaskCallback":case"RunPostTaskCallback":T.appendTextRow(mn(hn.delay),e.TimeUtilities.millisToString(b.delay)),T.appendTextRow(mn(hn.priority),b.priority);break;case"FireAnimationFrame":T.appendTextRow(mn(hn.callbackId),b.id);break;case"V8.CompileModule":T.appendLocationRow(mn(hn.module),w.fileName,0);break;case"V8.CompileScript":break;case"v8.produceModuleCache":k=b&&b.url,T.appendTextRow(mn(hn.compilationCacheSize),e.ByteUtilities.bytesToString(b.producedCacheSize));break;case"v8.produceCache":if(k=b&&b.url,k){const{lineNumber:e,columnNumber:r}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(n);T.appendLocationRow(mn(hn.script),k,e||0,r,void 0,!0);const a=this.getOriginWithEntity(o,i,n);a&&T.appendElementRow(mn(hn.origin),a),v=!0}T.appendTextRow(mn(hn.compilationCacheSize),e.ByteUtilities.bytesToString(b.producedCacheSize));break;case"EvaluateScript":if(k=b&&b.url,k){const{lineNumber:e,columnNumber:r}=t.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(n);T.appendLocationRow(mn(hn.script),k,e||0,r,void 0,!0);const a=this.getOriginWithEntity(o,i,n);a&&T.appendElementRow(mn(hn.origin),a),v=!0}break;case"v8.wasm.streamFromResponseCallback":case"v8.wasm.compiledModule":case"v8.wasm.cachedModule":case"v8.wasm.moduleCacheHit":case"v8.wasm.moduleCacheInvalid":if(b){k=w.url,k&&T.appendTextRow(mn(hn.url),k);const e=w.producedCachedSize;e&&T.appendTextRow(mn(hn.producedCacheSize),e);const t=w.consumedCachedSize;t&&T.appendTextRow(mn(hn.consumedCacheSize),t)}break;case"Paint":{const e=b.clip;T.appendTextRow(mn(hn.location),mn(hn.sSCurlyBrackets,{PH1:e[0],PH2:e[1]}));const t=Tn.quadWidth(e),i=Tn.quadHeight(e);T.appendTextRow(mn(hn.dimensions),mn(hn.sSDimensions,{PH1:t,PH2:i}))}case"PaintSetup":case"Rasterize":case"ScrollLayer":g=mn(hn.layerRoot);break;case"PaintImage":case"Decode LazyPixelRef":case"Decode Image":case"Draw LazyPixelRef":if(g=mn(hn.ownerElement),k=t.Handlers.Helpers.getNonResolvedURL(n,i),k){const e={tabStop:!0,showColumnNumber:!1,inlineFrameIndex:0};T.appendElementRow(mn(hn.imageUrl),S.Linkifier.Linkifier.linkifyURL(k,e))}break;case"ParseAuthorStyleSheet":if(k=b.styleSheetUrl,k){const e={tabStop:!0,showColumnNumber:!1,inlineFrameIndex:0};T.appendElementRow(mn(hn.stylesheetUrl),S.Linkifier.Linkifier.linkifyURL(k,e))}break;case"UpdateLayoutTree":{T.appendTextRow(mn(hn.elementsAffected),w.elementCount);const e=l.Settings.Settings.instance().createSetting("timeline-capture-selector-stats",!1);if(!e.get()){const t=document.createElement("span");t.textContent=mn(hn.sSelectorStatsInfo,{PH1:e.title()}),T.appendElementRow(mn(hn.selectorStatsTitle),t)}break}case"Layout":{const e=w.beginData;T.appendTextRow(mn(hn.nodesThatNeedLayout),mn(hn.sOfS,{PH1:e.dirtyObjects,PH2:e.totalObjects})),g=mn(hn.layoutRoot);break}case"ConsoleTime":T.appendTextRow(mn(hn.message),n.name);break;case"WebSocketCreate":case"WebSocketSendHandshakeRequest":case"WebSocketReceiveHandshakeResponse":case"WebSocketSend":case"WebSocketReceive":case"WebSocketDestroy":if(t.Types.Events.isWebSocketTraceEvent(n)){const e=c.DetailsView.buildRowsForWebSocketEvent(n,i);for(const{key:t,value:i}of e)T.appendTextRow(t,i)}break;case"EmbedderCallback":T.appendTextRow(mn(hn.callbackFunction),b.callbackName);break;case"Animation":{if(!t.Types.Events.isSyntheticAnimation(n))break;const{displayName:e,nodeName:i}=n.args.data.beginEvent.args.data;e&&T.appendTextRow(mn(hn.animating),e),!u?.size&&i&&T.appendTextRow(mn(hn.relatedNode),i);const r=t.Insights.Models.CLSCulprits.getNonCompositedFailure(n);if(!r.length)break;const a=new Set(r.map((e=>e.failureReasons)).flat().filter(Boolean)),s=new Set(r.map((e=>e.unsupportedProperties)).flat().filter(Boolean));if(0===a.size)T.appendElementRow(mn(hn.compositingFailed),mn(hn.compositingFailedUnknownReason),!0);else for(const e of a){let t;switch(e){case"ACCELERATED_ANIMATIONS_DISABLED":t=mn(hn.compositingFailedAcceleratedAnimationsDisabled);break;case"EFFECT_SUPPRESSED_BY_DEVTOOLS":t=mn(hn.compositingFailedEffectSuppressedByDevtools);break;case"INVALID_ANIMATION_OR_EFFECT":t=mn(hn.compositingFailedInvalidAnimationOrEffect);break;case"EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS":t=mn(hn.compositingFailedEffectHasUnsupportedTimingParams);break;case"EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE":t=mn(hn.compositingFailedEffectHasNonReplaceCompositeMode);break;case"TARGET_HAS_INVALID_COMPOSITING_STATE":t=mn(hn.compositingFailedTargetHasInvalidCompositingState);break;case"TARGET_HAS_INCOMPATIBLE_ANIMATIONS":t=mn(hn.compositingFailedTargetHasIncompatibleAnimations);break;case"TARGET_HAS_CSS_OFFSET":t=mn(hn.compositingFailedTargetHasCSSOffset);break;case"ANIMATION_AFFECTS_NON_CSS_PROPERTIES":t=mn(hn.compositingFailedAnimationAffectsNonCSSProperties);break;case"TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET":t=mn(hn.compositingFailedTransformRelatedPropertyCannotBeAcceleratedOnTarget);break;case"TRANSFROM_BOX_SIZE_DEPENDENT":t=mn(hn.compositingFailedTransformDependsBoxSize);break;case"FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS":t=mn(hn.compositingFailedFilterRelatedPropertyMayMovePixels);break;case"UNSUPPORTED_CSS_PROPERTY":t=mn(hn.compositingFailedUnsupportedCSSProperty,{propertyCount:s.size,properties:new Intl.ListFormat(void 0,{style:"short",type:"conjunction"}).format(s)});break;case"MIXED_KEYFRAME_VALUE_TYPES":t=mn(hn.compositingFailedMixedKeyframeValueTypes);break;case"TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE":t=mn(hn.compositingFailedTimelineSourceHasInvalidCompositingState);break;case"ANIMATION_HAS_NO_VISIBLE_CHANGE":t=mn(hn.compositingFailedAnimationHasNoVisibleChange);break;case"AFFECTS_IMPORTANT_PROPERTY":t=mn(hn.compositingFailedAffectsImportantProperty);break;case"SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY":t=mn(hn.compositingFailedSVGTargetHasIndependentTransformProperty);break;default:t=mn(hn.compositingFailedUnknownReason)}t&&T.appendElementRow(mn(hn.compositingFailed),t,!0)}break}case"ParseHTML":{const e=w.beginData,t=e.startLine-1,i=w.endData?w.endData.endLine-1:void 0;k=e.url,k&&T.appendLocationRange(mn(hn.range),k,t,i);break}case"FireIdleCallback":T.appendTextRow(mn(hn.allottedTime),e.TimeUtilities.millisToString(b.allottedMilliseconds)),T.appendTextRow(mn(hn.invokedByTimeout),b.timedOut);case"RequestIdleCallback":case"CancelIdleCallback":T.appendTextRow(mn(hn.callbackId),b.id);break;case"EventDispatch":T.appendTextRow(mn(hn.type),b.type);break;case"largestContentfulPaint::Candidate":T.appendTextRow(mn(hn.type),String(b.type)),T.appendTextRow(mn(hn.size),String(b.size));case"firstPaint":case"firstContentfulPaint":case"MarkLoad":case"MarkDOMContent":{const r=En(n,i);T.appendTextRow(mn(hn.timestamp),e.TimeUtilities.preciseMillisToString(r,1)),t.Types.Events.isMarkerEvent(n)&&T.appendElementRow(mn(hn.details),Tn.buildDetailsNodeForMarkerEvents(n));break}case"EventTiming":{const a=await Tn.buildDetailsNodeForTraceEvent(n,dt(i,n),r,I,i);if(a&&T.appendElementRow(mn(hn.details),a),t.Types.Events.isSyntheticInteraction(n)){const t=e.TimeUtilities.formatMicroSecondsAsMillisFixed(n.inputDelay),i=e.TimeUtilities.formatMicroSecondsAsMillisFixed(n.mainThreadHandling),r=e.TimeUtilities.formatMicroSecondsAsMillisFixed(n.presentationDelay);T.appendTextRow(mn(hn.interactionID),n.interactionId),T.appendTextRow(mn(hn.inputDelay),t),T.appendTextRow(mn(hn.processingDuration),i),T.appendTextRow(mn(hn.presentationDelay),r)}break}default:{const e=await Tn.buildDetailsNodeForTraceEvent(n,dt(i,n),r,I,i);e&&T.appendElementRow(mn(hn.details),e);break}}const M=u?.values()||[];for(const e of M)if(e){const t=await l.Linkifier.Linkifier.linkify(e);T.appendElementRow(g||mn(hn.relatedNode),t)}if(n[fn]&&(T.addSection(mn(hn.preview)),T.appendElementRow("",n[fn])),!v){const e=this.getOriginWithEntity(o,i,n);e&&T.appendElementRow(mn(hn.origin),e)}const x=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(n);(t.Types.Events.isUserTiming(n)||t.Types.Extensions.isSyntheticExtensionEntry(n)||t.Types.Events.isProfileCall(n)||E||C||x||i?.Invalidations.invalidationsForEvent.get(n))&&await Tn.generateCauses(n,T,i),d.Runtime.experiments.isEnabled("timeline-debug-mode")&&Tn.renderEventJson(n,T);const P={};if(a&&i&&Tn.aggregatedStatsForTraceEvent(P,i,n)){T.addSection(mn(hn.aggregatedTime));const e=Tn.generatePieChart(P,Tn.eventStyle(n).category,m);T.appendElementRow("",e)}return T.fragment}static statsForTimeRange(e,i,n){if(!e.length)return{idle:n-i};!function(e){if(e[bn])return;const i={},n=[];let r=0;function a(e,t){let n=i[e];if(n||(n={time:[],value:[]},i[e]=n),n.time.length&&n.time[n.time.length-1]===t||r>t)return;const a=n.value.length>0?n.value[n.value.length-1]:0;n.value.push(a+t-r),n.time.push(t)}function o(e,t,i){e&&a(e,i),r=i,t&&a(t,i)}t.Helpers.Trace.forEachEvent(e,{onStartEvent:function(e){const{startTime:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e),r=s.EntryStyles.getEventStyle(e.name)?.category.name||s.EntryStyles.getCategoryStyles().other.name,a=n.length?n[n.length-1]:null;r!==a&&o(a||null,r,i),n.push(r)},onEndEvent:function(e){const{endTime:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e),r=n.pop(),a=n.length?n[n.length-1]:null;r!==a&&o(r||null,a||null,i||0)}});const l=e;l[bn]=i}(e);const a=function(e,t){const i=Object.assign({},e);for(const e in t)i[e]-=t[e];return i}(l(n),l(i)),o=Object.values(a).reduce(((e,t)=>e+t),0);return a.idle=Math.max(0,n-i-o),a;function l(t){const i={},n=e[bn];for(const e in n){const a=n[e],s=r.ArrayUtilities.upperBound(a.time,t,r.ArrayUtilities.DEFAULT_COMPARATOR);let o;if(0===s)o=0;else if(s===a.time.length)o=a.value[a.value.length-1];else{const e=a.time[s-1],i=a.time[s],n=a.value[s-1];o=n+(a.value[s]-n)*(t-e)/(i-e)}i[e]=o}return i}}static renderEventJson(e,t){t.addSection(mn(hn.traceEvent));const i={args:e.args,...e},n=Tn.renderObjectJson(i);t.appendElementRow("",n)}static renderObjectJson(e){const t=l.Settings.Settings.instance().moduleSetting("text-editor-indent").get().length,i=JSON.stringify(e,null,t).slice(0,1e4).replace(/{\n /,"{ "),n=document.createElement("div"),r=m.UIUtils.createShadowRootWithCoreStyles(n,{cssFile:ht}).createChild("div");return r.classList.add("monospace","source-code"),r.textContent=i,b.CodeHighlighter.highlightNode(r,"text/javascript"),n}static stackTraceFromCallFrames(e){return{callFrames:e}}static async generateCauses(i,n,r){const{startTime:a}=t.Helpers.Timing.eventTimingsMilliSeconds(i);let s=mn(hn.initiatorStackTrace),o=mn(hn.stackTrace);if(d.Runtime.experiments.isEnabled("react-native-specific-ui")){const e=t.Extras.StackTraceForEvent.getForReactNative(i,r);e&&(n.addSection(mn(hn.stackTrace)),n.createChildStackTraceElement(e))}else{const e=t.Extras.StackTraceForEvent.get(i,r);if(e)n.addSection(mn(hn.stackTrace)),n.createChildStackTraceElement(e);else{const e=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(i);e?.length&&(n.addSection(o),n.createChildStackTraceElement(Tn.stackTraceFromCallFrames(e)))}}switch(i.name){case"TimerFire":s=mn(hn.timerInstalled);break;case"FireAnimationFrame":s=mn(hn.animationFrameRequested);break;case"FireIdleCallback":s=mn(hn.idleCallbackRequested);break;case"UpdateLayoutTree":s=mn(hn.firstInvalidated),o=mn(hn.recalculationForced);break;case"Layout":s=mn(hn.firstLayoutInvalidation),o=mn(hn.layoutForced)}const l=r.Initiators.eventToInitiator.get(i),c=r.Initiators.initiatorToEvents.get(i),h=r.Invalidations.invalidationsForEvent.get(i);if(l){const i=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(l);i&&(n.addSection(s),n.createChildStackTraceElement(Tn.stackTraceFromCallFrames(i.map((e=>({...e,scriptId:String(e.scriptId)}))))));const r=this.createEntryLink(l);n.appendElementRow(mn(hn.initiatedBy),r);const{startTime:o}=t.Helpers.Timing.eventTimingsMilliSeconds(l),d=a-o;n.appendTextRow(mn(hn.pendingFor),e.TimeUtilities.preciseMillisToString(d,1))}if(c){const e=document.createElement("div");c.map(((t,i)=>{e.appendChild(this.createEntryLink(t)),i<c.length-1&&e.append(" ")})),n.appendElementRow(hn.initiatorFor,e)}if(h?.length){const e=r.Invalidations.invalidationCountForEvent.get(i)??0;n.addSection(mn(hn.invalidations,{PH1:e})),await Tn.generateInvalidationsList(h,n)}}static createEntryLink(e){const t=document.createElement("span"),i=a.TraceBounds.BoundsManager.instance().state();if(!i)return console.error("Tried to link to an entry without any traceBoundsState. This should never happen."),t;const n=i.micro.minimapTraceBounds.min>e.ts+(e.dur||0)||i.micro.minimapTraceBounds.max<e.ts,s=Ve.activeManager()?.getEntriesFilter().entryIsInvisible(e);return n||(t.classList.add("timeline-link"),m.ARIAUtils.markAsLink(t),t.tabIndex=0,t.addEventListener("click",(()=>{rn.instance().select(yt(e))})),t.addEventListener("keydown",(t=>{t.key===r.KeyboardUtilities.ENTER_KEY&&(rn.instance().select(yt(e)),t.consume(!0))}))),t.textContent=s?this.eventTitle(e)+" "+mn(hn.entryIsHidden):n?this.eventTitle(e)+" "+mn(hn.outsideBreadcrumbRange):this.eventTitle(e),t}static async generateInvalidationsList(e,t){const{groupedByReason:i,backendNodeIds:n}=c.DetailsView.generateInvalidationsList(e);let r=null;const a=o.TargetManager.TargetManager.instance().primaryPageTarget(),s=a?.model(o.DOMModel.DOMModel);s&&(r=await s.pushNodesByBackendIdsToFrontend(n)),Object.keys(i).forEach((e=>{Tn.generateInvalidationsForReason(e,i[e],r,t)}))}static generateInvalidationsForReason(i,n,r,a){function s(e){const t=e.args.data.nodeId&&r?r.get(e.args.data.nodeId):null;if(t){const e=document.createElement("span");return l.Linkifier.Linkifier.linkify(t).then((t=>e.appendChild(t))),e}if(e.args.data.nodeName){const t=document.createElement("span");return t.textContent=e.args.data.nodeName,t}const i=document.createElement("span");return m.UIUtils.createTextChild(i,mn(hn.UnknownNode)),i}const d=new Set;for(const r of n){const n=t.Helpers.Trace.getZeroIndexedStackTraceForEvent(r);let l=null;const c=n?.at(0);c&&(l=a.linkifier()?.maybeLinkifyScriptLocation(o.TargetManager.TargetManager.instance().rootTarget(),c.scriptId,c.url,c.lineNumber)||null);const h=s(r),p=l?e.i18n.getFormatLocalizedString(pn,hn.invalidationWithCallFrame,{PH1:h,PH2:l}):h,m="string"==typeof p?p:p.innerText;d.has(m)||(d.add(m),a.appendElementRow(i,p))}}static aggregatedStatsForTraceEvent(e,i,n){const a=i.Renderer?.allTraceEntries||[],{startTime:s,endTime:o}=t.Helpers.Timing.eventTimingsMicroSeconds(n);const l=r.ArrayUtilities.binaryIndexOf(a,s,(function(e,t){return e-t.ts}));if(l<0)return!1;let d=!1;if(o)for(let t=l;t<a.length;t++){const r=a[t];if(r.ts>=o)break;const s=kn(r,i);if(!s)continue;if(r.tid!==n.tid)continue;t>l&&(d=!0);const c=Tn.eventStyle(r).category.name;e[c]=(e[c]||0)+s}if(t.Types.Events.isPhaseAsync(n.ph)){if(o){let t=0;for(const i in e)t+=e[i];const i=o-s;e.idle=Math.max(0,i-t)}return!1}for(const i in e){const n=e[i];e[i]=t.Helpers.Timing.microToMilli(n)}return d}static async buildPicturePreviewContent(e,t,i){const n=e.LayerTree.paintsToSnapshots.get(t);if(!n)return null;const a=i.model(o.PaintProfiler.PaintProfilerModel);if(!a)return null;const s=await a.loadSnapshot(n.args.snapshot.skp64);if(!s)return null;const l={snapshot:s,rect:n.args.snapshot.params?.layer_rect};if(!l)return null;const d=l.snapshot.replay();l.snapshot.release();const c=await d;if(!c)return null;const h=document.createElement("div"),p=h.attachShadow({mode:"open"});p.adoptedStyleSheets=[cn];const u=p.createChild("div");u.classList.add("image-preview-container","vbox","link");const g=u.createChild("img");g.src=c,g.alt=S.ImagePreview.ImagePreview.defaultAltTextForImageURL(c);return u.createChild("a").textContent=mn(hn.paintProfiler),m.ARIAUtils.markAsLink(u),u.tabIndex=0,u.addEventListener("click",(()=>rn.instance().select(yt(t))),!1),u.addEventListener("keydown",(e=>{e.key===r.KeyboardUtilities.ENTER_KEY&&(rn.instance().select(yt(t)),e.consume(!0))})),h}static createEventDivider(i,n){const r=document.createElement("div");r.classList.add("resources-event-divider");const{startTime:a}=t.Helpers.Timing.eventTimingsMilliSeconds(i),s=e.TimeUtilities.millisToString(a-n);m.Tooltip.Tooltip.install(r,mn(hn.sAtS,{PH1:Tn.eventTitle(i),PH2:s}));const o=Tn.markerStyleForEvent(i);return o.tall&&(r.style.backgroundColor=o.color),r}static visibleEventsFilter(){return new t.Extras.TraceFilter.VisibleEventsFilter(s.EntryStyles.visibleTypes())}static categories(){return s.EntryStyles.getCategoryStyles()}static generatePieChart(n,r,a){let o=0;for(const e in n)o+=n[e];const l=document.createElement("div");l.classList.add("timeline-details-view-pie-chart-wrapper"),l.classList.add("hbox");const d=new i.PieChart.PieChart,c=[];function h(e,t,i,n){i&&c.push({value:i,color:n,title:t})}if(r){const e=t.Helpers.Timing.microToMilli(a||0);a&&h(r.name,mn(hn.sSelf,{PH1:r.title}),e,r.getCSSValue());const i=n[r.name]-(e||0);i>0&&h(r.name,mn(hn.sChildren,{PH1:r.title}),i,r.getCSSValue())}for(const e in s.EntryStyles.getCategoryStyles()){const t=s.EntryStyles.getCategoryStyles()[e];e!==r?.name&&h(t.name,t.title,n[t.name],t.getCSSValue())}d.data={chartName:mn(hn.timeSpentInRendering),size:110,formatter:t=>e.TimeUtilities.preciseMillisToString(t),showLegend:!0,total:o,slices:c};return l.createChild("div","vbox").appendChild(d),l}static generateSummaryDetails(e,i,n,r,a){const o=document.createElement("div");o.classList.add("timeline-details-range-summary","hbox");let l=0,d=[];for(const t in e)l+=e[t];for(const t in s.EntryStyles.getCategoryStyles()){const i=s.EntryStyles.getCategoryStyles()[t];if(i.name===s.EntryStyles.EventCategory.IDLE)continue;const n=e[i.name];if(!n)continue;const r=i.title,a=i.getCSSValue();d.push({value:n,color:a,title:r})}d=d.sort(((e,t)=>t.value-e.value));const h=t.Types.Timing.Milli(i),p=t.Types.Timing.Milli(n),u=new c.TimelineSummary.CategorySummary;u.data={rangeStart:h,rangeEnd:p,total:l,categories:d,selectedEvents:r},o.append(u);const g=new Wt;return g.treeView=a,m.ARIAUtils.setLabel(g,mn(hn.thirdPartyTable)),o.append(g),o}static generateDetailsContentForFrame(e,n,r){const a=new wn(null,null);a.addSection(mn(hn.frame));const s=Tn.frameDuration(e);if(a.appendElementRow(mn(hn.duration),s),n&&r){const e=document.createElement("div");e.classList.add("timeline-filmstrip-preview");const s=t.Handlers.ModelHandlers.Screenshots.screenshotImageDataUri(r.screenshotEvent);m.UIUtils.loadImage(s).then((t=>t&&e.appendChild(t))),a.appendElementRow("",e),e.addEventListener("click",function(e,t){i.FilmStripView.Dialog.fromFilmStrip(e,t.index)}.bind(null,n,r),!1)}return a.fragment}static frameDuration(i){const n=t.Helpers.Timing.microToMilli(i.startTimeOffset),r=t.Helpers.Timing.microToMilli(t.Types.Timing.Micro(i.endTime-i.startTime)),a=mn(hn.sAtSParentheses,{PH1:e.TimeUtilities.millisToString(r,!0),PH2:e.TimeUtilities.millisToString(n,!0)});return e.i18n.getFormatLocalizedString(pn,hn.emptyPlaceholder,{PH1:a})}static quadWidth(e){return Math.round(Math.sqrt(Math.pow(e[0]-e[2],2)+Math.pow(e[1]-e[3],2)))}static quadHeight(e){return Math.round(Math.sqrt(Math.pow(e[0]-e[6],2)+Math.pow(e[1]-e[7],2)))}static eventDispatchDesciptors(){if(un)return un;const e="hsl(40,100%,80%)",t="hsl(40,100%,50%)";return un=[new Sn(1,e,["mousemove","mouseenter","mouseleave","mouseout","mouseover"]),new Sn(1,e,["pointerover","pointerout","pointerenter","pointerleave","pointermove"]),new Sn(2,"hsl(90,100%,40%)",["wheel"]),new Sn(3,t,["click","mousedown","mouseup"]),new Sn(3,t,["touchstart","touchend","touchmove","touchcancel"]),new Sn(3,t,["pointerdown","pointerup","pointercancel","gotpointercapture","lostpointercapture"]),new Sn(3,"hsl(256,100%,75%)",["keydown","keyup","keypress"])],un}static markerStyleForEvent(e){const i=[6,4],n=Tn.eventTitle(e);if("navigationStart"!==e.name&&(t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)||t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.UserTiming)))return{title:n,dashStyle:i,lineWidth:.5,color:t.Helpers.Trace.eventHasCategory(e,t.Types.Events.Categories.Console)?"purple":"orange",tall:!1,lowPriority:!1};let r=!1,a="grey";switch(e.name){case"navigationStart":a="var(--color-text-primary)",r=!0;break;case"FrameStartedLoading":a="green",r=!0;break;case"MarkDOMContent":case"MarkLoad":a="var(--color-text-disabled)",r=!0;break;case"firstPaint":a="#228847",r=!0;break;case"firstContentfulPaint":a="var(--sys-color-green-bright)",r=!0;break;case"largestContentfulPaint::Candidate":a="var(--sys-color-green)",r=!0;break;case"TimeStamp":a="orange"}return{title:n,dashStyle:i,lineWidth:.5,color:a,tall:r,lowPriority:!1}}static colorForId(e){return gn||(gn=new l.Color.Generator({min:30,max:330,count:void 0},{min:50,max:80,count:3},85),gn.setColorForID("","#f2ecdc")),gn.colorForID(e)}static displayNameForFrame(e,t=80){const i=e.url;return l.ParsedURL.schemeIs(i,"about:")?`"${r.StringUtilities.trimMiddle(e.name,t)}"`:e.url.slice(0,t)}static getOriginWithEntity(e,t,i){const n=s.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(t,i);if(!n)return null;const r=URL.parse(n);if(!r)return null;const a=e?.entityForEvent(i)??null;if(!a)return null;return s.Helpers.formatOriginWithEntity(r,a,!0)}}const yn=Symbol("aggregatedStats"),fn=Symbol("previewElement");class Sn{priority;color;eventTypes;constructor(e,t,i){this.priority=e,this.color=t,this.eventTypes=i}}class wn{fragment;linkifierInternal;target;element;tableElement;constructor(e,t){this.fragment=document.createDocumentFragment(),this.linkifierInternal=t,this.target=e,this.element=document.createElement("div"),this.element.classList.add("timeline-details-view-block"),this.tableElement=this.element.createChild("div","vbox timeline-details-chip-body"),this.fragment.appendChild(this.element)}addSection(e,t){if(this.tableElement.hasChildNodes()?(this.element=document.createElement("div"),this.element.classList.add("timeline-details-view-block"),this.fragment.appendChild(this.element)):this.element.removeChildren(),e){const i=this.element.createChild("div","timeline-details-chip-title");t&&(i.createChild("div").style.backgroundColor=t),m.UIUtils.createTextChild(i,e)}this.tableElement=this.element.createChild("div","vbox timeline-details-chip-body"),this.fragment.appendChild(this.element)}linkifier(){return this.linkifierInternal}appendTextRow(e,t){const i=this.tableElement.createChild("div","timeline-details-view-row");i.createChild("div","timeline-details-view-row-title").textContent=e,i.createChild("div","timeline-details-view-row-value").textContent=t.toString()}appendElementRow(e,t,i,n){const r=this.tableElement.createChild("div","timeline-details-view-row");r.setAttribute("data-row-title",e),i&&r.classList.add("timeline-details-warning"),n&&r.classList.add("timeline-details-stack-values");r.createChild("div","timeline-details-view-row-title").textContent=e;const a=r.createChild("div","timeline-details-view-row-value");t instanceof Node?a.appendChild(t):m.UIUtils.createTextChild(a,t||"")}appendLocationRow(e,t,i,n,r,a){if(!this.linkifierInternal)return;const s={tabStop:!0,columnNumber:n,showColumnNumber:!0,inlineFrameIndex:0,text:r,omitOrigin:a},o=this.linkifierInternal.maybeLinkifyScriptLocation(this.target,null,t,i,s);o&&this.appendElementRow(e,o)}reactNativeAppendLocationRow(e,t,i,n,r,a,s){if(!this.linkifierInternal)return;const o={tabStop:!0,columnNumber:r,showColumnNumber:!0,inlineFrameIndex:0,text:a,omitOrigin:s},l=this.linkifierInternal.maybeLinkifyScriptLocation(this.target,i,t,n,o);l&&this.appendElementRow(e,l)}appendLocationRange(e,t,i,n){if(!this.linkifierInternal||!this.target)return;const a=document.createElement("span"),s=this.linkifierInternal.maybeLinkifyScriptLocation(this.target,null,t,i,{tabStop:!0,inlineFrameIndex:0});s&&(a.appendChild(s),m.UIUtils.createTextChild(a,r.StringUtilities.sprintf(" [%s…%s]",i+1,(n||0)+1||"")),this.appendElementRow(e,a))}createChildStackTraceElement(e){if(!this.linkifierInternal)return;const t=structuredClone(e);let i=t;for(;i;)i.callFrames=i.callFrames.map((e=>({...e,functionName:s.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForCallFrame(e)?.name||e.functionName}))),i=i.parent;const n=this.tableElement.createChild("div","timeline-details-view-row timeline-details-stack-values"),r=S.JSPresentationUtils.buildStackTracePreviewContents(this.target,this.linkifierInternal,{stackTrace:t,tabStops:!0,showColumnNumber:!0});n.appendChild(r.element)}}const bn=Symbol("categoryBreakdownCache");function En(e,i){if(!i){const{startTime:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e);return i}const n=t.Helpers.Timing.timeStampForEventAdjustedByClosestNavigation(e,i.Meta.traceBounds,i.Meta.navigationsByNavigationId,i.Meta.navigationsByFrameId);return t.Helpers.Timing.microToMilli(n)}function Cn(e,i){const{Name:n}=t.Types.Events;if("TimeStamp"===i.name||"navigationStart"===i.name)return!0;if(t.Types.Events.isFirstContentfulPaint(i)||t.Types.Events.isFirstPaint(i))return i.args.frame===e.Meta.mainFrameId;if(t.Types.Events.isMarkDOMContent(i)||t.Types.Events.isMarkLoad(i)||t.Types.Events.isLargestContentfulPaintCandidate(i)){if(!i.args.data)return!1;const{isOutermostMainFrame:e,isMainFrame:t}=i.args.data;return void 0!==e?e:Boolean(t)}return!1}function kn(e,i){const n=t.Types.Extensions.isSyntheticExtensionEntry(e)?i.ExtensionTraceData.entryToNode:i.Renderer.entryToNode,r=n.get(e)?.selfTime;return r||t.Types.Timing.Micro(0)}var In=Object.freeze({__proto__:null,EventDispatchTypeDescriptor:Sn,TimelineDetailsContentHelper:wn,TimelineUIUtils:Tn,aggregatedStatsKey:yn,categoryBreakdownCacheSymbol:bn,isMarkerEvent:Cn,previewElementSymbol:fn,timeStampForEventAdjustedForClosestNavigationIfPossible:En});class Mn extends t.Extras.TraceFilter.TraceFilter{#ui=t.Types.Timing.Milli(0);constructor(){super()}setMinimumRecordDuration(e){this.#ui=e}accept(e){const{duration:i}=t.Helpers.Timing.eventTimingsMilliSeconds(e);return i>=this.#ui}}class xn extends t.Extras.TraceFilter.TraceFilter{constructor(){super()}accept(e){return!Tn.eventStyle(e).category.hidden}}class Pn extends t.Extras.TraceFilter.TraceFilter{regExpInternal;constructor(e){super(),this.setRegExp(e||null)}setRegExp(e){this.regExpInternal=e}regExp(){return this.regExpInternal}accept(e,t){return!this.regExpInternal||Tn.testContentMatching(e,this.regExpInternal,t)}}var Rn=Object.freeze({__proto__:null,Category:xn,IsLong:Mn,TimelineRegExp:Pn});const Fn={startTime:"Start time",durationFilter:"Duration filter",all:"All"},Ln=e.i18n.registerUIStrings("panels/timeline/EventsTimelineTreeView.ts",Fn),An=e.i18n.getLocalizedString.bind(void 0,Ln);class Nn extends xt{filtersControl;delegate;currentTree;constructor(e){super(),this.element.setAttribute("jslog",`${v.pane("event-log").track({resize:!0})}`),this.filtersControl=new Dn,this.filtersControl.addEventListener("FilterChanged",this.onFilterChanged,this),this.init(),this.delegate=e,this.dataGrid.markColumnAsSortedBy("start-time",w.DataGrid.Order.Ascending),this.splitWidget.showBoth()}filters(){return[...super.filters(),...this.filtersControl.filters()]}updateContents(e){super.updateContents(e),St(e)&&this.selectEvent(e.event,!0)}buildTree(){return this.currentTree=this.buildTopDownTree(!0,null),this.currentTree}onFilterChanged(){const e=this.lastSelectedNode(),t=e?.event;this.refreshTree(),t&&this.selectEvent(t,!1)}findNodeWithEvent(e){if("RunTask"===e.name)return null;const t=[this.currentTree.children().values()];for(;t.length;){const{done:i,value:n}=t[t.length-1].next();if(i)t.pop();else{if(n.event===e)return n;t.push(n.children().values())}}return null}selectEvent(e,t){const i=this.findNodeWithEvent(e);if(i&&(this.selectProfileNode(i,!1),t)){const e=this.dataGridNodeForTreeNode(i);e&&e.expand()}}populateColumns(e){e.push({id:"start-time",title:An(Fn.startTime),width:"80px",fixedWidth:!0,sortable:!0}),super.populateColumns(e),e.filter((e=>e.fixedWidth)).forEach((e=>{e.width="80px"}))}populateToolbar(e){super.populateToolbar(e),this.filtersControl.populateToolbar(e)}showDetailsForNode(e){const t=this.parsedTrace();if(!t)return!1;const i=e.event;return!!i&&(Tn.buildTraceEventDetails(t,i,this.linkifier,!1,null).then((e=>this.detailsView.element.appendChild(e))),!0)}onHover(e){this.delegate.highlightEvent(e?.event??null)}}class Dn extends l.ObjectWrapper.ObjectWrapper{categoryFilter;durationFilter;filtersInternal;constructor(){super(),this.categoryFilter=new xn,this.durationFilter=new Mn,this.filtersInternal=[this.categoryFilter,this.durationFilter]}filters(){return this.filtersInternal}populateToolbar(i){const n=new m.Toolbar.ToolbarComboBox(function(){const e=n.selectedOption().value,i=parseInt(e,10);this.durationFilter.setMinimumRecordDuration(t.Types.Timing.Milli(i)),this.notifyFiltersChanged()}.bind(this),An(Fn.durationFilter),void 0,"duration");for(const t of Dn.durationFilterPresetsMs)n.addOption(n.createOption(t?`≥ ${e.TimeUtilities.millisToString(t)}`:An(Fn.all),String(t)));i.appendToolbarItem(n);const r=new Map,a=s.EntryStyles.getCategoryStyles();for(const e in a){const t=a[e];if(!t.visible)continue;const n=new m.Toolbar.ToolbarCheckbox(t.title,void 0,o.bind(this,e),e);n.setChecked(!0),n.inputElement.style.backgroundColor=t.color,r.set(t.name,n),i.appendToolbarItem(n)}function o(e){const t=s.EntryStyles.getCategoryStyles(),i=r.get(e);t[e].hidden=!i?.checked(),this.notifyFiltersChanged()}}notifyFiltersChanged(){this.dispatchEventToListeners("FilterChanged")}static durationFilterPresetsMs=[0,1,15]}var Bn=Object.freeze({__proto__:null,EventsTimelineTreeView:Nn,Filters:Dn});class Hn extends m.SplitWidget.SplitWidget{showPaintProfilerCallback;rightSplitWidget;layerViewHost;layers3DView;frameLayerTree;updateWhenVisible;constructor(e){super(!0,!1,"timeline-layers-view"),this.showPaintProfilerCallback=e,this.element.classList.add("timeline-layers-view"),this.rightSplitWidget=new m.SplitWidget.SplitWidget(!0,!0,"timeline-layers-view-details"),this.rightSplitWidget.element.classList.add("timeline-layers-view-properties"),this.setMainWidget(this.rightSplitWidget);const t=new m.Widget.VBox;this.setSidebarWidget(t),this.layerViewHost=new D.LayerViewHost.LayerViewHost;const i=new D.LayerTreeOutline.LayerTreeOutline(this.layerViewHost);t.element.appendChild(i.element),this.layers3DView=new D.Layers3DView.Layers3DView(this.layerViewHost),this.layers3DView.addEventListener("PaintProfilerRequested",this.onPaintProfilerRequested,this),this.rightSplitWidget.setMainWidget(this.layers3DView);const n=new D.LayerDetailsView.LayerDetailsView(this.layerViewHost);this.rightSplitWidget.setSidebarWidget(n),n.addEventListener("PaintProfilerRequested",this.onPaintProfilerRequested,this)}showLayerTree(e){this.frameLayerTree=e,this.isShowing()?this.update():this.updateWhenVisible=!0}wasShown(){this.updateWhenVisible&&(this.updateWhenVisible=!1,this.update())}async onPaintProfilerRequested(e){const t=e.data,i=await this.layers3DView.snapshotForSelection(t);i&&this.showPaintProfilerCallback(i.snapshot)}update(){this.frameLayerTree&&this.frameLayerTree.layerTreePromise().then((e=>this.layerViewHost.setLayerTree(e)))}}var Un=Object.freeze({__proto__:null,TimelineLayersView:Hn}),On={cssText:`.paint-profiler-image-view{overflow:hidden}.paint-profiler-image-view .paint-profiler-image-container{transform-origin:0 0}.paint-profiler-image-view .paint-profiler-image-container div{border-color:1px solid var(--sys-color-divider);border-style:solid;z-index:100;position:absolute;top:0;left:0}.paint-profiler-image-view img{border:solid 1px var(--sys-color-inverse-surface)}\n/*# sourceURL=${import.meta.resolve("./timelinePaintProfiler.css")} */\n`};class _n extends o.LayerTreeBase.LayerTreeBase{tileById=new Map;paintProfilerModel;constructor(e){super(e),this.paintProfilerModel=e?.model(o.PaintProfiler.PaintProfilerModel)??null}async setLayers(e,t,i){const n=new Set;if(e)this.extractNodeIdsToResolve(n,{},e);else if(t)for(let e=0;e<t.length;++e)this.extractNodeIdsToResolve(n,{},t[e]);await this.resolveBackendNodeIds(n);const r=this.layersById;if(this.layersById=new Map,this.setContentRoot(null),e){const t=this.innerSetLayers(r,e);this.setRoot(t)}else if(t){const e=t.map(this.innerSetLayers.bind(this,r)),i=this.contentRoot();if(!i)throw new Error("Content root is not set.");this.setRoot(i);for(let t=0;t<e.length;++t)e[t].id()!==i.id()&&i.addChild(e[t])}this.setPaints(i)}setTiles(e){this.tileById=new Map;for(const t of e)this.tileById.set(t.id,t)}pictureForRasterTile(e){const t=this.tileById.get("cc::Tile/"+e);if(!t)return l.Console.Console.instance().error(`Tile ${e} is missing`),Promise.resolve(null);const i=this.layerById(t.layer_id);return i?i.pictureForRect(t.content_rect):(l.Console.Console.instance().error(`Layer ${t.layer_id} for tile ${e} is not found`),Promise.resolve(null))}setPaints(e){for(let t=0;t<e.length;++t){const i=this.layersById.get(e[t].layerId());i&&i.addPaintEvent(e[t])}}innerSetLayers(e,t){let i=e.get(t.layer_id);i?i.reset(t):i=new Vn(this.paintProfilerModel,t),this.layersById.set(t.layer_id,i),t.owner_node&&i.setNode(this.backendNodeIdToNode().get(t.owner_node)||null),!this.contentRoot()&&i.drawsContent()&&this.setContentRoot(i);for(let n=0;t.children&&n<t.children.length;++n)i.addChild(this.innerSetLayers(e,t.children[n]));return i}extractNodeIdsToResolve(e,t,i){const n=i.owner_node;n&&!this.backendNodeIdToNode().has(n)&&e.add(n);for(let n=0;i.children&&n<i.children.length;++n)this.extractNodeIdsToResolve(e,t,i.children[n])}}class Wn{#gi;#vi;#Ti=[];constructor(e,t){this.#gi=e,this.#vi=t.entry,this.#Ti=t.paints}async layerTreePromise(){const e=this.#vi.args.snapshot,t=e.device_viewport_size,i=e.active_tiles,n=e.active_tree.root_layer,r=e.active_tree.layers,a=new _n(this.#gi);return a.setViewportSize(t),a.setTiles(i),await a.setLayers(n,r,this.#Ti||[]),a}paints(){return this.#Ti}}class Vn{parentLayerId;parentInternal;layerId;nodeInternal;offsetXInternal;offsetYInternal;widthInternal;heightInternal;childrenInternal;quadInternal;scrollRectsInternal;gpuMemoryUsageInternal;paints;compositingReasons;compositingReasonIds;drawsContentInternal;paintProfilerModel;constructor(e,t){this.parentLayerId=null,this.parentInternal=null,this.layerId="",this.nodeInternal=null,this.offsetXInternal=-1,this.offsetYInternal=-1,this.widthInternal=-1,this.heightInternal=-1,this.childrenInternal=[],this.quadInternal=[],this.scrollRectsInternal=[],this.gpuMemoryUsageInternal=-1,this.paints=[],this.compositingReasons=[],this.compositingReasonIds=[],this.drawsContentInternal=!1,this.paintProfilerModel=e,this.reset(t)}reset(e){this.nodeInternal=null,this.layerId=String(e.layer_id),this.offsetXInternal=e.position[0],this.offsetYInternal=e.position[1],this.widthInternal=e.bounds.width,this.heightInternal=e.bounds.height,this.childrenInternal=[],this.parentLayerId=null,this.parentInternal=null,this.quadInternal=e.layer_quad||[],this.createScrollRects(e),this.compositingReasons=e.compositing_reasons||[],this.compositingReasonIds=e.compositing_reason_ids||[],this.drawsContentInternal=Boolean(e.draws_content),this.gpuMemoryUsageInternal=e.gpu_memory_usage,this.paints=[]}id(){return this.layerId}parentId(){return this.parentLayerId}parent(){return this.parentInternal}isRoot(){return!this.parentId()}children(){return this.childrenInternal}addChild(e){const t=e;t.parentInternal&&console.assert(!1,"Child already has a parent"),this.childrenInternal.push(t),t.parentInternal=this,t.parentLayerId=this.layerId}setNode(e){this.nodeInternal=e}node(){return this.nodeInternal}nodeForSelfOrAncestor(){let e=this;for(;e;e=e.parent())if(e.node())return e.node();return null}offsetX(){return this.offsetXInternal}offsetY(){return this.offsetYInternal}width(){return this.widthInternal}height(){return this.heightInternal}transform(){return null}quad(){return this.quadInternal}anchorPoint(){return[.5,.5,0]}invisible(){return!1}paintCount(){return 0}lastPaintRect(){return null}scrollRects(){return this.scrollRectsInternal}stickyPositionConstraint(){return null}gpuMemoryUsage(){return this.gpuMemoryUsageInternal}snapshots(){return this.paints.map((async e=>{if(!this.paintProfilerModel)return null;const t=await async function(e,t){const i=t.picture();if(!i||!e)return null;const n=await e.loadSnapshot(i.serializedPicture);return n?{rect:i.rect,snapshot:n}:null}(this.paintProfilerModel,e);if(!t)return null;return{rect:{x:t.rect[0],y:t.rect[1],width:t.rect[2],height:t.rect[3]},snapshot:t.snapshot}}))}async pictureForRect(e){return await Promise.all(this.paints.map((e=>e.picture()))).then((i=>{const n=i.filter((i=>{return i&&(n=i.rect,r=e,t(n[0],n[0]+n[2],r[0],r[0]+r[2])&&t(n[1],n[1]+n[3],r[1],r[1]+r[3]));var n,r})).map((e=>({x:e.rect[0],y:e.rect[1],picture:e.serializedPicture})));if(!n.length||!this.paintProfilerModel)return null;const r=n.reduce(((e,t)=>Math.min(e,t.x)),1/0),a=n.reduce(((e,t)=>Math.min(e,t.y)),1/0),s={x:e[0]-r,y:e[1]-a,width:e[2],height:e[3]};return this.paintProfilerModel.loadSnapshotFromFragments(n).then((e=>e?{rect:s,snapshot:e}:null))}));function t(e,t,i,n){return console.assert(e<=t&&i<=n,"segments should be specified as ordered pairs"),t>i&&e<n}}scrollRectsFromParams(e,t){return{rect:{x:e[0],y:e[1],width:e[2],height:e[3]},type:t}}createScrollRects(e){const t=[];e.non_fast_scrollable_region&&t.push(this.scrollRectsFromParams(e.non_fast_scrollable_region,"NonFastScrollable")),e.touch_event_handler_region&&t.push(this.scrollRectsFromParams(e.touch_event_handler_region,"TouchEventHandler")),e.wheel_event_handler_region&&t.push(this.scrollRectsFromParams(e.wheel_event_handler_region,"WheelEventHandler")),e.scroll_event_handler_region&&t.push(this.scrollRectsFromParams(e.scroll_event_handler_region,"RepaintsOnScroll")),this.scrollRectsInternal=t}addPaintEvent(e){this.paints.push(e)}requestCompositingReasons(){return Promise.resolve(this.compositingReasons)}requestCompositingReasonIds(){return Promise.resolve(this.compositingReasonIds)}drawsContent(){return this.drawsContentInternal}}class Gn extends m.SplitWidget.SplitWidget{logAndImageSplitWidget;imageView;paintProfilerView;logTreeView;needsUpdateWhenVisible;pendingSnapshot;event;paintProfilerModel;lastLoadedSnapshot;#t;constructor(e){super(!1,!1),this.element.classList.add("timeline-paint-profiler-view"),this.setSidebarSize(60),this.setResizable(!1),this.#t=e,this.logAndImageSplitWidget=new m.SplitWidget.SplitWidget(!0,!1),this.logAndImageSplitWidget.element.classList.add("timeline-paint-profiler-log-split"),this.setMainWidget(this.logAndImageSplitWidget),this.imageView=new zn,this.logAndImageSplitWidget.setMainWidget(this.imageView),this.paintProfilerView=new D.PaintProfilerView.PaintProfilerView(this.imageView.showImage.bind(this.imageView)),this.paintProfilerView.addEventListener("WindowChanged",this.onWindowChanged,this),this.setSidebarWidget(this.paintProfilerView),this.logTreeView=new D.PaintProfilerView.PaintProfilerCommandLogView,this.logAndImageSplitWidget.setSidebarWidget(this.logTreeView),this.needsUpdateWhenVisible=!1,this.pendingSnapshot=null,this.event=null,this.paintProfilerModel=null,this.lastLoadedSnapshot=null}wasShown(){super.wasShown(),this.needsUpdateWhenVisible&&(this.needsUpdateWhenVisible=!1,this.update())}setSnapshot(e){this.releaseSnapshot(),this.pendingSnapshot=e,this.event=null,this.updateWhenVisible()}#yi(e){const t=e.args.tileData;if(!t)return!1;const i=this.#t.Frames.framesById[t.sourceFrameNumber];return!!i?.layerTree}setEvent(e,i){if(this.releaseSnapshot(),this.paintProfilerModel=e,this.pendingSnapshot=null,this.event=i,this.updateWhenVisible(),t.Types.Events.isPaint(i)){const e=this.#t.LayerTree.paintsToSnapshots.get(i);return Boolean(e)}return!!t.Types.Events.isRasterTask(i)&&this.#yi(i)}updateWhenVisible(){this.isShowing()?this.update():this.needsUpdateWhenVisible=!0}async#fi(e){const t=e.args.tileData;if(!t)return null;if(!t.tileId.id_ref)return null;const i=o.TargetManager.TargetManager.instance().rootTarget();if(!i)return null;const n=this.#t.Frames.framesById[t.sourceFrameNumber];if(!n?.layerTree)return null;const r=new Wn(i,n.layerTree),a=await r.layerTreePromise();return a?await a.pictureForRasterTile(t.tileId.id_ref):null}update(){let e;if(this.logTreeView.setCommandLog([]),this.paintProfilerView.setSnapshotAndLog(null,[],null),this.pendingSnapshot)e=Promise.resolve({rect:null,snapshot:this.pendingSnapshot});else if(this.event&&this.paintProfilerModel&&t.Types.Events.isPaint(this.event)){const t=this.#t.LayerTree.paintsToSnapshots.get(this.event);if(t){const i=t.args.snapshot.skp64;e=this.paintProfilerModel.loadSnapshot(i).then((e=>e&&{rect:null,snapshot:e}))}else e=Promise.resolve(null)}else{if(!this.event||!t.Types.Events.isRasterTask(this.event))return void console.assert(!1,"Unexpected event type or no snapshot");e=this.#fi(this.event)}function i(e,t,i){this.logTreeView.setCommandLog(i||[]),this.paintProfilerView.setSnapshotAndLog(e,i||[],t)}e.then((e=>{if(this.releaseSnapshot(),!e)return void this.imageView.showImage();const t=e.snapshot;this.lastLoadedSnapshot=t,this.imageView.setMask(e.rect),t.commandLog().then((n=>i.call(this,t,e.rect,n||[])))}))}releaseSnapshot(){this.lastLoadedSnapshot&&(this.lastLoadedSnapshot.release(),this.lastLoadedSnapshot=null)}onWindowChanged(){this.logTreeView.updateWindow(this.paintProfilerView.selectionWindow())}}class zn extends m.Widget.Widget{imageContainer;imageElement;maskElement;transformController;maskRectangle;constructor(){super(!0),this.registerRequiredCSS(On),this.contentElement.classList.add("fill","paint-profiler-image-view"),this.imageContainer=this.contentElement.createChild("div","paint-profiler-image-container"),this.imageElement=this.imageContainer.createChild("img"),this.maskElement=this.imageContainer.createChild("div"),this.imageElement.addEventListener("load",this.updateImagePosition.bind(this),!1),this.transformController=new D.TransformController.TransformController(this.contentElement,!0),this.transformController.addEventListener("TransformChanged",this.updateImagePosition,this)}onResize(){this.imageElement.src&&this.updateImagePosition()}updateImagePosition(){const e=this.imageElement.naturalWidth,t=this.imageElement.naturalHeight,i=this.contentElement.clientWidth,n=this.contentElement.clientHeight,r=.1*i,a=.1*n,s=(i-r)/e,o=(n-a)/t,l=Math.min(s,o);if(this.maskRectangle){const i=this.maskElement.style;i.width=e+"px",i.height=t+"px",i.borderLeftWidth=this.maskRectangle.x+"px",i.borderTopWidth=this.maskRectangle.y+"px",i.borderRightWidth=e-this.maskRectangle.x-this.maskRectangle.width+"px",i.borderBottomWidth=t-this.maskRectangle.y-this.maskRectangle.height+"px"}this.transformController.setScaleConstraints(.5,10/l);let d=(new WebKitCSSMatrix).scale(this.transformController.scale(),this.transformController.scale()).translate(i/2,n/2).scale(l,l).translate(-e/2,-t/2);const c=m.Geometry.boundsForTransformedPoints(d,[0,0,0,e,t,0]);this.transformController.clampOffsets(r-c.maxX,i-r-c.minX,a-c.maxY,n-a-c.minY),d=(new WebKitCSSMatrix).translate(this.transformController.offsetX(),this.transformController.offsetY()).multiply(d),this.imageContainer.style.webkitTransform=d.toString()}showImage(e){this.imageContainer.classList.toggle("hidden",!e),e&&(this.imageElement.src=e)}setMask(e){this.maskRectangle=e,this.maskElement.classList.toggle("hidden",!e)}}var jn=Object.freeze({__proto__:null,TimelinePaintImageView:zn,TimelinePaintProfilerView:Gn}),$n={cssText:`devtools-data-grid{flex:auto}\n/*# sourceURL=${import.meta.resolve("./timelineSelectorStatsView.css")} */\n`};const Kn={selectorStats:"Selector stats",elapsed:"Elapsed (ms)",rejectPercentage:"% of slow-path non-matches",rejectPercentageExplanation:"The percentage of non-matching nodes (Match Attempts - Match Count) that couldn't be quickly ruled out by the bloom filter due to high selector complexity. Lower is better.",matchAttempts:"Match attempts",matchCount:"Match count",selector:"Selector",styleSheetId:"Style Sheet",copyTable:"Copy table",unableToLink:"Unable to link",unableToLinkViaStyleSheetId:"Unable to link via {PH1}",tableCopiedToClipboard:"Table copied to clipboard",totalForAllSelectors:"(Totals for all selectors)",lineNumber:"Line {PH1}:{PH2}"},qn=e.i18n.registerUIStrings("panels/timeline/TimelineSelectorStatsView.ts",Kn),Yn=e.i18n.getLocalizedString.bind(void 0,qn),Jn=t.Types.Events.SelectorTimingsKey;class Xn extends m.Widget.VBox{#Si;#t=null;#wi=null;#bi;#Ei=[];constructor(e,t=(e,t,i)=>{B(H`
2
2
  <devtools-data-grid striped name=${Yn(Kn.selectorStats)}
3
3
  @contextmenu=${e.onContextMenu.bind(e)}>
4
4
  <table>