Avoid regressing in progress reporting in resource load

(cherry picked from commit f5ca58d32f)
This commit is contained in:
Pedro J. Estébanez 2024-01-05 19:17:51 +01:00 committed by Rémi Verschelde
parent 00cfd6dcac
commit 15ac760e4a
No known key found for this signature in database
GPG Key ID: C3336907360768E1
2 changed files with 10 additions and 9 deletions

View File

@ -506,20 +506,20 @@ Ref<ResourceLoader::LoadToken> ResourceLoader::_load_start(const String &p_path,
float ResourceLoader::_dependency_get_progress(const String &p_path) { float ResourceLoader::_dependency_get_progress(const String &p_path) {
if (thread_load_tasks.has(p_path)) { if (thread_load_tasks.has(p_path)) {
ThreadLoadTask &load_task = thread_load_tasks[p_path]; ThreadLoadTask &load_task = thread_load_tasks[p_path];
float current_progress = 0.0;
int dep_count = load_task.sub_tasks.size(); int dep_count = load_task.sub_tasks.size();
if (dep_count > 0) { if (dep_count > 0) {
float dep_progress = 0;
for (const String &E : load_task.sub_tasks) { 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); current_progress /= float(dep_count);
dep_progress *= 0.5; current_progress *= 0.5;
dep_progress += load_task.progress * 0.5; current_progress += load_task.progress * 0.5;
return dep_progress;
} else { } 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 { } else {
return 1.0; //assume finished loading it so it no longer exists return 1.0; //assume finished loading it so it no longer exists
} }

View File

@ -168,7 +168,8 @@ private:
String remapped_path; String remapped_path;
String dependent_path; String dependent_path;
String type_hint; String type_hint;
float progress = 0.0; float progress = 0.0f;
float max_reported_progress = 0.0f;
ThreadLoadStatus status = THREAD_LOAD_IN_PROGRESS; ThreadLoadStatus status = THREAD_LOAD_IN_PROGRESS;
ResourceFormatLoader::CacheMode cache_mode = ResourceFormatLoader::CACHE_MODE_REUSE; ResourceFormatLoader::CacheMode cache_mode = ResourceFormatLoader::CACHE_MODE_REUSE;
Error error = OK; Error error = OK;