add basic profiler scopes

This commit is contained in:
BlackMATov
2019-12-28 07:45:13 +07:00
parent 2520e64760
commit c2bfbfcce7
14 changed files with 78 additions and 12 deletions

View File

@@ -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_;

View File

@@ -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();
}
}

View File

@@ -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>

View File

@@ -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();
}
}

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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_;

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}