summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2017-09-08 13:00:15 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2017-09-11 10:45:01 +0000
commitf09e5fb2eaba4a3d3f131fa4a4392ec49d02af0d (patch)
tree4e58c3080faefaf4a9e24a4c820fa6d1f2050725
parent7e6c4b8229ea03b25a271a7a61094f28abc504eb (diff)
downloadqtlocation-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>
-rw-r--r--src/location/maps/qgeofiletilecache.cpp38
-rw-r--r--src/location/maps/qgeofiletilecache_p.h4
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