In large node setup the threading overhead was sometimes very significant. That's especially true when most nodes do very little work. This commit improves the scheduling by not using multi-threading in many cases unless it's likely that it will be worth it. For more details see the comments in `BLI_lazy_threading.hh`. Differential Revision: https://developer.blender.org/D15976
71 lines
1.6 KiB
C++
71 lines
1.6 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup fn
|
|
*/
|
|
|
|
#include "FN_lazy_function_execute.hh"
|
|
|
|
namespace blender::fn::lazy_function {
|
|
|
|
BasicParams::BasicParams(const LazyFunction &fn,
|
|
const Span<GMutablePointer> inputs,
|
|
const Span<GMutablePointer> outputs,
|
|
MutableSpan<std::optional<ValueUsage>> input_usages,
|
|
Span<ValueUsage> output_usages,
|
|
MutableSpan<bool> set_outputs)
|
|
: Params(fn, true),
|
|
inputs_(inputs),
|
|
outputs_(outputs),
|
|
input_usages_(input_usages),
|
|
output_usages_(output_usages),
|
|
set_outputs_(set_outputs)
|
|
{
|
|
}
|
|
|
|
void *BasicParams::try_get_input_data_ptr_impl(const int index) const
|
|
{
|
|
return inputs_[index].get();
|
|
}
|
|
|
|
void *BasicParams::try_get_input_data_ptr_or_request_impl(const int index)
|
|
{
|
|
void *value = inputs_[index].get();
|
|
if (value == nullptr) {
|
|
input_usages_[index] = ValueUsage::Used;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
void *BasicParams::get_output_data_ptr_impl(const int index)
|
|
{
|
|
return outputs_[index].get();
|
|
}
|
|
|
|
void BasicParams::output_set_impl(const int index)
|
|
{
|
|
set_outputs_[index] = true;
|
|
}
|
|
|
|
bool BasicParams::output_was_set_impl(const int index) const
|
|
{
|
|
return set_outputs_[index];
|
|
}
|
|
|
|
ValueUsage BasicParams::get_output_usage_impl(const int index) const
|
|
{
|
|
return output_usages_[index];
|
|
}
|
|
|
|
void BasicParams::set_input_unused_impl(const int index)
|
|
{
|
|
input_usages_[index] = ValueUsage::Unused;
|
|
}
|
|
|
|
bool BasicParams::try_enable_multi_threading_impl()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
} // namespace blender::fn::lazy_function
|