cpu-4c6c6251.js 5.7 KB

1
  1. import{k as X}from"./index-7a259168.js";/* empty css */import{d as Y,k as u,e as j,w as F,q as J,o as Q,b as ee,X as _,Y as P,Z as o,a9 as n,E as k,aa as S,a7 as x,a6 as h,_ as v,f as l,u as c}from"./vue-fae2b924.js";import{R as te,a as ae,r as ne}from"./pan-ce4f7391.js";import{b as M,c as $}from"./debug-bc334308.js";import{u as le}from"./index-ac72395e.js";import{u as oe,s as se,T as re,bm as ie,bn as V,bo as ue,bp as ce,U as de,a1 as fe,at as ve,aC as me,aG as pe,ac as ge,V as _e}from"./radical-e583b742.js";const ke={class:"cancel-btn"},Ce={class:"view-controls"},be={key:0,class:"heap-stats"},ye={key:0},we={class:"control-group"},he={key:2,class:"text-view"},Ne=Y({__name:"cpu",setup(Te){u();const d=u(!1),m=u(0),y=u("正在分析,请稍等...");let a=null,s=null;const i=u("graph"),q=oe(),{getDarkMode:z}=se(q),N=j(()=>z.value===re.DARK),r=u({samplingIntervalNs:"0",goroutines:[],functions:[],runtimeStats:{blockingTimeNs:"",gcCount:"",gcCpuFraction:0,gcPauseTimeNs:""}}),B=u(null),f=u(null),E=()=>{ne()},w=u("");F(N,e=>{i.value==="graph"&&(f.value&&f.value.querySelector("svg")?A(f.value.querySelector("svg")):T())}),F(i,e=>{e==="graph"?T():J(()=>{O(r.value)})});const D=le();Q(async()=>{try{d.value=!0,await T()}catch(e){console.error("Failed to load heap data:",e)}finally{d.value=!1;const e=await M();r.value=e}});const O=e=>{const t=[e];t.length>0&&D.tableRef.reloadData(t)},I=e=>`${(e*1e4).toFixed(3)}‰`,p=(e,t)=>{if(t==="s")return Number(e)/1e6+"秒";if(t==="ns")return Number(e)+"纳秒";if(t==="ms")return(Number(e)/1e3).toFixed(2)+"毫秒"};async function T(){try{w.value||(w.value=await $()),te().then(e=>{if(!f.value)return;f.value.innerHTML="";const t=e.renderSVGElement(w.value);A(t),f.value.appendChild(t),ae(t)})}catch(e){console.error("Failed to render graph:",e)}}function A(e){if(!e)return;const t=N.value;e.style.backgroundColor=t?"var(--layout-background)":"#f8f8f8";const C=e.querySelectorAll("polygon, ellipse"),b=e.querySelectorAll("text");C.forEach(g=>{g.setAttribute("fill",t?"#1f1f1f":"#ffffff"),g.setAttribute("stroke",t?"#aaaaaa":"#000000")}),b.forEach(g=>{g.setAttribute("fill",t?"var(--text-color)":"#000000")})}const R={maxHeight:"100%",rowConfig:{className:()=>N.value?"dark-row":"",isHover:!0},columnConfig:{useKey:!0},columns:[{field:"samplingIntervalNs",title:"采样间隔",formatter:({row:e})=>p(e.samplingIntervalNs,"s")},{field:"gcCpuFraction",title:"垃圾回收占用CPU时间比例",formatter:({row:e})=>I(e.runtimeStats.gcCpuFraction),minWidth:"100px"},{field:"gcCount",title:"垃圾回收次数",formatter:({row:e})=>e.runtimeStats.gcCount},{field:"blockingTimeNs",title:"阻塞时间",formatter:({row:e})=>p(e.runtimeStats.blockingTimeNs,"ns")},{field:"gcPauseTimeNs",title:"垃圾回收暂停时间",formatter:({row:e})=>p(e.runtimeStats.gcPauseTimeNs,"ms")},{field:"functions",title:"函数调用栈数量",formatter:({row:e})=>e.functions.length||0},{field:"goroutines",title:"协程数量",formatter:({row:e})=>e.goroutines.length||0}],data:[]},U=({key:e})=>{G(Number(e))},G=async(e=10)=>{try{d.value=!0,w.value="",s&&s.abort(),s=new AbortController,m.value=e,a&&clearInterval(a),a=setInterval(()=>{m.value>0?(m.value--,y.value=`正在分析,距离完成还剩 ${m.value} 秒...`):a&&(clearInterval(a),a=null)},1e3),await $(!0,e,s.signal);const t=await M();r.value=t}catch(t){t.name==="AbortError"||console.error("Failed to reload data:",t)}finally{a&&(clearInterval(a),a=null),d.value=!1,y.value="正在分析,请稍等...",s=null}},H=()=>{a&&(clearInterval(a),a=null),s&&(s.abort(),s=null),d.value=!1,m.value=0,y.value="正在分析,请稍等..."};return ee(()=>{a&&(clearInterval(a),a=null),s&&(s.abort(),s=null)}),(e,t)=>{const C=de,b=fe,g=ve,Z=me,K=pe,L=ge;return _(),P(L,{spinning:d.value,tip:y.value},{indicator:o(()=>[n("div",ke,[m.value>0?(_(),P(C,{key:0,type:"danger",onClick:H},{default:o(()=>t[2]||(t[2]=[k(" 取消分析 ")])),_:1})):S("",!0)])]),default:o(()=>[n("div",{class:x(["heap-container",{"graph-view":i.value==="graph"}])},[n("div",Ce,[n("button",{class:x({active:i.value==="graph"}),onClick:t[0]||(t[0]=W=>i.value="graph")}," Graph View ",2),n("button",{class:x({active:i.value==="text"}),onClick:t[1]||(t[1]=W=>i.value="text")}," Text View ",2)]),!d.value&&i.value==="graph"?(_(),h("div",be,[t[3]||(t[3]=n("h3",null,"Cpu Statistics",-1)),r.value.samplingIntervalNs?(_(),h("div",ye,[n("div",null," 采样间隔: "+v(p(r.value.samplingIntervalNs,"s")),1),n("div",null," 垃圾回收占用CPU时间比例: "+v(I(r.value.runtimeStats.gcCpuFraction)),1),n("div",null,"垃圾回收次数: "+v(r.value.runtimeStats.gcCount),1),n("div",null," 阻塞时间: "+v(p(r.value.runtimeStats.blockingTimeNs,"ns")),1),n("div",null," 垃圾回收暂停时间: "+v(p(r.value.runtimeStats.gcPauseTimeNs,"ms")),1),n("div",null,"函数调用栈数量: "+v(r.value.functions.length),1),n("div",null,"协程数量: "+v(r.value.goroutines.length),1)])):S("",!0)])):S("",!0),i.value==="graph"?(_(),h("div",{key:1,class:"viz-container",ref_key:"vizContainer",ref:B},[n("div",we,[l(K,null,{default:o(()=>[l(C,{class:"reset-btn",onClick:E},{icon:o(()=>[l(c(ie))]),default:o(()=>[t[4]||(t[4]=k(" 重置视图 "))]),_:1}),l(Z,null,{overlay:o(()=>[l(g,{onClick:U},{default:o(()=>[l(b,{key:"10"},{default:o(()=>[l(c(V)),t[6]||(t[6]=k(" 10秒 "))]),_:1}),l(b,{key:"30"},{default:o(()=>[l(c(V)),t[7]||(t[7]=k(" 30秒 "))]),_:1}),l(b,{key:"60"},{default:o(()=>[l(c(V)),t[8]||(t[8]=k(" 1分钟 "))]),_:1})]),_:1})]),default:o(()=>[l(C,{type:"primary"},{icon:o(()=>[l(c(ue))]),default:o(()=>[t[5]||(t[5]=k(" 重新分析 ")),l(c(ce))]),_:1})]),_:1})]),_:1})]),n("div",{class:"main-view",ref_key:"mainView",ref:f},null,512)],512)):(_(),h("div",he,[l(c(X),{uid:c(D).uid,gridOptions:R},null,8,["uid"])]))],2)]),_:1},8,["spinning","tip"])}}});const Pe=_e(Ne,[["__scopeId","data-v-570f1997"]]);export{Pe as default};