mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-15 00:11:55 +07:00
add basic profiler scopes
This commit is contained in:
@@ -33,6 +33,8 @@ namespace e2d
|
||||
|
||||
template < typename T >
|
||||
void active_safe_wait_promise(const stdex::promise<T>& promise) noexcept;
|
||||
|
||||
void frame_tick() noexcept;
|
||||
private:
|
||||
stdex::jobber worker_;
|
||||
stdex::scheduler scheduler_;
|
||||
|
||||
@@ -448,6 +448,7 @@ namespace e2d
|
||||
}
|
||||
|
||||
void dbgui::frame_tick() {
|
||||
E2D_PROFILER_SCOPE("dbgui.frame_tick");
|
||||
state_->frame_tick();
|
||||
|
||||
if ( visible() ) {
|
||||
@@ -456,6 +457,7 @@ namespace e2d
|
||||
}
|
||||
|
||||
void dbgui::frame_render() {
|
||||
E2D_PROFILER_SCOPE("dbgui.frame_render");
|
||||
state_->frame_render();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <enduro2d/core/debug.hpp>
|
||||
#include <enduro2d/core/engine.hpp>
|
||||
#include <enduro2d/core/input.hpp>
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
#include <enduro2d/core/render.hpp>
|
||||
#include <enduro2d/core/window.hpp>
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
#include <enduro2d/core/deferrer.hpp>
|
||||
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
deferrer::deferrer()
|
||||
@@ -26,4 +28,9 @@ namespace e2d
|
||||
const stdex::scheduler& deferrer::scheduler() const noexcept {
|
||||
return scheduler_;
|
||||
}
|
||||
|
||||
void deferrer::frame_tick() noexcept {
|
||||
E2D_PROFILER_SCOPE("deferrer.frame_tick");
|
||||
scheduler_.process_all_tasks();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,6 +320,8 @@ namespace e2d
|
||||
}
|
||||
public:
|
||||
void calculate_end_frame_timers() noexcept {
|
||||
E2D_PROFILER_SCOPE("engine.wait_for_target_fps");
|
||||
|
||||
const auto second_us = time::second_us<u64>();
|
||||
|
||||
const auto minimal_delta_time_us =
|
||||
@@ -499,7 +501,7 @@ namespace e2d
|
||||
while ( true ) {
|
||||
try {
|
||||
the<dbgui>().frame_tick();
|
||||
the<deferrer>().scheduler().process_all_tasks();
|
||||
the<deferrer>().frame_tick();
|
||||
|
||||
if ( !app->frame_tick() ) {
|
||||
break;
|
||||
@@ -517,8 +519,11 @@ namespace e2d
|
||||
app->shutdown();
|
||||
throw;
|
||||
}
|
||||
|
||||
the<input>().frame_tick();
|
||||
window::poll_events();
|
||||
|
||||
E2D_PROFILER_GLOBAL_EVENT("engine.end_of_frame");
|
||||
}
|
||||
|
||||
app->shutdown();
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
#include <enduro2d/core/input.hpp>
|
||||
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
//
|
||||
@@ -364,6 +366,7 @@ namespace e2d
|
||||
}
|
||||
|
||||
void input::frame_tick() noexcept {
|
||||
E2D_PROFILER_SCOPE("input.frame_tick");
|
||||
state_->mouse.state_->frame_tick();
|
||||
state_->keyboard.state_->frame_tick();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/core/debug.hpp>
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
#include <enduro2d/core/window.hpp>
|
||||
|
||||
#define E2D_WINDOW_MODE_NONE 1
|
||||
|
||||
@@ -691,6 +691,7 @@ namespace e2d
|
||||
}
|
||||
|
||||
void window::swap_buffers() noexcept {
|
||||
E2D_PROFILER_SCOPE("window.swap_buffers");
|
||||
std::lock_guard<std::recursive_mutex> guard(state_->rmutex);
|
||||
E2D_ASSERT(
|
||||
state_->window &&
|
||||
@@ -699,6 +700,7 @@ namespace e2d
|
||||
}
|
||||
|
||||
bool window::poll_events() noexcept {
|
||||
E2D_PROFILER_SCOPE("window.poll_events");
|
||||
return glfw_state::poll_events();
|
||||
}
|
||||
|
||||
|
||||
@@ -70,31 +70,68 @@ namespace
|
||||
}
|
||||
|
||||
bool frame_tick() final {
|
||||
E2D_PROFILER_SCOPE("application.frame_tick");
|
||||
|
||||
world& w = the<world>();
|
||||
engine& e = the<engine>();
|
||||
|
||||
const f32 dt = e.delta_time();
|
||||
const f32 time = e.time();
|
||||
|
||||
ecs::registry& registry = the<world>().registry();
|
||||
registry.process_event(systems::pre_update_event{dt,time});
|
||||
registry.process_event(systems::update_event{dt,time});
|
||||
registry.process_event(systems::post_update_event{dt,time});
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.pre_update");
|
||||
w.registry().process_event(systems::pre_update_event{dt,time});
|
||||
}
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.update");
|
||||
w.registry().process_event(systems::update_event{dt,time});
|
||||
}
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.post_update");
|
||||
w.registry().process_event(systems::post_update_event{dt,time});
|
||||
}
|
||||
|
||||
return !the<window>().should_close()
|
||||
|| (application_ && !application_->on_should_close());
|
||||
}
|
||||
|
||||
void frame_render() final {
|
||||
ecs::registry& registry = the<world>().registry();
|
||||
registry.process_event(systems::pre_render_event{});
|
||||
registry.process_event(systems::render_event{});
|
||||
registry.process_event(systems::post_render_event{});
|
||||
E2D_PROFILER_SCOPE("application.frame_render");
|
||||
|
||||
world& w = the<world>();
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.pre_render");
|
||||
w.registry().process_event(systems::pre_render_event{});
|
||||
}
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.render");
|
||||
w.registry().process_event(systems::render_event{});
|
||||
}
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.post_render");
|
||||
w.registry().process_event(systems::post_render_event{});
|
||||
}
|
||||
}
|
||||
|
||||
void frame_finalize() final {
|
||||
E2D_PROFILER_SCOPE("application.frame_finalize");
|
||||
|
||||
world& w = the<world>();
|
||||
ecs::registry& registry = w.registry();
|
||||
registry.process_event(systems::frame_finalize_event{});
|
||||
w.finalize_instances();
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("ecs.frame_finalize");
|
||||
w.registry().process_event(systems::frame_finalize_event{});
|
||||
}
|
||||
|
||||
{
|
||||
E2D_PROFILER_SCOPE("world.finalize_instances");
|
||||
w.finalize_instances();
|
||||
}
|
||||
}
|
||||
private:
|
||||
starter::application_uptr application_;
|
||||
|
||||
@@ -100,6 +100,7 @@ namespace e2d
|
||||
ecs::registry& owner,
|
||||
const ecs::after<systems::update_event>& trigger)
|
||||
{
|
||||
E2D_PROFILER_SCOPE("flipbook_system.process");
|
||||
state_->process(trigger.event.dt, owner);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,6 +396,7 @@ namespace e2d
|
||||
const ecs::after<systems::update_event>& trigger)
|
||||
{
|
||||
E2D_UNUSED(trigger);
|
||||
E2D_PROFILER_SCOPE("label_system.process");
|
||||
state_->process(owner);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,7 @@ namespace e2d
|
||||
const ecs::after<systems::render_event>& trigger)
|
||||
{
|
||||
E2D_UNUSED(trigger);
|
||||
E2D_PROFILER_SCOPE("render_system.process");
|
||||
state_->process(owner);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,6 +123,7 @@ namespace e2d
|
||||
const systems::update_event& event)
|
||||
{
|
||||
E2D_UNUSED(event);
|
||||
E2D_PROFILER_SCOPE("script_system.process");
|
||||
state_->update_process(owner);
|
||||
}
|
||||
|
||||
@@ -131,6 +132,7 @@ namespace e2d
|
||||
const ecs::before<systems::update_event>& trigger)
|
||||
{
|
||||
E2D_UNUSED(trigger);
|
||||
E2D_PROFILER_SCOPE("script_system.process");
|
||||
state_->process_events(owner);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,6 +258,7 @@ namespace e2d
|
||||
ecs::registry& owner,
|
||||
const ecs::after<systems::update_event>& trigger)
|
||||
{
|
||||
E2D_PROFILER_SCOPE("spine_system.process");
|
||||
state_->process(trigger.event.dt, owner);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user