diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 6d6291d00..6671c76c9 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1679,22 +1679,20 @@ void GLCanvas3D::render() if (wxGetApp().plater()->is_render_statistic_dialog_visible()) { ImGuiWrapper& imgui = *wxGetApp().imgui(); imgui.begin(std::string("Render statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); - imgui.text("Last frame: "); + imgui.text("Last frame:"); ImGui::SameLine(); - imgui.text(std::to_string(m_render_stats.last_frame)); + long long average = m_render_stats.get_average(); + imgui.text(std::to_string(average)); ImGui::SameLine(); - imgui.text(" ms"); - imgui.text("FPS: "); + imgui.text("ms"); + imgui.text("FPS:"); ImGui::SameLine(); - imgui.text(std::to_string(static_cast<int>(1000.0f / static_cast<float>(m_render_stats.last_frame)))); -// imgui.text("Imgui FPS: "); -// ImGui::SameLine(); -// imgui.text(std::to_string(static_cast<int>(ImGui::GetIO().Framerate))); + imgui.text(std::to_string((average == 0) ? 0 : static_cast<int>(1000.0f / static_cast<float>(average)))); ImGui::Separator(); - imgui.text("Compressed textures: "); + imgui.text("Compressed textures:"); ImGui::SameLine(); imgui.text(OpenGLManager::are_compressed_textures_supported() ? "supported" : "not supported"); - imgui.text("Max texture size: "); + imgui.text("Max texture size:"); ImGui::SameLine(); imgui.text(std::to_string(OpenGLManager::get_gl_info().get_max_tex_size())); imgui.end(); @@ -1707,8 +1705,6 @@ void GLCanvas3D::render() std::string tooltip; - - // Negative coordinate means out of the window, likely because the window was deactivated. // In that case the tooltip should be hidden. if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.) { @@ -1745,7 +1741,7 @@ void GLCanvas3D::render() #if ENABLE_RENDER_STATISTICS auto end_time = std::chrono::high_resolution_clock::now(); - m_render_stats.last_frame = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count(); + m_render_stats.add_frame(std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count()); #endif // ENABLE_RENDER_STATISTICS } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 1329a8744..b8be40401 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -320,11 +320,22 @@ class GLCanvas3D }; #if ENABLE_RENDER_STATISTICS - struct RenderStats + class RenderStats { - long long last_frame; + std::queue<std::pair<long long, long long>> m_frames; + long long m_curr_total{ 0 }; - RenderStats() : last_frame(0) {} + public: + void add_frame(long long frame) { + long long now = wxGetLocalTimeMillis().GetValue(); + if (!m_frames.empty() && now - m_frames.front().first > 1000) { + m_curr_total -= m_frames.front().second; + m_frames.pop(); + } + m_curr_total += frame; + m_frames.push({ now, frame }); + } + long long get_average() const { return m_frames.empty() ? 0 : m_curr_total / m_frames.size(); } }; #endif // ENABLE_RENDER_STATISTICS