Cycles: take into account time limit for progress bar
This change allows the Cycles progress report system to take into conderation the time limit property. This allows for more accuracte progress reports for high sample count renders with short time limits. Contributed by Alaska. Differential Revision: https://developer.blender.org/D15599
This commit is contained in:
parent
ef5a44df2d
commit
c9d821294f
|
@ -495,7 +495,9 @@ void Session::do_delayed_reset()
|
|||
if (!params.background) {
|
||||
progress.set_start_time();
|
||||
}
|
||||
const double time_limit = params.time_limit * ((double)tile_manager_.get_num_tiles());
|
||||
progress.set_render_start_time();
|
||||
progress.set_time_limit(time_limit);
|
||||
}
|
||||
|
||||
void Session::reset(const SessionParams &session_params, const BufferParams &buffer_params)
|
||||
|
@ -590,7 +592,8 @@ double Session::get_estimated_remaining_time() const
|
|||
progress.get_time(total_time, render_time);
|
||||
double remaining = (1.0 - (double)completed) * (render_time / (double)completed);
|
||||
|
||||
const double time_limit = render_scheduler_.get_time_limit();
|
||||
const double time_limit = render_scheduler_.get_time_limit() *
|
||||
((double)tile_manager_.get_num_tiles());
|
||||
if (time_limit != 0.0) {
|
||||
remaining = min(remaining, max(time_limit - render_time, 0.0));
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ class Progress {
|
|||
denoised_tiles = 0;
|
||||
start_time = time_dt();
|
||||
render_start_time = time_dt();
|
||||
time_limit = 0.0;
|
||||
end_time = 0.0;
|
||||
status = "Initializing";
|
||||
substatus = "";
|
||||
|
@ -68,6 +69,7 @@ class Progress {
|
|||
denoised_tiles = 0;
|
||||
start_time = time_dt();
|
||||
render_start_time = time_dt();
|
||||
time_limit = 0.0;
|
||||
end_time = 0.0;
|
||||
status = "Initializing";
|
||||
substatus = "";
|
||||
|
@ -145,6 +147,13 @@ class Progress {
|
|||
render_start_time = time_dt();
|
||||
}
|
||||
|
||||
void set_time_limit(double time_limit_)
|
||||
{
|
||||
thread_scoped_lock lock(progress_mutex);
|
||||
|
||||
time_limit = time_limit_;
|
||||
}
|
||||
|
||||
void add_skip_time(const scoped_timer &start_timer, bool only_render)
|
||||
{
|
||||
double skip_time = time_dt() - start_timer.get_start();
|
||||
|
@ -191,8 +200,13 @@ class Progress {
|
|||
{
|
||||
thread_scoped_lock lock(progress_mutex);
|
||||
|
||||
if (total_pixel_samples > 0) {
|
||||
return ((double)pixel_samples) / (double)total_pixel_samples;
|
||||
if (pixel_samples > 0) {
|
||||
double progress_percent = (double)pixel_samples / (double)total_pixel_samples;
|
||||
if (time_limit != 0.0) {
|
||||
double time_since_render_start = time_dt() - render_start_time;
|
||||
progress_percent = max(progress_percent, time_since_render_start / time_limit);
|
||||
}
|
||||
return min(1.0, progress_percent);
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
@ -335,7 +349,7 @@ class Progress {
|
|||
* in which case the current_tile_sample is displayed. */
|
||||
int rendered_tiles, denoised_tiles;
|
||||
|
||||
double start_time, render_start_time;
|
||||
double start_time, render_start_time, time_limit;
|
||||
/* End time written when render is done, so it doesn't keep increasing on redraws. */
|
||||
double end_time;
|
||||
|
||||
|
|
Loading…
Reference in New Issue