Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/drape
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-01-16 16:19:45 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-01-26 16:12:00 +0300
commitc6f5a07e7c7524322ca14e9f0cdd38dba495e2e7 (patch)
treee0186dd3fa3fb36a64da65c6426971a3201dfb79 /drape
parent5b3aea0191561698ede857473e79aab17651d3d2 (diff)
Getting drape statistic after running of test scenarios.
Diffstat (limited to 'drape')
-rw-r--r--drape/CMakeLists.txt1
-rw-r--r--drape/debug_rect_renderer.hpp5
-rw-r--r--drape/drape_common.pri1
-rw-r--r--drape/drape_diagnostics.hpp19
-rw-r--r--drape/overlay_tree.hpp3
-rw-r--r--drape/utils/glyph_usage_tracker.cpp30
-rw-r--r--drape/utils/glyph_usage_tracker.hpp36
-rw-r--r--drape/utils/gpu_mem_tracker.cpp68
-rw-r--r--drape/utils/gpu_mem_tracker.hpp24
9 files changed, 121 insertions, 66 deletions
diff --git a/drape/CMakeLists.txt b/drape/CMakeLists.txt
index 4cc46e6093..c5fc48816d 100644
--- a/drape/CMakeLists.txt
+++ b/drape/CMakeLists.txt
@@ -40,6 +40,7 @@ set(
${DRAPE_ROOT}/data_buffer_impl.hpp
${DRAPE_ROOT}/debug_rect_renderer.cpp
${DRAPE_ROOT}/debug_rect_renderer.hpp
+ ${DRAPE_ROOT}/drape_diagnostics.hpp
${DRAPE_ROOT}/drape_global.hpp
${DRAPE_ROOT}/dynamic_texture.hpp
${DRAPE_ROOT}/font_texture.cpp
diff --git a/drape/debug_rect_renderer.hpp b/drape/debug_rect_renderer.hpp
index 19e0ef5820..2c98279bf4 100644
--- a/drape/debug_rect_renderer.hpp
+++ b/drape/debug_rect_renderer.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "drape/drape_diagnostics.hpp"
+
#include "drape/gpu_program_manager.hpp"
#include "drape/overlay_tree.hpp"
#include "drape/pointers.hpp"
@@ -7,8 +9,6 @@
#include "geometry/rect2d.hpp"
#include "geometry/screenbase.hpp"
-//#define RENDER_DEBUG_RECTS
-
namespace dp
{
@@ -39,3 +39,4 @@ private:
};
} // namespace dp
+
diff --git a/drape/drape_common.pri b/drape/drape_common.pri
index 132d156d30..eb987ee144 100644
--- a/drape/drape_common.pri
+++ b/drape/drape_common.pri
@@ -66,6 +66,7 @@ HEADERS += \
$$DRAPE_DIR/data_buffer.hpp \
$$DRAPE_DIR/data_buffer_impl.hpp \
$$DRAPE_DIR/debug_rect_renderer.hpp \
+ $$DRAPE_DIR/drape_diagnostics.hpp \
$$DRAPE_DIR/drape_global.hpp \
$$DRAPE_DIR/dynamic_texture.hpp \
$$DRAPE_DIR/font_texture.hpp \
diff --git a/drape/drape_diagnostics.hpp b/drape/drape_diagnostics.hpp
new file mode 100644
index 0000000000..d8fc2a5a9b
--- /dev/null
+++ b/drape/drape_diagnostics.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+//#define DRAW_TILE_NET
+//#define RENDER_DEBUG_RECTS
+//#define COLLECT_DISPLACEMENT_INFO
+
+//#define DRAPE_MEASURER
+//#define SCENARIO_ENABLE
+
+#ifdef DRAPE_MEASURER
+
+//#define RENDER_STATISTIC
+//#define TILES_STATISTIC
+//#define GENERATING_STATISTIC
+
+//#define TRACK_GPU_MEM
+//#define TRACK_GLYPH_USAGE
+
+#endif
diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp
index ef669d1a7b..061540efb3 100644
--- a/drape/overlay_tree.hpp
+++ b/drape/overlay_tree.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "drape/drape_diagnostics.hpp"
#include "drape/overlay_handle.hpp"
#include "geometry/screenbase.hpp"
@@ -14,8 +15,6 @@
namespace dp
{
-//#define COLLECT_DISPLACEMENT_INFO
-
namespace detail
{
diff --git a/drape/utils/glyph_usage_tracker.cpp b/drape/utils/glyph_usage_tracker.cpp
index b4d4a0f67b..0713944df7 100644
--- a/drape/utils/glyph_usage_tracker.cpp
+++ b/drape/utils/glyph_usage_tracker.cpp
@@ -9,18 +9,10 @@
namespace dp
{
-GlyphUsageTracker & GlyphUsageTracker::Instance()
+string GlyphUsageTracker::GlyphUsageStatistic::ToString() const
{
- static GlyphUsageTracker s_inst;
- return s_inst;
-}
-
-string GlyphUsageTracker::Report()
-{
- lock_guard<mutex> lock(m_mutex);
-
ostringstream ss;
- ss << "\n ===== Glyphs Usage Report ===== \n";
+ ss << " ----- Glyphs usage report ----- \n";
ss << " Current language = " << languages::GetCurrentOrig() << "\n";
ss << " Invalid glyphs count = " << m_invalidGlyphs.size() << "\n";
ss << " Invalid glyphs: { ";
@@ -40,11 +32,23 @@ string GlyphUsageTracker::Report()
ss << "}\n";
}
ss << " }\n";
- ss << " ===== Glyphs Usage Report ===== \n";
+ ss << " ----- Glyphs usage report ----- \n";
return ss.str();
}
+GlyphUsageTracker & GlyphUsageTracker::Instance()
+{
+ static GlyphUsageTracker s_inst;
+ return s_inst;
+}
+
+GlyphUsageTracker::GlyphUsageStatistic GlyphUsageTracker::Report()
+{
+ lock_guard<mutex> lock(m_mutex);
+ return m_glyphStat;
+}
+
void GlyphUsageTracker::AddInvalidGlyph(strings::UniString const & str, strings::UniChar const & c)
{
lock_guard<mutex> lock(m_mutex);
@@ -52,7 +56,7 @@ void GlyphUsageTracker::AddInvalidGlyph(strings::UniString const & str, strings:
if (m_processedStrings.find(strings::ToUtf8(str)) != m_processedStrings.end())
return;
- ++m_invalidGlyphs[c];
+ ++m_glyphStat.m_invalidGlyphs[c];
m_processedStrings.insert(strings::ToUtf8(str));
}
@@ -65,7 +69,7 @@ void GlyphUsageTracker::AddUnexpectedGlyph(strings::UniString const & str, strin
if (m_processedStrings.find(strings::ToUtf8(str)) != m_processedStrings.end())
return;
- UnexpectedGlyphData & data = m_unexpectedGlyphs[c];
+ UnexpectedGlyphData & data = m_glyphStat.m_unexpectedGlyphs[c];
++data.m_counter;
data.m_expectedGroups.emplace(expectedGroup);
data.m_group = group;
diff --git a/drape/utils/glyph_usage_tracker.hpp b/drape/utils/glyph_usage_tracker.hpp
index 8555265e09..ee92268ef2 100644
--- a/drape/utils/glyph_usage_tracker.hpp
+++ b/drape/utils/glyph_usage_tracker.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "drape/drape_diagnostics.hpp"
+
#include "base/string_utils.hpp"
#include "std/map.hpp"
@@ -9,21 +11,36 @@
#include "std/string.hpp"
#include "std/unordered_set.hpp"
-//#define TRACK_GLYPH_USAGE
-
namespace dp
{
class GlyphUsageTracker
{
public:
+ struct UnexpectedGlyphData
+ {
+ size_t m_counter = 0;
+ size_t m_group = 0;
+ set<size_t> m_expectedGroups;
+ };
+ using UnexpectedGlyphs = map<strings::UniChar, UnexpectedGlyphData>;
+ using InvalidGlyphs = map<strings::UniChar, size_t>;
+
+ struct GlyphUsageStatistic
+ {
+ string ToString() const;
+
+ InvalidGlyphs m_invalidGlyphs;
+ UnexpectedGlyphs m_unexpectedGlyphs;
+ };
+
static GlyphUsageTracker & Instance();
void AddInvalidGlyph(strings::UniString const & str, strings::UniChar const & c);
void AddUnexpectedGlyph(strings::UniString const & str, strings::UniChar const & c,
size_t const group, size_t const expectedGroup);
- string Report();
+ GlyphUsageStatistic Report();
private:
GlyphUsageTracker() = default;
@@ -31,18 +48,7 @@ private:
GlyphUsageTracker(GlyphUsageTracker && rhs) = delete;
private:
- using InvalidGlyphs = map<strings::UniChar, size_t>;
- InvalidGlyphs m_invalidGlyphs;
-
- struct UnexpectedGlyphData
- {
- size_t m_counter = 0;
- size_t m_group = 0;
- set<size_t> m_expectedGroups;
- };
- using UnexpectedGlyphs = map<strings::UniChar, UnexpectedGlyphData>;
- UnexpectedGlyphs m_unexpectedGlyphs;
-
+ GlyphUsageStatistic m_glyphStat;
unordered_set<string> m_processedStrings;
mutex m_mutex;
diff --git a/drape/utils/gpu_mem_tracker.cpp b/drape/utils/gpu_mem_tracker.cpp
index 7aa95c2021..2c477440c4 100644
--- a/drape/utils/gpu_mem_tracker.cpp
+++ b/drape/utils/gpu_mem_tracker.cpp
@@ -6,50 +6,58 @@
namespace dp
{
+string GPUMemTracker::GPUMemorySnapshot::ToString() const
+{
+ ostringstream ss;
+ ss << " Summary Allocated = " << m_summaryAllocatedInMb << "Mb\n";
+ ss << " Summary Used = " << m_summaryUsedInMb << "Mb\n";
+ ss << " Tags registered = " << m_tagStats.size() << "\n";
+
+ for (auto const it : m_tagStats)
+ {
+ ss << " Tag = " << it.first << " \n";
+ ss << " Object count = " << it.second.m_objectsCount << "\n";
+ ss << " Allocated = " << it.second.m_alocatedInMb << "Mb\n";
+ ss << " Used = " << it.second.m_usedInMb << "Mb\n";
+ }
+
+ return ss.str();
+}
+
GPUMemTracker & GPUMemTracker::Inst()
{
static GPUMemTracker s_inst;
return s_inst;
}
-string GPUMemTracker::Report()
+GPUMemTracker::GPUMemorySnapshot GPUMemTracker::GetMemorySnapshot()
{
- uint32_t summaryUsed = 0;
- uint32_t summaryAllocated = 0;
-
- typedef tuple<size_t, uint32_t, uint32_t> TTagStat;
- map<string, TTagStat> tagStats;
+ GPUMemorySnapshot memStat;
- for (auto const it : m_memTracker)
{
- TTagStat & stat = tagStats[it.first.first];
- get<0>(stat)++;
- get<1>(stat) += it.second.first;
- get<2>(stat) += it.second.second;
-
- summaryAllocated += it.second.first;
- summaryUsed += it.second.second;
+ threads::MutexGuard g(m_mutex);
+ for (auto const it : m_memTracker)
+ {
+ TagMemorySnapshot & tagStat = memStat.m_tagStats[it.first.first];
+ tagStat.m_objectsCount++;
+ tagStat.m_alocatedInMb += it.second.first;
+ tagStat.m_usedInMb += it.second.second;
+
+ memStat.m_summaryAllocatedInMb += it.second.first;
+ memStat.m_summaryUsedInMb += it.second.second;
+ }
}
float byteToMb = static_cast<float>(1024 * 1024);
-
- ostringstream ss;
- ss << " ===== Mem Report ===== \n";
- ss << " Summary Allocated = " << summaryAllocated / byteToMb << "\n";
- ss << " Summary Used = " << summaryUsed / byteToMb << "\n";
- ss << " Tags registered = " << tagStats.size() << "\n";
-
- for (auto const it : tagStats)
+ for (auto & it : memStat.m_tagStats)
{
- ss << " Tag = " << it.first << " \n";
- ss << " Object count = " << get<0>(it.second) << "\n";
- ss << " Allocated = " << get<1>(it.second) / byteToMb << "\n";
- ss << " Used = " << get<2>(it.second) / byteToMb << "\n";
+ it.second.m_alocatedInMb /= byteToMb;
+ it.second.m_usedInMb /= byteToMb;
}
+ memStat.m_summaryAllocatedInMb /= byteToMb;
+ memStat.m_summaryUsedInMb /= byteToMb;
- ss << " ===== Mem Report ===== \n";
-
- return ss.str();
+ return memStat;
}
void GPUMemTracker::AddAllocated(string const & tag, uint32_t id, uint32_t size)
@@ -63,7 +71,7 @@ void GPUMemTracker::SetUsed(string const & tag, uint32_t id, uint32_t size)
threads::MutexGuard g(m_mutex);
TAlocUsedMem & node = m_memTracker[make_pair(tag, id)];
node.second = size;
- ASSERT_LESS_OR_EQUAL(node.second, node.first, ("Can't use more then allocated"));
+ ASSERT_LESS_OR_EQUAL(node.second, node.first, ("Can't use more than allocated"));
}
void GPUMemTracker::RemoveDeallocated(string const & tag, uint32_t id)
diff --git a/drape/utils/gpu_mem_tracker.hpp b/drape/utils/gpu_mem_tracker.hpp
index eb350f9f22..724bd2c6ac 100644
--- a/drape/utils/gpu_mem_tracker.hpp
+++ b/drape/utils/gpu_mem_tracker.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "drape/drape_diagnostics.hpp"
+
#include "base/mutex.hpp"
#include "std/map.hpp"
@@ -7,18 +9,32 @@
#include "std/string.hpp"
#include "std/utility.hpp"
-
-//#define TRACK_GPU_MEM
-
namespace dp
{
class GPUMemTracker : private noncopyable
{
public:
+ struct TagMemorySnapshot
+ {
+ uint32_t m_objectsCount = 0;
+ uint32_t m_alocatedInMb = 0;
+ uint32_t m_usedInMb = 0;
+ };
+
+ struct GPUMemorySnapshot
+ {
+ string ToString() const;
+
+ uint32_t m_summaryAllocatedInMb = 0;
+ uint32_t m_summaryUsedInMb = 0;
+ map<string, TagMemorySnapshot> m_tagStats;
+ };
+
static GPUMemTracker & Inst();
- string Report();
+ GPUMemorySnapshot GetMemorySnapshot();
+
void AddAllocated(string const & tag, uint32_t id, uint32_t size);
void SetUsed(string const & tag, uint32_t id, uint32_t size);
void RemoveDeallocated(string const & tag, uint32_t id);