more startup profiling, removal of irrelevant calls and zeroing in textures_cache_init()

This commit is contained in:
veclavtalica 2025-01-15 05:39:18 +03:00
parent 0da1e413aa
commit f0dfd5627a
2 changed files with 21 additions and 17 deletions

View File

@ -341,20 +341,22 @@ ERR_PACK_MANIFEST_PATH_ALLOC_FAIL:
static bool initialize(void) { static bool initialize(void) {
profile_start("SDL initialization");
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_EVENTS) == -1) { if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_EVENTS) == -1) {
CRY_SDL("SDL initialization failed."); CRY_SDL("SDL initialization failed.");
return false; return false;
} }
profile_end("SDL initialization");
/* first things first, most things here will be loaded from the config file */ /* first things first, most things here will be loaded from the config file */
/* it's expected to be present in the data directory, no matter what */ /* it's expected to be present in the data directory, no matter what */
/* that is why PhysicsFS is initialized before anything else */ /* that is why PhysicsFS is initialized before anything else */
toml_set_memutil(SDL_malloc, SDL_free); toml_set_memutil(SDL_malloc, SDL_free);
profile_start("resolve_pack_dependencies()"); profile_start("pack dependency resolution");
/* time to orderly resolve any dependencies present */ /* time to orderly resolve any dependencies present */
resolve_pack_dependencies("data"); resolve_pack_dependencies("data");
profile_end("resolve_pack_dependencies()"); profile_end("pack dependency resolution");
/* load the config file into an opaque table */ /* load the config file into an opaque table */
{ {
@ -481,6 +483,7 @@ static bool initialize(void) {
ctx.game.resolution.x = (float)ctx.base_render_width; ctx.game.resolution.x = (float)ctx.base_render_width;
ctx.game.resolution.y = (float)ctx.base_render_height; ctx.game.resolution.y = (float)ctx.base_render_height;
profile_start("window creation");
ctx.window = SDL_CreateWindow(datum_title.u.s, ctx.window = SDL_CreateWindow(datum_title.u.s,
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
@ -489,6 +492,7 @@ static bool initialize(void) {
//SDL_WINDOW_ALLOW_HIGHDPI | //SDL_WINDOW_ALLOW_HIGHDPI |
SDL_WINDOW_RESIZABLE | SDL_WINDOW_RESIZABLE |
SDL_WINDOW_OPENGL); SDL_WINDOW_OPENGL);
profile_end("window creation");
if (datum_title.ok) if (datum_title.ok)
SDL_free(datum_title.u.s); SDL_free(datum_title.u.s);
@ -501,6 +505,7 @@ static bool initialize(void) {
goto fail; goto fail;
} }
profile_start("opengl context creation");
ctx.gl_context = SDL_GL_CreateContext(ctx.window); ctx.gl_context = SDL_GL_CreateContext(ctx.window);
if (!ctx.gl_context) { if (!ctx.gl_context) {
CRY_SDL("GL context creation failed."); CRY_SDL("GL context creation failed.");
@ -518,11 +523,12 @@ static bool initialize(void) {
if (!render_init()) if (!render_init())
goto fail; goto fail;
setup_viewport(0, 0, (int)ctx.base_render_width, (int)ctx.base_render_height);
profile_end("opengl context creation");
/* might need this to have multiple windows */ /* might need this to have multiple windows */
ctx.window_id = SDL_GetWindowID(ctx.window); ctx.window_id = SDL_GetWindowID(ctx.window);
setup_viewport(0, 0, (int)ctx.base_render_width, (int)ctx.base_render_height);
/* TODO: */ /* TODO: */
// SDL_GetRendererOutputSize(ctx.renderer, &ctx.window_w, &ctx.window_h); // SDL_GetRendererOutputSize(ctx.renderer, &ctx.window_w, &ctx.window_h);
ctx.window_dims.x = (float)ctx.base_render_width; ctx.window_dims.x = (float)ctx.base_render_width;
@ -534,6 +540,10 @@ static bool initialize(void) {
/* audio initialization */ /* audio initialization */
{ {
/* TODO: try to delay it until actually used? */
/* quite a lot of programs might start with silence of resource loading of initial frame */
profile_start("audio initialization");
SDL_AudioSpec request, got; SDL_AudioSpec request, got;
SDL_zero(request); SDL_zero(request);
@ -555,6 +565,8 @@ static bool initialize(void) {
SDL_PauseAudioDevice(ctx.audio_device, 0); SDL_PauseAudioDevice(ctx.audio_device, 0);
profile_end("audio initialization");
} }
/* random seeding */ /* random seeding */
@ -645,8 +657,10 @@ static bool initialize(void) {
ctx.render_queue_2d = NULL; ctx.render_queue_2d = NULL;
ctx.uncolored_mesh_batches = NULL; ctx.uncolored_mesh_batches = NULL;
profile_start("texture and text cache initialization");
textures_cache_init(&ctx.texture_cache, ctx.window); textures_cache_init(&ctx.texture_cache, ctx.window);
text_cache_init(&ctx.text_cache); text_cache_init(&ctx.text_cache);
profile_end("texture and text cache initialization");
/* input */ /* input */
toml_datum_t datum_keybind_slots = toml_int_in(engine, "keybind_slots"); toml_datum_t datum_keybind_slots = toml_int_in(engine, "keybind_slots");
@ -661,13 +675,6 @@ static bool initialize(void) {
} }
input_state_init(&ctx.input); input_state_init(&ctx.input);
/* scripting */
/*
if (!scripting_init(ctx)) {
goto fail;
}
*/
ctx.render_double_buffered = true; ctx.render_double_buffered = true;
ctx.window_mouse_resident = true; ctx.window_mouse_resident = true;
@ -684,10 +691,6 @@ fail:
/* will not be called on an abnormal exit */ /* will not be called on an abnormal exit */
static void clean_up(void) { static void clean_up(void) {
/*
scripting_deinit(ctx);
*/
input_state_deinit(&ctx.input); input_state_deinit(&ctx.input);
text_cache_deinit(&ctx.text_cache); text_cache_deinit(&ctx.text_cache);
textures_cache_deinit(&ctx.texture_cache); textures_cache_deinit(&ctx.texture_cache);
@ -791,8 +794,10 @@ int enter_loop(int argc, char **argv) {
update_viewport(); update_viewport();
profile_start("game object load");
/* now we can actually start doing stuff */ /* now we can actually start doing stuff */
game_object_load(); game_object_load();
profile_end("game object load");
ctx.was_successful = true; ctx.was_successful = true;
ctx.game.initialization_needed = true; ctx.game.initialization_needed = true;

View File

@ -307,10 +307,9 @@ void textures_cache_init(TextureCache *cache, SDL_Window *window) {
cache->window = window; cache->window = window;
sh_new_arena(cache->hash); sh_new_arena(cache->hash);
cache->node_buffer = SDL_calloc(ctx.texture_atlas_size, sizeof *cache->node_buffer); cache->node_buffer = SDL_malloc(ctx.texture_atlas_size * sizeof *cache->node_buffer);
add_new_atlas(cache); add_new_atlas(cache);
recreate_current_atlas_texture(cache);
} }