저는 Linux에서 그래픽 프레임워크의 대기 시간/처리 시간을 측정할 수 있는 애플리케이션을 구축하려고 합니다. 내 아이디어는 다양한 그래픽 및 UI 프레임워크(예: SDL, OpenGL, Qt...) 프로그램을 사용하여 화면 색상(예: 검은색에서 흰색으로)을 변경하여 입력 이벤트(예: 마우스 클릭)에 반응하는 간단한 방법을 구현하는 것입니다. 각 프로그램의 지연 시간을 측정하기 위해 입력 이벤트가 기계에 도착하는 시점부터(저는 evdev를 사용합니다) 일종의 프레임 버퍼에서 픽셀을 업데이트하는 시점까지의 시간을 측정하는 별도의 프로그램을 구현하고 싶습니다. 가능한 한 신청서에) ). 두 번째 프로그램도 vblank 이벤트와 독립적이어야 합니다. 왜냐하면 사용자가 무언가를 볼 수 있는 때가 아니라 렌더링이 완료되는 시점에 관심이 있기 때문입니다.
내 문제는 두 번째 프로그램을 사용하여 프레임 버퍼 내용을 얻는 것입니다. 나는 fbdev 또는 libdrm을 사용하여 프레임 버퍼 내용을 가져왔습니다.이 튜토리얼), 그러나 두 가지 모두 활성 XServer가 없는 터미널에서 프로그램을 실행해야 합니다(외부 유효성으로 인해 선호함). 나는 또한MITXShm의 내용을 검색합니다.
이것이 도움이 될 경우를 대비하여 현재 XShm을 사용하는 방법입니다.
// get one pixel at coordinates x/y with XShm
XShmGetImage(display, rootWindow, image, x, y, 0x00ffffff);
// store red value into variable
unsigned int color = image->data[2];
if(color != lastcolor)
{
log(time_micros(), color);
}
XServer가 실행되는 동안 프레임 버퍼 콘텐츠(X 또는 DRM에서)를 검색하는 빠르고 안정적인 방법이 있습니까? 아니면 XShm이 지금 우리가 할 수 있는 최선입니까?