Skip to content

Commit dd70407

Browse files
committed
Fixes for non-blocking UI
1 parent efc0d8c commit dd70407

File tree

1 file changed

+56
-5
lines changed

1 file changed

+56
-5
lines changed

main.go

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ var (
4141
modelText, PowerChart, NetworkInfo, helpText *w.Paragraph
4242
grid *ui.Grid
4343
processList *w.List
44-
sparkline *w.Sparkline
45-
sparklineGroup *w.SparklineGroup
44+
sparkline, gpuSparkline *w.Sparkline
45+
sparklineGroup, gpuSparklineGroup *w.SparklineGroup
4646
cpuCoreWidget *CPUCoreWidget
4747
selectedProcess int
4848
powerValues = make([]float64, 35)
@@ -67,6 +67,7 @@ var (
6767
maxPowerSeen = 0.1
6868
powerHistory = make([]float64, 100)
6969
maxPower = 0.0 // Track maximum power for better scaling
70+
gpuValues = make([]float64, 65)
7071
)
7172

7273
type CPUUsage struct {
@@ -392,13 +393,22 @@ func setupUI() {
392393
termWidth, _ := ui.TerminalDimensions()
393394
numPoints := (termWidth / 2) / 2
394395
powerValues = make([]float64, numPoints)
396+
gpuValues = make([]float64, numPoints)
395397

396398
sparkline = w.NewSparkline()
397399
sparkline.LineColor = ui.ColorGreen
398400
sparkline.MaxHeight = 10
399401
sparkline.Data = powerValues
400402

401403
sparklineGroup = w.NewSparklineGroup(sparkline)
404+
405+
gpuSparkline = w.NewSparkline()
406+
gpuSparkline.LineColor = ui.ColorGreen
407+
gpuSparkline.MaxHeight = 10
408+
gpuSparkline.Data = gpuValues
409+
gpuSparklineGroup = w.NewSparklineGroup(gpuSparkline)
410+
gpuSparklineGroup.Title = "GPU Usage History"
411+
402412
updateProcessList()
403413

404414
cpuCoreWidget = NewCPUCoreWidget(appleSiliconModel)
@@ -422,6 +432,7 @@ func setupGrid() {
422432
grid.Set(
423433
ui.NewRow(1.0/4,
424434
ui.NewCol(1.0, cpuGauge),
435+
// ui.NewCol(1.0/2, gpuSparklineGroup),
425436
),
426437
ui.NewRow(2.0/4,
427438
ui.NewCol(1.0/2,
@@ -1088,9 +1099,25 @@ func collectMetrics(done chan struct{}, cpumetricsChan chan CPUMetrics, gpumetri
10881099
case <-done:
10891100
cmd.Process.Kill()
10901101
return
1091-
case cpumetricsChan <- parseCPUMetrics(data, NewCPUMetrics()):
1092-
case gpumetricsChan <- parseGPUMetrics(data):
1093-
case netdiskMetricsChan <- parseNetDiskMetrics(data):
1102+
default:
1103+
// Send all metrics at once
1104+
cpuMetrics := parseCPUMetrics(data, NewCPUMetrics())
1105+
gpuMetrics := parseGPUMetrics(data)
1106+
netdiskMetrics := parseNetDiskMetrics(data)
1107+
1108+
// Non-blocking sends
1109+
select {
1110+
case cpumetricsChan <- cpuMetrics:
1111+
default:
1112+
}
1113+
select {
1114+
case gpumetricsChan <- gpuMetrics:
1115+
default:
1116+
}
1117+
select {
1118+
case netdiskMetricsChan <- netdiskMetrics:
1119+
default:
1120+
}
10941121
}
10951122
}
10961123
}
@@ -1249,6 +1276,30 @@ func updateCPUUI(cpuMetrics CPUMetrics) {
12491276
func updateGPUUI(gpuMetrics GPUMetrics) {
12501277
gpuGauge.Title = fmt.Sprintf("GPU Usage: %d%% @ %d MHz", int(gpuMetrics.Active), gpuMetrics.FreqMHz)
12511278
gpuGauge.Percent = int(gpuMetrics.Active)
1279+
1280+
// Add GPU history tracking
1281+
for i := 0; i < len(gpuValues)-1; i++ {
1282+
gpuValues[i] = gpuValues[i+1]
1283+
}
1284+
gpuValues[len(gpuValues)-1] = float64(gpuMetrics.Active)
1285+
1286+
// Calculate average GPU usage
1287+
var sum float64
1288+
count := 0
1289+
for _, v := range gpuValues {
1290+
if v > 0 {
1291+
sum += v
1292+
count++
1293+
}
1294+
}
1295+
avgGPU := 0.0
1296+
if count > 0 {
1297+
avgGPU = sum / float64(count)
1298+
}
1299+
1300+
gpuSparkline.Data = gpuValues
1301+
gpuSparkline.MaxVal = 100 // GPU usage is 0-100%
1302+
gpuSparklineGroup.Title = fmt.Sprintf("GPU: %d%% (Avg: %.1f%%)", gpuMetrics.Active, avgGPU)
12521303
}
12531304

12541305
func getDiskStorage() (total, used, available string) {

0 commit comments

Comments
 (0)