1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-08 12:40:44 +00:00

Improve engine startup/shutdown benchmarks

- Add contexts to give a better sense of benchmarked areas.
- Add missing benchmarks and adjust some begin/end points.
- Clean up names.
- Improve Android's internal benchmarks in a similar manner.

Co-authored-by: Fredia Huya-Kouadio <fhuya@meta.com>
This commit is contained in:
Yuri Sizov
2023-12-08 12:52:49 +01:00
parent d5ad37afcd
commit fc3f40f37d
19 changed files with 172 additions and 93 deletions

View File

@@ -765,12 +765,12 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
// Benchmark tracking must be done after `OS::get_singleton()->initialize()` as on some
// platforms, it's used to set up the time utilities.
OS::get_singleton()->benchmark_begin_measure("startup_begin");
OS::get_singleton()->benchmark_begin_measure("Startup", "Total");
engine = memnew(Engine);
MAIN_PRINT("Main: Initialize CORE");
OS::get_singleton()->benchmark_begin_measure("core");
OS::get_singleton()->benchmark_begin_measure("Startup", "Core");
register_core_types();
register_core_driver_types();
@@ -2179,11 +2179,12 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
Thread::release_main_thread(); // If setup2() is called from another thread, that one will become main thread, so preventively release this one.
set_current_thread_safe_for_nodes(false);
OS::get_singleton()->benchmark_end_measure("Startup", "Core");
if (p_second_phase) {
return setup2();
}
OS::get_singleton()->benchmark_end_measure("core");
return OK;
error:
@@ -2237,7 +2238,7 @@ error:
memdelete(message_queue);
}
OS::get_singleton()->benchmark_end_measure("core");
OS::get_singleton()->benchmark_end_measure("Startup", "Core");
OS::get_singleton()->finalize_core();
locale = String();
@@ -2271,7 +2272,7 @@ Error Main::setup2() {
// Print engine name and version
print_line(String(VERSION_NAME) + " v" + get_full_version_string() + " - " + String(VERSION_WEBSITE));
OS::get_singleton()->benchmark_begin_measure("servers");
OS::get_singleton()->benchmark_begin_measure("Startup", "Servers");
tsman = memnew(TextServerManager);
@@ -2675,11 +2676,11 @@ Error Main::setup2() {
ERR_FAIL_V_MSG(ERR_CANT_CREATE, "TextServer: Unable to create TextServer interface.");
}
OS::get_singleton()->benchmark_end_measure("servers");
OS::get_singleton()->benchmark_end_measure("Startup", "Servers");
MAIN_PRINT("Main: Load Scene Types");
OS::get_singleton()->benchmark_begin_measure("scene");
OS::get_singleton()->benchmark_begin_measure("Startup", "Scene");
// Initialize ThemeDB early so that scene types can register their theme items.
// Default theme will be initialized later, after modules and ScriptServer are ready.
@@ -2765,7 +2766,7 @@ Error Main::setup2() {
print_verbose("EDITOR API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_EDITOR)));
MAIN_PRINT("Main: Done");
OS::get_singleton()->benchmark_end_measure("scene");
OS::get_singleton()->benchmark_end_measure("Startup", "Scene");
return OK;
}
@@ -3169,7 +3170,7 @@ bool Main::start() {
if (!project_manager && !editor) { // game
if (!game_path.is_empty() || !script.is_empty()) {
//autoload
OS::get_singleton()->benchmark_begin_measure("load_autoloads");
OS::get_singleton()->benchmark_begin_measure("Startup", "Load Autoloads");
HashMap<StringName, ProjectSettings::AutoloadInfo> autoloads = ProjectSettings::get_singleton()->get_autoload_list();
//first pass, add the constants so they exist before any script is loaded
@@ -3234,7 +3235,7 @@ bool Main::start() {
for (Node *E : to_add) {
sml->get_root()->add_child(E);
}
OS::get_singleton()->benchmark_end_measure("load_autoloads");
OS::get_singleton()->benchmark_end_measure("Startup", "Load Autoloads");
}
}
@@ -3273,7 +3274,7 @@ bool Main::start() {
EditorNode *editor_node = nullptr;
if (editor) {
OS::get_singleton()->benchmark_begin_measure("editor");
OS::get_singleton()->benchmark_begin_measure("Startup", "Editor");
editor_node = memnew(EditorNode);
sml->get_root()->add_child(editor_node);
@@ -3282,7 +3283,7 @@ bool Main::start() {
game_path = ""; // Do not load anything.
}
OS::get_singleton()->benchmark_end_measure("editor");
OS::get_singleton()->benchmark_end_measure("Startup", "Editor");
}
#endif
sml->set_auto_accept_quit(GLOBAL_GET("application/config/auto_accept_quit"));
@@ -3420,7 +3421,7 @@ bool Main::start() {
if (!project_manager && !editor) { // game
OS::get_singleton()->benchmark_begin_measure("game_load");
OS::get_singleton()->benchmark_begin_measure("Startup", "Load Game");
// Load SSL Certificates from Project Settings (or builtin).
Crypto::load_default_certificates(GLOBAL_GET("network/tls/certificate_bundle_override"));
@@ -3462,19 +3463,19 @@ bool Main::start() {
}
}
OS::get_singleton()->benchmark_end_measure("game_load");
OS::get_singleton()->benchmark_end_measure("Startup", "Load Game");
}
#ifdef TOOLS_ENABLED
if (project_manager) {
OS::get_singleton()->benchmark_begin_measure("project_manager");
OS::get_singleton()->benchmark_begin_measure("Startup", "Project Manager");
Engine::get_singleton()->set_editor_hint(true);
ProjectManager *pmanager = memnew(ProjectManager);
ProgressDialog *progress_dialog = memnew(ProgressDialog);
pmanager->add_child(progress_dialog);
sml->get_root()->add_child(pmanager);
DisplayServer::get_singleton()->set_context(DisplayServer::CONTEXT_PROJECTMAN);
OS::get_singleton()->benchmark_end_measure("project_manager");
OS::get_singleton()->benchmark_end_measure("Startup", "Project Manager");
}
if (project_manager || editor) {
@@ -3502,7 +3503,7 @@ bool Main::start() {
}
}
OS::get_singleton()->benchmark_end_measure("startup_begin");
OS::get_singleton()->benchmark_end_measure("Startup", "Total");
OS::get_singleton()->benchmark_dump();
return true;
@@ -3751,7 +3752,7 @@ void Main::force_redraw() {
* The order matters as some of those steps are linked with each other.
*/
void Main::cleanup(bool p_force) {
OS::get_singleton()->benchmark_begin_measure("Main::cleanup");
OS::get_singleton()->benchmark_begin_measure("Shutdown", "Total");
if (!p_force) {
ERR_FAIL_COND(!_start_success);
}
@@ -3892,7 +3893,7 @@ void Main::cleanup(bool p_force) {
uninitialize_modules(MODULE_INITIALIZATION_LEVEL_CORE);
unregister_core_types();
OS::get_singleton()->benchmark_end_measure("Main::cleanup");
OS::get_singleton()->benchmark_end_measure("Shutdown", "Total");
OS::get_singleton()->benchmark_dump();
OS::get_singleton()->finalize_core();