Skip to content

Commit e88a45e

Browse files
authored
add gpu and cpu consumption (#60)
1 parent 1a7be42 commit e88a45e

File tree

10 files changed

+120
-5
lines changed

10 files changed

+120
-5
lines changed

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/model/OverlaySettings.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ data class OverlaySettings(
3333
val frametime: Sensor.Frametime = Sensor.Frametime(),
3434
val cpuTemp: Sensor.CpuTemp = Sensor.CpuTemp(),
3535
val cpuUsage: Sensor.CpuUsage = Sensor.CpuUsage(),
36+
val cpuConsumption: Sensor.CpuConsumption = Sensor.CpuConsumption(),
3637
val gpuTemp: Sensor.GpuTemp = Sensor.GpuTemp(),
3738
val gpuUsage: Sensor.GpuUsage = Sensor.GpuUsage(),
3839
val vramUsage: Sensor.VramUsage = Sensor.VramUsage(),
40+
val gpuConsumption: Sensor.GpuConsumption = Sensor.GpuConsumption(),
3941
val totalVramUsed: Sensor.TotalVramUsed = Sensor.TotalVramUsed(),
4042
val ramUsage: Sensor.RamUsage = Sensor.RamUsage(),
4143
val upRate: Sensor.UpRate = Sensor.UpRate(),
@@ -96,6 +98,13 @@ data class OverlaySettings(
9698
override val boundaries: Boundaries = Boundaries(),
9799
) : GraphSensor()
98100

101+
@Serializable
102+
@Immutable
103+
data class CpuConsumption(
104+
override val isEnabled: Boolean = true,
105+
override val customReadingId: String = "",
106+
) : Sensor()
107+
99108
@Serializable
100109
@Immutable
101110
data class GpuTemp(
@@ -127,6 +136,13 @@ data class OverlaySettings(
127136
override val customReadingId: String = "",
128137
) : Sensor()
129138

139+
@Serializable
140+
@Immutable
141+
data class GpuConsumption(
142+
override val isEnabled: Boolean = true,
143+
override val customReadingId: String = "",
144+
) : Sensor()
145+
130146
@Serializable
131147
@Immutable
132148
data class RamUsage(

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/overlay/Overlay.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ fun Overlay(
2424
overlaySettings.sensors.cpuUsage,
2525
overlaySettings.sensors.gpuUsage,
2626
overlaySettings.sensors.vramUsage,
27-
overlaySettings.sensors.ramUsage
27+
overlaySettings.sensors.ramUsage,
28+
overlaySettings.sensors.cpuConsumption,
29+
overlaySettings.sensors.gpuConsumption
2830
).all { !it.isEnabled }
2931
) {
3032
return@AppTheme

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/overlay/sections/CpuSection.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
11
package app.cleanmeter.target.desktop.ui.overlay.sections
22

3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Row
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.foundation.layout.width
7+
import androidx.compose.foundation.layout.widthIn
8+
import androidx.compose.material.Text
39
import androidx.compose.runtime.Composable
10+
import androidx.compose.ui.Alignment
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.graphics.Color
13+
import androidx.compose.ui.text.font.FontWeight
14+
import androidx.compose.ui.unit.dp
15+
import androidx.compose.ui.unit.sp
16+
import app.cleanmeter.core.common.hardwaremonitor.FPS
417
import app.cleanmeter.core.common.hardwaremonitor.HardwareMonitorData
18+
import app.cleanmeter.core.common.hardwaremonitor.getReading
519
import app.cleanmeter.target.desktop.model.OverlaySettings
620
import app.cleanmeter.target.desktop.ui.components.CustomReadingProgress
721
import app.cleanmeter.target.desktop.ui.components.Pill
22+
import app.cleanmeter.target.desktop.ui.components.ProgressLabel
23+
import app.cleanmeter.target.desktop.ui.components.ProgressUnit
824
import java.util.*
925

1026
@Composable
@@ -35,6 +51,15 @@ internal fun CpuSection(overlaySettings: OverlaySettings, data: HardwareMonitorD
3551
boundaries = overlaySettings.sensors.cpuUsage.boundaries,
3652
)
3753
}
54+
55+
if (overlaySettings.sensors.cpuConsumption.isValid()) {
56+
val reading = data.getReading(overlaySettings.sensors.cpuConsumption.customReadingId)
57+
val value = (reading?.Value ?: 1f).coerceAtLeast(1f).toInt()
58+
Row(verticalAlignment = Alignment.Bottom, modifier = Modifier.widthIn(min = 35.dp).padding(bottom = 2.dp)) {
59+
ProgressLabel("$value")
60+
ProgressUnit("W")
61+
}
62+
}
3863
}
3964
}
4065
}

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/overlay/sections/GpuSection.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package app.cleanmeter.target.desktop.ui.overlay.sections
22

