[core] Fix error handling in HeadlessFrontend::render()

This commit is contained in:
Mikhail Pozdnyakov
2019-06-28 13:02:50 +03:00
parent 657e847015
commit 4c896cbb31
2 changed files with 22 additions and 7 deletions

View File

@@ -132,19 +132,24 @@ PremultipliedImage HeadlessFrontend::readStillImage() {
PremultipliedImage HeadlessFrontend::render(Map& map) {
PremultipliedImage result;
std::exception_ptr error;
map.renderStill([&](std::exception_ptr error) {
if (error) {
std::rethrow_exception(error);
map.renderStill([&](std::exception_ptr e) {
if (e) {
error = e;
} else {
result = backend->readStillImage();
}
});
while (!result.valid()) {
while (!result.valid() && !error) {
util::RunLoop::Get()->runOnce();
}
if (error) {
std::rethrow_exception(error);
}
return result;
}

View File

@@ -123,8 +123,11 @@ bool TestRunner::runOperations(const std::string& key, TestMetadata& metadata) {
// wait
if (operationArray[0].GetString() == waitOp) {
frontend.render(map);
try {
frontend.render(map);
} catch (const std::exception&) {
return false;
}
// sleep
} else if (operationArray[0].GetString() == sleepOp) {
mbgl::util::Timer sleepTimer;
@@ -400,7 +403,14 @@ bool TestRunner::run(TestMetadata& metadata) {
return false;
}
return checkImage(frontend.render(map), metadata);
mbgl::PremultipliedImage image;
try {
image = frontend.render(map);
} catch (const std::exception&) {
return false;
}
return checkImage(std::move(image), metadata);
}
void TestRunner::reset() {