Remove benchmarking calls from non benchmarking mode.

This commit is contained in:
ExMix 2013-04-05 19:13:29 +03:00 committed by Alex Zolotarev
parent a58d3ce46b
commit e9b8e2f8d5
4 changed files with 42 additions and 14 deletions

View file

@ -36,7 +36,8 @@ CoverageGenerator::CoverageGenerator(
m_fenceManager(2),
m_currentFenceID(-1),
m_doForceUpdate(false),
m_isPaused(false)
m_isPaused(false),
m_isBenchmarking(false)
{
g_coverageGeneratorDestroyed = false;
@ -49,6 +50,8 @@ CoverageGenerator::CoverageGenerator(
m_queue.AddFinCommand(bind(&CoverageGenerator::FinalizeThreadGL, this));
m_queue.Start();
Settings::Get("IsBenchmarking", m_isBenchmarking);
}
ScreenCoverage * CoverageGenerator::CreateCoverage()
@ -69,7 +72,10 @@ ScreenCoverage * CoverageGenerator::CreateCoverage()
shared_ptr<graphics::Screen> screen(new graphics::Screen(params));
return new ScreenCoverage(m_tileRenderer, this, screen);
ScreenCoverage * screenCoverage = new ScreenCoverage(m_tileRenderer, this, screen);
screenCoverage->SetBenchmarkingFlag(m_isBenchmarking);
return screenCoverage;
}
void CoverageGenerator::InitializeThreadGL()
@ -172,18 +178,21 @@ void CoverageGenerator::AddCoverScreenTask(ScreenBase const & screen, bool doFor
int CoverageGenerator::InsertBenchmarkFence()
{
ASSERT(m_isBenchmarking, ("Only in benchmarking mode!"));
m_currentFenceID = m_fenceManager.insertFence();
return m_currentFenceID;
}
void CoverageGenerator::JoinBenchmarkFence(int fenceID)
{
ASSERT(m_isBenchmarking, ("Only in benchmarking mode!"));
CHECK(fenceID == m_currentFenceID, ("InsertBenchmarkFence without corresponding SignalBenchmarkFence detected"));
m_fenceManager.joinFence(fenceID);
}
void CoverageGenerator::SignalBenchmarkFence()
{
ASSERT(m_isBenchmarking, ("Only in benchmarking mode!"));
if (m_currentFenceID != -1)
m_fenceManager.signalFence(m_currentFenceID);
}
@ -269,9 +278,7 @@ void CoverageGenerator::MergeTile(core::CommandsQueue::Environment const & env,
m_workCoverage->Clear();
bool isBenchmarking = false;
Settings::Get("IsBenchmarking", isBenchmarking);
if (!isBenchmarking)
if (!m_isBenchmarking)
m_windowHandle->invalidate();
}
@ -320,6 +327,7 @@ void CoverageGenerator::AddDecrementTileCountTask(int sequenceID)
void CoverageGenerator::DecrementTileCounter(int sequenceID)
{
ASSERT(m_isBenchmarking, ("Only in benchmarking mode!"));
m_benchmarkBarrier.DecrementTileCounter(sequenceID);
m_windowHandle->invalidate();
}
@ -346,6 +354,7 @@ void CoverageGenerator::SetSequenceID(int sequenceID)
void CoverageGenerator::StartTileDrawingSession(int sequenceID, unsigned tileCount)
{
ASSERT(m_isBenchmarking, ("Only in benchmarking mode!"));
m_benchmarkBarrier.m_sequenceID = sequenceID;
m_benchmarkBarrier.m_tilesCount = tileCount;
}

View file

@ -82,6 +82,7 @@ private:
bool m_doForceUpdate;
bool m_isPaused;
bool m_isBenchmarking;
ScreenCoverage * CreateCoverage();

View file

@ -22,7 +22,8 @@ ScreenCoverage::ScreenCoverage()
m_overlay(new graphics::Overlay()),
m_isEmptyDrawingCoverage(false),
m_isEmptyModelAtCoverageCenter(true),
m_leafTilesToRender(0)
m_leafTilesToRender(0),
m_isBenchmarking(false)
{
m_overlay->setCouldOverlap(false);
}
@ -36,7 +37,8 @@ ScreenCoverage::ScreenCoverage(TileRenderer * tileRenderer,
m_isEmptyDrawingCoverage(false),
m_isEmptyModelAtCoverageCenter(true),
m_leafTilesToRender(0),
m_cacheScreen(cacheScreen)
m_cacheScreen(cacheScreen),
m_isBenchmarking(false)
{
m_overlay->setCouldOverlap(false);
}
@ -323,7 +325,9 @@ void ScreenCoverage::SetScreen(ScreenBase const & screen)
// filtering out rects that are fully covered by its descedants
int curNewTile = 0;
m_coverageGenerator->StartTileDrawingSession(GetSequenceID(), newRectsCount);
if (m_isBenchmarking)
m_coverageGenerator->StartTileDrawingSession(GetSequenceID(), newRectsCount);
// adding commands for tiles which aren't in cache
for (size_t i = 0; i < firstClassTiles.size(); ++i, ++curNewTile)
@ -337,9 +341,12 @@ void ScreenCoverage::SetScreen(ScreenBase const & screen)
ri,
GetSequenceID()));
chain.addCommand(bind(&CoverageGenerator::AddDecrementTileCountTask,
m_coverageGenerator,
GetSequenceID()));
if (m_isBenchmarking)
{
chain.addCommand(bind(&CoverageGenerator::AddDecrementTileCountTask,
m_coverageGenerator,
GetSequenceID()));
}
m_tileRenderer->AddCommand(ri, GetSequenceID(),
chain);
@ -360,9 +367,12 @@ void ScreenCoverage::SetScreen(ScreenBase const & screen)
m_tileRenderer,
ri));
chain.addCommand(bind(&CoverageGenerator::AddDecrementTileCountTask,
m_coverageGenerator,
GetSequenceID()));
if (m_isBenchmarking)
{
chain.addCommand(bind(&CoverageGenerator::AddDecrementTileCountTask,
m_coverageGenerator,
GetSequenceID()));
}
m_tileRenderer->AddCommand(ri, GetSequenceID(), chain);
}
@ -480,3 +490,8 @@ void ScreenCoverage::MergeOverlay()
}
}
}
void ScreenCoverage::SetBenchmarkingFlag(bool isBenchmarking)
{
m_isBenchmarking = isBenchmarking;
}

View file

@ -55,6 +55,7 @@ private:
shared_ptr<graphics::Overlay> m_overlay;
/// State flags
bool m_isBenchmarking;
/// Does the all leaf tiles in this coverage are empty?
bool m_isEmptyDrawingCoverage;
@ -133,4 +134,6 @@ public:
/// Unlock and remove tiles which intersect the specified rect
/// and deeper or equal than specified scale
void RemoveTiles(m2::AnyRectD const & r, int startScale);
void SetBenchmarkingFlag(bool isBenchmarking);
};