если вызовать функцию вроде XChangeGC, произойдет ли простой вызов функции в .so или же там что-то по сети передаваться будет? имеет ли смысл в последнем случае уменьшать количество таких вызовов?
необязательно к локальному, если он удаленный, то к удаленному.
почти все GUI tookits (qt, gtk, fox, etc.) используют различные типы
локального кэширования GCs.
ChangeGC/CopyGC/CreateGC, кстати, ответа от сервера не требуют, поэтому уменьшение количества вызовов ничего не даст. Затрудняют работу те запросы, которые требуют ответа и удерживают программу от дальнейшего выполнения.
> ChangeGC/CopyGC/CreateGC, кстати, ответа от сервера не требуют
По-моему, требуют - сам убеждался неоднократно,
потому что когда-то писал "свой" GUI toolkit.
На пример, когда меняешь/создаешь фонт, цвет, stipple, etc.
Поэтому, все эти qfontы и пр. и существуют, т.е. - это локальные,
кэшированные GCs. В Qt были (давно не смотрел сорцы) даже для
разного типа lines (комбинация толщина + цвет) hashed/cached GCs
100%, что не требуют. Весь X protocol сейчас в удобном виде систематизирован в xproto.xml в проекте XCB. У тех запросов, которые требуют ответа есть поле <reply>. У этих вот конктретно команд есть только поле запроса <request>.
По ссылке xproto.xml, поиском ChangeGC можно отыскать.
> ответа от сервера не требуют
возможно, и не требуют, но все равно тормозят, по сравнению
с локальным вариантом , ведь X-request все равно отсылается.