Browse Source

Speeded up logfile compression from quadratic to near-linear complexity

QGC4.4
pixhawk 15 years ago
parent
commit
1412cb1abf
  1. 32
      src/LogCompressor.cc

32
src/LogCompressor.cc

@ -125,7 +125,9 @@ void LogCompressor::run() @@ -125,7 +125,9 @@ void LogCompressor::run()
file.reset();
QTextStream data(&file);
int linecounter = 0;
while (!data.atEnd()) {
quint64 lastTimeIndex = 0;
while (!data.atEnd())
{
linecounter++;
currentDataLine = linecounter;
QString line = data.readLine();
@ -140,7 +142,33 @@ void LogCompressor::run() @@ -140,7 +142,33 @@ void LogCompressor::run()
value = "NaN";
}
// Get matching output line
quint64 index = times->indexOf(time);
// Constraining the search area might result in not finding a key,
// but it significantly reduces the time needed for the search
// setting a window of 1000 entries means that a 1 Hz data point
// can still be located
int offsetLimit = 200;
quint64 offset;
quint64 index = -1;
while (index == -1)
{
if (lastTimeIndex > offsetLimit)
{
offset = lastTimeIndex - offsetLimit;
}
else
{
offset = 0;
}
quint64 index = times->indexOf(time, offset);
if (index == -1)
{
qDebug() << "INDEX NOT FOUND DURING LOGFILE PROCESSING, RESTARTING SEARCH";
// FIXME Reset and start without offset heuristic again
offsetLimit+=1000;
}
}
lastTimeIndex = index;
QString outLine = outLines->at(index);
QStringList outParts = outLine.split(separator);
// Replace measurement placeholder with current value

Loading…
Cancel
Save