diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2017-01-16 16:19:45 +0300 |
---|---|---|
committer | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2017-01-26 16:12:00 +0300 |
commit | c6f5a07e7c7524322ca14e9f0cdd38dba495e2e7 (patch) | |
tree | e0186dd3fa3fb36a64da65c6426971a3201dfb79 /drape | |
parent | 5b3aea0191561698ede857473e79aab17651d3d2 (diff) |
Getting drape statistic after running of test scenarios.
Diffstat (limited to 'drape')
-rw-r--r-- | drape/CMakeLists.txt | 1 | ||||
-rw-r--r-- | drape/debug_rect_renderer.hpp | 5 | ||||
-rw-r--r-- | drape/drape_common.pri | 1 | ||||
-rw-r--r-- | drape/drape_diagnostics.hpp | 19 | ||||
-rw-r--r-- | drape/overlay_tree.hpp | 3 | ||||
-rw-r--r-- | drape/utils/glyph_usage_tracker.cpp | 30 | ||||
-rw-r--r-- | drape/utils/glyph_usage_tracker.hpp | 36 | ||||
-rw-r--r-- | drape/utils/gpu_mem_tracker.cpp | 68 | ||||
-rw-r--r-- | drape/utils/gpu_mem_tracker.hpp | 24 |
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); |