/** * FPS counter * * License: * This Source Code Form is subject to the terms of * the Mozilla Public License, v. 2.0. If a copy of * the MPL was not distributed with this file, You * can obtain one at http://mozilla.org/MPL/2.0/. * * Authors: * Vladimir Panteleev <ae@cy.md> */ module ae.utils.fps; import std.datetime; import std.string; /// FPS counter. Calls a user-supplied delegate with a formatted string. struct FPSCounter { /// Update. Once a second, calls `setter` with a string containing /// the number of `tick` calls during the last second. void tick(void delegate(string) setter) { auto thisSecond = Clock.currTime().second; if (thisSecond != lastSecond) { setter(format("%03d (%d us)", frames, frames?1_000_000/frames:0)); frames = 0; lastSecond = thisSecond; } frames++; } private: uint frames, lastSecond; }