adjustor 3.2.1__tar.gz → 3.3.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. {adjustor-3.2.1/src/adjustor.egg-info → adjustor-3.3.0}/PKG-INFO +1 -1
  2. {adjustor-3.2.1 → adjustor-3.3.0}/pyproject.toml +1 -1
  3. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/core/const.py +13 -1
  4. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/amd/__init__.py +71 -6
  5. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/amd/settings.yml +13 -0
  6. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/hhd.py +12 -0
  7. {adjustor-3.2.1 → adjustor-3.3.0/src/adjustor.egg-info}/PKG-INFO +1 -1
  8. {adjustor-3.2.1 → adjustor-3.3.0}/LICENSE +0 -0
  9. {adjustor-3.2.1 → adjustor-3.3.0}/MANIFEST.in +0 -0
  10. {adjustor-3.2.1 → adjustor-3.3.0}/readme.md +0 -0
  11. {adjustor-3.2.1 → adjustor-3.3.0}/setup.cfg +0 -0
  12. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/__init__.py +0 -0
  13. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/__main__.py +0 -0
  14. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/core/__init__.py +0 -0
  15. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/core/acpi.py +0 -0
  16. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/core/alib.py +0 -0
  17. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/core/lenovo.py +0 -0
  18. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/core/platform.py +0 -0
  19. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/__init__.py +0 -0
  20. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/amd/power-profiles-daemon.dbus.xml.in +0 -0
  21. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/amd/ppd.py +0 -0
  22. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/asus/__init__.py +0 -0
  23. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/asus/settings.yml +0 -0
  24. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/lenovo/__init__.py +0 -0
  25. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/lenovo/settings.yml +0 -0
  26. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/smu/__init__.py +0 -0
  27. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/smu/qam.yml +0 -0
  28. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/drivers/smu/smu.yml +0 -0
  29. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/events.py +0 -0
  30. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/fuse/__init__.py +0 -0
  31. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/fuse/driver.py +0 -0
  32. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/fuse/gpu.py +0 -0
  33. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/fuse/utils.py +0 -0
  34. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/i18n.py +0 -0
  35. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor/settings.yml +0 -0
  36. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor.egg-info/SOURCES.txt +0 -0
  37. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor.egg-info/dependency_links.txt +0 -0
  38. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor.egg-info/entry_points.txt +0 -0
  39. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor.egg-info/requires.txt +0 -0
  40. {adjustor-3.2.1 → adjustor-3.3.0}/src/adjustor.egg-info/top_level.txt +0 -0
  41. {adjustor-3.2.1 → adjustor-3.3.0}/usr/share/dbus-1/system.d/hhd-net.hadess.PowerProfiles.conf +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: adjustor
3
- Version: 3.2.1
3
+ Version: 3.3.0
4
4
  Summary: Adjustor, a userspace program for managing the TDP of handheld devices.
5
5
  Author-email: Kapenekakis Antheas <pypi@antheas.dev>
6
6
  Project-URL: Homepage, https://github.com/hhd-dev/adjustor
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adjustor"
3
- version = "3.2.1"
3
+ version = "3.3.0"
4
4
  authors = [
5
5
  { name="Kapenekakis Antheas", email="pypi@antheas.dev" },
6
6
  ]
@@ -41,12 +41,24 @@ DEV_PARAMS_7040: dict[str, DeviceParams] = {
41
41
  "temp_target": D(60, 70, 85, 90, 100),
42
42
  }
43
43
 
44
+ DEV_PARAMS_NEO: dict[str, DeviceParams] = {
45
+ "stapm_limit": D(0, 4, 15, 28, 35),
46
+ "skin_limit": D(0, 4, 15, 28, 35),
47
+ "slow_limit": D(0, 4, 20, 32, 37),
48
+ "fast_limit": D(0, 4, 25, 35, 40),
49
+ # Times
50
+ "slow_time": D(5, 5, 10, 10, 10),
51
+ "stapm_time": D(100, 100, 100, 200, 200),
52
+ # Temp
53
+ "temp_target": D(60, 70, 85, 90, 100),
54
+ }
55
+
44
56
  DEV_PARAMS_6040: dict[str, DeviceParams] = DEV_PARAMS_7040
