Limitations - poli0981/frameledger GitHub Wiki

FrameLedger measures a game by loading a small component into it β€” only for a game you added and switched hooking on for β€” and reading the graphics calls the game makes. That is why it can tell the real render resolution, the upscaler, frame generation and ray tracing apart. It is also where its limits come from. This page lists them in plain words; each item links to the document that has the details.

Beta software: this page describes version 0.1.0-beta.23.

Games it will not measure

  • Games with anti-cheat. FrameLedger looks for anti-cheat before it touches a game and refuses when it finds one β€” there is no switch that overrides this. The one exception is an anti-cheat that runs entirely inside the game (no driver, no service), which you can allow per game after a warning; its first two sessions are a trial, and one that does not go well ends the exception for good. A ban is still possible and may come days later. Kernel anti-cheat is never allowed. (Safety)
  • Anti-cheat FrameLedger does not know about. The list of anti-cheat products is FrameLedger's own and can be incomplete. A game protected by something unknown may be hooked; that is a risk to your account that you take by switching hooking on.
  • 32-bit games and Direct3D 9 games. Only 64-bit Direct3D 11, Direct3D 12 and OpenGL games are measured from their own calls; a 32-bit or Direct3D 9 game is recorded without measurement.
  • Vulkan games, unless FrameLedger starts them. A Vulkan game is measured only when FrameLedger launches it with its Vulkan layer switched on β€” Play set to Start directly does; one started another way is not observed by the layer.
  • Games that run as administrator, unless you turn on Run the agent as administrator in Settings (off by default; Windows asks every time the agent starts). A process Windows protects stays closed either way.
  • Vulkan games that run as administrator. Windows' Vulkan loader does not load FrameLedger's Vulkan layer into an elevated game, so admin mode does not help there.
  • A game that was already running when FrameLedger was updated β€” restart the game once.
  • Games you did not switch hooking on for. Adding a game only records its sessions; measuring it is a separate, per-game choice with its own warning.

What an unmeasured session contains

When a game is not measured β€” any of the reasons above β€” its session still records how long it ran, the machine's sensors (GPU temperature, load, power; CPU load; memory), how much memory the game itself used (read from Windows, outside the game) and why nothing was measured. Every frame-rate, upscaler, frame-generation and ray-tracing value reads N/A, never 0. How the game's window was shown is recorded too, from outside the game. (Capture)

When a game crashed

  • A session reads crashed when the game ended with an exception's code, when Windows logged a crash report of it, or β€” since 0.1.0-beta.14 β€” when it started its engine's crash reporter (Unreal's, CD PROJEKT RED's, Capcom's, BugSplat's) and exited within a minute. A game that handles its own crash quietly, starts no reporter and leaves no crash report reads ended normally, with its exit code.
  • A crash reporter is seen from a once-a-second look at running programs: one that opens and closes faster can be missed, and one started in the game's first 10 seconds is not counted (it could be a monitor that starts with the game). Unity's crash handler and Chromium's crashpad_handler start with every game that has them, so their presence says nothing. Sessions recorded before 0.1.0-beta.14 keep how they were stored β€” a few of them may read crashed because Windows logged a memory report about the game. (details)

Frame rate and frame generation

  • One inflated number is never shown. When frame generation is measured, the page shows the game's own frames and the displayed frames together (62 β†’ 118 FPS (Γ—1.9 FG)). When it cannot be measured, the page shows Presented FPS with a sentence saying whether generated frames could be included.
  • Frame generation done by the driver outside the game (AMD Fluid Motion Frames, NVIDIA Smooth Motion) is not visible to FrameLedger; the rates shown are what the game presented.
  • Frame generation is counted on Direct3D games only. DLSS Frame Generation and FSR frame generation are named from the calls the game makes; any other generator is shown only as active, never named, and where the generated frames cannot be counted the page shows Presented FPS with a note instead of a factor.
  • A session whose frame generation changed (menus, loading, a settings change) shows the factor of the state it spent most of its time in, with the share of the session it covers β€” never an average of the two. (Metrics)
  • Time below 30, 60 FPS and below the refresh rate (since 0.1.0-beta.14) leaves out the small wobble of a game held at its limit: a frame counts as below 60 when it took 10 % longer than 1/60 s, or when the frames around it ran 2 % slower. So a game running steadily just under the line β€” 59 FPS against 60 β€” reads partly as at it. Time below the refresh rate needs the monitor's rate, which a session saved after a crash does not have.
  • VSync and tearing (since 0.1.0-beta.14) are what the game asked for on each frame; the graphics driver or a variable-refresh display can override it, and FrameLedger cannot see which won. OpenGL and Vulkan games do not say, and read N/A. (Metrics)

