summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-03-26 14:26:23 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-04-06 15:23:28 +0000
commit98878f5a25578c66b001c27817bffac6e0f82d20 (patch)
tree1aba2e5df65e7a68b325cef49276270afa852b96
parent30f549fce76ec7d62234f618decce38d3ef1c475 (diff)
downloadqtlocation-98878f5a25578c66b001c27817bffac6e0f82d20.tar.gz
Allow threaded tile provisioning
This change virtualizes four key methods of QGeoTiledMappingManagerEngine, that need to be reimplemented in order to be able to run tile provisioning in a separate thread. QGeoTileRequestManager is also now privately exported, as it has to be used in those methods. Finally the patch includes some minor cleanup in QGeoTileFetcher. Change-Id: I3063263120f935f0cde54abf00bd1caa476ab215 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--src/location/maps/qgeotiledmappingmanagerengine_p.h10
-rw-r--r--src/location/maps/qgeotilefetcher.cpp9
-rw-r--r--src/location/maps/qgeotilerequestmanager_p.h3
3 files changed, 9 insertions, 13 deletions
diff --git a/src/location/maps/qgeotiledmappingmanagerengine_p.h b/src/location/maps/qgeotiledmappingmanagerengine_p.h
index a7b4b1d0..3455655f 100644
--- a/src/location/maps/qgeotiledmappingmanagerengine_p.h
+++ b/src/location/maps/qgeotiledmappingmanagerengine_p.h
@@ -82,19 +82,18 @@ public:
QSize tileSize() const;
int tileVersion() const;
- void updateTileRequests(QGeoTiledMap *map,
+ virtual void updateTileRequests(QGeoTiledMap *map,
const QSet<QGeoTileSpec> &tilesAdded,
const QSet<QGeoTileSpec> &tilesRemoved);
QAbstractGeoTileCache *tileCache();
- QSharedPointer<QGeoTileTexture> getTileTexture(const QGeoTileSpec &spec);
-
+ virtual QSharedPointer<QGeoTileTexture> getTileTexture(const QGeoTileSpec &spec);
QAbstractGeoTileCache::CacheAreas cacheHint() const;
private Q_SLOTS:
- void engineTileFinished(const QGeoTileSpec &spec, const QByteArray &bytes, const QString &format);
- void engineTileError(const QGeoTileSpec &spec, const QString &errorString);
+ virtual void engineTileFinished(const QGeoTileSpec &spec, const QByteArray &bytes, const QString &format);
+ virtual void engineTileError(const QGeoTileSpec &spec, const QString &errorString);
Q_SIGNALS:
void tileError(const QGeoTileSpec &spec, const QString &errorString);
@@ -108,7 +107,6 @@ protected:
void setTileCache(QAbstractGeoTileCache *cache);
QGeoTiledMap::PrefetchStyle m_prefetchStyle;
-private:
QGeoTiledMappingManagerEnginePrivate *d_ptr;
Q_DECLARE_PRIVATE(QGeoTiledMappingManagerEngine)
diff --git a/src/location/maps/qgeotilefetcher.cpp b/src/location/maps/qgeotilefetcher.cpp
index bab75034..b3f7021b 100644
--- a/src/location/maps/qgeotilefetcher.cpp
+++ b/src/location/maps/qgeotilefetcher.cpp
@@ -52,9 +52,6 @@ QGeoTileFetcher::QGeoTileFetcher(QGeoMappingManagerEngine *parent)
d->enabled_ = true;
d->engine_ = parent;
-
-// if (!d->queue_.isEmpty())
-// d->timer_.start(0, this);
}
QGeoTileFetcher::QGeoTileFetcher(QGeoTileFetcherPrivate &dd, QGeoMappingManagerEngine *parent)
@@ -63,9 +60,6 @@ QGeoTileFetcher::QGeoTileFetcher(QGeoTileFetcherPrivate &dd, QGeoMappingManagerE
Q_D(QGeoTileFetcher);
d->enabled_ = true;
d->engine_ = parent;
-
-// if (!d->queue_.isEmpty())
-// d->timer_.start(0, this);
}
QGeoTileFetcher::~QGeoTileFetcher()
@@ -92,6 +86,7 @@ void QGeoTileFetcher::cancelTileRequests(const QSet<QGeoTileSpec> &tiles)
Q_D(QGeoTileFetcher);
typedef QSet<QGeoTileSpec>::const_iterator tile_iter;
+ // No need to lock: called only in updateTileRequests
tile_iter tile = tiles.constBegin();
tile_iter end = tiles.constEnd();
for (; tile != end; ++tile) {
@@ -176,10 +171,12 @@ void QGeoTileFetcher::timerEvent(QTimerEvent *event)
return;
}
+ QMutexLocker ml(&d->queueMutex_);
if (d->queue_.isEmpty() || !initialized()) {
d->timer_.stop();
return;
}
+ ml.unlock();
requestNextTile();
}
diff --git a/src/location/maps/qgeotilerequestmanager_p.h b/src/location/maps/qgeotilerequestmanager_p.h
index f8ea4814..000e3f3a 100644
--- a/src/location/maps/qgeotilerequestmanager_p.h
+++ b/src/location/maps/qgeotilerequestmanager_p.h
@@ -48,6 +48,7 @@
//
#include <QtCore/QSharedPointer>
+#include <QtLocation/private/qlocationglobal_p.h>
QT_BEGIN_NAMESPACE
@@ -58,7 +59,7 @@ class QGeoTileTexture;
class QGeoTileRequestManagerPrivate;
-class QGeoTileRequestManager
+class Q_LOCATION_PRIVATE_EXPORT QGeoTileRequestManager
{
public:
explicit QGeoTileRequestManager(QGeoTiledMap *map, QGeoTiledMappingManagerEngine *engine);