diff --git a/drape_frontend/backend_renderer.cpp b/drape_frontend/backend_renderer.cpp index 1551c531e3..cea24828bf 100644 --- a/drape_frontend/backend_renderer.cpp +++ b/drape_frontend/backend_renderer.cpp @@ -579,16 +579,15 @@ void BackendRenderer::InitGLDependentResource() textures->m_smaaSearchTexture = m_texMng->GetSMAASearchTexture(); m_commutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(std::move(textures)), - MessagePriority::High); + MessagePriority::Normal); } void BackendRenderer::RecacheMapShapes() { auto msg = make_unique_dp(make_unique_dp(m_texMng), make_unique_dp(m_texMng)); - GLFunctions::glFlush(); - m_commutator->PostMessage(ThreadsCommutator::RenderThread, move(msg), MessagePriority::High); + m_commutator->PostMessage(ThreadsCommutator::RenderThread, std::move(msg), MessagePriority::Normal); } void BackendRenderer::FlushGeometry(TileKey const & key, dp::GLState const & state, diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index c06b9f101a..aafea5c9e0 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -132,7 +132,7 @@ void DrapeEngine::Update(int w, int h) { m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp(), - MessagePriority::High); + MessagePriority::Normal); } RecacheGui(false); @@ -140,7 +140,7 @@ void DrapeEngine::Update(int w, int h) m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(), - MessagePriority::High); + MessagePriority::Normal); ResizeImpl(w, h); } @@ -327,7 +327,7 @@ void DrapeEngine::RecacheGui(bool needResetOldGui) { m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp(m_widgetsInfo, needResetOldGui), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::AddUserEvent(drape_ptr && e) @@ -371,7 +371,7 @@ void DrapeEngine::SetCompassInfo(location::CompassInfo const & info) { m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(info), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::SetGpsInfo(location::GpsInfo const & info, bool isNavigable, @@ -379,7 +379,7 @@ void DrapeEngine::SetGpsInfo(location::GpsInfo const & info, bool isNavigable, { m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(info, isNavigable, routeInfo), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::SwitchMyPositionNextMode() @@ -387,7 +387,7 @@ void DrapeEngine::SwitchMyPositionNextMode() using Mode = ChangeMyPositionModeMessage::EChangeType; m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(Mode::SwitchNextMode), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::LoseLocation() @@ -395,7 +395,7 @@ void DrapeEngine::LoseLocation() using Mode = ChangeMyPositionModeMessage::EChangeType; m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(Mode::LoseLocation), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::StopLocationFollow() @@ -403,7 +403,7 @@ void DrapeEngine::StopLocationFollow() using Mode = ChangeMyPositionModeMessage::EChangeType; m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(Mode::StopFollowing), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, bool enableAutoZoom) @@ -411,7 +411,7 @@ void DrapeEngine::FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(preferredZoomLevel, preferredZoomLevel3d, enableAutoZoom), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::SetModelViewListener(TModelViewListenerFn && fn) @@ -429,55 +429,19 @@ void DrapeEngine::SetUserPositionListener(TUserPositionChangedFn && fn) m_userPositionChanged = std::move(fn); } -FeatureID DrapeEngine::GetVisiblePOI(m2::PointD const & glbPoint) -{ - FeatureID result; - BaseBlockingMessage::Blocker blocker; - m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, - make_unique_dp(blocker, glbPoint, result), - MessagePriority::High); - - blocker.Wait(); - return result; -} - void DrapeEngine::SelectObject(SelectionShape::ESelectedObject obj, m2::PointD const & pt, FeatureID const & featureId, bool isAnim) { m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(obj, pt, featureId, isAnim), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::DeselectObject() { m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(SelectObjectMessage::DismissTag()), - MessagePriority::High); -} - -SelectionShape::ESelectedObject DrapeEngine::GetSelectedObject() -{ - SelectionShape::ESelectedObject object; - BaseBlockingMessage::Blocker blocker; - m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, - make_unique_dp(blocker, object), - MessagePriority::High); - - blocker.Wait(); - return object; -} - -bool DrapeEngine::GetMyPosition(m2::PointD & myPosition) -{ - bool hasPosition = false; - BaseBlockingMessage::Blocker blocker; - m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, - make_unique_dp(blocker, hasPosition, myPosition), - MessagePriority::High); - - blocker.Wait(); - return hasPosition; + MessagePriority::Normal); } dp::DrapeID DrapeEngine::AddSubroute(drape_ptr && subroute) @@ -599,7 +563,7 @@ void DrapeEngine::EnableChoosePositionMode(bool enable, std::vectorPostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp(), - MessagePriority::High); + MessagePriority::Normal); kineticScroll = false; } else @@ -609,7 +573,7 @@ void DrapeEngine::EnableChoosePositionMode(bool enable, std::vectorPostMessage(ThreadsCommutator::RenderThread, make_unique_dp(enable, std::move(boundAreaTriangles), kineticScroll, hasPosition, position), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::BlockTapEvents(bool block) @@ -627,7 +591,7 @@ void DrapeEngine::SetKineticScrollEnabled(bool enabled) m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp(m_kineticScrollEnabled), - MessagePriority::High); + MessagePriority::Normal); } void DrapeEngine::SetTimeInBackground(double time) diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index 5845eb39c5..c04dea981c 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -152,13 +152,10 @@ public: using TUserPositionChangedFn = FrontendRenderer::TUserPositionChangedFn; void SetUserPositionListener(TUserPositionChangedFn && fn); - FeatureID GetVisiblePOI(m2::PointD const & glbPoint); void SelectObject(SelectionShape::ESelectedObject obj, m2::PointD const & pt, FeatureID const & featureID, bool isAnim); void DeselectObject(); - bool GetMyPosition(m2::PointD & myPosition); - SelectionShape::ESelectedObject GetSelectedObject(); - + dp::DrapeID AddSubroute(drape_ptr &&segment); void RemoveSubroute(dp::DrapeID subrouteId, bool deactivateFollowing); void FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, bool enableAutoZoom); diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 4537da5201..601b931464 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -412,15 +412,6 @@ void FrontendRenderer::AcceptMessage(ref_ptr message) break; } - case Message::FindVisiblePOI: - { - ref_ptr msg = message; - ScreenBase const & screen = m_userEventStream.GetCurrentScreen(); - msg->SetFeatureID(GetVisiblePOI(screen.isPerspective() ? screen.PtoP3d(screen.GtoP(msg->GetPoint())) - : screen.GtoP(msg->GetPoint()))); - break; - } - case Message::SelectObject: { ref_ptr msg = message; @@ -437,23 +428,6 @@ void FrontendRenderer::AcceptMessage(ref_ptr message) break; } - case Message::GetSelectedObject: - { - ref_ptr msg = message; - if (m_selectionShape != nullptr) - msg->SetSelectedObject(m_selectionShape->GetSelectedObject()); - else - msg->SetSelectedObject(SelectionShape::OBJECT_EMPTY); - break; - } - - case Message::GetMyPosition: - { - ref_ptr msg = message; - msg->SetMyPosition(m_myPositionController->IsModeHasPosition(), m_myPositionController->Position()); - break; - } - case Message::FlushRoute: { ref_ptr msg = message; diff --git a/drape_frontend/message.hpp b/drape_frontend/message.hpp index 334b80f2ab..51c1ac0149 100644 --- a/drape_frontend/message.hpp +++ b/drape_frontend/message.hpp @@ -33,10 +33,7 @@ public: ChangeMyPostitionMode, CompassInfo, GpsInfo, - FindVisiblePOI, SelectObject, - GetSelectedObject, - GetMyPosition, AddSubroute, RemoveSubroute, CacheRouteArrows, @@ -93,9 +90,17 @@ public: enum class MessagePriority { + // This is standard priority. It must be used for majority of messages. + // This priority guarantees order of messages processing. Normal, + // This priority is used for system messages where order of processing + // could be neglected, so it does not guarantee order of messages processing. + // Also it must be used for messages which stop threads. High, + // It can be used for the only system message (UpdateReadManagerMessage) and + // must not be used anywhere else. UberHighSingleton, + // This priority allows to process messages after any other messages in queue. Low }; diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp index 7e46ca2cdd..950afa949d 100644 --- a/drape_frontend/message_subclasses.hpp +++ b/drape_frontend/message_subclasses.hpp @@ -498,28 +498,6 @@ private: location::RouteMatchingInfo const m_routeInfo; }; -class FindVisiblePOIMessage : public BaseBlockingMessage -{ -public: - FindVisiblePOIMessage(Blocker & blocker, m2::PointD const & glbPt, FeatureID & featureID) - : BaseBlockingMessage(blocker) - , m_pt(glbPt) - , m_featureID(featureID) - {} - - Type GetType() const override { return FindVisiblePOI; } - - m2::PointD const & GetPoint() const { return m_pt; } - void SetFeatureID(FeatureID const & id) - { - m_featureID = id; - } - -private: - m2::PointD m_pt; - FeatureID & m_featureID; -}; - class SelectObjectMessage : public Message { public: @@ -557,47 +535,6 @@ private: bool m_isDismiss; }; -class GetSelectedObjectMessage : public BaseBlockingMessage -{ -public: - GetSelectedObjectMessage(Blocker & blocker, SelectionShape::ESelectedObject & object) - : BaseBlockingMessage(blocker) - , m_object(object) - {} - - Type GetType() const override { return GetSelectedObject; } - - void SetSelectedObject(SelectionShape::ESelectedObject const & object) - { - m_object = object; - } - -private: - SelectionShape::ESelectedObject & m_object; -}; - -class GetMyPositionMessage : public BaseBlockingMessage -{ -public: - GetMyPositionMessage(Blocker & blocker, bool & hasPosition, m2::PointD & myPosition) - : BaseBlockingMessage(blocker) - , m_myPosition(myPosition) - , m_hasPosition(hasPosition) - {} - - Type GetType() const override { return GetMyPosition; } - - void SetMyPosition(bool hasPosition, m2::PointD const & myPosition) - { - m_hasPosition = hasPosition; - m_myPosition = myPosition; - } - -private: - m2::PointD & m_myPosition; - bool & m_hasPosition; -}; - class AddSubrouteMessage : public Message { public: diff --git a/map/framework.cpp b/map/framework.cpp index bb569f712f..2aa0b71434 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1452,8 +1452,11 @@ void Framework::EnterBackground() void Framework::EnterForeground() { m_startForegroundTime = my::Timer::LocalTime(); - double const time = m_startForegroundTime - m_startBackgroundTime; - CallDrapeFunction(bind(&df::DrapeEngine::SetTimeInBackground, _1, time)); + if (m_drapeEngine != nullptr) + { + auto const timeInBackground = m_startForegroundTime - m_startBackgroundTime; + m_drapeEngine->SetTimeInBackground(timeInBackground); + } m_trafficManager.OnEnterForeground(); m_routingManager.SetAllowSendingPoints(true);