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;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs