From 7fbb620f70c7821e52ee1c36ac5055fcc566159e Mon Sep 17 00:00:00 2001 From: Jiri Drbalek Date: Wed, 29 Apr 2015 12:48:35 +0000 Subject: [PATCH 1/3] benchmark: fix image loading --- benchmark/compare_images.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/compare_images.hpp b/benchmark/compare_images.hpp index 0f0c0f14d..9befd697c 100644 --- a/benchmark/compare_images.hpp +++ b/benchmark/compare_images.hpp @@ -24,7 +24,7 @@ namespace benchmark { } image_rgba8 const& dest = util::get(reader1->read(0,0,reader1->width(), reader1->height())); - image_rgba8 const& src = util::get(reader1->read(0,0,reader1->width(), reader1->height())); + image_rgba8 const& src = util::get(reader2->read(0,0,reader2->width(), reader2->height())); unsigned int width = src.width(); unsigned int height = src.height(); From 27c116d893d78ff448b79e8db3a5a6e0a4cf7cdd Mon Sep 17 00:00:00 2001 From: Jiri Drbalek Date: Wed, 29 Apr 2015 12:53:46 +0000 Subject: [PATCH 2/3] benchmark: fix bad memory access --- benchmark/compare_images.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/benchmark/compare_images.hpp b/benchmark/compare_images.hpp index 9befd697c..0f002b2b2 100644 --- a/benchmark/compare_images.hpp +++ b/benchmark/compare_images.hpp @@ -23,8 +23,11 @@ namespace benchmark { throw mapnik::image_reader_exception("Failed to load: " + src_fn); } - image_rgba8 const& dest = util::get(reader1->read(0,0,reader1->width(), reader1->height())); - image_rgba8 const& src = util::get(reader2->read(0,0,reader2->width(), reader2->height())); + const image_any desc_any = reader1->read(0,0,reader1->width(), reader1->height()); + const image_any src_any = reader2->read(0,0,reader2->width(), reader2->height()); + + image_rgba8 const& dest = util::get(desc_any); + image_rgba8 const& src = util::get(src_any); unsigned int width = src.width(); unsigned int height = src.height(); From 8a2b5c9e82cf51363b1a253058fa1dab5c3461d3 Mon Sep 17 00:00:00 2001 From: Jiri Drbalek Date: Wed, 29 Apr 2015 13:01:14 +0000 Subject: [PATCH 3/3] benchmark: update reference images --- benchmark/data/polygon_clipping_boost.png | Bin 8884 -> 8765 bytes benchmark/data/polygon_clipping_clipper.png | Bin 8803 -> 8552 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/benchmark/data/polygon_clipping_boost.png b/benchmark/data/polygon_clipping_boost.png index 6c38b39f7a1d6eed6b906006bed527f63ae39a02..21760b752ca147a369b7a891f97e863942ba61b6 100644 GIT binary patch literal 8765 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 diff --git a/benchmark/data/polygon_clipping_clipper.png b/benchmark/data/polygon_clipping_clipper.png index 8d1b11e9c28de5c8539e3617c58cbb49ec41a051..621cf38954dc46b538bb67b20f767e9eefc7bd02 100644 GIT binary patch literal 8552 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 iBpMrx_t@>n0|ss=vrjR>z|