diff options
author | Gali Nelle <galinelle.mapbox@gmail.com> | 2020-02-09 17:09:01 +0200 |
---|---|---|
committer | Gali Nelle <galinelle.mapbox@gmail.com> | 2020-02-17 13:35:41 +0200 |
commit | 6f33547d757fb1394d1e643cdc226ae30b2edbc6 (patch) | |
tree | 02e76ddcb9e26381a9152e55287aa4d4d2d87fa5 /platform | |
parent | 97cab6365bd083d162544eb4bcae4ebd47a7ecae (diff) | |
download | qtlocation-mapboxgl-upstream/galinelle_mbgl_tracing.tar.gz |
Add tracing entry points in the rendering pipelineupstream/galinelle_mbgl_tracing
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.
Diffstat (limited to 'platform')
-rw-r--r-- | platform/glfw/glfw_renderer_frontend.cpp | 11 | ||||
-rw-r--r-- | platform/glfw/glfw_renderer_frontend.hpp | 2 | ||||
-rw-r--r-- | platform/glfw/glfw_view.cpp | 17 |
3 files changed, 29 insertions, 1 deletions
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 <mbgl/renderer/renderer.hpp> #include <mbgl/gfx/backend_scope.hpp> +#include <mbgl/perf/runtime_metrics.hpp> GLFWRendererFrontend::GLFWRendererFrontend(std::unique_ptr<mbgl::Renderer> 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<mbgl::Renderer> renderer; std::shared_ptr<mbgl::UpdateParameters> 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 <mbgl/util/logging.hpp> #include <mbgl/util/platform.hpp> #include <mbgl/util/string.hpp> +#include <mbgl/perf/runtime_metrics.hpp> #include <mapbox/cheap_ruler.hpp> #include <mapbox/geometry.hpp> #include <mapbox/geojson.hpp> +#include <fstream> +#include <string> +#include <iostream> + #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; |