3+
import androidx.compose.foundation.layout.Row
4+
import androidx.compose.foundation.layout.padding
5+
import androidx.compose.foundation.layout.widthIn
36
import androidx.compose.runtime.Composable
7+
import androidx.compose.ui.Alignment
8+
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.unit.dp
410
import app.cleanmeter.core.common.hardwaremonitor.HardwareMonitorData
511
import app.cleanmeter.core.common.hardwaremonitor.getReading
612
import app.cleanmeter.target.desktop.model.OverlaySettings
713
import app.cleanmeter.target.desktop.ui.components.CustomReadingProgress
814
import app.cleanmeter.target.desktop.ui.components.Pill
915
import app.cleanmeter.target.desktop.ui.components.Progress
16+
import app.cleanmeter.target.desktop.ui.components.ProgressLabel
17+
import app.cleanmeter.target.desktop.ui.components.ProgressUnit
1018
import java.util.*
1119

1220
private fun OverlaySettings.Sensors.isAllValid(): Boolean {
@@ -54,6 +62,15 @@ internal fun GpuSection(overlaySettings: OverlaySettings, data: HardwareMonitorD
5462
boundaries = overlaySettings.sensors.vramUsage.boundaries,
5563
)
5664
}
65+
66+
if (overlaySettings.sensors.gpuConsumption.isValid()) {
67+
val reading = data.getReading(overlaySettings.sensors.gpuConsumption.customReadingId)
68+
val value = (reading?.Value ?: 1f).coerceAtLeast(1f).toInt()
69+
Row(verticalAlignment = Alignment.Bottom, modifier = Modifier.widthIn(min = 35.dp).padding(bottom = 2.dp)) {
70+
ProgressLabel("$value")
71+
ProgressUnit("W")
72+
}
73+
}
5774
}
5875
}
5976
}

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/settings/CheckboxSectionOption.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ data class CheckboxSectionOption(
1313
)
1414

1515
enum class SensorType {
16-
Framerate, Frametime, CpuTemp, CpuUsage, GpuTemp, GpuUsage, VramUsage, TotalVramUsed, RamUsage, UpRate, DownRate, NetGraph
16+
Framerate, Frametime, CpuTemp, CpuUsage, CpuConsumption, GpuTemp, GpuUsage, VramUsage, TotalVramUsed, GpuConsumption, RamUsage, UpRate, DownRate, NetGraph
1717
}
1818

1919
enum class SectionType {

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/settings/Settings.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ private fun TabContent(
227227
SensorType.UpRate -> settingsState.overlaySettings.sensors.upRate
228228
SensorType.DownRate -> settingsState.overlaySettings.sensors.downRate
229229
SensorType.NetGraph -> settingsState.overlaySettings.sensors.upRate // no sensor for netgraph
230+
SensorType.CpuConsumption -> settingsState.overlaySettings.sensors.cpuConsumption
231+
SensorType.GpuConsumption -> settingsState.overlaySettings.sensors.gpuConsumption
230232
}
231233
}
232234
)

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/settings/SettingsViewModel.kt

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ import java.io.PrintStream
3232
import java.util.Scanner
3333

3434
sealed interface Log {
35-
@JvmInline value class Info(val value: String)
36-
@JvmInline value class Error(val value: String)
35+
@JvmInline
36+
value class Info(val value: String)
37+
@JvmInline
38+
value class Error(val value: String)
3739
}
3840

3941
data class SettingsState(
@@ -317,6 +319,8 @@ class SettingsViewModel : ViewModel() {
317319
SensorType.UpRate -> settingsState.overlaySettings
318320
SensorType.DownRate -> settingsState.overlaySettings
319321
SensorType.NetGraph -> settingsState.overlaySettings
322+
SensorType.CpuConsumption -> settingsState.overlaySettings
323+
SensorType.GpuConsumption -> settingsState.overlaySettings
320324
}
321325

322326
OverlaySettingsRepository.setOverlaySettings(newSettings)
@@ -477,6 +481,22 @@ class SettingsViewModel : ViewModel() {
477481
)
478482
)
479483

