summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorGali Nelle <galinelle.mapbox@gmail.com>2020-02-09 17:09:01 +0200
committerGali Nelle <galinelle.mapbox@gmail.com>2020-02-17 13:35:41 +0200
commit6f33547d757fb1394d1e643cdc226ae30b2edbc6 (patch)
tree02e76ddcb9e26381a9152e55287aa4d4d2d87fa5 /platform
parent97cab6365bd083d162544eb4bcae4ebd47a7ecae (diff)
downloadqtlocation-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.cpp11
-rw-r--r--platform/glfw/glfw_renderer_frontend.hpp2
-rw-r--r--platform/glfw/glfw_view.cpp17
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;