diff options
author | William Leeson <leesonw> | 2021-11-12 12:01:23 +0300 |
---|---|---|
committer | William Leeson <william@blender.org> | 2021-11-12 12:01:48 +0300 |
commit | 32c768785991550c269c42223ee60933efab149b (patch) | |
tree | 2b788783ad6a629a97c31612740aa87ac5046053 /intern | |
parent | a87253942d3019c1937e07518c374e832f3db01a (diff) |
Fix T92601: Disable profiling when the profiler is deemed not active.
Adds a method to profiler that can be used to check if it is active.
This is used to determine if stop_profiling and start_profiling
should be called.
| patch | Juans Scene UI 256 samples | Juans Scene bg 256 samples | junkshop UI | junkshop bg |
| No patch | 6:16.59 | 4:05.37 | 2:08.48 | 1:59.7 |
| D13187 | 4:12.15 | 3:57.36 | 2:07.25 | 1:58.16 |
| D13185 | 4.11.18 |3:54.74 | 2:07.44 | 1:58.03 |
| D13190 | 4:12.39 | 3:55.42 | 2:07.62 | 1:58.68 |
UI - means rendered from within Blender
bg - means rendered from the command line using ##blender -b scene.blend -f 1##
Reviewed By: sergey, brecht
Maniphest Tasks: T92601
Differential Revision: https://developer.blender.org/D13190
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/integrator/path_trace_work_cpu.cpp | 13 | ||||
-rw-r--r-- | intern/cycles/util/profiling.cpp | 5 | ||||
-rw-r--r-- | intern/cycles/util/profiling.h | 2 |
3 files changed, 15 insertions, 5 deletions
diff --git a/intern/cycles/integrator/path_trace_work_cpu.cpp b/intern/cycles/integrator/path_trace_work_cpu.cpp index 530e60d6750..2f6c3cf5aca 100644 --- a/intern/cycles/integrator/path_trace_work_cpu.cpp +++ b/intern/cycles/integrator/path_trace_work_cpu.cpp @@ -78,8 +78,10 @@ void PathTraceWorkCPU::render_samples(RenderStatistics &statistics, const int64_t image_height = effective_buffer_params_.height; const int64_t total_pixels_num = image_width * image_height; - for (CPUKernelThreadGlobals &kernel_globals : kernel_thread_globals_) { - kernel_globals.start_profiling(); + if (device_->profiler.active()) { + for (CPUKernelThreadGlobals &kernel_globals : kernel_thread_globals_) { + kernel_globals.start_profiling(); + } } tbb::task_arena local_arena = local_tbb_arena_create(device_); @@ -108,9 +110,10 @@ void PathTraceWorkCPU::render_samples(RenderStatistics &statistics, render_samples_full_pipeline(kernel_globals, work_tile, samples_num); }); }); - - for (CPUKernelThreadGlobals &kernel_globals : kernel_thread_globals_) { - kernel_globals.stop_profiling(); + if (device_->profiler.active()) { + for (CPUKernelThreadGlobals &kernel_globals : kernel_thread_globals_) { + kernel_globals.stop_profiling(); + } } statistics.occupancy = 1.0f; diff --git a/intern/cycles/util/profiling.cpp b/intern/cycles/util/profiling.cpp index 55b35b7320f..d6df1b0b807 100644 --- a/intern/cycles/util/profiling.cpp +++ b/intern/cycles/util/profiling.cpp @@ -171,4 +171,9 @@ bool Profiler::get_object(int object, uint64_t &samples, uint64_t &hits) return true; } +bool Profiler::active() const +{ + return (worker != nullptr); +} + CCL_NAMESPACE_END diff --git a/intern/cycles/util/profiling.h b/intern/cycles/util/profiling.h index b30aac90879..4ced1d90371 100644 --- a/intern/cycles/util/profiling.h +++ b/intern/cycles/util/profiling.h @@ -96,6 +96,8 @@ class Profiler { bool get_shader(int shader, uint64_t &samples, uint64_t &hits); bool get_object(int object, uint64_t &samples, uint64_t &hits); + bool active() const; + protected: void run(); |