21 #include "precompiled.h"
88 struct DurationAdder:
public std::binary_function<double, const LoadRequest&, double>
119 int estimated_duration_ms)
123 const LoadRequest lr(func, param, description, estimated_duration_ms);
163 if(time_left == time_budget)
168 const double estimated_duration = estimated_duration_ms*1e-3;
169 if(time_left+estimated_duration > time_budget*1.20)
196 double progress = 0.0;
197 double time_left = time_budget;
228 int status = lr.
func(lr.
param, time_left);
230 const double elapsed_time =
timer_Time() - t0;
231 time_left -= elapsed_time;
252 current_estimate += estimated_duration * status/100.0;
290 *progress_percent = (int)(progress * 100.0);
291 ENSURE(0 <= *progress_percent && *progress_percent <= 100);
295 const wchar_t* new_description = L
"";
298 wcscpy_s(description, max_chars, new_description);
300 debug_printf(L
"LOADER| returning; desc=%ls progress=%d\n", description, *progress_percent);
310 const double time_budget = 100.0;
313 wchar_t description[100];
314 int progress_percent;
Status LDR_NonprogressiveLoad()
int(* LoadFunc)(void *param, double time_left)
static double estimated_duration_tally
const Status ALL_COMPLETE
int wcscpy_s(wchar_t *dst, size_t max_dst_chars, const wchar_t *src)
static double total_estimated_duration
#define WARN_RETURN_STATUS_IF_ERR(expression)
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
i64 Status
Error handling system.
static bool HaveTimeForNextTask(double time_left, double time_budget, int estimated_duration_ms)
int estimated_duration_ms
static bool ldr_was_interrupted(int ret)
void LDR_EndRegistering()
Status LDR_ProgressiveLoad(double time_budget, wchar_t *description, size_t max_chars, int *progress_percent)
std::deque< LoadRequest > LoadRequests
static double task_elapsed_time
#define debug_warn(expr)
display the error dialog with the given text.
LoadRequest(LoadFunc func_, void *param_, const wchar_t *desc_, int ms_)
static LoadRequests load_requests
void LDR_Register(LoadFunc func, void *param, const wchar_t *description, int estimated_duration_ms)
void LDR_BeginRegistering()
void debug_printf(const wchar_t *fmt,...)
write a formatted string to the debug channel, subject to filtering (see below).
double operator()(double partial_result, const LoadRequest &lr) const