45
57
  DEV_PARAMS_8040: dict[str, DeviceParams] = DEV_PARAMS_7040
46
58
  DEV_PARAMS_LEGO = DEV_PARAMS_7040
47
59
 
48
60
  DEV_DATA: dict[str, tuple[dict[str, DeviceParams], dict[str, AlibParams], bool]] = {
49
- "NEO-01": (DEV_PARAMS_7040, ALIB_PARAMS_7040, False),
61
+ "NEO-01": (DEV_PARAMS_NEO, ALIB_PARAMS_7040, False),
50
62
  "83E1": (DEV_PARAMS_LEGO, ALIB_PARAMS_7040, False),
51
63
  }
52
64
 
@@ -2,10 +2,11 @@ import logging
2
2
  import os
3
3
  import subprocess
4
4
  import sys
5
- from threading import Event as TEvent
6
5
  from threading import Thread
7
6
  from typing import Literal
7
+ import shutil
8
8
  import time
9
+ import signal
9
10
 
10
11
  from hhd.plugins import Context, HHDPlugin, load_relative_yaml
11
12
  from hhd.plugins.conf import Config
@@ -67,14 +68,18 @@ class AmdGPUPlugin(HHDPlugin):
67
68
  self.ppd_conflict = False
68
69
  self.initialized = False
69
70
  self.supports_boost = False
71
+ self.supports_sched = False
72
+ self.avail_scheds = {}
70
73
 
71
74
  self.proc = None
72
75
  self.t = None
73
76
 
74
77
  self.queue = None
78
+ self.sched_proc = None
75
79
  self.old_ppd = False
76
80
  self.old_gpu = None
77
81
  self.old_freq = None
82
+ self.old_sched = "disabled"
78
83
  self.old_boost = None
79
84
  self.old_epp = None
80
85
  self.old_target = None
@@ -174,6 +179,31 @@ class AmdGPUPlugin(HHDPlugin):
174
179
  "cpu_pref"
175
180
  ]
176
181
 
182
+ self.avail_scheds = {}
183
+ avail_pretty = {}
184
+ kernel_supports = os.path.isfile("/sys/kernel/sched_ext/state")
185
+ if kernel_supports:
186
+ for sched, pretty in sets["enabled"]["children"]["mode"]["modes"]["manual"][
187
+ "children"
188
+ ]["sched"]["options"].items():
189
+ if sched == "disabled":
190
+ avail_pretty[sched] = pretty
191
+ continue
192
+
193
+ exe = shutil.which(sched)
194
+ if exe:
195
+ self.avail_scheds[sched] = exe
196
+ avail_pretty[sched] = pretty
197
+
198
+ if self.avail_scheds:
199
+ sets["enabled"]["children"]["mode"]["modes"]["manual"]["children"]["sched"][
200
+ "options"
201
+ ] = avail_pretty
202
+ else:
203
+ del sets["enabled"]["children"]["mode"]["modes"]["manual"]["children"][
204
+ "sched"
205
+ ]
206
+
177
207
  self.logged_boost = True
