ostia 0.2.1 → 0.2.3
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.
- package/README.md +301 -40
- package/chunk-2s4xk1mg.js +12 -0
- package/chunk-dpxy38mq.js +22 -0
- package/cli.js +124 -67
- package/index.d.ts +336 -34
- package/index.js +1 -1
- package/package.json +4 -1
- package/runner.ts +5 -5
- package/chunk-9dqf5cxf.js +0 -8
- package/chunk-h6579788.js +0 -21
package/chunk-h6579788.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{D,k,y,x,e,n,p,F,i,a,E,o,S,t,u,P,d,f,g,W}from"./chunk-9dqf5cxf.js";function wn(s){return s.startsWith("file://")?s.slice(7):s}function ke(s,h,m){let T=s.nodes,U=T.length,B=new Map,I=[],A=new Map,_=new Int32Array(U);for(let q=0;q<U;q++){let Q=T[q],Z=Q.callFrame,ie=wn(Z.url),se=B.get(Z.functionName);if(se===void 0)se=new Map,B.set(Z.functionName,se);let ce=se.get(ie);if(ce===void 0)ce=I.length,se.set(ie,ce),I.push({key:e("fr",Z.functionName,ie),name:Z.functionName,url:ie||void 0,line:Z.lineNumber>=0?Z.lineNumber:void 0,col:Z.columnNumber>=0?Z.columnNumber:void 0});_[q]=ce,A.set(Q.id,q)}let O=Array(U);for(let q=0;q<U;q++){let Q=T[q];O[q]={id:Q.id,frameIx:_[A.get(Q.id)],children:Q.children??[]}}let j=new Float64Array(U),Y=new Float64Array(U),{samples:L,timeDeltas:K}=s;for(let q=0;q<L.length;q++){let Q=A.get(L[q]);if(Q===void 0)continue;j[Q]+=K[q]??0,Y[Q]+=1}let X=new Int32Array(U).fill(-1);for(let q=0;q<U;q++){let Q=T[q].children;if(!Q)continue;for(let Z of Q){let ie=A.get(Z);if(ie!==void 0)X[ie]=q}}let H=[],te=[];for(let q=U-1;q>=0;q--)if(X[q]===-1)te.push(q);while(te.length>0){let q=te.pop();H.push(q);let Q=T[q].children;if(!Q)continue;for(let Z of Q){let ie=A.get(Z);if(ie!==void 0&&X[ie]===q)te.push(ie)}}let re=new Float64Array(U);for(let q=H.length-1;q>=0;q--){let Q=H[q];re[Q]+=j[Q];let Z=X[Q];if(Z>=0)re[Z]+=re[Q]}let oe=Array(I.length),ne=[];for(let q=0;q<U;q++){let Q=O[q].frameIx,Z=oe[Q];if(Z)Z.selfUs+=j[q],Z.totalUs+=re[q],Z.samples+=Y[q];else{let ie={frameIx:Q,selfUs:j[q],totalUs:re[q],samples:Y[q]};oe[Q]=ie,ne.push(ie)}}return{origin:h,samplingIntervalUs:m,frames:I,nodes:O,totals:ne.sort((q,Q)=>Q.selfUs-q.selfUs),samples:{nodeIds:s.samples,timeDeltasUs:s.timeDeltas}}}function xn(s,h,m,T){let U=["--cpu-prof","--cpu-prof-dir",h,"--cpu-prof-name",m,"--cpu-prof-interval",String(T)],B=s[0];if(B==="bun"||B?.endsWith("/bun"))return[B,...U,...s.slice(1)];return s}async function Fe(s){let h=`${s.artifactDir}/${s.fileName}`,m=s.argv[0],T=m==="bun"||m?.endsWith("/bun"),U=xn(s.argv,s.artifactDir,s.fileName,s.intervalUs),B=T?s.env:{...process.env,...s.env,BUN_OPTIONS:`--cpu-prof --cpu-prof-dir ${s.artifactDir} --cpu-prof-name ${s.fileName} --cpu-prof-interval ${s.intervalUs}`},I=Bun.nanoseconds(),_=await Bun.spawn(U,{cwd:s.cwd,env:B,stdout:"ignore",stderr:"ignore",stdin:"ignore"}).exited,O=Bun.nanoseconds()-I,j=Bun.file(h);if(!await j.exists())return{diagnosticWallNs:O,exitCode:_,warnings:[{code:"artifact-missing",message:`Expected a .cpuprofile at ${h} after exit ${_}, found nothing. The workload's argv[0] must be a \`bun\` binary for CPU capture.`,data:{artifactPath:h,argv:s.argv}}]};let Y=await j.json(),L=ke(Y,"cpu-prof",s.intervalUs),K=Y.samples.length===0?[{code:"empty-profile",message:"CPU capture produced zero samples."}]:[];return{diagnosticWallNs:O,exitCode:_,artifactPath:h,cpu:L,warnings:K}}function We(s,h="heap-prof"){let{node_fields:m,node_types:T}=s.snapshot.meta,U=m.indexOf("type"),B=m.indexOf("self_size"),I=m.length,A=T[0];if(U===-1||B===-1||!Array.isArray(A))return{origin:h,typeCounts:[],objectCount:s.snapshot.node_count};let _=A.length,O=Array(_),j=new Map,Y=[],L=0,K=s.nodes,X=K.length;for(let ne=0;ne<X;ne+=I){let q=K[ne+U],Q=K[ne+B]??0;L+=Q;let Z;if(q>=0&&q<_){if(Z=O[q],Z===void 0)Z={type:A[q],count:0,bytes:0},O[q]=Z,Y.push(Z)}else{let ie=`unknown(${q})`;if(Z=j.get(ie),Z===void 0)Z={type:ie,count:0,bytes:0},j.set(ie,Z),Y.push(Z)}Z.count++,Z.bytes+=Q}let H=Y.sort((ne,q)=>q.count-ne.count),te=H.slice(0,20),re=H.slice(20),oe=te.map(({type:ne,count:q,bytes:Q})=>({type:ne,count:q,retainedBytes:Q}));if(re.length>0){let ne=0,q=0;for(let Q of re)ne+=Q.count,q+=Q.bytes;oe.push({type:"other",count:ne,retainedBytes:q})}return{origin:h,heapSizeBytes:L,objectCount:s.snapshot.node_count,typeCounts:oe}}function Pn(s,h,m){let T=["--heap-prof","--heap-prof-dir",h,"--heap-prof-name",m],U=s[0];if(U==="bun"||U?.endsWith("/bun"))return[U,...T,...s.slice(1)];return s}async function Ue(s){let h=`${s.artifactDir}/${s.fileName}`,m=s.argv[0],T=m==="bun"||m?.endsWith("/bun"),U=Pn(s.argv,s.artifactDir,s.fileName),B=T?s.env:{...process.env,...s.env,BUN_OPTIONS:`--heap-prof --heap-prof-dir ${s.artifactDir} --heap-prof-name ${s.fileName}`},I=Bun.nanoseconds(),_=await Bun.spawn(U,{cwd:s.cwd,env:B,stdout:"ignore",stderr:"ignore",stdin:"ignore"}).exited,O=Bun.nanoseconds()-I,j=Bun.file(h);if(!await j.exists())return{diagnosticWallNs:O,exitCode:_,warnings:[{code:"artifact-missing",message:`Expected a heap snapshot at ${h} after exit ${_}, found nothing. The workload's argv[0] must be a \`bun\` binary for heap capture.`,data:{artifactPath:h,argv:s.argv}}]};let Y=await j.json(),L=We(Y,"heap-prof");return{diagnosticWallNs:O,exitCode:_,artifactPath:h,heap:L,warnings:[]}}import{Session as kn}from"inspector/promises";var $n=1000;async function Oe(s,h={}){let m=h.intervalUs??$n,T=new kn;T.connect();let U=Bun.nanoseconds();try{await T.post("Profiler.enable"),await T.post("Profiler.setSamplingInterval",{interval:m}),await T.post("Profiler.start");let B=await s(),{profile:I}=await T.post("Profiler.stop"),A=Bun.nanoseconds()-U,_=ke(I,"inspector",m);return{result:B,cpu:_,diagnosticWallNs:A}}finally{T.disconnect()}}var Rn=10,Mn=3000000000,vn=3;function Ie(s){let h=s.warmup??vn,m=s.samples,T=s.minSamples??Rn,U=m??T,B=m!==void 0?0:s.budgetMs!==void 0?s.budgetMs*1e6:Mn,I=s.timeSource!==void 0,A=[],_=0,O=0;function j(){if(m!==void 0)return O>=m;return O>=U&&_>=B}async function Y(L,K){if(s.prepare)await k(s.prepare,{phase:L,index:K},{cwd:s.cwd,env:s.env});return D(s)}return{async warmup(){for(let L=0;L<h;L++)await Y("warmup",L)},async step(){if(j())return!1;let L=await Y("timing",O);return A.push({i:O,wallNs:L.wallNs,exitCode:L.exitCode,userNs:L.userNs,systemNs:L.systemNs,maxRssBytes:L.maxRssBytes,...L.reportedNs!==void 0&&{reportedNs:L.reportedNs}}),_+=L.wallNs,O++,!0},done:j,result(){let L=A.map((H)=>I?H.reportedNs??H.wallNs:H.wallNs),K=u(L),X=P(K,A.map((H)=>H.exitCode),I?"reported":"subprocess");return{trials:A,timing:K,warnings:X}}}}async function w(s){let h=Ie(s);await h.warmup();while(await h.step());return h.result()}var Be=new URL("./runner.ts",import.meta.url).pathname,Tn="node_modules/.cache/ostia";function v(){return Math.max(1,navigator.hardwareConcurrency||1)}async function R(s,h){let m=new Set;for(let T of s){let U=new Bun.Glob(T);for await(let B of U.scan({cwd:h,absolute:!1}))m.add(B)}return[...m].sort()}function Cn(s){if(s===void 0)return;return s==="auto"?v():s}async function N(s,h,m=process.cwd()){return{suites:s.suites.length>0?s.suites:h?.suites?await R(h.suites,m):[],budgetMs:s.budgetMs??h?.budgetMs,samples:s.samples??h?.samples,minSamples:s.minSamples??h?.minSamples,jobs:s.jobs??Cn(h?.jobs),gc:s.gc||(h?.gc??!1),cpu:s.cpu||(h?.cpu??!1),alloc:s.alloc||(h?.alloc??!1),filter:s.filter??h?.filter,isolate:s.isolate||(h?.isolate??!1),preload:s.preload.length>0?s.preload:h?.preload??[],bunFlags:s.bunFlags,outDir:s.outDir??h?.outDir,noiseCheck:s.noiseCheck,cwd:m}}async function c(s){let m=`${s.outDir??Tn}/bench-tmp`,T=s.cwd??process.cwd(),U=Math.max(1,Math.floor(s.jobs??1)),B={budgetMs:s.budgetMs,samples:s.samples,minSamples:s.minSamples,gc:s.gc,cpu:s.cpu,alloc:s.alloc,noiseCheck:s.noiseCheck},I=s.suites.map((j)=>j.startsWith("/")?j:`${T}/${j}`),A=(s.preload??[]).map((j)=>j.startsWith("/")?j:`${T}/${j}`),_=s.bunFlags??[],O=async(j,Y)=>{let L=new Set,K=0,X,H=async()=>{while(X===void 0&&K<j.length){let te=K++;try{let re=Bun.spawn(j[te],{cwd:T,stdout:"inherit",stderr:"inherit",stdin:"ignore"});L.add(re);let oe=await re.exited;if(L.delete(re),oe!==0)throw Error(`Bench suite failed: ${Y(te)} (runner exited ${oe})`)}catch(re){X??=re instanceof Error?re:Error(String(re));for(let oe of L)oe.kill()}}};if(await Promise.all(Array.from({length:Math.min(U,j.length)},H)),X)throw X};try{let j=I.map((Q)=>`${m}/${e("bench-plan",Q)}.json`),Y=I.map((Q)=>`${m}/${e("bench-primary",Q)}.json`),L=I.map((Q,Z)=>["bun",..._,Be,Q,Y[Z],JSON.stringify({...B,filter:s.filter,isolate:s.isolate,preload:A,planPath:j[Z]})]);await O(L,(Q)=>s.suites[Q]);let K=await Promise.all(j.map(async(Q)=>{let{tasks:Z}=await Bun.file(Q).json();return Z})),X=await Promise.all(Y.map(t)),H=[];for(let Q=0;Q<K.length;Q++)for(let Z of K[Q])if(Z.isolate)H.push({suiteIndex:Q,taskIds:[Z.id]});let te=H.map((Q,Z)=>`${m}/${e("bench-item",I[Q.suiteIndex],Z)}.json`),re=H.map((Q,Z)=>["bun",..._,Be,I[Q.suiteIndex],te[Z],JSON.stringify({...B,taskIds:Q.taskIds,preload:A,markIsolated:!0})]);await O(re,(Q)=>s.suites[H[Q].suiteIndex]);let oe=await Promise.all(te.map(t)),ne=[],q=[];for(let Q=0;Q<K.length;Q++){let Z=X[Q],ie=new Map;for(let ee of Z.measurements){let ae=ie.get(ee.workloadId)??[];ae.push(ee),ie.set(ee.workloadId,ae)}let se=0,ce=new Map;H.forEach((ee,ae)=>{if(ee.suiteIndex===Q)ce.set(ee.taskIds[0],oe[ae])});for(let ee of K[Q])if(ee.isolate){let ae=ce.get(ee.id),de=ae.workloads[0];ne.push(de);for(let ge of ae.measurements)if(ge.workloadId===de.id)q.push(ge)}else{let ae=Z.workloads[se];ne.push(ae),se++;for(let de of ie.get(ae.id)??[])q.push(de)}}return n(ne,q,X[0]?.environment)}finally{await Bun.spawn(["rm","-rf",m]).exited}}function J(s,h,m=8){if(m<=1)throw RangeError(`range: multiplier must be > 1, got ${m}`);if(s<=0)throw RangeError(`range: start must be > 0, got ${s}`);let T=[];for(let U=s;U<=h;U*=m)T.push(U);if(!T.includes(h))T.push(h);return T}function V(s,h){let m=Object.keys(s),T=(U,B)=>{if(U===m.length){W(B,()=>h(B));return}let I=m[U];for(let A of s[I])T(U+1,{...B,[I]:A})};T(0,{})}function In(s){let h=s>>>0;return()=>{h=h+1831565813|0;let m=Math.imul(h^h>>>15,1|h);return m=m+Math.imul(m^m>>>7,61|m)^m,((m^m>>>14)>>>0)/4294967296}}var $e=2000,Dn=2000;function _e(s){let h=s.length,m=h>>1;return h%2===0?(s[m-1]+s[m])/2:s[m]}function Ee(s,h){let m=s.length;if(m===1)return s[0];let T=h*(m-1),U=Math.floor(T),B=Math.ceil(T);if(U===B)return s[U];let I=T-U;return s[U]*(1-I)+s[B]*I}function Ae(s,h,m){if(s.length<=m)return s;let T=[...s];for(let U=0;U<m;U++){let B=U+Math.floor(h()*(T.length-U)),I=T[U];T[U]=T[B],T[B]=I}return T.slice(0,m)}function je(s,h){let m=s.length,T=new Float64Array(m);for(let U=0;U<m;U++)T[U]=s[Math.floor(h()*m)];return T.sort(),_e(T)}function Le(s,h,m={}){let T=m.seed??(Date.now()^Math.imul(s.length,2654435761))>>>0,U=In(T),B=m.iterations??Dn,I=s.length>$e||h.length>$e,A=Ae(s,U,$e),_=Ae(h,U,$e),O=new Float64Array(A);O.sort();let j=_e(O),Y=new Float64Array(B);for(let L=0;L<B;L++){let K=je(A,U),X=je(_,U);Y[L]=j===0?X-K===0?0:1/0:(X-K)/j*100}return Y.sort(),{ci95:[Ee(Y,0.025),Ee(Y,0.975)],seed:T,data:{subsampled:I,iterations:B}}}function Sn(s){let h=s<0?-1:1,m=Math.abs(s),T=0.254829592,U=-0.284496736,B=1.421413741,I=-1.453152027,A=1.061405429,_=0.3275911,O=1/(1+0.3275911*m),j=1-((((1.061405429*O+-1.453152027)*O+1.421413741)*O+-0.284496736)*O+0.254829592)*O*Math.exp(-m*m);return h*j}function Nn(s){return 0.5*(1+Sn(s/Math.SQRT2))}function He(s,h){let m=s.length,T=h.length,U=m+T,B=[...s.map((H)=>({v:H,group:0})),...h.map((H)=>({v:H,group:1}))].sort((H,te)=>H.v-te.v),I=new Float64Array(U),A=0,_=0;while(_<U){let H=_;while(H+1<U&&B[H+1].v===B[_].v)H++;let te=(_+H)/2+1;for(let oe=_;oe<=H;oe++)I[oe]=te;let re=H-_+1;if(re>1)A+=re**3-re;_=H+1}let O=0;for(let H=0;H<U;H++)if(B[H].group===0)O+=I[H];let j=O-m*(m+1)/2,Y=m*T/2,L=Math.sqrt(m*T*(U+1-A/(U*(U-1)))/12),K=L===0?0:(j-Y)/L,X=Math.min(1,Math.max(0,2*(1-Nn(Math.abs(K)))));return{u:j,z:K,pValue:X}}var l={timingPct:5,frameSelfPct:10,heapTypePct:10,minFrameSelfUs:1000,alpha:0.01,bootstrapIterations:2000},De=5;function Re(s,h){if(s===0)return h===0?0:1/0;return(h-s)/s*100}function he(s,h,m){return s.measurements.find((T)=>T.workloadId===h&&T.phase===m)}function b(s,h,m=l){let T=new Set(h.workloads.map((B)=>B.id)),U=[];for(let B of s.workloads){if(!T.has(B.id))continue;let I=M(s,h,B.id,m);if(I)U.push(I)}return U}function M(s,h,m,T=l){let U=he(s,m,"timing"),B=he(h,m,"timing"),I=he(s,m,"cpu"),A=he(h,m,"cpu"),_=he(s,m,"heap"),O=he(h,m,"heap"),j=h.workloads.find((ne)=>ne.id===m),Y=U?.id??I?.id??_?.id,L=B?.id??A?.id??O?.id??j?.id;if(!Y||!L)return;let K=!1,X=[],H=Math.max(T.timingPct,s.environment?.noise.floorPct??0,h.environment?.noise.floorPct??0),te;if(U?.timing&&j?.skipped&&!B?.timing)te={medianDeltaPct:0,meanDeltaPct:0,effectPct:0,verdict:"unchanged"},X.push({code:"skipped",message:"Candidate has no timing measurement for this workload (task.skip()); treated as unchanged.",data:{workloadId:m}});else if(U?.timing&&B?.timing){let ne=U.timing.samples,q=B.timing.samples,Q=Re(U.timing.median,B.timing.median),Z=Re(U.timing.mean,B.timing.mean);if(ne.length<De||q.length<De){let ie=Q>H?"regressed":Q<-H?"improved":"unchanged";if(ie==="regressed")K=!0;te={medianDeltaPct:Q,meanDeltaPct:Z,effectPct:Q,verdict:ie},X.push({code:"thin-comparison",message:`Only ${ne.length} baseline / ${q.length} candidate sample(s); falling back to a point-estimate threshold instead of a bootstrap CI and Mann-Whitney test (needs ${De}+ per side).`,data:{baseSamples:ne.length,candSamples:q.length}})}else{let ie=Le(ne,q,{iterations:T.bootstrapIterations}),se=He(ne,q),ce=ie.ci95[0]>H&&se.pValue<T.alpha?"regressed":ie.ci95[1]<-H&&se.pValue<T.alpha?"improved":"unchanged";if(ce==="regressed")K=!0;te={medianDeltaPct:Q,meanDeltaPct:Z,effectPct:Q,ci95:ie.ci95,pValue:se.pValue,seed:ie.seed,verdict:ce}}}let re;if(I?.cpu&&A?.cpu){let ne=new Map(I.cpu.totals.map((se)=>[I.cpu.frames[se.frameIx].key,se])),q=new Map(A.cpu.totals.map((se)=>[A.cpu.frames[se.frameIx].key,se])),Q=new Map(I.cpu.frames.map((se)=>[se.key,se.name])),Z=new Map(A.cpu.frames.map((se)=>[se.key,se.name]));re=[...new Set([...ne.keys(),...q.keys()])].map((se)=>{let ce=ne.get(se)?.selfUs??0,ee=q.get(se)?.selfUs??0;return{frameKey:se,name:Z.get(se)??Q.get(se)??se,baseSelfUs:ce,candSelfUs:ee,deltaPct:Re(ce,ee)}}).sort((se,ce)=>Math.abs(ce.deltaPct)-Math.abs(se.deltaPct));for(let se of re)if((se.baseSelfUs>=T.minFrameSelfUs||se.candSelfUs>=T.minFrameSelfUs)&&se.deltaPct>T.frameSelfPct)K=!0}let oe;if(_?.heap&&O?.heap){let ne=new Map(_.heap.typeCounts.map((Z)=>[Z.type,Z])),q=new Map(O.heap.typeCounts.map((Z)=>[Z.type,Z]));oe=[...new Set([...ne.keys(),...q.keys()])].map((Z)=>{let ie=ne.get(Z),se=q.get(Z);return{type:Z,baseCount:ie?.count??0,candCount:se?.count??0,baseBytes:ie?.retainedBytes,candBytes:se?.retainedBytes,deltaPct:Re(ie?.count??0,se?.count??0)}}).sort((Z,ie)=>Math.abs(ie.deltaPct)-Math.abs(Z.deltaPct));for(let Z of oe)if(Z.deltaPct>T.heapTypePct)K=!0}return{id:e("cmp",Y,L),baselineMeasurementId:Y,candidateMeasurementId:L,timing:te,...X.length>0&&{warnings:X},frames:re,heapTypes:oe,thresholds:{...T,effectiveTimingPct:H},verdict:K?"fail":"pass"}}function fe(s,h){if(h){let m=s.measurements.find((T)=>T.id===h);return m?.cpu?[m]:[]}return s.measurements.filter((m)=>m.phase==="cpu"&&m.cpu)}function be(s){let h=s.nodes,m=h.length,T=Fn(s),U=new Int32Array(m).fill(-1);for(let _=0;_<m;_++)for(let O of h[_].children){let j=T(O);if(j!==-1)U[j]=_}let B=[];for(let _=0;_<m;_++)if(U[_]===-1)B.push(_);let I=[],A=[];for(let _=B.length-1;_>=0;_--)A.push(B[_]);while(A.length>0){let _=A.pop();I.push(_);for(let O of h[_].children){let j=T(O);if(j!==-1&&U[j]===_)A.push(j)}}return{count:m,indexOf:T,parentIx:U,roots:B,order:I}}function Fn(s){let h=s.nodes,m=h.length,T=1/0,U=-1/0,B=!0;for(let A=0;A<m;A++){let _=h[A].id;if(!Number.isInteger(_)){B=!1;break}if(_<T)T=_;if(_>U)U=_}if(B&&m>0&&U-T<m*4+64){let A=U-T+1,_=new Int32Array(A).fill(-1);for(let O=0;O<m;O++)_[h[O].id-T]=O;return(O)=>{let j=O-T;return j>=0&&j<A?_[j]:-1}}let I=new Map;for(let A=0;A<m;A++)I.set(h[A].id,A);return(A)=>I.get(A)??-1}function Ve(s,h){let{count:m,indexOf:T,parentIx:U,order:B}=h,I=new Float64Array(m),A=new Float64Array(m),_=s.samples?.nodeIds??[],O=s.samples?.timeDeltasUs??[];for(let Y=0;Y<_.length;Y++){let L=T(_[Y]);if(L===-1)continue;I[L]+=O[Y]??0,A[L]+=1}let j=new Float64Array(m);for(let Y=B.length-1;Y>=0;Y--){let L=B[Y];j[L]+=I[L];let K=U[L];if(K>=0)j[K]+=j[L]}return{selfUs:I,totalUs:j,samples:A}}var ze={name:"collapsed",async render(s,h={}){return{files:fe(s,h.measurementId).map((U)=>{let B=U.cpu,{nodes:I,frames:A}=B,_=be(B),O=Array(_.count);for(let X of _.order){let H=A[I[X].frameIx].name||"(anonymous)",te=_.parentIx[X];O[X]=te===-1?H:`${O[te]};${H}`}let j=new Float64Array(_.count),Y=[],L=B.samples?.nodeIds??[];for(let X=0;X<L.length;X++){let H=_.indexOf(L[X]);if(H===-1)continue;if(j[H]++===0)Y.push(H)}let K=Array(Y.length);for(let X=0;X<Y.length;X++){let H=Y[X];K[X]=`${O[H]} ${j[H]}`}return{path:`${U.id}.collapsed.txt`,content:K.join(`
|
|
3
|
-
`)+(K.length>0?`
|
|
4
|
-
`:"")}})}}};var Ke={name:"cpuprofile",async render(s,h={}){let m=fe(s,h.measurementId),T=[],U=[];for(let B of m){if(B.cpu?.origin!=="cpu-prof"&&B.cpu?.origin!=="inspector"){U.push(`${B.id} (origin ${B.cpu?.origin??"unknown"} has no .cpuprofile artifact to pass through)`);continue}let I=B.artifacts.find((_)=>_.kind==="cpuprofile");if(!I){U.push(`${B.id} (no cpuprofile artifact recorded on this run)`);continue}let A=Bun.file(I.path);if(!await A.exists()){U.push(`${B.id} (artifact missing on disk: ${I.path})`);continue}T.push({path:`${B.id}.cpuprofile`,content:await A.text()})}if(T.length===0&&U.length>0)return{text:`No .cpuprofile artifacts available:
|
|
5
|
-
${U.map((B)=>` - ${B}`).join(`
|
|
6
|
-
`)}
|
|
7
|
-
`};return{files:T}}};var Ge={name:"json",async render(s){return{text:S(s)}}};var Je={name:"jsonl",async render(s){let{measurements:h,...m}=s;return{text:`${[x(m),...h.map((U)=>x(U))].join(`
|
|
8
|
-
`)}
|
|
9
|
-
`}}};var Wn={ns:1,\u{b5}s:1000,ms:1e6,s:1e9};function xe(s){let h=Math.abs(s);if(h>=1e9)return"s";if(h>=1e6)return"ms";if(h>=1000)return"\xB5s";return"ns"}function Un(s){let h=Math.floor(Math.log10(Math.max(Math.abs(s),1)))+1;return Math.max(1,3-h)}function me(s,h=xe(s)){let m=s/Wn[h];return`${m.toFixed(Un(m))} ${h}`}function Me(s){return`${s.cpuModel} \xB7 ${s.cores} cores \xB7 load ${s.loadAvg1.toFixed(1)} \xB7 noise floor ${s.noise.floorPct.toFixed(1)}%`}function Ye(s){return(s/1e6).toFixed(3)}function Pe(s){return s?.label??s?.command?.join(" ")??s?.entry?.task??s?.id??"unknown"}function qe(s){if(!s?.params)return"";return` (${Object.entries(s.params).map(([m,T])=>`${m}=${T}`).join(", ")})`}function On(s){let h;for(let m of s){let T=m?.params?Object.keys(m.params):void 0;if(T?.length!==2)return;if(h===void 0)h=T;else if(T.length!==h.length||T.some((U,B)=>U!==h[B]))return}return h}var Qe=10,Xe=10,Ze={name:"markdown",async render(s){let h=new Map(s.workloads.map((I)=>[I.id,I])),m=[];m.push("# Profile Report","");let T=s.git?` \xB7 ${s.git.sha} (${s.git.branch}${s.git.dirty?", dirty":""})`:"";if(m.push(`Bun ${s.bunVersion} \xB7 ostia ${s.toolVersion} \xB7 ${s.platform.os}/${s.platform.arch} \xB7 ${s.createdAt}${T}`,""),s.environment)m.push(Me(s.environment),"");let U=s.measurements.filter((I)=>I.phase==="timing"&&I.timing!==void 0),B=s.workloads.filter((I)=>I.skipped&&!U.some((A)=>A.workloadId===I.id));if(U.length>0||B.length>0){m.push("## Timing","");let I=new Map,A=[];for(let j of U){let Y=h.get(j.workloadId)?.entry?.group;if(Y===void 0){A.push(j);continue}let L=I.get(Y);if(L)L.push(j);else I.set(Y,[j])}let _=new Map;for(let[j,Y]of I){let L=On(Y.map((K)=>h.get(K.workloadId)));if(L)_.set(j,{keys:L,runs:Y});else A.push(...Y)}if(A.length>0||B.length>0){m.push("| Task | Median | Spread (p75\u2026p99) | Mean \xB1 SD | Range | MAD |","|---|---|---|---|---|---|");for(let j of A){let Y=h.get(j.workloadId),L=Pe(Y)+qe(Y),K=j.timing,X=xe(K.median),H=K.p75??K.median,te=K.p99??K.max,re=K.mad!==void 0?me(K.mad,X):"-";m.push(`| ${L} | ${me(K.median,X)} | ${me(H,X)}\u2026${me(te,X)} | ${me(K.mean,X)} \xB1 ${me(K.stddev,X)} | ${me(K.min,X)}\u2026${me(K.max,X)} | ${re} |`)}for(let j of B){let Y=Pe(j)+qe(j);m.push(`| ${Y} | - skipped | - | - | - | - |`)}m.push("")}for(let[j,{keys:Y,runs:L}]of _){let[K,X]=Y,H=[],te=[],re=new Map;for(let oe of L){let ne=h.get(oe.workloadId).params,q=ne[K],Q=ne[X];if(!H.includes(q))H.push(q);if(!te.includes(Q))te.push(Q);re.set(`${q}\x00${Q}`,oe)}m.push(`### ${j} (${K} \xD7 ${X})`,""),m.push(`| ${K} \\ ${X} | ${te.join(" | ")} |`,`|---|${te.map(()=>"---").join("|")}|`);for(let oe of H){let ne=te.map((q)=>{let Q=re.get(`${oe}\x00${q}`);return Q?me(Q.timing.median):"-"});m.push(`| ${oe} | ${ne.join(" | ")} |`)}m.push("")}let O=U.filter((j)=>j.warnings.length>0);if(O.length>0){m.push("### Warnings","");for(let j of O){let Y=Pe(h.get(j.workloadId));for(let L of j.warnings)m.push(`- **${Y}**: ${L.message} (\`${L.code}\`)`)}m.push("")}}for(let I of s.measurements){if(I.phase!=="cpu"&&I.phase!=="heap")continue;let A=Pe(h.get(I.workloadId));if(I.phase==="cpu"){if(m.push(`## CPU capture - ${A}`,""),m.push(`instrumented, diagnostic wall ${Ye(I.diagnosticWallNs??0)}ms`,""),I.cpu){m.push(`origin: \`${I.cpu.origin}\`, interval: ${I.cpu.samplingIntervalUs}\xB5s`,""),m.push("| Self % | Self (ms) | Total (ms) | Frame |","|---|---|---|---|");let _=I.cpu.totals.reduce((O,j)=>O+j.selfUs,0)||1;for(let O of I.cpu.totals.slice(0,Qe)){let j=I.cpu.frames[O.frameIx],Y=(O.selfUs/_*100).toFixed(1);m.push(`| ${Y}% | ${(O.selfUs/1000).toFixed(2)} | ${(O.totalUs/1000).toFixed(2)} | ${j?.name||"(anonymous)"} |`)}if(m.push(""),I.jit){let O=I.jit.tiers;m.push(`JIT tiers: LLInt ${O.llint} \xB7 Baseline ${O.baseline} \xB7 DFG ${O.dfg} \xB7 FTL ${O.ftl}`,"")}}}else if(m.push(`## Heap snapshot - ${A}`,""),m.push(`instrumented, diagnostic wall ${Ye(I.diagnosticWallNs??0)}ms`,""),I.heap){m.push(`${I.heap.objectCount??"?"} objects, ${((I.heap.heapSizeBytes??0)/1e6).toFixed(2)}MB`,""),m.push("| Count | Type |","|---|---|");for(let _ of I.heap.typeCounts.slice(0,Xe))m.push(`| ${_.count} | ${_.type} |`);m.push("")}for(let _ of I.artifacts)m.push(`- artifact: \`${_.path}\``);for(let _ of I.warnings)m.push(`- ! ${_.message} (\`${_.code}\`)`);if(I.artifacts.length>0||I.warnings.length>0)m.push("")}if(s.comparisons&&s.comparisons.length>0){m.push("## Comparisons","");for(let I of s.comparisons){let A=s.measurements.find((O)=>O.id===I.candidateMeasurementId),_=Pe(A?h.get(A.workloadId):h.get(I.candidateMeasurementId));if(m.push(`### ${I.verdict==="pass"?"\u2713":"\u2717"} ${_}`,""),I.timing){let O=I.timing.medianDeltaPct>0?"+":"";m.push(`- timing: ${O}${I.timing.medianDeltaPct.toFixed(1)}% median (**${I.timing.verdict}**)`)}for(let O of I.frames?.slice(0,Qe)??[]){if(Math.abs(O.deltaPct)<0.5)continue;let j=O.deltaPct>0?"+":"";m.push(`- frame \`${O.name}\`: ${j}${O.deltaPct.toFixed(1)}% self-time (${(O.baseSelfUs/1000).toFixed(2)}ms \u2192 ${(O.candSelfUs/1000).toFixed(2)}ms)`)}for(let O of I.heapTypes?.slice(0,Xe)??[]){if(Math.abs(O.deltaPct)<0.5)continue;let j=O.deltaPct>0?"+":"";m.push(`- heap \`${O.type}\`: ${j}${O.deltaPct.toFixed(1)}% count (${O.baseCount} \u2192 ${O.candCount})`)}m.push("")}}return{text:m.join(`
|
|
10
|
-
`)}}};var Bn=15;function Se(s){return`n${s}`}function En(s,h,m){return`${(s||"(anonymous)").replace(/"/g,"'")} (self ${(h/1000).toFixed(2)}ms, total ${(m/1000).toFixed(2)}ms)`}function An(s,h,m,T){let U=[];if(T<=0)return U;for(let B=0;B<h;B++){if(B===m)continue;let I=s[B];if(U.length===T&&I<=s[U[T-1]])continue;let A=U.length;while(A>0&&s[U[A-1]]<I)A--;if(U.splice(A,0,B),U.length>T)U.pop()}return U}var en={name:"mermaid",async render(s,h={}){let m=h.topN??Bn;return{files:fe(s,h.measurementId).map((B)=>{let I=B.cpu,{nodes:A,frames:_}=I,O=be(I),{selfUs:j,totalUs:Y}=Ve(I,O),{parentIx:L}=O,K=O.roots[0]??-1,X=An(j,O.count,K,m),H=new Set(K!==-1?[K]:[]),te=[];for(let oe of X){te.length=0;for(let ne=oe;ne!==-1;ne=L[ne])te.push(ne);for(let ne=te.length-1;ne>=0;ne--)H.add(te[ne])}let re=["graph TD"];for(let oe of H){let ne=A[oe].id;re.push(` ${Se(ne)}["${En(_[A[oe].frameIx].name,j[oe],Y[oe])}"]`)}for(let oe of H){let ne=L[oe];if(ne!==-1&&H.has(ne))re.push(` ${Se(A[ne].id)} --> ${Se(A[oe].id)}`)}return{path:`${B.id}.mermaid.md`,content:`${re.join(`
|
|
11
|
-
`)}
|
|
12
|
-
`}})}}};function nn(s){if(!s?.entry)return;if(s.entry.group!==void 0)return s.entry.group;let h=s.entry.task,m=h.lastIndexOf("/");return m===-1?void 0:h.slice(0,m)}function ve(s){let h=Math.min(...s.map((U)=>U.run.timing.median)),m=new Map;for(let U of s){let B=nn(U.workload);if(B===void 0)continue;let I=m.get(B);if(I)I.push(U);else m.set(B,[U])}let T=new Map;for(let U of s){let B=nn(U.workload);if(B===void 0){T.set(U,h);continue}let I=m.get(B)??[U],A=I.find((_)=>_.workload?.baseline);T.set(U,A?A.run.timing.median:Math.min(...I.map((_)=>_.run.timing.median)))}return T}function ue(s){return Number.isFinite(s)?Number(s.toPrecision(6)):s}function jn(s,h){return s?.entry?.task??s?.label??s?.command?.join(" ")??h.workloadId}function _n(s,h){let m={task:s.entry?.task??s.label??s.id,skipped:!0,warnings:[]};if(s.entry?.group!==void 0)m.group=s.entry.group;if(s.description!==void 0)m.description=s.description;if(s.groupDescription!==void 0)m.groupDescription=s.groupDescription;if(s.params!==void 0)m.params=s.params;if(h?.timing)m.delta={medianPct:ue(h.timing.medianDeltaPct),meanPct:ue(h.timing.meanDeltaPct),verdict:h.timing.verdict,pass:h.verdict==="pass"};return m}function Ln(s){let h=new Map(s.workloads.map((O)=>[O.id,O])),m=s.measurements.filter((O)=>O.phase==="timing"&&O.timing!==void 0).map((O)=>({run:O,workload:h.get(O.workloadId)})),T=m.length>1?ve(m):void 0,U=new Map((s.comparisons??[]).map((O)=>[O.candidateMeasurementId,O])),B=new Set(m.map((O)=>O.run.workloadId)),I=new Map;for(let O of s.measurements){if(O.phase!=="cpu"||O.warnings.length===0)continue;let j=I.get(O.workloadId)??[];I.set(O.workloadId,[...j,...O.warnings])}let A=s.workloads.filter((O)=>O.skipped&&!B.has(O.id)).map((O)=>_n(O,U.get(O.id)));return[...m.map((O)=>{let{run:j,workload:Y}=O,L=j.timing,K={task:jn(Y,j),unit:"ns",samples:L.samples.length,mean:ue(L.mean),median:ue(L.median),stddev:ue(L.stddev),stddevPct:ue(L.mean===0?0:L.stddev/L.mean*100),min:ue(L.min),max:ue(L.max),warnings:[...j.warnings,...I.get(j.workloadId)??[]].map((H)=>H.data?{code:H.code,data:H.data}:{code:H.code})};if(L.p75!==void 0)K.p75=ue(L.p75);if(L.p99!==void 0)K.p99=ue(L.p99);if(L.mad!==void 0)K.mad=ue(L.mad);if(Y?.entry?.group!==void 0)K.group=Y.entry.group;if(Y?.description!==void 0)K.description=Y.description;if(Y?.groupDescription!==void 0)K.groupDescription=Y.groupDescription;if(Y?.params!==void 0)K.params=Y.params;if(T)K.relative=ue(L.median/(T.get(O)??L.median));if(Y?.baseline)K.baseline=!0;let X=U.get(j.id);if(X?.timing){if(K.delta={medianPct:ue(X.timing.medianDeltaPct),meanPct:ue(X.timing.meanDeltaPct),verdict:X.timing.verdict,pass:X.verdict==="pass"},X.timing.ci95)K.delta.ci95=[ue(X.timing.ci95[0]),ue(X.timing.ci95[1])];if(X.timing.pValue!==void 0)K.delta.pValue=ue(X.timing.pValue)}return K}),...A]}var tn={name:"minimal",async render(s){let h=Ln(s).map((m)=>JSON.stringify(m));return{text:h.length>0?`${h.join(`
|
|
13
|
-
`)}
|
|
14
|
-
`:""}}};var Hn="https://www.speedscope.app/file-format-schema.json";function rn(s){return s?.label??s?.command?.join(" ")??s?.entry?.task??"profile"}var sn={name:"speedscope",async render(s,h={}){let m=fe(s,h.measurementId),T=new Map(s.workloads.map((B)=>[B.id,B]));return{files:m.map((B)=>{let I=B.cpu,{nodes:A}=I,_=be(I),O=I.samples?.nodeIds??[],j=I.samples?.timeDeltasUs??[],Y=Array(_.count);for(let H of _.order){let te=_.parentIx[H],re=A[H].frameIx;Y[H]=te===-1?[re]:[...Y[te],re]}let L=Array(O.length);for(let H=0;H<O.length;H++){let te=_.indexOf(O[H]);L[H]=te===-1?[]:Y[te]}let K=0;for(let H=0;H<j.length;H++)K+=j[H];let X={$schema:Hn,exporter:"ostia",name:rn(T.get(B.workloadId)),activeProfileIndex:0,shared:{frames:I.frames.map((H)=>({name:H.name||"(anonymous)",file:H.url,line:H.line!==void 0?H.line+1:void 0}))},profiles:[{type:"sampled",name:rn(T.get(B.workloadId)),unit:"microseconds",startValue:0,endValue:K,samples:L,weights:j}]};return{path:`${B.id}.speedscope.json`,content:`${JSON.stringify(X,null,2)}
|
|
15
|
-
`}})}}};function Vn(s){return(s/1e6).toFixed(3)}function zn(s){if(s<1024)return`${s.toFixed(0)}B`;if(s<1048576)return`${(s/1024).toFixed(2)}KB`;return`${(s/1048576).toFixed(2)}MB`}function Te(s){return s.label??s.command?.join(" ")??s.entry?.task??s.id}function Kn(s){if(!s?.entry)return;if(s.entry.group!==void 0)return s.entry.group;let h=s.entry.task,m=h.lastIndexOf("/");return m===-1?void 0:h.slice(0,m)}var an={name:"table",async render(s){let h=s.measurements.filter((ee)=>ee.phase==="timing"&&ee.timing!==void 0),m=new Map(s.workloads.map((ee)=>[ee.id,ee])),T=s.environment?[Me(s.environment),""]:[],U=s.workloads.filter((ee)=>ee.skipped&&!h.some((ae)=>ae.workloadId===ee.id));if(h.length===0&&U.length===0){let ee=on(s,m);return{text:ee.length>0?`${[...T,...ee].join(`
|
|
16
|
-
`)}
|
|
17
|
-
`:`(no timing runs)
|
|
18
|
-
`}}let B=new Map(h.map((ee)=>[ee.workloadId,ee])),I=[];for(let ee of s.workloads){let ae=B.get(ee.id);if(ae)I.push({kind:"measured",run:ae,workload:ee,label:Te(ee)});else if(ee.skipped)I.push({kind:"skipped",workload:ee,label:Te(ee)})}let A=I.filter((ee)=>ee.kind==="measured"),_=new Map(s.measurements.filter((ee)=>ee.phase==="memstats"&&ee.memory?.bytesPerOp!==void 0).map((ee)=>[ee.workloadId,ee.memory.bytesPerOp])),O=_.size>0,j=A.length>1,Y=ve(A),L=new Map,K=new Map,X;for(let ee of I){let ae=Kn(ee.workload);if(ae!==X){if(ae!==void 0)K.set(ee,ae);X=ae}L.set(ee,ae!==void 0?" ":"")}let H=Math.max(4,...I.map((ee)=>L.get(ee).length+ee.label.length)),te=10,re=18,oe=18,ne=10,q=[...T],Q=O?` ${"Alloc/op".padEnd(ne)}`:"",Z=`${"Task".padEnd(H)} ${"Median".padEnd(te)} ${"Spread".padEnd(re)} ${"Range".padEnd(oe)}${Q}${j?" Relative":""}`;q.push(Z),q.push("-".repeat(Z.length));let ie=[];for(let ee of I){let ae=K.get(ee);if(ae!==void 0)q.push(`${ae}:`);let de=L.get(ee);if(ee.kind==="skipped"){q.push(`${(de+ee.label).padEnd(H)} - skipped`);continue}let{run:ge,label:ln,workload:Ce}=ee,pe=ge.timing,ye=xe(pe.median),dn=pe.p75??pe.median,fn=pe.p99??pe.max,gn=me(pe.median,ye),hn=`${me(dn,ye)}\u2026${me(fn,ye)}`,bn=`${me(pe.min,ye)}\u2026${me(pe.max,ye)}`,we=`${(de+ln).padEnd(H)} ${gn.padEnd(te)} ${hn.padEnd(re)} ${bn.padEnd(oe)}`;if(O){let le=Ce?_.get(Ce.id):void 0,yn=le!==void 0?zn(le):"";we+=` ${yn.padEnd(ne)}`}if(j){let le=pe.median/(Y.get(ee)??pe.median);if(le===1)we+=Ce?.baseline?" 1.00\xD7 (baseline)":" 1.00\xD7";else if(le>1)we+=` ${le.toFixed(2)}\xD7 slower`;else we+=` ${(1/le).toFixed(2)}\xD7 faster`}if(q.push(we),ge.warnings.length>0)q.push(`${" ".repeat(de.length)} ! ${ge.warnings.map((le)=>le.code).join(", ")}`),ie.push(ee)}if(ie.length>0){q.push(""),q.push("Warnings:");for(let ee of ie)for(let ae of ee.run.warnings)q.push(` ${ee.label}: ${ae.message}`)}let se=Jn(s,m);if(se.length>0)q.push(""),q.push(...se);let ce=on(s,m);if(ce.length>0)q.push(""),q.push(...ce);return{text:`${q.map((ee)=>ee.trimEnd()).join(`
|
|
19
|
-
`)}
|
|
20
|
-
`}}};function Gn(s,h,m){let T=s.measurements.find((B)=>B.id===m),U=T?h.get(T.workloadId):h.get(m);return U?Te(U):m}function on(s,h){if(!s.comparisons||s.comparisons.length===0)return[];let m=[];for(let T of s.comparisons){let U=Gn(s,h,T.candidateMeasurementId),B=T.verdict==="pass"?"\u2713":"\u2717";if(m.push(`${B} ${U}`),T.timing){let I=(A)=>`${A>=0?"+":""}${A.toFixed(1)}%`;if(T.timing.ci95&&T.timing.pValue!==void 0){let A=T.timing.pValue<0.001?"p<0.001":`p=${T.timing.pValue.toFixed(3)}`;m.push(` timing: ${I(T.timing.medianDeltaPct)} median, 95% CI [${I(T.timing.ci95[0])}, ${I(T.timing.ci95[1])}], ${A} (${T.timing.verdict})`)}else m.push(` timing: ${I(T.timing.medianDeltaPct)} median (${T.timing.verdict})`)}if(T.frames)for(let I of T.frames.slice(0,cn)){if(Math.abs(I.deltaPct)<0.5)continue;let A=I.deltaPct>0?"+":"";m.push(` frame ${I.name}: ${A}${I.deltaPct.toFixed(1)}% self-time (${(I.baseSelfUs/1000).toFixed(2)}ms -> ${(I.candSelfUs/1000).toFixed(2)}ms)`)}if(T.heapTypes)for(let I of T.heapTypes.slice(0,un)){if(Math.abs(I.deltaPct)<0.5)continue;let A=I.deltaPct>0?"+":"";m.push(` heap ${I.type}: ${A}${I.deltaPct.toFixed(1)}% count (${I.baseCount} -> ${I.candCount})`)}}return m}var cn=5,un=5;function Jn(s,h){let m=[];for(let T of s.measurements){if(T.phase!=="cpu"&&T.phase!=="heap")continue;let U=h.get(T.workloadId),B=U?Te(U):T.workloadId;if(T.phase==="cpu")if(T.cpu){m.push(`CPU capture - ${B} (instrumented, ${T.cpu.samplingIntervalUs}\xB5s interval, diagnostic wall ${Vn(T.diagnosticWallNs??0)}ms)`);let I=T.cpu.totals.reduce((A,_)=>A+_.selfUs,0)||1;for(let A of T.cpu.totals.slice(0,cn)){let _=T.cpu.frames[A.frameIx],O=(A.selfUs/I*100).toFixed(1);m.push(` ${O.padStart(5)}% ${(A.selfUs/1000).toFixed(2).padStart(8)}ms self ${_?.name??"?"}`)}}else m.push(`CPU capture - ${B} (instrumented, no evidence captured)`);else if(T.heap){let I=((T.heap.heapSizeBytes??0)/1e6).toFixed(2);m.push(`Heap snapshot - ${B} (instrumented, ${T.heap.objectCount??"?"} objects, ${I}MB)`);for(let A of T.heap.typeCounts.slice(0,un))m.push(` ${String(A.count).padStart(6)} ${A.type}`)}else m.push(`Heap snapshot - ${B} (instrumented, no evidence captured)`);for(let I of T.artifacts)m.push(` artifact: ${I.path}`);for(let I of T.warnings)m.push(` ! ${I.message}`)}return m}var r={table:an,json:Ge,markdown:Ze,jsonl:Je,minimal:tn,collapsed:ze,mermaid:en,speedscope:sn,cpuprofile:Ke};function G(s){return s}var Yn="node_modules/.cache/ostia",Ne=1000;async function C(s){let h=o({samples:s.samples??null,budgetMs:s.budgetMs??null,minSamples:s.minSamples??null,warmup:s.warmup??null,cpu:s.cpu??!1,heap:s.heap??!1,cpuIntervalUs:s.cpuIntervalUs??Ne}),T=`${s.outDir??Yn}/artifacts`,U=s.noiseCheck===!1?void 0:f(),B=U?g(U):void 0,I=[],A=[],_=s.commands.map((Y)=>{let L=typeof Y==="string"||Array.isArray(Y)?{command:Y}:Y,K=Array.isArray(L.command)?L.command:y(L.command),X=L.prepare??s.prepare,H=L.timeSource??s.timeSource,te=p(K,L.label??(Array.isArray(L.command)?void 0:L.command),{prepare:X,timeSource:H});return{argv:K,workload:te,prepare:X,timeSource:H}}),O=(s.interleave??!0)&&_.length>1,j=(Y)=>({argv:Y.argv,cwd:s.cwd,env:s.env,samples:s.samples,budgetMs:s.budgetMs,minSamples:s.minSamples,warmup:s.warmup,prepare:Y.prepare,timeSource:Y.timeSource});if(O){let Y=_.map((K)=>Ie(j(K)));for(let K of Y)await K.warmup();let L=!0;while(L){L=!1;for(let K of Y)if(await K.step())L=!0}for(let K=0;K<_.length;K++){let{argv:X,workload:H,prepare:te}=_[K];I.push(H);let re=Y[K].result(),oe=i({workload:H,configFingerprint:h,trials:re.trials,timing:re.timing,warnings:B&&A.length===0?[...re.warnings,B]:re.warnings,interleaved:!0});A.push(oe),A.push(...await mn(H,X,oe.id,h,s,T,te))}return n(I,A,U)}for(let Y of _){let{argv:L,workload:K,prepare:X}=Y;I.push(K);let H=await w(j(Y)),te=i({workload:K,configFingerprint:h,trials:H.trials,timing:H.timing,warnings:B&&A.length===0?[...H.warnings,B]:H.warnings});A.push(te),A.push(...await mn(K,L,te.id,h,s,T,X))}return n(I,A,U)}async function mn(s,h,m,T,U,B,I){let A=[],_=async(O)=>{if(I)await k(I,{phase:O,index:0},{cwd:U.cwd,env:U.env})};if(U.cpu){await _("cpu");let O=`${m}-cpu.cpuprofile`,j=await Fe({argv:h,cwd:U.cwd,env:U.env,artifactDir:B,fileName:O,intervalUs:U.cpuIntervalUs??Ne});A.push(await pn({workload:s,phase:"cpu",configFingerprint:T,diagnosticWallNs:j.diagnosticWallNs,exitCode:j.exitCode,cpu:j.cpu,artifactPath:j.artifactPath,artifactKind:"cpuprofile",warnings:j.warnings}))}if(U.heap){await _("heap");let O=`${m}-heap.heapsnapshot`,j=await Ue({argv:h,cwd:U.cwd,env:U.env,artifactDir:B,fileName:O});A.push(await pn({workload:s,phase:"heap",configFingerprint:T,diagnosticWallNs:j.diagnosticWallNs,exitCode:j.exitCode,heap:j.heap,artifactPath:j.artifactPath,artifactKind:"heapsnapshot",warnings:j.warnings}))}return A}async function pn(s){let h=`${s.workload.id}-${s.phase}-${s.configFingerprint}`,m=s.artifactPath?[await E(h,s.artifactKind,s.artifactPath)]:[];return a({workload:s.workload,phase:s.phase,configFingerprint:s.configFingerprint,diagnosticWallNs:s.diagnosticWallNs,exitCode:s.exitCode,cpu:s.cpu,heap:s.heap,warnings:s.warnings,artifacts:m})}async function z(s,h={}){let m=F(s),T=o({intervalUs:h.intervalUs??Ne,origin:h.origin??"inspector"}),U=(O)=>O.samples?.nodeIds.length===0?[{code:"empty-profile",message:"In-process capture produced zero samples."}]:[];if(h.origin==="jsc"){let{result:O,cpu:j,jit:Y,diagnosticWallNs:L}=await d(s,h),K=a({workload:m,phase:"cpu",configFingerprint:T,diagnosticWallNs:L,cpu:j,jit:Y,warnings:U(j),artifacts:[]});return{result:O,measurement:K,document:n([m],[K])}}let{result:B,cpu:I,diagnosticWallNs:A}=await Oe(s,h),_=a({workload:m,phase:"cpu",configFingerprint:T,diagnosticWallNs:A,cpu:I,warnings:U(I),artifacts:[]});return{result:B,measurement:_,document:n([m],[_])}}
|
|
21
|
-
export{v,R,N,c,l,b,M,w,J,V,r,G,C,z};
|