X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;ds=sidebyside;f=src%2Fapp%2FFrameCounter.hpp;h=0b7d38f7c5d9d1730ff33ea4916c44185c8bb936;hb=fb0b9b41ccd5b4738dc2ecd5a9db49aa0f291b8f;hp=069f622ce690246f5a770a75fc2f766d5d43dba4;hpb=5c295a495e02b4987b63c682406f5f29402c00da;p=blank.git diff --git a/src/app/FrameCounter.hpp b/src/app/FrameCounter.hpp index 069f622..0b7d38f 100644 --- a/src/app/FrameCounter.hpp +++ b/src/app/FrameCounter.hpp @@ -9,6 +9,19 @@ namespace blank { class FrameCounter { +public: + template + struct Frame { + T handle; + T update; + T render; + T running; + T waiting; + T total; + Frame(); + }; + + public: void EnterFrame() noexcept; void EnterHandle() noexcept; @@ -19,12 +32,8 @@ public: void ExitRender() noexcept; void ExitFrame() noexcept; - float AvgHandle() const noexcept { return avg.handle; } - float AvgUpdate() const noexcept { return avg.update; } - float AvgRender() const noexcept { return avg.render; } - float AvgFrame() const noexcept { return avg.total; } - float AvgRunning() const noexcept { return avg.handle + avg.update + avg.render; } - float AvgWaiting() const noexcept { return avg.total - AvgRunning(); } + const Frame &Peak() const noexcept { return peak; } + const Frame &Average() const noexcept { return avg; } bool Changed() const noexcept { return changed; } @@ -33,28 +42,40 @@ public: private: int Tick() noexcept; + void Accumulate() noexcept; + void Push() noexcept; + private: static constexpr int NUM_FRAMES = 32; static constexpr float factor = 1.0f / float(NUM_FRAMES); - template - struct Frame { - T handle = T(0); - T update = T(0); - T render = T(0); - T total = T(0); - }; - Uint32 last_enter = 0; Uint32 last_tick = 0; int cur_frame = 0; - Frame running = Frame{}; + Frame current = Frame{}; + Frame sum = Frame{}; + Frame max = Frame{}; + + Frame peak = Frame{}; Frame avg = Frame{}; + bool changed = false; }; + +template +FrameCounter::Frame::Frame() +: handle(0) +, update(0) +, render(0) +, running(0) +, waiting(0) +, total(0) { + +} + } #endif