summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/renderer_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/renderer_impl.cpp')
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index af0c491e15..f26a2a26f9 100644
--- a/src/mbgl/renderer/renderer_impl.cpp
+++ b/src/mbgl/renderer/renderer_impl.cpp
@@ -29,6 +29,8 @@
#include <mbgl/util/string.hpp>
#include <mbgl/util/logging.hpp>
+#include <iostream>
+
namespace mbgl {
using namespace style;
@@ -83,6 +85,9 @@ void Renderer::Impl::setObserver(RendererObserver* observer_) {
}
void Renderer::Impl::render(const UpdateParameters& updateParameters) {
+ static uint32_t frameID = 0;
+ std::chrono::steady_clock::time_point started = std::chrono::steady_clock::now();
+ std::cout << frameID++ << ", ";
if (updateParameters.mode == MapMode::Still) {
// Don't load/render anyting in still mode until explicitly requested.
if (!updateParameters.stillImageRequest) {
@@ -365,6 +370,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
order.emplace_back(RenderItem { *layer, source });
}
+ std::chrono::steady_clock::time_point builtTiles = std::chrono::steady_clock::now();
+ std::cout << std::chrono::duration_cast<std::chrono::microseconds>(builtTiles - started).count() << ", ";
+
bool symbolBucketsChanged = false;
if (parameters.mapMode == MapMode::Still) {
// TODO: Think about right way for symbol index to handle still rendering
@@ -396,6 +404,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
}
parameters.symbolFadeChange = placement->symbolFadeChange(parameters.timePoint);
+
+ std::chrono::steady_clock::time_point placementTime = std::chrono::steady_clock::now();
+ std::cout << std::chrono::duration_cast<std::chrono::microseconds>(placementTime - builtTiles).count() << ", ";
if (placementChanged || symbolBucketsChanged) {
for (auto it = order.rbegin(); it != order.rend(); ++it) {
@@ -404,6 +415,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
}
}
}
+
+ std::chrono::steady_clock::time_point updateOpacities = std::chrono::steady_clock::now();
+ std::cout << std::chrono::duration_cast<std::chrono::microseconds>(updateOpacities - placementTime).count() << ", ";
// - UPLOAD PASS -------------------------------------------------------------------------------
// Uploads all required buffers and images before we do any actual rendering.
@@ -420,6 +434,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
}
}
}
+
+ std::chrono::steady_clock::time_point uploadTime = std::chrono::steady_clock::now();
+ std::cout << std::chrono::duration_cast<std::chrono::microseconds>(uploadTime - updateOpacities).count() << ", ";
// - 3D PASS -------------------------------------------------------------------------------------
// Renders any 3D layers bottom-to-top to unique FBOs with texture attachments, but share the same
@@ -530,6 +547,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// Actually render the layers
+ uint64_t reprojectTime = 0;
+ uint64_t symbolTime = 0;
+
parameters.depthRangeSize = 1 - (order.size() + 2) * parameters.numSublayers * parameters.depthEpsilon;
// - OPAQUE PASS -------------------------------------------------------------------------------
@@ -559,7 +579,14 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
parameters.currentLayer = i;
if (it->layer.hasRenderPass(parameters.pass)) {
MBGL_DEBUG_GROUP(parameters.context, it->layer.getID());
- it->layer.render(parameters, it->source);
+ if (it->layer.as<RenderSymbolLayer>()) {
+ auto timing = it->layer.as<RenderSymbolLayer>()->renderWithTiming(parameters, it->source);
+ reprojectTime += timing.first;
+ symbolTime += timing.second;
+ } else {
+ it->layer.render(parameters, it->source);
+ }
+
}
}
}
@@ -630,6 +657,18 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// Cleanup only after signaling completion
parameters.context.performCleanup();
+
+ std::chrono::steady_clock::time_point renderTime = std::chrono::steady_clock::now();
+
+ symbolTime -= reprojectTime;
+ std::cout << reprojectTime << ", " << symbolTime << ", ";
+
+ uint64_t totalRenderTime = std::chrono::duration_cast<std::chrono::microseconds>(renderTime - uploadTime).count();
+ std::cout << totalRenderTime - symbolTime - reprojectTime << ", ";
+
+
+ std::cout << std::chrono::duration_cast<std::chrono::microseconds>(renderTime - started).count() << std::endl;
+
}
std::vector<Feature> Renderer::Impl::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options) const {