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 /src/mbgl/renderer/layers | |
parent | 97cab6365bd083d162544eb4bcae4ebd47a7ecae (diff) | |
download | qtlocation-mapboxgl-6f33547d757fb1394d1e643cdc226ae30b2edbc6.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 'src/mbgl/renderer/layers')
9 files changed, 27 insertions, 8 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 694addcc97..bea7b1fa6f 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -11,6 +11,7 @@ #include <mbgl/util/tile_cover.hpp> #include <mbgl/map/transform_state.hpp> #include <mbgl/gfx/cull_face_mode.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -65,7 +66,7 @@ bool RenderBackgroundLayer::hasCrossfade() const { void RenderBackgroundLayer::render(PaintParameters& parameters) { // Note that for bottommost layers without a pattern, the background color is drawn with // glClear rather than this method. - + MBGL_TRACE_RENDERER_BEGIN(background_layer); const Properties<>::PossiblyEvaluated properties; const BackgroundProgram::Binders paintAttributeData(properties, 0); @@ -152,6 +153,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters) { ); } } + MBGL_TRACE_RENDERER_END(background_layer); } optional<Color> RenderBackgroundLayer::getSolidBackground() const { diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index b88a026e11..c870c34b0b 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -10,6 +10,7 @@ #include <mbgl/gfx/cull_face_mode.hpp> #include <mbgl/util/math.hpp> #include <mbgl/util/intersection_tests.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -63,7 +64,7 @@ void RenderCircleLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } - + MBGL_TRACE_RENDERER_BEGIN(circle_layer); for (const RenderTile& tile : *renderTiles) { const LayerRenderData* renderData = getRenderDataForPass(tile, parameters.pass); if (!renderData) { @@ -122,6 +123,7 @@ void RenderCircleLayer::render(PaintParameters& parameters) { getID() ); } + MBGL_TRACE_RENDERER_END(circle_layer); } GeometryCoordinate projectPoint(const GeometryCoordinate& p, const mat4& posMatrix, const Size& size) { diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index af0bc788d0..df3bab4d92 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -16,6 +16,7 @@ #include <mbgl/tile/tile.hpp> #include <mbgl/util/intersection_tests.hpp> #include <mbgl/util/math.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -71,7 +72,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { if (parameters.pass != RenderPass::Translucent) { return; } - + MBGL_TRACE_RENDERER_BEGIN(extrusion_layer); const auto& evaluated = static_cast<const FillExtrusionLayerProperties&>(*evaluatedProperties).evaluated; const auto& crossfade = static_cast<const FillExtrusionLayerProperties&>(*evaluatedProperties).crossfade; if (evaluatedProperties->renderPasses == mbgl::underlying_type(RenderPass::None)) { @@ -224,6 +225,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { // to prevent the second draw in cases where we have coincident polygons. drawTiles(parameters.stencilModeFor3D(), parameters.colorModeForRenderPass(), "color"); } + MBGL_TRACE_RENDERER_END(extrusion_layer); } bool RenderFillExtrusionLayer::queryIntersectsFeature(const GeometryCoordinates& queryGeometry, diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index bbfcef7aba..788415cc16 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -17,6 +17,7 @@ #include <mbgl/tile/tile.hpp> #include <mbgl/util/intersection_tests.hpp> #include <mbgl/util/math.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -75,6 +76,7 @@ bool RenderFillLayer::hasCrossfade() const { void RenderFillLayer::render(PaintParameters& parameters) { assert(renderTiles); + MBGL_TRACE_RENDERER_BEGIN(fill_layer); if (unevaluated.get<FillPattern>().isUndefined()) { parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : *renderTiles) { @@ -248,6 +250,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { } } } + MBGL_TRACE_RENDERER_END(fill_layer); } bool RenderFillLayer::queryIntersectsFeature(const GeometryCoordinates& queryGeometry, diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 797aedd297..8a4f53463f 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -14,6 +14,7 @@ #include <mbgl/gfx/context.hpp> #include <mbgl/util/math.hpp> #include <mbgl/util/intersection_tests.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -72,7 +73,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } - + MBGL_TRACE_RENDERER_BEGIN(heatmap_layer); if (parameters.pass == RenderPass::Pass3D) { const auto& viewportSize = parameters.staticData.backendSize; const auto size = Size{viewportSize.width / 4, viewportSize.height / 4}; @@ -196,6 +197,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters) { getID() ); } + MBGL_TRACE_RENDERER_END(heatmap_layer); } void RenderHeatmapLayer::updateColorRamp() { diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index b570d9c4c9..5549072319 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -13,6 +13,7 @@ #include <mbgl/gfx/offscreen_texture.hpp> #include <mbgl/gfx/render_pass.hpp> #include <mbgl/util/geo.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -79,6 +80,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters) { assert(renderTiles); if (parameters.pass != RenderPass::Translucent && parameters.pass != RenderPass::Pass3D) return; + MBGL_TRACE_RENDERER_BEGIN(hillshade_layer); const auto& evaluated = static_cast<const HillshadeLayerProperties&>(*evaluatedProperties).evaluated; auto draw = [&] (const mat4& matrix, const auto& vertexBuffer, @@ -221,9 +223,8 @@ void RenderHillshadeLayer::render(PaintParameters& parameters) { }); } } - - } + MBGL_TRACE_RENDERER_END(hillshade_layer); } } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 588cf6286c..7e0f2a89a7 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -16,6 +16,7 @@ #include <mbgl/tile/tile.hpp> #include <mbgl/util/intersection_tests.hpp> #include <mbgl/util/math.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -95,7 +96,7 @@ void RenderLineLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } - + MBGL_TRACE_RENDERER_BEGIN(line_layer); parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : *renderTiles) { @@ -217,6 +218,7 @@ void RenderLineLayer::render(PaintParameters& parameters) { LineProgram::TextureBindings{}); } } + MBGL_TRACE_RENDERER_END(line_layer); } namespace { diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 8a1a8a6c28..79cca99903 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -9,6 +9,7 @@ #include <mbgl/tile/tile.hpp> #include <mbgl/gfx/cull_face_mode.hpp> #include <mbgl/style/layers/raster_layer_impl.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -90,6 +91,7 @@ void RenderRasterLayer::render(PaintParameters& parameters) { if (parameters.pass != RenderPass::Translucent || (!renderTiles && !imageData)) { return; } + MBGL_TRACE_RENDERER_BEGIN(raster_layer); const auto& evaluated = static_cast<const RasterLayerProperties&>(*evaluatedProperties).evaluated; RasterProgram::Binders paintAttributeData{ evaluated, 0 }; @@ -199,6 +201,7 @@ void RenderRasterLayer::render(PaintParameters& parameters) { } } } + MBGL_TRACE_RENDERER_END(raster_layer); } } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 17376fd864..d41e76fb28 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -19,6 +19,7 @@ #include <mbgl/layout/symbol_layout.hpp> #include <mbgl/layout/symbol_layout.hpp> #include <mbgl/util/math.hpp> +#include <mbgl/perf/runtime_metrics.hpp> #include <cmath> #include <set> @@ -345,7 +346,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } - + MBGL_TRACE_RENDERER_BEGIN(symbol_layer); const bool sortFeaturesByKey = !impl(baseImpl).layout.get<SymbolSortKey>().isUndefined(); std::multiset<RenderableSegment> renderableSegments; @@ -540,6 +541,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters) { } } } + MBGL_TRACE_RENDERER_END(symbol_layer); } // static |