178
208
  return {
179
209
  "tdp": {"amd_energy": sets["enabled"]},
@@ -197,7 +227,7 @@ class AmdGPUPlugin(HHDPlugin):
197
227
  self.proc.stdin.flush()
198
228
  except Exception as e:
199
229
  logger.error(f"Failed to send PPD mode:\n{e}")
200
- self.close()
230
+ self.close_ppd()
201
231
 
202
232
  def update(self, conf: Config):
203
233
  self.core_enabled = conf["hhd.settings.tdp_enable"].to(bool)
@@ -224,9 +254,9 @@ class AmdGPUPlugin(HHDPlugin):
224
254
  self.proc, self.t = _open_ppd_server(self.emit)
225
255
  except Exception as e:
226
256
  logger.error(f"Failed to open PPD server:\n{e}")
227
- self.close()
257
+ self.close_ppd()
228
258
  else:
229
- self.close()
259
+ self.close_ppd()
230
260
 
231
261
  if conf["tdp.amd_energy.mode.mode"].to(str) == "auto":
232
262
  curr = time.perf_counter()
@@ -239,6 +269,8 @@ class AmdGPUPlugin(HHDPlugin):
239
269
  logger.info(
240
270
  f"Handling energy settings for power profile '{self.target}'."
241
271
  )
272
+ # Unless it is set manually, use the default scheduler.
273
+ self.close_sched()
242
274
  try:
243
275
  match self.target:
244
276
  case "balanced":
@@ -329,10 +361,43 @@ class AmdGPUPlugin(HHDPlugin):
329
361
  except Exception as e:
330
362
  logger.error(f"Failed to set minimum CPU frequency:\n{e}")
331
363
 
332
- def close(self):
364
+ if self.avail_scheds:
365
+ # Check health and print error
366
+ if self.sched_proc and self.sched_proc.poll():
367
+ err = self.sched_proc.poll()
368
+ self.sched_proc = None
369
+ logger.error(
370
+ f"Scheduler from sched_ext '{self.old_sched}' closed with error code: {err}"
371
+ )
372
+
373
+ new_sched = conf.get("tdp.amd_energy.mode.manual.sched", "disabled")
374
+ if new_sched != self.old_sched:
375
+ self.close_sched()
376
+ self.old_sched = new_sched
377
+ if new_sched and new_sched != "disabled":
378
+ logger.info(f"Starting sched_ext scheduler '{new_sched}'")
379
+ self.sched_proc = subprocess.Popen(
380
+ self.avail_scheds[new_sched],
381
+ stderr=subprocess.DEVNULL,
382
+ stdout=subprocess.DEVNULL,
383
+ )
384
+
385
+ def close_ppd(self):
333
386
  if self.proc is not None:
334
- self.proc.terminate()
387
+ self.proc.send_signal(signal.SIGINT)
335
388
  self.proc.wait()
389
+ self.proc = None
336
390
  if self.t is not None:
337
391
  self.t.join()
338
392
  self.t = None
393
+
394
+ def close_sched(self):
395
+ if self.sched_proc is not None:
396
+ logger.info(f"Closing sched_ext scheduler '{self.old_sched}'.")
397
+ self.sched_proc.send_signal(signal.SIGINT)
398
+ self.sched_proc.wait()
399
+ self.sched_proc = None
400
+
401
+ def close(self):
402
+ self.close_ppd()
403
+ self.close_sched()
@@ -87,6 +87,19 @@ enabled:
87
87
  max: 2000
88
88
  step: 100
89
89
  default: 1000
90
+ sched:
91
+ type: multiple
92
+ title: Custom Scheduler
93
+ hint: >-
94
+ Allows attaching a scheduler to the kernel sched_ext.
95
+ Schedulers need to be installed.
96
+ "Kernel" .
97
+ options:
98
+ disabled: Disabled
99
+ scx_lavd: LAVD
100
+ scx_bpfland: bpfland
101
+ scx_rusty: rusty
102
+ default: disabled
90
103
 
91
104
  conflict:
92
105
  title: Energy Management
@@ -274,6 +274,18 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]:
274
274
 
275
275
  if not drivers_matched and prod in DEV_DATA:
276
276
  dev, cpu, pp_enable = DEV_DATA[prod]
277
+
278
+ try:
279
+ # Set values for the steam slider
280
+ if dev["skin_limit"].smin:
281
+ min_tdp = dev["skin_limit"].smin
282
+ if dev["skin_limit"].default:
283
+ default_tdp = dev["skin_limit"].default
284
+ if dev["skin_limit"].smax:
285
+ max_tdp = dev["skin_limit"].smax
286
+ except Exception as e:
287
+ logger.error(f"Failed to get TDP limits for {prod}:\n{e}")
288
+
277
289
  pp_enable |= bool(os.environ.get("HHD_ADJ_DEBUG"))
278
290
  drivers.append(
279
291
  SmuDriverPlugin(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: adjustor
3
- Version: 3.2.1
3
+ Version: 3.3.0
4
4
  Summary: Adjustor, a userspace program for managing the TDP of handheld devices.
5
5
  Author-email: Kapenekakis Antheas <pypi@antheas.dev>
6
6
  Project-URL: Homepage, https://github.com/hhd-dev/adjustor
File without changes
File without changes
File without changes
File without changes
File without changes