From 455527be5fca8895cf755cb6c8d0f16ff524a9a9 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Thu, 1 Mar 2018 18:06:14 +0300 Subject: [PATCH] Fixed user marks generation assignment. --- drape_frontend/backend_renderer.cpp | 1 - drape_frontend/read_manager.cpp | 28 +++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/drape_frontend/backend_renderer.cpp b/drape_frontend/backend_renderer.cpp index 9eab28c2f3..181e2a6242 100644 --- a/drape_frontend/backend_renderer.cpp +++ b/drape_frontend/backend_renderer.cpp @@ -174,7 +174,6 @@ void BackendRenderer::AcceptMessage(ref_ptr message) { ref_ptr msg = message; m_batchersPool->ReleaseBatcher(msg->GetKey()); - m_userMarkGenerator->GenerateUserMarksGeometry(msg->GetKey(), m_texMng); break; } diff --git a/drape_frontend/read_manager.cpp b/drape_frontend/read_manager.cpp index 78a4f37011..738363556e 100755 --- a/drape_frontend/read_manager.cpp +++ b/drape_frontend/read_manager.cpp @@ -105,13 +105,19 @@ void ReadManager::OnTaskFinished(threads::IRoutine * task) if (!task->IsCancelled()) { - m_activeTiles.erase(t->GetTileKey()); + auto const it = m_activeTiles.find(t->GetTileKey()); + ASSERT(it != m_activeTiles.end(), ()); + // Use the tile key from active tiles with the actual user marks generation. + auto const tileKey = *it; TTilesCollection tiles; - tiles.emplace(t->GetTileKey()); + tiles.emplace(tileKey); + + m_activeTiles.erase(it); + m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp(std::move(tiles), - false /* forceUpdateUserMarks */), + true /* forceUpdateUserMarks */), MessagePriority::Normal); } } @@ -237,7 +243,7 @@ void ReadManager::PushTaskBackForTileKey(TileKey const & tileKey, task->Init(tileInfo); { std::lock_guard lock(m_finishedTilesMutex); - m_activeTiles.insert(tileKey); + m_activeTiles.insert(TileKey(tileKey, m_generationCounter, m_userMarksGenerationCounter)); } m_pool->PushBack(task); } @@ -253,8 +259,20 @@ void ReadManager::CheckFinishedTiles(TTileInfoCollection const & requestedTiles, for (auto const & tile : requestedTiles) { - if (m_activeTiles.find(tile->GetTileKey()) == m_activeTiles.end()) + auto const it = m_activeTiles.find(tile->GetTileKey()); + if (it == m_activeTiles.end()) + { finishedTiles.emplace(tile->GetTileKey(), m_generationCounter, m_userMarksGenerationCounter); + } + else if (forceUpdateUserMarks) + { + // In case of active tile reading update its user marks generation. + // User marks will be generated after finishing of tile reading with correct tile key. + auto tileKey = *it; + tileKey.m_userMarksGeneration = m_userMarksGenerationCounter; + m_activeTiles.erase(it); + m_activeTiles.insert(tileKey); + } } if (!finishedTiles.empty())