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>
|
template <typename Index, typename ... Args>
|
||||||
Index & index(Args && ... args);
|
Index & index(Args && ... args);
|
||||||
|
|
||||||
|
template <typename ... Components>
|
||||||
|
std::size_t memory_usage();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
detail::entity_list entity_list_;
|
detail::entity_list entity_list_;
|
||||||
detail::table_container table_container_;
|
detail::table_container table_container_;
|
||||||
|
|
@ -716,4 +719,16 @@ namespace psemek::ecs
|
||||||
return result;
|
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::unique_ptr<column> clone() const = 0;
|
||||||
|
|
||||||
|
virtual std::size_t memory_usage() const = 0;
|
||||||
|
|
||||||
virtual ~column() = default;
|
virtual ~column() = default;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -83,6 +85,8 @@ namespace psemek::ecs::detail
|
||||||
|
|
||||||
std::unique_ptr<column> clone() const override;
|
std::unique_ptr<column> clone() const override;
|
||||||
|
|
||||||
|
std::size_t memory_usage() const override;
|
||||||
|
|
||||||
~column_impl() override;
|
~column_impl() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -107,6 +111,8 @@ namespace psemek::ecs::detail
|
||||||
|
|
||||||
std::unique_ptr<column> clone() const override;
|
std::unique_ptr<column> clone() const override;
|
||||||
|
|
||||||
|
std::size_t memory_usage() const override;
|
||||||
|
|
||||||
~column_impl() override;
|
~column_impl() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -196,6 +202,12 @@ namespace psemek::ecs::detail
|
||||||
return std::make_unique<column_impl<Component, Empty>>();
|
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>
|
template <typename Component, bool Empty>
|
||||||
column_impl<Component, Empty>::~column_impl()
|
column_impl<Component, Empty>::~column_impl()
|
||||||
{
|
{
|
||||||
|
|
@ -268,6 +280,12 @@ namespace psemek::ecs::detail
|
||||||
return std::make_unique<column_impl<Component, true>>();
|
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>
|
template <typename Component>
|
||||||
column_impl<Component, true>::~column_impl()
|
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);
|
||||||
void trigger_destructors(container & container, std::uint32_t row, util::hash_set<util::uuid> const & detached_components);
|
void trigger_destructors(container & container, std::uint32_t row, util::hash_set<util::uuid> const & detached_components);
|
||||||
|
|
||||||
|
std::size_t memory_usage() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::size_t hash_;
|
std::size_t hash_;
|
||||||
std::vector<std::unique_ptr<detail::column>> columns_;
|
std::vector<std::unique_ptr<detail::column>> columns_;
|
||||||
|
|
|
||||||
|
|
@ -178,4 +178,12 @@ namespace psemek::ecs::detail
|
||||||
callback(container, *this, row, detached_components, false);
|
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