Upscaling and ray tracing

  • The render scale chart (since 0.1.0-beta.14) is drawn only where the render resolution was measured β€” the same games as Render β†’ output resolution in the accuracy statement; elsewhere it says it was not measured.
  • The upscaler is read from the game's calls: DLSS and NIS through NVIDIA Streamline, and FSR through AMD's FidelityFX libraries. Intel XeSS is not read (its licence forbids it), FSR 2 and upscalers built into the game are not identified, and Vulkan and OpenGL games read N/A. Where no hook saw DLSS but the NVIDIA driver reports it, the page says it is the driver's report.
  • The quality preset (Quality, Balanced, …) has not been reported on any game yet, and the render resolution is N/A where the game's own calls do not carry it (DLSS without Streamline, for one).
  • Ray tracing is Yes, No or N/A β€” measured from the game's ray-tracing calls on Direct3D 12, and N/A where FrameLedger could not look. Path tracing is never stated as a fact: there is no API signal for it. You can correct any of these by hand, and your correction is labelled as yours.
  • HDR output, NVIDIA Reflex latency, the video-memory budget Windows gives a game, and shader-compilation stutter are not measured yet β€” they read N/A. (Accuracy)

The game's memory

  • What is shown is what Task Manager's Details tab shows for the game's process β€” Dedicated GPU memory, Shared GPU memory and Memory (the private working set) β€” read from Windows once a second, from outside the game. FrameLedger never looks inside the game's memory to get it.
  • One process. A measured game is its own process; for a game that is not measured, every process running the game's executable is added together. Launchers, crash reporters and other helper programs are not counted.
  • The private working set needs a recent Windows: Windows 10 22H2 or Windows 11 with the September 2023 update or later. Without it the working set is shown instead, labelled as such.
  • A game that has not created anything on the graphics card yet (its first second, a launcher screen) reads N/A for video memory. AMD and Intel graphics cards have not been tested. (Metrics)

Display mode (full-screen, borderless, windowed)

  • Exclusive full-screen is known only for a measured Direct3D (DXGI) game β€” the game's own swap chain says so. For OpenGL, Vulkan and unmeasured games, a window covering the screen reads Fullscreen or borderless, never either one.
  • What Windows does behind the game is not visible: a game in exclusive full-screen may still be shown through Windows' compositor ("fullscreen optimizations"), and a game's menu may call a borderless window "Fullscreen". FrameLedger reports what the game asked for.
  • The mode is sampled ten times a second in a measured session and once a second in an unmeasured one; very short switches can be missed. A session recovered after a crash, and every session recorded before beta.10, read N/A. (Display mode)

Engine version

  • The exact version is read for Unreal Engine 4 and 5 games, from the game's executable file on disk. A studio can remove or rename what it is read from; then the page says the version was not found. Unreal Engine 3 and older are not recognised.
  • Since beta.19 also Unity, Godot and RPG Maker (MV, MZ, XP, VX, VX Ace): from the engine's own files β€” Unity's player library or data file, Godot's data pack, RPG Maker's core script or the runtime library its Game.ini names. A Unity game whose data file is encrypted shows the version without its release letter (2019.4.40, not 2019.4.40f1); an XP, VX or VX Ace game shows its runtime library's number, which is not the editor's. RPG Maker 2000 and 2003 are not recognised.
  • Since beta.20 also Ren'Py: from the engine's own version file (renpy/vc_version.py); a Ren'Py game whose engine names no version there shows none. Other engines show a version only where their files state one. (Detection)

