Проблема:
Я создал небольшую программу, отображающую графику c, используя X11 / Xlib для Linux системы .
Он должен знать размер окна, поэтому я сделал это с XGetWindowAttributes()
, но после теста som я обнаружил, что оно немного слишком медленно на мой вкус (см. Тест) , Это не большое замедление , но программа без него намного быстрее, чем одна функция!
Кроме того, в некоторых конфигурациях кода медлительность вызывает случайное мерцание.
Что бы я хотел сделать:
Я был бы очень рад, если бы был способ узнать размер окна и использовать меньше процессорного времени .
Если это невозможно, не стесняйтесь сказать, в любом случае, это ответит на вопрос!
Контрольный показатель:
Это сделано путем добавления небольшого хронометра в программе он находит время, потраченное на некоторые части программы. Каждый цикл составляет в общей сложности 60 программных циклов, что приводит к ~ одной секунде.
Вот очень упрощенный код теста:
#include ManyLibraries
main( ) {
uint64_t Time1, Time2, Time3; // Vars for time measure
uint64_t Delay1, Delay2; // Vars for time storing
uint8_t Cycles;
bool XGWAEnable = true; // In truth, the user can choose
for(Cycles = 0; Cycles < 60; Cycles ++) {
Time1 = GetCurrentMilliTime();
if(XGWAEnable) {
UpdateWindowSize(); // Function that use XGWA to get window size
}
Time2 = GetCurrentMilliTime();
ObjectSimulation(); // Moves the objects (few squares)
Render(); // Draws the squares
Time3 = GetCurrentMilliTime();
Delay1 = Time2 - Time1;
Delay2 = Time3 - Time2;
WaitFrame(); // Waits for a screen refresh
}
std::cout << Delay1 << ' ' << Delay2 << ' ' << Delay1 + Delay2;
return 0;
}
Бенчмарк протестирован на моем ноутбуке в Ubuntu 18.04.
| XGWA enabled? | Cycles | XGWA | Code rest | Total code |
Run 1 | true | 60 | 32 ms | 8 ms | 40 ms |
Run 2 | false | 60 | 0 ms | 6 ms | 6 ms |
Run 3 | true | 60 | 31 ms | 7 ms | 38 ms |
Run 4 | false | 60 | 0 ms | 7 ms | 7 ms |
Run 5 | true | 60 | 32 ms | 8 ms | 40 ms |
Run 6 | false | 60 | 0 ms | 7 ms | 7 ms |
Run 7 | true | 60 | 30 ms | 7 ms | 37 ms |
Run 8 | false | 60 | 0 ms | 8 ms | 8 ms |
Моя программа не так точна, но я думаю, вы поняли.
И, кстати, XGWA означает XGetWindowAttributes()