orblazer / plasma-applet-resources-monitor

Plasmoid for monitoring CPU, memory, network traffic, GPUs and disks IO.
https://www.pling.com/p/2143899/
GNU General Public License v3.0
57 stars 6 forks source link

[BUG] GPU not showing #45

Closed SylEleuth closed 1 year ago

SylEleuth commented 1 year ago

After the last update (4th May 2023) GPU stopped showing anything.

orblazer commented 1 year ago

Hello, Have you try to restart plasma or simply logout/login after update widget ?

SylEleuth commented 1 year ago

First thing I did after update.

orblazer commented 1 year ago

Ok, Could you check the log with journalctl /usr/bin/plasmashell -e OR by running in isolated environment with plasmawindowed org.kde.resourcesMonitor-fork ?

If no error, could follow this step :

Thanks by advance

SylEleuth commented 1 year ago

Journalctl:

May 04 14:27:15 archlinux plasmashell[325591]: QQmlEngine::setContextForObject(): Object already has a QQmlContext
May 04 14:27:15 archlinux plasmashell[325591]: QQmlEngine::setContextForObject(): Object already has a QQmlContext
May 04 14:27:15 archlinux plasmashell[325591]: file:///usr/share/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationAppletPage.qml:38:5: QML Loader: Binding loop detected for property "height"
May 04 14:27:15 archlinux plasmashell[325591]: file:///usr/share/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationAppletPage.qml:38:5: QML Loader: Binding loop detected for property "height"
May 04 14:27:37 archlinux plasmashell[325591]: qml: temp unit: 0
May 04 14:27:39 archlinux plasmashell[325591]: QQuickItem::stackAfter: Cannot stack TabButton_QMLTYPE_120(0x5628c5e30c60, parent=0x5628c2d45870, geometry=0,0 0x0) after TabButton_QMLTYPE_120(0x5628c5e1d1e0), which must be a sibling
May 04 14:27:39 archlinux plasmashell[325591]: QQuickItem::stackAfter: Cannot stack TabButton_QMLTYPE_120(0x5628c5e66ce0, parent=0x5628c2d45870, geometry=0,0 0x0) after TabButton_QMLTYPE_120(0x5628c5e30c60), which must be a sibling
May 04 14:27:39 archlinux plasmashell[325591]: QQuickItem::stackAfter: Cannot stack TabButton_QMLTYPE_120(0x5628c5e5fd90, parent=0x5628c2d45870, geometry=0,0 0x0) after TabButton_QMLTYPE_120(0x5628c5e66ce0), which must be a sibling
May 04 14:27:39 archlinux plasmashell[325591]: QQuickItem::stackAfter: Cannot stack TabButton_QMLTYPE_120(0x5628c5e924e0, parent=0x5628c2d45870, geometry=0,0 0x0) after TabButton_QMLTYPE_120(0x5628c5e5fd90), which must be a sibling
May 04 14:27:39 archlinux plasmashell[325591]: file:///home/eleuth/.local/share/plasma/plasmoids/org.kde.plasma.mediacontroller_plus/contents/ui/ExpandedRepresentation.qml:45:5: QML Connections: Implicitly defined onFoo properties in Conne>

plasmawindowed org.kde.resourcesMonitor-fork:

file:///usr/lib/qt/qml/org/kde/kirigami.2/templates/InlineMessage.qml:257:13: QML SelectableLabel: Binding loop detected for property "implicitWidth"
file:///usr/share/ksysguard/sensorfaces/org.kde.ksysguard.linechart/contents/ui/FullRepresentation.qml:22:1: QML FullRepresentation: Binding loop detected for property "implicitHeight"
file:///usr/share/ksysguard/sensorfaces/org.kde.ksysguard.linechart/contents/ui/FullRepresentation.qml:22:1: QML FullRepresentation: Binding loop detected for property "implicitHeight"
file:///usr/share/ksysguard/sensorfaces/org.kde.ksysguard.linechart/contents/ui/FullRepresentation.qml:22:1: QML FullRepresentation: Binding loop detected for property "implicitHeight"
file:///usr/lib/qt/qml/org/kde/ksysguard/page/EditablePage.qml?page=overview.page:256:5: QML Loader: Binding loop detected for property "height"
file:///usr/lib/qt/qml/org/kde/kirigami.2/templates/InlineMessage.qml:257:13: QML SelectableLabel: Binding loop detected for property "implicitWidth"
QProcess: Destroyed while process ("/usr/lib/ksysguard/ksgrd_network_helper") is still running.
org.kde.ksysguard.plugin.network: Helper process terminated abnormally: ""
"There are still \"5\" items in the process of being created at engine destruction."

In isolated env there was no gpu either. But what I noticed that on-hover labels stopped working also. But they are working in isolated as they should.

