Rendering & Graphics Issues May 24, 2026

Steam Deck OLED Fest Demo Drains Battery on Idle Menu Despite Menu FPS Cap - How to Fix

Fix Steam Deck OLED battery drain on idle fest menus when Application.targetFrameRate already caps FPS. UI redraw, VRR, audio wakeups, MangoHud power proof, and idle_power_smoke_pass gate.

By GamineAI Team

Steam Deck OLED Fest Demo Drains Battery on Idle Menu Despite Menu FPS Cap - How to Fix

Problem: You fixed Unity menu vSync vs targetFrameRate—the Steam FPS overlay shows ~60 on the title screen. On Steam Deck OLED, the fan still ramps, the case warms, and Wh/min stays high during a 15-minute idle menu session. Fest chat calls it “unoptimized” even though FPS looks capped.

Who is affected now: Teams shipping June–October 2026 fest builds after the menu FPS cap opinion, help #28, and the Deck OLED battery verification resource. FPS cap ≠ power cap—compat checklists do not replace idle battery smoke.

Fastest safe fix: Confirm FPS cap on installed Steam build → run 15-minute idle menu smoke on battery with MangoHud or Deck power UI → reduce render scale / full-screen UI redraw / menu VFX → suspend idle audio buses → set idle_power_smoke_pass: true on menu_fps_cap_receipt_v1.json → separate compat row from menu_idle_power on BUILD_RECEIPT.

Direct answer

A frame-rate cap limits how often the CPU/GPU present frames. Power draw still scales with resolution, shader cost per frame, UI canvas rebuilds, VRR refresh, and audio/system wakeups. Deck OLED panels often run 90–120 Hz; capping simulation to 60 FPS without lowering present cost or display policy leaves the device busy. Treat idle menu power as its own gate beside FPS proof.

Why this issue spikes in June 2026

  1. Menu FPS cluster shipped — Teams file menu_fps_cap_receipt_v1.json with overlay FPS only.
  2. Deck battery resource brief #6 — Separates compat from idle Wh/min verification.
  3. OLED 120 Hz reviews — Streamers clip fan noise at title screen, not gameplay.
  4. Animated menu UI — Spine/UI Toolkit/URP post stack still renders expensive frames at 60 FPS.
  5. October fest traffic — Short sessions mean menu dwell time dominates first impressions.

Pair with 12 Free Deck battery verification tools. If overlay still shows 120 FPS, fix FPS first—Unity vSync override help.

Symptoms and search phrases

  • Steam overlay 60 FPS but fan audible on static menu.
  • Wh/min on idle menu ≥ gameplay baseline (wrong).
  • Deck warm before player presses Start.
  • MangoHud GPU% spikes on menu with no input.
  • Animated background + capped FPS still drains battery.
  • Works plugged in at desk; fails on battery fest play pattern.
  • Compat / Verified pass but Reddit cites “kills battery at menu.”

Root causes (check in order)

  1. FPS capped but GPU cost per frame high — blur, bloom, full-screen video loop at 60 Hz.
  2. Render scale / internal resolution still at 100%+ on Deck.
  3. UI redraw every frame — legacy OnGUI, unbatched Canvas, constant layout rebuild.
  4. VRR / refresh not aligned — 120 Hz panel presenting 60 FPS simulation.
  5. Audio buses / music analyzer waking DSP on idle menu.
  6. Application.runInBackground or networking tick on title scene.
  7. Steam overlay / remote play polling during smoke—note in receipt, retest with overlay minimal.

Beginner path (first 30 minutes)

Prerequisites: Fest demo installed from Steam (not Editor), Deck on battery (~40%+ charge), menu FPS cap already passing.

  1. Enable Steam FPS overlay → confirm menu ≤ 62 FPS for 30 s.
  2. Install MangoHud (see battery resource list).
  3. Sit on main menu 15 minutes without input—note fan and Power in Steam Quick Access.
  4. Load gameplay level 1 5 minutes—compare subjective drain.
  5. If menu drain feels worse, continue to Step 2 (UI + render scale).

Common mistake: Testing only overlay FPS on a plugged-in dev PC—fest reviewers use Deck battery.

Fastest safe fix path

Step 1 — 15-minute idle menu power smoke (installed build)

Minute Action Record
0 Launch from Steam library → main menu build_label, branch
0–1 Confirm FPS cap observed_menu_fps_max
1–16 No input; menu idle Fan? heat? MangoHud avg GPU%
16 Screenshot Quick Access battery rate Optional Wh/min note
17–22 Gameplay smoke (same session) Baseline comparison

Pass: Menu idle Wh/min (or qualitative “low/medium/high”) ≤ gameplay for your genre, and fan does not spike worse than gameplay within first 5 minutes.
Fail: Menu hotter or faster drain → Step 2–4.

Outbound: Steam Deck documentation, MangoHud.

Step 2 — Lower per-frame cost (Unity example)

Cap FPS first; then cut work per frame:

// Menu scene — reduce Deck internal resolution (Unity URP example)
void ApplyDeckMenuPowerProfile()
{
    if (!Application.isMobilePlatform) { /* also gate on Steam Deck runtime API if you use it */ }
    ScalableBufferManager.ResizeBuffers(0.85f, 0.85f); // example starting point
    // Disable expensive menu post features on a MenuVolume
}
Lever Menu fest target
URP render scale 0.85 or lower on Deck only
Menu post-processing Off or static frame grab
Full-screen video background Paused or 30 FPS decode
Particle systems Stop on menu idle

Godot: lower viewport scale + disable process_mode on decorative nodes. Construct/NW.js: reduce canvas size and pause WebGL effects when document hidden.

Step 3 — Cap UI refresh rate (not just game FPS)

Engine Pattern
Unity UI Toolkit Avoid per-frame MarkDirtyRepaint; batch notifications
Unity uGUI Disable Canvas on static elements; no Update layout spam
Godot Control process_mode = PROCESS_MODE_DISABLED on static labels
Web/NW.js requestAnimationFrame throttle for menu DOM

Rule: If nothing changed on screen, do not rebuild layout this frame.

Step 4 — Audio and background discipline

// Unity — pause non-essential buses on menu (pseudo)
// AudioListener.pause = false; mute decorative buses only
  • Menu music: loop at lower sample rate or static bed—not full combat mix.
  • Disable networking, Steam stats tick, and achievement flush on title scene.
  • Set Application.runInBackground = false unless you have a documented reason.

Step 5 — File menu_fps_cap_receipt_v1.json with power gate

{
  "schema": "menu_fps_cap_receipt_v1",
  "build_id": "fest-demo-2026-05-24",
  "engine": "Unity 6",
  "fest_public": {
    "main_menu_max_fps": 60,
    "target_frame_rate_menu": 60,
    "vsync_menu": false,
    "verified_on_battery": true,
    "idle_power_smoke_pass": true
  },
  "proof": {
    "steam_install": true,
    "platform": "steam_deck_oled",
    "menu_idle_seconds": 900,
    "observed_menu_fps_max": 60,
    "idle_power_smoke_minutes": 15,
    "mangohud_menu_gpu_percent_avg": 28,
    "gameplay_baseline_note": "menu_wh_per_min <= gameplay_wh_per_min",
    "observer": "human"
  },
  "promotion_allowed": true
}

Block fest promotion if idle_power_smoke_pass is not true while observed_menu_fps_max looks fine.

Attach to Wednesday smoke with separate BUILD_RECEIPT columns:

Column Example
menu_fps_cap pass
menu_idle_power pass
deck_compat pass (different test day OK)

Working dev path (proof table)

Check Tool / artifact Pass signal
FPS cap Steam overlay ≤ 62 menu idle
Power smoke 15 min installed menu idle_power_smoke_pass: true
GPU load MangoHud Menu avg GPU% ≤ gameplay or team threshold
Render scale Frame Debugger / render doc Deck menu ≤ 0.85 scale
UI churn Profiler (one capture) No layout rebuild spam
Receipt menu_fps_cap_receipt_v1.json Both FPS + power rows
Complement 18-deck compat resource Proton/input pass separate day

Verification checklist

  • [ ] Menu FPS cap verified on Steam-installed build.
  • [ ] 15-minute idle menu on battery completed.
  • [ ] idle_power_smoke_pass: true in receipt.
  • [ ] Gameplay baseline recorded same session or documented.
  • [ ] BUILD_RECEIPT has menu_idle_power column distinct from deck_compat.
  • [ ] Animated menu assets audited (video, particles, blur).
  • [ ] No internal uncapped menu profile on fest_public depot.

Prevention

  1. Add power smoke to Wednesday ritual beside FPS gate.
  2. Bookmark Deck battery verification resource.
  3. Never treat 18-deck compat list as battery sign-off.
  4. Profile menu scene once per milestone—GPU time, not only FPS.
  5. Pair with menu FPS opinion in producer checklist.

Troubleshooting

Symptom Fix
60 FPS but hot menu Step 2–3: render scale + UI rebuild
Overlay 120 FPS vSync / targetFrameRate help first
Only bad on battery Expected—always smoke unplugged
MangoHud unavailable Steam Quick Access battery trend + fan subjective; note in receipt
Gameplay worse than menu Investigate gameplay GPU; menu gate still required
Cap broke after UI polish Re-run 15-minute smoke after every menu art pass

FAQ

Is 60 FPS enough for Deck fest demos?
Necessary, not sufficient—add idle power smoke for OLED trust.

Does Gamescope fix battery?
Can enforce frame cap when engine ignores API—see battery resource; still reduce per-frame cost.

Verified vs battery?
Verified is input/readability/launch; battery idle is separate Wh/min discipline.

Non-Unity engines?
Same gates: cap simulation FPS, cut menu GPU/UI cost, 15-minute installed smoke, receipt fields.

Streamers clip fan at menu?
File receipt + optional 30 s idle clip in release-evidence/—see menu FPS opinion evidence folder.

Related links

Prove idle menu power on the Steam-installed Deck build—overlay FPS alone is not fest-ready.