Benchmarking for Batocera Guide

Batocera covers a very complex landscape of both hardware it supports and systems it can emulate. Getting a rough idea of where your hardware stands and what sort of systems you can expect to emulate at full-speed can be extremely difficult for someone not already intimate familiar with the emulation and hardware scenes. Help us help them by providing some easy-to-parse benchmarks so they can make a more informed decision.

Requirements for benchmarking (so as to create a fair and reproducible result):

  • This is running on a machine connected to a 1920×1080 60 Hz display. Lower resolution displays are acceptable, but try to get as close to the full-HD standard as possible. Going above can result in unfair poor performance, which is not representative of the hardware's capabilities.
  • Leave all the settings at their default “AUTO” mode. In a way, Batocera's defaults can be considered as differences in development between versions of Batocera.
  • Running the game off the internal drive. Network shares or external drives may have unrelated storage speed access issues that negatively affect games.

For Batocera's benchmarking purposes, it's really only necessary to see whether a game is running at full-speed or not. There is no ambiguity with this sort of system and is easy to understand by all. You can enable the FPS counter by going to SYSTEM SETTINGSDEVELOPERSHOW FPS COUNTER and turning it on.

For a 60 FPS game, anything between 57 to 60 FPS without noticeable stutters (more than half a second) would be considered full-speed. Micro-stutters (less than a 60th of a second) can usually be explained by hardware configuration and slightly less-than-optimal default settings, and should be ignored.

For 50 FPS games (like PAL region games), the same but anything between 47 to 50 FPS instead.

For games that run easily at full-speed, try increasing the rendering scale by an integer multiplication. Things like x2 resolution, x3, x4, etc. until you reach the setting where emulation is no longer full-speed. For systems where upscaling the rendering resolution is not possible, just write down “Full-speed” instead.

For games that don't run at full-speed, note down the average FPS for that system (this is very subjective, but do what you feel is the best representation of the performance). Some users may still find a “mostly full-speed” game acceptable to play.

If you'd like a video example to compare to, watch this excellent one by ETA Prime: https://youtu.be/fQ2H842vnMw

  • 02:50 - Dreamcast This would be considered full-speed.
  • 03:18 - PSX This would be considered full-speed.
  • 03:38 - Atomiswave This would be considered full-speed, despite the graphical issues. Theoretically, this could be fixed by using the proper drivers/settings in the emulator.
  • 04:03 - N64 This would be considered full-speed (he did not test upscaling in this example).
  • 04:54 - PSP This would be considered “x3”.
  • 06:22 - Gamecube For low-end games, this would be considered “x1”. For high-end games, due to the drop down to 50 FPS, this would not be full-speed.
  • 07:38 - PS2 This would not be full-speed, as hacks/alternative regions needed to be utilized to achieve such a speed. Benchmarking should only consider performance at default settings.

For older systems that might be running a Nvidia card, do try to get the official Nvidia drivers working. If it's really old, you may have to use the legacy build. If the CPU/motherboard is too old for even that, you may have to use an even older version of Batocera (such as 5.26).

The point of this list isn't to be exhaustive, but to be representative of the rough lower and upper bounds of an emulated system's capabilities. For this, games that are both low/high-end while still being relatively well-known have been selected. Systems below SNES are considered to be low-requirement enough that pretty much all x86_64 machines can run them at full-speed.

  • SNES
    • Low-end SNES (Super Mario World)
    • High-end SNES (Super Mario World 2: Yoshi's Island)
  • PSX
    • Low-end PSX (Metal Slug X)
    • High-end PSX (Bloody Roar)
  • N64
    • Low-end N64 (Super Mario 64)
    • High-end N64 (Goldeneye 007)
  • PSP
    • Low-end PSP (Mega Man Maverick Hunter X)
    • High-end PSP (God of War: Chains of Olympus)
  • Dreamcast
    • Low-end Dreamcast (Marvel vs. Capcom 2)
    • High-end Dreamcast (Sega Rally 2)
  • GameCube
    • Low-end GameCube (Mario Kart Double Dash)
    • High-end GameCube (Auto Modellista)
  • Wii U
    • Low-end Wii U (Super Mario Maker)
    • High-end Wii U (Breath of the Wild)
  • PS2
    • Low-end PS2 (Kingdom Hearts)
    • High-end PS2 (God of War)

Here's an example of such a benchmark:

FIXME

You can also view the already existing benchmark tables at the "Choose a Desktop/Benchmarks" page. Some of the older benchmarks use a different format, but contributions for older versions of Batocera are still accepted.

Once you have such a file, just throw the file (.csv is fine) onto the Discord or edit it in yourself if you've been granted a Batocera Wiki account.

Batocera's benchmarking is relatively simple, intentionally so. However, if you'd like to do further benchmarking just for the sake of seeing how your hardware is doing you can utilize the MangoHUD program (Batocera v31 and higher).

If on Batocera v31 exactly, you'll need to run flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo first.

  1. flatpak install com.valvesoftware.Steam.Utility.MangoHud
  2. From Batocera, launch a libretro game and close it once. This is important.
  3. export DISPLAY=:0.0
  4. /etc/init.d/S31emulationstation stop
  5. Check your logs at stdout.log and work out what the launch command was. For paths that contain special characters or whitespaces, you may need to enclose them in double quotes (“). In case it's not obvious, you can (generally) use the example command below, just adapt it to your system/game.
  6. Then run the run command but with mangohud in front of it, eg. mangohud retroarch -L /usr/lib/libretro/snes9x_libretro.so --config /userdata/system/configs/retroarch/retroarchcustom.cfg --verbose "/userdata/roms/snes/Panel de Pon (Japan) [En by Zuqkeo v1.0].zip"

This will get you the following result on-screen (notice the upper left corner):

In order to quit the game, you can just hit [Alt] + [F4] or run batocera-es-swissknife --emukill. If you'd like to restart ES, run batocera-es-swissknife –-restart.

  • wiki/benchmarking_for_batocera.txt
  • Last modified: 4 days ago
  • by atari