From 15ac760e4a709ff60459219573f792b380b48663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Fri, 5 Jan 2024 19:17:51 +0100 Subject: [PATCH] Avoid regressing in progress reporting in resource load (cherry picked from commit f5ca58d32fee840b1a257917d19faba01dd52d77) --- core/io/resource_loader.cpp | 16 ++++++++-------- core/io/resource_loader.h | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index b9bbfc5e661..8406cc0f5c9 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -506,20 +506,20 @@ Ref ResourceLoader::_load_start(const String &p_path, float ResourceLoader::_dependency_get_progress(const String &p_path) { if (thread_load_tasks.has(p_path)) { ThreadLoadTask &load_task = thread_load_tasks[p_path]; + float current_progress = 0.0; int dep_count = load_task.sub_tasks.size(); if (dep_count > 0) { - float dep_progress = 0; for (const String &E : load_task.sub_tasks) { - dep_progress += _dependency_get_progress(E); + current_progress += _dependency_get_progress(E); } - dep_progress /= float(dep_count); - dep_progress *= 0.5; - dep_progress += load_task.progress * 0.5; - return dep_progress; + current_progress /= float(dep_count); + current_progress *= 0.5; + current_progress += load_task.progress * 0.5; } else { - return load_task.progress; + current_progress = load_task.progress; } - + load_task.max_reported_progress = MAX(load_task.max_reported_progress, current_progress); + return load_task.max_reported_progress; } else { return 1.0; //assume finished loading it so it no longer exists } diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h index 68234728eec..7f018f85ae2 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -168,7 +168,8 @@ private: String remapped_path; String dependent_path; String type_hint; - float progress = 0.0; + float progress = 0.0f; + float max_reported_progress = 0.0f; ThreadLoadStatus status = THREAD_LOAD_IN_PROGRESS; ResourceFormatLoader::CacheMode cache_mode = ResourceFormatLoader::CACHE_MODE_REUSE; Error error = OK;