diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/gl/render_custom_layer.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_heatmap_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_hillshade_layer.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 27 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_image_source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_tile_source.cpp | 3 |
15 files changed, 81 insertions, 11 deletions
diff --git a/src/mbgl/gl/render_custom_layer.cpp b/src/mbgl/gl/render_custom_layer.cpp index bb12ec1fcf..a41c5a499b 100644 --- a/src/mbgl/gl/render_custom_layer.cpp +++ b/src/mbgl/gl/render_custom_layer.cpp @@ -9,6 +9,7 @@ #include <mbgl/renderer/bucket.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/util/mat4.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -59,6 +60,7 @@ void RenderCustomLayer::prepare(const LayerPrepareParameters&) { } void RenderCustomLayer::render(PaintParameters& paintParameters) { + MBGL_TRACE_RENDERER_BEGIN(custom_layer); if (host != impl(baseImpl).host) { //If the context changed, deinitialize the previous one before initializing the new one. if (host && !contextDestroyed) { @@ -99,6 +101,7 @@ void RenderCustomLayer::render(PaintParameters& paintParameters) { // the viewport or Framebuffer. paintParameters.backend.getDefaultRenderable().getResource<gl::RenderableResource>().bind(); glContext.setDirtyState(); + MBGL_TRACE_RENDERER_END(custom_layer); } } // namespace mbgl 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 diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index c771bd100b..6b002eb22b 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -26,6 +26,7 @@ #include <mbgl/util/math.hpp> #include <mbgl/util/string.hpp> #include <mbgl/util/logging.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -49,7 +50,11 @@ public: private: bool hasRenderPass(RenderPass pass) const override { return layer.get().hasRenderPass(pass); } void upload(gfx::UploadPass& pass) const override { layer.get().upload(pass); } - void render(PaintParameters& parameters) const override { layer.get().render(parameters); } + void render(PaintParameters& parameters) const override { + MBGL_TRACE_RENDERER_BEGIN(layerrenderitem); + layer.get().render(parameters); + MBGL_TRACE_RENDERER_END(layerrenderitem); + } const std::string& getName() const override { return layer.get().getID(); } uint32_t index; diff --git a/src/mbgl/renderer/renderer.cpp b/src/mbgl/renderer/renderer.cpp index 5afbbbd47e..af507ba823 100644 --- a/src/mbgl/renderer/renderer.cpp +++ b/src/mbgl/renderer/renderer.cpp @@ -5,6 +5,7 @@ #include <mbgl/renderer/render_tree.hpp> #include <mbgl/gfx/backend_scope.hpp> #include <mbgl/annotation/annotation_manager.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -25,12 +26,22 @@ void Renderer::setObserver(RendererObserver* observer) { impl->orchestrator.setObserver(observer); } -void Renderer::render(const std::shared_ptr<UpdateParameters>& updateParameters) { +void Renderer::render(const std::shared_ptr<UpdateParameters>& updateParameters) { // ToDo: Change th assert(updateParameters); + MBGL_TRACE_RENDERER_BEGIN(render); + MBGL_TRACE_RENDERER_BEGIN(orchestrate); if (auto renderTree = impl->orchestrator.createRenderTree(updateParameters)) { + MBGL_TRACE_RENDERER_END(orchestrate) + MBGL_TRACE_RENDERER_BEGIN(prepare); renderTree->prepare(); + MBGL_TRACE_RENDERER_END(prepare) + MBGL_TRACE_RENDERER_BEGIN(renderimpl) impl->render(*renderTree); + MBGL_TRACE_RENDERER_END(renderimpl) + } else { + MBGL_TRACE_RENDERER_END(orchestrate) } + MBGL_TRACE_RENDERER_END(render); } std::vector<Feature> Renderer::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options) const { diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 113840d059..a06b9bd435 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -14,6 +14,7 @@ #include <mbgl/renderer/render_tree.hpp> #include <mbgl/util/string.hpp> #include <mbgl/util/logging.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -43,6 +44,8 @@ void Renderer::Impl::setObserver(RendererObserver* observer_) { } void Renderer::Impl::render(const RenderTree& renderTree) { + MBGL_TRACE_RENDERER_BEGIN(waitrenderable); + if (renderState == RenderState::Never) { observer->onWillStartRenderingMap(); } @@ -79,6 +82,9 @@ void Renderer::Impl::render(const RenderTree& renderTree) { const auto& sourceRenderItems = renderTree.getSourceRenderItems(); const auto& layerRenderItems = renderTree.getLayerRenderItems(); + MBGL_TRACE_RENDERER_END(waitrenderable); + MBGL_TRACE_RENDERER_BEGIN(upload); + // - UPLOAD PASS ------------------------------------------------------------------------------- // Uploads all required buffers and images before we do any actual rendering. { @@ -96,6 +102,10 @@ void Renderer::Impl::render(const RenderTree& renderTree) { renderTree.getPatternAtlas().upload(*uploadPass); } + MBGL_TRACE_RENDERER_END(upload) + MBGL_TRACE_RENDERER_BEGIN(draw); + MBGL_TRACE_RENDERER_BEGIN(extrusions); + // - 3D PASS ------------------------------------------------------------------------------------- // Renders any 3D layers bottom-to-top to unique FBOs with texture attachments, but share the same // depth rbo between them. @@ -123,6 +133,9 @@ void Renderer::Impl::render(const RenderTree& renderTree) { } } + MBGL_TRACE_RENDERER_END(extrusions) + MBGL_TRACE_RENDERER_BEGIN(clear); + // - CLEAR ------------------------------------------------------------------------------------- // Renders the backdrop of the OpenGL view. This also paints in areas where we don't have any // tiles whatsoever. @@ -136,6 +149,9 @@ void Renderer::Impl::render(const RenderTree& renderTree) { parameters.renderPass = parameters.encoder->createRenderPass("main buffer", { parameters.backend.getDefaultRenderable(), color, 1, 0 }); } + MBGL_TRACE_RENDERER_END(clear) + MBGL_TRACE_RENDERER_BEGIN(opaque); + // Actually render the layers parameters.depthRangeSize = 1 - (layerRenderItems.size() + 2) * parameters.numSublayers * parameters.depthEpsilon; @@ -157,6 +173,9 @@ void Renderer::Impl::render(const RenderTree& renderTree) { } } + MBGL_TRACE_RENDERER_END(opaque) + MBGL_TRACE_RENDERER_BEGIN(translucent); + // - TRANSLUCENT PASS -------------------------------------------------------------------------- // Make a second pass, rendering translucent objects. This time, we render bottom-to-top. { @@ -174,6 +193,9 @@ void Renderer::Impl::render(const RenderTree& renderTree) { } } + MBGL_TRACE_RENDERER_END(translucent) + MBGL_TRACE_RENDERER_BEGIN(debug); + // - DEBUG PASS -------------------------------------------------------------------------------- // Renders debug overlays. { @@ -188,6 +210,9 @@ void Renderer::Impl::render(const RenderTree& renderTree) { } } + MBGL_TRACE_RENDERER_END(debug) + MBGL_TRACE_RENDERER_BEGIN(flushencoder); + #if not defined(NDEBUG) if (parameters.debugOptions & MapDebugOptions::StencilClip) { // Render tile clip boundaries, using stencil buffer to calculate fill color. @@ -220,6 +245,8 @@ void Renderer::Impl::render(const RenderTree& renderTree) { renderState = RenderState::Fully; observer->onDidFinishRenderingMap(); } + MBGL_TRACE_RENDERER_END(flushencoder) + MBGL_TRACE_RENDERER_END(draw) } void Renderer::Impl::reduceMemoryUse() { diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 6d197df9db..d00f2794a3 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -12,6 +12,7 @@ #include <mbgl/util/tile_cover.hpp> #include <mbgl/util/logging.hpp> #include <mbgl/util/constants.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -29,7 +30,7 @@ void ImageSourceRenderData::render(PaintParameters& parameters) const { if (!bucket || !(parameters.debugOptions & MapDebugOptions::TileBorders)) { return; } - + MBGL_TRACE_RENDERER_BEGIN(imagesourcerenderdata); static const style::Properties<>::PossiblyEvaluated properties {}; static const DebugProgram::Binders paintAttributeData(properties, 0); @@ -64,6 +65,7 @@ void ImageSourceRenderData::render(PaintParameters& parameters) const { "image" ); } + MBGL_TRACE_RENDERER_END(imagesourcerenderdata); } RenderImageSource::RenderImageSource(Immutable<style::ImageSource::Impl> impl_) diff --git a/src/mbgl/renderer/sources/render_tile_source.cpp b/src/mbgl/renderer/sources/render_tile_source.cpp index 221f976c50..d02752aea5 100644 --- a/src/mbgl/renderer/sources/render_tile_source.cpp +++ b/src/mbgl/renderer/sources/render_tile_source.cpp @@ -9,6 +9,7 @@ #include <mbgl/tile/vector_tile.hpp> #include <mbgl/util/constants.hpp> #include <mbgl/util/math.hpp> +#include <mbgl/perf/runtime_metrics.hpp> namespace mbgl { @@ -37,9 +38,11 @@ void TileSourceRenderItem::upload(gfx::UploadPass& parameters) const { } void TileSourceRenderItem::render(PaintParameters& parameters) const { + MBGL_TRACE_RENDERER_BEGIN(tilesourcerenderitem); for (auto& tile : *renderTiles) { tile.finishRender(parameters); } + MBGL_TRACE_RENDERER_END(tilesourcerenderitem); } RenderTileSource::RenderTileSource(Immutable<style::Source::Impl> impl_) |