Avoid regressing in progress reporting in resource load
(cherry picked from commit f5ca58d32f
)
This commit is contained in:
parent
00cfd6dcac
commit
15ac760e4a
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue