From eb15ccc1e3506d3b3056790fcae4fb322d38ac82 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Sat, 27 Aug 2011 23:04:30 +0300 Subject: [PATCH] [benchmark_tool] Rewrote and fixed benchmark rects logic Now it correctly works with countries and World --- indexer/data_factory.cpp | 7 +++++ indexer/data_factory.hpp | 1 + map/benchmark_tool/features_loading.cpp | 37 +++++++++++++------------ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/indexer/data_factory.cpp b/indexer/data_factory.cpp index 73509ff2f1..3b0d466cf5 100644 --- a/indexer/data_factory.cpp +++ b/indexer/data_factory.cpp @@ -56,3 +56,10 @@ m2::RectD GetMapBounds(FilesContainerR const & cont) LoadHeader(cont, header); return header.GetBounds(); } + +pair GetMapScaleRange(FilesContainerR const & cont) +{ + feature::DataHeader header; + LoadHeader(cont, header); + return header.GetScaleRange(); +} diff --git a/indexer/data_factory.hpp b/indexer/data_factory.hpp index ac171ec673..f1c5f2fcdc 100644 --- a/indexer/data_factory.hpp +++ b/indexer/data_factory.hpp @@ -20,3 +20,4 @@ public: }; m2::RectD GetMapBounds(FilesContainerR const & cont); +pair GetMapScaleRange(FilesContainerR const & cont); diff --git a/map/benchmark_tool/features_loading.cpp b/map/benchmark_tool/features_loading.cpp index aeda097f96..d8914d12f9 100644 --- a/map/benchmark_tool/features_loading.cpp +++ b/map/benchmark_tool/features_loading.cpp @@ -35,7 +35,7 @@ namespace m_count = 0; } - bool IsEmpty() const { return m_count > 0; } + bool IsEmpty() const { return m_count == 0; } double GetReadingTime() const { return m_reading; } @@ -52,32 +52,33 @@ namespace } }; - double RunBenchmark(model::FeaturesFetcher const & src, m2::RectD const & rect) + double RunBenchmark(model::FeaturesFetcher const & src, m2::RectD const & rect, + pair const & scaleRange) { - vector rects; + vector rects, newRects; rects.push_back(rect); + Accumulator acc; - while (!rects.empty()) + for (int scale = scaleRange.first; scale < scaleRange.second; ++scale) { - m2::RectD r = rects.back(); - rects.pop_back(); - - int const scale = scales::GetScaleLevel(r); - acc.Reset(scale); - - src.ForEachFeature_TileDrawing(r, acc, scale); - - if (!acc.IsEmpty() && (scale < scales::GetUpperScale())) + for (size_t i = 0; i < rects.size(); ++i) { + m2::RectD const r = rects[i]; + + acc.Reset(scale); + + src.ForEachFeature_TileDrawing(r, acc, scale); + m2::RectD r1, r2; r.DivideByGreaterSize(r1, r2); - rects.push_back(r1); - rects.push_back(r2); + newRects.push_back(r1); + newRects.push_back(r2); } + rects.swap(newRects); + newRects.clear(); } - return acc.GetReadingTime(); } } @@ -89,17 +90,17 @@ void RunFeaturesLoadingBenchmark(string const & file, size_t count) src.AddMap(file); m2::RectD const rect = GetMapBounds(FilesContainerR(GetPlatform().GetReader(file))); + pair const scaleRange = GetMapScaleRange(FilesContainerR(GetPlatform().GetReader(file))); my::Timer timer; double all = 0.0; double reading = 0.0; - size_t const count = 2; for (size_t i = 0; i < count; ++i) { timer.Reset(); - reading += RunBenchmark(src, rect); + reading += RunBenchmark(src, rect, scaleRange); all += timer.ElapsedSeconds(); }