diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-09-08 13:00:15 +0200 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-09-11 10:45:01 +0000 |
commit | f09e5fb2eaba4a3d3f131fa4a4392ec49d02af0d (patch) | |
tree | 4e58c3080faefaf4a9e24a4c820fa6d1f2050725 /src | |
parent | 7e6c4b8229ea03b25a271a7a61094f28abc504eb (diff) | |
download | qtlocation-f09e5fb2eaba4a3d3f131fa4a4392ec49d02af0d.tar.gz |
Fix tile cache not honoring cost 0
This patch fixes the case of disabling the various caches.
Currently setting the cache size to 0 results in default initial values
instead.
Change-Id: I019cd15ac23b6479e4367a3e102dd661895a7fda
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/location/maps/qgeofiletilecache.cpp | 38 | ||||
-rw-r--r-- | src/location/maps/qgeofiletilecache_p.h | 4 |
2 files changed, 33 insertions, 9 deletions
diff --git a/src/location/maps/qgeofiletilecache.cpp b/src/location/maps/qgeofiletilecache.cpp index d40ad825..df89c889 100644 --- a/src/location/maps/qgeofiletilecache.cpp +++ b/src/location/maps/qgeofiletilecache.cpp @@ -88,6 +88,7 @@ QGeoCachedTileDisk::~QGeoCachedTileDisk() QGeoFileTileCache::QGeoFileTileCache(const QString &directory, QObject *parent) : QAbstractGeoTileCache(parent), directory_(directory), minTextureUsage_(0), extraTextureUsage_(0) ,costStrategyDisk_(ByteSize), costStrategyMemory_(ByteSize), costStrategyTexture_(ByteSize) + ,isDiskCostSet_(false), isMemoryCostSet_(false), isTextureCostSet_(false) { } @@ -120,21 +121,21 @@ void QGeoFileTileCache::init() QDir::root().mkpath(directory_); // default values - if (!diskCache_.maxCost()) { // If setMaxDiskUsage has not been called yet + if (!isDiskCostSet_) { // If setMaxDiskUsage has not been called yet if (costStrategyDisk_ == ByteSize) setMaxDiskUsage(50 * 1024 * 1024); else setMaxDiskUsage(1000); } - if (!memoryCache_.maxCost()) { // If setMaxMemoryUsage has not been called yet + if (!isMemoryCostSet_) { // If setMaxMemoryUsage has not been called yet if (costStrategyMemory_ == ByteSize) setMaxMemoryUsage(3 * 1024 * 1024); else setMaxMemoryUsage(100); } - if (!textureCache_.maxCost()) { // If setExtraTextureUsage has not been called yet + if (!isTextureCostSet_) { // If setExtraTextureUsage has not been called yet if (costStrategyTexture_ == ByteSize) setExtraTextureUsage(6 * 1024 * 1024); else @@ -240,6 +241,7 @@ void QGeoFileTileCache::printStats() void QGeoFileTileCache::setMaxDiskUsage(int diskUsage) { diskCache_.setMaxCost(diskUsage); + isDiskCostSet_ = true; } int QGeoFileTileCache::maxDiskUsage() const @@ -255,6 +257,7 @@ int QGeoFileTileCache::diskUsage() const void QGeoFileTileCache::setMaxMemoryUsage(int memoryUsage) { memoryCache_.setMaxCost(memoryUsage); + isMemoryCostSet_ = true; } int QGeoFileTileCache::maxMemoryUsage() const @@ -271,6 +274,7 @@ void QGeoFileTileCache::setExtraTextureUsage(int textureUsage) { extraTextureUsage_ = textureUsage; textureCache_.setMaxCost(minTextureUsage_ + extraTextureUsage_); + isTextureCostSet_ = true; } void QGeoFileTileCache::setMinTextureUsage(int textureUsage) @@ -384,12 +388,7 @@ void QGeoFileTileCache::insert(const QGeoTileSpec &spec, if (areas & QAbstractGeoTileCache::DiskCache) { QString filename = tileSpecToFilename(spec, format, directory_); - QFile file(filename); - file.open(QIODevice::WriteOnly); - file.write(bytes); - file.close(); - - addToDiskCache(spec, filename); + addToDiskCache(spec, filename, bytes); } if (areas & QAbstractGeoTileCache::MemoryCache) { @@ -491,6 +490,27 @@ QSharedPointer<QGeoCachedTileDisk> QGeoFileTileCache::addToDiskCache(const QGeoT return td; } +bool QGeoFileTileCache::addToDiskCache(const QGeoTileSpec &spec, const QString &filename, const QByteArray &bytes) +{ + QSharedPointer<QGeoCachedTileDisk> td(new QGeoCachedTileDisk); + td->spec = spec; + td->filename = filename; + td->cache = this; + + int cost = 1; + if (costStrategyDisk_ == ByteSize) + cost = bytes.size(); + + if (diskCache_.insert(spec, td, cost)) { + QFile file(filename); + file.open(QIODevice::WriteOnly); + file.write(bytes); + file.close(); + return true; + } + return false; +} + void QGeoFileTileCache::addToMemoryCache(const QGeoTileSpec &spec, const QByteArray &bytes, const QString &format) { if (isTileBogus(bytes)) diff --git a/src/location/maps/qgeofiletilecache_p.h b/src/location/maps/qgeofiletilecache_p.h index e319e2a2..1712a9e3 100644 --- a/src/location/maps/qgeofiletilecache_p.h +++ b/src/location/maps/qgeofiletilecache_p.h @@ -147,6 +147,7 @@ protected: QString directory() const; QSharedPointer<QGeoCachedTileDisk> addToDiskCache(const QGeoTileSpec &spec, const QString &filename); + bool addToDiskCache(const QGeoTileSpec &spec, const QString &filename, const QByteArray &bytes); void addToMemoryCache(const QGeoTileSpec &spec, const QByteArray &bytes, const QString &format); QSharedPointer<QGeoTileTexture> addToTextureCache(const QGeoTileSpec &spec, const QImage &image); QSharedPointer<QGeoTileTexture> getFromMemory(const QGeoTileSpec &spec); @@ -167,6 +168,9 @@ protected: CostStrategy costStrategyDisk_; CostStrategy costStrategyMemory_; CostStrategy costStrategyTexture_; + bool isDiskCostSet_; + bool isMemoryCostSet_; + bool isTextureCostSet_; }; QT_END_NAMESPACE |