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