forked from organicmaps/organicmaps
pausing background rendering when animation is started, and resuming it back when it's finished.
This commit is contained in:
parent
44c86c6e57
commit
8db4539504
2 changed files with 38 additions and 5 deletions
|
@ -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<PaintEvent> 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<PaintEvent> const & e, ScreenBase const & s)
|
||||
{
|
||||
if (m_QueuedRenderer)
|
||||
|
@ -66,6 +82,8 @@ void BasicTilingRenderPolicy::DrawFrame(shared_ptr<PaintEvent> 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();
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue