A tiny macOS helper that stops World of Warcraft from running at a third of its frame rate on Apple Silicon.
The problem
On an M3 Pro MacBook, the WoW Classic beta client (1.60.1) sat at about 35 fps with the game in front, on AC power, no thermal throttling, Low Power Mode off. Pressing a volume key made it jump to 85 fps for a few seconds, then it fell back.
An Instruments Metal System Trace showed why. With the game as the only thing on screen, macOS held the GPU in its Minimum performance state. The moment any other window was drawn above the game (the volume HUD, or a 32 pixel test window), the GPU went to Maximum and the frame rate more than doubled.
| condition | GPU performance state | fps |
|---|---|---|
| game frontmost, nothing above it | Minimum | 33 to 35 |
| small window drawn above the game | Maximum | 80 to 89 |
| window removed | decays back | toward 30 |
The fix
wowoverlay is a 32x32 pixel, 3% opacity, click-through, always-on-top window in the bottom right corner of the screen. That is all it does. While it is up, macOS composites the game with it and keeps the GPU clocked up. It exits by itself when WoW quits.
It does not read, inject into, or modify the game, its memory, its files or its network traffic. It is an ordinary window from a separate process, the same as a volume HUD or a notification.
Requirements
- Apple Silicon Mac, macOS 13 or later
- Xcode Command Line Tools for the Swift compiler:
xcode-select --install
Install
git clone https://github.com/chrisdecember/wow-mac-boost.git
cd wow-mac-boost
./install.shThis builds the overlay and puts wowboost, wowoverlay and wowdiag in ~/.local/bin. A stock Mac does not look in that folder for commands, so the installer adds it to your PATH in ~/.zshrc. Close the Terminal window and open a new one after installing, then wowboost will work.
"command not found: wowboost"
Your Terminal has not picked up the new PATH yet. Either open a new Terminal window, or run it by its full path:
If you installed before this fix was added, run this once, then open a new Terminal window:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
Use
Start the game, then:
Or launch the game and the overlay together:
play accepts beta, era, anniversary or retail. If WoW is not in /Applications/World of Warcraft, set WOWROOT to its folder first.
Stop it:
If the frame rate sags again while the overlay is on, switch to the animated variant, which redraws 30 times a second:
wowboost off wowboost animate
Turn on the in-game frame rate counter (Ctrl+R by default) and toggle wowboost on and off to see whether your machine is affected. If nothing changes, you do not have this problem and do not need this tool.
Diagnostics (optional)
wowdiag is the listener used to find the problem. It needs full Xcode for the trace command; everything else works with stock macOS.
wowdiag snapshot # arch, GPU utilisation, CPU, % of main thread waiting on the GPU, memory, thermals wowdiag watch 5 60 # the same every 5 s for 60 s, logged to CSV in ~/wowdiag wowdiag trace 10 mytag # 10 s Metal System Trace: GPU clock state, fps, GPU ms per frame, top encoders wowdiag settings # GPU-relevant settings side by side for every installed client wowdiag threads # busiest threads and main thread top frames wowdiag hud on # Apple's Metal performance HUD (relaunch the game)
After a trace, python3 ~/.local/bin/persec.py <tables folder> prints fps and GPU performance state for each second.
Other findings for the 1.60.1 beta on Mac
- Do not change
giQualitywith/consolewhile in the world. On an M3 Pro it hung the GPU and froze the whole Mac twice, requiring a power button reset.giQuality 0asserts inWorldGlobalIllumination.cpp:2094.giQuality 1tints the world green. Leave it at 3. - With the GPU at full clock, one global illumination compute pass still runs alone at the start of every frame for 5 to 7 ms, which caps the client around 85 fps on this hardware. Classic Era holds 120 on the same machine.
gx.logreports a garbage GPU memory budget (17179869182 GB) on unified memory Macs.- The graphics adapter shows as "M3 Pro Low Power". That is Metal's
isLowPowerflag, not a power mode.
Tested on
MacBook Pro M3 Pro (18 core GPU), 18 GB, macOS 26.6.1, WoW Classic beta 1.60.1.69913. Reports from other machines and clients are welcome in the issues.
Licence
MIT