1.1 --- a/test/snake.c Thu Mar 28 23:30:21 2024 +0100 1.2 +++ b/test/snake.c Fri Mar 29 00:03:25 2024 +0100 1.3 @@ -29,18 +29,17 @@ 1.4 #include <cx/printf.h> 1.5 1.6 static void update_fps_counter(AscSceneNode *node) { 1.7 - // addition and multiplication is more efficient testing for zero 1.8 - // at an unnoticeable cost of imprecision 1.9 - static unsigned last_fps = 0u; 1.10 - static unsigned debounce = 999u; 1.11 - unsigned fps = 1000u; 1.12 - debounce += asc_context.elapsed_millis; 1.13 - if (debounce >= 1000u) { 1.14 + static uint64_t last_fps = 0; 1.15 + static uint64_t debounce = ASC_NANOS_SECOND - 1; 1.16 + debounce += asc_context.frame_nanos; 1.17 + // only update text every seconds 1.18 + if (debounce >= ASC_NANOS_SECOND) { 1.19 debounce = 0; 1.20 - fps /= asc_context.elapsed_millis; 1.21 + uint64_t fps = ASC_NANOS_SECOND; 1.22 + fps /= asc_context.frame_nanos; 1.23 if (fps != last_fps) { 1.24 last_fps = fps; 1.25 - snprintf(asc_text_data(node)->text, 9, "%u FPS", fps); 1.26 + snprintf(asc_text_data(node)->text, 11, "%"PRIu64" FPS", fps); 1.27 asc_node_update(node); 1.28 } 1.29 } 1.30 @@ -49,7 +48,7 @@ 1.31 static void create_fps_counter(void) { 1.32 asc_set_font(asc_font(ASC_FONT_REGULAR, 24)); 1.33 asc_ink_rgb(255, 0, 0); 1.34 - AscSceneNode* node = asc_text(10, 10, "XXXXX FPS"); 1.35 + AscSceneNode* node = asc_text(10, 10, "XXXXXXX FPS"); 1.36 asc_scene_add_behavior(node, update_fps_counter); 1.37 asc_scene_add(&asc_window_active->ui, node); 1.38 }