@@ -805,24 +805,24 @@ func parseCPUMetrics(powermetricsOutput string, cpuMetrics CPUMetrics, modelName
805
805
806
806
cpuMetrics .ECores = eCores
807
807
cpuMetrics .PCores = pCores
808
- if cpuMetrics . E1ClusterActive != 0 {
809
- // M1 Ultra
808
+ multra , mmax := false , false
809
+ if cpuMetrics . E1ClusterActive != 0 { // M1 Ultra
810
810
cpuMetrics .EClusterActive = (cpuMetrics .E0ClusterActive + cpuMetrics .E1ClusterActive ) / 2
811
811
cpuMetrics .EClusterFreqMHz = max (cpuMetrics .E0ClusterFreqMHz , cpuMetrics .E1ClusterFreqMHz )
812
+ multra = true
812
813
}
813
- if cpuMetrics .P3ClusterActive != 0 {
814
- // M1 Ultra
814
+ if cpuMetrics .P3ClusterActive != 0 { // M1 Ultra
815
815
cpuMetrics .PClusterActive = (cpuMetrics .P0ClusterActive + cpuMetrics .P1ClusterActive + cpuMetrics .P2ClusterActive + cpuMetrics .P3ClusterActive ) / 4
816
816
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
819
819
cpuMetrics .PClusterActive = (cpuMetrics .P0ClusterActive + cpuMetrics .P1ClusterActive ) / 2
820
820
cpuMetrics .PClusterFreqMHz = max (cpuMetrics .P0ClusterFreqMHz , cpuMetrics .P1ClusterFreqMHz )
821
- } else {
822
- // M1
821
+ mmax = true
822
+ } else if ! multra && ! mmax { // M1
823
823
cpuMetrics .PClusterActive = cpuMetrics .PClusterActive + cpuMetrics .P0ClusterActive
824
824
}
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
826
826
cpuMetrics .EClusterActive = eClusterActiveTotal / eClusterCount
827
827
}
828
828
}
0 commit comments