From 8db453950469171e68b493cd1f2e5305ff22fc7d Mon Sep 17 00:00:00 2001 From: rachytski Date: Wed, 12 Sep 2012 13:30:07 +0300 Subject: [PATCH] pausing background rendering when animation is started, and resuming it back when it's finished. --- map/basic_tiling_render_policy.cpp | 38 ++++++++++++++++++++++++++---- map/basic_tiling_render_policy.hpp | 5 ++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/map/basic_tiling_render_policy.cpp b/map/basic_tiling_render_policy.cpp index 0db4acf39f..82001c35c8 100644 --- a/map/basic_tiling_render_policy.cpp +++ b/map/basic_tiling_render_policy.cpp @@ -40,7 +40,8 @@ BasicTilingRenderPolicy::BasicTilingRenderPolicy(Params const & p, m_DrawScale(0), m_IsEmptyModel(false), m_DoRecreateCoverage(false), - m_IsNavigating(false) + m_IsNavigating(false), + m_WasAnimatingLastFrame(false) { m_TileSize = CalculateTileSize(p.m_screenWidth, p.m_screenHeight); @@ -58,6 +59,21 @@ void BasicTilingRenderPolicy::BeginFrame(shared_ptr const & e, Scree m_QueuedRenderer->BeginFrame(); } +void BasicTilingRenderPolicy::CheckAnimationTransition() +{ + // transition from non-animating to animating, + // should stop all background work + if (!m_WasAnimatingLastFrame && IsAnimating()) + PauseBackgroundRendering(); + + // transition from animating to non-animating + // should resume all background work + if (m_WasAnimatingLastFrame && !IsAnimating()) + ResumeBackgroundRendering(); + + m_WasAnimatingLastFrame = IsAnimating(); +} + void BasicTilingRenderPolicy::DrawFrame(shared_ptr const & e, ScreenBase const & s) { if (m_QueuedRenderer) @@ -66,6 +82,8 @@ void BasicTilingRenderPolicy::DrawFrame(shared_ptr const & e, Screen m_resourceManager->updatePoolState(); } + CheckAnimationTransition(); + /// checking, whether we should add the CoverScreen command bool doForceUpdate = DoForceUpdate(); @@ -120,24 +138,34 @@ TileRenderer & BasicTilingRenderPolicy::GetTileRenderer() return *m_TileRenderer.get(); } -void BasicTilingRenderPolicy::StartNavigation() +void BasicTilingRenderPolicy::PauseBackgroundRendering() { m_TileRenderer->SetIsPaused(true); - m_IsNavigating = true; m_TileRenderer->CancelCommands(); if (m_QueuedRenderer) m_QueuedRenderer->SetPartialExecution(GetPlatform().CpuCores(), true); } -void BasicTilingRenderPolicy::StopNavigation() +void BasicTilingRenderPolicy::ResumeBackgroundRendering() { m_TileRenderer->SetIsPaused(false); - m_IsNavigating = false; m_DoRecreateCoverage = true; if (m_QueuedRenderer) m_QueuedRenderer->SetPartialExecution(GetPlatform().CpuCores(), false); } +void BasicTilingRenderPolicy::StartNavigation() +{ + m_IsNavigating = true; + PauseBackgroundRendering(); +} + +void BasicTilingRenderPolicy::StopNavigation() +{ + m_IsNavigating = false; + ResumeBackgroundRendering(); +} + void BasicTilingRenderPolicy::StartScale() { StartNavigation(); diff --git a/map/basic_tiling_render_policy.hpp b/map/basic_tiling_render_policy.hpp index 06225188db..479e9a5a15 100644 --- a/map/basic_tiling_render_policy.hpp +++ b/map/basic_tiling_render_policy.hpp @@ -35,6 +35,7 @@ protected: string m_CountryName; bool m_DoRecreateCoverage; bool m_IsNavigating; + bool m_WasAnimatingLastFrame; size_t m_TileSize; protected: @@ -44,6 +45,10 @@ protected: void StartNavigation(); void StopNavigation(); + void PauseBackgroundRendering(); + void ResumeBackgroundRendering(); + void CheckAnimationTransition(); + public: BasicTilingRenderPolicy(Params const & p,