Stability improvements

This commit is contained in:
Collin Kidder
2016-03-24 21:19:43 -04:00
parent f48c1c0566
commit ed238440a4
2 changed files with 26 additions and 12 deletions
+25 -11
View File
@@ -6,7 +6,11 @@
int CANFrameModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
if (filteredFrames.data()) return filteredFrames.count();
if (filteredFrames.data())
{
int rows = filteredFrames.count();
return rows;
}
//just in case somehow data is invalid which I have seen before.
//But, this should not happen so issue a debugging message too
@@ -16,7 +20,9 @@ int CANFrameModel::rowCount(const QModelIndex &parent) const
int CANFrameModel::totalFrameCount()
{
return frames.count();
int count;
count = frames.count();
return count;
}
int CANFrameModel::columnCount(const QModelIndex &index) const
@@ -28,8 +34,8 @@ int CANFrameModel::columnCount(const QModelIndex &index) const
CANFrameModel::CANFrameModel(QObject *parent)
: QAbstractTableModel(parent)
{
frames.reserve(10000000); //yes, I'm preallocating 10 million entries in this list. I don't think anyone will exceed this.
filteredFrames.reserve(10000000);
frames.reserve(50000000); //yes, preallocating a huge number of frames.
filteredFrames.reserve(50000000); //the goal is to prevent a reallocation from ever happening
dbcHandler = NULL;
interpretFrames = false;
overwriteDups = false;
@@ -80,6 +86,7 @@ void CANFrameModel::setInterpetMode(bool mode)
void CANFrameModel::normalizeTiming()
{
mutex.lock();
if (frames.count() == 0) return;
timeOffset = frames[0].timestamp;
for (int i = 0; i < frames.count(); i++)
@@ -92,11 +99,14 @@ void CANFrameModel::normalizeTiming()
filteredFrames[i].timestamp -= timeOffset;
}
this->endResetModel();
mutex.unlock();
}
void CANFrameModel::setOverwriteMode(bool mode)
{
beginResetModel();
overwriteDups = mode;
endResetModel();
}
void CANFrameModel::setFilterState(int ID, bool state)
@@ -125,6 +135,7 @@ void CANFrameModel::recalcOverwrite()
int lastUnique = 0;
bool found;
mutex.lock();
beginResetModel();
for (int i = 1; i < frames.count(); i++)
{
@@ -148,6 +159,7 @@ void CANFrameModel::recalcOverwrite()
while (frames.count() > lastUnique) frames.removeLast();
filteredFrames.clear();
filteredFrames.reserve(50000000);
for (int i = 0; i < frames.count(); i++)
{
@@ -158,6 +170,7 @@ void CANFrameModel::recalcOverwrite()
}
endResetModel();
mutex.unlock();
}
QVariant CANFrameModel::data(const QModelIndex &index, int role) const
@@ -332,11 +345,9 @@ void CANFrameModel::addFrame(const CANFrame &frame, bool autoRefresh = false)
}
void CANFrameModel::sendRefresh()
{
mutex.lock();
{
qDebug() << "Sending mass refresh";
QVector<CANFrame> tempContainer;
beginResetModel();
QVector<CANFrame> tempContainer;
int count = frames.count();
for (int i = 0; i < count; i++)
{
@@ -345,8 +356,11 @@ void CANFrameModel::sendRefresh()
tempContainer.append(frames[i]);
}
}
mutex.lock();
beginResetModel();
filteredFrames.clear();
filteredFrames.append(tempContainer);
filteredFrames.reserve(50000000);
lastUpdateNumFrames = filteredFrames.count();
endResetModel();
mutex.unlock();
@@ -381,14 +395,12 @@ void CANFrameModel::sendBulkRefresh(int num)
if (!overwriteDups)
{
mutex.lock();
if (num > filteredFrames.count()) num = filteredFrames.count();
//if (num > filteredFrames.count()) num = filteredFrames.count();
//qDebug() << "From " << (filteredFrames.count() - num) << " to " << (filteredFrames.count() - 1);
//beginInsertRows(QModelIndex(), filteredFrames.count() - num, filteredFrames.count() - 1);
//endInsertRows();
beginResetModel();
endResetModel();
mutex.unlock();
}
else
{
@@ -404,6 +416,8 @@ void CANFrameModel::clearFrames()
frames.clear();
filteredFrames.clear();
filters.clear();
frames.reserve(50000000);
filteredFrames.reserve(50000000);
this->endResetModel();
lastUpdateNumFrames = 0;
mutex.unlock();
+1 -1
View File
@@ -21,7 +21,7 @@ public:
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
int columnCount(const QModelIndex &) const;
int totalFrameCount();
int totalFrameCount();
void addFrame(const CANFrame &, bool);
void sendRefresh();