484+
SensorType.CpuConsumption -> overlaySettings?.copy(
485+
sensors = overlaySettings.sensors.copy(
486+
cpuConsumption = overlaySettings.sensors.cpuConsumption.copy(
487+
customReadingId = sensorId,
488+
)
489+
)
490+
)
491+
492+
SensorType.GpuConsumption -> overlaySettings?.copy(
493+
sensors = overlaySettings.sensors.copy(
494+
gpuConsumption = overlaySettings.sensors.gpuConsumption.copy(
495+
customReadingId = sensorId,
496+
)
497+
)
498+
)
499+
480500
SensorType.Framerate -> overlaySettings
481501
SensorType.Frametime -> overlaySettings
482502
SensorType.RamUsage -> overlaySettings
@@ -637,6 +657,22 @@ class SettingsViewModel : ViewModel() {
637657
SensorType.TotalVramUsed -> overlaySettings // cant disable total vram used
638658

639659
SensorType.NetGraph -> overlaySettings?.copy(netGraph = option.isSelected)
660+
661+
SensorType.CpuConsumption -> overlaySettings?.copy(
662+
sensors = overlaySettings.sensors.copy(
663+
cpuConsumption = overlaySettings.sensors.cpuConsumption.copy(
664+
isEnabled = option.isSelected
665+
)
666+
)
667+
)
668+
669+
SensorType.GpuConsumption -> overlaySettings?.copy(
670+
sensors = overlaySettings.sensors.copy(
671+
gpuConsumption = overlaySettings.sensors.gpuConsumption.copy(
672+
isEnabled = option.isSelected
673+
)
674+
)
675+
)
640676
}
641677

642678
OverlaySettingsRepository.setOverlaySettings(newSettings)

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/settings/tabs/stats/CpuStats.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ internal fun CpuStats(
2929
) {
3030
CustomBodyCheckboxSection(
3131
title = "CPU",
32-
options = availableOptions.filterOptions(SensorType.CpuUsage, SensorType.CpuTemp),
32+
options = availableOptions.filterOptions(SensorType.CpuUsage, SensorType.CpuTemp, SensorType.CpuConsumption),
3333
onSwitchToggle = { onSectionSwitchToggle(SectionType.Cpu, it) },
3434
body = { options ->
3535
Column(modifier = Modifier, verticalArrangement = Arrangement.spacedBy(12.dp)) {

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/settings/tabs/stats/GpuStats.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ internal fun GpuStats(
3434
SensorType.GpuTemp,
3535
SensorType.VramUsage,
3636
SensorType.TotalVramUsed,
37+
SensorType.GpuConsumption,
3738
),
3839
onSwitchToggle = { onSectionSwitchToggle(SectionType.Gpu, it) },
3940
body = { options ->

target/desktop/src/main/kotlin/app/cleanmeter/target/desktop/ui/settings/tabs/stats/StatsUi.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ private fun checkboxSectionOptions(overlaySettings: OverlaySettings) = listOf(
138138
useCustomSensor = true,
139139
dataType = HardwareMonitorData.SensorType.Load,
140140
),
141+
CheckboxSectionOption(
142+
isSelected = overlaySettings.sensors.cpuConsumption.isEnabled,
143+
name = "CPU consumption",
144+
type = SensorType.CpuConsumption,
145+
optionReadingId = overlaySettings.sensors.cpuConsumption.customReadingId,
146+
useCustomSensor = true,
147+
dataType = HardwareMonitorData.SensorType.Power,
148+
),
141149
CheckboxSectionOption(
142150
isSelected = overlaySettings.sensors.gpuTemp.isEnabled,
143151
name = "GPU temperature",
@@ -171,6 +179,14 @@ private fun checkboxSectionOptions(overlaySettings: OverlaySettings) = listOf(
171179
useCheckbox = false,
172180
dataType = HardwareMonitorData.SensorType.SmallData,
173181
),
182+
CheckboxSectionOption(
183+
isSelected = overlaySettings.sensors.gpuConsumption.isEnabled,
184+
name = "GPU consumption",
185+
type = SensorType.GpuConsumption,
186+
optionReadingId = overlaySettings.sensors.gpuConsumption.customReadingId,
187+
useCustomSensor = true,
188+
dataType = HardwareMonitorData.SensorType.Power,
189+
),
174190
CheckboxSectionOption(
175191
isSelected = overlaySettings.sensors.ramUsage.isEnabled,
176192
name = "RAM usage",

0 commit comments

Comments
 (0)