Performance Utility for Load and System Efficiency
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).
| 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.
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 wrotedevfreq/max_freq, which the governor ignored.) - CPU and GPU floors — hold either side above a chosen share of its max (
scaling_min_freqfor the CPU,min_pwrlevelfor 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.
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_pwrlevelIf 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.
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
./gradlew testDebugUnitTest assembleDebugDebug 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.
See NOTICE.md. Distributed under the GNU General Public License v2.0 (LICENSE).