#include #include #include #include #include #include #include #include #include #include #include namespace mbgl { RasterTile::RasterTile(const OverscaledTileID& id_, const TileParameters& parameters, const Tileset& tileset) : Tile(id_), loader(*this, id_, parameters, tileset), mailbox(std::make_shared(*util::RunLoop::Get())), worker(parameters.workerScheduler, ActorRef(*this, mailbox)) { } RasterTile::~RasterTile() = default; void RasterTile::cancel() { } void RasterTile::setError(std::exception_ptr err) { loaded = true; observer->onTileError(*this, err); } void RasterTile::setData(std::shared_ptr data, optional modified_, optional expires_) { modified = modified_; expires = expires_; pending = true; ++correlationID; worker.invoke(&RasterTileWorker::parse, data, correlationID); } void RasterTile::onParsed(std::unique_ptr result, const uint64_t resultCorrelationID) { bucket = std::move(result); loaded = true; if (resultCorrelationID == correlationID) { pending = false; } renderable = bucket ? true : false; observer->onTileChanged(*this); } void RasterTile::onError(std::exception_ptr err, const uint64_t resultCorrelationID) { loaded = true; if (resultCorrelationID == correlationID) { pending = false; } observer->onTileError(*this, err); } Bucket* RasterTile::getBucket(const RenderLayer&) const { return bucket.get(); } void RasterTile::setNecessity(Necessity necessity) { loader.setNecessity(necessity); } } // namespace mbgl