[Bf-blender-cvs] [c9d821294f0] master: Cycles: take into account time limit for progress bar

Brecht Van Lommel noreply at git.blender.org
Thu Aug 11 19:43:19 CEST 2022


Commit: c9d821294f0870faa471f1960a0ccb212d7d8d49
Author: Brecht Van Lommel
Date:   Thu Aug 11 19:35:45 2022 +0200
Branches: master
https://developer.blender.org/rBc9d821294f0870faa471f1960a0ccb212d7d8d49

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

===================================================================

M	intern/cycles/session/session.cpp
M	intern/cycles/util/progress.h

===================================================================

diff --git a/intern/cycles/session/session.cpp b/intern/cycles/session/session.cpp
index e7de82a6e1b..a5a44aca4b7 100644
--- a/intern/cycles/session/session.cpp
+++ b/intern/cycles/session/session.cpp
@@ -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));
   }
diff --git a/intern/cycles/util/progress.h b/intern/cycles/util/progress.h
index 37eafd57491..586979d2021 100644
--- a/intern/cycles/util/progress.h
+++ b/intern/cycles/util/progress.h
@@ -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;



More information about the Bf-blender-cvs mailing list