diff options
Diffstat (limited to 'intern/cycles/util/util_progress.h')
-rw-r--r-- | intern/cycles/util/util_progress.h | 55 |
1 files changed, 50 insertions, 5 deletions
diff --git a/intern/cycles/util/util_progress.h b/intern/cycles/util/util_progress.h index e721a3f5047..0ff48630a81 100644 --- a/intern/cycles/util/util_progress.h +++ b/intern/cycles/util/util_progress.h @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ #ifndef __UTIL_PROGRESS_H__ @@ -38,6 +38,7 @@ public: sample = 0; start_time = time_dt(); total_time = 0.0f; + render_time = 0.0f; tile_time = 0.0f; status = "Initializing"; substatus = ""; @@ -46,6 +47,8 @@ public: update_cb = NULL; cancel = false; cancel_message = ""; + error = false; + error_message = ""; cancel_cb = NULL; } @@ -59,7 +62,7 @@ public: thread_scoped_lock lock(progress.progress_mutex); progress.get_status(status, substatus); - progress.get_tile(tile, total_time, tile_time); + progress.get_tile(tile, total_time, render_time, tile_time); sample = progress.get_sample(); @@ -71,7 +74,9 @@ public: tile = 0; sample = 0; start_time = time_dt(); + render_start_time = time_dt(); total_time = 0.0f; + render_time = 0.0f; tile_time = 0.0f; status = "Initializing"; substatus = ""; @@ -79,6 +84,8 @@ public: sync_substatus = ""; cancel = false; cancel_message = ""; + error = false; + error_message = ""; } /* cancel */ @@ -108,6 +115,28 @@ public: cancel_cb = function; } + /* error */ + void set_error(const string& error_message_) + { + thread_scoped_lock lock(progress_mutex); + error_message = error_message_; + error = true; + /* If error happens we also stop rendering. */ + cancel_message = error_message_; + cancel = true; + } + + bool get_error() + { + return error; + } + + string get_error_message() + { + thread_scoped_lock lock(progress_mutex); + return error_message; + } + /* tile and timing information */ void set_start_time(double start_time_) @@ -117,21 +146,30 @@ public: start_time = start_time_; } + void set_render_start_time(double render_start_time_) + { + thread_scoped_lock lock(progress_mutex); + + render_start_time = render_start_time_; + } + void set_tile(int tile_, double tile_time_) { thread_scoped_lock lock(progress_mutex); tile = tile_; total_time = time_dt() - start_time; + render_time = time_dt() - render_start_time; tile_time = tile_time_; } - void get_tile(int& tile_, double& total_time_, double& tile_time_) + void get_tile(int& tile_, double& total_time_, double& render_time_, double& tile_time_) { thread_scoped_lock lock(progress_mutex); tile_ = tile; total_time_ = (total_time > 0.0)? total_time: 0.0; + render_time_ = (render_time > 0.0)? render_time: 0.0; tile_time_ = tile_time; } @@ -169,6 +207,7 @@ public: status = status_; substatus = substatus_; total_time = time_dt() - start_time; + render_time = time_dt() - render_start_time; } set_update(); @@ -180,6 +219,7 @@ public: thread_scoped_lock lock(progress_mutex); substatus = substatus_; total_time = time_dt() - start_time; + render_time = time_dt() - render_start_time; } set_update(); @@ -192,6 +232,7 @@ public: sync_status = status_; sync_substatus = substatus_; total_time = time_dt() - start_time; + render_time = time_dt() - render_start_time; } set_update(); @@ -204,6 +245,7 @@ public: thread_scoped_lock lock(progress_mutex); sync_substatus = substatus_; total_time = time_dt() - start_time; + render_time = time_dt() - render_start_time; } set_update(); @@ -247,8 +289,8 @@ protected: int tile; /* counter for rendered tiles */ int sample; /* counter of rendered samples, global for all tiles */ - double start_time; - double total_time; + double start_time, render_start_time; + double total_time, render_time; double tile_time; string status; @@ -259,6 +301,9 @@ protected: volatile bool cancel; string cancel_message; + + volatile bool error; + string error_message; }; CCL_NAMESPACE_END |