[Bf-blender-cvs] [f9434dbe593] temp-geometry-nodes-evaluator-refactor: use fewer allocators
Jacques Lucke
noreply at git.blender.org
Wed Sep 7 13:02:57 CEST 2022
Commit: f9434dbe593b6fbc0a1835503557cf3cc7e3fdad
Author: Jacques Lucke
Date: Wed Sep 7 12:33:36 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rBf9434dbe593b6fbc0a1835503557cf3cc7e3fdad
use fewer allocators
===================================================================
M source/blender/nodes/NOD_geometry_nodes_log.hh
M source/blender/nodes/intern/geometry_nodes_log.cc
===================================================================
diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh
index a30ab9f4dba..876ad5ae802 100644
--- a/source/blender/nodes/NOD_geometry_nodes_log.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_log.hh
@@ -119,7 +119,7 @@ class GeoTreeLogger {
std::optional<std::string> group_node_name;
Vector<ContextStackHash> children_hashes;
- LinearAllocator<> allocator;
+ LinearAllocator<> *allocator = nullptr;
Vector<std::pair<std::string, NodeWarning>> node_warnings;
Vector<destruct_ptr<ValueLog>> socket_values_owner;
Vector<std::tuple<std::string, std::string, ValueLog *>> input_socket_values;
@@ -170,7 +170,8 @@ class GeoTreeLog {
class GeoModifierLog {
private:
struct LocalData {
- Map<ContextStackHash, std::unique_ptr<GeoTreeLogger>> tree_logger_by_context;
+ LinearAllocator<> allocator;
+ Map<ContextStackHash, destruct_ptr<GeoTreeLogger>> tree_logger_by_context;
};
threading::EnumerableThreadSpecific<LocalData> data_per_thread_;
diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc
index 897aa5f87c5..3be0a0d8e54 100644
--- a/source/blender/nodes/intern/geometry_nodes_log.cc
+++ b/source/blender/nodes/intern/geometry_nodes_log.cc
@@ -121,14 +121,14 @@ void GeoTreeLogger::log_value(const bNode &node, const bNodeSocket &socket, cons
};
auto log_generic_value = [&](const CPPType &type, const void *value) {
- void *buffer = this->allocator.allocate(type.size(), type.alignment());
+ void *buffer = this->allocator->allocate(type.size(), type.alignment());
type.copy_construct(value, buffer);
- store_logged_value(this->allocator.construct<GenericValueLog>(GMutablePointer{type, buffer}));
+ store_logged_value(this->allocator->construct<GenericValueLog>(GMutablePointer{type, buffer}));
};
if (type.is<GeometrySet>()) {
const GeometrySet &geometry = *value.get<GeometrySet>();
- store_logged_value(this->allocator.construct<GeometryInfoLog>(geometry));
+ store_logged_value(this->allocator->construct<GeometryInfoLog>(geometry));
}
else if (const auto *value_or_field_type = dynamic_cast<const fn::ValueOrFieldCPPType *>(
&type)) {
@@ -137,7 +137,7 @@ void GeoTreeLogger::log_value(const bNode &node, const bNodeSocket &socket, cons
if (value_or_field_type->is_field(value_or_field)) {
const GField *field = value_or_field_type->get_field_ptr(value_or_field);
if (field->node().depends_on_input()) {
- store_logged_value(this->allocator.construct<FieldInfoLog>(*field));
+ store_logged_value(this->allocator->construct<FieldInfoLog>(*field));
}
else {
BUFFER_FOR_CPP_TYPE_VALUE(base_type, value);
@@ -159,7 +159,7 @@ void GeoTreeLogger::log_viewer_node(const bNode &viewer_node,
const GeometrySet &geometry,
const GField &field)
{
- destruct_ptr<ViewerNodeLog> log = this->allocator.construct<ViewerNodeLog>();
+ destruct_ptr<ViewerNodeLog> log = this->allocator->construct<ViewerNodeLog>();
log->geometry = geometry;
log->field = field;
log->geometry.ensure_owns_direct_data();
@@ -256,15 +256,16 @@ void GeoTreeLog::ensure_viewer_node_logs()
GeoTreeLogger &GeoModifierLog::get_local_tree_logger(const ContextStack &context_stack)
{
LocalData &local_data = data_per_thread_.local();
- Map<ContextStackHash, std::unique_ptr<GeoTreeLogger>> &local_tree_loggers =
+ Map<ContextStackHash, destruct_ptr<GeoTreeLogger>> &local_tree_loggers =
local_data.tree_logger_by_context;
- std::unique_ptr<GeoTreeLogger> &tree_logger_ptr = local_tree_loggers.lookup_or_add_default(
+ destruct_ptr<GeoTreeLogger> &tree_logger_ptr = local_tree_loggers.lookup_or_add_default(
context_stack.hash());
if (tree_logger_ptr) {
return *tree_logger_ptr;
}
- tree_logger_ptr = std::make_unique<GeoTreeLogger>();
+ tree_logger_ptr = local_data.allocator.construct<GeoTreeLogger>();
GeoTreeLogger &tree_logger = *tree_logger_ptr;
+ tree_logger.allocator = &local_data.allocator;
const ContextStack *parent_context_stack = context_stack.parent();
if (parent_context_stack != nullptr) {
tree_logger.parent_hash = parent_context_stack->hash();
@@ -283,7 +284,7 @@ GeoTreeLog &GeoModifierLog::get_tree_log(const ContextStackHash &context_stack_h
GeoTreeLog &reduced_tree_log = *tree_logs_.lookup_or_add_cb(context_stack_hash, [&]() {
Vector<GeoTreeLogger *> tree_logs;
for (LocalData &local_data : data_per_thread_) {
- std::unique_ptr<GeoTreeLogger> *tree_log = local_data.tree_logger_by_context.lookup_ptr(
+ destruct_ptr<GeoTreeLogger> *tree_log = local_data.tree_logger_by_context.lookup_ptr(
context_stack_hash);
if (tree_log != nullptr) {
tree_logs.append(tree_log->get());
More information about the Bf-blender-cvs
mailing list