QPostEventList: de-inline addEvent()

While in a private header, it did manage to place QList<QPostEvent>
operations near the top spots of all Qt template instantiations in a
QtWidgets build.

Task-number: QTBUG-97601
Pick-to: 6.4
Change-Id: I4fa1972b8764b71ad0559633131e7e44b3d4ae6a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
bb10
Marc Mutz 2022-05-12 12:22:19 +02:00
parent 882fc48b9e
commit 1a030f6609
2 changed files with 24 additions and 17 deletions

View File

@ -18,6 +18,29 @@
QT_BEGIN_NAMESPACE
/*
QPostEventList
*/
void QPostEventList::addEvent(const QPostEvent &ev)
{
int priority = ev.priority;
if (isEmpty() ||
constLast().priority >= priority ||
insertionOffset >= size()) {
// optimization: we can simply append if the last event in
// the queue has higher or equal priority
append(ev);
} else {
// insert event in descending priority order, using upper
// bound for a given priority (to ensure proper ordering
// of events with the same priority)
QPostEventList::iterator at = std::upper_bound(begin() + insertionOffset, end(), ev);
insert(at, ev);
}
}
/*
QThreadData
*/

View File

@ -73,23 +73,7 @@ public:
inline QPostEventList() : QList<QPostEvent>(), recursion(0), startOffset(0), insertionOffset(0) { }
void addEvent(const QPostEvent &ev)
{
int priority = ev.priority;
if (isEmpty() ||
constLast().priority >= priority ||
insertionOffset >= size()) {
// optimization: we can simply append if the last event in
// the queue has higher or equal priority
append(ev);
} else {
// insert event in descending priority order, using upper
// bound for a given priority (to ensure proper ordering
// of events with the same priority)
QPostEventList::iterator at = std::upper_bound(begin() + insertionOffset, end(), ev);
insert(at, ev);
}
}
void addEvent(const QPostEvent &ev);
private:
//hides because they do not keep that list sorted. addEvent must be used