From 456876208b16710318a4576b9b7554abc4fa1125 Mon Sep 17 00:00:00 2001 From: William Leeson Date: Fri, 12 Nov 2021 10:01:23 +0100 Subject: 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 --- intern/cycles/integrator/path_trace_work_cpu.cpp | 13 ++++++++----- intern/cycles/util/profiling.cpp | 5 +++++ intern/cycles/util/profiling.h | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'intern') diff --git a/intern/cycles/integrator/path_trace_work_cpu.cpp b/intern/cycles/integrator/path_trace_work_cpu.cpp index 36ce2be9f6d..12dcc899dbb 100644 --- a/intern/cycles/integrator/path_trace_work_cpu.cpp +++ b/intern/cycles/integrator/path_trace_work_cpu.cpp @@ -77,8 +77,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_); @@ -106,9 +108,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(); -- cgit v1.2.3