From f6155a7622d9f6b40a2c6d190024682cf33d616a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 21 Jul 2019 18:55:01 +0300 Subject: [PATCH] QWaylandCursorTheme: replace a QMap with a C array MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The QMap's key is an enumeration with small values (<= 33, as of this writing), and while the range has a hole, it's not a terribly big one. So, instead of using a QMap, just use a C array of mapped_type, using the key as an index into the array. This gives a 'map' with zero memory allocations. It also saves a bit more than 700B in text size on optimized Linux AMD64 GCC 9.1 builds. Change-Id: If538ba80075f1bbdffd82b070e871391e6a5a6d1 Reviewed-by: MÃ¥rten Nordheim --- src/plugins/platforms/wayland/qwaylandcursor.cpp | 4 ++-- src/plugins/platforms/wayland/qwaylandcursor_p.h | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandcursor.cpp b/src/plugins/platforms/wayland/qwaylandcursor.cpp index 1d3d88bea3a..4d540c5db76 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor.cpp +++ b/src/plugins/platforms/wayland/qwaylandcursor.cpp @@ -74,7 +74,7 @@ QWaylandCursorTheme::~QWaylandCursorTheme() wl_cursor *QWaylandCursorTheme::requestCursor(WaylandCursor shape) { - if (struct wl_cursor *cursor = m_cursors.value(shape, nullptr)) + if (struct wl_cursor *cursor = m_cursors[shape]) return cursor; static Q_CONSTEXPR struct ShapeAndName { @@ -206,7 +206,7 @@ wl_cursor *QWaylandCursorTheme::requestCursor(WaylandCursor shape) ShapeAndName{shape, ""}, byShape); for (auto it = p.first; it != p.second; ++it) { if (wl_cursor *cursor = wl_cursor_theme_get_cursor(m_theme, it->name)) { - m_cursors.insert(shape, cursor); + m_cursors[shape] = cursor; return cursor; } } diff --git a/src/plugins/platforms/wayland/qwaylandcursor_p.h b/src/plugins/platforms/wayland/qwaylandcursor_p.h index 751ffa68b71..3e5cff9bca1 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor_p.h +++ b/src/plugins/platforms/wayland/qwaylandcursor_p.h @@ -109,13 +109,15 @@ private: ResizeNorthWestCursor, ResizeSouthEastCursor, ResizeNorthEastCursor, - ResizeSouthWestCursor + ResizeSouthWestCursor, + + NumWaylandCursors }; explicit QWaylandCursorTheme(struct ::wl_cursor_theme *theme) : m_theme(theme) {} struct ::wl_cursor *requestCursor(WaylandCursor shape); struct ::wl_cursor_theme *m_theme = nullptr; - QMap m_cursors; + wl_cursor *m_cursors[NumWaylandCursors] = {}; }; class Q_WAYLAND_CLIENT_EXPORT QWaylandCursor : public QPlatformCursor