Closed afonsolage closed 2 years ago
Existing cache with chunk size: 16^3
update_landscape_system avg: 8393μs, samples: 17, min: 7265μs, max: 12294μs, meta: 3μs
faces_merging avg: 4741μs, samples: 2144, min: 1884μs, max: 13358μs, meta: 0μs
generate_vertices avg: 3477μs, samples: 8192, min: 360μs, max: 19108μs, meta: 1μs
process_batch avg: 2837μs, samples: 4096, min: 2600μs, max: 10218μs, meta: 175μs
load_chunk avg: 2831μs, samples: 4096, min: 2595μs, max: 10205μs, meta: 0μs
load_cache avg: 2805μs, samples: 4096, min: 2578μs, max: 4362μs, meta: 0μs
faces_occlusion avg: 2178μs, samples: 8192, min: 301μs, max: 6959μs, meta: 0μs
update_chunk avg: 172μs, samples: 4096, min: 91μs, max: 346μs, meta: 0μs
vertices_computation avg: 16μs, samples: 2144, min: 1μs, max: 133μs, meta: 0μs
merge_faces avg: 11μs, samples: 61957, min: 1μs, max: 526μs, meta: 152μs
spawn_chunks_system avg: 10μs, samples: 229, min: 1μs, max: 944μs, meta: 12μs
update_world_system avg: 3μs, samples: 744, min: 1μs, max: 544μs, meta: 1μs
update_chunks_system avg: 1μs, samples: 23, min: 1μs, max: 7μs, meta: 72μs
No cache with chunk size 16^3
update_landscape_system avg: 9837μs, samples: 16, min: 7257μs, max: 12719μs, meta: 3μs
process_batch avg: 6014μs, samples: 4096, min: 5527μs, max: 14043μs, meta: 179μs
load_chunk avg: 6006μs, samples: 4096, min: 5520μs, max: 14020μs, meta: 0μs
generate_cache avg: 5970μs, samples: 4096, min: 5497μs, max: 9382μs, meta: 0μs
save_cache avg: 5751μs, samples: 4096, min: 5393μs, max: 9273μs, meta: 0μs
faces_merging avg: 4972μs, samples: 2144, min: 1849μs, max: 12940μs, meta: 0μs
generate_vertices avg: 3642μs, samples: 8192, min: 359μs, max: 18732μs, meta: 2μs
faces_occlusion avg: 2279μs, samples: 8192, min: 300μs, max: 6922μs, meta: 0μs
update_chunk avg: 176μs, samples: 4097, min: 5μs, max: 356μs, meta: 0μs
vertices_computation avg: 17μs, samples: 2144, min: 1μs, max: 190μs, meta: 0μs
merge_faces avg: 12μs, samples: 63031, min: 1μs, max: 610μs, meta: 156μs
spawn_chunks_system avg: 9μs, samples: 237, min: 1μs, max: 816μs, meta: 12μs
update_world_system avg: 3μs, samples: 1527, min: 1μs, max: 561μs, meta: 1μs
update_chunks_system avg: 1μs, samples: 24, min: 1μs, max: 6μs, meta: 74μs```
Existing cache with chunk size 16x16x128:
generate_vertices avg: 36803μs, samples: 768, min: 17591μs, max: 72158μs, meta: 12μs
faces_merging avg: 21664μs, samples: 963, min: 13169μs, max: 48451μs, meta: 0μs
process_batch avg: 21291μs, samples: 512, min: 20568μs, max: 25490μs, meta: 867μs
load_chunk avg: 21281μs, samples: 512, min: 20560μs, max: 25478μs, meta: 0μs
load_cache avg: 21212μs, samples: 512, min: 20519μs, max: 24404μs, meta: 0μs
faces_occlusion avg: 14884μs, samples: 963, min: 4065μs, max: 29692μs, meta: 0μs
update_landscape_system avg: 1314μs, samples: 16, min: 895μs, max: 3540μs, meta: 3μs
update_chunk avg: 861μs, samples: 513, min: 1μs, max: 1407μs, meta: 0μs
vertices_computation avg: 31μs, samples: 963, min: 2μs, max: 179μs, meta: 0μs
merge_faces avg: 12μs, samples: 55488, min: 1μs, max: 2952μs, meta: 363μs
spawn_chunks_system avg: 10μs, samples: 22, min: 1μs, max: 97μs, meta: 16μs
update_world_system avg: 3μs, samples: 683, min: 1μs, max: 79μs, meta: 2μs
update_chunks_system avg: 1μs, samples: 1, min: 1μs, max: 1μs, meta: 206μs
No cache with chunk size 16x16x128
process_batch avg: 51617μs, samples: 512, min: 48691μs, max: 60692μs, meta: 882μs
load_chunk avg: 51606μs, samples: 512, min: 48682μs, max: 60681μs, meta: 0μs
generate_cache avg: 51534μs, samples: 512, min: 48631μs, max: 60624μs, meta: 0μs
save_cache avg: 50012μs, samples: 512, min: 47893μs, max: 58717μs, meta: 0μs
generate_vertices avg: 37717μs, samples: 768, min: 17970μs, max: 74091μs, meta: 13μs
faces_merging avg: 22191μs, samples: 974, min: 13033μs, max: 49290μs, meta: 0μs
faces_occlusion avg: 15300μs, samples: 974, min: 4236μs, max: 39427μs, meta: 0μs
update_landscape_system avg: 1302μs, samples: 15, min: 936μs, max: 1941μs, meta: 3μs
update_chunk avg: 876μs, samples: 513, min: 13μs, max: 1407μs, meta: 0μs
vertices_computation avg: 33μs, samples: 974, min: 2μs, max: 187μs, meta: 0μs
spawn_chunks_system avg: 12μs, samples: 27, min: 1μs, max: 97μs, meta: 13μs
merge_faces avg: 12μs, samples: 57171, min: 1μs, max: 3374μs, meta: 365μs
update_world_system avg: 2μs, samples: 1620, min: 1μs, max: 102μs, meta: 2μs
update_chunks_system avg: 1μs, samples: 1, min: 1μs, max: 1μs, meta: 318μs
Even tho I was unable to see a performance gain, need to do better benchmarking, the PR is still relevant, since it's easier now to switch between chunk axis sizes.
I've made an optimization on chunk cmd queue to remove conflicting commands, based on the following rules:
1. Skips any duplicated commands (*Load* -> *Load*, *Update* -> *Update*, *Unload* -> *Unload*).
2. Skips *Load* and remove existing *Unload* cmd when chunk exists already.
3. Skips *Unload* and remove existing *Load* cmd when chunk doesn't exists already.
4. Skips *Unload* when chunk doesn't exists already.
5. Skips *Load* when chunk exists already.
6. Skips *Update* if the chunk doesn't exists already.
7. Replaces *Update* by *Unload* if the chunk exists already.
8. Replaces *Update* by *Load* if the chunk doesn't exists already. [Removed]
9. Skips *Update* if there is an *Unload* cmd already.
Rule 8 was removed, since it's unnecessary due to Rule 6, but I kept it just to track
I need to do some tests and finish this PR, since it's going out of scope now :sweat_smile:
Closes #10