From ef3d04dee5f4bc23a9fa88a07805c3d5c489db0b Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 21 Aug 2019 18:48:09 +0300 Subject: [core] Export symbol placement update status from MapObserver --- src/mbgl/map/map_impl.cpp | 4 ++-- src/mbgl/map/map_impl.hpp | 2 +- src/mbgl/renderer/render_orchestrator.cpp | 10 +++++----- src/mbgl/renderer/render_tree.hpp | 1 + src/mbgl/renderer/renderer_impl.cpp | 3 ++- 5 files changed, 11 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp index ce36583ab3..ea55dfd1a8 100644 --- a/src/mbgl/map/map_impl.cpp +++ b/src/mbgl/map/map_impl.cpp @@ -130,11 +130,11 @@ void Map::Impl::onWillStartRenderingFrame() { } } -void Map::Impl::onDidFinishRenderingFrame(RenderMode renderMode, bool needsRepaint) { +void Map::Impl::onDidFinishRenderingFrame(RenderMode renderMode, bool needsRepaint, bool placemenChanged) { rendererFullyLoaded = renderMode == RenderMode::Full; if (mode == MapMode::Continuous) { - observer.onDidFinishRenderingFrame(MapObserver::RenderMode(renderMode)); + observer.onDidFinishRenderingFrame(MapObserver::RenderMode(renderMode), placemenChanged); if (needsRepaint || transform.inTransition()) { onUpdate(); diff --git a/src/mbgl/map/map_impl.hpp b/src/mbgl/map/map_impl.hpp index 13a68fb25e..416662f9e5 100644 --- a/src/mbgl/map/map_impl.hpp +++ b/src/mbgl/map/map_impl.hpp @@ -42,7 +42,7 @@ public: void onInvalidate() final; void onResourceError(std::exception_ptr) final; void onWillStartRenderingFrame() final; - void onDidFinishRenderingFrame(RenderMode, bool) final; + void onDidFinishRenderingFrame(RenderMode, bool, bool) final; void onWillStartRenderingMap() final; void onDidFinishRenderingMap() final; void onStyleImageMissing(const std::string&, std::function) final; diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index f9956dbc2a..983bc09485 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -361,9 +361,9 @@ std::unique_ptr RenderOrchestrator::createRenderTree(const UpdatePar } bool symbolBucketsChanged = false; - const bool placementChanged = !placement->stillRecent(updateParameters.timePoint, updateParameters.transformState.getZoom()); + renderTreeParameters->placementChanged = !placement->stillRecent(updateParameters.timePoint, updateParameters.transformState.getZoom()); std::set usedSymbolLayers; - if (placementChanged) { + if (renderTreeParameters->placementChanged) { placement = std::make_unique( updateParameters.transformState, updateParameters.mode, updateParameters.transitionOptions, updateParameters.crossSourceCollisions, @@ -374,13 +374,13 @@ std::unique_ptr RenderOrchestrator::createRenderTree(const UpdatePar const RenderLayer& layer = *it; if (crossTileSymbolIndex.addLayer(layer, updateParameters.transformState.getLatLng().longitude())) symbolBucketsChanged = true; - if (placementChanged) { + if (renderTreeParameters->placementChanged) { usedSymbolLayers.insert(layer.getID()); placement->placeLayer(layer, renderTreeParameters->transformParams.projMatrix, updateParameters.debugOptions & MapDebugOptions::Collision); } } - if (placementChanged) { + if (renderTreeParameters->placementChanged) { placement->commit(updateParameters.timePoint, updateParameters.transformState.getZoom()); crossTileSymbolIndex.pruneUnusedLayers(usedSymbolLayers); for (const auto& entry : renderSources) { @@ -391,7 +391,7 @@ std::unique_ptr RenderOrchestrator::createRenderTree(const UpdatePar } for (auto it = layersNeedPlacement.rbegin(); it != layersNeedPlacement.rend(); ++it) { - placement->updateLayerBuckets(*it, updateParameters.transformState, placementChanged || symbolBucketsChanged); + placement->updateLayerBuckets(*it, updateParameters.transformState, renderTreeParameters->placementChanged || symbolBucketsChanged); } renderTreeParameters->symbolFadeChange = placement->symbolFadeChange(updateParameters.timePoint); diff --git a/src/mbgl/renderer/render_tree.hpp b/src/mbgl/renderer/render_tree.hpp index cf62ccb03e..557442c0fa 100644 --- a/src/mbgl/renderer/render_tree.hpp +++ b/src/mbgl/renderer/render_tree.hpp @@ -52,6 +52,7 @@ public: float symbolFadeChange = 0.0f; bool needsRepaint = false; bool loaded = false; + bool placementChanged = false; }; class RenderTree { diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 990d9cd3ab..c12f12c06a 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -212,7 +212,8 @@ void Renderer::Impl::render(const RenderTree& renderTree) { observer->onDidFinishRenderingFrame( renderTreeParameters.loaded ? RendererObserver::RenderMode::Full : RendererObserver::RenderMode::Partial, - renderTreeParameters.needsRepaint + renderTreeParameters.needsRepaint, + renderTreeParameters.placementChanged ); if (!renderTreeParameters.loaded) { -- cgit v1.2.1