Skip to content

Commit

Permalink
Fixed MapRenderer.captureRendering sometimes failing to respond due t…
Browse files Browse the repository at this point in the history
…o internal synchronisation issues
  • Loading branch information
Mark Tehver committed Oct 11, 2017
1 parent 01dd47b commit bf95fc2
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
11 changes: 9 additions & 2 deletions all/native/renderers/MapRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,7 @@ namespace carto {
}

handleRenderThreadCallbacks();
handleRenderCaptureCallbacks();
handleRendererCaptureCallbacks();

// Call listener to inform we are idle now, if no redraw request is pending
if (!_redrawPending) {
Expand Down Expand Up @@ -819,7 +819,7 @@ namespace carto {
}
}

void MapRenderer::handleRenderCaptureCallbacks() {
void MapRenderer::handleRendererCaptureCallbacks() {
int width, height;
{
std::lock_guard<std::recursive_mutex> lock(_mutex);
Expand All @@ -833,6 +833,8 @@ namespace carto {
std::lock_guard<std::mutex> lock(_rendererCaptureListenersMutex);
_rendererCaptureListeners.swap(rendererCaptureListeners);
}

bool callbacksPending = false;
for (std::size_t i = 0; i < rendererCaptureListeners.size(); i++) {
const DirectorPtr<RendererCaptureListener>& listener = rendererCaptureListeners[i].first;
bool waitWhileUpdating = rendererCaptureListeners[i].second;
Expand All @@ -845,7 +847,9 @@ namespace carto {
}
}
if (_redrawPending || layersUpdating || !_cullWorker->isIdle() || !_billboardPlacementWorker->isIdle()) {
std::lock_guard<std::mutex> lock(_rendererCaptureListenersMutex);
_rendererCaptureListeners.push_back(rendererCaptureListeners[i]);
callbacksPending = true;
continue;
}
}
Expand All @@ -858,6 +862,9 @@ namespace carto {

listener->onMapRendered(captureBitmap);
}
if (callbacksPending) {
requestRedraw();
}
}

MapRenderer::OptionsListener::OptionsListener(const std::shared_ptr<MapRenderer>& mapRenderer) : _mapRenderer(mapRenderer)
Expand Down
2 changes: 1 addition & 1 deletion all/native/renderers/MapRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ namespace carto {
void drawLayers(float deltaSeconds, const ViewState& viewState);

void handleRenderThreadCallbacks();
void handleRenderCaptureCallbacks();
void handleRendererCaptureCallbacks();

static const int BILLBOARD_PLACEMENT_TASK_DELAY;

Expand Down

0 comments on commit bf95fc2

Please sign in to comment.