@@ -805,24 +805,24 @@ func parseCPUMetrics(powermetricsOutput string, cpuMetrics CPUMetrics, modelName
805805
806806 cpuMetrics .ECores = eCores
807807 cpuMetrics .PCores = pCores
808- if cpuMetrics . E1ClusterActive != 0 {
809- // M1 Ultra
808+ multra , mmax := false , false
809+ if cpuMetrics . E1ClusterActive != 0 { // M1 Ultra
810810 cpuMetrics .EClusterActive = (cpuMetrics .E0ClusterActive + cpuMetrics .E1ClusterActive ) / 2
811811 cpuMetrics .EClusterFreqMHz = max (cpuMetrics .E0ClusterFreqMHz , cpuMetrics .E1ClusterFreqMHz )
812+ multra = true
812813 }
813- if cpuMetrics .P3ClusterActive != 0 {
814- // M1 Ultra
814+ if cpuMetrics .P3ClusterActive != 0 { // M1 Ultra
815815 cpuMetrics .PClusterActive = (cpuMetrics .P0ClusterActive + cpuMetrics .P1ClusterActive + cpuMetrics .P2ClusterActive + cpuMetrics .P3ClusterActive ) / 4
816816 cpuMetrics .PClusterFreqMHz = max (cpuMetrics .P0ClusterFreqMHz , cpuMetrics .P1ClusterFreqMHz , cpuMetrics .P2ClusterFreqMHz , cpuMetrics .P3ClusterFreqMHz )
817- } else if cpuMetrics . P1ClusterActive != 0 {
818- // M1/M2/M3 Max/Pro
817+ multra = true
818+ } else if cpuMetrics . P1ClusterActive != 0 && ! multra { // M1/M2/M3 Max/Pro
819819 cpuMetrics .PClusterActive = (cpuMetrics .P0ClusterActive + cpuMetrics .P1ClusterActive ) / 2
820820 cpuMetrics .PClusterFreqMHz = max (cpuMetrics .P0ClusterFreqMHz , cpuMetrics .P1ClusterFreqMHz )
821- } else {
822- // M1
821+ mmax = true
822+ } else if ! multra && ! mmax { // M1
823823 cpuMetrics .PClusterActive = cpuMetrics .PClusterActive + cpuMetrics .P0ClusterActive
824824 }
825- if eClusterCount > 0 { // Calculate average active residency and frequency for E and P clusters
825+ if eClusterCount > 0 && ! multra && ! mmax { // Calculate average active residency and frequency for E and P clusters
826826 cpuMetrics .EClusterActive = eClusterActiveTotal / eClusterCount
827827 }
828828 }
0 commit comments