getAppleGPUMemory detects Apple Silicon GPUs using system_profiler (macOS only). Apple Silicon uses unified memory, so GPU memory is reported as system RAM.
()
| 1198 | // getAppleGPUMemory detects Apple Silicon GPUs using system_profiler (macOS only). |
| 1199 | // Apple Silicon uses unified memory, so GPU memory is reported as system RAM. |
| 1200 | func getAppleGPUMemory() []GPUMemoryInfo { |
| 1201 | if _, err := exec.LookPath("system_profiler"); err != nil { |
| 1202 | return nil |
| 1203 | } |
| 1204 | |
| 1205 | cmd := exec.Command("system_profiler", "SPDisplaysDataType", "-json") |
| 1206 | var stdout, stderr bytes.Buffer |
| 1207 | cmd.Stdout = &stdout |
| 1208 | cmd.Stderr = &stderr |
| 1209 | |
| 1210 | if err := cmd.Run(); err != nil { |
| 1211 | xlog.Debug("system_profiler failed", "error", err, "stderr", stderr.String()) |
| 1212 | return nil |
| 1213 | } |
| 1214 | |
| 1215 | var result struct { |
| 1216 | SPDisplaysDataType []struct { |
| 1217 | Name string `json:"_name"` |
| 1218 | Model string `json:"sppci_model"` |
| 1219 | Cores string `json:"sppci_cores"` |
| 1220 | DeviceType string `json:"sppci_device_type"` |
| 1221 | Vendor string `json:"spdisplays_vendor"` |
| 1222 | } `json:"SPDisplaysDataType"` |
| 1223 | } |
| 1224 | |
| 1225 | if err := json.Unmarshal(stdout.Bytes(), &result); err != nil { |
| 1226 | xlog.Debug("failed to parse system_profiler output", "error", err) |
| 1227 | return nil |
| 1228 | } |
| 1229 | |
| 1230 | var gpus []GPUMemoryInfo |
| 1231 | for i, display := range result.SPDisplaysDataType { |
| 1232 | if display.DeviceType != "spdisplays_gpu" { |
| 1233 | continue |
| 1234 | } |
| 1235 | if !strings.Contains(strings.ToLower(display.Vendor), "apple") { |
| 1236 | continue |
| 1237 | } |
| 1238 | |
| 1239 | name := display.Model |
| 1240 | if name == "" { |
| 1241 | name = display.Name |
| 1242 | } |
| 1243 | if name == "" { |
| 1244 | name = "Apple GPU" |
| 1245 | } |
| 1246 | |
| 1247 | // Apple Silicon uses unified memory — report system RAM |
| 1248 | ramInfo, err := GetSystemRAMInfo() |
| 1249 | if err != nil { |
| 1250 | xlog.Debug("Apple GPU detected but failed to get system RAM", "error", err) |
| 1251 | gpus = append(gpus, GPUMemoryInfo{ |
| 1252 | Index: i, |
| 1253 | Name: name, |
| 1254 | Vendor: VendorApple, |
| 1255 | }) |
| 1256 | continue |
| 1257 | } |
no test coverage detected