From: Milian Wolff Date: Tue, 5 Apr 2016 21:33:40 +0000 (+0200) Subject: Cache QPen and QBrush used by ChartModel. X-Git-Tag: submit/tizen/20180620.112952^2~191 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a0de51fca8274a83bd730066ba9cc239337f50dd;p=sdk%2Ftools%2Fheaptrack.git Cache QPen and QBrush used by ChartModel. This removes quite a few allocations that would otherwise happen when the data is queried by KDiagram. --- diff --git a/gui/chartmodel.cpp b/gui/chartmodel.cpp index b914b38..fb95aec 100644 --- a/gui/chartmodel.cpp +++ b/gui/chartmodel.cpp @@ -54,9 +54,9 @@ QVariant ChartModel::headerData(int section, Qt::Orientation orientation, int ro Q_ASSERT(orientation == Qt::Horizontal || section < columnCount()); if (orientation == Qt::Horizontal) { if (role == KChart::DatasetPenRole) { - return QVariant::fromValue(QPen(colorForColumn(section, columnCount()))); + return QVariant::fromValue(m_columnDataSetPens.at(section)); } else if (role == KChart::DatasetBrushRole) { - return QVariant::fromValue(QBrush(colorForColumn(section, columnCount()))); + return QVariant::fromValue(m_columnDataSetBrushes.at(section)); } if (role == Qt::DisplayRole || Qt::ToolTipRole) { @@ -100,9 +100,9 @@ QVariant ChartModel::data(const QModelIndex& index, int role) const if ( role == KChart::DatasetPenRole ) { - return QVariant::fromValue(QPen(colorForColumn(index.column(), columnCount()))); + return QVariant::fromValue(m_columnDataSetPens.at(index.column())); } else if ( role == KChart::DatasetBrushRole ) { - return QVariant::fromValue(QBrush(colorForColumn(index.column(), columnCount()))); + return QVariant::fromValue(m_columnDataSetBrushes.at(index.column())); } if ( role != Qt::DisplayRole && role != Qt::ToolTipRole ) { @@ -162,5 +162,13 @@ void ChartModel::resetData(const ChartData& data) Q_ASSERT(m_data.labels.size() < ChartRows::MAX_NUM_COST); beginResetModel(); m_data = data; + m_columnDataSetBrushes.clear(); + m_columnDataSetPens.clear(); + const auto columns = columnCount(); + for (int i = 0; i < columns; ++i) { + auto color = colorForColumn(i, columns); + m_columnDataSetBrushes << QBrush(color); + m_columnDataSetPens << QPen(color); + } endResetModel(); } diff --git a/gui/chartmodel.h b/gui/chartmodel.h index 2e299d6..03ce5a8 100644 --- a/gui/chartmodel.h +++ b/gui/chartmodel.h @@ -72,6 +72,9 @@ public slots: private: ChartData m_data; Type m_type; + // we cache the pens and brushes as constructing them requires allocations otherwise + QVector m_columnDataSetPens; + QVector m_columnDataSetBrushes; }; #endif // CHARTMODEL_H