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