#include "bench_framework.hpp" #include #include #include #include #include #include #include class test : public benchmark::test_case { std::string xml_; mapnik::box2d extent_; mapnik::value_integer width_; mapnik::value_integer height_; std::string preview_; public: test(mapnik::parameters const& params) : test_case(params), xml_(), extent_(), width_(*params.get("width",256)), height_(*params.get("height",256)), preview_(*params.get("preview","")) { boost::optional map = params.get("map"); if (!map) { throw std::runtime_error("please provide a --map= arg"); } xml_ = *map; boost::optional ext = params.get("extent"); if (ext && !ext->empty()) { if (!extent_.from_string(*ext)) throw std::runtime_error("could not parse `extent` string" + *ext); } else { throw std::runtime_error("please provide a --extent= arg"); } } bool validate() const { mapnik::Map m(width_,height_); mapnik::load_map(m,xml_,true); m.zoom_to_box(extent_); mapnik::image_32 im(m.width(),m.height()); mapnik::agg_renderer ren(m,im); ren.apply(); if (!preview_.empty()) mapnik::save_to_file(im,preview_); return true; } void operator()() const { mapnik::Map m(width_,height_); mapnik::load_map(m,xml_); m.zoom_to_box(extent_); for (unsigned i=0;i ren(m,im); ren.apply(); } } }; int main(int argc, char** argv) { try { mapnik::parameters params; benchmark::handle_args(argc,argv,params); boost::optional name = params.get("name"); if (!name) { std::clog << "please provide a name for this test\n"; return -1; } bool success = mapnik::freetype_engine::register_fonts("./fonts", true); if (!success) { std::clog << "warning, did not register any new fonts!\n"; return -1; } mapnik::datasource_cache::instance().register_datasources("./plugins/input/"); { test test_runner(params); run(test_runner,*name); } } catch (std::exception const& ex) { std::clog << ex.what() << "\n"; return -1; } return 0; }