summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/raster_tile_worker.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-09-06 15:01:34 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-09-16 12:01:06 -0700
commit41bbd4e4f7d66465433e370ca024ab0239fcace3 (patch)
tree8fe15fa31d97aafeb175a808e431b437297af88b /src/mbgl/tile/raster_tile_worker.cpp
parent0bd66d40ddf9e75f860fe18e7c80de9c840f48ac (diff)
downloadqtlocation-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.cpp27
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