From 24b8124469350d1c80d0553cf3f4bf58cdb1489b Mon Sep 17 00:00:00 2001 From: Mel Date: Sat, 1 Jul 2023 22:06:37 +0200 Subject: Add chunk generation time statistics --- src/World/World.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'src/World/World.cpp') diff --git a/src/World/World.cpp b/src/World/World.cpp index af70766..289d86b 100644 --- a/src/World/World.cpp +++ b/src/World/World.cpp @@ -76,16 +76,20 @@ std::unordered_set World::load_finished_chunks_from_queue() { std::unordered_set indices; auto results = m_queue.done(); for (auto& [id, res] : results) { - get(id) = {id, ChunkStatus::NeedsMesh, {res}}; + get(id) = {id, ChunkStatus::NeedsMesh, {res.chunk}}; indices.insert(id); + + log_chunk_time(res.generation_duration); } return indices; } void World::request_generation(ChunkIndex index, float priority) { - m_queue.add(index, priority, [=]() { - return m_generator.generate(index.x, index.y); + m_queue.add(index, priority, [=]() -> GenerationResult { + auto start = timestamp(); + auto chunk = m_generator.generate(index.x, index.y); + return {chunk, timestamp() - start}; }); } @@ -101,14 +105,13 @@ World::ChunkData& World::get(ChunkIndex index) { return entry->second; } -void World::try_to_create_mesh_for_chunk(World::ChunkData& data) { -// Chunk empty{0, 0}; -// data.mesh_data = ChunkMeshing::create_mesh_for_chunk(data.chunk.value(), { -// empty, empty, empty, empty, -// }); -// data.mesh = GFX::Binder::load(data.mesh_data.value()); -// data.status = ChunkStatus::Done; +uint64_t World::timestamp() { + auto time = std::chrono::system_clock::now().time_since_epoch(); + auto ms = std::chrono::duration_cast(time); + return ms.count(); +} +void World::try_to_create_mesh_for_chunk(ChunkData& data) { auto index = data.index; auto north = get({index.x, index.y - 1}); @@ -132,4 +135,13 @@ void World::try_to_create_mesh_for_chunk(World::ChunkData& data) { data.status = ChunkStatus::Done; } -} \ No newline at end of file +void World::log_chunk_time(uint64_t chunk_time_ms) { + m_statistics.chunk_time_sample_count++; + m_statistics.average_chunk_time_ms += ((float)chunk_time_ms - m_statistics.average_chunk_time_ms) / m_statistics.chunk_time_sample_count; +} + +float World::get_average_chunk_time() { + return m_statistics.average_chunk_time_ms; +} + +} -- cgit 1.4.1