89 lines
5.0 KiB
C++
89 lines
5.0 KiB
C++
#include "Frame_Scheduler.h"
|
|
#include <algorithm>
|
|
#include <utility>
|
|
|
|
namespace renderive {
|
|
void Frame_Lifecycle_Record::record_renderable_render(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth, Renderable_Cache_Mode cache_mode, std::uint64_t render_time_ns) {
|
|
Renderable_Frame_Stat& stat = renderable_stat(node_id, parent_node_id, object_name, parent_object_name, tree_depth);
|
|
stat.cache_enabled = cache_mode == Renderable_Cache_Mode::Local_Pixel;
|
|
++stat.render_count;
|
|
stat.total_render_time_ns += render_time_ns;
|
|
stat.last_total_render_time_ns = render_time_ns;
|
|
}
|
|
|
|
void Frame_Lifecycle_Record::record_renderable_self_draw(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth, Renderable_Cache_Mode cache_mode, std::uint64_t draw_time_ns) {
|
|
Renderable_Frame_Stat& stat = renderable_stat(node_id, parent_node_id, object_name, parent_object_name, tree_depth);
|
|
stat.cache_enabled = cache_mode == Renderable_Cache_Mode::Local_Pixel;
|
|
++stat.self_draw_count;
|
|
stat.self_draw_time_ns += draw_time_ns;
|
|
stat.last_self_draw_time_ns = draw_time_ns;
|
|
}
|
|
|
|
void Frame_Lifecycle_Record::record_renderable_cache_hit(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth) {
|
|
++renderable_cache_hit_count;
|
|
++cache_stat(node_id, parent_node_id, object_name, parent_object_name, tree_depth).hit_count;
|
|
}
|
|
|
|
void Frame_Lifecycle_Record::record_renderable_cache_miss(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth) {
|
|
++renderable_cache_miss_count;
|
|
++cache_stat(node_id, parent_node_id, object_name, parent_object_name, tree_depth).miss_count;
|
|
}
|
|
|
|
void Frame_Lifecycle_Record::record_renderable_cache_rebuild(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth, std::uint64_t rebuild_time_ns, std::uint64_t image_bytes, std::uint64_t image_area, std::uint64_t edit_version, std::uint64_t ready_version) {
|
|
++renderable_cache_rebuild_count;
|
|
Renderable_Cache_Frame_Stats& stat = cache_stat(node_id, parent_node_id, object_name, parent_object_name, tree_depth);
|
|
renderable_cache_rebuild_time_ns += rebuild_time_ns;
|
|
renderable_cache_image_bytes += image_bytes;
|
|
renderable_cache_image_area += image_area;
|
|
++stat.rebuild_count;
|
|
stat.rebuild_time_ns += rebuild_time_ns;
|
|
stat.last_rebuild_time_ns = rebuild_time_ns;
|
|
stat.last_image_bytes = image_bytes;
|
|
stat.last_image_area = image_area;
|
|
stat.last_edit_version = edit_version;
|
|
stat.last_ready_version = ready_version;
|
|
}
|
|
|
|
void Frame_Lifecycle_Record::record_renderable_cache_compose(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth, std::uint64_t compose_time_ns, std::uint64_t image_bytes, std::uint64_t image_area, std::uint64_t edit_version, std::uint64_t ready_version) {
|
|
renderable_cache_compose_time_ns += compose_time_ns;
|
|
Renderable_Cache_Frame_Stats& stat = cache_stat(node_id, parent_node_id, object_name, parent_object_name, tree_depth);
|
|
stat.compose_time_ns += compose_time_ns;
|
|
stat.last_compose_time_ns = compose_time_ns;
|
|
stat.last_image_bytes = image_bytes;
|
|
stat.last_image_area = image_area;
|
|
stat.last_edit_version = edit_version;
|
|
stat.last_ready_version = ready_version;
|
|
}
|
|
|
|
Renderable_Frame_Stat& Frame_Lifecycle_Record::renderable_stat(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth) {
|
|
for (auto& stat : renderable_stats) {
|
|
if (stat.node_id == node_id && stat.parent_node_id == parent_node_id && stat.tree_depth == tree_depth)
|
|
return stat;
|
|
}
|
|
Renderable_Frame_Stat stat;
|
|
stat.node_id = node_id;
|
|
stat.parent_node_id = parent_node_id;
|
|
stat.object_name = std::string(object_name);
|
|
stat.parent_object_name = std::string(parent_object_name);
|
|
stat.tree_depth = tree_depth;
|
|
renderable_stats.push_back(std::move(stat));
|
|
return renderable_stats.back();
|
|
}
|
|
|
|
Renderable_Cache_Frame_Stats& Frame_Lifecycle_Record::cache_stat(std::uint64_t node_id, std::uint64_t parent_node_id, std::string_view object_name, std::string_view parent_object_name, int tree_depth) {
|
|
for (auto& stat : renderable_cache_stats) {
|
|
if (stat.node_id == node_id && stat.parent_node_id == parent_node_id && stat.tree_depth == tree_depth)
|
|
return stat;
|
|
}
|
|
Renderable_Cache_Frame_Stats stat;
|
|
stat.node_id = node_id;
|
|
stat.parent_node_id = parent_node_id;
|
|
stat.object_name = std::string(object_name);
|
|
stat.parent_object_name = std::string(parent_object_name);
|
|
stat.tree_depth = tree_depth;
|
|
renderable_cache_stats.push_back(std::move(stat));
|
|
return renderable_cache_stats.back();
|
|
}
|
|
|
|
} // namespace renderive
|