Track actual work time separately from frame time to determine system load percentage: - work_time_ms: Time spent doing actual work before display() - sleep_time = frame_time_ms - work_time_ms This allows calculating load percentage: load% = (work_time / frame_time) * 100 Example at 60fps with light load: - frame_time: 16.67ms, work_time: 2ms - load: 12%, sleep: 14.67ms 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
1.3 KiB
C++
38 lines
1.3 KiB
C++
#include "BenchmarkLogger.h"
|
|
#include "GameEngine.h"
|
|
|
|
// Global benchmark logger instance
|
|
BenchmarkLogger g_benchmarkLogger;
|
|
|
|
void BenchmarkLogger::recordFrame(const ProfilingMetrics& metrics) {
|
|
if (!running) return;
|
|
|
|
auto now = std::chrono::high_resolution_clock::now();
|
|
double timestamp_ms = std::chrono::duration<double, std::milli>(now - start_time).count();
|
|
|
|
BenchmarkFrame frame;
|
|
frame.frame_number = ++frame_counter;
|
|
frame.timestamp_ms = timestamp_ms;
|
|
frame.frame_time_ms = metrics.frameTime;
|
|
frame.fps = metrics.fps;
|
|
|
|
frame.work_time_ms = metrics.workTime;
|
|
frame.grid_render_ms = metrics.gridRenderTime;
|
|
frame.entity_render_ms = metrics.entityRenderTime;
|
|
frame.python_time_ms = metrics.pythonScriptTime;
|
|
frame.animation_time_ms = metrics.animationTime;
|
|
frame.fov_overlay_ms = metrics.fovOverlayTime;
|
|
|
|
frame.draw_calls = metrics.drawCalls;
|
|
frame.ui_elements = metrics.uiElements;
|
|
frame.visible_elements = metrics.visibleElements;
|
|
frame.grid_cells_rendered = metrics.gridCellsRendered;
|
|
frame.entities_rendered = metrics.entitiesRendered;
|
|
frame.total_entities = metrics.totalEntities;
|
|
|
|
// Move pending logs to this frame
|
|
frame.logs = std::move(pending_logs);
|
|
pending_logs.clear();
|
|
|
|
frames.push_back(std::move(frame));
|
|
}
|