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