QGuiApplication: replace a QSet with QMinimalVarLengthFlatSet
The number of windows in a windowing system is clearly small, even smaller the number of windows that should be affected by a single touch event, so QSet is overkill. Use the recently-added QMinimalVarLengthFlatSet instead, backed by a QVLA<16>. Even though insertion and lookup are now logarithmic instead of constant-time, the saved memory allocations will make up for it. Change-Id: Ie33ecf4a155e58db597c67ed9c78549255c48b99 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
parent
afb74a86d8
commit
296ede3aab
@ -25,6 +25,7 @@
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtCore/private/qcoreapplication_p.h>
|
||||
#include <QtCore/private/qabstracteventdispatcher_p.h>
|
||||
#include <QtCore/private/qminimalflatset_p.h>
|
||||
#include <QtCore/qmutex.h>
|
||||
#include <QtCore/private/qthread_p.h>
|
||||
#include <QtCore/private/qlocking_p.h>
|
||||
@ -2931,17 +2932,16 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
|
||||
// Send the TouchCancel to all windows with active touches and clean up.
|
||||
QTouchEvent touchEvent(QEvent::TouchCancel, device, e->modifiers);
|
||||
touchEvent.setTimestamp(e->timestamp);
|
||||
QSet<QWindow *> windowsNeedingCancel;
|
||||
QMinimalVarLengthFlatSet<QWindow *, 16> windowsNeedingCancel;
|
||||
|
||||
for (auto &epd : devPriv->activePoints.values()) {
|
||||
if (QWindow *w = QMutableEventPoint::window(epd.eventPoint))
|
||||
windowsNeedingCancel.insert(w);
|
||||
}
|
||||
|
||||
for (QSet<QWindow *>::const_iterator winIt = windowsNeedingCancel.constBegin(),
|
||||
winItEnd = windowsNeedingCancel.constEnd(); winIt != winItEnd; ++winIt) {
|
||||
QGuiApplication::sendSpontaneousEvent(*winIt, &touchEvent);
|
||||
}
|
||||
for (QWindow *w : windowsNeedingCancel)
|
||||
QGuiApplication::sendSpontaneousEvent(w, &touchEvent);
|
||||
|
||||
if (!self->synthesizedMousePoints.isEmpty() && !e->synthetic()) {
|
||||
for (QHash<QWindow *, SynthesizedMouseData>::const_iterator synthIt = self->synthesizedMousePoints.constBegin(),
|
||||
synthItEnd = self->synthesizedMousePoints.constEnd(); synthIt != synthItEnd; ++synthIt) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user