[test] allow aborting rendering after a timeout
This commit is contained in:
@@ -19,11 +19,15 @@ std::shared_ptr<SpriteImage> namedMarker(const std::string &name) {
|
||||
return std::make_shared<SpriteImage>(image.width, image.height, 1.0, std::string(reinterpret_cast<char*>(image.data.get()), image.size()));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
void checkRendering(Map& map, const char * name) {
|
||||
test::checkImage(std::string("test/fixtures/annotations/") + name + "/",
|
||||
test::render(map), 0.0002, 0.1);
|
||||
}
|
||||
|
||||
} // end namespace
|
||||
|
||||
TEST(Annotations, PointAnnotation) {
|
||||
auto display = std::make_shared<mbgl::HeadlessDisplay>();
|
||||
HeadlessView view(display, 1);
|
||||
|
||||
12
test/fixtures/util.cpp
vendored
12
test/fixtures/util.cpp
vendored
@@ -108,12 +108,20 @@ uint64_t crc64(const std::string& str) {
|
||||
return crc64(str.data(), str.size());
|
||||
}
|
||||
|
||||
PremultipliedImage render(Map& map) {
|
||||
PremultipliedImage render(Map& map, std::chrono::milliseconds timeout) {
|
||||
std::promise<PremultipliedImage> promise;
|
||||
map.renderStill([&](std::exception_ptr, PremultipliedImage&& image) {
|
||||
promise.set_value(std::move(image));
|
||||
});
|
||||
return promise.get_future().get();
|
||||
|
||||
// Limit maximum wait time.
|
||||
auto future = promise.get_future();
|
||||
if (future.wait_for(timeout) != std::future_status::ready) {
|
||||
// Alas, we didn't get the promised future :(
|
||||
Log::Error(Event::Image, "Failed to generate image within %dms", timeout.count());
|
||||
return { 0, 0 };
|
||||
}
|
||||
return future.get();
|
||||
}
|
||||
|
||||
void checkImage(const std::string& base,
|
||||
|
||||
5
test/fixtures/util.hpp
vendored
5
test/fixtures/util.hpp
vendored
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <mbgl/util/image.hpp>
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
@@ -35,13 +36,13 @@ private:
|
||||
uint64_t crc64(const char*, size_t);
|
||||
uint64_t crc64(const std::string&);
|
||||
|
||||
PremultipliedImage render(Map&);
|
||||
PremultipliedImage render(Map&,
|
||||
std::chrono::milliseconds timeout = std::chrono::milliseconds(1000));
|
||||
|
||||
void checkImage(const std::string& base,
|
||||
const PremultipliedImage& actual,
|
||||
double imageThreshold = 0,
|
||||
double pixelThreshold = 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user