From f09e5fb2eaba4a3d3f131fa4a4392ec49d02af0d Mon Sep 17 00:00:00 2001 From: Paolo Angelelli Date: Fri, 8 Sep 2017 13:00:15 +0200 Subject: 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 --- src/location/maps/qgeofiletilecache.cpp | 38 +++++++++++++++++++++++++-------- src/location/maps/qgeofiletilecache_p.h | 4 ++++ 2 files changed, 33 insertions(+), 9 deletions(-) (limited to 'src/location') 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 QGeoFileTileCache::addToDiskCache(const QGeoT return td; } +bool QGeoFileTileCache::addToDiskCache(const QGeoTileSpec &spec, const QString &filename, const QByteArray &bytes) +{ + QSharedPointer 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 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 addToTextureCache(const QGeoTileSpec &spec, const QImage &image); QSharedPointer getFromMemory(const QGeoTileSpec &spec); @@ -167,6 +168,9 @@ protected: CostStrategy costStrategyDisk_; CostStrategy costStrategyMemory_; CostStrategy costStrategyTexture_; + bool isDiskCostSet_; + bool isMemoryCostSet_; + bool isTextureCostSet_; }; QT_END_NAMESPACE -- cgit v1.2.3