Support reporting ECS memory usage
This commit is contained in:
parent
7279a5b6f5
commit
68d4adcad2
4 changed files with 43 additions and 0 deletions
|
|
@ -378,6 +378,9 @@ namespace psemek::ecs
|
|||
template <typename Index, typename ... Args>
|
||||
Index & index(Args && ... args);
|
||||
|
||||
template <typename ... Components>
|
||||
std::size_t memory_usage();
|
||||
|
||||
private:
|
||||
detail::entity_list entity_list_;
|
||||
detail::table_container table_container_;
|
||||
|
|
@ -716,4 +719,16 @@ namespace psemek::ecs
|
|||
return result;
|
||||
}
|
||||
|
||||
template <typename ... Components>
|
||||
std::size_t container::memory_usage()
|
||||
{
|
||||
auto cache = this->cache<Components...>();
|
||||
std::size_t result = 0;
|
||||
|
||||
for (auto const & entry : cache->entries)
|
||||
result += entry.table->memory_usage();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ namespace psemek::ecs::detail
|
|||
|
||||
virtual std::unique_ptr<column> clone() const = 0;
|
||||
|
||||
virtual std::size_t memory_usage() const = 0;
|
||||
|
||||
virtual ~column() = default;
|
||||
|
||||
protected:
|
||||
|
|
@ -83,6 +85,8 @@ namespace psemek::ecs::detail
|
|||
|
||||
std::unique_ptr<column> clone() const override;
|
||||
|
||||
std::size_t memory_usage() const override;
|
||||
|
||||
~column_impl() override;
|
||||
|
||||
private:
|
||||
|
|
@ -107,6 +111,8 @@ namespace psemek::ecs::detail
|
|||
|
||||
std::unique_ptr<column> clone() const override;
|
||||
|
||||
std::size_t memory_usage() const override;
|
||||
|
||||
~column_impl() override;
|
||||
};
|
||||
|
||||
|
|
@ -196,6 +202,12 @@ namespace psemek::ecs::detail
|
|||
return std::make_unique<column_impl<Component, Empty>>();
|
||||
}
|
||||
|
||||
template <typename Component, bool Empty>
|
||||
std::size_t column_impl<Component, Empty>::memory_usage() const
|
||||
{
|
||||
return sizeof(Component) * row_count_;
|
||||
}
|
||||
|
||||
template <typename Component, bool Empty>
|
||||
column_impl<Component, Empty>::~column_impl()
|
||||
{
|
||||
|
|
@ -268,6 +280,12 @@ namespace psemek::ecs::detail
|
|||
return std::make_unique<column_impl<Component, true>>();
|
||||
}
|
||||
|
||||
template <typename Component>
|
||||
std::size_t column_impl<Component, true>::memory_usage() const
|
||||
{
|
||||
return sizeof(Component);
|
||||
}
|
||||
|
||||
template <typename Component>
|
||||
column_impl<Component, true>::~column_impl()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -79,6 +79,8 @@ namespace psemek::ecs::detail
|
|||
void trigger_destructors(container & container, std::uint32_t row);
|
||||
void trigger_destructors(container & container, std::uint32_t row, util::hash_set<util::uuid> const & detached_components);
|
||||
|
||||
std::size_t memory_usage() const;
|
||||
|
||||
protected:
|
||||
std::size_t hash_;
|
||||
std::vector<std::unique_ptr<detail::column>> columns_;
|
||||
|
|
|
|||
|
|
@ -178,4 +178,12 @@ namespace psemek::ecs::detail
|
|||
callback(container, *this, row, detached_components, false);
|
||||
}
|
||||
|
||||
std::size_t table::memory_usage() const
|
||||
{
|
||||
std::size_t result = 0;
|
||||
for (auto const & column : columns_)
|
||||
result += column->memory_usage();
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue