fix(windows): Hide command windows in hardware detection and fix GPU detection
Issues Fixed:
1. Command Prompts During Benchmark
- Jake reported 4 command prompt windows appearing when opening benchmark
- Windows showing: C:\ffmpeg\bin\ffmpeg.exe for each hardware check
2. Wrong GPU Detection
- Jake's AMD R7 900 XTX not detected
- System incorrectly showing "13.50.53.699 Virtual Desktop" as GPU
- Showing "Monitor" instead of actual graphics card
Root Causes:
1. sysinfo package missing ApplyNoWindow() on Windows detection commands
- detectCPUWindows: wmic cpu query
- detectGPUWindows: nvidia-smi + wmic VideoController queries
- detectRAMWindows: wmic computersystem query
- These 3-4 calls showed command windows
2. GPU Detection Not Filtering Virtual Adapters
- wmic returns ALL video controllers (physical + virtual)
- Code was picking first entry which was virtual adapter
- No filtering for "Virtual Desktop", remote desktop adapters, etc.
Solutions:
1. Applied utils.ApplyNoWindow() to all Windows detection commands
- Hides wmic, nvidia-smi command windows
- Consistent with benchmark.go and platform.go patterns
- No-op on Linux/macOS (cross-platform safe)
2. Enhanced GPU Detection with Virtual Adapter Filtering
- Iterate through ALL video controllers from wmic
- Filter out virtual/software adapters:
* Virtual Desktop adapters
* Microsoft Basic Display Adapter
* Remote desktop (VNC, Parsec, TeamViewer)
- Return first physical GPU (AMD/NVIDIA/Intel)
- Debug logging shows skipped virtual adapters
Implementation:
- Import internal/utils in sysinfo package
- ApplyNoWindow() on 4 Windows commands:
* wmic cpu get name,maxclockspeed
* nvidia-smi --query-gpu=name,driver_version
* wmic path win32_VideoController get name,driverversion
* wmic computersystem get totalphysicalmemory
- Enhanced GPU parser with virtual adapter blacklist
- Debug logging for skipped/detected GPUs
Impact:
- No command windows during benchmark initialization (discreet operation)
- Correct physical GPU detection on systems with virtual adapters
- Should properly detect Jake's AMD R7 900 XTX
Files Changed:
- internal/sysinfo/sysinfo.go: ApplyNoWindow + GPU filtering
Reported-by: Jake (4 command prompts, wrong GPU detection)
Tested-on: Linux (build successful, no regressions)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
b41e41e5ad
commit
8f73913817
|
|
@ -9,6 +9,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"git.leaktechnologies.dev/stu/VideoTools/internal/logging"
|
||||
"git.leaktechnologies.dev/stu/VideoTools/internal/utils"
|
||||
)
|
||||
|
||||
// HardwareInfo contains system hardware information
|
||||
|
|
@ -103,6 +104,7 @@ func detectCPULinux() (model, mhz string) {
|
|||
func detectCPUWindows() (model, mhz string) {
|
||||
// Use wmic to get CPU info
|
||||
cmd := exec.Command("wmic", "cpu", "get", "name,maxclockspeed")
|
||||
utils.ApplyNoWindow(cmd) // Hide command window on Windows
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
logging.Debug(logging.CatSystem, "failed to run wmic cpu: %v", err)
|
||||
|
|
@ -208,6 +210,7 @@ func detectGPULinux() (model, driver string) {
|
|||
func detectGPUWindows() (model, driver string) {
|
||||
// Use nvidia-smi if available (NVIDIA GPUs)
|
||||
cmd := exec.Command("nvidia-smi", "--query-gpu=name,driver_version", "--format=csv,noheader")
|
||||
utils.ApplyNoWindow(cmd) // Hide command window on Windows
|
||||
output, err := cmd.Output()
|
||||
if err == nil {
|
||||
parts := strings.Split(strings.TrimSpace(string(output)), ",")
|
||||
|
|
@ -220,21 +223,41 @@ func detectGPUWindows() (model, driver string) {
|
|||
|
||||
// Try wmic for generic GPU info
|
||||
cmd = exec.Command("wmic", "path", "win32_VideoController", "get", "name,driverversion")
|
||||
utils.ApplyNoWindow(cmd) // Hide command window on Windows
|
||||
output, err = cmd.Output()
|
||||
if err == nil {
|
||||
lines := strings.Split(string(output), "\n")
|
||||
if len(lines) >= 2 {
|
||||
// Skip header, get first GPU
|
||||
line := strings.TrimSpace(lines[1])
|
||||
if line != "" {
|
||||
// Parse: Name DriverVersion
|
||||
re := regexp.MustCompile(`^(.+?)\s+(\S+)$`)
|
||||
matches := re.FindStringSubmatch(line)
|
||||
if len(matches) == 3 {
|
||||
model = strings.TrimSpace(matches[1])
|
||||
driver = strings.TrimSpace(matches[2])
|
||||
return model, driver
|
||||
}
|
||||
// Iterate through all video controllers, skip virtual/non-physical adapters
|
||||
for i, line := range lines {
|
||||
if i == 0 { // Skip header
|
||||
continue
|
||||
}
|
||||
line = strings.TrimSpace(line)
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
// Filter out virtual/software adapters
|
||||
lineLower := strings.ToLower(line)
|
||||
if strings.Contains(lineLower, "virtual") ||
|
||||
strings.Contains(lineLower, "microsoft basic") ||
|
||||
strings.Contains(lineLower, "remote") ||
|
||||
strings.Contains(lineLower, "vnc") ||
|
||||
strings.Contains(lineLower, "parsec") ||
|
||||
strings.Contains(lineLower, "teamviewer") {
|
||||
logging.Debug(logging.CatSystem, "skipping virtual GPU: %s", line)
|
||||
continue
|
||||
}
|
||||
|
||||
// Parse: Name DriverVersion
|
||||
// Use flexible regex to handle varying whitespace
|
||||
re := regexp.MustCompile(`^(.+?)\s+(\S+)$`)
|
||||
matches := re.FindStringSubmatch(line)
|
||||
if len(matches) == 3 {
|
||||
model = strings.TrimSpace(matches[1])
|
||||
driver = strings.TrimSpace(matches[2])
|
||||
logging.Debug(logging.CatSystem, "detected physical GPU: %s (driver: %s)", model, driver)
|
||||
return model, driver
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -316,6 +339,7 @@ func detectRAMLinux() (readable string, mb uint64) {
|
|||
|
||||
func detectRAMWindows() (readable string, mb uint64) {
|
||||
cmd := exec.Command("wmic", "computersystem", "get", "totalphysicalmemory")
|
||||
utils.ApplyNoWindow(cmd) // Hide command window on Windows
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
logging.Debug(logging.CatSystem, "failed to run wmic computersystem: %v", err)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user