feat: GPU切换回退保护逻辑
- switchGpu切换前写入备份文件(.gpu-switch-backup)记录之前模式 - init()检测未确认的切换,启动30秒自动回退计时器 - QML弹出'显示是否正常'确认覆盖层,支持手动确认/回退/超时自动回退 - confirmSwitchSuccess()用户确认正常后删除备份 - restoreFromBackup()自动恢复之前模式并发送通知 - primeOffloadEnabled属性检测当前PRIME offload状态 - switchGpu改用environment.d方式,不需要root/pkexec - 翻译更新:回退确认相关8条新增
This commit is contained in:
@@ -47,6 +47,9 @@ class GraphicsDriverApplet : public DApplet
|
||||
Q_PROPERTY(QVariantList tempHistory READ tempHistory NOTIFY tempHistoryChanged)
|
||||
Q_PROPERTY(QStringList gpuProcesses READ gpuProcesses NOTIFY gpuProcessesChanged)
|
||||
Q_PROPERTY(bool tempAlertEnabled READ tempAlertEnabled WRITE setTempAlertEnabled NOTIFY tempAlertEnabledChanged)
|
||||
Q_PROPERTY(bool primeOffloadEnabled READ primeOffloadEnabled NOTIFY primeOffloadEnabledChanged)
|
||||
Q_PROPERTY(bool switchPending READ switchPending NOTIFY switchPendingChanged)
|
||||
Q_PROPERTY(int restoreCountdown READ restoreCountdown NOTIFY restoreCountdownChanged)
|
||||
|
||||
public:
|
||||
explicit GraphicsDriverApplet(QObject *parent = nullptr);
|
||||
@@ -66,10 +69,15 @@ public:
|
||||
QStringList gpuProcesses() const;
|
||||
bool tempAlertEnabled() const;
|
||||
void setTempAlertEnabled(bool enabled);
|
||||
bool primeOffloadEnabled() const;
|
||||
bool switchPending() const;
|
||||
int restoreCountdown() const;
|
||||
|
||||
Q_INVOKABLE void refreshDeviceInfo();
|
||||
Q_INVOKABLE void refreshStats();
|
||||
Q_INVOKABLE bool switchGpu(const QString &mode);
|
||||
Q_INVOKABLE void confirmSwitchSuccess();
|
||||
Q_INVOKABLE void restoreSwitch();
|
||||
|
||||
signals:
|
||||
void deviceInfoChanged();
|
||||
@@ -82,6 +90,9 @@ signals:
|
||||
void tempHistoryChanged();
|
||||
void gpuProcessesChanged();
|
||||
void tempAlertEnabledChanged();
|
||||
void primeOffloadEnabledChanged();
|
||||
void switchPendingChanged();
|
||||
void restoreCountdownChanged();
|
||||
|
||||
private:
|
||||
void detectGpus();
|
||||
@@ -90,6 +101,9 @@ private:
|
||||
void detectGpuMode();
|
||||
void checkTempAlert();
|
||||
void sendNotification(const QString &summary, const QString &body);
|
||||
void restoreFromBackup();
|
||||
static QString primeConfigPath();
|
||||
static QString backupFilePath();
|
||||
static int findDrmCard(const QString &pciId);
|
||||
static QStringList runCommand(const QString &cmd, const QStringList &args);
|
||||
static QString parseGpuName(const QString &line);
|
||||
@@ -110,6 +124,9 @@ private:
|
||||
// 温度告警冷却时间戳
|
||||
qint64 m_lastAlertTime;
|
||||
bool m_tempAlertEnabled;
|
||||
bool m_switchPending;
|
||||
int m_restoreCountdown;
|
||||
QTimer *m_restoreTimer;
|
||||
};
|
||||
|
||||
DS_END_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user