summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-01-29 21:33:00 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-01-29 21:33:00 +0100
commitb65c495d6eefa0a33a58345cce89660a7cff101c (patch)
tree9cd3f841d4f86aaa0f415def1661467aea8f01ca
parent6a47a5327340f71eac49fc99ffe832927a8ea6f9 (diff)
parentf5ca58d32fee840b1a257917d19faba01dd52d77 (diff)
downloadredot-engine-b65c495d6eefa0a33a58345cce89660a7cff101c.tar.gz
Merge pull request #86845 from RandomShaper/no_load_regress
Avoid regressing in progress reporting in resource load
-rw-r--r--core/io/resource_loader.cpp16
-rw-r--r--core/io/resource_loader.h3
2 files changed, 10 insertions, 9 deletions
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index ba11d84bce..d0494a29fd 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -509,20 +509,20 @@ Ref<ResourceLoader::LoadToken> 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 3c32a19066..0ab81cd0a8 100644
--- a/core/io/resource_loader.h
+++ b/core/io/resource_loader.h
@@ -167,7 +167,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;