forked from FOSS/BangleApps
gpstrek - Be a bit smarter about caching
parent
f268596c19
commit
a1c5142ecc
|
@ -80,14 +80,42 @@ let parseWaypointWithElevationAndName = function(filename, offset, result){
|
||||||
let cache = {};
|
let cache = {};
|
||||||
let cachedOffsets = [];
|
let cachedOffsets = [];
|
||||||
|
|
||||||
let getEntry = function(filename, offset, result){
|
let getFromCache = function(filename, offset, result){
|
||||||
if (offset < 0) return offset;
|
if(filename == cache.filename && cache[offset]) {
|
||||||
if(cache.filename != filename) cache = {};
|
|
||||||
if(filename && cache[offset]) {
|
|
||||||
Object.assign(result, cache[offset]);
|
Object.assign(result, cache[offset]);
|
||||||
result.access = Date.now();
|
result.access = Date.now();
|
||||||
return offset + cache[offset].fileLength;
|
return offset + cache[offset].fileLength;
|
||||||
}
|
}
|
||||||
|
return offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
let cacheCleanup = function (){
|
||||||
|
if (SETTINGS.cacheMinFreeMem){
|
||||||
|
while (cachedOffsets.length > 0 && process.memory(false).free < SETTINGS.cacheMinFreeMem){
|
||||||
|
cache[cachedOffsets.shift()] = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (SETTINGS.cacheMaxEntries){
|
||||||
|
while (cachedOffsets.length > SETTINGS.cacheMaxEntries){
|
||||||
|
cache[cachedOffsets.shift()] = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let cacheAdd = function (filename, result) {
|
||||||
|
cacheCleanup();
|
||||||
|
if(cache.filename != filename) {
|
||||||
|
cache = {};
|
||||||
|
cache.filename = filename;
|
||||||
|
}
|
||||||
|
cache[result.fileOffset] = result;
|
||||||
|
cachedOffsets.push(result.fileOffset);
|
||||||
|
};
|
||||||
|
|
||||||
|
let getEntry = function(filename, offset, result, noCaching){
|
||||||
|
if (offset < 0) return offset;
|
||||||
|
let cacheOffset = getFromCache(filename, offset, result);
|
||||||
|
if (cacheOffset != offset) return cacheOffset;
|
||||||
result.fileOffset = offset;
|
result.fileOffset = offset;
|
||||||
let type = STORAGE.read(filename, offset++, 1);
|
let type = STORAGE.read(filename, offset++, 1);
|
||||||
if (type == "") return -1;
|
if (type == "") return -1;
|
||||||
|
@ -111,17 +139,9 @@ let getEntry = function(filename, offset, result){
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
result.fileLength = offset - result.fileOffset;
|
result.fileLength = offset - result.fileOffset;
|
||||||
cache[result.fileOffset] = result;
|
if (!noCaching && (SETTINGS.cacheMaxEntries || SETTINGS.cacheMinFreeMem)){
|
||||||
cachedOffsets.push(result.fileOffset);
|
cacheAdd(filename, result);
|
||||||
if (SETTINGS.cacheMinFreeMem && process.memory(false).free < SETTINGS.cacheMinFreeMem){
|
|
||||||
if (cachedOffsets.length > 0) cache[cachedOffsets.shift()] = undefined;
|
|
||||||
}
|
}
|
||||||
if (SETTINGS.cacheMaxEntries){
|
|
||||||
while (cachedOffsets.length > SETTINGS.cacheMaxEntries){
|
|
||||||
cache[cachedOffsets.shift()] = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cache.filename = filename;
|
|
||||||
return offset;
|
return offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -870,7 +890,7 @@ let loadRouteData = function(filename, progressMonitor){
|
||||||
if (createIndexFile)
|
if (createIndexFile)
|
||||||
writeUint32(indexFileName, trfHash, 0, indexFileSize);
|
writeUint32(indexFileName, trfHash, 0, indexFileSize);
|
||||||
|
|
||||||
while ((scanOffset = getEntry(filename, scanOffset, waypoint)) > 0) {
|
while ((scanOffset = getEntry(filename, scanOffset, waypoint, true)) > 0) {
|
||||||
if (routeInfo.count % 5 == 0) progressMonitor(scanOffset, "Loading", size);
|
if (routeInfo.count % 5 == 0) progressMonitor(scanOffset, "Loading", size);
|
||||||
if (lastSeenWaypoint){
|
if (lastSeenWaypoint){
|
||||||
routeInfo.length += distance(lastSeenWaypoint, waypoint);
|
routeInfo.length += distance(lastSeenWaypoint, waypoint);
|
||||||
|
@ -952,7 +972,6 @@ let prev = function(route){
|
||||||
};
|
};
|
||||||
|
|
||||||
let lastMirror;
|
let lastMirror;
|
||||||
let cachedLast;
|
|
||||||
|
|
||||||
let getLast = function(route){
|
let getLast = function(route){
|
||||||
let wp = {};
|
let wp = {};
|
||||||
|
@ -960,9 +979,8 @@ let getLast = function(route){
|
||||||
if (route.mirror) getEntry(route.filename, route.indexToOffset[0], wp);
|
if (route.mirror) getEntry(route.filename, route.indexToOffset[0], wp);
|
||||||
if (!route.mirror) getEntry(route.filename, route.indexToOffset[route.count - 1], wp);
|
if (!route.mirror) getEntry(route.filename, route.indexToOffset[route.count - 1], wp);
|
||||||
lastMirror = route.mirror;
|
lastMirror = route.mirror;
|
||||||
cachedLast = wp;
|
|
||||||
}
|
}
|
||||||
return cachedLast;
|
return wp;
|
||||||
};
|
};
|
||||||
|
|
||||||
let removeMenu = function(){
|
let removeMenu = function(){
|
||||||
|
|
Loading…
Reference in New Issue