diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-03-26 14:26:23 +0200 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-04-06 15:23:28 +0000 |
commit | 98878f5a25578c66b001c27817bffac6e0f82d20 (patch) | |
tree | 1aba2e5df65e7a68b325cef49276270afa852b96 /src/location/maps | |
parent | 30f549fce76ec7d62234f618decce38d3ef1c475 (diff) | |
download | qtlocation-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>
Diffstat (limited to 'src/location/maps')
-rw-r--r-- | src/location/maps/qgeotiledmappingmanagerengine_p.h | 10 | ||||
-rw-r--r-- | src/location/maps/qgeotilefetcher.cpp | 9 | ||||
-rw-r--r-- | src/location/maps/qgeotilerequestmanager_p.h | 3 |
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); |