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
diff options
context:
space:
mode:
authorMaksim Andrianov <maksimandrianov1@gmail.com>2020-12-08 13:10:19 +0300
committermpimenov <mpimenov@users.noreply.github.com>2021-01-25 22:29:29 +0300
commit0c291281c4def37528b87b14123a177ce17a1c5e (patch)
tree2f26df017e00708fd3a1323002cf661731ff12ce /generator
parentd903219a8a98fc7b68a87215efa7e8a08e70e563 (diff)
[generator] Added log messages.
Diffstat (limited to 'generator')
-rw-r--r--generator/osm_source.cpp4
-rw-r--r--generator/osm_source.hpp2
-rw-r--r--generator/raw_generator.cpp66
3 files changed, 71 insertions, 1 deletions
diff --git a/generator/osm_source.cpp b/generator/osm_source.cpp
index ab35f0f7e6..a7298798d2 100644
--- a/generator/osm_source.cpp
+++ b/generator/osm_source.cpp
@@ -47,7 +47,9 @@ SourceReader::SourceReader(istringstream & stream)
uint64_t SourceReader::Read(char * buffer, uint64_t bufferSize)
{
m_file->read(buffer, bufferSize);
- return m_file->gcount();
+ auto const gcount = static_cast<uint64_t>(m_file->gcount());
+ m_pos += gcount;
+ return gcount;
}
// Functions ---------------------------------------------------------------------------------------
diff --git a/generator/osm_source.hpp b/generator/osm_source.hpp
index 51cc128a2b..40ca97b6be 100644
--- a/generator/osm_source.hpp
+++ b/generator/osm_source.hpp
@@ -34,6 +34,7 @@ class SourceReader
};
std::unique_ptr<std::istream, Deleter> m_file;
+ uint64_t m_pos = 0;
public:
SourceReader();
@@ -41,6 +42,7 @@ public:
explicit SourceReader(std::istringstream & stream);
uint64_t Read(char * buffer, uint64_t bufferSize);
+ uint64_t Pos() const { return m_pos; }
};
bool GenerateIntermediateData(feature::GenerateInfo & info);
diff --git a/generator/raw_generator.cpp b/generator/raw_generator.cpp
index 3da779ddc5..a57bfa144c 100644
--- a/generator/raw_generator.cpp
+++ b/generator/raw_generator.cpp
@@ -12,11 +12,73 @@
#include "generator/translators_pool.hpp"
#include "base/thread_pool_computational.hpp"
+#include "base/timer.hpp"
#include "defines.hpp"
namespace generator
{
+namespace
+{
+class Stats
+{
+public:
+ Stats(size_t logCallCountThreshold)
+ : m_timer(true /* start */), m_logCallCountThreshold(logCallCountThreshold)
+ {
+ }
+
+ void Log(std::vector<OsmElement> const & elements, uint64_t pos, bool forcePrint = false)
+ {
+ for (auto const & e : elements)
+ {
+ if (e.IsNode())
+ ++m_node_counter;
+ else if (e.IsWay())
+ ++m_way_counter;
+ else if (e.IsRelation())
+ ++m_relation_counter;
+ }
+
+ m_element_counter += elements.size();
+ if (!forcePrint && m_callCount != m_logCallCountThreshold)
+ {
+ m_callCount++;
+ return;
+ }
+
+ auto static constexpr kBInMB = 1024.0 * 1024.0;
+ auto const posMB = pos / kBInMB;
+ auto const elapsedSeconds = m_timer.ElapsedSeconds();
+ auto const avgSpeedMBPerSec = posMB / elapsedSeconds;
+ auto const speedMBPerSec =
+ (pos - m_prevFilePos) / (elapsedSeconds - m_prevElapsedSeconds) / kBInMB;
+
+ LOG(LINFO, ("Readed", m_element_counter, "elements [pos:", posMB, "MB, avg r:",
+ avgSpeedMBPerSec, " MB/s, r:", speedMBPerSec, "MB/s [n:", m_node_counter,
+ ", w:", m_way_counter, ", r:", m_relation_counter, "]]"));
+
+ m_prevFilePos = pos;
+ m_prevElapsedSeconds = elapsedSeconds;
+ m_node_counter = 0;
+ m_way_counter = 0;
+ m_relation_counter = 0;
+ m_callCount = 0;
+ }
+
+private:
+ const size_t m_logCallCountThreshold = 0;
+ base::Timer m_timer;
+ size_t m_callCount = 0;
+ uint64_t m_prevFilePos = 0;
+ double m_prevElapsedSeconds = 0.0;
+ size_t m_element_counter = 0;
+ size_t m_node_counter = 0;
+ size_t m_way_counter = 0;
+ size_t m_relation_counter = 0;
+};
+} // namespace
+
RawGenerator::RawGenerator(feature::GenerateInfo & genInfo, size_t threadsCount, size_t chunkSize)
: m_genInfo(genInfo)
, m_threadsCount(threadsCount)
@@ -176,6 +238,8 @@ bool RawGenerator::GenerateFilteredFeatures()
RawGeneratorWriter rawGeneratorWriter(m_queue, m_genInfo.m_tmpDir);
rawGeneratorWriter.Run();
+ Stats stats(100 * m_threadsCount /* logCallCountThreshold */);
+
size_t element_pos = 0;
std::vector<OsmElement> elements(m_chunkSize);
while (sourceProcessor->TryRead(elements[element_pos]))
@@ -183,6 +247,7 @@ bool RawGenerator::GenerateFilteredFeatures()
if (++element_pos != m_chunkSize)
continue;
+ stats.Log(elements, reader.Pos());
translators.Emit(elements);
for (auto & e : elements)
@@ -191,6 +256,7 @@ bool RawGenerator::GenerateFilteredFeatures()
element_pos = 0;
}
elements.resize(element_pos);
+ stats.Log(elements, reader.Pos(), true /* forcePrint */);
translators.Emit(std::move(elements));
LOG(LINFO, ("Input was processed."));