unsuccessful experimentation
This commit is contained in:
@@ -1,6 +1,60 @@
|
||||
#pragma once
|
||||
#include "bx/timer.h"
|
||||
#include <cstdint>
|
||||
|
||||
#define START_PERF() int64_t __perfStart = bx::getHPCounter();
|
||||
#define END_PERF(counters, idx, frame) counters[(int32_t)idx].Write(bx::getHPCounter() - __perfStart, frame);
|
||||
|
||||
enum class PerfCounterType
|
||||
{
|
||||
WindowEvents,
|
||||
GameDelta,
|
||||
COUNT
|
||||
};
|
||||
|
||||
struct PerfCounter
|
||||
{
|
||||
static constexpr int32_t TimeWindow = 128;
|
||||
int64_t Times[TimeWindow]{0};
|
||||
void Write(int64_t value, uint64_t frameCounter)
|
||||
{
|
||||
Times[frameCounter % TimeWindow] = value;
|
||||
}
|
||||
float GetAverage()
|
||||
{
|
||||
int64_t sum = 0;
|
||||
for (int32_t i = 0; i < TimeWindow; ++i)
|
||||
{
|
||||
sum += Times[i];
|
||||
}
|
||||
return (double)sum / bx::getHPFrequency();
|
||||
}
|
||||
float GetMin()
|
||||
{
|
||||
int64_t min = INT64_MAX;
|
||||
for (int32_t i = 0; i < TimeWindow; ++i)
|
||||
{
|
||||
if (Times[i] < min)
|
||||
{
|
||||
min = Times[i];
|
||||
}
|
||||
}
|
||||
return (double)min / bx::getHPFrequency();
|
||||
}
|
||||
float GetMax()
|
||||
{
|
||||
int64_t max = 0;
|
||||
for (int32_t i = 0; i < TimeWindow; ++i)
|
||||
{
|
||||
if (Times[i] > max)
|
||||
{
|
||||
max = Times[i];
|
||||
}
|
||||
}
|
||||
return (double)max / bx::getHPFrequency();
|
||||
}
|
||||
};
|
||||
|
||||
struct SharedWindowData
|
||||
{
|
||||
void* Handle = nullptr;
|
||||
@@ -12,6 +66,8 @@ struct SharedWindowData
|
||||
bool LastHeldMouseButtons[8]{false};
|
||||
float MouseDeltaX = 0.0f;
|
||||
float MouseDeltaY = 0.0f;
|
||||
uint64_t FrameCounter = 0;
|
||||
PerfCounter PerfCounters[(int32_t)PerfCounterType::COUNT] = {0};
|
||||
};
|
||||
|
||||
struct FileChangeNotification
|
||||
@@ -39,9 +95,9 @@ struct GameData
|
||||
|
||||
struct SharedData
|
||||
{
|
||||
GameData Game;
|
||||
SharedDevData Dev;
|
||||
SharedWindowData Window;
|
||||
GameData Game;
|
||||
};
|
||||
|
||||
typedef void (*Startup)(SharedData& shared);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "SDL3/SDL_events.h"
|
||||
#include "Shared.h"
|
||||
#include "Window.h"
|
||||
#include "bx/timer.h"
|
||||
#include <SDL3/SDL.h>
|
||||
#include <cstdio>
|
||||
|
||||
@@ -30,6 +31,7 @@ void EngineWindow::Startup(SharedWindowData& shared)
|
||||
|
||||
void EngineWindow::Update(SharedWindowData& shared)
|
||||
{
|
||||
START_PERF();
|
||||
SDL_Event evt;
|
||||
while (SDL_PollEvent(&evt))
|
||||
{
|
||||
@@ -75,6 +77,7 @@ void EngineWindow::Update(SharedWindowData& shared)
|
||||
break;
|
||||
}
|
||||
}
|
||||
END_PERF(shared.PerfCounters, PerfCounterType::WindowEvents, shared.FrameCounter);
|
||||
}
|
||||
|
||||
void EngineWindow::Shutdown()
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
class EngineWindow
|
||||
{
|
||||
public:
|
||||
SDL_Window* Window;
|
||||
bool CloseRequested = false;
|
||||
public:
|
||||
SDL_Window* Window;
|
||||
bool CloseRequested = false;
|
||||
|
||||
public:
|
||||
void Startup(SharedWindowData& Shared);
|
||||
void Update(SharedWindowData& Shared);
|
||||
void Shutdown();
|
||||
public:
|
||||
void Startup(SharedWindowData& Shared);
|
||||
void Update(SharedWindowData& Shared);
|
||||
void Shutdown();
|
||||
};
|
||||
|
||||
@@ -318,6 +318,7 @@ int main()
|
||||
}
|
||||
|
||||
UpdateFunc();
|
||||
++Shared.Window.FrameCounter;
|
||||
}
|
||||
|
||||
ShutdownFunc();
|
||||
|
||||
Reference in New Issue
Block a user