[core] Move Sprite parsing to thread pool
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <mbgl/util/io.hpp>
|
||||
#include <mbgl/util/image.hpp>
|
||||
#include <mbgl/util/run_loop.hpp>
|
||||
#include <mbgl/util/default_thread_pool.hpp>
|
||||
#include <mbgl/util/string.hpp>
|
||||
|
||||
#include <utility>
|
||||
@@ -22,7 +23,7 @@ TEST(SpriteAtlas, Basic) {
|
||||
util::read_file("test/fixtures/annotations/emerald.json"));
|
||||
|
||||
SpriteAtlas atlas({ 63, 112 }, 1);
|
||||
atlas.setSprites(spriteParseResult.get<Sprites>());
|
||||
atlas.setSprites(spriteParseResult);
|
||||
|
||||
EXPECT_EQ(1.0f, atlas.getPixelRatio());
|
||||
EXPECT_EQ(63u, atlas.getSize().width);
|
||||
@@ -75,7 +76,7 @@ TEST(SpriteAtlas, Size) {
|
||||
util::read_file("test/fixtures/annotations/emerald.json"));
|
||||
|
||||
SpriteAtlas atlas({ 63, 112 }, 1.4);
|
||||
atlas.setSprites(spriteParseResult.get<Sprites>());
|
||||
atlas.setSprites(spriteParseResult);
|
||||
|
||||
EXPECT_DOUBLE_EQ(1.4f, atlas.getPixelRatio());
|
||||
EXPECT_EQ(63u, atlas.getSize().width);
|
||||
@@ -266,6 +267,7 @@ public:
|
||||
util::RunLoop loop;
|
||||
StubFileSource fileSource;
|
||||
StubStyleObserver observer;
|
||||
ThreadPool threadPool { 1 };
|
||||
SpriteAtlas spriteAtlas{ { 32, 32 }, 1 };
|
||||
|
||||
void run() {
|
||||
@@ -273,7 +275,7 @@ public:
|
||||
Log::setObserver(std::make_unique<Log::NullObserver>());
|
||||
|
||||
spriteAtlas.setObserver(&observer);
|
||||
spriteAtlas.load("test/fixtures/resources/sprite", fileSource);
|
||||
spriteAtlas.load("test/fixtures/resources/sprite", threadPool, fileSource);
|
||||
|
||||
loop.run();
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ TEST(Sprite, SpriteParsing) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = util::read_file("test/fixtures/annotations/emerald.json");
|
||||
|
||||
const auto images = parseSprite(image_1x, json_1x).get<Sprites>();
|
||||
const auto images = parseSprite(image_1x, json_1x);
|
||||
|
||||
std::set<std::string> names;
|
||||
std::transform(images.begin(), images.end(), std::inserter(names, names.begin()),
|
||||
@@ -294,10 +294,14 @@ TEST(Sprite, SpriteParsingInvalidJSON) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = R"JSON({ "image": " })JSON";
|
||||
|
||||
const auto error = parseSprite(image_1x, json_1x).get<std::exception_ptr>();
|
||||
|
||||
EXPECT_EQ(util::toString(error),
|
||||
std::string("Failed to parse JSON: Missing a closing quotation mark in string. at offset 14"));
|
||||
try {
|
||||
parseSprite(image_1x, json_1x);
|
||||
FAIL() << "Expected exception";
|
||||
} catch (std::runtime_error& err) {
|
||||
EXPECT_STREQ(
|
||||
"Failed to parse JSON: Missing a closing quotation mark in string. at offset 14",
|
||||
err.what());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Sprite, SpriteParsingEmptyImage) {
|
||||
@@ -306,7 +310,7 @@ TEST(Sprite, SpriteParsingEmptyImage) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = R"JSON({ "image": {} })JSON";
|
||||
|
||||
const auto images = parseSprite(image_1x, json_1x).get<Sprites>();
|
||||
const auto images = parseSprite(image_1x, json_1x);
|
||||
EXPECT_EQ(0u, images.size());
|
||||
|
||||
EXPECT_EQ(1u, log.count({
|
||||
@@ -323,7 +327,7 @@ TEST(Sprite, SpriteParsingSimpleWidthHeight) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = R"JSON({ "image": { "width": 32, "height": 32 } })JSON";
|
||||
|
||||
const auto images = parseSprite(image_1x, json_1x).get<Sprites>();
|
||||
const auto images = parseSprite(image_1x, json_1x);
|
||||
EXPECT_EQ(1u, images.size());
|
||||
}
|
||||
|
||||
@@ -333,7 +337,7 @@ TEST(Sprite, SpriteParsingWidthTooBig) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = R"JSON({ "image": { "width": 65536, "height": 32 } })JSON";
|
||||
|
||||
const auto images = parseSprite(image_1x, json_1x).get<Sprites>();
|
||||
const auto images = parseSprite(image_1x, json_1x);
|
||||
EXPECT_EQ(0u, images.size());
|
||||
|
||||
EXPECT_EQ(1u, log.count({
|
||||
@@ -356,7 +360,7 @@ TEST(Sprite, SpriteParsingNegativeWidth) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = R"JSON({ "image": { "width": -1, "height": 32 } })JSON";
|
||||
|
||||
const auto images = parseSprite(image_1x, json_1x).get<Sprites>();
|
||||
const auto images = parseSprite(image_1x, json_1x);
|
||||
EXPECT_EQ(0u, images.size());
|
||||
|
||||
EXPECT_EQ(1u, log.count({
|
||||
@@ -379,7 +383,7 @@ TEST(Sprite, SpriteParsingNullRatio) {
|
||||
const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png");
|
||||
const auto json_1x = R"JSON({ "image": { "width": 32, "height": 32, "pixelRatio": 0 } })JSON";
|
||||
|
||||
const auto images = parseSprite(image_1x, json_1x).get<Sprites>();
|
||||
const auto images = parseSprite(image_1x, json_1x);
|
||||
EXPECT_EQ(0u, images.size());
|
||||
|
||||
EXPECT_EQ(1u, log.count({
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
TransformState transformState;
|
||||
ThreadPool threadPool { 1 };
|
||||
AnnotationManager annotationManager { 1.0 };
|
||||
style::Style style { fileSource, 1.0 };
|
||||
style::Style style { threadPool, fileSource, 1.0 };
|
||||
|
||||
style::UpdateParameters updateParameters {
|
||||
1.0,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <mbgl/style/layer.hpp>
|
||||
#include <mbgl/util/io.hpp>
|
||||
#include <mbgl/util/run_loop.hpp>
|
||||
#include <mbgl/util/default_thread_pool.hpp>
|
||||
|
||||
#include <memory>
|
||||
|
||||
@@ -16,8 +17,9 @@ using namespace mbgl::style;
|
||||
TEST(Style, UnusedSource) {
|
||||
util::RunLoop loop;
|
||||
|
||||
ThreadPool threadPool{ 1 };
|
||||
StubFileSource fileSource;
|
||||
Style style { fileSource, 1.0 };
|
||||
Style style { threadPool, fileSource, 1.0 };
|
||||
|
||||
auto now = Clock::now();
|
||||
|
||||
@@ -53,8 +55,9 @@ TEST(Style, UnusedSource) {
|
||||
TEST(Style, UnusedSourceActiveViaClassUpdate) {
|
||||
util::RunLoop loop;
|
||||
|
||||
ThreadPool threadPool{ 1 };
|
||||
StubFileSource fileSource;
|
||||
Style style { fileSource, 1.0 };
|
||||
Style style { threadPool, fileSource, 1.0 };
|
||||
|
||||
style.setJSON(util::read_file("test/fixtures/resources/style-unused-sources.json"));
|
||||
EXPECT_TRUE(style.addClass("visible"));
|
||||
@@ -86,8 +89,9 @@ TEST(Style, UnusedSourceActiveViaClassUpdate) {
|
||||
TEST(Style, Properties) {
|
||||
util::RunLoop loop;
|
||||
|
||||
ThreadPool threadPool{ 1 };
|
||||
StubFileSource fileSource;
|
||||
Style style { fileSource, 1.0 };
|
||||
Style style { threadPool, fileSource, 1.0 };
|
||||
|
||||
style.setJSON(R"STYLE({"name": "Test"})STYLE");
|
||||
ASSERT_EQ("Test", style.getName());
|
||||
@@ -120,8 +124,9 @@ TEST(Style, Properties) {
|
||||
TEST(Style, DuplicateSource) {
|
||||
util::RunLoop loop;
|
||||
|
||||
ThreadPool threadPool{ 1 };
|
||||
StubFileSource fileSource;
|
||||
Style style { fileSource, 1.0 };
|
||||
Style style { threadPool, fileSource, 1.0 };
|
||||
|
||||
style.setJSON(util::read_file("test/fixtures/resources/style-unused-sources.json"));
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <mbgl/style/layers/symbol_layer_impl.hpp>
|
||||
#include <mbgl/util/color.hpp>
|
||||
#include <mbgl/util/run_loop.hpp>
|
||||
#include <mbgl/util/default_thread_pool.hpp>
|
||||
#include <mbgl/util/io.hpp>
|
||||
|
||||
#include <memory>
|
||||
@@ -279,8 +280,9 @@ TEST(Layer, DuplicateLayer) {
|
||||
util::RunLoop loop;
|
||||
|
||||
// Setup style
|
||||
ThreadPool threadPool{ 1 };
|
||||
StubFileSource fileSource;
|
||||
Style style { fileSource, 1.0 };
|
||||
Style style { threadPool, fileSource, 1.0 };
|
||||
style.setJSON(util::read_file("test/fixtures/resources/style-unused-sources.json"));
|
||||
|
||||
// Add initial layer
|
||||
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
util::RunLoop loop;
|
||||
ThreadPool threadPool { 1 };
|
||||
AnnotationManager annotationManager { 1.0 };
|
||||
style::Style style { fileSource, 1.0 };
|
||||
style::Style style { threadPool, fileSource, 1.0 };
|
||||
|
||||
style::UpdateParameters updateParameters {
|
||||
1.0,
|
||||
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
util::RunLoop loop;
|
||||
ThreadPool threadPool { 1 };
|
||||
AnnotationManager annotationManager { 1.0 };
|
||||
style::Style style { fileSource, 1.0 };
|
||||
style::Style style { threadPool, fileSource, 1.0 };
|
||||
Tileset tileset { { "https://example.com" }, { 0, 22 }, "none" };
|
||||
|
||||
style::UpdateParameters updateParameters {
|
||||
|
||||
@@ -20,7 +20,7 @@ public:
|
||||
util::RunLoop loop;
|
||||
ThreadPool threadPool { 1 };
|
||||
AnnotationManager annotationManager { 1.0 };
|
||||
style::Style style { fileSource, 1.0 };
|
||||
style::Style style { threadPool, fileSource, 1.0 };
|
||||
Tileset tileset { { "https://example.com" }, { 0, 22 }, "none" };
|
||||
|
||||
style::UpdateParameters updateParameters {
|
||||
|
||||
@@ -26,7 +26,7 @@ public:
|
||||
util::RunLoop loop;
|
||||
ThreadPool threadPool { 1 };
|
||||
AnnotationManager annotationManager { 1.0 };
|
||||
style::Style style { fileSource, 1.0 };
|
||||
style::Style style { threadPool, fileSource, 1.0 };
|
||||
Tileset tileset { { "https://example.com" }, { 0, 22 }, "none" };
|
||||
|
||||
style::UpdateParameters updateParameters {
|
||||
|
||||
Reference in New Issue
Block a user