Stability improvements
This commit is contained in:
+23
-9
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user