#include #include #include #include #include #include #include #include using namespace mbgl; style::Filter parse(const char* expression) { rapidjson::GenericDocument, rapidjson::CrtAllocator> doc; doc.Parse<0>(expression); style::conversion::Error error; return *style::conversion::convert(doc, error); } static void Parse_Filter(benchmark::State& state) { while (state.KeepRunning()) { parse(R"FILTER(["==", "foo", "bar"])FILTER"); } } static void Parse_EvaluateFilter(benchmark::State& state) { const style::Filter filter = parse(R"FILTER(["==", "foo", "bar"])FILTER"); const PropertyMap properties = { { "foo", std::string("bar") } }; while (state.KeepRunning()) { filter(FeatureType::Unknown, {}, [&] (const std::string& key) -> optional { auto it = properties.find(key); if (it == properties.end()) return {}; return it->second; }); } } BENCHMARK(Parse_Filter); BENCHMARK(Parse_EvaluateFilter);