Что быстрее (XGetImage+XPutImage) VS XCopyArea VS (XShmGetImage + XShmPutImage) VS GTK+?
Доброго времени суток.
Написал программу, которая содержимое одного окна отображает в другом. Допустим у меня есть Xlib'ный тип Window, есть переменные этого типа, SrcWin и TrgWin, для удобства у обоих один и тот же размер (683*752), который никогда не изменится, одна глубина изображения. SrcWin это окно какого то реального приложения.
Программа раз в 40мс копирует изображение из SrcWin в TrgWin, с помощью XGetImage и XPutImage, на i5-3337U программа берёт почти 20% процессорного времени, процесс Xorg загружает проц примерно на столько же.
Программа работает как ожидалось, однако меня сильно напрягает высокая нагрузка на процессор.
Три вопроса: 1) Альтернативы, указанные в названии темы, могут значительно снизить нагрузку на процессор? Просто было бы здорово, не копировать данные, а отображать буфер пикселей одного окна в соответствующий буфер другого (скопировать значение указателя на область памяти с изображением которое надо отобразить).
2) Читал, что в некоторых тулкитах типа QT, есть такая штука как window-damage event, которую я понимаю как событие, которое появляется, если хотя бы один пиксель был в окне изменён, правильно ли я понимаю суть этого события, и есть ли аналог в Xlib? А то подход, когда надо гонять данные туда сюда каждые 40мс, даже если ничего не поменялось, не выглядит как лучшее решение данной задачи.
3) Может кто в курсе, как работает window-switcher(alt+tab) в KDE? Он ведь отображает содержимое окон в реальном времени, ну или во всяком случае оперативно реагирует на изменения окон которые он отрисовывает, и при этом не напрягает процессор.