Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-06-26 20:22:34 +0300
committerGitHub <noreply@github.com>2017-06-26 20:22:34 +0300
commit0f2b01c7115207af83fe3551298b97daa108572e (patch)
tree357fd096c753abc120d389819e0e998c77d832c8
parentca7a32dcacdc633cc28aff41b924fafc0a4d2ac3 (diff)
parent025b91a5055823be6ba77d1706962e90bc2421c2 (diff)
Merge pull request #6392 from rokuz/fixed-crashed-in-drapebeta-881
Fixed crashes on enter background in drape
-rw-r--r--drape/drape_tests/CMakeLists.txt1
-rw-r--r--drape/drape_tests/drape_tests.pro1
-rw-r--r--drape/drape_tests/object_pool_tests.cpp (renamed from drape_frontend/drape_frontend_tests/object_pool_tests.cpp)8
-rw-r--r--drape/object_pool.hpp63
-rw-r--r--drape_frontend/backend_renderer.cpp6
-rw-r--r--drape_frontend/backend_renderer.hpp3
-rw-r--r--drape_frontend/base_renderer.cpp9
-rw-r--r--drape_frontend/batchers_pool.hpp25
-rw-r--r--drape_frontend/drape_engine.cpp12
-rw-r--r--drape_frontend/drape_frontend_tests/CMakeLists.txt1
-rw-r--r--drape_frontend/drape_frontend_tests/drape_frontend_tests.pro1
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp2
-rw-r--r--drape_frontend/metaline_manager.hpp2
-rwxr-xr-xdrape_frontend/read_manager.cpp42
-rwxr-xr-xdrape_frontend/read_manager.hpp6
-rw-r--r--drape_frontend/tile_info.cpp2
-rwxr-xr-xdrape_frontend/tile_key.cpp10
-rwxr-xr-xdrape_frontend/tile_key.hpp8
-rw-r--r--drape_frontend/traffic_generator.cpp6
19 files changed, 121 insertions, 87 deletions
diff --git a/drape/drape_tests/CMakeLists.txt b/drape/drape_tests/CMakeLists.txt
index 6852b51ae3..b89241f6db 100644
--- a/drape/drape_tests/CMakeLists.txt
+++ b/drape/drape_tests/CMakeLists.txt
@@ -29,6 +29,7 @@ set(
img.cpp
img.hpp
memory_comparer.hpp
+ object_pool_tests.cpp
pointers_tests.cpp
static_texture_tests.cpp
stipple_pen_tests.cpp
diff --git a/drape/drape_tests/drape_tests.pro b/drape/drape_tests/drape_tests.pro
index b06a55034b..7d766f046d 100644
--- a/drape/drape_tests/drape_tests.pro
+++ b/drape/drape_tests/drape_tests.pro
@@ -38,6 +38,7 @@ SOURCES += \
glyph_mng_tests.cpp \
glyph_packer_test.cpp \
img.cpp \
+ object_pool_tests.cpp \
pointers_tests.cpp \
static_texture_tests.cpp \
stipple_pen_tests.cpp \
diff --git a/drape_frontend/drape_frontend_tests/object_pool_tests.cpp b/drape/drape_tests/object_pool_tests.cpp
index e87bd10c26..3870b383d0 100644
--- a/drape_frontend/drape_frontend_tests/object_pool_tests.cpp
+++ b/drape/drape_tests/object_pool_tests.cpp
@@ -19,12 +19,12 @@ public:
~vec2() { m_counter--; }
};
-int vec2::m_counter;
+int vec2::m_counter = 0;
UNIT_TEST(ObjectPoolFilling)
{
vec2::vec2Factory factory;
- ObjectPool<vec2, vec2::vec2Factory> pool(1, factory);
+ dp::ObjectPool<vec2, vec2::vec2Factory> pool(1, factory);
vec2 *pt1, *pt2, *pt3;
pt1 = pool.Get();
pool.Return(pt1);
@@ -40,7 +40,7 @@ UNIT_TEST(ObjectPoolClearing_1)
{
vec2::m_counter = 0;
vec2::vec2Factory factory;
- ObjectPool<vec2, vec2::vec2Factory> *pool = new ObjectPool<vec2, vec2::vec2Factory>(1, factory);
+ auto pool = new dp::ObjectPool<vec2, vec2::vec2Factory>(1, factory);
vec2 *pt1, *pt2, *pt3;
pt1 = pool->Get();
pool->Return(pt1);
@@ -59,7 +59,7 @@ UNIT_TEST(ObjectPoolClearing_2)
{
vec2::m_counter = 0;
vec2::vec2Factory factory;
- ObjectPool<vec2, vec2::vec2Factory> *pool = new ObjectPool<vec2, vec2::vec2Factory>(100, factory);
+ auto pool = new dp::ObjectPool<vec2, vec2::vec2Factory>(100, factory);
vec2 *pt1, *pt2, *pt3;
pt1 = pool->Get();
pool->Return(pt1);
diff --git a/drape/object_pool.hpp b/drape/object_pool.hpp
index 3240ec6540..14b7e373fb 100644
--- a/drape/object_pool.hpp
+++ b/drape/object_pool.hpp
@@ -1,28 +1,28 @@
#pragma once
#include "base/assert.hpp"
-#include "base/mutex.hpp"
+#include "base/logging.hpp"
-#include "std/list.hpp"
-#include "std/set.hpp"
+#include <list>
+#include <mutex>
+#include <set>
+#include <string>
-template <typename T, typename Factory>
-class ObjectPool
+#define LOG_OBJECT_POOL
+
+namespace dp
+{
+template<typename T, typename Factory>
+class ObjectPool final
{
-private:
-#ifdef DEBUG
- set<T *> m_checkerSet;
-#endif
- list<T *> m_pool;
- Factory m_factory;
- threads::Mutex m_lock;
public:
- ObjectPool(int count, Factory const & f) : m_factory(f)
+ ObjectPool(int count, Factory const & f)
+ : m_factory(f)
{
for (int i = 0; i < count; ++i)
{
- T * novice = m_factory.GetNew();
-#ifdef DEBUG
+ T *novice = m_factory.GetNew();
+#if defined(DEBUG) || defined(LOG_OBJECT_POOL)
m_checkerSet.insert(novice);
#endif
m_pool.push_back(novice);
@@ -31,28 +31,34 @@ public:
~ObjectPool()
{
- for (typename list<T *>::iterator it = m_pool.begin(); it != m_pool.end(); it++)
+ for (auto it = m_pool.begin(); it != m_pool.end(); it++)
{
T * cur = *it;
-#ifdef DEBUG
- typename set<T *>::iterator its = m_checkerSet.find(cur);
- ASSERT(its != m_checkerSet.end(), ("The same element returned twice or more!"));
+#if defined(DEBUG) || defined(LOG_OBJECT_POOL)
+ auto its = m_checkerSet.find(cur);
+ static std::string const kMessage = "The same element has been returned twice or more!";
+ ASSERT(its != m_checkerSet.end(), (kMessage));
+ if (its == m_checkerSet.end())
+ LOG(LWARNING, (kMessage));
m_checkerSet.erase(its);
#endif
delete cur;
}
-#ifdef DEBUG
- ASSERT(m_checkerSet.empty(), ("Alert! Don't all elements returned to pool!"));
+#if defined(DEBUG) || defined(LOG_OBJECT_POOL)
+ static std::string const kMessage2 = "Not all elements were returned to pool!";
+ ASSERT(m_checkerSet.empty(), (kMessage2));
+ if (!m_checkerSet.empty())
+ LOG(LWARNING, (kMessage2));
#endif
}
T * Get()
{
- threads::MutexGuard guard(m_lock);
+ std::lock_guard<std::mutex> lock(m_lock);
if (m_pool.empty())
{
T * novice = m_factory.GetNew();
-#ifdef DEBUG
+#if defined(DEBUG) || defined(LOG_OBJECT_POOL)
m_checkerSet.insert(novice);
#endif
return novice;
@@ -67,8 +73,17 @@ public:
void Return(T * object)
{
- threads::MutexGuard guard(m_lock);
+ std::lock_guard<std::mutex> lock(m_lock);
m_pool.push_back(object);
}
+
+private:
+#if defined(DEBUG) || defined(LOG_OBJECT_POOL)
+ std::set<T *> m_checkerSet;
+#endif
+ std::list<T *> m_pool;
+ Factory m_factory;
+ std::mutex m_lock;
};
+} // namespace dp
diff --git a/drape_frontend/backend_renderer.cpp b/drape_frontend/backend_renderer.cpp
index f4e98f633c..7288e5d62d 100644
--- a/drape_frontend/backend_renderer.cpp
+++ b/drape_frontend/backend_renderer.cpp
@@ -489,13 +489,14 @@ void BackendRenderer::OnContextCreate()
GLFunctions::Init(m_apiVersion);
+ m_readManager->Start();
InitGLDependentResource();
}
void BackendRenderer::OnContextDestroy()
{
LOG(LINFO, ("On context destroy."));
- m_readManager->InvalidateAll();
+ m_readManager->Stop();
m_batchersPool.reset();
m_texMng->Release();
m_overlays.clear();
@@ -560,7 +561,8 @@ void BackendRenderer::RecacheMapShapes()
m_commutator->PostMessage(ThreadsCommutator::RenderThread, move(msg), MessagePriority::High);
}
-void BackendRenderer::FlushGeometry(TileKey const & key, dp::GLState const & state, drape_ptr<dp::RenderBucket> && buffer)
+void BackendRenderer::FlushGeometry(TileKey const & key, dp::GLState const & state,
+ drape_ptr<dp::RenderBucket> && buffer)
{
GLFunctions::glFlush();
m_commutator->PostMessage(ThreadsCommutator::RenderThread,
diff --git a/drape_frontend/backend_renderer.hpp b/drape_frontend/backend_renderer.hpp
index fdedc42dc3..4c8d3c6002 100644
--- a/drape_frontend/backend_renderer.hpp
+++ b/drape_frontend/backend_renderer.hpp
@@ -118,5 +118,4 @@ private:
bool m_isTeardowned;
#endif
};
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/base_renderer.cpp b/drape_frontend/base_renderer.cpp
index 03651d728a..b68a9edabd 100644
--- a/drape_frontend/base_renderer.cpp
+++ b/drape_frontend/base_renderer.cpp
@@ -3,9 +3,10 @@
#include "std/utility.hpp"
+#include <functional>
+
namespace df
{
-
BaseRenderer::BaseRenderer(ThreadsCommutator::ThreadName name, Params const & params)
: m_apiVersion(params.m_apiVersion)
, m_commutator(params.m_commutator)
@@ -107,7 +108,8 @@ void BaseRenderer::CheckRenderingEnabled()
if (m_wasContextReset)
{
- EnableMessageFiltering(bind(&BaseRenderer::FilterGLContextDependentMessage, this, _1));
+ using namespace std::placeholders;
+ EnableMessageFiltering(std::bind(&BaseRenderer::FilterGLContextDependentMessage, this, _1));
OnContextDestroy();
}
else
@@ -169,5 +171,4 @@ bool BaseRenderer::CanReceiveMessages()
threads::IRoutine * routine = m_selfThread.GetRoutine();
return routine != nullptr && !routine->IsCancelled();
}
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/batchers_pool.hpp b/drape_frontend/batchers_pool.hpp
index fc28e964c5..e1003a8057 100644
--- a/drape_frontend/batchers_pool.hpp
+++ b/drape_frontend/batchers_pool.hpp
@@ -5,19 +5,18 @@
#include "base/assert.hpp"
-#include "std/bind.hpp"
-#include "std/function.hpp"
-#include "std/map.hpp"
+#include <functional>
+#include <map>
namespace df
{
-
// Not thread safe
template <typename TKey, typename TKeyComparator>
-class BatchersPool
+class BatchersPool final
{
public:
- using TFlushFn = function<void (TKey const & key, dp::GLState const & state, drape_ptr<dp::RenderBucket> && buffer)>;
+ using TFlushFn = std::function<void (TKey const & key, dp::GLState const & state,
+ drape_ptr<dp::RenderBucket> && buffer)>;
BatchersPool(int initBatchersCount, TFlushFn const & flushFn,
uint32_t indexBufferSize, uint32_t vertexBufferSize)
@@ -46,8 +45,9 @@ public:
return;
}
dp::Batcher * batcher = m_pool.Get();
- m_batchers.insert(make_pair(key, make_pair(batcher, 1)));
- batcher->StartSession(bind(m_flushFn, key, _1, _2));
+ using namespace std::placeholders;
+ m_batchers.insert(std::make_pair(key, make_pair(batcher, 1)));
+ batcher->StartSession(std::bind(m_flushFn, key, _1, _2));
}
ref_ptr<dp::Batcher> GetBatcher(TKey const & key)
@@ -72,12 +72,11 @@ public:
}
private:
- using TBatcherPair = pair<dp::Batcher *, int>;
- using TBatcherMap = map<TKey, TBatcherPair, TKeyComparator>;
+ using TBatcherPair = std::pair<dp::Batcher *, int>;
+ using TBatcherMap = std::map<TKey, TBatcherPair, TKeyComparator>;
TFlushFn m_flushFn;
- ObjectPool<dp::Batcher, dp::BatcherFactory> m_pool;
+ dp::ObjectPool<dp::Batcher, dp::BatcherFactory> m_pool;
TBatcherMap m_batchers;
};
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index 51cacfafe4..a53ff02a95 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -9,6 +9,8 @@
#include "platform/settings.hpp"
+using namespace std::placeholders;
+
namespace df
{
DrapeEngine::DrapeEngine(Params && params)
@@ -20,7 +22,7 @@ DrapeEngine::DrapeEngine(Params && params)
df::VisualParams::Instance().SetFontScale(params.m_fontsScaleFactor);
gui::DrapeGui & guiSubsystem = gui::DrapeGui::Instance();
- guiSubsystem.SetLocalizator(bind(&StringsBundle::GetString, params.m_stringsBundle.get(), _1));
+ guiSubsystem.SetLocalizator(std::bind(&StringsBundle::GetString, params.m_stringsBundle.get(), _1));
guiSubsystem.SetSurfaceSize(m2::PointF(m_viewport.GetWidth(), m_viewport.GetHeight()));
m_textureManager = make_unique_dp<dp::TextureManager>();
@@ -63,7 +65,7 @@ DrapeEngine::DrapeEngine(Params && params)
params.m_hints,
params.m_isRoutingActive,
params.m_isAutozoomEnabled,
- bind(&DrapeEngine::MyPositionModeChanged, this, _1, _2));
+ std::bind(&DrapeEngine::MyPositionModeChanged, this, _1, _2));
FrontendRenderer::Params frParams(params.m_apiVersion,
make_ref(m_threadCommutator),
@@ -71,9 +73,9 @@ DrapeEngine::DrapeEngine(Params && params)
make_ref(m_textureManager),
std::move(mpParams),
m_viewport,
- bind(&DrapeEngine::ModelViewChanged, this, _1),
- bind(&DrapeEngine::TapEvent, this, _1),
- bind(&DrapeEngine::UserPositionChanged, this, _1),
+ std::bind(&DrapeEngine::ModelViewChanged, this, _1),
+ std::bind(&DrapeEngine::TapEvent, this, _1),
+ std::bind(&DrapeEngine::UserPositionChanged, this, _1),
make_ref(m_requestedTiles),
std::move(params.m_overlaysShowStatsCallback),
params.m_allow3dBuildings,
diff --git a/drape_frontend/drape_frontend_tests/CMakeLists.txt b/drape_frontend/drape_frontend_tests/CMakeLists.txt
index 8446d448a5..4484e5ad15 100644
--- a/drape_frontend/drape_frontend_tests/CMakeLists.txt
+++ b/drape_frontend/drape_frontend_tests/CMakeLists.txt
@@ -25,7 +25,6 @@ set(
SRC
compile_shaders_test.cpp
navigator_test.cpp
- object_pool_tests.cpp
shader_def_for_tests.cpp
shader_def_for_tests.hpp
user_event_stream_tests.cpp
diff --git a/drape_frontend/drape_frontend_tests/drape_frontend_tests.pro b/drape_frontend/drape_frontend_tests/drape_frontend_tests.pro
index f6ef3786c5..660eeee57d 100644
--- a/drape_frontend/drape_frontend_tests/drape_frontend_tests.pro
+++ b/drape_frontend/drape_frontend_tests/drape_frontend_tests.pro
@@ -35,7 +35,6 @@ SOURCES += \
../../testing/testingmain.cpp \
compile_shaders_test.cpp \
navigator_test.cpp \
- object_pool_tests.cpp \
shader_def_for_tests.cpp \
user_event_stream_tests.cpp \
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index 7dbe8228ef..acb9ed16b4 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -36,6 +36,8 @@
#include <cmath>
#include <chrono>
+using namespace std::placeholders;
+
namespace df
{
namespace
diff --git a/drape_frontend/metaline_manager.hpp b/drape_frontend/metaline_manager.hpp
index 152d2c23c2..d94654985b 100644
--- a/drape_frontend/metaline_manager.hpp
+++ b/drape_frontend/metaline_manager.hpp
@@ -27,7 +27,7 @@ public:
private:
void OnTaskFinished(threads::IRoutine * task);
- using TasksPool = ObjectPool<ReadMetalineTask, ReadMetalineTaskFactory>;
+ using TasksPool = dp::ObjectPool<ReadMetalineTask, ReadMetalineTaskFactory>;
MapDataProvider & m_model;
diff --git a/drape_frontend/read_manager.cpp b/drape_frontend/read_manager.cpp
index 81864e4263..d0d5443d75 100755
--- a/drape_frontend/read_manager.cpp
+++ b/drape_frontend/read_manager.cpp
@@ -47,17 +47,35 @@ ReadManager::ReadManager(ref_ptr<ThreadsCommutator> commutator, MapDataProvider
bool allow3dBuildings, bool trafficEnabled)
: m_commutator(commutator)
, m_model(model)
- , m_pool(make_unique_dp<threads::ThreadPool>(kReadingThreadsCount,
- std::bind(&ReadManager::OnTaskFinished, this, _1)))
, m_have3dBuildings(false)
, m_allow3dBuildings(allow3dBuildings)
, m_trafficEnabled(trafficEnabled)
, m_displacementMode(dp::displacement::kDefaultMode)
, m_modeChanged(false)
- , myPool(64, ReadMWMTaskFactory(m_model))
+ , m_tasksPool(64, ReadMWMTaskFactory(m_model))
, m_counter(0)
, m_generationCounter(0)
-{}
+{
+ Start();
+}
+
+void ReadManager::Start()
+{
+ if (m_pool != nullptr)
+ return;
+
+ using namespace std::placeholders;
+ m_pool = make_unique_dp<threads::ThreadPool>(kReadingThreadsCount,
+ std::bind(&ReadManager::OnTaskFinished, this, _1));
+}
+
+void ReadManager::Stop()
+{
+ InvalidateAll();
+ if (m_pool != nullptr)
+ m_pool->Stop();
+ m_pool.reset();
+}
void ReadManager::OnTaskFinished(threads::IRoutine * task)
{
@@ -91,7 +109,7 @@ void ReadManager::OnTaskFinished(threads::IRoutine * task)
}
t->Reset();
- myPool.Return(t);
+ m_tasksPool.Return(t);
}
void ReadManager::UpdateCoverage(ScreenBase const & screen,
@@ -169,22 +187,11 @@ void ReadManager::InvalidateAll()
{
for (auto const & info : m_tileInfos)
CancelTileInfo(info);
-
m_tileInfos.clear();
m_modeChanged = true;
}
-void ReadManager::Stop()
-{
- for (auto const & info : m_tileInfos)
- CancelTileInfo(info);
- m_tileInfos.clear();
-
- m_pool->Stop();
- m_pool.reset();
-}
-
bool ReadManager::CheckTileKey(TileKey const & tileKey) const
{
for (auto const & tileInfo : m_tileInfos)
@@ -206,6 +213,7 @@ void ReadManager::PushTaskBackForTileKey(TileKey const & tileKey,
ref_ptr<dp::TextureManager> texMng,
ref_ptr<MetalineManager> metalineMng)
{
+ ASSERT(m_pool != nullptr, ());
auto context = make_unique_dp<EngineContext>(TileKey(tileKey, m_generationCounter),
m_commutator, texMng, metalineMng,
m_customSymbolsContext,
@@ -213,7 +221,7 @@ void ReadManager::PushTaskBackForTileKey(TileKey const & tileKey,
m_trafficEnabled, m_displacementMode);
std::shared_ptr<TileInfo> tileInfo = std::make_shared<TileInfo>(std::move(context));
m_tileInfos.insert(tileInfo);
- ReadMWMTask * task = myPool.Get();
+ ReadMWMTask * task = m_tasksPool.Get();
task->Init(tileInfo);
{
diff --git a/drape_frontend/read_manager.hpp b/drape_frontend/read_manager.hpp
index 373b9c1d22..f3e05eb868 100755
--- a/drape_frontend/read_manager.hpp
+++ b/drape_frontend/read_manager.hpp
@@ -37,12 +37,14 @@ public:
ReadManager(ref_ptr<ThreadsCommutator> commutator, MapDataProvider & model,
bool allow3dBuildings, bool trafficEnabled);
+ void Start();
+ void Stop();
+
void UpdateCoverage(ScreenBase const & screen, bool have3dBuildings, bool forceUpdate,
TTilesCollection const & tiles, ref_ptr<dp::TextureManager> texMng,
ref_ptr<MetalineManager> metalineMng);
void Invalidate(TTilesCollection const & keyStorage);
void InvalidateAll();
- void Stop();
bool CheckTileKey(TileKey const & tileKey) const;
void Allow3dBuildings(bool allow3dBuildings);
@@ -86,7 +88,7 @@ private:
using TTileSet = std::set<std::shared_ptr<TileInfo>, LessByTileInfo>;
TTileSet m_tileInfos;
- ObjectPool<ReadMWMTask, ReadMWMTaskFactory> myPool;
+ dp::ObjectPool<ReadMWMTask, ReadMWMTaskFactory> m_tasksPool;
int m_counter;
std::mutex m_finishedTilesMutex;
diff --git a/drape_frontend/tile_info.cpp b/drape_frontend/tile_info.cpp
index 3db6ba026f..4c3cfa91c1 100644
--- a/drape_frontend/tile_info.cpp
+++ b/drape_frontend/tile_info.cpp
@@ -15,6 +15,8 @@
#include <functional>
+using namespace std::placeholders;
+
namespace df
{
TileInfo::TileInfo(drape_ptr<EngineContext> && engineContext)
diff --git a/drape_frontend/tile_key.cpp b/drape_frontend/tile_key.cpp
index 890c4df9f2..0696aad626 100755
--- a/drape_frontend/tile_key.cpp
+++ b/drape_frontend/tile_key.cpp
@@ -7,9 +7,10 @@
#include "geometry/mercator.hpp"
+#include <sstream>
+
namespace df
{
-
TileKey::TileKey()
: m_x(-1), m_y(-1),
m_zoomLevel(-1),
@@ -92,12 +93,11 @@ math::Matrix<float, 4, 4> TileKey::GetTileBasedModelView(ScreenBase const & scre
return screen.GetModelView(GetGlobalRect().Center(), kShapeCoordScalar);
}
-string DebugPrint(TileKey const & key)
+std::string DebugPrint(TileKey const & key)
{
- ostringstream out;
+ std::ostringstream out;
out << "[x = " << key.m_x << ", y = " << key.m_y << ", zoomLevel = "
<< key.m_zoomLevel << ", gen = " << key.m_generation << "]";
return out.str();
}
-
-} //namespace df
+} // namespace df
diff --git a/drape_frontend/tile_key.hpp b/drape_frontend/tile_key.hpp
index cc78284ed2..021bb0db77 100755
--- a/drape_frontend/tile_key.hpp
+++ b/drape_frontend/tile_key.hpp
@@ -5,9 +5,10 @@
#include "base/matrix.hpp"
+#include <string>
+
namespace df
{
-
struct TileKey
{
TileKey();
@@ -46,6 +47,5 @@ struct TileKeyStrictComparator
}
};
-string DebugPrint(TileKey const & key);
-
-} // namespace df
+std::string DebugPrint(TileKey const & key);
+} // namespace df
diff --git a/drape_frontend/traffic_generator.cpp b/drape_frontend/traffic_generator.cpp
index ade78d8f47..4c23f6b804 100644
--- a/drape_frontend/traffic_generator.cpp
+++ b/drape_frontend/traffic_generator.cpp
@@ -18,12 +18,14 @@
#include "std/algorithm.hpp"
+#include <functional>
+
+using namespace std::placeholders;
+
namespace df
{
-
namespace
{
-
// Values of the following arrays are based on traffic-arrow texture.
static array<float, static_cast<size_t>(traffic::SpeedGroup::Count)> kCoordVOffsets =
{{