summary refs log tree commit diff
path: root/src/World/World.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/World/World.hpp')
-rw-r--r--src/World/World.hpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/World/World.hpp b/src/World/World.hpp
index 03ed517..e6b3cd2 100644
--- a/src/World/World.hpp
+++ b/src/World/World.hpp
@@ -31,23 +31,38 @@ public:
 
     std::vector<ChunkData*> get_visible_chunks(Vector<3> position);
     Chunk* get_chunk_for_position(Vector<3> position);
+
+    float get_average_chunk_time();
 private:
     std::unordered_set<ChunkIndex> get_visible_chunk_indices(Vector<3> position) const;
     std::unordered_set<ChunkIndex> load_finished_chunks_from_queue();
     void process_chunk_visibility_updates(std::unordered_set<ChunkIndex>& new_chunks, Vector<3> player);
     void request_generation(ChunkIndex index, float priority);
+    void try_to_create_mesh_for_chunk(ChunkData& data);
+
+    void log_chunk_time(uint64_t chunk_time_ms);
 
     ChunkData& get(ChunkIndex index);
 
+    static uint64_t timestamp();
+
     uint8_t m_view_distance_radius = 13;
 
-    Compute::Queue<Chunk, ChunkIndex> m_queue;
+    struct GenerationResult {
+        Chunk chunk;
+        uint64_t generation_duration;
+    };
+    Compute::Queue<GenerationResult, ChunkIndex> m_queue;
     Generator m_generator;
 
     std::unordered_map<ChunkIndex, ChunkData> m_chunks;
     std::unordered_set<ChunkIndex> m_visible_chunks;
 
-    void try_to_create_mesh_for_chunk(ChunkData& data);
+    struct Statistics {
+        uint chunk_time_sample_count;
+        float average_chunk_time_ms;
+    };
+    Statistics m_statistics{0, 0.0f};
 };
 
 }