There is something wrong with org.kde.plasma-systemmonitor. Isolated doesn't work (blank window, no options), and when on the panel after saving there is no plasma-systemmonitor folder in pointed directory. They are saved somewhere because I can see them in the "Load presets" options. Also gpu doesn't show either so it might be something on my side.

orblazer commented 1 year ago

Ok so the log show nothings special. For org.kde.plasma-systemmonitor is not an widget but its an app (Sytem Monitor). And the widget and that app use same lib for data so if that app doesn't have data it's logic for widget doesn't have it.

What is your GPU card ? if its "integrated GPU" or "hybrid GPU" or something like that, maybe ksysguard doesn't support it.

ReillyBrogan commented 1 year ago

I just upgraded as well and I'm experiencing this same issue. My GPU is a RX 7900XTX and I'm able to add GPU monitors in System Monitor that work just fine however the same metrics are not showing up in this widget.

SylEleuth commented 1 year ago

Sorry for misunderstanding. I've created a new page in org.kde.plasma-systemmonitor:

[Face-94689495845552][Appearance]
chartFace=org.kde.ksysguard.piechart

[Face-94689495845552][Sensors]
totalSensors=["gpu/gpu0/usage"]

[page]
Title=GPU 1 usage
icon=ksysguardd
loadType=
margin=2

[page][row-0]
Title=
heightMode=balanced
isTitle=false
name=row-0

[page][row-0][column-0]
name=column-0
noMargins=
showBackground=true

[page][row-0][column-0][section-0]
face=Face-94689495845552
isSeparator=false
name=section-0

No highPrioritySensorIds. What I've missed.

My card is Radeon RX 570.

Just opened a game and widget shows gpu info.

maybe ksysguard doesn't support it

It worked yesterday.

orblazer commented 1 year ago

Hum, that wierd.

Could you try to add sensors for "Total video memory", " Used video memory" and "temperature" (or set totalSensors to ["gpu/gpu0/totalVram","gpu/gpu0/usage","gpu/gpu0/usedVram","gpu/gpu0/temperature"]) and check if all data is present (especially tue "total video memory").

For that field highPrioritySensorIds that is normal, this depend on where you define sensors in GUI.

If all data the only way i found to debug that is to have some log added in this method : https://github.com/orblazer/plasma-applet-resources-monitor/blob/d0dc2dc5fab61d26dc8c90a0284dd2e2a0d913b3/package/contents/ui/components/graph/GpuGraph.qml#L65-L78

I also digging on my side, this is just for accelerate the resolution.

Thanks.

SylEleuth commented 1 year ago

Could you try to add sensors for "Total video memory", " Used video memory" and "temperature" (or set totalSensors to ["gpu/gpu0/totalVram","gpu/gpu0/usage","gpu/gpu0/usedVram","gpu/gpu0/temperature"]) and check if all data is present (especially tue "total video memory").

Screenshot_20230505_101213

I've added console logs just to see it better myself: console.log("value:", value) console.log("MaxMemory:", maxMemory) And configured it to only show gpu info. Results:

qml: value: undefined
qml: 0
qml: value: undefined
qml: value: 8589934592
orblazer commented 1 year ago

Where the second log come from (qml: 0) ? And are you that is the value for last log ? because that corresponds to 8 PiB of memory :sweat_smile:

And the issue seam to come from that function because max memory and the sensors seem to never sets.

UPDATE

Could you try with that code (replace all code inside onValueChanged) :

// Update values
const valueVar = parseInt(value);
console.log("value:", valueVar)
if (isNaN(valueVar) || valueVar === 0) {
  return;
}

enabled = false;
maxMemory = valueVar;

// Update graph Y range and sensors
root.uplimits = [100, plasmoid.configuration.gpuMemoryInPercent ? 100 : maxMemory];
root.sensorsModel.sensors = ["gpu/gpu0/usage", "gpu/gpu0/usedVram", "gpu/gpu0/temperature"];
SylEleuth commented 1 year ago

Even less information now:

kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "Plasma Windowed" msgid_plural: "" msgctxt: ""
kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "Makes the plasmoid stay alive in the Notification Area, even when the window is closed." msgid_plural: "" msgctxt: ""
kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "Force loading the given shell plugin" msgid_plural: "" msgctxt: ""
kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "The applet to open." msgid_plural: "" msgctxt: ""
kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "Arguments to pass to the plasmoid." msgid_plural: "" msgctxt: ""
kf.plasma.quick: Applet preload policy set to 1
kf.plasma.core: requesting config for "Resources Monitor (fork)" without a containment!
Using KRun from QML is deprecated (since 5.88). Use Qt.openUrlExternally, or the KIO::OpenUrlJob/KIO::ApplicationLauncherJob classes from C++ instead.
qml: 0