Sensors

  • GPU temperature, load, power and memory are best supported on NVIDIA GPUs. AMD and Intel GPUs have not been tested on real hardware yet.
  • On a PC with more than one graphics card, the GPU figures follow the card the game draws on once a Direct3D game has shown its first frame; before that, in an unmeasured session, and for OpenGL or Vulkan games they describe the first card Windows lists, and with two cards of one brand the temperature and load come from that brand's first card. The session's hardware details always name the first card. None of this has been tested on a machine with two cards. (Telemetry)
  • CPU temperature needs Run the agent as administrator and the separately installed PawnIO driver, and has not been verified on real hardware yet. CPU load is the time the processor was busy β€” not Task Manager's "utility" figure, which can exceed 100%. (Telemetry)
  • Whether the graphics card was held back by its power limit or by heat (since 0.1.0-beta.14) is known only on NVIDIA cards, and only as it was at each once-a-second reading. On other cards it reads N/A.
  • Frames per watt (since 0.1.0-beta.14) counts the game's own frames β€” never generated ones β€” against the graphics card's power alone, not the processor's or the whole PC's. It reads N/A where the game's own frame rate is not known. (Metrics)

Running the agent as administrator

Off by default. When on, Windows asks every time the agent starts and names an unknown publisher, because FrameLedger is not signed. It lets FrameLedger open games that run as administrator and read the CPU temperature; it does not bypass anti-cheat, does not open protected processes, and does not make games you start from FrameLedger run as administrator. The risk: FrameLedger is installed in your user folder, so a program running under your account could replace its files and would then run as administrator the next time you accept the prompt. Turn it on only if you trust everything that runs under your account. (Architecture, ADR-9)

Platform and what has been tested

  • Windows 10 22H2 or Windows 11, 64-bit only.
  • The games FrameLedger has actually been run with, and what was measured on each, are listed in LIST_GAME_TESTED.md. Everything was measured on one machine (an NVIDIA GeForce RTX 5080 with an Intel Core i7-14700KF on Windows 11); other hardware is untested.
  • One real Vulkan game has been measured (Everhex Demo, 2026-10-13) and no OpenGL game, beyond FrameLedger's own test program.
  • There is no in-game overlay; everything is shown in the FrameLedger window.
  • FrameLedger does not tell whether a game is safe to run. It reads a game's files to find its engine and its anti-cheat, never to judge it, and recording or measuring a game vouches for nothing. Four itch.io downloads this project once used as examples turned out to carry malware (details).

Play

  • Through GOG GALAXY or itch, you finish in their app. GOG GALAXY runs the game as its own shortcuts do, and the itch app asks which copy to launch. The Epic Games Launcher's link is the one its own shortcuts carry, and has not been tried on a real Epic game yet.
  • FrameLedger never starts a game as administrator. Start directly does not start a game that asks for it β€” start that one from its store or its own shortcut β€” nor a game whose recording is off: FrameLedger starts only what it records. While FrameLedger itself runs as administrator, Play starts every game directly, with your standard rights.

Game artwork

  • Only the Steam and GOG GALAXY apps keep pictures FrameLedger can show (since 0.1.0-beta.23). A game's page shows the cover and banner those apps keep on your PC for a game they installed, read where they keep them β€” nothing is downloaded or copied. A game from itch, the Epic Games Launcher or another store, or one whose .exe is outside a store's own folder, shows a picture only once you choose one (Edit… β–Έ Choose image…). A GOG picture needs Windows' WebP support, which Windows 11 and most Windows 10 installs have. (Game page)
  • The pictures belong to the games' owners; FrameLedger ships none (names and trademarks).

Your data

  • Everything stays on your computer (%LOCALAPPDATA%\FrameLedger). FrameLedger sends no telemetry; its only network requests are the update check and the update download, both to GitHub, and the check can be switched off. The anti-cheat list and the detection rules ship with each version β€” a newer list reaches you only with the next update. (Privacy policy)
  • Per-frame data is kept for the last 20 sessions of each game (configurable); older sessions keep their summaries.
  • A newer version upgrades the database in place, and an older version cannot open it again β€” there is no downgrade.

Installation

FrameLedger's programs are not code-signed: Windows SmartScreen may warn when you install it, and the administrator prompt names an unknown publisher. Each release publishes SHA-256 checksums you can compare.

An update waits while a game FrameLedger measured is still running. The part of FrameLedger loaded into a game stays loaded until the game exits, and Windows will not let the update replace it; Restart to update says which file is held until you close that game (details). Copies older than 0.1.0-beta.14 look only for stable releases unless you choose Beta in Settings β–Έ Updates, and apply a downloaded update the next time they start.