From 6f33547d757fb1394d1e643cdc226ae30b2edbc6 Mon Sep 17 00:00:00 2001 From: Gali Nelle Date: Sun, 9 Feb 2020 17:09:01 +0200 Subject: Add tracing entry points in the rendering pipeline This also includes a default tracing implementation that does not require hooking into a platform instrumentation, but simply stores timestamps into an array that can be dumped into a json file. Among possible use cases, dumping such metrics to file in CI to detect regressions of specific stages of the pipeline. --- platform/glfw/glfw_renderer_frontend.cpp | 11 ++++++++++- platform/glfw/glfw_renderer_frontend.hpp | 2 ++ platform/glfw/glfw_view.cpp | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) (limited to 'platform') diff --git a/platform/glfw/glfw_renderer_frontend.cpp b/platform/glfw/glfw_renderer_frontend.cpp index 46f1309901..0c180985b8 100644 --- a/platform/glfw/glfw_renderer_frontend.cpp +++ b/platform/glfw/glfw_renderer_frontend.cpp @@ -2,6 +2,7 @@ #include #include +#include GLFWRendererFrontend::GLFWRendererFrontend(std::unique_ptr renderer_, GLFWView& glfwView_) : glfwView(glfwView_) @@ -30,7 +31,8 @@ void GLFWRendererFrontend::render() { assert(renderer); if (!updateParameters) return; - + MBGL_TRACE_RENDERER_BEGINRECORD(update); + MBGL_TRACE_RENDERER_BEGIN(attach); mbgl::gfx::BackendScope guard { glfwView.getRendererBackend(), mbgl::gfx::BackendScope::ScopeType::Implicit }; // onStyleImageMissing might be called during a render. The user implemented method @@ -38,10 +40,17 @@ void GLFWRendererFrontend::render() { // Copy the shared pointer here so that the parameters aren't destroyed while `render(...)` is // still using them. auto updateParameters_ = updateParameters; + MBGL_TRACE_RENDERER_END(attach); renderer->render(updateParameters_); + MBGL_TRACE_RENDERER_ENDRECORD(update); } mbgl::Renderer* GLFWRendererFrontend::getRenderer() { assert(renderer); return renderer.get(); } + +void GLFWRendererFrontend::setRecordFrame(bool enabled) +{ + recordFrames = enabled; +} diff --git a/platform/glfw/glfw_renderer_frontend.hpp b/platform/glfw/glfw_renderer_frontend.hpp index c992fe20fe..966f30d69a 100644 --- a/platform/glfw/glfw_renderer_frontend.hpp +++ b/platform/glfw/glfw_renderer_frontend.hpp @@ -21,9 +21,11 @@ public: void render(); mbgl::Renderer* getRenderer(); + void setRecordFrame(bool enabled); private: GLFWView& glfwView; std::unique_ptr renderer; std::shared_ptr updateParameters; + bool recordFrames = false; }; diff --git a/platform/glfw/glfw_view.cpp b/platform/glfw/glfw_view.cpp index 3d10f2c654..1c042983aa 100644 --- a/platform/glfw/glfw_view.cpp +++ b/platform/glfw/glfw_view.cpp @@ -23,11 +23,16 @@ #include #include #include +#include #include #include #include +#include +#include +#include + #if MBGL_USE_GLES2 #define GLFW_INCLUDE_ES2 #endif // MBGL_USE_GLES2 @@ -234,6 +239,18 @@ void GLFWView::onKey(GLFWwindow *window, int key, int /*scancode*/, int action, case GLFW_KEY_K: view->addRandomCustomPointAnnotations(1); break; + case GLFW_KEY_H: + MBGL_IF_TRACING(if (mbgl::util::Tracer::get().isCollectingData()) { \ + mbgl::util::Tracer::get().setCollectData(false); \ + std::string json = mbgl::util::Tracer::get().dumpAll(true); \ + printf("%s\n", json.c_str()); \ + std::ofstream out("/tmp/mbgl_glfw_trace.json"); \ + out << json; \ + out.close(); \ + } else { \ + mbgl::util::Tracer::get().setCollectData(true); \ + }) + break; case GLFW_KEY_L: view->addRandomLineAnnotations(1); break; -- cgit v1.2.1