diff --git a/sources/enduro2d/core/audio_impl/audio.hpp b/sources/enduro2d/core/audio_impl/audio.hpp index 110169cd..1509f5b7 100644 --- a/sources/enduro2d/core/audio_impl/audio.hpp +++ b/sources/enduro2d/core/audio_impl/audio.hpp @@ -6,8 +6,9 @@ #pragma once -#include #include +#include +#include #define E2D_AUDIO_MODE_NONE 1 #define E2D_AUDIO_MODE_BASS 2 diff --git a/sources/enduro2d/core/audio_impl/audio_bass.cpp b/sources/enduro2d/core/audio_impl/audio_bass.cpp index a00d401f..bd83c57b 100644 --- a/sources/enduro2d/core/audio_impl/audio_bass.cpp +++ b/sources/enduro2d/core/audio_impl/audio_bass.cpp @@ -156,6 +156,8 @@ namespace e2d return nullptr; } + E2D_PROFILER_SCOPE("audio.create_stream"); + HSAMPLE sample = BASS_SampleLoad( TRUE, sound_data.data(), @@ -189,6 +191,8 @@ namespace e2d return nullptr; } + E2D_PROFILER_SCOPE("audio.create_stream"); + BASS_FILEPROCS file_procs = { sound_stream_close_proc, sound_stream_length_proc, @@ -226,6 +230,8 @@ namespace e2d return nullptr; } + E2D_PROFILER_SCOPE("audio.create_source"); + HCHANNEL channel = stream->state().stream() ? stream->state().sound() : BASS_SampleGetChannel(stream->state().sound(), FALSE); diff --git a/sources/enduro2d/core/render_impl/render.hpp b/sources/enduro2d/core/render_impl/render.hpp index 1923edf0..0069c1a6 100644 --- a/sources/enduro2d/core/render_impl/render.hpp +++ b/sources/enduro2d/core/render_impl/render.hpp @@ -7,6 +7,7 @@ #pragma once #include +#include #include #include diff --git a/sources/enduro2d/core/render_impl/render_opengl.cpp b/sources/enduro2d/core/render_impl/render_opengl.cpp index ea0b497b..52d22e83 100644 --- a/sources/enduro2d/core/render_impl/render_opengl.cpp +++ b/sources/enduro2d/core/render_impl/render_opengl.cpp @@ -497,33 +497,51 @@ namespace e2d { E2D_ASSERT(is_in_main_thread()); - gl_shader_id vs = gl_compile_shader( - state_->dbg(), - vertex_shader_header_cstr(device_capabilities().profile), - vertex_source, - GL_VERTEX_SHADER); + gl_shader_id vs(state_->dbg()); - if ( vs.empty() ) { - return nullptr; + { + E2D_PROFILER_SCOPE("render.compile_vertex_shader"); + + vs = gl_compile_shader( + state_->dbg(), + vertex_shader_header_cstr(device_capabilities().profile), + vertex_source, + GL_VERTEX_SHADER); + + if ( vs.empty() ) { + return nullptr; + } } - gl_shader_id fs = gl_compile_shader( - state_->dbg(), - fragment_shader_header_cstr(device_capabilities().profile), - fragment_source, - GL_FRAGMENT_SHADER); + gl_shader_id fs(state_->dbg()); + + { + E2D_PROFILER_SCOPE("render.compile_fragment_shader"); - if ( fs.empty() ) { - return nullptr; + fs = gl_compile_shader( + state_->dbg(), + fragment_shader_header_cstr(device_capabilities().profile), + fragment_source, + GL_FRAGMENT_SHADER); + + if ( fs.empty() ) { + return nullptr; + } } - gl_program_id ps = gl_link_program( - state_->dbg(), - std::move(vs), - std::move(fs)); + gl_program_id ps(state_->dbg()); - if ( ps.empty() ) { - return nullptr; + { + E2D_PROFILER_SCOPE("render.link_shader_program"); + + ps = gl_link_program( + state_->dbg(), + std::move(vs), + std::move(fs)); + + if ( ps.empty() ) { + return nullptr; + } } return std::make_shared( @@ -583,6 +601,11 @@ namespace e2d } } + E2D_PROFILER_SCOPE_EX("render.create_texture_from_image", { + {"size", strings::rformat("%0", image.size())}, + {"format", strings::rformat("%0", image.format())} + }); + gl_texture_id id = gl_texture_id::create(state_->dbg(), GL_TEXTURE_2D); if ( id.empty() ) { state_->dbg().error("RENDER: Failed to create texture:\n" @@ -659,6 +682,11 @@ namespace e2d } } + E2D_PROFILER_SCOPE_EX("render.create_empty_texture", { + {"size", strings::rformat("%0", size)}, + {"format", strings::rformat("%0", decl.type())} + }); + gl_texture_id id = gl_texture_id::create(state_->dbg(), GL_TEXTURE_2D); if ( id.empty() ) { state_->dbg().error("RENDER: Failed to create texture:\n" @@ -723,6 +751,8 @@ namespace e2d return nullptr; } + E2D_PROFILER_SCOPE("render.create_index_buffer"); + gl_buffer_id id = gl_buffer_id::create(state_->dbg(), GL_ELEMENT_ARRAY_BUFFER); if ( id.empty() ) { state_->dbg().error("RENDER: Failed to create index buffer:\n" @@ -757,6 +787,8 @@ namespace e2d return nullptr; } + E2D_PROFILER_SCOPE("render.create_vertex_buffer"); + gl_buffer_id id = gl_buffer_id::create(state_->dbg(), GL_ARRAY_BUFFER); if ( id.empty() ) { state_->dbg().error("RENDER: Failed to create vertex buffer:\n" @@ -813,6 +845,8 @@ namespace e2d } } + E2D_PROFILER_SCOPE("render.create_render_target"); + gl_framebuffer_id id = gl_framebuffer_id::create(state_->dbg(), GL_FRAMEBUFFER); if ( id.empty() ) { state_->dbg().error("RENDER: Failed to create framebuffer:\n", diff --git a/sources/enduro2d/core/vfs.cpp b/sources/enduro2d/core/vfs.cpp index e37e2d5b..15e73bea 100644 --- a/sources/enduro2d/core/vfs.cpp +++ b/sources/enduro2d/core/vfs.cpp @@ -6,6 +6,8 @@ #include +#include + #include <3rdparty/miniz/miniz.h> namespace @@ -173,6 +175,9 @@ namespace e2d } std::optional vfs::load(const url& url) const { + E2D_PROFILER_SCOPE_EX("vfs.sync_load", { + {"url", url.schemepath()} + }); return load_async(url).then([](auto&& src){ return std::optional(std::forward(src)); }).get_or_default(std::nullopt); @@ -180,6 +185,9 @@ namespace e2d stdex::promise vfs::load_async(const url& url) const { return state_->worker.async([this, url](){ + E2D_PROFILER_SCOPE_EX("vfs.load_async", { + {"url", url.schemepath()} + }); buffer content; const input_stream_uptr stream = read(url); if ( !stream || !streams::try_read_tail(content, stream) ) { @@ -190,6 +198,9 @@ namespace e2d } std::optional vfs::load_as_string(const url& url) const { + E2D_PROFILER_SCOPE_EX("vfs.sync_load_as_string", { + {"url", url.schemepath()} + }); return load_as_string_async(url).then([](auto&& src){ return std::optional(std::forward(src)); }).get_or_default(std::nullopt); @@ -197,6 +208,9 @@ namespace e2d stdex::promise vfs::load_as_string_async(const url& url) const { return state_->worker.async([this, url](){ + E2D_PROFILER_SCOPE_EX("vfs.load_as_string_async", { + {"url", url.schemepath()} + }); str content; const input_stream_uptr stream = read(url); if ( !stream || !streams::try_read_tail(content, stream) ) {