(r io.Reader)
| 1008 | } |
| 1009 | |
| 1010 | func parseVulkanGPUMemoryText(r io.Reader) []GPUMemoryInfo { |
| 1011 | var gpus []GPUMemoryInfo |
| 1012 | var current *vulkanGPUTextInfo |
| 1013 | |
| 1014 | inMemoryProperties := false |
| 1015 | inMemoryHeaps := false |
| 1016 | inHeap := false |
| 1017 | heapSize := uint64(0) |
| 1018 | heapBudget := uint64(0) |
| 1019 | heapUsage := uint64(0) |
| 1020 | heapDeviceLocal := false |
| 1021 | |
| 1022 | flushHeap := func() { |
| 1023 | if current != nil && inHeap && heapDeviceLocal { |
| 1024 | current.totalVRAM += heapSize |
| 1025 | current.usageVRAM += heapUsage |
| 1026 | current.budgetVRAM += heapBudget |
| 1027 | } |
| 1028 | heapSize = 0 |
| 1029 | heapBudget = 0 |
| 1030 | heapUsage = 0 |
| 1031 | heapDeviceLocal = false |
| 1032 | inHeap = false |
| 1033 | } |
| 1034 | |
| 1035 | flushGPU := func() { |
| 1036 | if current == nil || current.totalVRAM == 0 || current.deviceType == "PHYSICAL_DEVICE_TYPE_CPU" { |
| 1037 | return |
| 1038 | } |
| 1039 | |
| 1040 | if current.usageVRAM == 0 && current.budgetVRAM != 0 { |
| 1041 | current.usageVRAM = current.totalVRAM - current.budgetVRAM |
| 1042 | } else if current.usageVRAM != 0 && current.budgetVRAM == 0 { |
| 1043 | current.budgetVRAM = current.totalVRAM - current.usageVRAM |
| 1044 | } else if current.usageVRAM == 0 && current.budgetVRAM == 0 { |
| 1045 | current.usageVRAM = 0 |
| 1046 | current.budgetVRAM = current.totalVRAM |
| 1047 | } |
| 1048 | |
| 1049 | usagePercent := float64(current.usageVRAM) / float64(current.totalVRAM) * float64(100.0) |
| 1050 | |
| 1051 | gpus = append(gpus, GPUMemoryInfo{ |
| 1052 | Index: current.index, |
| 1053 | Name: current.name, |
| 1054 | Vendor: VendorVulkan, |
| 1055 | TotalVRAM: current.totalVRAM, |
| 1056 | UsedVRAM: current.usageVRAM, |
| 1057 | FreeVRAM: current.budgetVRAM, |
| 1058 | UsagePercent: usagePercent, |
| 1059 | }) |
| 1060 | } |
| 1061 | |
| 1062 | scanner := bufio.NewScanner(r) |
| 1063 | for scanner.Scan() { |
| 1064 | line := strings.TrimSpace(scanner.Text()) |
| 1065 | if line == "" { |
| 1066 | continue |
| 1067 | } |
no test coverage detected