mirror of https://github.com/stella-emu/stella.git
Ups, add missing file.
This commit is contained in:
parent
3a5572d3b9
commit
b612d22364
|
@ -0,0 +1,70 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony
|
||||||
|
// and the Stella Team
|
||||||
|
//
|
||||||
|
// See the file "License.txt" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#include "FpsMeter.hxx"
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
FpsMeter::FpsMeter(uInt32 queueSize)
|
||||||
|
: myQueue(queueSize)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FpsMeter::reset(uInt32 garbageFrameLimit)
|
||||||
|
{
|
||||||
|
myQueue.clear();
|
||||||
|
myQueueOffset = 0;
|
||||||
|
myFrameCount = 0;
|
||||||
|
myFps = 0;
|
||||||
|
myGarbageFrameCounter = 0;
|
||||||
|
myGarbageFrameLimit = garbageFrameLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FpsMeter::render(uInt32 frameCount)
|
||||||
|
{
|
||||||
|
if (myGarbageFrameCounter < myGarbageFrameLimit) {
|
||||||
|
myGarbageFrameCounter += frameCount;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uInt32 queueSize = myQueue.capacity();
|
||||||
|
entry first, last = (entry){.frames = frameCount, .timestamp = high_resolution_clock::now()};
|
||||||
|
|
||||||
|
if (myQueue.size() < queueSize) {
|
||||||
|
myQueue.push_back(last);
|
||||||
|
myFrameCount += frameCount;
|
||||||
|
|
||||||
|
first = myQueue.at(myQueueOffset);
|
||||||
|
} else {
|
||||||
|
myFrameCount = myFrameCount - myQueue.at(myQueueOffset).frames + frameCount;
|
||||||
|
myQueue.at(myQueueOffset) = last;
|
||||||
|
|
||||||
|
myQueueOffset = (myQueueOffset + 1) % queueSize;
|
||||||
|
first = myQueue.at(myQueueOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
float myTimeInterval =
|
||||||
|
duration_cast<duration<float>>(last.timestamp - first.timestamp).count();
|
||||||
|
|
||||||
|
if (myTimeInterval > 0) myFps = (myFrameCount - first.frames) / myTimeInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
float FpsMeter::fps() const
|
||||||
|
{
|
||||||
|
return myFps;
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony
|
||||||
|
// and the Stella Team
|
||||||
|
//
|
||||||
|
// See the file "License.txt" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#ifndef FPS_METER_HXX
|
||||||
|
#define FPS_METER_HXX
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
#include "bspf.hxx"
|
||||||
|
|
||||||
|
class FpsMeter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
FpsMeter(uInt32 queueSize);
|
||||||
|
|
||||||
|
void reset(uInt32 garbageFrameLimit = 0);
|
||||||
|
|
||||||
|
void render(uInt32 frameCount);
|
||||||
|
|
||||||
|
float fps() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
struct entry {
|
||||||
|
uInt32 frames;
|
||||||
|
std::chrono::time_point<std::chrono::high_resolution_clock> timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
vector<entry> myQueue;
|
||||||
|
|
||||||
|
uInt32 myQueueOffset;
|
||||||
|
|
||||||
|
uInt32 myFrameCount;
|
||||||
|
|
||||||
|
uInt32 myGarbageFrameCounter;
|
||||||
|
uInt32 myGarbageFrameLimit;
|
||||||
|
|
||||||
|
float myFps;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
FpsMeter(const FpsMeter&) = delete;
|
||||||
|
FpsMeter(FpsMeter&&) = delete;
|
||||||
|
FpsMeter& operator=(const FpsMeter&) = delete;
|
||||||
|
FpsMeter& operator=(FpsMeter&&) = delete;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FPS_METER_HXX
|
Loading…
Reference in New Issue