From 22272f5cd15ce1e9828ef2af15101c54f99a3669 Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Tue, 15 Dec 2015 15:36:24 +0300 Subject: [PATCH 1/2] Limited FPS in follow-and-rotate routing mode to reduce energy consumption. --- drape_frontend/frontend_renderer.cpp | 8 ++++++++ drape_frontend/my_position_controller.cpp | 5 +++++ drape_frontend/my_position_controller.hpp | 2 ++ 3 files changed, 15 insertions(+) diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 073d5956a0..6416441d81 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -1011,6 +1011,14 @@ void FrontendRenderer::Routine::Do() frameTime = timer.ElapsedSeconds(); timer.Reset(); + // Limit fps in following mode. + double const kFrameTime = 1.0 / 30.0; + if (m_renderer.m_myPositionController->IsFollowingActive() && frameTime < kFrameTime) + { + uint32_t const ms = static_cast((kFrameTime - frameTime) * 1000); + this_thread::sleep_for(milliseconds(ms)); + } + m_renderer.CheckRenderingEnabled(); } diff --git a/drape_frontend/my_position_controller.cpp b/drape_frontend/my_position_controller.cpp index 90cfaa107d..e7f9b479f3 100644 --- a/drape_frontend/my_position_controller.cpp +++ b/drape_frontend/my_position_controller.cpp @@ -334,6 +334,11 @@ void MyPositionController::Render(uint32_t renderMode, ScreenBase const & screen CheckAnimFinished(); } +bool MyPositionController::IsFollowingActive() const +{ + return IsInRouting() && GetMode() == location::MODE_ROTATE_AND_FOLLOW; +} + void MyPositionController::AnimateStateTransition(location::EMyPositionMode oldMode, location::EMyPositionMode newMode) { if (oldMode == location::MODE_PENDING_POSITION && newMode == location::MODE_FOLLOW) diff --git a/drape_frontend/my_position_controller.hpp b/drape_frontend/my_position_controller.hpp index 91d4333913..1086e6d1d8 100644 --- a/drape_frontend/my_position_controller.hpp +++ b/drape_frontend/my_position_controller.hpp @@ -83,6 +83,8 @@ public: void Render(uint32_t renderMode, ScreenBase const & screen, ref_ptr mng, dp::UniformValuesStorage const & commonUniforms); + bool IsFollowingActive() const; + private: void AnimateStateTransition(location::EMyPositionMode oldMode, location::EMyPositionMode newMode); From a74c30694fa459f226b9296dc0f1b54de58c86ca Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Wed, 16 Dec 2015 12:49:33 +0300 Subject: [PATCH 2/2] Review fixes --- drape_frontend/frontend_renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 6416441d81..8381f26716 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -1012,7 +1012,7 @@ void FrontendRenderer::Routine::Do() timer.Reset(); // Limit fps in following mode. - double const kFrameTime = 1.0 / 30.0; + double constexpr kFrameTime = 1.0 / 30.0; if (m_renderer.m_myPositionController->IsFollowingActive() && frameTime < kFrameTime) { uint32_t const ms = static_cast((kFrameTime - frameTime) * 1000);