diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-09-06 15:01:34 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-09-16 12:01:06 -0700 |
commit | 41bbd4e4f7d66465433e370ca024ab0239fcace3 (patch) | |
tree | 8fe15fa31d97aafeb175a808e431b437297af88b /src/mbgl/tile/raster_tile_worker.cpp | |
parent | 0bd66d40ddf9e75f860fe18e7c80de9c840f48ac (diff) | |
download | qtlocation-mapboxgl-41bbd4e4f7d66465433e370ca024ab0239fcace3.tar.gz |
[core] Use an actor model for tile worker concurrency
Diffstat (limited to 'src/mbgl/tile/raster_tile_worker.cpp')
-rw-r--r-- | src/mbgl/tile/raster_tile_worker.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mbgl/tile/raster_tile_worker.cpp b/src/mbgl/tile/raster_tile_worker.cpp new file mode 100644 index 0000000000..838737d5b8 --- /dev/null +++ b/src/mbgl/tile/raster_tile_worker.cpp @@ -0,0 +1,27 @@ +#include <mbgl/tile/raster_tile_worker.hpp> +#include <mbgl/tile/raster_tile.hpp> +#include <mbgl/renderer/raster_bucket.cpp> +#include <mbgl/actor/actor.hpp> + +namespace mbgl { + +RasterTileWorker::RasterTileWorker(ActorRef<RasterTileWorker>, ActorRef<RasterTile> parent_) + : parent(std::move(parent_)) { +} + +void RasterTileWorker::parse(std::shared_ptr<const std::string> data) { + if (!data) { + parent.invoke(&RasterTile::onParsed, nullptr); // No data; empty tile. + return; + } + + try { + auto bucket = std::make_unique<RasterBucket>(); + bucket->setImage(decodeImage(*data)); + parent.invoke(&RasterTile::onParsed, std::move(bucket)); + } catch (...) { + parent.invoke(&RasterTile::setError, std::current_exception()); + } +} + +} // namespace mbgl |