xcb: avoid unnecessary InternAtom requests
QXcbConnection::internAtom() creates the atom if it does not exist. The lifetime of an atom is not tied to the interning client. Atoms remain defined until server reset (lost connection, restart). So create the atom once via QXcbConnection::initializeAllAtoms(), and later fetch the atom value from local array, instead of repeating InternAtom requests. Change-Id: I3cae21895febad6e5daf8c32e72612202baaad64 Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>bb10
parent
b9a0276a79
commit
0e63111416
|
|
@ -832,7 +832,7 @@ xcb_generic_event_t *QXcbClipboard::waitForClipboardEvent(xcb_window_t window, i
|
|||
}
|
||||
|
||||
// process other clipboard events, since someone is probably requesting data from us
|
||||
auto clipboardAtom = connection()->internAtom("CLIPBOARD");
|
||||
auto clipboardAtom = atom(QXcbAtom::CLIPBOARD);
|
||||
e = connection()->checkEvent([clipboardAtom](xcb_generic_event_t *event, int type) {
|
||||
xcb_atom_t selection = XCB_ATOM_NONE;
|
||||
if (type == XCB_SELECTION_REQUEST)
|
||||
|
|
|
|||
|
|
@ -1964,6 +1964,10 @@ static const char * xcb_atomnames = {
|
|||
"_COMPIZ_DECOR_DELETE_PIXMAP\0"
|
||||
"_COMPIZ_TOOLKIT_ACTION\0"
|
||||
"_GTK_LOAD_ICONTHEMES\0"
|
||||
"AT_SPI_BUS\0"
|
||||
"EDID\0"
|
||||
"EDID_DATA\0"
|
||||
"XFree86_DDC_EDID1_RAWDATA\0"
|
||||
// \0\0 terminates loop.
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -295,6 +295,12 @@ namespace QXcbAtom {
|
|||
_COMPIZ_TOOLKIT_ACTION,
|
||||
_GTK_LOAD_ICONTHEMES,
|
||||
|
||||
AT_SPI_BUS,
|
||||
|
||||
EDID,
|
||||
EDID_DATA,
|
||||
XFree86_DDC_EDID1_RAWDATA,
|
||||
|
||||
NAtoms
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ void *QXcbNativeInterface::atspiBus()
|
|||
QXcbIntegration *integration = static_cast<QXcbIntegration *>(QGuiApplicationPrivate::platformIntegration());
|
||||
QXcbConnection *defaultConnection = integration->defaultConnection();
|
||||
if (defaultConnection) {
|
||||
xcb_atom_t atspiBusAtom = defaultConnection->internAtom("AT_SPI_BUS");
|
||||
auto atspiBusAtom = defaultConnection->atom(QXcbAtom::AT_SPI_BUS);
|
||||
auto reply = Q_XCB_REPLY(xcb_get_property, defaultConnection->xcb_connection(),
|
||||
false, defaultConnection->rootWindow(),
|
||||
atspiBusAtom, XCB_ATOM_STRING, 0, 128);
|
||||
|
|
|
|||
|
|
@ -906,16 +906,12 @@ QByteArray QXcbScreen::getEdid() const
|
|||
return result;
|
||||
|
||||
// Try a bunch of atoms
|
||||
xcb_atom_t atom = connection()->internAtom("EDID");
|
||||
result = getOutputProperty(atom);
|
||||
if (result.isEmpty()) {
|
||||
atom = connection()->internAtom("EDID_DATA");
|
||||
result = getOutputProperty(atom);
|
||||
}
|
||||
if (result.isEmpty()) {
|
||||
atom = connection()->internAtom("XFree86_DDC_EDID1_RAWDATA");
|
||||
result = getOutputProperty(atom);
|
||||
}
|
||||
result = getOutputProperty(atom(QXcbAtom::EDID));
|
||||
if (result.isEmpty())
|
||||
result = getOutputProperty(atom(QXcbAtom::EDID_DATA));
|
||||
if (result.isEmpty())
|
||||
result = getOutputProperty(atom(QXcbAtom::XFree86_DDC_EDID1_RAWDATA));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue