Skip to content

About

Benchmark macOS games with the Metal Performance HUD: live FPS, 1%/0.1% lows, frame-time graph and CSV runs.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

Repository files navigation

MetalHUD Logger icon

MetalHUD Logger

Benchmark macOS games using Apple's built-in Metal Performance HUD: live FPS, 1% / 0.1% lows, CPU / GPU temperatures, and recorded runs saved as CSV.

MetalHUD Logger screenshot

Features

  • Live stats — current FPS, average FPS, 1% low and 0.1% low for the game in focus.
  • CPU and GPU temperatures — current, average and max, read from the SMC (no root needed). Each run's average and max are saved with it.
  • Benchmark runs — fixed-length or manual recordings with an optional warm-up, saved as a per-frame CSV plus a text summary.
  • Global hotkey ⌃⌥R starts and stops recording, even while a game is fullscreen.
  • Automatic game detection — any Metal app writing HUD logs shows up, including Windows games running through Wine / Game Porting Toolkit (named after their .exe).
  • Run history showing each run's FPS, lows and CPU / GPU temperatures, with quick access to files and copyable summaries.

How it works

When MTL_HUD_ENABLED=1 and MTL_HUD_LOG_ENABLED=1 are set for a process, Metal's HUD (libMTLHud) writes a metal-HUD: line to the unified log about once a second. MetalHUD Logger runs log stream, parses those lines and computes statistics. Temperatures come from the Mac's System Management Controller (SMC), which any app can read. No injection, no special entitlements, no Accessibility permission, no root.

Install

Download MetalHUD-Logger-<version>.zip from the latest release, unzip it and move MetalHUD Logger to Applications. It's a universal app (Apple Silicon and Intel).

The app is signed with a Developer ID and notarized by Apple, so it opens normally. Or build it yourself (below).

Requirements

  • macOS 13 Ventura or later
  • Swift 5.9+ toolchain (Xcode or Command Line Tools) to build from source

Build

./build.sh

This builds a universal release binary and wraps it in MetalHUD Logger.app with the icon. It signs with the first Developer ID Application certificate in your keychain (or SIGN_IDENTITY=...), falling back to an ad-hoc signature if you don't have one. For development you can also use swift run.

./build.sh --zip also makes the release archive. To notarize, store notarytool credentials once and build with --notarize, which submits the app to Apple, staples the ticket and zips the result:

xcrun notarytool store-credentials MetalHUDLogger --apple-id <email> --team-id <team-id>
./build.sh --notarize

The icon is generated by swift Scripts/make-icon.swift.

Usage

  1. Turn on HUD logging in the top bar. This sets the HUD variables with launchctl setenv, so it only affects apps launched afterwards — relaunch the game (and Steam, if you use it).
    • For Steam games you can instead paste the launch option from Steam Launch Option: MTL_HUD_ENABLED=1 MTL_HUD_LOG_ENABLED=1 %command%
    • Wine launchers (CrossOver, Whisky, custom ones) must pass both variables through to the game's environment.
  2. Launch the game. It appears in the game picker; Auto follows the most recently started one.
  3. Set a label, duration and warm-up, then press Start Recording or ⌃⌥R.

Runs are saved to ~/Documents/MetalHUD Logs/ as <date> <game> - <label>.csv (one row per frame) and _summary.txt (average FPS, lows, frame times and CPU / GPU temperatures).

Temperatures

The Temperatures card shows the current CPU and GPU temperature, plus the average and max. Outside a recording the average and max cover the last 2 minutes; while recording they cover the current run, excluding the warm-up, and are saved with it.

Each reading is the mean of that unit's die sensors, sampled once a second. Sensors are found by name rather than a per-chip table: Tp* / Te* / Ts* (CPU) and Tg* (GPU) on Apple silicon, TC* / TG* on Intel. If no sensors are found, the card says so and runs are saved without temperatures.

Per-frame data and the <private> redaction

macOS redacts the per-frame part of each HUD log line as <private>. Without it, MetalHUD Logger estimates frames from the per-second frame counter, so 1% / 0.1% lows are approximate and GPU time is unavailable (an orange banner says so).

Enable Per-Frame Data… generates a configuration profile that turns off private-data redaction in the unified log. Install it in System Settings › General › Device Management. Note that this affects all log messages on the Mac; remove the profile there to undo it.

License

MetalHUD Logger is free software, licensed under the GNU General Public License v3.0.

About

Benchmark macOS games with the Metal Performance HUD: live FPS, 1%/0.1% lows, frame-time graph and CSV runs.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages