diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-12-12 13:46:21 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-12-12 13:46:21 +0300 |
commit | 4f39c5d766c9babeb1757da9398c45b2e9cc1e56 (patch) | |
tree | 0731f747088ded3fd890ac7b1e2ccc6613d7368e /routing/routing_session.cpp | |
parent | bd675c6b08cd7eda774548474a32787f2a96963a (diff) |
Traffic cache for routing memory optimization.
Diffstat (limited to 'routing/routing_session.cpp')
-rw-r--r-- | routing/routing_session.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/routing/routing_session.cpp b/routing/routing_session.cpp index a22b546e49..133e5b8c83 100644 --- a/routing/routing_session.cpp +++ b/routing/routing_session.cpp @@ -589,9 +589,23 @@ void RoutingSession::OnTrafficInfoClear() void RoutingSession::OnTrafficInfoAdded(TrafficInfo && info) { + ASSERT_EQUAL(kSpeedGroupThresholdPercentage[static_cast<size_t>(SpeedGroup::G5)], 100, ()); + ASSERT_EQUAL(kSpeedGroupThresholdPercentage[static_cast<size_t>(SpeedGroup::Unknown)], 100, ()); + + // The code below is memory optimization. Edges with traffic SpeedGroup::G5 and + // SpeedGroup::Unknown are 95% of all edges but they are not used in routing now. + // So we don't need to keep the information in TrafficCache. + TrafficInfo::Coloring const & fullColoring = info.GetColoring(); + TrafficInfo::Coloring coloring; + for (auto const & kv : fullColoring) + { + if (kv.second != SpeedGroup::G5 && kv.second != SpeedGroup::Unknown) + coloring.insert(kv); + } + threads::MutexGuard guard(m_routingSessionMutex); UNUSED_VALUE(guard); - Set(move(info)); + Set(info.GetMwmId(), move(coloring)); } void RoutingSession::OnTrafficInfoRemoved(MwmSet::MwmId const & mwmId) @@ -601,7 +615,7 @@ void RoutingSession::OnTrafficInfoRemoved(MwmSet::MwmId const & mwmId) Remove(mwmId); } -shared_ptr<traffic::TrafficInfo> RoutingSession::GetTrafficInfo(MwmSet::MwmId const & mwmId) const +shared_ptr<TrafficInfo::Coloring> RoutingSession::GetTrafficInfo(MwmSet::MwmId const & mwmId) const { threads::MutexGuard guard(m_routingSessionMutex); UNUSED_VALUE(guard); |