[Bf-blender-cvs] [5247ebc36bb] cycles-x: Cycles X: Improve average time report in the log
Sergey Sharybin
noreply at git.blender.org
Mon Jul 12 15:00:10 CEST 2021
Commit: 5247ebc36bb54871e82ebc705e3df43385e5922f
Author: Sergey Sharybin
Date: Mon Jul 12 12:50:08 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB5247ebc36bb54871e82ebc705e3df43385e5922f
Cycles X: Improve average time report in the log
Don't count non-finial resolution divider in the average as it is not
accurate.
The wall time is still counted.
===================================================================
M intern/cycles/integrator/render_scheduler.cpp
M intern/cycles/integrator/render_scheduler.h
===================================================================
diff --git a/intern/cycles/integrator/render_scheduler.cpp b/intern/cycles/integrator/render_scheduler.cpp
index e9586075a5b..17c90a789a9 100644
--- a/intern/cycles/integrator/render_scheduler.cpp
+++ b/intern/cycles/integrator/render_scheduler.cpp
@@ -287,6 +287,10 @@ void RenderScheduler::report_path_trace_time(const RenderWork &render_work,
render_work.path_trace.num_samples;
}
+ if (work_report_reset_average(render_work)) {
+ path_trace_time_.reset_average();
+ }
+
path_trace_time_.add_average(final_time_approx, render_work.path_trace.num_samples);
VLOG(4) << "Average path tracing time: " << path_trace_time_.get_average() << " seconds.";
@@ -304,6 +308,10 @@ void RenderScheduler::report_adaptive_filter_time(const RenderWork &render_work,
const double final_time_approx = approximate_final_time(render_work, time);
+ if (work_report_reset_average(render_work)) {
+ adaptive_filter_time_.reset_average();
+ }
+
adaptive_filter_time_.add_average(final_time_approx, render_work.path_trace.num_samples);
VLOG(4) << "Average adaptive sampling filter time: " << adaptive_filter_time_.get_average()
@@ -320,6 +328,10 @@ void RenderScheduler::report_denoise_time(const RenderWork &render_work, double
first_render_time_.denoise_time = final_time_approx;
}
+ if (work_report_reset_average(render_work)) {
+ denoise_time_.reset_average();
+ }
+
denoise_time_.add_average(final_time_approx);
VLOG(4) << "Average denoising time: " << denoise_time_.get_average() << " seconds.";
@@ -335,6 +347,10 @@ void RenderScheduler::report_display_update_time(const RenderWork &render_work,
first_render_time_.display_update_time = final_time_approx;
}
+ if (work_report_reset_average(render_work)) {
+ display_update_time_.reset_average();
+ }
+
display_update_time_.add_average(final_time_approx);
VLOG(4) << "Average display update time: " << display_update_time_.get_average() << " seconds.";
@@ -815,6 +831,16 @@ bool RenderScheduler::work_is_usable_for_first_render_estimation(const RenderWor
render_work.path_trace.start_sample == start_sample_;
}
+bool RenderScheduler::work_report_reset_average(const RenderWork &render_work)
+{
+ /* When rendering at a non-final resolution divider time average is not very useful because it
+ * will either bias average down (due to lower render times on the smaller images) or will give
+ * incorrect result when trying to estimate time which would have spent on the final resolution.
+ *
+ * So we only accumulate average for the latest resolution divider which was rendered. */
+ return render_work.resolution_divider != pixel_size_;
+}
+
void RenderScheduler::set_start_render_time_if_needed()
{
/* Start counting render time when rendering sampels at their final resolution. */
diff --git a/intern/cycles/integrator/render_scheduler.h b/intern/cycles/integrator/render_scheduler.h
index 8551c806ec6..097a3927e30 100644
--- a/intern/cycles/integrator/render_scheduler.h
+++ b/intern/cycles/integrator/render_scheduler.h
@@ -200,6 +200,9 @@ class RenderScheduler {
* for the resolution divider calculation. */
bool work_is_usable_for_first_render_estimation(const RenderWork &render_work);
+ /* Check whether timing report about the given work need to reset accumulated average time. */
+ bool work_report_reset_average(const RenderWork &render_work);
+
void set_start_render_time_if_needed();
/* CHeck whether render time limit has been reached (or exceeded), and if so store related
@@ -248,6 +251,12 @@ class RenderScheduler {
return average_time_accumulator_ / num_average_times_;
}
+ inline void reset_average()
+ {
+ average_time_accumulator_ = 0.0;
+ num_average_times_ = 0;
+ }
+
protected:
double total_wall_time_ = 0.0;
More information about the Bf-blender-cvs
mailing list