I have no idea what that qml: 0 is. It wasn't there before. And why the output is different than here? I used the same command: plasmawindowed org.kde.resourcesMonitor-fork.

orblazer commented 1 year ago

I have no idea why this is different :sweat_smile: and the qml: 0 look like come from plasmawindowed itself.

And could you share the page from your previous screenshot ? because in that you seem to have information (in center of graph). Also for confirm that work in 2.8.0-hotfix.1 ?

SylEleuth commented 1 year ago

I didn't think about testing previous version but it works with 2.8.0-hotfix.1.

GPU page:

[Face-94917313221072][Appearance]
chartFace=org.kde.ksysguard.piechart

[Face-94917313221072][SensorColors]
gpu/gpu0/usedVram=25,254,44

[Face-94917313221072][Sensors]
highPrioritySensorIds=["gpu/gpu0/usedVram"]
lowPrioritySensorIds=["gpu/gpu0/temperature"]
totalSensors=["gpu/gpu0/totalVram"]

[page]
Title=GPU
icon=ksysguardd
loadType=
margin=2

[page][row-0]
Title=
heightMode=balanced
isTitle=false
name=row-0

[page][row-0][column-0]
name=column-0
noMargins=
showBackground=true

[page][row-0][column-0][section-0]
face=Face-94917313221072
isSeparator=false
name=section-0
orblazer commented 1 year ago

Hum i think that could be caused by Sensors.Sensor, because i only use for GPU graph and in fact that is only change from 2.8.0 (i previously use Sensors.SensorDataModel).

So could you try to replace L59-L79 in GpuGraph.qml by this following code :

Sensors.SensorDataModel {
    id: maxQueryModel
    sensors: ["gpu/gpu0/totalVram"]
    enabled: true
    property int maxMemory: -1

    onDataChanged: {
        // Update values
        const valueVar = parseInt(data(topLeft, Sensors.SensorDataModel.Value));
        console.log("value:", valueVar)
        if (isNaN(valueVar) || valueVar === 0) {
            return;
        }
        enabled = false;
        maxMemory = valueVar;

        // Update graph Y range and sensors
        root.uplimits = [100, plasmoid.configuration.gpuMemoryInPercent ? 100 : maxMemory];
        root.sensorsModel.sensors = ["gpu/gpu0/usage", "gpu/gpu0/usedVram", "gpu/gpu0/temperature"];
    }
}
SylEleuth commented 1 year ago

Still nothing. And no additional output in terminal.

orblazer commented 1 year ago

If "value" log doesn't appear that it's because the graph is not enabled. And I presume that because it's doesn't appear in your previous comment.

SylEleuth commented 1 year ago

I'm stupid. I turned it off just to check something. With the code above it finally works properly. This is how it shows memory when it's set to show as percentage: Screenshot_20230505_155427 And graph is on 100%.

orblazer commented 1 year ago

Ok perfect, I go to fix all things and release by the end of day. Thanks for helping me to fix the bug.

SylEleuth commented 1 year ago

No problem. Glad I could help. And thank You for the awesome widget.

orblazer commented 1 year ago

Hum one more things @SylEleuth, could you just add this code at L53 :

console.log("value:", data.value, "> in", sensorsModel.getInfo(1, Sensors.SensorDataModel.Unit));
console.log("max", uplimits[1], "> in", maxQueryModel.data(maxQueryModel.index(0, 0), Sensors.SensorDataModel.Unit));

Thanks.

SylEleuth commented 1 year ago

If I run it when option "show in percent" was already set:

qml: value: 1152237568 > in 100
qml: max 100 > in 100
qml: value: 1152245760 > in 100
qml: max 100 > in 100
qml: value: 1196785664 > in 100
qml: max 100 > in 100
qml: value: 1187323904 > in 100
qml: max 100 > in 100
qml: value: 1187323904 > in 100
qml: max 100 > in 100
qml: value: 1202589696 > in 100
qml: max 100 > in 100
qml: value: 1205211136 > in 100
qml: max 100 > in 100
qml: value: 1165864960 > in 100
qml: max 100 > in 100

When I run it without that option and set it while running:

qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100
qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100
qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100
qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100
qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100
qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100
qml: value: 1167241216 > in 100
qml: max -2147483648 > in 100

In first case instead of percent there is long number and graph is under the roof (last screenshot). In second case percentage is a negative number (but not correct in any way, something like -0.5% with 1GB usage).

orblazer commented 1 year ago

Ok, for percent i have found the issue, i'm just stupid :sweat_smile:

Thanks you for your reactivity, that is now completely fix. If you want you can try the unrelease version by cloning the repo un running ./scripts/test.sh.