BLI: add C++ wrapper for task isolation
This makes it easier to use task isolation in c++ code. Previously, one either had to check `WITH_TBB` (possibly indirectly through `WITH_OPENVDB`) or one had to use the C function which is less convenient.
This commit is contained in:
parent
45d59e0df5
commit
b37093de7b
|
@ -36,6 +36,7 @@
|
|||
#include "BLI_math.h"
|
||||
#include "BLI_path_util.h"
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_task.hh"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_anim_data.h"
|
||||
|
@ -325,9 +326,8 @@ struct VolumeGrid {
|
|||
openvdb::io::File file(filepath);
|
||||
|
||||
/* Isolate file loading since that's potentially multithreaded and we are
|
||||
* holding a mutex lock. See BLI_task_isolate. Note OpenVDB already uses
|
||||
* TBB, so it's fine to use here without a wrapper. */
|
||||
tbb::this_task_arena::isolate([&] {
|
||||
* holding a mutex lock. */
|
||||
blender::threading::isolate_task([&] {
|
||||
try {
|
||||
file.setCopyMaxBytes(0);
|
||||
file.open();
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
# include <tbb/blocked_range.h>
|
||||
# include <tbb/parallel_for.h>
|
||||
# include <tbb/parallel_for_each.h>
|
||||
# include <tbb/task_arena.h>
|
||||
# ifdef WIN32
|
||||
/* We cannot keep this defined, since other parts of the code deal with this on their own, leading
|
||||
* to multiple define warnings unless we un-define this, however we can only undefine this if we
|
||||
|
@ -75,4 +76,14 @@ void parallel_for(IndexRange range, int64_t grain_size, const Function &function
|
|||
#endif
|
||||
}
|
||||
|
||||
/** See #BLI_task_isolate for a description of what isolating a task means. */
|
||||
template<typename Function> void isolate_task(const Function &function)
|
||||
{
|
||||
#ifdef WITH_TBB
|
||||
tbb::this_task_arena::isolate(function);
|
||||
#else
|
||||
function();
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace blender::threading
|
||||
|
|
Loading…
Reference in New Issue