Skip to content
zoot334Public

About

Pulse is an Android utility for tuning CPU cluster and GPU frequency limits on supported handheld gaming devices — without Magisk or user-granted root. It relies on the device's built-in PServer service to write protected sysfs nodes, the same no-root technique used by ClusterTune (see Attribution).

Resources

Stars

1 star

Watchers

0 watching

Forks

 
 

Repository files navigation

P.U.L.S.E.

Performance Utility for Load and System Efficiency

GitHub Downloads (all assets, all releases) GitHub Release

PULSE is an Android performance tuner for handheld gaming devices — CPU cluster and GPU frequency limits, power tiers, thermals, and live telemetry — without Magisk or user-granted root. It drives the device's built-in PServer service to write protected sysfs nodes, the same no-root technique used by ClusterTune (see Attribution).

Targeted devices

Device SoC ro.soc.model GPU
AYN Odin 3 Qualcomm Dragonwing Q8 CQ8725S Adreno 830
AYN Thor (Base/Pro/Max) Snapdragon 8 Gen 2 QCS8550 Adreno 740
Retroid Pocket 6 Snapdragon 8 Gen 2 QCS8550 Adreno 740

Warning

PULSE changes CPU and GPU frequency limits. This affects stability, thermals, battery life, and performance, and is not guaranteed safe for your hardware. Use it only if you understand what frequency limits do and accept the risk.

What it does

Frequency control

  • Per-cluster CPU caps — one slider per cpufreq policy, snapped to the device's real scaling_available_frequencies.
  • GPU cap — capped via the Adreno power-level index (kgsl-3d0/max_pwrlevel), the lever the GPU governor actually honors. The ceiling is lowered while the GPU still scales below it. (Earlier builds wrote devfreq/max_freq, which the governor ignored.)
  • CPU and GPU floors — hold either side above a chosen share of its max (scaling_min_freq for the CPU, min_pwrlevel for the GPU) for steadier response and frame pacing.
  • Prime-core boost limit — cap just the prime cluster below its non-sustainable turbo bin to cut heat without touching the rest of the cores.

Power management

  • Four power tiers — AAA/Max, Balanced, Power Saving, Custom. Snapdragon has no programmable wattage cap, so each tier is a power envelope built from CPU + GPU frequency caps, snapped to each device's real OPPs.
  • Power Target — a single TDP-style master slider that scales every CPU cluster and the GPU ceiling together (with an optional CPU-only mode).
  • CPU governor — switch between Performance, Balanced, and Power Save scalers.

Display & thermals

  • Render scale — drop display resolution (wm size / wm density) for GPU headroom; fully reversible.
  • Refresh rate — select 60 / 90 / 120 Hz.
  • Fan modes (Odin family) — switch the stock fan_mode (Silent / Smart / Sport); the device's own thermal limiter stays in charge, so no mode can overheat the SoC.

Live monitoring

  • Telemetry HUD — real-time CPU/GPU clocks, GPU load, battery level, CPU/GPU temperatures, and power draw, with colour that tracks each reading (cool → hot).
  • Estimated peak draw — a watt estimate at the current ceilings that self-calibrates from your device's real measured draw under load.

Profiles & automation

  • Save, edit, delete, reorder, import, and export profiles.
  • Reapply-on-boot, sleep-aware profile switching, and a Quick Settings tile that can cycle the power tiers, open a quick dialog, or launch the app.

Detection & theming

  • Live detection — clusters, per-core ranges, and GPU OPPs are read from sysfs at runtime, so the app adapts to whatever each device exposes (with min/max fallbacks when a node omits its available-frequency list).
  • Five themes — Signal (default), Crimson, Cyberpunk, Ronin, and Ad Astra, each with its own procedurally-generated animated background.

How the no-root mechanism works

These devices ship a privileged system service (PServerBinder) in their stock firmware. PULSE obtains it via reflection and runs a short shell script through it as root:

# CPU cluster — write the chosen frequency (kHz) to scaling_max_freq
chmod 666 /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
echo 2745600 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq   # kHz
chmod 444 /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq

# GPU — cap by Adreno power-level index (0 = fastest), not by frequency.
# min_pwrlevel is widened to the slowest level first, or the kernel snaps the cap back.
chmod 666 /sys/class/kgsl/kgsl-3d0/min_pwrlevel
echo 13 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel
chmod 444 /sys/class/kgsl/kgsl-3d0/min_pwrlevel
chmod 666 /sys/class/kgsl/kgsl-3d0/max_pwrlevel
echo 6 > /sys/class/kgsl/kgsl-3d0/max_pwrlevel                # power-level index (≈660 MHz here)
chmod 444 /sys/class/kgsl/kgsl-3d0/max_pwrlevel

If PServerBinder is absent the app degrades gracefully and reports the device as incompatible — it never asks for or requires granted root.

Unit note: cpufreq nodes take a frequency in kHz; the kgsl cap takes a power-level index (0 = fastest), not a frequency. PULSE keeps every frequency in kHz internally (so the UI and profiles share one unit) and converts the chosen GPU frequency to its power-level index at the write boundary in PerformanceCommandBuilder.

Architecture

The GPU is modeled as a synthetic cpufreq "policy" (CpuPolicyInfo.GPU_POLICY_ID = -100) so it flows through the exact same profile / apply / verify pipeline as the CPU clusters.

app/src/main/java/com/kei/pulse/
  data/    detection (CPU + GPU), telemetry, storage, profiles, repository
  model/   app state and profile models
  root/    PServer access and command execution
  tile/    Quick Settings tile + add-tile prompt
  sleep/   sleep / wake profile automation service
  ui/      Compose screens, dialogs, settings, theme (PULSE HUD)
  boot/    boot completed receiver

Build

./gradlew testDebugUnitTest assembleDebug

Debug APK: app/build/outputs/apk/debug/. Requires Android 12+ (minSdk 31). A signing config is picked up automatically from ANDROID_KEYSTORE_* environment variables or local.properties when present; without it, debug builds are signed with the default key.

License & Attribution

See NOTICE.md. Distributed under the GNU General Public License v2.0 (LICENSE).

About

Pulse is an Android utility for tuning CPU cluster and GPU frequency limits on supported handheld gaming devices — without Magisk or user-granted root. It relies on the device's built-in PServer service to write protected sysfs nodes, the same no-root technique used by ClusterTune (see Attribution).

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages