adapt clipping benchmark to vertex_adapter interface - refs #2688
This commit is contained in:
parent
7fbc254673
commit
216d1e9324
5 changed files with 39 additions and 30 deletions
|
@ -34,7 +34,7 @@ benchmarks = [
|
||||||
#"test_to_double.cpp",
|
#"test_to_double.cpp",
|
||||||
#"test_to_int.cpp",
|
#"test_to_int.cpp",
|
||||||
#"test_utf_encoding.cpp"
|
#"test_utf_encoding.cpp"
|
||||||
#"test_polygon_clipping.cpp",
|
"test_polygon_clipping.cpp",
|
||||||
#"test_polygon_clipping_rendering.cpp",
|
#"test_polygon_clipping_rendering.cpp",
|
||||||
"test_proj_transform1.cpp",
|
"test_proj_transform1.cpp",
|
||||||
"test_expression_parse.cpp",
|
"test_expression_parse.cpp",
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 8.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 8.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 8.6 KiB |
|
@ -29,14 +29,16 @@
|
||||||
|
|
||||||
// stl
|
// stl
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
void render(mapnik::geometry_type & geom,
|
void render(mapnik::geometry_type const& geom,
|
||||||
mapnik::box2d<double> const& extent,
|
mapnik::box2d<double> const& extent,
|
||||||
std::string const& name)
|
std::string const& name)
|
||||||
{
|
{
|
||||||
using path_type = mapnik::transform_path_adapter<mapnik::view_transform,mapnik::geometry_type>;
|
using path_type = mapnik::transform_path_adapter<mapnik::view_transform,mapnik::vertex_adapter>;
|
||||||
using ren_base = agg::renderer_base<agg::pixfmt_rgba32_plain>;
|
using ren_base = agg::renderer_base<agg::pixfmt_rgba32_plain>;
|
||||||
using renderer = agg::renderer_scanline_aa_solid<ren_base>;
|
using renderer = agg::renderer_scanline_aa_solid<ren_base>;
|
||||||
|
mapnik::vertex_adapter va(geom);
|
||||||
mapnik::image_32 im(256,256);
|
mapnik::image_32 im(256,256);
|
||||||
im.set_background(mapnik::color("white"));
|
im.set_background(mapnik::color("white"));
|
||||||
mapnik::box2d<double> padded_extent = extent;
|
mapnik::box2d<double> padded_extent = extent;
|
||||||
|
@ -49,13 +51,11 @@ void render(mapnik::geometry_type & geom,
|
||||||
ren.color(agg::rgba8(127,127,127,255));
|
ren.color(agg::rgba8(127,127,127,255));
|
||||||
agg::rasterizer_scanline_aa<> ras;
|
agg::rasterizer_scanline_aa<> ras;
|
||||||
mapnik::proj_transform prj_trans(mapnik::projection("+init=epsg:4326"),mapnik::projection("+init=epsg:4326"));
|
mapnik::proj_transform prj_trans(mapnik::projection("+init=epsg:4326"),mapnik::projection("+init=epsg:4326"));
|
||||||
geom.rewind(0);
|
path_type path(tr,va,prj_trans);
|
||||||
path_type path(tr,geom,prj_trans);
|
|
||||||
ras.add_path(path);
|
ras.add_path(path);
|
||||||
agg::scanline_u8 sl;
|
agg::scanline_u8 sl;
|
||||||
agg::render_scanlines(ras, sl, ren);
|
agg::render_scanlines(ras, sl, ren);
|
||||||
mapnik::save_to_file(im.data(),name);
|
mapnik::save_to_file(im.data(),name);
|
||||||
geom.rewind(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class test1 : public benchmark::test_case
|
class test1 : public benchmark::test_case
|
||||||
|
@ -64,7 +64,7 @@ class test1 : public benchmark::test_case
|
||||||
mapnik::box2d<double> extent_;
|
mapnik::box2d<double> extent_;
|
||||||
std::string expected_;
|
std::string expected_;
|
||||||
public:
|
public:
|
||||||
using conv_clip = agg::conv_clip_polygon<mapnik::geometry_type>;
|
using conv_clip = agg::conv_clip_polygon<mapnik::vertex_adapter>;
|
||||||
test1(mapnik::parameters const& params,
|
test1(mapnik::parameters const& params,
|
||||||
std::string const& wkt_in,
|
std::string const& wkt_in,
|
||||||
mapnik::box2d<double> const& extent)
|
mapnik::box2d<double> const& extent)
|
||||||
|
@ -85,8 +85,9 @@ public:
|
||||||
std::clog << "paths.size() != 1\n";
|
std::clog << "paths.size() != 1\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mapnik::geometry_type & geom = paths[0];
|
mapnik::geometry_type const& geom = paths[0];
|
||||||
conv_clip clipped(geom);
|
mapnik::vertex_adapter va(geom);
|
||||||
|
conv_clip clipped(va);
|
||||||
clipped.clip_box(
|
clipped.clip_box(
|
||||||
extent_.minx(),
|
extent_.minx(),
|
||||||
extent_.miny(),
|
extent_.miny(),
|
||||||
|
@ -100,12 +101,13 @@ public:
|
||||||
}
|
}
|
||||||
std::string expect = expected_+".png";
|
std::string expect = expected_+".png";
|
||||||
std::string actual = expected_+"_actual.png";
|
std::string actual = expected_+"_actual.png";
|
||||||
if (!mapnik::util::exists(expect))
|
auto env = mapnik::envelope(geom);
|
||||||
|
if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr))
|
||||||
{
|
{
|
||||||
std::clog << "generating expected image: " << expect << "\n";
|
std::clog << "generating expected image: " << expect << "\n";
|
||||||
render(geom2,geom.envelope(),expect);
|
render(geom2,env,expect);
|
||||||
}
|
}
|
||||||
render(geom2,geom.envelope(),actual);
|
render(geom2,env,actual);
|
||||||
return benchmark::compare_images(actual,expect);
|
return benchmark::compare_images(actual,expect);
|
||||||
}
|
}
|
||||||
bool operator()() const
|
bool operator()() const
|
||||||
|
@ -117,9 +119,10 @@ public:
|
||||||
}
|
}
|
||||||
for (unsigned i=0;i<iterations_;++i)
|
for (unsigned i=0;i<iterations_;++i)
|
||||||
{
|
{
|
||||||
for (mapnik::geometry_type & geom : paths)
|
for (mapnik::geometry_type const& geom : paths)
|
||||||
{
|
{
|
||||||
conv_clip clipped(geom);
|
mapnik::vertex_adapter va(geom);
|
||||||
|
conv_clip clipped(va);
|
||||||
clipped.clip_box(
|
clipped.clip_box(
|
||||||
extent_.minx(),
|
extent_.minx(),
|
||||||
extent_.miny(),
|
extent_.miny(),
|
||||||
|
@ -140,7 +143,7 @@ class test2 : public benchmark::test_case
|
||||||
mapnik::box2d<double> extent_;
|
mapnik::box2d<double> extent_;
|
||||||
std::string expected_;
|
std::string expected_;
|
||||||
public:
|
public:
|
||||||
using poly_clipper = agg::conv_clipper<mapnik::geometry_type, agg::path_storage>;
|
using poly_clipper = agg::conv_clipper<mapnik::vertex_adapter, agg::path_storage>;
|
||||||
test2(mapnik::parameters const& params,
|
test2(mapnik::parameters const& params,
|
||||||
std::string const& wkt_in,
|
std::string const& wkt_in,
|
||||||
mapnik::box2d<double> const& extent)
|
mapnik::box2d<double> const& extent)
|
||||||
|
@ -167,8 +170,9 @@ public:
|
||||||
std::clog << "paths.size() != 1\n";
|
std::clog << "paths.size() != 1\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mapnik::geometry_type & geom = paths[0];
|
mapnik::geometry_type const& geom = paths[0];
|
||||||
poly_clipper clipped(geom,ps,
|
mapnik::vertex_adapter va(geom);
|
||||||
|
poly_clipper clipped(va,ps,
|
||||||
agg::clipper_and,
|
agg::clipper_and,
|
||||||
agg::clipper_non_zero,
|
agg::clipper_non_zero,
|
||||||
agg::clipper_non_zero,
|
agg::clipper_non_zero,
|
||||||
|
@ -182,12 +186,13 @@ public:
|
||||||
}
|
}
|
||||||
std::string expect = expected_+".png";
|
std::string expect = expected_+".png";
|
||||||
std::string actual = expected_+"_actual.png";
|
std::string actual = expected_+"_actual.png";
|
||||||
if (!mapnik::util::exists(expect))
|
auto env = mapnik::envelope(geom);
|
||||||
|
if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr))
|
||||||
{
|
{
|
||||||
std::clog << "generating expected image: " << expect << "\n";
|
std::clog << "generating expected image: " << expect << "\n";
|
||||||
render(geom2,geom.envelope(),expect);
|
render(geom2,env,expect);
|
||||||
}
|
}
|
||||||
render(geom2,geom.envelope(),actual);
|
render(geom2,env,actual);
|
||||||
return benchmark::compare_images(actual,expect);
|
return benchmark::compare_images(actual,expect);
|
||||||
}
|
}
|
||||||
bool operator()() const
|
bool operator()() const
|
||||||
|
@ -205,9 +210,10 @@ public:
|
||||||
ps.close_polygon();
|
ps.close_polygon();
|
||||||
for (unsigned i=0;i<iterations_;++i)
|
for (unsigned i=0;i<iterations_;++i)
|
||||||
{
|
{
|
||||||
for (mapnik::geometry_type & geom : paths)
|
for (mapnik::geometry_type const& geom : paths)
|
||||||
{
|
{
|
||||||
poly_clipper clipped(geom,ps,
|
mapnik::vertex_adapter va(geom);
|
||||||
|
poly_clipper clipped(va,ps,
|
||||||
agg::clipper_and,
|
agg::clipper_and,
|
||||||
agg::clipper_non_zero,
|
agg::clipper_non_zero,
|
||||||
agg::clipper_non_zero,
|
agg::clipper_non_zero,
|
||||||
|
@ -228,7 +234,7 @@ class test3 : public benchmark::test_case
|
||||||
mapnik::box2d<double> extent_;
|
mapnik::box2d<double> extent_;
|
||||||
std::string expected_;
|
std::string expected_;
|
||||||
public:
|
public:
|
||||||
using poly_clipper = mapnik::polygon_clipper<mapnik::geometry_type>;
|
using poly_clipper = mapnik::polygon_clipper<mapnik::vertex_adapter>;
|
||||||
test3(mapnik::parameters const& params,
|
test3(mapnik::parameters const& params,
|
||||||
std::string const& wkt_in,
|
std::string const& wkt_in,
|
||||||
mapnik::box2d<double> const& extent)
|
mapnik::box2d<double> const& extent)
|
||||||
|
@ -249,8 +255,9 @@ public:
|
||||||
std::clog << "paths.size() != 1\n";
|
std::clog << "paths.size() != 1\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mapnik::geometry_type & geom = paths[0];
|
mapnik::geometry_type const& geom = paths[0];
|
||||||
poly_clipper clipped(extent_, geom);
|
mapnik::vertex_adapter va(geom);
|
||||||
|
poly_clipper clipped(extent_, va);
|
||||||
unsigned cmd;
|
unsigned cmd;
|
||||||
double x,y;
|
double x,y;
|
||||||
mapnik::geometry_type geom2(mapnik::geometry_type::types::Polygon);
|
mapnik::geometry_type geom2(mapnik::geometry_type::types::Polygon);
|
||||||
|
@ -259,12 +266,13 @@ public:
|
||||||
}
|
}
|
||||||
std::string expect = expected_+".png";
|
std::string expect = expected_+".png";
|
||||||
std::string actual = expected_+"_actual.png";
|
std::string actual = expected_+"_actual.png";
|
||||||
if (!mapnik::util::exists(expect))
|
auto env = mapnik::envelope(geom);
|
||||||
|
if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr))
|
||||||
{
|
{
|
||||||
std::clog << "generating expected image: " << expect << "\n";
|
std::clog << "generating expected image: " << expect << "\n";
|
||||||
render(geom2,geom.envelope(),expect);
|
render(geom2,env,expect);
|
||||||
}
|
}
|
||||||
render(geom2,geom.envelope(),actual);
|
render(geom2,env,actual);
|
||||||
return benchmark::compare_images(actual,expect);
|
return benchmark::compare_images(actual,expect);
|
||||||
}
|
}
|
||||||
bool operator()() const
|
bool operator()() const
|
||||||
|
@ -276,9 +284,10 @@ public:
|
||||||
}
|
}
|
||||||
for (unsigned i=0;i<iterations_;++i)
|
for (unsigned i=0;i<iterations_;++i)
|
||||||
{
|
{
|
||||||
for ( mapnik::geometry_type & geom : paths)
|
for ( mapnik::geometry_type const& geom : paths)
|
||||||
{
|
{
|
||||||
poly_clipper clipped(extent_, geom);
|
mapnik::vertex_adapter va(geom);
|
||||||
|
poly_clipper clipped(extent_, va);
|
||||||
unsigned cmd;
|
unsigned cmd;
|
||||||
double x,y;
|
double x,y;
|
||||||
while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {}
|
while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {}
|
||||||
|
|
Loading…
Reference in a new issue