From d9a2e3435723218c3d047cd220f8fe54d8065653 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 25 Jun 2021 20:58:05 +0200 Subject: [PATCH] Print time taken and request attention when lightmaps are done baking Since lightmap baking can take a very long time, printing the time spent can be useful for users tweaking the lightmap settings to optimize bake times. Completing lightmap baking will also request attention, which is useful if you're doing something else while waiting for lightmaps to bake. --- editor/plugins/baked_lightmap_editor_plugin.cpp | 12 ++++++++++-- editor/plugins/baked_lightmap_editor_plugin.h | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/editor/plugins/baked_lightmap_editor_plugin.cpp b/editor/plugins/baked_lightmap_editor_plugin.cpp index 73ecf712d80..262524d73e0 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.cpp +++ b/editor/plugins/baked_lightmap_editor_plugin.cpp @@ -33,13 +33,14 @@ void BakedLightmapEditorPlugin::_bake_select_file(const String &p_file) { if (lightmap) { BakedLightmap::BakeError err; + uint32_t time_started = OS::get_singleton()->get_ticks_msec(); if (get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root() == lightmap) { err = lightmap->bake(lightmap, p_file); } else { err = lightmap->bake(lightmap->get_parent(), p_file); } - bake_func_end(); + bake_func_end(time_started); switch (err) { case BakedLightmap::BAKE_ERROR_NO_SAVE_PATH: { @@ -122,7 +123,7 @@ bool BakedLightmapEditorPlugin::bake_func_substep(float p_progress, const String return tmp_subprogress->step(p_description, p_progress * 1000, p_force_refresh); } -void BakedLightmapEditorPlugin::bake_func_end() { +void BakedLightmapEditorPlugin::bake_func_end(uint32_t p_time_started) { if (tmp_progress != nullptr) { memdelete(tmp_progress); tmp_progress = nullptr; @@ -132,6 +133,13 @@ void BakedLightmapEditorPlugin::bake_func_end() { memdelete(tmp_subprogress); tmp_subprogress = nullptr; } + + const int time_taken = (OS::get_singleton()->get_ticks_msec() - p_time_started) * 0.001; + print_line(vformat("Done baking lightmaps in %02d:%02d:%02d.", time_taken / 3600, (time_taken % 3600) / 60, time_taken % 60)); + // Request attention in case the user was doing something else. + // Baking lightmaps is likely the editor task that can take the most time, + // so only request the attention for baking lightmaps. + OS::get_singleton()->request_attention(); } void BakedLightmapEditorPlugin::_bind_methods() { diff --git a/editor/plugins/baked_lightmap_editor_plugin.h b/editor/plugins/baked_lightmap_editor_plugin.h index 6b209efb228..327f9f3c76f 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.h +++ b/editor/plugins/baked_lightmap_editor_plugin.h @@ -50,7 +50,7 @@ class BakedLightmapEditorPlugin : public EditorPlugin { static bool bake_func_step(float p_progress, const String &p_description, void *, bool p_force_refresh); static bool bake_func_substep(float p_progress, const String &p_description, void *, bool p_force_refresh); - static void bake_func_end(); + static void bake_func_end(uint32_t p_time_started); void _bake_select_file(const String &p_file); void _bake();