1
0
forked from mirrors/0ad

rough but functional loading progress bar support.

numerous TODOs remaining - initial update instead of only after
completing first job; fix GUI overdraw issue; decrease granularity
(currently only 3 updates)

This was SVN commit r2033.
This commit is contained in:
janwas
2005-03-22 02:17:55 +00:00
parent 5e3b0f06ec
commit 6d792365aa
13 changed files with 246 additions and 45 deletions
+6 -4
View File
@@ -158,7 +158,7 @@ static bool HaveTimeForNextTask(double time_left, double time_budget, int estima
// (if it's less than that, we won't check the next task length)
if(time_left < 0.40*time_budget)
{
const double estimated_duration = estimated_duration_ms * 1e-3;
const double estimated_duration = estimated_duration_ms*1e-3;
// .. and the upcoming task is expected to be long -
// leave it for the next timeslice.
if(estimated_duration > time_left + time_budget*0.20)
@@ -201,10 +201,10 @@ int LDR_ProgressiveLoad(double time_budget, wchar_t* description_,
while(!load_requests.empty())
{
const double time_left = end_time - get_time();
const LoadRequest& lr = load_requests.front();
double time_left = end_time - get_time();
// do actual work of loading
const LoadRequest& lr = load_requests.front();
ret = lr.func(lr.param, time_left);
// .. either finished entirely, or failed => remove from queue
if(ret != ERR_TIMED_OUT)
@@ -228,6 +228,7 @@ int LDR_ProgressiveLoad(double time_budget, wchar_t* description_,
// check if we're out of time; take into account next task length.
// note: do this at the end of the loop to make sure there's
// progress even if the timer is low-resolution (=> time_left = 0).
time_left = end_time - get_time();
if(!HaveTimeForNextTask(time_left, time_budget, lr.estimated_duration_ms))
{
ret = ERR_TIMED_OUT;
@@ -237,7 +238,6 @@ int LDR_ProgressiveLoad(double time_budget, wchar_t* description_,
// queue is empty, we just finished.
state = IDLE;
assert(progress_percent == 100);
ret = 0;
// set output params (there are several return points above)
@@ -250,5 +250,7 @@ done:
description = load_requests.front().description.c_str();
wcscpy_s(description_, max_chars, description);
debug_out("LDR_ProgressiveLoad RETURNING; desc=%ls progress=%d\n", description_, progress_percent);
return ret;
}