This documents an old version of bs::framework. Click here to see the latest release.
Measuring time

Being able to tell the current time, as well as being able to tell elapsed time since the last frame is important for any real-time application. Use the Time class, accessible through gTime() to retrieve global information about the time in bs::f.

Current time

Use Time::getTime() to get the current time (since application start) in seconds.

float curTime = gTime().getTime();
gDebug().logDebug("Application was started " + toString(curTime) + " seconds ago.");

It's important to note this value is only updated once per frame (i.e. it stays constant throughout a frame). If you need more precise time that can be used for inter-frame measurements, use Time::getTimePrecise(), which returns the current time in microseconds.

UINT64 preciseTimeStart = gTime().getTimePrecise();
UINT64 counter = 0;
for(int i = 0; i < 1000000; i++)
counter += i % 10;
UINT64 preciseTimeEnd = gTime().getTimePrecise();
UINT64 timeElapsed = preciseTimeEnd - preciseTimeStart;
float secondsElapsed = timeElapsed * Time::MICROSEC_TO_SEC;
gDebug().logDebug("Operation took " + toString(secondsElapsed) + " seconds.");

Time::MICROSEC_TO_SEC is a constant to convert between microseconds and seconds.

You should use Time::getTime() for most gameplay purposes, while Time::getTimePrecise() can be used for profiling and other similar situations.

Elapsed time

Often it is useful to know know how much has passed since the last frame. Use Time::getFrameDelta() to get the elapsed time from the previous frame.

float elapsedTime = gTime().getFrameDelta();
gDebug().logDebug("Last frame was " + toString(elapsedTime) + " seconds ago.");

Frame index

Sometimes, often for debugging purposes, it is useful to know the index of the current frame. Use Time::getFrameIdx(). Each frame the index gets incremented by one.

UINT64 frameIdx = gTime().getFrameIdx();
gDebug().logDebug("This is frame #" + toString(frameIdx));

Intervals

Sometimes it is useful to measure a time interval, like we did with Time::getTimePrecise() with the example above. You can also use the Timer class for the same purpose, but with a slightly simpler interface.

Timer timer; // Starts counting
UINT64 counter = 0;
for(int i = 0; i < 1000000; i++)
counter += i % 10;
float secondsElapsed = timer.getMicroseconds() * Time::MICROSEC_TO_SEC;
gDebug().logDebug("Operation took " + toString(secondsElapsed) + " seconds.");

Timer starts counting as soon as its constructed, and you can use Timer::getMicroseconds() to retrieve the time elapsed.

Optionally you can also reset the timer by calling Timer::reset(). This will set the time elapsed to 0, and any elapsed time will be reported from the last reset call.